Source Code

(define-constant ERR-NOT-AUTHORIZED (err u100))
(define-constant ERR-BUSINESS-NOT-FOUND (err u101))
(define-constant ERR-VERIFICATION-FAILED (err u102))

(define-map business-verifications
  { business-id: (string-ascii 50) }
  {
    business-name: (string-ascii 100),
    registration-number: (string-ascii 50),
    country: (string-ascii 30),
    business-type: (string-ascii 50),
    verified: bool,
    verification-date: uint,
    verifier: principal,
    documents-hash: (buff 32)
  }
)

(define-map verification-history
  { business-id: (string-ascii 50), record-id: uint }
  {
    action: (string-ascii 50),
    timestamp: uint,
    performer: principal,
    notes: (string-ascii 200)
  }
)

(define-data-var verifier-role principal tx-sender)

(define-public (submit-business-verification
  (business-id (string-ascii 50))
  (business-name (string-ascii 100))
  (reg-number (string-ascii 50))
  (country (string-ascii 30))
  (biz-type (string-ascii 50))
  (docs-hash (buff 32))
)
  (ok (map-set business-verifications
    { business-id: business-id }
    {
      business-name: business-name,
      registration-number: reg-number,
      country: country,
      business-type: biz-type,
      verified: false,
      verification-date: u0,
      verifier: tx-sender,
      documents-hash: docs-hash
    }
  ))
)

(define-public (approve-verification (business-id (string-ascii 50)) (record-id uint))
  (let ((business (unwrap! (map-get? business-verifications { business-id: business-id }) ERR-BUSINESS-NOT-FOUND)))
    (asserts! (is-eq tx-sender (var-get verifier-role)) ERR-NOT-AUTHORIZED)
    (map-set business-verifications
      { business-id: business-id }
      (merge business { verified: true, verification-date: stacks-block-height })
    )
    (ok (map-set verification-history
      { business-id: business-id, record-id: record-id }
      {
        action: "approved",
        timestamp: stacks-block-height,
        performer: tx-sender,
        notes: ""
      }
    ))
  )
)

(define-public (revoke-verification (business-id (string-ascii 50)) (record-id uint) (reason (string-ascii 200)))
  (let ((business (unwrap! (map-get? business-verifications { business-id: business-id }) ERR-BUSINESS-NOT-FOUND)))
    (asserts! (is-eq tx-sender (var-get verifier-role)) ERR-NOT-AUTHORIZED)
    (map-set business-verifications
      { business-id: business-id }
      (merge business { verified: false })
    )
    (ok (map-set verification-history
      { business-id: business-id, record-id: record-id }
      {
        action: "revoked",
        timestamp: stacks-block-height,
        performer: tx-sender,
        notes: reason
      }
    ))
  )
)

(define-read-only (get-business-info (business-id (string-ascii 50)))
  (map-get? business-verifications { business-id: business-id })
)

(define-read-only (get-verification-record (business-id (string-ascii 50)) (record-id uint))
  (map-get? verification-history { business-id: business-id, record-id: record-id })
)

(define-public (update-verifier-role (new-verifier principal))
  (begin
    (asserts! (is-eq tx-sender (var-get verifier-role)) ERR-NOT-AUTHORIZED)
    (ok (var-set verifier-role new-verifier))
  )
)

(define-public (update-documents-hash (business-id (string-ascii 50)) (new-hash (buff 32)))
  (let ((business (unwrap! (map-get? business-verifications { business-id: business-id }) ERR-BUSINESS-NOT-FOUND)))
    (ok (map-set business-verifications
      { business-id: business-id }
      (merge business { documents-hash: new-hash })
    ))
  )
)

Functions (7)

FunctionAccessArgs
submit-business-verificationpublicbusiness-id: (string-ascii 50
approve-verificationpublicbusiness-id: (string-ascii 50
revoke-verificationpublicbusiness-id: (string-ascii 50
get-business-inforead-onlybusiness-id: (string-ascii 50
get-verification-recordread-onlybusiness-id: (string-ascii 50
update-verifier-rolepublicnew-verifier: principal
update-documents-hashpublicbusiness-id: (string-ascii 50