(impl-trait .sip-010-trait.sip-010-trait)
(define-constant err-owner-only (err u6000))
(define-constant err-not-token-owner (err u4))
(define-constant err-not-standard-principal (err u6001))
(define-constant err-not-proposed-owner (err u6002))
(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 soda)
(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? soda 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 "SODAX")
)
(define-read-only (get-symbol)
(ok "SODA")
)
(define-read-only (get-decimals)
(ok u6)
)
(define-read-only (get-balance (who principal))
(ok (ft-get-balance soda who))
)
(define-read-only (get-total-supply)
(ok (ft-get-supply soda))
)
(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? soda amount recipient)
)
)
(define-public (burn (amount uint) (sender principal))
(begin
(asserts! (is-eq contract-caller sender) err-not-token-owner)
(ft-burn? soda amount sender)
)
)