Source Code

(define-trait soulbound-token-trait
  ((mint (principal uint) (response bool uint))
   (burn (principal) (response bool uint))
   (owner-of (uint) (response (optional principal) uint))
   (balance-of (principal) (response uint uint))))

(define-constant token-name u"ConsensualSoulboundToken")
(define-constant token-symbol u"CSBT")
(define-constant token-decimals u0)
(define-data-var total-supply-var uint u0)
(define-map balances principal uint)
(define-map owners uint principal)


(define-private (is-restricted) true)
(define-read-only (get-restrict-assets) (is-restricted))


(define-private (get-owner (token-id uint))
  (map-get? owners token-id))

(define-private (get-balance (owner principal))
  (default-to u0 (map-get? balances owner)))

(define-private (do-mint (recipient principal) (token-id uint))
  (begin
    (map-set owners token-id recipient)
    (map-set balances recipient (+ (get-balance recipient) u1))
    (var-set total-supply-var (+ (var-get total-supply-var) u1))
    true))

(define-public (mint (recipient principal) (token-id uint))
  (if (is-none (get-owner token-id))
      (begin
        (do-mint recipient token-id)
        (ok true))
      (err u100)))


(define-private (do-burn (owner-principal principal) (token-id uint))
  (begin
    (map-delete owners token-id)
    (map-set balances owner-principal (- (get-balance owner-principal) u1))
    (var-set total-supply-var (- (var-get total-supply-var) u1))
    true))

(define-public (burn (token-id uint))
  (let ((owner (get-owner token-id)))
    (if (is-some owner)
        (let ((owner-principal (unwrap! owner (err u101))))
          (do-burn owner-principal token-id)
          (ok true))
        (err u102))))


(define-read-only (owner-of (token-id uint))
  (ok (get-owner token-id)))

(define-read-only (balance-of (owner principal))
  (ok (get-balance owner)))



Functions (10)

FunctionAccessArgs
is-restrictedprivate
get-restrict-assetsread-only
get-ownerprivatetoken-id: uint
get-balanceprivateowner: principal
do-mintprivaterecipient: principal, token-id: uint
mintpublicrecipient: principal, token-id: uint
do-burnprivateowner-principal: principal, token-id: uint
burnpublictoken-id: uint
owner-ofread-onlytoken-id: uint
balance-ofread-onlyowner: principal