Source Code

;; Legal Smart Contracts
;; Create and execute legal agreements

(define-data-var next-contract-id uint u1)

(define-map legal-contracts
  uint
  {
    party-a: principal,
    party-b: principal,
    terms-hash: (buff 32),
    signed-a: bool,
    signed-b: bool,
    executed: bool
  }
)

(define-read-only (get-contract (contract-id uint))
  (map-get? legal-contracts contract-id)
)

(define-public (create-contract (party-b principal) (terms-hash (buff 32)))
  (let ((contract-id (var-get next-contract-id)))
    (map-set legal-contracts contract-id {
      party-a: tx-sender,
      party-b: party-b,
      terms-hash: terms-hash,
      signed-a: true,
      signed-b: false,
      executed: false
    })
    (var-set next-contract-id (+ contract-id u1))
    (ok contract-id)
  )
)

(define-public (sign-contract (contract-id uint))
  (let ((contract (unwrap! (map-get? legal-contracts contract-id) (err u100))))
    (asserts! (is-eq tx-sender (get party-b contract)) (err u101))
    (map-set legal-contracts contract-id (merge contract { signed-b: true }))
    (ok true)
  )
)

Functions (3)

FunctionAccessArgs
get-contractread-onlycontract-id: uint
create-contractpublicparty-b: principal, terms-hash: (buff 32
sign-contractpubliccontract-id: uint