Source Code

(define-fungible-token abstract-token)

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

(define-data-var token-name (string-ascii 32) "AbstractToken")
(define-data-var token-symbol (string-ascii 10) "ABS")
(define-data-var token-decimals uint u6)

(define-map operator-approvals
    {owner: principal, operator: principal}
    bool
)

(define-map metadata-extensions
    (string-ascii 64)
    (buff 256)
)

(define-read-only (get-name)
    (ok (var-get token-name))
)

(define-read-only (get-symbol)
    (ok (var-get token-symbol))
)

(define-read-only (get-decimals)
    (ok (var-get token-decimals))
)

(define-read-only (get-balance (account principal))
    (ok (ft-get-balance abstract-token account))
)

(define-read-only (get-total-supply)
    (ok (ft-get-supply abstract-token))
)

(define-read-only (is-operator-for (owner principal) (operator principal))
    (ok (default-to false (map-get? operator-approvals {owner: owner, operator: operator})))
)

(define-read-only (get-metadata-extension (key (string-ascii 64)))
    (ok (map-get? metadata-extensions key))
)

(define-public (mint (amount uint) (recipient principal))
    (ft-mint? abstract-token amount recipient)
)

(define-public (transfer (amount uint) (sender principal) (recipient principal))
    (begin
        (asserts! (or (is-eq tx-sender sender) (default-to false (map-get? operator-approvals {owner: sender, operator: tx-sender}))) ERR-NOT-AUTHORIZED)
        (ft-transfer? abstract-token amount sender recipient)
    )
)

(define-public (burn (amount uint))
    (ft-burn? abstract-token amount tx-sender)
)

(define-public (authorize-operator (operator principal))
    (begin
        (ok (map-set operator-approvals {owner: tx-sender, operator: operator} true))
    )
)

(define-public (revoke-operator (operator principal))
    (begin
        (ok (map-delete operator-approvals {owner: tx-sender, operator: operator}))
    )
)

(define-public (set-metadata-extension (key (string-ascii 64)) (value (buff 256)))
    (begin
        (ok (map-set metadata-extensions key value))
    )
)

(define-public (batch-transfer (recipients (list 100 {to: principal, amount: uint})))
    (ok (fold batch-transfer-iter recipients true))
)

(define-private (batch-transfer-iter (recipient {to: principal, amount: uint}) (prev-result bool))
    (match (ft-transfer? abstract-token (get amount recipient) tx-sender (get to recipient))
        success prev-result
        error false
    )
)

(define-read-only (get-contract-hash)
    (contract-hash? .abstract-token)
)

Functions (16)

FunctionAccessArgs
get-nameread-only
get-symbolread-only
get-decimalsread-only
get-balanceread-onlyaccount: principal
get-total-supplyread-only
is-operator-forread-onlyowner: principal, operator: principal
get-metadata-extensionread-onlykey: (string-ascii 64
mintpublicamount: uint, recipient: principal
transferpublicamount: uint, sender: principal, recipient: principal
burnpublicamount: uint
authorize-operatorpublicoperator: principal
revoke-operatorpublicoperator: principal
set-metadata-extensionpublickey: (string-ascii 64
batch-transferpublicrecipients: (list 100 {to: principal, amount: uint}
batch-transfer-iterprivaterecipient: {to: principal, amount: uint}, prev-result: bool
get-contract-hashread-only