Source Code

;; mahr-escrow -- marriage mahr (dowry) escrow service
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-constant ERR-NONE (err u404))
(define-data-var escrow-count uint u0)
(define-map escrows uint { groom: principal, bride: principal, amount: uint, description: (string-utf8 200), status: (string-ascii 20), block: uint })

(define-public (create-escrow (bride principal) (amount uint) (description (string-utf8 200)))
  (let ((id (+ (var-get escrow-count) u1)))
    (var-set escrow-count id)
    (map-set escrows id { groom: tx-sender, bride: bride, amount: amount, description: description, status: "pending", block: stacks-block-height })
    (ok id)))

(define-public (confirm-receipt (id uint))
  (let ((e (unwrap! (map-get? escrows id) ERR-NONE)))
    (asserts! (is-eq tx-sender (get bride e)) ERR-AUTH)
    (map-set escrows id (merge e { status: "confirmed" })) (ok true)))

(define-public (cancel-escrow (id uint))
  (let ((e (unwrap! (map-get? escrows id) ERR-NONE)))
    (asserts! (is-eq tx-sender (get groom e)) ERR-AUTH)
    (map-set escrows id (merge e { status: "cancelled" })) (ok true)))

(define-read-only (get-escrow (id uint)) (map-get? escrows id))
(define-read-only (get-escrow-count) (var-get escrow-count))

Functions (5)

FunctionAccessArgs
create-escrowpublicbride: principal, amount: uint, description: (string-utf8 200
confirm-receiptpublicid: uint
cancel-escrowpublicid: uint
get-escrowread-onlyid: uint
get-escrow-countread-only