Source Code

(impl-trait .sip-010-trait.sip-010-trait)

(define-constant err-owner-only (err u5000))
(define-constant err-not-token-owner (err u4))
(define-constant err-not-standard-principal (err u5001))
(define-constant err-not-proposed-owner (err u5002))

(define-data-var contract-owner principal tx-sender)
(define-data-var proposed-owner (optional principal) none)
(define-data-var token-uri (optional (string-utf8 256)) none)

;; No maximum supply!
(define-fungible-token bnusd)

(define-public (transfer (amount uint) (sender principal) (recipient principal) (memo (optional (buff 34))))
    (begin
        (asserts! (or (is-eq tx-sender sender) (is-eq contract-caller sender)) err-not-token-owner)
        (try! (ft-transfer? bnusd amount sender recipient))
        (match memo to-print (print to-print) 0x)
        (ok true)
    )
)

(define-public (propose-contract-owner (new-owner principal))
    (begin
        (asserts! (is-eq contract-caller (var-get contract-owner)) err-owner-only)
        (asserts! (is-standard new-owner) err-not-standard-principal)
        (ok (var-set proposed-owner (some new-owner)))
))

(define-public (accept-contract-ownership)
    (let
        ((new-owner (unwrap! (var-get proposed-owner) err-not-proposed-owner)))
        (asserts! (is-eq contract-caller new-owner) err-not-proposed-owner)
        (var-set contract-owner new-owner)
        (ok (var-set proposed-owner none))
    )
)

(define-public (set-token-uri (uri (optional (string-utf8 256))))
    (begin
        (asserts! (is-eq contract-caller (var-get contract-owner)) err-owner-only)
        (var-set token-uri uri)
        (ok true)
    )
)

(define-read-only (get-name)
    (ok "Balanced Dollar")
)

(define-read-only (get-symbol)
    (ok "bnUSD")
)

(define-read-only (get-decimals)
    (ok u6)
)

(define-read-only (get-balance (who principal))
    (ok (ft-get-balance bnusd who))
)

(define-read-only (get-total-supply)
    (ok (ft-get-supply bnusd))
)


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


(define-public (mint (amount uint) (recipient principal))
    (begin
        (asserts! (is-eq contract-caller (var-get contract-owner)) err-owner-only)
        (ft-mint? bnusd amount recipient)
    )
)

(define-public (burn (amount uint) (sender principal))
    (begin
        (asserts! (is-eq contract-caller sender) err-not-token-owner)
        (ft-burn? bnusd amount sender)
    )
)

Functions (12)

FunctionAccessArgs
transferpublicamount: uint, sender: principal, recipient: principal, memo: (optional (buff 34
propose-contract-ownerpublicnew-owner: principal
accept-contract-ownershippublic
set-token-uripublicuri: (optional (string-utf8 256
get-nameread-only
get-symbolread-only
get-decimalsread-only
get-balanceread-onlywho: principal
get-total-supplyread-only
get-token-uriread-only
mintpublicamount: uint, recipient: principal
burnpublicamount: uint, sender: principal