Source Code

(define-map escrows uint {buyer: principal, seller: principal, amount: uint, released: bool})
(define-data-var escrow-counter uint u0)
(define-read-only (get-escrow (id uint)) (map-get? escrows id))
(define-read-only (get-escrow-count) (var-get escrow-counter))
(define-public (create-escrow (seller principal) (amount uint))
  (let ((id (var-get escrow-counter)))
    (map-set escrows id {buyer: tx-sender, seller: seller, amount: amount, released: false})
    (var-set escrow-counter (+ id u1))
    (ok id)))
(define-public (release-escrow (id uint))
  (let ((escrow (unwrap! (get-escrow id) (err u1))))
    (asserts! (is-eq tx-sender (get buyer escrow)) (err u2))
    (map-set escrows id (merge escrow {released: true}))
    (ok true)))

Functions (4)

FunctionAccessArgs
get-escrowread-onlyid: uint
get-escrow-countread-only
create-escrowpublicseller: principal, amount: uint
release-escrowpublicid: uint