diff --git a/contracts/agent/agent-account.clar b/contracts/agent/agent-account.clar index 27b8243..1b9ad40 100644 --- a/contracts/agent/agent-account.clar +++ b/contracts/agent/agent-account.clar @@ -225,6 +225,32 @@ ) ) +;; Execute a passed proposal through an approved voting contract +(define-public (execute-proposal + (votingContract ) + (proposalId uint) + (proposal ) + ) + (begin + (asserts! (use-proposals-allowed) ERR_OPERATION_NOT_ALLOWED) + (asserts! + (is-approved-contract (contract-of votingContract) APPROVED_CONTRACT_VOTING) + ERR_CONTRACT_NOT_APPROVED + ) + (print { + notification: "agent-account/execute-proposal", + payload: { + votingContract: (contract-of votingContract), + proposalId: proposalId, + proposal: (contract-of proposal), + sender: tx-sender, + caller: contract-caller + } + }) + (as-contract (contract-call? votingContract execute-proposal proposalId proposal)) + ) +) + ;; ============================================================ ;; CONFIGURATION (owner or agent with permission) ;; ============================================================ diff --git a/contracts/traits/agent-traits.clar b/contracts/traits/agent-traits.clar index a02ea33..0de17d0 100644 --- a/contracts/traits/agent-traits.clar +++ b/contracts/traits/agent-traits.clar @@ -54,6 +54,11 @@ ( uint ) (response bool uint) ) + ;; Execute a passed + concluded proposal through the agent account + (execute-proposal + ( uint ) + (response bool uint) + ) )) ;; Agent account configuration interface. diff --git a/contracts/traits/dao-traits.clar b/contracts/traits/dao-traits.clar index 3f124ce..b4e28dd 100644 --- a/contracts/traits/dao-traits.clar +++ b/contracts/traits/dao-traits.clar @@ -120,6 +120,10 @@ (uint ) (response bool uint) ) + (execute-proposal + (uint ) + (response bool uint) + ) (get-proposal-data (uint) (response