Source Code

;; Multi-Sig Wallet Manager

(define-constant contract-owner tx-sender)
(define-data-var required-signatures uint u2)

(define-map signers principal bool)
(define-map pending-transactions uint { amount: uint, recipient: principal, signatures: uint })
(define-data-var next-tx-id uint u1)

(define-public (add-signer (signer principal))
  (begin
    (asserts! (is-eq tx-sender contract-owner) (err u100))
    (map-set signers signer true)
    (ok true)
  )
)

(define-public (propose-transaction (amount uint) (recipient principal))
  (let ((tx-id (var-get next-tx-id)))
    (asserts! (default-to false (map-get? signers tx-sender)) (err u101))
    (map-set pending-transactions tx-id { amount: amount, recipient: recipient, signatures: u1 })
    (var-set next-tx-id (+ tx-id u1))
    (ok tx-id)
  )
)

Functions (2)

FunctionAccessArgs
add-signerpublicsigner: principal
propose-transactionpublicamount: uint, recipient: principal