Source Code

;; Identity Registry Contract

(define-constant err-already-registered (err u100))
(define-constant err-not-found (err u101))

(define-map identities
  principal
  {
    did: (string-ascii 256),
    registered-at: uint,
    active: bool
  }
)

(define-read-only (get-identity (user principal))
  (map-get? identities user)
)

(define-public (register-identity (did (string-ascii 256)))
  (begin
    (asserts! (is-none (map-get? identities tx-sender)) err-already-registered)
    (map-set identities tx-sender {
      did: did,
      registered-at: block-height,
      active: true
    })
    (ok true)
  )
)

(define-public (update-identity (new-did (string-ascii 256)))
  (let ((identity (unwrap! (map-get? identities tx-sender) err-not-found)))
    (map-set identities tx-sender (merge identity { did: new-did }))
    (ok true)
  )
)

Functions (3)

FunctionAccessArgs
get-identityread-onlyuser: principal
register-identitypublicdid: (string-ascii 256
update-identitypublicnew-did: (string-ascii 256