(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)))