Source Code

;; Micropayments
;; Process small payments for content

(define-map balances principal uint)

(define-read-only (get-balance (account principal))
  (default-to u0 (map-get? balances account))
)

(define-public (deposit (amount uint))
  (begin
    (try! (stx-transfer? amount tx-sender (as-contract tx-sender)))
    (ok (map-set balances tx-sender (+ (get-balance tx-sender) amount)))
  )
)

(define-public (pay-creator (creator principal) (amount uint))
  (let ((sender-balance (get-balance tx-sender)))
    (asserts! (>= sender-balance amount) (err u100))
    (map-set balances tx-sender (- sender-balance amount))
    (ok (map-set balances creator (+ (get-balance creator) amount)))
  )
)

(define-public (withdraw (amount uint))
  (let ((balance (get-balance tx-sender)))
    (asserts! (>= balance amount) (err u100))
    (try! (as-contract (stx-transfer? amount tx-sender tx-sender)))
    (ok (map-set balances tx-sender (- balance amount)))
  )
)

Functions (4)

FunctionAccessArgs
get-balanceread-onlyaccount: principal
depositpublicamount: uint
pay-creatorpubliccreator: principal, amount: uint
withdrawpublicamount: uint