Source Code

(define-trait payable-token-trait
  ((transfer (uint principal principal uint) (response bool uint))
   (approve (principal uint) (response bool uint))
   (transfer-from (principal principal uint) (response bool uint))
   (allowance (principal principal) (response uint uint))
   (balance-of (principal) (response uint uint))
   (total-supply () (response uint uint))
   (on-transfer-received (principal principal uint (optional (buff 34))) (response bool uint))
   (on-approval-received (principal uint (optional (buff 34))) (response bool uint))))

(define-constant token-name u"PayableToken")
(define-constant token-symbol u"PAYT")
(define-constant token-decimals u6)
(define-data-var total-supply-var uint u0)
(define-map balances principal uint)
(define-map allowances {owner: principal, spender: principal} uint)


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

(define-public (transfer (sender principal) (recipient principal) (amount uint))
  (let ((sender-balance (default-to u0 (map-get? balances sender))))
    (if (>= sender-balance amount)
        (begin
          (map-set balances sender (- sender-balance amount))
          (map-set balances recipient (+ (default-to u0 (map-get? balances recipient)) amount))
          (ok true))
        (err u100))))

(define-public (approve (spender principal) (amount uint))
  (let ((owner tx-sender))
    (map-set allowances {owner: owner, spender: spender} amount)
    (ok true)))

(define-public (transfer-from (owner principal) (recipient principal) (amount uint))
  (let ((allow (default-to u0 (map-get? allowances {owner: owner, spender: tx-sender})))
        (owner-balance (default-to u0 (map-get? balances owner))))
    (if (and (>= allow amount) (>= owner-balance amount))
        (begin
          (map-set allowances {owner: owner, spender: tx-sender} (- allow amount))
          (map-set balances owner (- owner-balance amount))
          (map-set balances recipient (+ (default-to u0 (map-get? balances recipient)) amount))
          (ok true))
        (err u101))))


(define-private (get-allowance (owner principal) (spender principal))
  (default-to u0 (map-get? allowances {owner: owner, spender: spender})))

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


(define-read-only (allowance (owner principal) (spender principal))
  (ok (get-allowance owner spender)))

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


(define-read-only (total-supply)
  (ok (var-get total-supply-var)))

(define-public (on-transfer-received (operator principal) (from principal) (amount uint) (data (optional (buff 34))))
  (ok true))

(define-public (on-approval-received (owner principal) (amount uint) (data (optional (buff 34))))
  (ok true))



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

(define-public (mint (recipient principal) (amount uint))
  (begin
    (do-mint recipient amount)
    (ok true)))



Functions (14)

FunctionAccessArgs
is-restrictedprivate
get-restrict-assetsread-only
transferpublicsender: principal, recipient: principal, amount: uint
approvepublicspender: principal, amount: uint
transfer-frompublicowner: principal, recipient: principal, amount: uint
get-allowanceprivateowner: principal, spender: principal
get-balanceprivateowner: principal
allowanceread-onlyowner: principal, spender: principal
balance-ofread-onlyowner: principal
total-supplyread-only
on-transfer-receivedpublicoperator: principal, from: principal, amount: uint, data: (optional (buff 34
on-approval-receivedpublicowner: principal, amount: uint, data: (optional (buff 34
do-mintprivaterecipient: principal, amount: uint
mintpublicrecipient: principal, amount: uint