Source Code


;; on-chain-identity.clar
;; Stores DID-like attributes or profile data on-chain.
;; CLARITY VERSION: 4

(define-constant ERR-NOT-AUTHORIZED (err u100))

(define-map identities
    principal
    {
        name: (string-utf8 64),
        bio: (string-utf8 256),
        avatar-url: (string-utf8 128),
        verified: bool
    }
)

(define-data-var admin principal tx-sender)

(define-public (set-profile (name (string-utf8 64)) (bio (string-utf8 256)) (avatar-url (string-utf8 128)))
    (let (
        (sender tx-sender)
        (current (default-to {verified: false} (get-profile-raw sender)))
    )
    (map-set identities sender {
        name: name,
        bio: bio,
        avatar-url: avatar-url,
        verified: (get verified current)
    })
    (ok true))
)

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

(define-private (get-profile-raw (user principal))
    (map-get? identities user)
)

(define-public (verify-user (user principal))
    (begin
        (asserts! (is-eq tx-sender (var-get admin)) ERR-NOT-AUTHORIZED)
        (match (map-get? identities user)
            profile (begin
                (map-set identities user (merge profile { verified: true }))
                (ok true)
            )
            (err u101) ;; Profile not found
        )
    )
)

Functions (4)

FunctionAccessArgs
set-profilepublicname: (string-utf8 64
get-profileread-onlyuser: principal
get-profile-rawprivateuser: principal
verify-userpublicuser: principal