Source Code

;; Escrow Service V52 - DeFi Contract
;; Generated by Clarity Hub
;; Category: DeFi


(define-constant ERR_UNAUTHORIZED (err u100))
(define-constant ERR_NOT_OWNER (err u101))
(define-constant ERR_INVALID_AMOUNT (err u102))
(define-constant ERR_ALREADY_EXISTS (err u103))
(define-constant ERR_NOT_FOUND (err u104))


(define-data-var contract-owner principal tx-sender)
(define-public (set-owner (new-owner principal))
    (begin
        (asserts! (is-eq tx-sender (var-get contract-owner)) ERR_NOT_OWNER)
        (var-set contract-owner new-owner)
        (ok true))
)


(define-map escrows uint { buyer: principal, seller: principal, amount: uint, state: (string-ascii 10) })
(define-data-var escrow-id uint u0)
(define-public (create (seller principal) (amount uint))
    (let ((id (+ (var-get escrow-id) u1)))
        (var-set escrow-id id)
        (try! (stx-transfer? amount tx-sender (as-contract tx-sender)))
        (map-set escrows id { buyer: tx-sender, seller: seller, amount: amount, state: "OPEN" })
        (ok id)
    )
)
(define-public (confirm (id uint))
    (let ((escrow (unwrap! (map-get? escrows id) ERR_NOT_FOUND)))
        (asserts! (is-eq tx-sender (get buyer escrow)) ERR_UNAUTHORIZED)
        (map-set escrows id (merge escrow { state: "RELEASED" }))
        (as-contract (stx-transfer? (get amount escrow) tx-sender (get seller escrow)))
    )
)

Functions (3)

FunctionAccessArgs
set-ownerpublicnew-owner: principal
createpublicseller: principal, amount: uint
confirmpublicid: uint