From dcb0b38160ae6ef700b5c1c6f706fb0c6f0c8369 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Fri, 3 Jan 2025 15:47:53 -0700 Subject: [PATCH 01/84] docs: Add markdown documentation for DAO contract functions --- docs/dao/contract-functions.md | 122 +++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 docs/dao/contract-functions.md diff --git a/docs/dao/contract-functions.md b/docs/dao/contract-functions.md new file mode 100644 index 00000000..0ae89343 --- /dev/null +++ b/docs/dao/contract-functions.md @@ -0,0 +1,122 @@ +# DAO Contract Functions + +## aibtcdev-base-dao + +| Function Name | Type | Description | +|--------------|------|-------------| +| construct | public | Initial construction of the DAO | +| execute | public | Execute Clarity code in a proposal | +| set-extension | public | Add an extension or update status of existing one | +| set-extensions | public | Add multiple extensions or update status | +| request-extension-callback | public | Request a callback from an extension | +| is-extension | read-only | Check if given principal is an extension | +| executed-at | read-only | Get block height when proposal was executed | + +## aibtc-ext001-actions + +| Function Name | Type | Description | +|--------------|------|-------------| +| callback | public | Extension callback handler | +| set-protocol-treasury | public | Set the protocol treasury contract | +| set-voting-token | public | Set the voting token contract | +| propose-action | public | Create a new action proposal | +| vote-on-proposal | public | Vote on an existing proposal | +| conclude-proposal | public | Conclude and execute a proposal | +| get-protocol-treasury | read-only | Get the protocol treasury principal | +| get-voting-token | read-only | Get the voting token principal | +| get-proposal | read-only | Get proposal details by ID | +| get-total-votes | read-only | Get total votes for proposal/voter | +| is-initialized | read-only | Check if contract is initialized | +| get-voting-period | read-only | Get the voting period length | +| get-voting-quorum | read-only | Get the required voting quorum | +| get-total-proposals | read-only | Get total number of proposals | + +## aibtc-ext002-bank-account + +| Function Name | Type | Description | +|--------------|------|-------------| +| callback | public | Extension callback handler | +| set-account-holder | public | Set the account holder principal | +| set-withdrawal-period | public | Set the withdrawal period | +| set-withdrawal-amount | public | Set the withdrawal amount | +| override-last-withdrawal-block | public | Override the last withdrawal block | +| deposit-stx | public | Deposit STX to the contract | +| withdraw-stx | public | Withdraw STX from the contract | +| get-deployed-block | read-only | Get contract deployment block | +| get-account-balance | read-only | Get current account balance | +| get-account-holder | read-only | Get current account holder | +| get-last-withdrawal-block | read-only | Get last withdrawal block | +| get-withdrawal-period | read-only | Get current withdrawal period | +| get-withdrawal-amount | read-only | Get current withdrawal amount | +| get-account-terms | read-only | Get all account terms | + +## aibtc-ext003-direct-execute + +| Function Name | Type | Description | +|--------------|------|-------------| +| callback | public | Extension callback handler | +| set-protocol-treasury | public | Set the protocol treasury contract | +| set-voting-token | public | Set the voting token contract | +| create-proposal | public | Create a new proposal | +| vote-on-proposal | public | Vote on an existing proposal | +| conclude-proposal | public | Conclude and execute a proposal | +| get-protocol-treasury | read-only | Get the protocol treasury principal | +| get-voting-token | read-only | Get the voting token principal | +| get-proposal | read-only | Get proposal details by ID | +| get-total-votes | read-only | Get total votes for proposal/voter | +| is-initialized | read-only | Check if contract is initialized | +| get-voting-period | read-only | Get the voting period length | +| get-voting-quorum | read-only | Get the required voting quorum | + +## aibtc-ext004-messaging + +| Function Name | Type | Description | +|--------------|------|-------------| +| callback | public | Extension callback handler | +| send | public | Send a message on-chain | + +## aibtc-ext005-payments + +| Function Name | Type | Description | +|--------------|------|-------------| +| callback | public | Extension callback handler | +| set-payment-address | public | Set payment address for invoices | +| add-resource | public | Add a new resource | +| toggle-resource | public | Toggle resource enabled status | +| toggle-resource-by-name | public | Toggle resource by name | +| pay-invoice | public | Pay invoice for a resource | +| pay-invoice-by-resource-name | public | Pay invoice by resource name | +| get-total-users | read-only | Get total registered users | +| get-user-index | read-only | Get user index by address | +| get-user-data | read-only | Get user data by index | +| get-user-data-by-address | read-only | Get user data by address | +| get-total-resources | read-only | Get total registered resources | +| get-resource-index | read-only | Get resource index by name | +| get-resource | read-only | Get resource data by index | +| get-resource-by-name | read-only | Get resource data by name | +| get-total-invoices | read-only | Get total registered invoices | +| get-invoice | read-only | Get invoice data by index | +| get-recent-payment | read-only | Get recent payment by indexes | +| get-recent-payment-data | read-only | Get recent payment data by indexes | +| get-recent-payment-data-by-address | read-only | Get payment data by address | +| get-payment-address | read-only | Get current payment address | +| get-total-revenue | read-only | Get total contract revenue | +| get-contract-data | read-only | Get aggregate contract data | + +## aibtc-ext006-treasury + +| Function Name | Type | Description | +|--------------|------|-------------| +| callback | public | Extension callback handler | +| allow-asset | public | Add/update asset in allowed list | +| allow-assets | public | Add/update multiple allowed assets | +| deposit-stx | public | Deposit STX to treasury | +| deposit-ft | public | Deposit FT to treasury | +| deposit-nft | public | Deposit NFT to treasury | +| withdraw-stx | public | Withdraw STX from treasury | +| withdraw-ft | public | Withdraw FT from treasury | +| withdraw-nft | public | Withdraw NFT from treasury | +| delegate-stx | public | Delegate STX for stacking | +| revoke-delegate-stx | public | Revoke STX delegation | +| is-allowed-asset | read-only | Check if asset is allowed | +| get-allowed-asset | read-only | Get allowed asset status | From d81e60fc89f396c4278374304c0a920622e8a084 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 3 Jan 2025 16:04:21 -0700 Subject: [PATCH 02/84] fix: apply formatting --- docs/dao/contract-functions.md | 196 ++++++++++++++++----------------- 1 file changed, 98 insertions(+), 98 deletions(-) diff --git a/docs/dao/contract-functions.md b/docs/dao/contract-functions.md index 0ae89343..56868e2c 100644 --- a/docs/dao/contract-functions.md +++ b/docs/dao/contract-functions.md @@ -2,121 +2,121 @@ ## aibtcdev-base-dao -| Function Name | Type | Description | -|--------------|------|-------------| -| construct | public | Initial construction of the DAO | -| execute | public | Execute Clarity code in a proposal | -| set-extension | public | Add an extension or update status of existing one | -| set-extensions | public | Add multiple extensions or update status | -| request-extension-callback | public | Request a callback from an extension | -| is-extension | read-only | Check if given principal is an extension | -| executed-at | read-only | Get block height when proposal was executed | +| Function Name | Type | Description | +| -------------------------- | --------- | ------------------------------------------------- | +| construct | public | Initial construction of the DAO | +| execute | public | Execute Clarity code in a proposal | +| set-extension | public | Add an extension or update status of existing one | +| set-extensions | public | Add multiple extensions or update status | +| request-extension-callback | public | Request a callback from an extension | +| is-extension | read-only | Check if given principal is an extension | +| executed-at | read-only | Get block height when proposal was executed | ## aibtc-ext001-actions -| Function Name | Type | Description | -|--------------|------|-------------| -| callback | public | Extension callback handler | -| set-protocol-treasury | public | Set the protocol treasury contract | -| set-voting-token | public | Set the voting token contract | -| propose-action | public | Create a new action proposal | -| vote-on-proposal | public | Vote on an existing proposal | -| conclude-proposal | public | Conclude and execute a proposal | +| Function Name | Type | Description | +| --------------------- | --------- | ----------------------------------- | +| callback | public | Extension callback handler | +| set-protocol-treasury | public | Set the protocol treasury contract | +| set-voting-token | public | Set the voting token contract | +| propose-action | public | Create a new action proposal | +| vote-on-proposal | public | Vote on an existing proposal | +| conclude-proposal | public | Conclude and execute a proposal | | get-protocol-treasury | read-only | Get the protocol treasury principal | -| get-voting-token | read-only | Get the voting token principal | -| get-proposal | read-only | Get proposal details by ID | -| get-total-votes | read-only | Get total votes for proposal/voter | -| is-initialized | read-only | Check if contract is initialized | -| get-voting-period | read-only | Get the voting period length | -| get-voting-quorum | read-only | Get the required voting quorum | -| get-total-proposals | read-only | Get total number of proposals | +| get-voting-token | read-only | Get the voting token principal | +| get-proposal | read-only | Get proposal details by ID | +| get-total-votes | read-only | Get total votes for proposal/voter | +| is-initialized | read-only | Check if contract is initialized | +| get-voting-period | read-only | Get the voting period length | +| get-voting-quorum | read-only | Get the required voting quorum | +| get-total-proposals | read-only | Get total number of proposals | ## aibtc-ext002-bank-account -| Function Name | Type | Description | -|--------------|------|-------------| -| callback | public | Extension callback handler | -| set-account-holder | public | Set the account holder principal | -| set-withdrawal-period | public | Set the withdrawal period | -| set-withdrawal-amount | public | Set the withdrawal amount | -| override-last-withdrawal-block | public | Override the last withdrawal block | -| deposit-stx | public | Deposit STX to the contract | -| withdraw-stx | public | Withdraw STX from the contract | -| get-deployed-block | read-only | Get contract deployment block | -| get-account-balance | read-only | Get current account balance | -| get-account-holder | read-only | Get current account holder | -| get-last-withdrawal-block | read-only | Get last withdrawal block | -| get-withdrawal-period | read-only | Get current withdrawal period | -| get-withdrawal-amount | read-only | Get current withdrawal amount | -| get-account-terms | read-only | Get all account terms | +| Function Name | Type | Description | +| ------------------------------ | --------- | ---------------------------------- | +| callback | public | Extension callback handler | +| set-account-holder | public | Set the account holder principal | +| set-withdrawal-period | public | Set the withdrawal period | +| set-withdrawal-amount | public | Set the withdrawal amount | +| override-last-withdrawal-block | public | Override the last withdrawal block | +| deposit-stx | public | Deposit STX to the contract | +| withdraw-stx | public | Withdraw STX from the contract | +| get-deployed-block | read-only | Get contract deployment block | +| get-account-balance | read-only | Get current account balance | +| get-account-holder | read-only | Get current account holder | +| get-last-withdrawal-block | read-only | Get last withdrawal block | +| get-withdrawal-period | read-only | Get current withdrawal period | +| get-withdrawal-amount | read-only | Get current withdrawal amount | +| get-account-terms | read-only | Get all account terms | ## aibtc-ext003-direct-execute -| Function Name | Type | Description | -|--------------|------|-------------| -| callback | public | Extension callback handler | -| set-protocol-treasury | public | Set the protocol treasury contract | -| set-voting-token | public | Set the voting token contract | -| create-proposal | public | Create a new proposal | -| vote-on-proposal | public | Vote on an existing proposal | -| conclude-proposal | public | Conclude and execute a proposal | +| Function Name | Type | Description | +| --------------------- | --------- | ----------------------------------- | +| callback | public | Extension callback handler | +| set-protocol-treasury | public | Set the protocol treasury contract | +| set-voting-token | public | Set the voting token contract | +| create-proposal | public | Create a new proposal | +| vote-on-proposal | public | Vote on an existing proposal | +| conclude-proposal | public | Conclude and execute a proposal | | get-protocol-treasury | read-only | Get the protocol treasury principal | -| get-voting-token | read-only | Get the voting token principal | -| get-proposal | read-only | Get proposal details by ID | -| get-total-votes | read-only | Get total votes for proposal/voter | -| is-initialized | read-only | Check if contract is initialized | -| get-voting-period | read-only | Get the voting period length | -| get-voting-quorum | read-only | Get the required voting quorum | +| get-voting-token | read-only | Get the voting token principal | +| get-proposal | read-only | Get proposal details by ID | +| get-total-votes | read-only | Get total votes for proposal/voter | +| is-initialized | read-only | Check if contract is initialized | +| get-voting-period | read-only | Get the voting period length | +| get-voting-quorum | read-only | Get the required voting quorum | ## aibtc-ext004-messaging -| Function Name | Type | Description | -|--------------|------|-------------| -| callback | public | Extension callback handler | -| send | public | Send a message on-chain | +| Function Name | Type | Description | +| ------------- | ------ | -------------------------- | +| callback | public | Extension callback handler | +| send | public | Send a message on-chain | ## aibtc-ext005-payments -| Function Name | Type | Description | -|--------------|------|-------------| -| callback | public | Extension callback handler | -| set-payment-address | public | Set payment address for invoices | -| add-resource | public | Add a new resource | -| toggle-resource | public | Toggle resource enabled status | -| toggle-resource-by-name | public | Toggle resource by name | -| pay-invoice | public | Pay invoice for a resource | -| pay-invoice-by-resource-name | public | Pay invoice by resource name | -| get-total-users | read-only | Get total registered users | -| get-user-index | read-only | Get user index by address | -| get-user-data | read-only | Get user data by index | -| get-user-data-by-address | read-only | Get user data by address | -| get-total-resources | read-only | Get total registered resources | -| get-resource-index | read-only | Get resource index by name | -| get-resource | read-only | Get resource data by index | -| get-resource-by-name | read-only | Get resource data by name | -| get-total-invoices | read-only | Get total registered invoices | -| get-invoice | read-only | Get invoice data by index | -| get-recent-payment | read-only | Get recent payment by indexes | -| get-recent-payment-data | read-only | Get recent payment data by indexes | -| get-recent-payment-data-by-address | read-only | Get payment data by address | -| get-payment-address | read-only | Get current payment address | -| get-total-revenue | read-only | Get total contract revenue | -| get-contract-data | read-only | Get aggregate contract data | +| Function Name | Type | Description | +| ---------------------------------- | --------- | ---------------------------------- | +| callback | public | Extension callback handler | +| set-payment-address | public | Set payment address for invoices | +| add-resource | public | Add a new resource | +| toggle-resource | public | Toggle resource enabled status | +| toggle-resource-by-name | public | Toggle resource by name | +| pay-invoice | public | Pay invoice for a resource | +| pay-invoice-by-resource-name | public | Pay invoice by resource name | +| get-total-users | read-only | Get total registered users | +| get-user-index | read-only | Get user index by address | +| get-user-data | read-only | Get user data by index | +| get-user-data-by-address | read-only | Get user data by address | +| get-total-resources | read-only | Get total registered resources | +| get-resource-index | read-only | Get resource index by name | +| get-resource | read-only | Get resource data by index | +| get-resource-by-name | read-only | Get resource data by name | +| get-total-invoices | read-only | Get total registered invoices | +| get-invoice | read-only | Get invoice data by index | +| get-recent-payment | read-only | Get recent payment by indexes | +| get-recent-payment-data | read-only | Get recent payment data by indexes | +| get-recent-payment-data-by-address | read-only | Get payment data by address | +| get-payment-address | read-only | Get current payment address | +| get-total-revenue | read-only | Get total contract revenue | +| get-contract-data | read-only | Get aggregate contract data | ## aibtc-ext006-treasury -| Function Name | Type | Description | -|--------------|------|-------------| -| callback | public | Extension callback handler | -| allow-asset | public | Add/update asset in allowed list | -| allow-assets | public | Add/update multiple allowed assets | -| deposit-stx | public | Deposit STX to treasury | -| deposit-ft | public | Deposit FT to treasury | -| deposit-nft | public | Deposit NFT to treasury | -| withdraw-stx | public | Withdraw STX from treasury | -| withdraw-ft | public | Withdraw FT from treasury | -| withdraw-nft | public | Withdraw NFT from treasury | -| delegate-stx | public | Delegate STX for stacking | -| revoke-delegate-stx | public | Revoke STX delegation | -| is-allowed-asset | read-only | Check if asset is allowed | -| get-allowed-asset | read-only | Get allowed asset status | +| Function Name | Type | Description | +| ------------------- | --------- | ---------------------------------- | +| callback | public | Extension callback handler | +| allow-asset | public | Add/update asset in allowed list | +| allow-assets | public | Add/update multiple allowed assets | +| deposit-stx | public | Deposit STX to treasury | +| deposit-ft | public | Deposit FT to treasury | +| deposit-nft | public | Deposit NFT to treasury | +| withdraw-stx | public | Withdraw STX from treasury | +| withdraw-ft | public | Withdraw FT from treasury | +| withdraw-nft | public | Withdraw NFT from treasury | +| delegate-stx | public | Delegate STX for stacking | +| revoke-delegate-stx | public | Revoke STX delegation | +| is-allowed-asset | read-only | Check if asset is allowed | +| get-allowed-asset | read-only | Get allowed asset status | From f88da3404d22ac997d8f6db38cc5f43d324d1ae3 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Fri, 3 Jan 2025 16:06:28 -0700 Subject: [PATCH 03/84] docs: Update markdown tables with Function Type and Action Type columns --- docs/dao/contract-functions.md | 170 ++++++++++++++++----------------- 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/docs/dao/contract-functions.md b/docs/dao/contract-functions.md index 56868e2c..f1fca35d 100644 --- a/docs/dao/contract-functions.md +++ b/docs/dao/contract-functions.md @@ -2,53 +2,53 @@ ## aibtcdev-base-dao -| Function Name | Type | Description | -| -------------------------- | --------- | ------------------------------------------------- | -| construct | public | Initial construction of the DAO | -| execute | public | Execute Clarity code in a proposal | -| set-extension | public | Add an extension or update status of existing one | -| set-extensions | public | Add multiple extensions or update status | -| request-extension-callback | public | Request a callback from an extension | -| is-extension | read-only | Check if given principal is an extension | -| executed-at | read-only | Get block height when proposal was executed | +| Function Name | Function Type | Action Type | Description | +| -------------------------- | ------------- | ----------- | ------------------------------------------------- | +| construct | public | TBD | Initial construction of the DAO | +| execute | public | TBD | Execute Clarity code in a proposal | +| set-extension | public | TBD | Add an extension or update status of existing one | +| set-extensions | public | TBD | Add multiple extensions or update status | +| request-extension-callback | public | TBD | Request a callback from an extension | +| is-extension | read-only | TBD | Check if given principal is an extension | +| executed-at | read-only | TBD | Get block height when proposal was executed | ## aibtc-ext001-actions -| Function Name | Type | Description | -| --------------------- | --------- | ----------------------------------- | -| callback | public | Extension callback handler | -| set-protocol-treasury | public | Set the protocol treasury contract | -| set-voting-token | public | Set the voting token contract | -| propose-action | public | Create a new action proposal | -| vote-on-proposal | public | Vote on an existing proposal | -| conclude-proposal | public | Conclude and execute a proposal | -| get-protocol-treasury | read-only | Get the protocol treasury principal | -| get-voting-token | read-only | Get the voting token principal | -| get-proposal | read-only | Get proposal details by ID | -| get-total-votes | read-only | Get total votes for proposal/voter | -| is-initialized | read-only | Check if contract is initialized | -| get-voting-period | read-only | Get the voting period length | -| get-voting-quorum | read-only | Get the required voting quorum | -| get-total-proposals | read-only | Get total number of proposals | +| Function Name | Function Type | Action Type | Description | +| --------------------- | ------------- | ----------- | ----------------------------------- | +| callback | public | TBD | Extension callback handler | +| set-protocol-treasury | public | TBD | Set the protocol treasury contract | +| set-voting-token | public | TBD | Set the voting token contract | +| propose-action | public | TBD | Create a new action proposal | +| vote-on-proposal | public | TBD | Vote on an existing proposal | +| conclude-proposal | public | TBD | Conclude and execute a proposal | +| get-protocol-treasury | read-only | TBD | Get the protocol treasury principal | +| get-voting-token | read-only | TBD | Get the voting token principal | +| get-proposal | read-only | TBD | Get proposal details by ID | +| get-total-votes | read-only | TBD | Get total votes for proposal/voter | +| is-initialized | read-only | TBD | Check if contract is initialized | +| get-voting-period | read-only | TBD | Get the voting period length | +| get-voting-quorum | read-only | TBD | Get the required voting quorum | +| get-total-proposals | read-only | TBD | Get total number of proposals | ## aibtc-ext002-bank-account -| Function Name | Type | Description | -| ------------------------------ | --------- | ---------------------------------- | -| callback | public | Extension callback handler | -| set-account-holder | public | Set the account holder principal | -| set-withdrawal-period | public | Set the withdrawal period | -| set-withdrawal-amount | public | Set the withdrawal amount | -| override-last-withdrawal-block | public | Override the last withdrawal block | -| deposit-stx | public | Deposit STX to the contract | -| withdraw-stx | public | Withdraw STX from the contract | -| get-deployed-block | read-only | Get contract deployment block | -| get-account-balance | read-only | Get current account balance | -| get-account-holder | read-only | Get current account holder | -| get-last-withdrawal-block | read-only | Get last withdrawal block | -| get-withdrawal-period | read-only | Get current withdrawal period | -| get-withdrawal-amount | read-only | Get current withdrawal amount | -| get-account-terms | read-only | Get all account terms | +| Function Name | Function Type | Action Type | Description | +| ------------------------------ | ------------- | ----------- | ---------------------------------- | +| callback | public | TBD | Extension callback handler | +| set-account-holder | public | TBD | Set the account holder principal | +| set-withdrawal-period | public | TBD | Set the withdrawal period | +| set-withdrawal-amount | public | TBD | Set the withdrawal amount | +| override-last-withdrawal-block | public | TBD | Override the last withdrawal block | +| deposit-stx | public | TBD | Deposit STX to the contract | +| withdraw-stx | public | TBD | Withdraw STX from the contract | +| get-deployed-block | read-only | TBD | Get contract deployment block | +| get-account-balance | read-only | TBD | Get current account balance | +| get-account-holder | read-only | TBD | Get current account holder | +| get-last-withdrawal-block | read-only | TBD | Get last withdrawal block | +| get-withdrawal-period | read-only | TBD | Get current withdrawal period | +| get-withdrawal-amount | read-only | TBD | Get current withdrawal amount | +| get-account-terms | read-only | TBD | Get all account terms | ## aibtc-ext003-direct-execute @@ -70,53 +70,53 @@ ## aibtc-ext004-messaging -| Function Name | Type | Description | -| ------------- | ------ | -------------------------- | -| callback | public | Extension callback handler | -| send | public | Send a message on-chain | +| Function Name | Function Type | Action Type | Description | +| ------------- | ------------- | ----------- | -------------------------- | +| callback | public | TBD | Extension callback handler | +| send | public | TBD | Send a message on-chain | ## aibtc-ext005-payments -| Function Name | Type | Description | -| ---------------------------------- | --------- | ---------------------------------- | -| callback | public | Extension callback handler | -| set-payment-address | public | Set payment address for invoices | -| add-resource | public | Add a new resource | -| toggle-resource | public | Toggle resource enabled status | -| toggle-resource-by-name | public | Toggle resource by name | -| pay-invoice | public | Pay invoice for a resource | -| pay-invoice-by-resource-name | public | Pay invoice by resource name | -| get-total-users | read-only | Get total registered users | -| get-user-index | read-only | Get user index by address | -| get-user-data | read-only | Get user data by index | -| get-user-data-by-address | read-only | Get user data by address | -| get-total-resources | read-only | Get total registered resources | -| get-resource-index | read-only | Get resource index by name | -| get-resource | read-only | Get resource data by index | -| get-resource-by-name | read-only | Get resource data by name | -| get-total-invoices | read-only | Get total registered invoices | -| get-invoice | read-only | Get invoice data by index | -| get-recent-payment | read-only | Get recent payment by indexes | -| get-recent-payment-data | read-only | Get recent payment data by indexes | -| get-recent-payment-data-by-address | read-only | Get payment data by address | -| get-payment-address | read-only | Get current payment address | -| get-total-revenue | read-only | Get total contract revenue | -| get-contract-data | read-only | Get aggregate contract data | +| Function Name | Function Type | Action Type | Description | +| ---------------------------------- | ------------- | ----------- | ---------------------------------- | +| callback | public | TBD | Extension callback handler | +| set-payment-address | public | TBD | Set payment address for invoices | +| add-resource | public | TBD | Add a new resource | +| toggle-resource | public | TBD | Toggle resource enabled status | +| toggle-resource-by-name | public | TBD | Toggle resource by name | +| pay-invoice | public | TBD | Pay invoice for a resource | +| pay-invoice-by-resource-name | public | TBD | Pay invoice by resource name | +| get-total-users | read-only | TBD | Get total registered users | +| get-user-index | read-only | TBD | Get user index by address | +| get-user-data | read-only | TBD | Get user data by index | +| get-user-data-by-address | read-only | TBD | Get user data by address | +| get-total-resources | read-only | TBD | Get total registered resources | +| get-resource-index | read-only | TBD | Get resource index by name | +| get-resource | read-only | TBD | Get resource data by index | +| get-resource-by-name | read-only | TBD | Get resource data by name | +| get-total-invoices | read-only | TBD | Get total registered invoices | +| get-invoice | read-only | TBD | Get invoice data by index | +| get-recent-payment | read-only | TBD | Get recent payment by indexes | +| get-recent-payment-data | read-only | TBD | Get recent payment data by indexes | +| get-recent-payment-data-by-address | read-only | TBD | Get payment data by address | +| get-payment-address | read-only | TBD | Get current payment address | +| get-total-revenue | read-only | TBD | Get total contract revenue | +| get-contract-data | read-only | TBD | Get aggregate contract data | ## aibtc-ext006-treasury -| Function Name | Type | Description | -| ------------------- | --------- | ---------------------------------- | -| callback | public | Extension callback handler | -| allow-asset | public | Add/update asset in allowed list | -| allow-assets | public | Add/update multiple allowed assets | -| deposit-stx | public | Deposit STX to treasury | -| deposit-ft | public | Deposit FT to treasury | -| deposit-nft | public | Deposit NFT to treasury | -| withdraw-stx | public | Withdraw STX from treasury | -| withdraw-ft | public | Withdraw FT from treasury | -| withdraw-nft | public | Withdraw NFT from treasury | -| delegate-stx | public | Delegate STX for stacking | -| revoke-delegate-stx | public | Revoke STX delegation | -| is-allowed-asset | read-only | Check if asset is allowed | -| get-allowed-asset | read-only | Get allowed asset status | +| Function Name | Function Type | Action Type | Description | +| ------------------- | ------------- | ----------- | ---------------------------------- | +| callback | public | TBD | Extension callback handler | +| allow-asset | public | TBD | Add/update asset in allowed list | +| allow-assets | public | TBD | Add/update multiple allowed assets | +| deposit-stx | public | TBD | Deposit STX to treasury | +| deposit-ft | public | TBD | Deposit FT to treasury | +| deposit-nft | public | TBD | Deposit NFT to treasury | +| withdraw-stx | public | TBD | Withdraw STX from treasury | +| withdraw-ft | public | TBD | Withdraw FT from treasury | +| withdraw-nft | public | TBD | Withdraw NFT from treasury | +| delegate-stx | public | TBD | Delegate STX for stacking | +| revoke-delegate-stx | public | TBD | Revoke STX delegation | +| is-allowed-asset | read-only | TBD | Check if asset is allowed | +| get-allowed-asset | read-only | TBD | Get allowed asset status | From d453a3f3b6167bdf547194727d6b56e657e85e98 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 3 Jan 2025 16:06:39 -0700 Subject: [PATCH 04/84] fix: apply formatting --- docs/dao/contract-functions.md | 146 ++++++++++++++++----------------- 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/docs/dao/contract-functions.md b/docs/dao/contract-functions.md index f1fca35d..b10aa885 100644 --- a/docs/dao/contract-functions.md +++ b/docs/dao/contract-functions.md @@ -4,51 +4,51 @@ | Function Name | Function Type | Action Type | Description | | -------------------------- | ------------- | ----------- | ------------------------------------------------- | -| construct | public | TBD | Initial construction of the DAO | -| execute | public | TBD | Execute Clarity code in a proposal | -| set-extension | public | TBD | Add an extension or update status of existing one | -| set-extensions | public | TBD | Add multiple extensions or update status | -| request-extension-callback | public | TBD | Request a callback from an extension | -| is-extension | read-only | TBD | Check if given principal is an extension | -| executed-at | read-only | TBD | Get block height when proposal was executed | +| construct | public | TBD | Initial construction of the DAO | +| execute | public | TBD | Execute Clarity code in a proposal | +| set-extension | public | TBD | Add an extension or update status of existing one | +| set-extensions | public | TBD | Add multiple extensions or update status | +| request-extension-callback | public | TBD | Request a callback from an extension | +| is-extension | read-only | TBD | Check if given principal is an extension | +| executed-at | read-only | TBD | Get block height when proposal was executed | ## aibtc-ext001-actions | Function Name | Function Type | Action Type | Description | | --------------------- | ------------- | ----------- | ----------------------------------- | -| callback | public | TBD | Extension callback handler | -| set-protocol-treasury | public | TBD | Set the protocol treasury contract | -| set-voting-token | public | TBD | Set the voting token contract | -| propose-action | public | TBD | Create a new action proposal | -| vote-on-proposal | public | TBD | Vote on an existing proposal | -| conclude-proposal | public | TBD | Conclude and execute a proposal | -| get-protocol-treasury | read-only | TBD | Get the protocol treasury principal | -| get-voting-token | read-only | TBD | Get the voting token principal | -| get-proposal | read-only | TBD | Get proposal details by ID | -| get-total-votes | read-only | TBD | Get total votes for proposal/voter | -| is-initialized | read-only | TBD | Check if contract is initialized | -| get-voting-period | read-only | TBD | Get the voting period length | -| get-voting-quorum | read-only | TBD | Get the required voting quorum | -| get-total-proposals | read-only | TBD | Get total number of proposals | +| callback | public | TBD | Extension callback handler | +| set-protocol-treasury | public | TBD | Set the protocol treasury contract | +| set-voting-token | public | TBD | Set the voting token contract | +| propose-action | public | TBD | Create a new action proposal | +| vote-on-proposal | public | TBD | Vote on an existing proposal | +| conclude-proposal | public | TBD | Conclude and execute a proposal | +| get-protocol-treasury | read-only | TBD | Get the protocol treasury principal | +| get-voting-token | read-only | TBD | Get the voting token principal | +| get-proposal | read-only | TBD | Get proposal details by ID | +| get-total-votes | read-only | TBD | Get total votes for proposal/voter | +| is-initialized | read-only | TBD | Check if contract is initialized | +| get-voting-period | read-only | TBD | Get the voting period length | +| get-voting-quorum | read-only | TBD | Get the required voting quorum | +| get-total-proposals | read-only | TBD | Get total number of proposals | ## aibtc-ext002-bank-account | Function Name | Function Type | Action Type | Description | | ------------------------------ | ------------- | ----------- | ---------------------------------- | -| callback | public | TBD | Extension callback handler | -| set-account-holder | public | TBD | Set the account holder principal | -| set-withdrawal-period | public | TBD | Set the withdrawal period | -| set-withdrawal-amount | public | TBD | Set the withdrawal amount | -| override-last-withdrawal-block | public | TBD | Override the last withdrawal block | -| deposit-stx | public | TBD | Deposit STX to the contract | -| withdraw-stx | public | TBD | Withdraw STX from the contract | -| get-deployed-block | read-only | TBD | Get contract deployment block | -| get-account-balance | read-only | TBD | Get current account balance | -| get-account-holder | read-only | TBD | Get current account holder | -| get-last-withdrawal-block | read-only | TBD | Get last withdrawal block | -| get-withdrawal-period | read-only | TBD | Get current withdrawal period | -| get-withdrawal-amount | read-only | TBD | Get current withdrawal amount | -| get-account-terms | read-only | TBD | Get all account terms | +| callback | public | TBD | Extension callback handler | +| set-account-holder | public | TBD | Set the account holder principal | +| set-withdrawal-period | public | TBD | Set the withdrawal period | +| set-withdrawal-amount | public | TBD | Set the withdrawal amount | +| override-last-withdrawal-block | public | TBD | Override the last withdrawal block | +| deposit-stx | public | TBD | Deposit STX to the contract | +| withdraw-stx | public | TBD | Withdraw STX from the contract | +| get-deployed-block | read-only | TBD | Get contract deployment block | +| get-account-balance | read-only | TBD | Get current account balance | +| get-account-holder | read-only | TBD | Get current account holder | +| get-last-withdrawal-block | read-only | TBD | Get last withdrawal block | +| get-withdrawal-period | read-only | TBD | Get current withdrawal period | +| get-withdrawal-amount | read-only | TBD | Get current withdrawal amount | +| get-account-terms | read-only | TBD | Get all account terms | ## aibtc-ext003-direct-execute @@ -72,51 +72,51 @@ | Function Name | Function Type | Action Type | Description | | ------------- | ------------- | ----------- | -------------------------- | -| callback | public | TBD | Extension callback handler | -| send | public | TBD | Send a message on-chain | +| callback | public | TBD | Extension callback handler | +| send | public | TBD | Send a message on-chain | ## aibtc-ext005-payments | Function Name | Function Type | Action Type | Description | | ---------------------------------- | ------------- | ----------- | ---------------------------------- | -| callback | public | TBD | Extension callback handler | -| set-payment-address | public | TBD | Set payment address for invoices | -| add-resource | public | TBD | Add a new resource | -| toggle-resource | public | TBD | Toggle resource enabled status | -| toggle-resource-by-name | public | TBD | Toggle resource by name | -| pay-invoice | public | TBD | Pay invoice for a resource | -| pay-invoice-by-resource-name | public | TBD | Pay invoice by resource name | -| get-total-users | read-only | TBD | Get total registered users | -| get-user-index | read-only | TBD | Get user index by address | -| get-user-data | read-only | TBD | Get user data by index | -| get-user-data-by-address | read-only | TBD | Get user data by address | -| get-total-resources | read-only | TBD | Get total registered resources | -| get-resource-index | read-only | TBD | Get resource index by name | -| get-resource | read-only | TBD | Get resource data by index | -| get-resource-by-name | read-only | TBD | Get resource data by name | -| get-total-invoices | read-only | TBD | Get total registered invoices | -| get-invoice | read-only | TBD | Get invoice data by index | -| get-recent-payment | read-only | TBD | Get recent payment by indexes | -| get-recent-payment-data | read-only | TBD | Get recent payment data by indexes | -| get-recent-payment-data-by-address | read-only | TBD | Get payment data by address | -| get-payment-address | read-only | TBD | Get current payment address | -| get-total-revenue | read-only | TBD | Get total contract revenue | -| get-contract-data | read-only | TBD | Get aggregate contract data | +| callback | public | TBD | Extension callback handler | +| set-payment-address | public | TBD | Set payment address for invoices | +| add-resource | public | TBD | Add a new resource | +| toggle-resource | public | TBD | Toggle resource enabled status | +| toggle-resource-by-name | public | TBD | Toggle resource by name | +| pay-invoice | public | TBD | Pay invoice for a resource | +| pay-invoice-by-resource-name | public | TBD | Pay invoice by resource name | +| get-total-users | read-only | TBD | Get total registered users | +| get-user-index | read-only | TBD | Get user index by address | +| get-user-data | read-only | TBD | Get user data by index | +| get-user-data-by-address | read-only | TBD | Get user data by address | +| get-total-resources | read-only | TBD | Get total registered resources | +| get-resource-index | read-only | TBD | Get resource index by name | +| get-resource | read-only | TBD | Get resource data by index | +| get-resource-by-name | read-only | TBD | Get resource data by name | +| get-total-invoices | read-only | TBD | Get total registered invoices | +| get-invoice | read-only | TBD | Get invoice data by index | +| get-recent-payment | read-only | TBD | Get recent payment by indexes | +| get-recent-payment-data | read-only | TBD | Get recent payment data by indexes | +| get-recent-payment-data-by-address | read-only | TBD | Get payment data by address | +| get-payment-address | read-only | TBD | Get current payment address | +| get-total-revenue | read-only | TBD | Get total contract revenue | +| get-contract-data | read-only | TBD | Get aggregate contract data | ## aibtc-ext006-treasury | Function Name | Function Type | Action Type | Description | | ------------------- | ------------- | ----------- | ---------------------------------- | -| callback | public | TBD | Extension callback handler | -| allow-asset | public | TBD | Add/update asset in allowed list | -| allow-assets | public | TBD | Add/update multiple allowed assets | -| deposit-stx | public | TBD | Deposit STX to treasury | -| deposit-ft | public | TBD | Deposit FT to treasury | -| deposit-nft | public | TBD | Deposit NFT to treasury | -| withdraw-stx | public | TBD | Withdraw STX from treasury | -| withdraw-ft | public | TBD | Withdraw FT from treasury | -| withdraw-nft | public | TBD | Withdraw NFT from treasury | -| delegate-stx | public | TBD | Delegate STX for stacking | -| revoke-delegate-stx | public | TBD | Revoke STX delegation | -| is-allowed-asset | read-only | TBD | Check if asset is allowed | -| get-allowed-asset | read-only | TBD | Get allowed asset status | +| callback | public | TBD | Extension callback handler | +| allow-asset | public | TBD | Add/update asset in allowed list | +| allow-assets | public | TBD | Add/update multiple allowed assets | +| deposit-stx | public | TBD | Deposit STX to treasury | +| deposit-ft | public | TBD | Deposit FT to treasury | +| deposit-nft | public | TBD | Deposit NFT to treasury | +| withdraw-stx | public | TBD | Withdraw STX from treasury | +| withdraw-ft | public | TBD | Withdraw FT from treasury | +| withdraw-nft | public | TBD | Withdraw NFT from treasury | +| delegate-stx | public | TBD | Delegate STX for stacking | +| revoke-delegate-stx | public | TBD | Revoke STX delegation | +| is-allowed-asset | read-only | TBD | Check if asset is allowed | +| get-allowed-asset | read-only | TBD | Get allowed asset status | From f5f288bc0e0f975effafdfabad2eb8ecb895b15d Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 3 Jan 2025 16:08:53 -0700 Subject: [PATCH 05/84] fix: define action type for base dao --- docs/dao/contract-functions.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/dao/contract-functions.md b/docs/dao/contract-functions.md index b10aa885..97d1f4b4 100644 --- a/docs/dao/contract-functions.md +++ b/docs/dao/contract-functions.md @@ -4,9 +4,9 @@ | Function Name | Function Type | Action Type | Description | | -------------------------- | ------------- | ----------- | ------------------------------------------------- | -| construct | public | TBD | Initial construction of the DAO | -| execute | public | TBD | Execute Clarity code in a proposal | -| set-extension | public | TBD | Add an extension or update status of existing one | +| construct | public | n/a | Initial construction of the DAO | +| execute | public | n/a | Execute Clarity code in a proposal | +| set-extension | public | core | Add an extension or update status of existing one | | set-extensions | public | TBD | Add multiple extensions or update status | | request-extension-callback | public | TBD | Request a callback from an extension | | is-extension | read-only | TBD | Check if given principal is an extension | From 509d23824e646092eb4085bc1fc7fd705c02d05f Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 3 Jan 2025 16:14:26 -0700 Subject: [PATCH 06/84] fix: add remaining action types for contract functions --- docs/dao/contract-functions.md | 144 ++++++++++++++++----------------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/docs/dao/contract-functions.md b/docs/dao/contract-functions.md index 97d1f4b4..a539d69b 100644 --- a/docs/dao/contract-functions.md +++ b/docs/dao/contract-functions.md @@ -4,51 +4,51 @@ | Function Name | Function Type | Action Type | Description | | -------------------------- | ------------- | ----------- | ------------------------------------------------- | -| construct | public | n/a | Initial construction of the DAO | +| construct | public | setup | Initial construction of the DAO | | execute | public | n/a | Execute Clarity code in a proposal | -| set-extension | public | core | Add an extension or update status of existing one | -| set-extensions | public | TBD | Add multiple extensions or update status | -| request-extension-callback | public | TBD | Request a callback from an extension | -| is-extension | read-only | TBD | Check if given principal is an extension | -| executed-at | read-only | TBD | Get block height when proposal was executed | +| set-extension | public | core | Add an extension or update status of existing one | +| set-extensions | public | core | Add multiple extensions or update status | +| request-extension-callback | public | n/a | Request a callback from an extension | +| is-extension | read-only | any | Check if given principal is an extension | +| executed-at | read-only | any | Get block height when proposal was executed | ## aibtc-ext001-actions | Function Name | Function Type | Action Type | Description | | --------------------- | ------------- | ----------- | ----------------------------------- | -| callback | public | TBD | Extension callback handler | -| set-protocol-treasury | public | TBD | Set the protocol treasury contract | -| set-voting-token | public | TBD | Set the voting token contract | -| propose-action | public | TBD | Create a new action proposal | -| vote-on-proposal | public | TBD | Vote on an existing proposal | -| conclude-proposal | public | TBD | Conclude and execute a proposal | -| get-protocol-treasury | read-only | TBD | Get the protocol treasury principal | -| get-voting-token | read-only | TBD | Get the voting token principal | -| get-proposal | read-only | TBD | Get proposal details by ID | -| get-total-votes | read-only | TBD | Get total votes for proposal/voter | -| is-initialized | read-only | TBD | Check if contract is initialized | -| get-voting-period | read-only | TBD | Get the voting period length | -| get-voting-quorum | read-only | TBD | Get the required voting quorum | -| get-total-proposals | read-only | TBD | Get total number of proposals | +| callback | public | n/a | Extension callback handler | +| set-protocol-treasury | public | core | Set the protocol treasury contract | +| set-voting-token | public | setup | Set the voting token contract | +| propose-action | public | holder | Create a new action proposal | +| vote-on-proposal | public | holder | Vote on an existing proposal | +| conclude-proposal | public | any | Conclude and execute a proposal | +| get-protocol-treasury | read-only | any | Get the protocol treasury principal | +| get-voting-token | read-only | any | Get the voting token principal | +| get-proposal | read-only | any | Get proposal details by ID | +| get-total-votes | read-only | any | Get total votes for proposal/voter | +| is-initialized | read-only | any | Check if contract is initialized | +| get-voting-period | read-only | any | Get the voting period length | +| get-voting-quorum | read-only | any | Get the required voting quorum | +| get-total-proposals | read-only | any | Get total number of proposals | ## aibtc-ext002-bank-account | Function Name | Function Type | Action Type | Description | | ------------------------------ | ------------- | ----------- | ---------------------------------- | -| callback | public | TBD | Extension callback handler | -| set-account-holder | public | TBD | Set the account holder principal | -| set-withdrawal-period | public | TBD | Set the withdrawal period | -| set-withdrawal-amount | public | TBD | Set the withdrawal amount | -| override-last-withdrawal-block | public | TBD | Override the last withdrawal block | -| deposit-stx | public | TBD | Deposit STX to the contract | -| withdraw-stx | public | TBD | Withdraw STX from the contract | -| get-deployed-block | read-only | TBD | Get contract deployment block | -| get-account-balance | read-only | TBD | Get current account balance | -| get-account-holder | read-only | TBD | Get current account holder | -| get-last-withdrawal-block | read-only | TBD | Get last withdrawal block | -| get-withdrawal-period | read-only | TBD | Get current withdrawal period | -| get-withdrawal-amount | read-only | TBD | Get current withdrawal amount | -| get-account-terms | read-only | TBD | Get all account terms | +| callback | public | n/a | Extension callback handler | +| set-account-holder | public | action | Set the account holder principal | +| set-withdrawal-period | public | core | Set the withdrawal period | +| set-withdrawal-amount | public | core | Set the withdrawal amount | +| override-last-withdrawal-block | public | core | Override the last withdrawal block | +| deposit-stx | public | any | Deposit STX to the contract | +| withdraw-stx | public | any | Withdraw STX from the contract | +| get-deployed-block | read-only | any | Get contract deployment block | +| get-account-balance | read-only | any | Get current account balance | +| get-account-holder | read-only | any | Get current account holder | +| get-last-withdrawal-block | read-only | any | Get last withdrawal block | +| get-withdrawal-period | read-only | any | Get current withdrawal period | +| get-withdrawal-amount | read-only | any | Get current withdrawal amount | +| get-account-terms | read-only | any | Get all account terms | ## aibtc-ext003-direct-execute @@ -72,51 +72,51 @@ | Function Name | Function Type | Action Type | Description | | ------------- | ------------- | ----------- | -------------------------- | -| callback | public | TBD | Extension callback handler | -| send | public | TBD | Send a message on-chain | +| callback | public | n/a | Extension callback handler | +| send | public | action | Send a message on-chain | ## aibtc-ext005-payments | Function Name | Function Type | Action Type | Description | | ---------------------------------- | ------------- | ----------- | ---------------------------------- | -| callback | public | TBD | Extension callback handler | -| set-payment-address | public | TBD | Set payment address for invoices | -| add-resource | public | TBD | Add a new resource | -| toggle-resource | public | TBD | Toggle resource enabled status | -| toggle-resource-by-name | public | TBD | Toggle resource by name | -| pay-invoice | public | TBD | Pay invoice for a resource | -| pay-invoice-by-resource-name | public | TBD | Pay invoice by resource name | -| get-total-users | read-only | TBD | Get total registered users | -| get-user-index | read-only | TBD | Get user index by address | -| get-user-data | read-only | TBD | Get user data by index | -| get-user-data-by-address | read-only | TBD | Get user data by address | -| get-total-resources | read-only | TBD | Get total registered resources | -| get-resource-index | read-only | TBD | Get resource index by name | -| get-resource | read-only | TBD | Get resource data by index | -| get-resource-by-name | read-only | TBD | Get resource data by name | -| get-total-invoices | read-only | TBD | Get total registered invoices | -| get-invoice | read-only | TBD | Get invoice data by index | -| get-recent-payment | read-only | TBD | Get recent payment by indexes | -| get-recent-payment-data | read-only | TBD | Get recent payment data by indexes | -| get-recent-payment-data-by-address | read-only | TBD | Get payment data by address | -| get-payment-address | read-only | TBD | Get current payment address | -| get-total-revenue | read-only | TBD | Get total contract revenue | -| get-contract-data | read-only | TBD | Get aggregate contract data | +| callback | public | n/a | Extension callback handler | +| set-payment-address | public | core | Set payment address for invoices | +| add-resource | public | action | Add a new resource | +| toggle-resource | public | action | Toggle resource enabled status | +| toggle-resource-by-name | public | action | Toggle resource by name | +| pay-invoice | public | any | Pay invoice for a resource | +| pay-invoice-by-resource-name | public | any | Pay invoice by resource name | +| get-total-users | read-only | any | Get total registered users | +| get-user-index | read-only | any | Get user index by address | +| get-user-data | read-only | any | Get user data by index | +| get-user-data-by-address | read-only | any | Get user data by address | +| get-total-resources | read-only | any | Get total registered resources | +| get-resource-index | read-only | any | Get resource index by name | +| get-resource | read-only | any | Get resource data by index | +| get-resource-by-name | read-only | any | Get resource data by name | +| get-total-invoices | read-only | any | Get total registered invoices | +| get-invoice | read-only | any | Get invoice data by index | +| get-recent-payment | read-only | any | Get recent payment by indexes | +| get-recent-payment-data | read-only | any | Get recent payment data by indexes | +| get-recent-payment-data-by-address | read-only | any | Get payment data by address | +| get-payment-address | read-only | any | Get current payment address | +| get-total-revenue | read-only | any | Get total contract revenue | +| get-contract-data | read-only | any | Get aggregate contract data | ## aibtc-ext006-treasury | Function Name | Function Type | Action Type | Description | | ------------------- | ------------- | ----------- | ---------------------------------- | -| callback | public | TBD | Extension callback handler | -| allow-asset | public | TBD | Add/update asset in allowed list | -| allow-assets | public | TBD | Add/update multiple allowed assets | -| deposit-stx | public | TBD | Deposit STX to treasury | -| deposit-ft | public | TBD | Deposit FT to treasury | -| deposit-nft | public | TBD | Deposit NFT to treasury | -| withdraw-stx | public | TBD | Withdraw STX from treasury | -| withdraw-ft | public | TBD | Withdraw FT from treasury | -| withdraw-nft | public | TBD | Withdraw NFT from treasury | -| delegate-stx | public | TBD | Delegate STX for stacking | -| revoke-delegate-stx | public | TBD | Revoke STX delegation | -| is-allowed-asset | read-only | TBD | Check if asset is allowed | -| get-allowed-asset | read-only | TBD | Get allowed asset status | +| callback | public | n/a | Extension callback handler | +| allow-asset | public | action | Add/update asset in allowed list | +| allow-assets | public | action | Add/update multiple allowed assets | +| deposit-stx | public | any | Deposit STX to treasury | +| deposit-ft | public | any | Deposit FT to treasury | +| deposit-nft | public | any | Deposit NFT to treasury | +| withdraw-stx | public | core | Withdraw STX from treasury | +| withdraw-ft | public | core | Withdraw FT from treasury | +| withdraw-nft | public | core | Withdraw NFT from treasury | +| delegate-stx | public | core | Delegate STX for stacking | +| revoke-delegate-stx | public | core | Revoke STX delegation | +| is-allowed-asset | read-only | any | Check if asset is allowed | +| get-allowed-asset | read-only | any | Get allowed asset status | From f21ad848bc1a1ac0c8913d239b1d03aa06d957bf Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Fri, 3 Jan 2025 16:21:25 -0700 Subject: [PATCH 07/84] docs: Add function categories section to contract-functions documentation --- docs/dao/contract-functions.md | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/docs/dao/contract-functions.md b/docs/dao/contract-functions.md index a539d69b..d20dbee2 100644 --- a/docs/dao/contract-functions.md +++ b/docs/dao/contract-functions.md @@ -120,3 +120,44 @@ | revoke-delegate-stx | public | core | Revoke STX delegation | | is-allowed-asset | read-only | any | Check if asset is allowed | | get-allowed-asset | read-only | any | Get allowed asset status | + +# Function Categories by Action Type + +## Setup Functions +These functions are used during initial setup and configuration of contracts: +- `construct` (aibtcdev-base-dao) +- `set-voting-token` (aibtc-ext001-actions) + +## Core Functions +These functions represent critical administrative operations: +- `set-extension` (aibtcdev-base-dao) +- `set-extensions` (aibtcdev-base-dao) +- `set-protocol-treasury` (aibtc-ext001-actions) +- `set-withdrawal-period` (aibtc-ext002-bank-account) +- `set-withdrawal-amount` (aibtc-ext002-bank-account) +- `override-last-withdrawal-block` (aibtc-ext002-bank-account) +- `set-payment-address` (aibtc-ext005-payments) +- `withdraw-stx` (aibtc-ext006-treasury) +- `withdraw-ft` (aibtc-ext006-treasury) +- `withdraw-nft` (aibtc-ext006-treasury) +- `delegate-stx` (aibtc-ext006-treasury) +- `revoke-delegate-stx` (aibtc-ext006-treasury) + +## Action Functions +These functions represent standard governance actions: +- `set-account-holder` (aibtc-ext002-bank-account) +- `send` (aibtc-ext004-messaging) +- `add-resource` (aibtc-ext005-payments) +- `toggle-resource` (aibtc-ext005-payments) +- `toggle-resource-by-name` (aibtc-ext005-payments) +- `allow-asset` (aibtc-ext006-treasury) +- `allow-assets` (aibtc-ext006-treasury) + +## Holder Functions +These functions are specifically for token holders: +- `propose-action` (aibtc-ext001-actions) +- `vote-on-proposal` (aibtc-ext001-actions) + +## Other Categories +- **N/A Functions**: Typically callback handlers and execution functions +- **Any Functions**: Usually read-only functions or general utility functions that anyone can call From 4bc9e2ac895eb3abde61aa4097ee8e01a2ec8f95 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 3 Jan 2025 16:22:20 -0700 Subject: [PATCH 08/84] fix: apply/update formatting --- docs/dao/contract-functions.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/docs/dao/contract-functions.md b/docs/dao/contract-functions.md index d20dbee2..22cf10a0 100644 --- a/docs/dao/contract-functions.md +++ b/docs/dao/contract-functions.md @@ -121,15 +121,19 @@ | is-allowed-asset | read-only | any | Check if asset is allowed | | get-allowed-asset | read-only | any | Get allowed asset status | -# Function Categories by Action Type +## Function Categories by Action Type + +### Setup Functions -## Setup Functions These functions are used during initial setup and configuration of contracts: + - `construct` (aibtcdev-base-dao) - `set-voting-token` (aibtc-ext001-actions) -## Core Functions +### Core Functions + These functions represent critical administrative operations: + - `set-extension` (aibtcdev-base-dao) - `set-extensions` (aibtcdev-base-dao) - `set-protocol-treasury` (aibtc-ext001-actions) @@ -143,8 +147,10 @@ These functions represent critical administrative operations: - `delegate-stx` (aibtc-ext006-treasury) - `revoke-delegate-stx` (aibtc-ext006-treasury) -## Action Functions +### Action Functions + These functions represent standard governance actions: + - `set-account-holder` (aibtc-ext002-bank-account) - `send` (aibtc-ext004-messaging) - `add-resource` (aibtc-ext005-payments) @@ -153,11 +159,14 @@ These functions represent standard governance actions: - `allow-asset` (aibtc-ext006-treasury) - `allow-assets` (aibtc-ext006-treasury) -## Holder Functions +### Holder Functions + These functions are specifically for token holders: + - `propose-action` (aibtc-ext001-actions) - `vote-on-proposal` (aibtc-ext001-actions) -## Other Categories +### Other Categories + - **N/A Functions**: Typically callback handlers and execution functions - **Any Functions**: Usually read-only functions or general utility functions that anyone can call From d8dedd1e775eb0bd0144f543e75569a370e49fdd Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 3 Jan 2025 17:00:09 -0700 Subject: [PATCH 09/84] fix: debating between list and map for actions --- .../dao/extensions/aibtc-ext001-actions.clar | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/contracts/dao/extensions/aibtc-ext001-actions.clar b/contracts/dao/extensions/aibtc-ext001-actions.clar index 0587cf3b..c66c9397 100644 --- a/contracts/dao/extensions/aibtc-ext001-actions.clar +++ b/contracts/dao/extensions/aibtc-ext001-actions.clar @@ -18,20 +18,6 @@ (define-constant VOTING_PERIOD u144) ;; 144 Bitcoin blocks, ~1 day (define-constant VOTING_QUORUM u66) ;; 66% of liquid supply (total supply - treasury) -(define-constant VALID_ACTIONS (list - "send-message" - "add-resource" - "batch-messages" - "batch-resources" - "allow-asset" - "delegate-stx" - "set-account-holder" - "set-withdrawal-period" - "set-withdrawal-amount" - "toggle-resource" - "set-payment-address" -)) - ;; error messages - authorization (define-constant ERR_UNAUTHORIZED (err u1000)) (define-constant ERR_NOT_DAO_OR_EXTENSION (err u1001)) @@ -78,6 +64,29 @@ ;; data maps ;; +(define-constant VALID_ACTIONS (list + "set-account-holder" ;; aibtc-ext002-bank-account + "set-withdrawal-period" ;; aibtc-ext002-bank-account, with limits + "set-withdrawal-amount";; aibtc-ext002-bank-account, with limits + "send-message" ;; aibtc-ext004-messaging + "add-resource" ;; aibtc-ext005-payments + "allow-asset" ;; aibtc-ext006-treasury + "toggle-resource" ;; aibtc-ext005-payments toggle-resource-by-name +)) + +;; exploring which structure works better vs list +(define-map Actions + (string-ascii 50) + bool +) +(map-set Actions "set-account-holder" true) ;; aibtc-ext002-bank-account +(map-set Actions "set-withdrawal-period" true) ;; aibtc-ext002-bank-account, with limits +(map-set Actions "set-withdrawal-amount" true) ;; aibtc-ext002-bank-account, with limits +(map-set Actions "send-message" true) ;; aibtc-ext004-messaging +(map-set Actions "add-resource" true) ;; aibtc-ext005-payments +(map-set Actions "toggle-resource" true) ;; aibtc-ext005-payments toggle-resource-by-name +(map-set Actions "allow-asset" true) ;; aibtc-ext006-treasury + (define-map Proposals uint ;; proposal id { From b5ba51e000bea5ff79d9b8044000c0d1c4eaffac Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 3 Jan 2025 18:10:58 -0700 Subject: [PATCH 10/84] feat: add token, dex, and pool contracts --- Clarinet.toml | 24 ++ .../dao/extensions/aibtc-ext007-token.clar | 126 ++++++ .../dao/extensions/aibtc-ext008-dex.clar | 208 ++++++++++ .../extensions/aibtc-ext009-bitflow-pool.clar | 329 +++++++++++++++ deployments/default.simnet-plan.yaml | 384 ++---------------- 5 files changed, 724 insertions(+), 347 deletions(-) create mode 100644 contracts/dao/extensions/aibtc-ext007-token.clar create mode 100644 contracts/dao/extensions/aibtc-ext008-dex.clar create mode 100644 contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar diff --git a/Clarinet.toml b/Clarinet.toml index 59df76ca..876508bb 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -25,6 +25,15 @@ contract_id = 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standa [[project.requirements]] contract_id = 'ST000000000000000000002AMW42H.pox-4' +[[project.requirements]] +contract_id = 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.xyk-core-v-1-2' + +[[project.requirements]] +contract_id = 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.token-stx-v-1-2' + +[[project.requirements]] +contract_id = 'ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8.xyk-pool-trait-v-1-2' + # airdrop nft contracts [contracts.aibtcdev-airdrop-1] @@ -83,6 +92,21 @@ path = 'contracts/dao/extensions/aibtc-ext006-treasury.clar' clarity_version = 2 epoch = 2.5 +[contracts.aibtc-ext007-token] +path = 'contracts/dao/extensions/aibtc-ext007-token.clar' +clarity_version = 2 +epoch = 2.5 + +[contracts.aibtc-ext008-dex] +path = 'contracts/dao/extensions/aibtc-ext008-dex.clar' +clarity_version = 2 +epoch = 2.5 + +[contracts.aibtc-ext009-bitflow-pool] +path = 'contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar' +clarity_version = 2 +epoch = 2.5 + # dao traits [contracts.aibtcdev-dao-v1] diff --git a/contracts/dao/extensions/aibtc-ext007-token.clar b/contracts/dao/extensions/aibtc-ext007-token.clar new file mode 100644 index 00000000..414aba7c --- /dev/null +++ b/contracts/dao/extensions/aibtc-ext007-token.clar @@ -0,0 +1,126 @@ +;; @title Bonding Curve Token by STX.CITY +;; @version 2.0 +;; @hash <%= it.hash %> +;; @targetstx <%= it.target_stx %> + +;; SIP-10 Trait +(impl-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) + +;; Errors +(define-constant ERR-UNAUTHORIZED u401) +(define-constant ERR-NOT-OWNER u402) +(define-constant ERR-INVALID-PARAMETERS u403) +(define-constant ERR-NOT-ENOUGH-FUND u101) + +;; Constants +(define-constant MAXSUPPLY u0) ;; <%= it.token_max_supply %> + +;; Variables +(define-fungible-token SYMBOL MAXSUPPLY) ;; <%= it.token_symbol %> +(define-data-var contract-owner principal tx-sender) ;; TODO: set to dao? use extension? actions? + +;; SIP-10 Functions +(define-public (transfer (amount uint) (from principal) (to principal) (memo (optional (buff 34)))) + (begin + (asserts! (is-eq from tx-sender) (err ERR-UNAUTHORIZED)) + (ft-transfer? SYMBOL amount from to) ;; <%= it.token_symbol %> + ) +) + +;; Define token metadata +(define-data-var token-uri (optional (string-utf8 256)) (some u"")) ;; (some u"<%= it.token_uri %>") + +;; Set token uri +(define-public (set-token-uri (value (string-utf8 256))) + (begin + (asserts! (is-eq tx-sender (var-get contract-owner)) (err ERR-UNAUTHORIZED)) + (var-set token-uri (some value)) + (ok (print { + notification: "token-metadata-update", + payload: { + contract-id: (as-contract tx-sender), + token-class: "ft" + } + }) + ) + ) +) + +;; Read-Only Functions +(define-read-only (get-balance (owner principal)) + (ok (ft-get-balance SYMBOL owner)) ;; <%= it.token_symbol %> +) +(define-read-only (get-name) + (ok "NAME") ;; <%= it.token_name %> +) +(define-read-only (get-symbol) + (ok "SYMBOL") ;; <%= it.token_symbol %> +) +(define-read-only (get-decimals) + (ok u0) ;; <%= it.token_decimals %> +) +(define-read-only (get-total-supply) + (ok (ft-get-supply SYMBOL)) ;; <%= it.token_symbol %> +) +(define-read-only (get-token-uri) + (ok (var-get token-uri)) +) + +;; transfer ownership +(define-public (transfer-ownership (new-owner principal)) + (begin + ;; Checks if the sender is the current owner + (if (is-eq tx-sender (var-get contract-owner)) + (begin + ;; Sets the new owner + (var-set contract-owner new-owner) + ;; Returns success message + (ok "Ownership transferred successfully")) + ;; Error if the sender is not the owner + (err ERR-NOT-OWNER))) +) + +(define-public (send-many (recipients (list 200 { to: principal, amount: uint, memo: (optional (buff 34)) }))) + (fold check-err (map send-token recipients) (ok true)) +) + +(define-private (check-err (result (response bool uint)) (prior (response bool uint))) + (match prior ok-value result err-value (err err-value)) +) + +(define-private (send-token (recipient { to: principal, amount: uint, memo: (optional (buff 34)) })) + (send-token-with-memo (get amount recipient) (get to recipient) (get memo recipient)) +) + +(define-private (send-token-with-memo (amount uint) (to principal) (memo (optional (buff 34)))) + (let ((transferOk (try! (transfer amount tx-sender to memo)))) + (ok transferOk) + ) +) + +(define-private (send-stx (recipient principal) (amount uint)) + (begin + (try! (stx-transfer? amount tx-sender recipient)) + (ok true) + ) +) + +(begin + ;; Define the total supply + (let ((total-supply u0)) ;; <%= it.token_max_supply %> + + ;; Calculate 40% and 60% of the total supply using inline division + (let ((dex-allocation (/ (* total-supply u40) u100)) ;; Inline division for 40% + (treasury-allocation (/ (* total-supply u60) u100))) ;; Inline division for 60% + + ;; Send STX fees + (try! (send-stx 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 u500000)) ;; <%= it.stxctiy_token_deployment_fee_address %> + + ;; Mint tokens to the dex_contract (40%) + (try! (ft-mint? SYMBOL dex-allocation .aibtc-ext008-dex)) ;; <%= it.token_symbol %> <%= it.dex_contract %> + + ;; Mint tokens to the treasury (60%) + (try! (ft-mint? SYMBOL treasury-allocation .aibtc-ext006-treasury)) ;; <%= it.token_symbol %> <%= it.treasury_contract %> + ) + ) +) \ No newline at end of file diff --git a/contracts/dao/extensions/aibtc-ext008-dex.clar b/contracts/dao/extensions/aibtc-ext008-dex.clar new file mode 100644 index 00000000..33aff932 --- /dev/null +++ b/contracts/dao/extensions/aibtc-ext008-dex.clar @@ -0,0 +1,208 @@ +;; @title Bonding Curve DEX by STX.CITY +;; @notice This decentralized exchange (DEX) facilitates the trading of tokens using a bonding curve mechanism. +;; @dev This DEX will receive token from another contract and allow users to buy or sell this token. +;; @dev Once the target STX amount is reached, the contract automatically sends the tokens and STX to the DEX addresses like Velar. +;; @dev The deployer has no ownership privileges or control over the contract's operations. +;; @version 2.0 + +;; Implement SIP 010 trait +(use-trait sip-010-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) ;; <%= it.sip10_trait %> + +;; error constants +(define-constant ERR-UNAUTHORIZED (err u401)) +(define-constant ERR-UNAUTHORIZED-TOKEN (err u402)) +(define-constant ERR-TRADING-DISABLED (err u1001)) +(define-constant DEX-HAS-NOT-ENOUGH-STX (err u1002)) +(define-constant ERR-NOT-ENOUGH-STX-BALANCE (err u1003)) +(define-constant ERR-NOT-ENOUGH-TOKEN-BALANCE (err u1004)) +(define-constant ERR-SELF-LISTING-FAIL (err u1005)) +(define-constant BUY-INFO-ERROR (err u2001)) +(define-constant SELL-INFO-ERROR (err u2002)) + +(define-constant token-supply u0) ;; <%= it.token_max_supply %> match with the token's supply (6 decimals) +(define-constant BONDING-DEX-ADDRESS (as-contract tx-sender)) ;; one contract per token + +;; bonding curve config +(define-constant STX_TARGET_AMOUNT u0) ;; <%= it.stx_target_amount %> +(define-constant VIRTUAL_STX_VALUE u0) ;; <%= it.virtual_stx_value %> 1/5 of STX_TARGET_AMOUNT +(define-constant COMPLETE_FEE u0) ;; <%= it.complete_fee % >2% of STX_TARGET_AMOUNT + +;; FEE AND DEX WALLETS +(define-constant STX_CITY_SWAP_FEE_WALLET 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1) ;; <%= it.stxcity_swap_fee %> +(define-constant STX_CITY_COMPLETE_FEE_WALLET 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1) ;; <%= it.stxcity_complete_fee %> +(define-constant BURN_ADDRESS 'ST000000000000000000002AMW42H) ;; <%= it.burn %> burn mainnet + +(define-constant deployer tx-sender) +(define-constant allow-token .aibtc-ext007-token) ;; <%= it.token_contract %> + +;; data vars +(define-data-var tradable bool false) +(define-data-var virtual-stx-amount uint u0) +(define-data-var token-balance uint u0) +(define-data-var stx-balance uint u0) +(define-data-var burn-percent uint u10) +(define-data-var deployer-percent uint u10) + +(define-public (buy (token-trait ) (stx-amount uint) ) + (begin + (asserts! (var-get tradable) ERR-TRADING-DISABLED) + (asserts! (> stx-amount u0) ERR-NOT-ENOUGH-STX-BALANCE) + (asserts! (is-eq allow-token (contract-of token-trait)) ERR-UNAUTHORIZED-TOKEN ) + (let ( + (buy-info (unwrap! (get-buyable-tokens stx-amount) BUY-INFO-ERROR)) + (stx-fee (get fee buy-info)) + (stx-after-fee (get stx-buy buy-info)) + (tokens-out (get buyable-token buy-info)) + (new-token-balance (get new-token-balance buy-info)) + (recipient tx-sender) + (new-stx-balance (+ (var-get stx-balance) stx-after-fee)) + + ) + ;; user send stx fee to stxcity + (try! (stx-transfer? stx-fee tx-sender STX_CITY_SWAP_FEE_WALLET)) + ;; user send stx to dex + (try! (stx-transfer? stx-after-fee tx-sender (as-contract tx-sender))) + ;; dex send token to user + (try! (as-contract (contract-call? token-trait transfer tokens-out tx-sender recipient none))) + (var-set stx-balance new-stx-balance ) + (var-set token-balance new-token-balance) + (if (>= new-stx-balance STX_TARGET_AMOUNT) + (begin + (let ( + (contract-token-balance (var-get token-balance)) + (burn-percent-val (var-get burn-percent) ) + (burn-amount (/ (* contract-token-balance burn-percent-val) u100)) ;; burn tokens for a deflationary boost after the bonding curve completed + (remain-tokens (- contract-token-balance burn-amount)) + (remain-stx (- (var-get stx-balance) COMPLETE_FEE)) + (deployer-amount (/ (* burn-amount (var-get deployer-percent)) u100)) ;; deployer-amount is based on the burn amount + (burn-after-deployer-amount (- burn-amount deployer-amount)) + (xyk-pool-uri (default-to u"https://bitflow.finance" (try! (contract-call? token-trait get-token-uri)) )) + (xyk-burn-amount (- (sqrti (* remain-stx remain-tokens)) u1)) + ) + ;; burn tokens + (try! (as-contract (contract-call? token-trait transfer burn-after-deployer-amount tx-sender BURN_ADDRESS none))) + ;; send to deployer + (try! (as-contract (contract-call? token-trait transfer deployer-amount tx-sender deployer none))) + ;; Call XYK Core v-1-2 pool by Bitflow + ;; <%= it.bitflow_core_contract %> + ;; <%= it.pool_contract %> + ;; <%= it.bitflow_stx_token_address %> + ;; <%= it.bitflow_fee_address %> + (try! (as-contract (contract-call? 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.xyk-core-v-1-2 create-pool .aibtcdev-ext009-bitflow-pool 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.token-stx-v-1-2 token-trait remain-stx remain-tokens xyk-burn-amount u10 u40 u10 u40 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 xyk-pool-uri true))) + ;; send fee + (try! (as-contract (stx-transfer? COMPLETE_FEE tx-sender STX_CITY_COMPLETE_FEE_WALLET))) + ;; update global variables + (var-set tradable false) + (var-set stx-balance u0) + (var-set token-balance u0) + (print {tokens-receive: tokens-out, stx-fee: stx-fee, final-fee: COMPLETE_FEE, tokens-burn: burn-amount, tokens-to-dex: remain-tokens, stx-to-dex: remain-stx, + current-stx-balance: (var-get stx-balance), token-balance: (var-get token-balance), tradable: (var-get tradable) }) + (ok tokens-out) + ) + ) + (begin + (print {tokens-receive: tokens-out, stx-fee: stx-fee, current-stx-balance: (var-get stx-balance), token-balance: (var-get token-balance), tradable: (var-get tradable) }) + (ok tokens-out) + ) + ) + ) + ) +) +(define-public (sell (token-trait ) (tokens-in uint) ) ;; swap out for virtual trading + (begin + (asserts! (var-get tradable) ERR-TRADING-DISABLED) + (asserts! (> tokens-in u0) ERR-NOT-ENOUGH-TOKEN-BALANCE) + (asserts! (is-eq allow-token (contract-of token-trait)) ERR-UNAUTHORIZED-TOKEN ) + (let ( + (sell-info (unwrap! (get-sellable-stx tokens-in) SELL-INFO-ERROR)) + (stx-fee (get fee sell-info)) + (stx-receive (get stx-receive sell-info)) + (current-stx-balance (get current-stx-balance sell-info)) + (stx-out (get stx-out sell-info)) + (new-token-balance (get new-token-balance sell-info)) + (recipient tx-sender) + ) + (asserts! (>= current-stx-balance stx-receive) DEX-HAS-NOT-ENOUGH-STX) + (asserts! (is-eq contract-caller recipient) ERR-UNAUTHORIZED) + ;; user send token to dex + (try! (contract-call? token-trait transfer tokens-in tx-sender BONDING-DEX-ADDRESS none)) + ;; dex transfer stx to user and stxcity + (try! (as-contract (stx-transfer? stx-receive tx-sender recipient))) + (try! (as-contract (stx-transfer? stx-fee tx-sender STX_CITY_SWAP_FEE_WALLET))) + ;; update global variable + (var-set stx-balance (- (var-get stx-balance) stx-out)) + (var-set token-balance new-token-balance) + (print {stx-receive: stx-receive, stx-fee: stx-fee, current-stx-balance: (var-get stx-balance), token-balance: (var-get token-balance), tradable: (var-get tradable) }) + (ok stx-receive) + ) + ) +) +;; stx -> token. Estimate the number of token you can receive with a stx amount +(define-read-only (get-buyable-tokens (stx-amount uint)) + (let + ( + (current-stx-balance (+ (var-get stx-balance) (var-get virtual-stx-amount))) + (current-token-balance (var-get token-balance)) + (stx-fee (/ (* stx-amount u2) u100)) ;; 2% fee + (stx-after-fee (- stx-amount stx-fee)) + (k (* current-token-balance current-stx-balance )) ;; k = x*y + (new-stx-balance (+ current-stx-balance stx-after-fee)) + (new-token-balance (/ k new-stx-balance)) ;; x' = k / y' + (tokens-out (- current-token-balance new-token-balance)) + (recommend-stx-amount (- STX_TARGET_AMOUNT (var-get stx-balance) )) + (recommend-stx-amount-after-fee (/ (* recommend-stx-amount u103) u100)) ;; 3% (including 2% fee) + ) + (ok {fee: stx-fee, buyable-token: tokens-out, stx-buy: stx-after-fee, + new-token-balance: new-token-balance, stx-balance: (var-get stx-balance), + recommend-stx-amount: recommend-stx-amount-after-fee, token-balance: (var-get token-balance) } ) )) + +;; token -> stx. Estimate the number of stx you can receive with a token amount +(define-read-only (get-sellable-stx (token-amount uint)) + (let + ( + (tokens-in token-amount) + (current-stx-balance (+ (var-get stx-balance) (var-get virtual-stx-amount))) + (current-token-balance (var-get token-balance)) + (k (* current-token-balance current-stx-balance )) ;; k = x*y + (new-token-balance (+ current-token-balance tokens-in)) + (new-stx-balance (/ k new-token-balance)) ;; y' = k / x' + (stx-out (- (- current-stx-balance new-stx-balance) u1)) ;; prevent the round number + (stx-fee (/ (* stx-out u2) u100)) ;; 2% fee + (stx-receive (- stx-out stx-fee)) + ) + (ok {fee: stx-fee, + current-stx-balance: current-stx-balance, + receivable-stx: stx-receive, + stx-receive: stx-receive, + new-token-balance: new-token-balance, + stx-out: stx-out, + stx-balance: (var-get stx-balance), + token-balance: (var-get token-balance) } ) )) + +(define-read-only (get-tradable) + (ok (var-get tradable)) +) + +;; initialize contract based on token's details +(begin + ;; Set the virtual STX amount + (var-set virtual-stx-amount VIRTUAL_STX_VALUE) + + ;; Set the token balance to 40% of the total supply using inline division + (var-set token-balance (/ (* token-supply u40) u100)) ;; Direct calculation of 40% of total supply + + ;; Set tradable flag + (var-set tradable true) + + ;; Set burn percentage + (var-set burn-percent u20) + + ;; Set deployer percentage (based on burn amount) + (var-set deployer-percent u10) ;; About ~0.1 to 0.5% supply based on burn-amount + + ;; Transfer STX deployment fee + (try! (stx-transfer? u500000 tx-sender 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1)) ;; <%= it.stxcity_dex_deployment_fee_address %> + + ;; Return success + (ok true) +) \ No newline at end of file diff --git a/contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar b/contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar new file mode 100644 index 00000000..4ae62688 --- /dev/null +++ b/contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar @@ -0,0 +1,329 @@ +;; Implement XYK pool trait and use SIP 010 trait +(impl-trait 'ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8.xyk-pool-trait-v-1-2.xyk-pool-trait) ;; <%= it.bitflow_pool_trait %> +(use-trait sip-010-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) ;; <%= it.sip10_trait %> + +;; Define fungible pool token +(define-fungible-token pool-token) + +;; Error constants +(define-constant ERR_NOT_AUTHORIZED_SIP_010 (err u4)) +(define-constant ERR_INVALID_PRINCIPAL_SIP_010 (err u5)) +(define-constant ERR_NOT_AUTHORIZED (err u3001)) +(define-constant ERR_INVALID_AMOUNT (err u3002)) +(define-constant ERR_INVALID_PRINCIPAL (err u3003)) +(define-constant ERR_POOL_NOT_CREATED (err u3004)) +(define-constant ERR_POOL_DISABLED (err u3005)) +(define-constant ERR_NOT_POOL_CONTRACT_DEPLOYER (err u3006)) + +;; XYK Core address and contract deployer address +(define-constant CORE_ADDRESS 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.xyk-core-v-1-2) ;; <%= it.bitflow_xyk_core_address %> +(define-constant CONTRACT_DEPLOYER .aibtc-ext008-dex) ;; <%= it.dex_contract %> + +;; Define all pool data vars +(define-data-var pool-id uint u0) +(define-data-var pool-name (string-ascii 32) "") +(define-data-var pool-symbol (string-ascii 32) "") +(define-data-var pool-uri (string-utf8 256) u"") + +(define-data-var pool-created bool false) +(define-data-var creation-height uint u0) + +(define-data-var pool-status bool false) + +(define-data-var fee-address principal tx-sender) + +(define-data-var x-token principal tx-sender) +(define-data-var y-token principal tx-sender) + +(define-data-var x-balance uint u0) +(define-data-var y-balance uint u0) + +(define-data-var x-protocol-fee uint u0) +(define-data-var x-provider-fee uint u0) + +(define-data-var y-protocol-fee uint u0) +(define-data-var y-provider-fee uint u0) + +;; SIP 010 function to get token name +(define-read-only (get-name) + (ok (var-get pool-name)) +) + +;; SIP 010 function to get token symbol +(define-read-only (get-symbol) + (ok (var-get pool-symbol)) +) + +;; SIP 010 function to get token decimals +(define-read-only (get-decimals) + (ok u6) +) + +;; SIP 010 function to get token uri +(define-read-only (get-token-uri) + (ok (some (var-get pool-uri))) +) + +;; SIP 010 function to get total token supply +(define-read-only (get-total-supply) + (ok (ft-get-supply pool-token)) +) + +;; SIP 010 function to get token balance for an address +(define-read-only (get-balance (address principal)) + (ok (ft-get-balance pool-token address)) +) + +;; Get all pool data +(define-read-only (get-pool) + (ok { + pool-id: (var-get pool-id), + pool-name: (var-get pool-name), + pool-symbol: (var-get pool-symbol), + pool-uri: (var-get pool-uri), + pool-created: (var-get pool-created), + creation-height: (var-get creation-height), + pool-status: (var-get pool-status), + core-address: CORE_ADDRESS, + fee-address: (var-get fee-address), + x-token: (var-get x-token), + y-token: (var-get y-token), + pool-token: (as-contract tx-sender), + x-balance: (var-get x-balance), + y-balance: (var-get y-balance), + total-shares: (ft-get-supply pool-token), + x-protocol-fee: (var-get x-protocol-fee), + x-provider-fee: (var-get x-provider-fee), + y-protocol-fee: (var-get y-protocol-fee), + y-provider-fee: (var-get y-provider-fee) + }) +) + +;; Set pool uri via XYK Core +(define-public (set-pool-uri (uri (string-utf8 256))) + (let ( + (caller contract-caller) + ) + (begin + ;; Assert that caller is core address before setting var + (asserts! (is-eq caller CORE_ADDRESS) ERR_NOT_AUTHORIZED) + (var-set pool-uri uri) + (ok true) + ) + ) +) + +;; Set pool status via XYK Core +(define-public (set-pool-status (status bool)) + (let ( + (caller contract-caller) + ) + (begin + ;; Assert that caller is core address before setting var + (asserts! (is-eq caller CORE_ADDRESS) ERR_NOT_AUTHORIZED) + (var-set pool-status status) + (ok true) + ) + ) +) + +;; Set fee address via XYK Core +(define-public (set-fee-address (address principal)) + (let ( + (caller contract-caller) + ) + (begin + ;; Assert that caller is core address before setting var + (asserts! (is-eq caller CORE_ADDRESS) ERR_NOT_AUTHORIZED) + (var-set fee-address address) + (ok true) + ) + ) +) + +;; Set x fees via XYK Core +(define-public (set-x-fees (protocol-fee uint) (provider-fee uint)) + (let ( + (caller contract-caller) + ) + (begin + ;; Assert that caller is core address before setting vars + (asserts! (is-eq caller CORE_ADDRESS) ERR_NOT_AUTHORIZED) + (var-set x-protocol-fee protocol-fee) + (var-set x-provider-fee provider-fee) + (ok true) + ) + ) +) + +;; Set y fees via XYK Core +(define-public (set-y-fees (protocol-fee uint) (provider-fee uint)) + (let ( + (caller contract-caller) + ) + (begin + ;; Assert that caller is core address before setting vars + (asserts! (is-eq caller CORE_ADDRESS) ERR_NOT_AUTHORIZED) + (var-set y-protocol-fee protocol-fee) + (var-set y-provider-fee provider-fee) + (ok true) + ) + ) +) + +;; Update pool balances and d value via XYK Core +(define-public (update-pool-balances (x-bal uint) (y-bal uint)) + (let ( + (caller contract-caller) + ) + (begin + ;; Assert that caller is core address before setting vars + (asserts! (is-eq caller CORE_ADDRESS) ERR_NOT_AUTHORIZED) + (var-set x-balance x-bal) + (var-set y-balance y-bal) + + ;; Print function data and return true + (print {action: "update-pool-balances", data: {x-balance: x-bal, y-balance: y-bal}}) + (ok true) + ) + ) +) + +;; SIP 010 transfer function that transfers pool token +(define-public (transfer + (amount uint) + (sender principal) (recipient principal) + (memo (optional (buff 34))) + ) + (let ( + (caller tx-sender) + ) + (begin + ;; Assert that caller is sender and addresses are standard principals + (asserts! (is-eq caller sender) ERR_NOT_AUTHORIZED_SIP_010) + (asserts! (is-standard sender) ERR_INVALID_PRINCIPAL_SIP_010) + (asserts! (is-standard recipient) ERR_INVALID_PRINCIPAL_SIP_010) + + ;; Try performing a pool token transfer and print memo + (try! (ft-transfer? pool-token amount sender recipient)) + (match memo to-print (print to-print) 0x) + + ;; Print function data and return true + (print { + action: "transfer", + caller: caller, + data: { + sender: sender, + recipient: recipient, + amount: amount, + memo: memo + } + }) + (ok true) + ) + ) +) + +;; Transfer tokens from this pool contract via XYK Core +(define-public (pool-transfer (token-trait ) (amount uint) (recipient principal)) + (let ( + (token-contract (contract-of token-trait)) + (caller contract-caller) + ) + (begin + ;; Assert that caller is core address before transferring tokens + (asserts! (is-eq caller CORE_ADDRESS) ERR_NOT_AUTHORIZED) + + ;; Assert that token and recipient addresses are standard principals + (asserts! (is-standard token-contract) ERR_INVALID_PRINCIPAL) + (asserts! (is-standard recipient) ERR_INVALID_PRINCIPAL) + + ;; Assert that amount is greater than 0 + (asserts! (> amount u0) ERR_INVALID_AMOUNT) + + ;; Try to transfer amount of token from pool contract to recipient + (try! (as-contract (contract-call? token-trait transfer amount tx-sender recipient none))) + + ;; Print function data and return true + (print {action: "pool-transfer", data: {token: token-contract, amount: amount, recipient: recipient}}) + (ok true) + ) + ) +) + +;; Mint pool token to an address via XYK Core +(define-public (pool-mint (amount uint) (address principal)) + (let ( + (caller contract-caller) + ) + (begin + ;; Assert that caller is core address before minting tokens + (asserts! (is-eq caller CORE_ADDRESS) ERR_NOT_AUTHORIZED) + + ;; Assert that address is standard principal and amount is greater than 0 + (asserts! (is-standard address) ERR_INVALID_PRINCIPAL) + (asserts! (> amount u0) ERR_INVALID_AMOUNT) + + ;; Try to mint amount pool tokens to address + (try! (ft-mint? pool-token amount address)) + + ;; Print function data and return true + (print {action: "pool-mint", data: {amount: amount, address: address}}) + (ok true) + ) + ) +) + +;; Burn pool token from an address via XYK Core +(define-public (pool-burn (amount uint) (address principal)) + (let ( + (caller contract-caller) + ) + (begin + ;; Assert that caller is core address before burning tokens + (asserts! (is-eq caller CORE_ADDRESS) ERR_NOT_AUTHORIZED) + + ;; Assert that address is standard principal and amount is greater than 0 + (asserts! (is-standard address) ERR_INVALID_PRINCIPAL) + (asserts! (> amount u0) ERR_INVALID_AMOUNT) + + ;; Try to burn amount pool tokens from address + (try! (ft-burn? pool-token amount address)) + + ;; Print function data and return true + (print {action: "pool-burn", data: {amount: amount, address: address}}) + (ok true) + ) + ) +) + +;; Create pool using this pool contract via XYK Core +(define-public (create-pool + (x-token-contract principal) (y-token-contract principal) + (fee-addr principal) (core-caller principal) + (id uint) + (name (string-ascii 32)) (symbol (string-ascii 32)) + (uri (string-utf8 256)) + (status bool) + ) + (let ( + (caller contract-caller) + ) + (begin + ;; Assert that caller is core address and core caller is contract deployer before setting vars + (asserts! (is-eq caller CORE_ADDRESS) ERR_NOT_AUTHORIZED) + (asserts! (is-eq core-caller CONTRACT_DEPLOYER) ERR_NOT_POOL_CONTRACT_DEPLOYER) + (var-set pool-id id) + (var-set pool-name name) + (var-set pool-symbol symbol) + (var-set pool-uri uri) + (var-set pool-created true) + (var-set creation-height burn-block-height) + (var-set pool-status status) + (var-set x-token x-token-contract) + (var-set y-token y-token-contract) + (var-set fee-address fee-addr) + (ok true) + ) + ) +) \ No newline at end of file diff --git a/deployments/default.simnet-plan.yaml b/deployments/default.simnet-plan.yaml index c99ee841..eb7e2e1d 100644 --- a/deployments/default.simnet-plan.yaml +++ b/deployments/default.simnet-plan.yaml @@ -48,9 +48,6 @@ genesis: plan: batches: - id: 0 - transactions: [] - epoch: "2.0" - - id: 1 transactions: - emulated-contract-publish: contract-name: nft-trait @@ -62,183 +59,29 @@ plan: emulated-sender: SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE path: "./.cache/requirements/SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.clar" clarity-version: 1 - epoch: "2.1" - - id: 2 - transactions: [] - epoch: "2.1" - - id: 3 - transactions: [] - epoch: "2.1" - - id: 4 - transactions: [] - epoch: "2.1" - - id: 5 - transactions: [] - epoch: "2.1" - - id: 6 - transactions: [] - epoch: "2.1" - - id: 7 - transactions: [] - epoch: "2.1" - - id: 8 - transactions: [] - epoch: "2.1" - - id: 9 - transactions: [] - epoch: "2.1" - - id: 10 - transactions: [] - epoch: "2.1" - - id: 11 - transactions: [] - epoch: "2.1" - - id: 12 - transactions: [] - epoch: "2.1" - - id: 13 - transactions: [] - epoch: "2.1" - - id: 14 - transactions: [] - epoch: "2.1" - - id: 15 - transactions: [] - epoch: "2.1" - - id: 16 - transactions: [] - epoch: "2.1" - - id: 17 - transactions: [] - epoch: "2.1" - - id: 18 - transactions: [] - epoch: "2.1" - - id: 19 - transactions: [] - epoch: "2.1" - - id: 20 - transactions: [] - epoch: "2.1" - - id: 21 - transactions: [] - epoch: "2.1" - - id: 22 - transactions: [] - epoch: "2.1" - - id: 23 - transactions: [] - epoch: "2.1" - - id: 24 - transactions: [] - epoch: "2.1" - - id: 25 - transactions: [] - epoch: "2.1" - - id: 26 - transactions: [] - epoch: "2.1" - - id: 27 - transactions: [] - epoch: "2.1" - - id: 28 - transactions: [] - epoch: "2.1" - - id: 29 - transactions: [] - epoch: "2.1" - - id: 30 - transactions: [] - epoch: "2.1" - - id: 31 - transactions: [] - epoch: "2.1" - - id: 32 - transactions: [] - epoch: "2.1" - - id: 33 - transactions: [] - epoch: "2.1" - - id: 34 - transactions: [] - epoch: "2.1" - - id: 35 - transactions: [] - epoch: "2.1" - - id: 36 - transactions: [] - epoch: "2.1" - - id: 37 - transactions: [] - epoch: "2.1" - - id: 38 - transactions: [] - epoch: "2.1" - - id: 39 - transactions: [] - epoch: "2.1" - - id: 40 - transactions: [] - epoch: "2.1" - - id: 41 - transactions: [] - epoch: "2.1" - - id: 42 - transactions: [] - epoch: "2.1" - - id: 43 - transactions: [] - epoch: "2.1" - - id: 44 - transactions: [] - epoch: "2.1" - - id: 45 - transactions: [] - epoch: "2.1" - - id: 46 - transactions: [] - epoch: "2.1" - - id: 47 - transactions: [] - epoch: "2.1" - - id: 48 - transactions: [] - epoch: "2.1" - - id: 49 - transactions: [] - epoch: "2.1" - - id: 50 - transactions: [] - epoch: "2.1" - - id: 51 - transactions: [] - epoch: "2.1" - - id: 52 - transactions: [] - epoch: "2.1" - - id: 53 - transactions: [] - epoch: "2.1" - - id: 54 - transactions: [] - epoch: "2.1" - - id: 55 - transactions: [] - epoch: "2.1" - - id: 56 - transactions: [] - epoch: "2.1" - - id: 57 - transactions: [] - epoch: "2.1" - - id: 58 - transactions: [] - epoch: "2.1" - - id: 59 - transactions: [] - epoch: "2.1" - - id: 60 + epoch: "2.0" + - id: 1 transactions: + - emulated-contract-publish: + contract-name: sip-010-trait-ft-standard + emulated-sender: ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8 + path: "./.cache/requirements/ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8.sip-010-trait-ft-standard.clar" + clarity-version: 2 + - emulated-contract-publish: + contract-name: token-stx-v-1-2 + emulated-sender: ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 + path: "./.cache/requirements/ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.token-stx-v-1-2.clar" + clarity-version: 2 + - emulated-contract-publish: + contract-name: xyk-pool-trait-v-1-2 + emulated-sender: ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8 + path: "./.cache/requirements/ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8.xyk-pool-trait-v-1-2.clar" + clarity-version: 2 + - emulated-contract-publish: + contract-name: xyk-core-v-1-2 + emulated-sender: ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 + path: "./.cache/requirements/ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.xyk-core-v-1-2.clar" + clarity-version: 2 - emulated-contract-publish: contract-name: aibtcdev-dao-traits-v1 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM @@ -284,6 +127,21 @@ plan: emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM path: contracts/dao/extensions/aibtc-ext006-treasury.clar clarity-version: 2 + - emulated-contract-publish: + contract-name: aibtc-ext007-token + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: contracts/dao/extensions/aibtc-ext007-token.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: aibtc-ext008-dex + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: contracts/dao/extensions/aibtc-ext008-dex.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: aibtc-ext009-bitflow-pool + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar + clarity-version: 2 - emulated-contract-publish: contract-name: aibtc-prop001-bootstrap emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM @@ -325,171 +183,3 @@ plan: path: contracts/test/proxy.clar clarity-version: 2 epoch: "2.5" - - id: 61 - transactions: [] - epoch: "2.5" - - id: 62 - transactions: [] - epoch: "2.5" - - id: 63 - transactions: [] - epoch: "2.5" - - id: 64 - transactions: [] - epoch: "2.5" - - id: 65 - transactions: [] - epoch: "2.5" - - id: 66 - transactions: [] - epoch: "2.5" - - id: 67 - transactions: [] - epoch: "2.5" - - id: 68 - transactions: [] - epoch: "2.5" - - id: 69 - transactions: [] - epoch: "2.5" - - id: 70 - transactions: [] - epoch: "2.5" - - id: 71 - transactions: [] - epoch: "2.5" - - id: 72 - transactions: [] - epoch: "2.5" - - id: 73 - transactions: [] - epoch: "2.5" - - id: 74 - transactions: [] - epoch: "2.5" - - id: 75 - transactions: [] - epoch: "2.5" - - id: 76 - transactions: [] - epoch: "2.5" - - id: 77 - transactions: [] - epoch: "2.5" - - id: 78 - transactions: [] - epoch: "2.5" - - id: 79 - transactions: [] - epoch: "2.5" - - id: 80 - transactions: [] - epoch: "2.5" - - id: 81 - transactions: [] - epoch: "2.5" - - id: 82 - transactions: [] - epoch: "2.5" - - id: 83 - transactions: [] - epoch: "2.5" - - id: 84 - transactions: [] - epoch: "2.5" - - id: 85 - transactions: [] - epoch: "2.5" - - id: 86 - transactions: [] - epoch: "2.5" - - id: 87 - transactions: [] - epoch: "2.5" - - id: 88 - transactions: [] - epoch: "2.5" - - id: 89 - transactions: [] - epoch: "2.5" - - id: 90 - transactions: [] - epoch: "2.5" - - id: 91 - transactions: [] - epoch: "2.5" - - id: 92 - transactions: [] - epoch: "2.5" - - id: 93 - transactions: [] - epoch: "2.5" - - id: 94 - transactions: [] - epoch: "2.5" - - id: 95 - transactions: [] - epoch: "2.5" - - id: 96 - transactions: [] - epoch: "2.5" - - id: 97 - transactions: [] - epoch: "2.5" - - id: 98 - transactions: [] - epoch: "2.5" - - id: 99 - transactions: [] - epoch: "2.5" - - id: 100 - transactions: [] - epoch: "2.5" - - id: 101 - transactions: [] - epoch: "2.5" - - id: 102 - transactions: [] - epoch: "2.5" - - id: 103 - transactions: [] - epoch: "2.5" - - id: 104 - transactions: [] - epoch: "2.5" - - id: 105 - transactions: [] - epoch: "2.5" - - id: 106 - transactions: [] - epoch: "2.5" - - id: 107 - transactions: [] - epoch: "2.5" - - id: 108 - transactions: [] - epoch: "2.5" - - id: 109 - transactions: [] - epoch: "2.5" - - id: 110 - transactions: [] - epoch: "2.5" - - id: 111 - transactions: [] - epoch: "2.5" - - id: 112 - transactions: [] - epoch: "2.5" - - id: 113 - transactions: [] - epoch: "2.5" - - id: 114 - transactions: [] - epoch: "2.5" - - id: 115 - transactions: [] - epoch: "2.5" - - id: 116 - transactions: [] - epoch: "2.5" From 248545a3badae702a9a952f1d5cb745832e64fbb Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 3 Jan 2025 18:15:47 -0700 Subject: [PATCH 11/84] fix: small updates to pass clarinet check Using all testnet values for now, anything imported can be referenced as a requirement in Clarinet.toml --- Clarinet.toml | 3 + .../dao/extensions/aibtc-ext007-token.clar | 6 +- .../dao/extensions/aibtc-ext008-dex.clar | 4 +- .../extensions/aibtc-ext009-bitflow-pool.clar | 2 +- deployments/default.simnet-plan.yaml | 185 ------------------ 5 files changed, 9 insertions(+), 191 deletions(-) delete mode 100644 deployments/default.simnet-plan.yaml diff --git a/Clarinet.toml b/Clarinet.toml index 876508bb..8b4eff66 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -22,6 +22,9 @@ contract_id = 'SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait' [[project.requirements]] contract_id = 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard' +[[project.requirements]] +contract_id = 'ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8.sip-010-trait-ft-standard' + [[project.requirements]] contract_id = 'ST000000000000000000002AMW42H.pox-4' diff --git a/contracts/dao/extensions/aibtc-ext007-token.clar b/contracts/dao/extensions/aibtc-ext007-token.clar index 414aba7c..c495a5cf 100644 --- a/contracts/dao/extensions/aibtc-ext007-token.clar +++ b/contracts/dao/extensions/aibtc-ext007-token.clar @@ -13,7 +13,7 @@ (define-constant ERR-NOT-ENOUGH-FUND u101) ;; Constants -(define-constant MAXSUPPLY u0) ;; <%= it.token_max_supply %> +(define-constant MAXSUPPLY u21000000) ;; <%= it.token_max_supply %> ;; Variables (define-fungible-token SYMBOL MAXSUPPLY) ;; <%= it.token_symbol %> @@ -57,7 +57,7 @@ (ok "SYMBOL") ;; <%= it.token_symbol %> ) (define-read-only (get-decimals) - (ok u0) ;; <%= it.token_decimals %> + (ok u6) ;; <%= it.token_decimals %> ) (define-read-only (get-total-supply) (ok (ft-get-supply SYMBOL)) ;; <%= it.token_symbol %> @@ -107,7 +107,7 @@ (begin ;; Define the total supply - (let ((total-supply u0)) ;; <%= it.token_max_supply %> + (let ((total-supply u21000000)) ;; <%= it.token_max_supply %> ;; Calculate 40% and 60% of the total supply using inline division (let ((dex-allocation (/ (* total-supply u40) u100)) ;; Inline division for 40% diff --git a/contracts/dao/extensions/aibtc-ext008-dex.clar b/contracts/dao/extensions/aibtc-ext008-dex.clar index 33aff932..dc423000 100644 --- a/contracts/dao/extensions/aibtc-ext008-dex.clar +++ b/contracts/dao/extensions/aibtc-ext008-dex.clar @@ -19,7 +19,7 @@ (define-constant BUY-INFO-ERROR (err u2001)) (define-constant SELL-INFO-ERROR (err u2002)) -(define-constant token-supply u0) ;; <%= it.token_max_supply %> match with the token's supply (6 decimals) +(define-constant token-supply u21000000) ;; <%= it.token_max_supply %> match with the token's supply (6 decimals) (define-constant BONDING-DEX-ADDRESS (as-contract tx-sender)) ;; one contract per token ;; bonding curve config @@ -88,7 +88,7 @@ ;; <%= it.pool_contract %> ;; <%= it.bitflow_stx_token_address %> ;; <%= it.bitflow_fee_address %> - (try! (as-contract (contract-call? 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.xyk-core-v-1-2 create-pool .aibtcdev-ext009-bitflow-pool 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.token-stx-v-1-2 token-trait remain-stx remain-tokens xyk-burn-amount u10 u40 u10 u40 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 xyk-pool-uri true))) + (try! (as-contract (contract-call? 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.xyk-core-v-1-2 create-pool .aibtc-ext009-bitflow-pool 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.token-stx-v-1-2 token-trait remain-stx remain-tokens xyk-burn-amount u10 u40 u10 u40 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 xyk-pool-uri true))) ;; send fee (try! (as-contract (stx-transfer? COMPLETE_FEE tx-sender STX_CITY_COMPLETE_FEE_WALLET))) ;; update global variables diff --git a/contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar b/contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar index 4ae62688..72f1dc34 100644 --- a/contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar +++ b/contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar @@ -1,6 +1,6 @@ ;; Implement XYK pool trait and use SIP 010 trait (impl-trait 'ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8.xyk-pool-trait-v-1-2.xyk-pool-trait) ;; <%= it.bitflow_pool_trait %> -(use-trait sip-010-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) ;; <%= it.sip10_trait %> +(use-trait sip-010-trait 'ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8.sip-010-trait-ft-standard.sip-010-trait) ;; <%= it.sip10_trait %> ;; Define fungible pool token (define-fungible-token pool-token) diff --git a/deployments/default.simnet-plan.yaml b/deployments/default.simnet-plan.yaml deleted file mode 100644 index eb7e2e1d..00000000 --- a/deployments/default.simnet-plan.yaml +++ /dev/null @@ -1,185 +0,0 @@ ---- -id: 0 -name: "Simulated deployment, used as a default for `clarinet console`, `clarinet test` and `clarinet check`" -network: simnet -genesis: - wallets: - - name: deployer - address: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - balance: "100000000000000" - - name: faucet - address: STNHKEPYEPJ8ET55ZZ0M5A34J0R3N5FM2CMMMAZ6 - balance: "100000000000000" - - name: wallet_1 - address: ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5 - balance: "100000000000000" - - name: wallet_2 - address: ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG - balance: "100000000000000" - - name: wallet_3 - address: ST2JHG361ZXG51QTKY2NQCVBPPRRE2KZB1HR05NNC - balance: "100000000000000" - - name: wallet_4 - address: ST2NEB84ASENDXKYGJPQW86YXQCEFEX2ZQPG87ND - balance: "100000000000000" - - name: wallet_5 - address: ST2REHHS5J3CERCRBEPMGH7921Q6PYKAADT7JP2VB - balance: "100000000000000" - - name: wallet_6 - address: ST3AM1A56AK2C1XAFJ4115ZSV26EB49BVQ10MGCS0 - balance: "100000000000000" - - name: wallet_7 - address: ST3PF13W7Z0RRM42A8VZRVFQ75SV1K26RXEP8YGKJ - balance: "100000000000000" - - name: wallet_8 - address: ST3NBRSFKX28FQ2ZJ1MAKX58HKHSDGNV5N7R21XCP - balance: "100000000000000" - contracts: - - costs - - pox - - pox-2 - - pox-3 - - pox-4 - - lockup - - costs-2 - - costs-3 - - cost-voting - - bns -plan: - batches: - - id: 0 - transactions: - - emulated-contract-publish: - contract-name: nft-trait - emulated-sender: SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9 - path: "./.cache/requirements/SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait.clar" - clarity-version: 1 - - emulated-contract-publish: - contract-name: sip-010-trait-ft-standard - emulated-sender: SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE - path: "./.cache/requirements/SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.clar" - clarity-version: 1 - epoch: "2.0" - - id: 1 - transactions: - - emulated-contract-publish: - contract-name: sip-010-trait-ft-standard - emulated-sender: ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8 - path: "./.cache/requirements/ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8.sip-010-trait-ft-standard.clar" - clarity-version: 2 - - emulated-contract-publish: - contract-name: token-stx-v-1-2 - emulated-sender: ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 - path: "./.cache/requirements/ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.token-stx-v-1-2.clar" - clarity-version: 2 - - emulated-contract-publish: - contract-name: xyk-pool-trait-v-1-2 - emulated-sender: ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8 - path: "./.cache/requirements/ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8.xyk-pool-trait-v-1-2.clar" - clarity-version: 2 - - emulated-contract-publish: - contract-name: xyk-core-v-1-2 - emulated-sender: ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 - path: "./.cache/requirements/ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.xyk-core-v-1-2.clar" - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtcdev-dao-traits-v1 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/dao/traits/aibtcdev-dao-traits-v1.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtcdev-dao-v1 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/dao/traits/aibtcdev-dao-v1.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtcdev-base-dao - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/dao/aibtcdev-base-dao.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtc-ext001-actions - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/dao/extensions/aibtc-ext001-actions.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtc-ext002-bank-account - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/dao/extensions/aibtc-ext002-bank-account.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtc-ext003-direct-execute - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/dao/extensions/aibtc-ext003-direct-execute.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtc-ext004-messaging - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/dao/extensions/aibtc-ext004-messaging.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtc-ext005-payments - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/dao/extensions/aibtc-ext005-payments.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtc-ext006-treasury - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/dao/extensions/aibtc-ext006-treasury.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtc-ext007-token - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/dao/extensions/aibtc-ext007-token.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtc-ext008-dex - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/dao/extensions/aibtc-ext008-dex.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtc-ext009-bitflow-pool - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtc-prop001-bootstrap - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/dao/proposals/aibtc-prop001-bootstrap.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtcdev-airdrop-1 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/aibtcdev-airdrop-1.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: aibtcdev-airdrop-2 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/aibtcdev-airdrop-2.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: proxy - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/test/proxy.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: test-proxy - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/test/proxy.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: test-token - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/test/sip010-token.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: test-treasury - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/test/aibtc-treasury.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: external-proxy - emulated-sender: ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5 - path: contracts/test/proxy.clar - clarity-version: 2 - epoch: "2.5" From 5c69b362d2f11d30163f22458348caed18cd8972 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Sat, 4 Jan 2025 04:12:09 -0700 Subject: [PATCH 12/84] docs: add generated protocol overview --- docs/protocol-overview.md | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 docs/protocol-overview.md diff --git a/docs/protocol-overview.md b/docs/protocol-overview.md new file mode 100644 index 00000000..c0fdf3c4 --- /dev/null +++ b/docs/protocol-overview.md @@ -0,0 +1,43 @@ +# AIBTC DAO Protocol Overview + +## Core Components + +### Base DAO (aibtcdev-base-dao) +The foundational smart contract that implements the core DAO functionality. It manages extensions, executes proposals, and maintains the overall security of the protocol through permission checks and state management. + +### Bootstrap Proposal (aibtc-prop001-bootstrap) +The initial proposal that configures the DAO by enabling the core set of extensions and establishing the DAO's manifest. This proposal runs once during DAO construction to set up the initial state. + +## Extensions + +1. **aibtc-ext001-actions** + - Manages voting on predefined actions using a SIP-010 token with a lower threshold than direct-execute. + +2. **aibtc-ext002-bank-account** + - Allows a principal to withdraw STX from the contract on a periodic basis with configurable amounts. + +3. **aibtc-ext003-direct-execute** + - Enables high-threshold voting on proposals to execute Clarity code directly in the context of the DAO. + +4. **aibtc-ext004-messaging** + - Provides functionality to send on-chain messages that can be monitored by anyone listening to the contract. + +5. **aibtc-ext005-payments** + - Implements payment processing for aibtcdev services with resource management and invoice tracking. + +6. **aibtc-ext006-treasury** + - Manages the DAO's assets including STX, SIP-009 NFTs, and SIP-010 FTs with deposit and withdrawal functionality. + +## Protocol Architecture + +The AIBTC DAO protocol is designed as a modular system where the Base DAO acts as the central hub, coordinating all interactions between extensions and proposals. This architecture provides several key benefits: + +1. **Security**: All extensions must be explicitly enabled by the DAO, and only approved extensions can execute privileged operations. + +2. **Modularity**: New functionality can be added by deploying new extensions without modifying the core DAO contract. + +3. **Flexibility**: Different extensions can implement various voting mechanisms and thresholds appropriate to their specific use cases. + +The bootstrap proposal initializes this ecosystem by enabling the core set of extensions, each serving a specific purpose in the DAO's operation. Extensions can interact with each other through the Base DAO's extension callback mechanism, allowing for complex multi-step operations while maintaining security boundaries. + +Each extension has its own error code range (1000-6000) to ensure clear error handling and debugging across the protocol. This systematic approach to error management helps in maintaining and troubleshooting the protocol. From b76735c68e4a0401018461612bbbb85b45010239 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 10:05:31 -0700 Subject: [PATCH 13/84] refactor: rename and simplify contracts, add files for proposals --- .../{aibtc-ext001-actions.clar => aibtc-action-proposals.clar} | 0 .../{aibtc-ext002-bank-account.clar => aibtc-bank-account.clar} | 0 .../{aibtc-ext009-bitflow-pool.clar => aibtc-bitflow-pool.clar} | 0 ...btc-ext003-direct-execute.clar => aibtc-core-proposals.clar} | 0 ...aibtc-ext004-messaging.clar => aibtc-onchain-messaging.clar} | 0 ...{aibtc-ext005-payments.clar => aibtc-payments-invoices.clar} | 0 .../extensions/{aibtc-ext008-dex.clar => aibtc-token-dex.clar} | 0 contracts/dao/extensions/aibtc-token-owner.clar | 2 ++ .../extensions/{aibtc-ext007-token.clar => aibtc-token.clar} | 0 .../{aibtc-ext006-treasury.clar => aibtc-treasury.clar} | 0 contracts/dao/proposals/aibtc-base-add-new-extension.clar | 0 ...-bootstrap.clar => aibtc-base-bootstrap-initialization.clar} | 0 contracts/dao/proposals/aibtc-base-replace-extension.clar | 0 contracts/dao/proposals/aibtc-treasury-delegate-stx.clar | 0 contracts/dao/proposals/aibtc-treasury-revoke-delegation.clar | 0 contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar | 0 contracts/dao/proposals/aibtc-treasury-withrdaw-ft.clar | 0 contracts/dao/proposals/aibtc-treasury-withrdaw-stx.clar | 0 18 files changed, 2 insertions(+) rename contracts/dao/extensions/{aibtc-ext001-actions.clar => aibtc-action-proposals.clar} (100%) rename contracts/dao/extensions/{aibtc-ext002-bank-account.clar => aibtc-bank-account.clar} (100%) rename contracts/dao/extensions/{aibtc-ext009-bitflow-pool.clar => aibtc-bitflow-pool.clar} (100%) rename contracts/dao/extensions/{aibtc-ext003-direct-execute.clar => aibtc-core-proposals.clar} (100%) rename contracts/dao/extensions/{aibtc-ext004-messaging.clar => aibtc-onchain-messaging.clar} (100%) rename contracts/dao/extensions/{aibtc-ext005-payments.clar => aibtc-payments-invoices.clar} (100%) rename contracts/dao/extensions/{aibtc-ext008-dex.clar => aibtc-token-dex.clar} (100%) create mode 100644 contracts/dao/extensions/aibtc-token-owner.clar rename contracts/dao/extensions/{aibtc-ext007-token.clar => aibtc-token.clar} (100%) rename contracts/dao/extensions/{aibtc-ext006-treasury.clar => aibtc-treasury.clar} (100%) create mode 100644 contracts/dao/proposals/aibtc-base-add-new-extension.clar rename contracts/dao/proposals/{aibtc-prop001-bootstrap.clar => aibtc-base-bootstrap-initialization.clar} (100%) create mode 100644 contracts/dao/proposals/aibtc-base-replace-extension.clar create mode 100644 contracts/dao/proposals/aibtc-treasury-delegate-stx.clar create mode 100644 contracts/dao/proposals/aibtc-treasury-revoke-delegation.clar create mode 100644 contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar create mode 100644 contracts/dao/proposals/aibtc-treasury-withrdaw-ft.clar create mode 100644 contracts/dao/proposals/aibtc-treasury-withrdaw-stx.clar diff --git a/contracts/dao/extensions/aibtc-ext001-actions.clar b/contracts/dao/extensions/aibtc-action-proposals.clar similarity index 100% rename from contracts/dao/extensions/aibtc-ext001-actions.clar rename to contracts/dao/extensions/aibtc-action-proposals.clar diff --git a/contracts/dao/extensions/aibtc-ext002-bank-account.clar b/contracts/dao/extensions/aibtc-bank-account.clar similarity index 100% rename from contracts/dao/extensions/aibtc-ext002-bank-account.clar rename to contracts/dao/extensions/aibtc-bank-account.clar diff --git a/contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar b/contracts/dao/extensions/aibtc-bitflow-pool.clar similarity index 100% rename from contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar rename to contracts/dao/extensions/aibtc-bitflow-pool.clar diff --git a/contracts/dao/extensions/aibtc-ext003-direct-execute.clar b/contracts/dao/extensions/aibtc-core-proposals.clar similarity index 100% rename from contracts/dao/extensions/aibtc-ext003-direct-execute.clar rename to contracts/dao/extensions/aibtc-core-proposals.clar diff --git a/contracts/dao/extensions/aibtc-ext004-messaging.clar b/contracts/dao/extensions/aibtc-onchain-messaging.clar similarity index 100% rename from contracts/dao/extensions/aibtc-ext004-messaging.clar rename to contracts/dao/extensions/aibtc-onchain-messaging.clar diff --git a/contracts/dao/extensions/aibtc-ext005-payments.clar b/contracts/dao/extensions/aibtc-payments-invoices.clar similarity index 100% rename from contracts/dao/extensions/aibtc-ext005-payments.clar rename to contracts/dao/extensions/aibtc-payments-invoices.clar diff --git a/contracts/dao/extensions/aibtc-ext008-dex.clar b/contracts/dao/extensions/aibtc-token-dex.clar similarity index 100% rename from contracts/dao/extensions/aibtc-ext008-dex.clar rename to contracts/dao/extensions/aibtc-token-dex.clar diff --git a/contracts/dao/extensions/aibtc-token-owner.clar b/contracts/dao/extensions/aibtc-token-owner.clar new file mode 100644 index 00000000..0abb0402 --- /dev/null +++ b/contracts/dao/extensions/aibtc-token-owner.clar @@ -0,0 +1,2 @@ +;; set-token-uri +;; transfer-ownership \ No newline at end of file diff --git a/contracts/dao/extensions/aibtc-ext007-token.clar b/contracts/dao/extensions/aibtc-token.clar similarity index 100% rename from contracts/dao/extensions/aibtc-ext007-token.clar rename to contracts/dao/extensions/aibtc-token.clar diff --git a/contracts/dao/extensions/aibtc-ext006-treasury.clar b/contracts/dao/extensions/aibtc-treasury.clar similarity index 100% rename from contracts/dao/extensions/aibtc-ext006-treasury.clar rename to contracts/dao/extensions/aibtc-treasury.clar diff --git a/contracts/dao/proposals/aibtc-base-add-new-extension.clar b/contracts/dao/proposals/aibtc-base-add-new-extension.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-prop001-bootstrap.clar b/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar similarity index 100% rename from contracts/dao/proposals/aibtc-prop001-bootstrap.clar rename to contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar diff --git a/contracts/dao/proposals/aibtc-base-replace-extension.clar b/contracts/dao/proposals/aibtc-base-replace-extension.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-treasury-delegate-stx.clar b/contracts/dao/proposals/aibtc-treasury-delegate-stx.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-treasury-revoke-delegation.clar b/contracts/dao/proposals/aibtc-treasury-revoke-delegation.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar b/contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-treasury-withrdaw-ft.clar b/contracts/dao/proposals/aibtc-treasury-withrdaw-ft.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-treasury-withrdaw-stx.clar b/contracts/dao/proposals/aibtc-treasury-withrdaw-stx.clar new file mode 100644 index 00000000..e69de29b From d47e57221390a920eff25beb98476fcd2919a58d Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 10:10:31 -0700 Subject: [PATCH 14/84] fix: rename and create test files to match --- .../{aibtc-ext001-actions.test.ts => aibtc-action-proposals.ts} | 0 .../{aibtc-ext002-bank-account.test.ts => aibtc-bank-account.ts} | 0 tests/dao/extensions/aibtc-bitflow-pool.ts | 0 ...ibtc-ext003-direct-execute.test.ts => aibtc-core-proposals.ts} | 0 ...{aibtc-ext004-messaging.test.ts => aibtc-onchain-messaging.ts} | 0 .../{aibtc-ext005-payments.test.ts => aibtc-payments-invoices.ts} | 0 tests/dao/extensions/aibtc-token-dex.ts | 0 tests/dao/extensions/aibtc-token-owner.ts | 0 tests/dao/extensions/aibtc-token.ts | 0 .../{aibtc-ext006-treasury.test.ts => aibtc-treasury.ts} | 0 tests/dao/proposals/aibtc-base-add-new-extension.ts | 0 ...1-bootstrap.test.ts => aibtc-base-bootstrap-initialization.ts} | 0 tests/dao/proposals/aibtc-base-replace-extension.ts | 0 tests/dao/proposals/aibtc-treasury-delegate-stx.ts | 0 tests/dao/proposals/aibtc-treasury-revoke-delegation.ts | 0 tests/dao/proposals/aibtc-treasury-withdaw-nft.ts | 0 tests/dao/proposals/aibtc-treasury-withdraw-ft.ts | 0 tests/dao/proposals/aibtc-treasury-withdraw-stx.ts | 0 18 files changed, 0 insertions(+), 0 deletions(-) rename tests/dao/extensions/{aibtc-ext001-actions.test.ts => aibtc-action-proposals.ts} (100%) rename tests/dao/extensions/{aibtc-ext002-bank-account.test.ts => aibtc-bank-account.ts} (100%) create mode 100644 tests/dao/extensions/aibtc-bitflow-pool.ts rename tests/dao/extensions/{aibtc-ext003-direct-execute.test.ts => aibtc-core-proposals.ts} (100%) rename tests/dao/extensions/{aibtc-ext004-messaging.test.ts => aibtc-onchain-messaging.ts} (100%) rename tests/dao/extensions/{aibtc-ext005-payments.test.ts => aibtc-payments-invoices.ts} (100%) create mode 100644 tests/dao/extensions/aibtc-token-dex.ts create mode 100644 tests/dao/extensions/aibtc-token-owner.ts create mode 100644 tests/dao/extensions/aibtc-token.ts rename tests/dao/extensions/{aibtc-ext006-treasury.test.ts => aibtc-treasury.ts} (100%) create mode 100644 tests/dao/proposals/aibtc-base-add-new-extension.ts rename tests/dao/proposals/{aibtc001-bootstrap.test.ts => aibtc-base-bootstrap-initialization.ts} (100%) create mode 100644 tests/dao/proposals/aibtc-base-replace-extension.ts create mode 100644 tests/dao/proposals/aibtc-treasury-delegate-stx.ts create mode 100644 tests/dao/proposals/aibtc-treasury-revoke-delegation.ts create mode 100644 tests/dao/proposals/aibtc-treasury-withdaw-nft.ts create mode 100644 tests/dao/proposals/aibtc-treasury-withdraw-ft.ts create mode 100644 tests/dao/proposals/aibtc-treasury-withdraw-stx.ts diff --git a/tests/dao/extensions/aibtc-ext001-actions.test.ts b/tests/dao/extensions/aibtc-action-proposals.ts similarity index 100% rename from tests/dao/extensions/aibtc-ext001-actions.test.ts rename to tests/dao/extensions/aibtc-action-proposals.ts diff --git a/tests/dao/extensions/aibtc-ext002-bank-account.test.ts b/tests/dao/extensions/aibtc-bank-account.ts similarity index 100% rename from tests/dao/extensions/aibtc-ext002-bank-account.test.ts rename to tests/dao/extensions/aibtc-bank-account.ts diff --git a/tests/dao/extensions/aibtc-bitflow-pool.ts b/tests/dao/extensions/aibtc-bitflow-pool.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/extensions/aibtc-ext003-direct-execute.test.ts b/tests/dao/extensions/aibtc-core-proposals.ts similarity index 100% rename from tests/dao/extensions/aibtc-ext003-direct-execute.test.ts rename to tests/dao/extensions/aibtc-core-proposals.ts diff --git a/tests/dao/extensions/aibtc-ext004-messaging.test.ts b/tests/dao/extensions/aibtc-onchain-messaging.ts similarity index 100% rename from tests/dao/extensions/aibtc-ext004-messaging.test.ts rename to tests/dao/extensions/aibtc-onchain-messaging.ts diff --git a/tests/dao/extensions/aibtc-ext005-payments.test.ts b/tests/dao/extensions/aibtc-payments-invoices.ts similarity index 100% rename from tests/dao/extensions/aibtc-ext005-payments.test.ts rename to tests/dao/extensions/aibtc-payments-invoices.ts diff --git a/tests/dao/extensions/aibtc-token-dex.ts b/tests/dao/extensions/aibtc-token-dex.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/extensions/aibtc-token-owner.ts b/tests/dao/extensions/aibtc-token-owner.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/extensions/aibtc-token.ts b/tests/dao/extensions/aibtc-token.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/extensions/aibtc-ext006-treasury.test.ts b/tests/dao/extensions/aibtc-treasury.ts similarity index 100% rename from tests/dao/extensions/aibtc-ext006-treasury.test.ts rename to tests/dao/extensions/aibtc-treasury.ts diff --git a/tests/dao/proposals/aibtc-base-add-new-extension.ts b/tests/dao/proposals/aibtc-base-add-new-extension.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/proposals/aibtc001-bootstrap.test.ts b/tests/dao/proposals/aibtc-base-bootstrap-initialization.ts similarity index 100% rename from tests/dao/proposals/aibtc001-bootstrap.test.ts rename to tests/dao/proposals/aibtc-base-bootstrap-initialization.ts diff --git a/tests/dao/proposals/aibtc-base-replace-extension.ts b/tests/dao/proposals/aibtc-base-replace-extension.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/proposals/aibtc-treasury-delegate-stx.ts b/tests/dao/proposals/aibtc-treasury-delegate-stx.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/proposals/aibtc-treasury-revoke-delegation.ts b/tests/dao/proposals/aibtc-treasury-revoke-delegation.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/proposals/aibtc-treasury-withdaw-nft.ts b/tests/dao/proposals/aibtc-treasury-withdaw-nft.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/proposals/aibtc-treasury-withdraw-ft.ts b/tests/dao/proposals/aibtc-treasury-withdraw-ft.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/proposals/aibtc-treasury-withdraw-stx.ts b/tests/dao/proposals/aibtc-treasury-withdraw-stx.ts new file mode 100644 index 00000000..e69de29b From bcb16337ec9c33db84ce678394f18ffdfc0a00f3 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 10:11:38 -0700 Subject: [PATCH 15/84] fix: update epoch to 3.0 for all contracts --- Clarinet.toml | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Clarinet.toml b/Clarinet.toml index 8b4eff66..f76dfa58 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -42,110 +42,110 @@ contract_id = 'ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8.xyk-pool-trait-v-1-2' [contracts.aibtcdev-airdrop-1] path = 'contracts/aibtcdev-airdrop-1.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.aibtcdev-airdrop-2] path = 'contracts/aibtcdev-airdrop-2.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 # dao base contract [contracts.aibtcdev-base-dao] path = 'contracts/dao/aibtcdev-base-dao.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 # dao proposals [contracts.aibtc-prop001-bootstrap] path = 'contracts/dao/proposals/aibtc-prop001-bootstrap.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 # dao extensions [contracts.aibtc-ext001-actions] path = 'contracts/dao/extensions/aibtc-ext001-actions.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.aibtc-ext002-bank-account] path = 'contracts/dao/extensions/aibtc-ext002-bank-account.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.aibtc-ext003-direct-execute] path = 'contracts/dao/extensions/aibtc-ext003-direct-execute.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.aibtc-ext004-messaging] path = 'contracts/dao/extensions/aibtc-ext004-messaging.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.aibtc-ext005-payments] path = 'contracts/dao/extensions/aibtc-ext005-payments.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.aibtc-ext006-treasury] path = 'contracts/dao/extensions/aibtc-ext006-treasury.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.aibtc-ext007-token] path = 'contracts/dao/extensions/aibtc-ext007-token.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.aibtc-ext008-dex] path = 'contracts/dao/extensions/aibtc-ext008-dex.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.aibtc-ext009-bitflow-pool] path = 'contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 # dao traits [contracts.aibtcdev-dao-v1] path = 'contracts/dao/traits/aibtcdev-dao-v1.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.aibtcdev-dao-traits-v1] path = 'contracts/dao/traits/aibtcdev-dao-traits-v1.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 # testing utilities [contracts.test-treasury] path = 'contracts/test/aibtc-treasury.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.external-proxy] path = 'contracts/test/proxy.clar' deployer = 'wallet_1' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.proxy] path = 'contracts/test/proxy.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.test-proxy] path = 'contracts/test/proxy.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 [contracts.test-token] path = 'contracts/test/sip010-token.clar' clarity_version = 2 -epoch = 2.5 +epoch = 3.0 From b17d509a389070abf2cfb15b75d74b8d8ff09469 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 10:31:02 -0700 Subject: [PATCH 16/84] fix: update clarinet.toml with new and missing names --- Clarinet.toml | 97 +++++++++++++++---- .../aibtc-base-disable-extension.clar | 0 .../aibtc-base-enable-extension.clar | 0 3 files changed, 77 insertions(+), 20 deletions(-) create mode 100644 contracts/dao/proposals/aibtc-base-disable-extension.clar create mode 100644 contracts/dao/proposals/aibtc-base-enable-extension.clar diff --git a/Clarinet.toml b/Clarinet.toml index f76dfa58..b31a83f1 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -58,55 +58,112 @@ epoch = 3.0 # dao proposals -[contracts.aibtc-prop001-bootstrap] -path = 'contracts/dao/proposals/aibtc-prop001-bootstrap.clar' +[contracts.aibtc-bootstrap-initialization] +path = 'contracts/dao/proposals/aibtc-bootstrap-initialization.clar' clarity_version = 2 epoch = 3.0 # dao extensions -[contracts.aibtc-ext001-actions] -path = 'contracts/dao/extensions/aibtc-ext001-actions.clar' +[contracts.aibtc-action-proposals] +path = 'contracts/dao/extensions/aibtc-action-proposals.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-ext002-bank-account] -path = 'contracts/dao/extensions/aibtc-ext002-bank-account.clar' +[contracts.aibtc-bank-account] +path = 'contracts/dao/extensions/aibtc-bank-account.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-ext003-direct-execute] -path = 'contracts/dao/extensions/aibtc-ext003-direct-execute.clar' +[contracts.aibtc-core-proposals] +path = 'contracts/dao/extensions/aibtc-core-proposals.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-ext004-messaging] -path = 'contracts/dao/extensions/aibtc-ext004-messaging.clar' +[contracts.aibtc-onchain-messaging] +path = 'contracts/dao/extensions/aibtc-onchain-messaging.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-ext005-payments] -path = 'contracts/dao/extensions/aibtc-ext005-payments.clar' +[contracts.aibtc-payments-invoices] +path = 'contracts/dao/extensions/aibtc-payments-invoices.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-ext006-treasury] -path = 'contracts/dao/extensions/aibtc-ext006-treasury.clar' +[contracts.aibtc-treasury] +path = 'contracts/dao/extensions/aibtc-treasury.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-ext007-token] -path = 'contracts/dao/extensions/aibtc-ext007-token.clar' +[contracts.aibtc-token] +path = 'contracts/dao/extensions/aibtc-token.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-ext008-dex] -path = 'contracts/dao/extensions/aibtc-ext008-dex.clar' +[contracts.aibtc-token-dex] +path = 'contracts/dao/extensions/aibtc-token-dex.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-ext009-bitflow-pool] -path = 'contracts/dao/extensions/aibtc-ext009-bitflow-pool.clar' +[contracts.aibtc-token-owner] +path = 'contracts/dao/extensions/aibtc-token-owner.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-bitflow-pool] +path = 'contracts/dao/extensions/aibtc-bitflow-pool.clar' +clarity_version = 2 +epoch = 3.0 + +# dao proposals + +[contracts.aibtc-base-add-new-extension] +path = 'contracts/dao/proposals/aibtc-base-add-new-extension.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-base-bootstrap-initialization] +path = 'contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-base-disable-extension] +path = 'contracts/dao/proposals/aibtc-base-disable-extension.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-base-enable-extension] +path = 'contracts/dao/proposals/aibtc-base-enable-extension.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-base-replace-extension] +path = 'contracts/dao/proposals/aibtc-base-replace-extension.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-treasury-delegate-stx] +path = 'contracts/dao/proposals/aibtc-treasury-delegate-stx.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-treasury-revoke-delegation] +path = 'contracts/dao/proposals/aibtc-treasury-revoke-delegation.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-treasury-withdraw-nft] +path = 'contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-treasury-withdraw-ft] +path = 'contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-treasury-withdraw-stx] +path = 'contracts/dao/proposals/aibtc-treasury-withdraw-stx.clar' clarity_version = 2 epoch = 3.0 diff --git a/contracts/dao/proposals/aibtc-base-disable-extension.clar b/contracts/dao/proposals/aibtc-base-disable-extension.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-base-enable-extension.clar b/contracts/dao/proposals/aibtc-base-enable-extension.clar new file mode 100644 index 00000000..e69de29b From 76e12f41cf86f43116575a4e14d43798da0b6e74 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 11:29:41 -0700 Subject: [PATCH 17/84] feat: add proposals for all public functions Still need to fill in the details on each. --- .../dao/extensions/aibtc-bitflow-pool-owner.clar | 12 ++++++++++++ contracts/dao/extensions/aibtc-token-dex.clar | 2 +- ...w-ft.clar => aibtc-bank-account-deposit-stx.clar} | 0 .../proposals/aibtc-bank-account-initialize-new.clar | 6 ++++++ ...bank-account-override-last-withdrawal-block.clar} | 0 .../aibtc-bank-account-set-account-holder.clar | 0 .../aibtc-bank-account-set-protocol-treasury.clar | 0 .../aibtc-bank-account-set-withdrawal-amount.clar | 0 .../aibtc-bank-account-set-withdrawal-period.clar | 0 .../proposals/aibtc-bank-account-withdraw-stx.clar | 0 .../dao/proposals/aibtc-onchain-messaging-send.clar | 0 .../aibtc-payments-invoices-add-resource.clar | 0 ...yments-invoices-pay-invoice-by-resource-name.clar | 0 .../aibtc-payments-invoices-pay-invoice.clar | 0 .../aibtc-payments-invoices-set-payment-address.clar | 0 ...tc-payments-invoices-toggle-resource-by-name.clar | 0 .../aibtc-payments-invoices-toggle-resource.clar | 0 .../proposals/aibtc-token-owner-set-token-uri.clar | 0 .../aibtc-token-owner-transfer-ownership.clar | 0 .../dao/proposals/aibtc-treasury-allow-asset.clar | 0 .../dao/proposals/aibtc-treasury-deposit-ft.clar | 0 .../dao/proposals/aibtc-treasury-deposit-nft.clar | 0 .../dao/proposals/aibtc-treasury-deposit-stx.clar | 0 .../dao/proposals/aibtc-treasury-withdraw-ft.clar | 0 .../dao/proposals/aibtc-treasury-withdraw-stx.clar | 0 25 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 contracts/dao/extensions/aibtc-bitflow-pool-owner.clar rename contracts/dao/proposals/{aibtc-treasury-withrdaw-ft.clar => aibtc-bank-account-deposit-stx.clar} (100%) create mode 100644 contracts/dao/proposals/aibtc-bank-account-initialize-new.clar rename contracts/dao/proposals/{aibtc-treasury-withrdaw-stx.clar => aibtc-bank-account-override-last-withdrawal-block.clar} (100%) create mode 100644 contracts/dao/proposals/aibtc-bank-account-set-account-holder.clar create mode 100644 contracts/dao/proposals/aibtc-bank-account-set-protocol-treasury.clar create mode 100644 contracts/dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar create mode 100644 contracts/dao/proposals/aibtc-bank-account-set-withdrawal-period.clar create mode 100644 contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar create mode 100644 contracts/dao/proposals/aibtc-onchain-messaging-send.clar create mode 100644 contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar create mode 100644 contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar create mode 100644 contracts/dao/proposals/aibtc-payments-invoices-pay-invoice.clar create mode 100644 contracts/dao/proposals/aibtc-payments-invoices-set-payment-address.clar create mode 100644 contracts/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.clar create mode 100644 contracts/dao/proposals/aibtc-payments-invoices-toggle-resource.clar create mode 100644 contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar create mode 100644 contracts/dao/proposals/aibtc-token-owner-transfer-ownership.clar create mode 100644 contracts/dao/proposals/aibtc-treasury-allow-asset.clar create mode 100644 contracts/dao/proposals/aibtc-treasury-deposit-ft.clar create mode 100644 contracts/dao/proposals/aibtc-treasury-deposit-nft.clar create mode 100644 contracts/dao/proposals/aibtc-treasury-deposit-stx.clar create mode 100644 contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar create mode 100644 contracts/dao/proposals/aibtc-treasury-withdraw-stx.clar diff --git a/contracts/dao/extensions/aibtc-bitflow-pool-owner.clar b/contracts/dao/extensions/aibtc-bitflow-pool-owner.clar new file mode 100644 index 00000000..09a9a661 --- /dev/null +++ b/contracts/dao/extensions/aibtc-bitflow-pool-owner.clar @@ -0,0 +1,12 @@ +;; performs admin functions for bitflow-pool +;; set-pool-uri +;; set-pool-status +;; set-fee-address +;; set-x-fees +;; set-y-fees +;; update-pool-balances +;; transfer +;; pool-transfer +;; pool-mint +;; pool-burn +;; create-pool diff --git a/contracts/dao/extensions/aibtc-token-dex.clar b/contracts/dao/extensions/aibtc-token-dex.clar index dc423000..01f8dc37 100644 --- a/contracts/dao/extensions/aibtc-token-dex.clar +++ b/contracts/dao/extensions/aibtc-token-dex.clar @@ -205,4 +205,4 @@ ;; Return success (ok true) -) \ No newline at end of file +) diff --git a/contracts/dao/proposals/aibtc-treasury-withrdaw-ft.clar b/contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar similarity index 100% rename from contracts/dao/proposals/aibtc-treasury-withrdaw-ft.clar rename to contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar diff --git a/contracts/dao/proposals/aibtc-bank-account-initialize-new.clar b/contracts/dao/proposals/aibtc-bank-account-initialize-new.clar new file mode 100644 index 00000000..c7f0fa10 --- /dev/null +++ b/contracts/dao/proposals/aibtc-bank-account-initialize-new.clar @@ -0,0 +1,6 @@ +;; what steps are required to set up a bank account? +;; compound action: +;; 1. deploy this contract +;; 2. set the account holder +;; 3. enable the extension +;; 4. fund the extension \ No newline at end of file diff --git a/contracts/dao/proposals/aibtc-treasury-withrdaw-stx.clar b/contracts/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.clar similarity index 100% rename from contracts/dao/proposals/aibtc-treasury-withrdaw-stx.clar rename to contracts/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.clar diff --git a/contracts/dao/proposals/aibtc-bank-account-set-account-holder.clar b/contracts/dao/proposals/aibtc-bank-account-set-account-holder.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-bank-account-set-protocol-treasury.clar b/contracts/dao/proposals/aibtc-bank-account-set-protocol-treasury.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar b/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-period.clar b/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-period.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar b/contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-onchain-messaging-send.clar b/contracts/dao/proposals/aibtc-onchain-messaging-send.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar b/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar b/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice.clar b/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-payments-invoices-set-payment-address.clar b/contracts/dao/proposals/aibtc-payments-invoices-set-payment-address.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.clar b/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource.clar b/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar b/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-token-owner-transfer-ownership.clar b/contracts/dao/proposals/aibtc-token-owner-transfer-ownership.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-treasury-allow-asset.clar b/contracts/dao/proposals/aibtc-treasury-allow-asset.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-treasury-deposit-ft.clar b/contracts/dao/proposals/aibtc-treasury-deposit-ft.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-treasury-deposit-nft.clar b/contracts/dao/proposals/aibtc-treasury-deposit-nft.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-treasury-deposit-stx.clar b/contracts/dao/proposals/aibtc-treasury-deposit-stx.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar b/contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-treasury-withdraw-stx.clar b/contracts/dao/proposals/aibtc-treasury-withdraw-stx.clar new file mode 100644 index 00000000..e69de29b From 51472a10b3ab5e625b732ccca05a2254e6a53e6f Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:31:18 -0700 Subject: [PATCH 18/84] feat: Add empty test files for all contracts in project --- tests/dao/extensions/aibtc-bitflow-pool-owner.test.ts | 7 +++++++ tests/dao/proposals/aibtc-bank-account-deposit-stx.test.ts | 7 +++++++ .../proposals/aibtc-bank-account-initialize-new.test.ts | 7 +++++++ ...btc-bank-account-override-last-withdrawal-block.test.ts | 7 +++++++ .../aibtc-bank-account-set-account-holder.test.ts | 7 +++++++ .../aibtc-bank-account-set-protocol-treasury.test.ts | 7 +++++++ .../aibtc-bank-account-set-withdrawal-amount.test.ts | 7 +++++++ .../aibtc-bank-account-set-withdrawal-period.test.ts | 7 +++++++ tests/dao/proposals/aibtc-base-disable-extension.test.ts | 7 +++++++ tests/dao/proposals/aibtc-base-enable-extension.test.ts | 7 +++++++ tests/dao/proposals/aibtc-onchain-messaging-send.test.ts | 7 +++++++ .../proposals/aibtc-payments-invoices-add-resource.test.ts | 7 +++++++ ...-payments-invoices-pay-invoice-by-resource-name.test.ts | 7 +++++++ .../proposals/aibtc-payments-invoices-pay-invoice.test.ts | 7 +++++++ .../aibtc-payments-invoices-set-payment-address.test.ts | 7 +++++++ ...aibtc-payments-invoices-toggle-resource-by-name.test.ts | 7 +++++++ .../aibtc-payments-invoices-toggle-resource.test.ts | 7 +++++++ .../dao/proposals/aibtc-token-owner-set-token-uri.test.ts | 7 +++++++ .../proposals/aibtc-token-owner-transfer-ownership.test.ts | 7 +++++++ tests/dao/proposals/aibtc-treasury-allow-asset.test.ts | 7 +++++++ tests/dao/proposals/aibtc-treasury-deposit-ft.test.ts | 7 +++++++ tests/dao/proposals/aibtc-treasury-deposit-nft.test.ts | 7 +++++++ tests/dao/proposals/aibtc-treasury-deposit-stx.test.ts | 7 +++++++ tests/dao/traits/aibtcdev-dao-v1.test.ts | 7 +++++++ 24 files changed, 168 insertions(+) create mode 100644 tests/dao/extensions/aibtc-bitflow-pool-owner.test.ts create mode 100644 tests/dao/proposals/aibtc-bank-account-deposit-stx.test.ts create mode 100644 tests/dao/proposals/aibtc-bank-account-initialize-new.test.ts create mode 100644 tests/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.test.ts create mode 100644 tests/dao/proposals/aibtc-bank-account-set-account-holder.test.ts create mode 100644 tests/dao/proposals/aibtc-bank-account-set-protocol-treasury.test.ts create mode 100644 tests/dao/proposals/aibtc-bank-account-set-withdrawal-amount.test.ts create mode 100644 tests/dao/proposals/aibtc-bank-account-set-withdrawal-period.test.ts create mode 100644 tests/dao/proposals/aibtc-base-disable-extension.test.ts create mode 100644 tests/dao/proposals/aibtc-base-enable-extension.test.ts create mode 100644 tests/dao/proposals/aibtc-onchain-messaging-send.test.ts create mode 100644 tests/dao/proposals/aibtc-payments-invoices-add-resource.test.ts create mode 100644 tests/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.test.ts create mode 100644 tests/dao/proposals/aibtc-payments-invoices-pay-invoice.test.ts create mode 100644 tests/dao/proposals/aibtc-payments-invoices-set-payment-address.test.ts create mode 100644 tests/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.test.ts create mode 100644 tests/dao/proposals/aibtc-payments-invoices-toggle-resource.test.ts create mode 100644 tests/dao/proposals/aibtc-token-owner-set-token-uri.test.ts create mode 100644 tests/dao/proposals/aibtc-token-owner-transfer-ownership.test.ts create mode 100644 tests/dao/proposals/aibtc-treasury-allow-asset.test.ts create mode 100644 tests/dao/proposals/aibtc-treasury-deposit-ft.test.ts create mode 100644 tests/dao/proposals/aibtc-treasury-deposit-nft.test.ts create mode 100644 tests/dao/proposals/aibtc-treasury-deposit-stx.test.ts create mode 100644 tests/dao/traits/aibtcdev-dao-v1.test.ts diff --git a/tests/dao/extensions/aibtc-bitflow-pool-owner.test.ts b/tests/dao/extensions/aibtc-bitflow-pool-owner.test.ts new file mode 100644 index 00000000..4104b7d4 --- /dev/null +++ b/tests/dao/extensions/aibtc-bitflow-pool-owner.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-bitflow-pool-owner", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-bank-account-deposit-stx.test.ts b/tests/dao/proposals/aibtc-bank-account-deposit-stx.test.ts new file mode 100644 index 00000000..8f5ff5cc --- /dev/null +++ b/tests/dao/proposals/aibtc-bank-account-deposit-stx.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-bank-account-deposit-stx", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-bank-account-initialize-new.test.ts b/tests/dao/proposals/aibtc-bank-account-initialize-new.test.ts new file mode 100644 index 00000000..45a2e819 --- /dev/null +++ b/tests/dao/proposals/aibtc-bank-account-initialize-new.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-bank-account-initialize-new", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.test.ts b/tests/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.test.ts new file mode 100644 index 00000000..c56ca079 --- /dev/null +++ b/tests/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-bank-account-override-last-withdrawal-block", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-bank-account-set-account-holder.test.ts b/tests/dao/proposals/aibtc-bank-account-set-account-holder.test.ts new file mode 100644 index 00000000..e3bb2950 --- /dev/null +++ b/tests/dao/proposals/aibtc-bank-account-set-account-holder.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-bank-account-set-account-holder", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-bank-account-set-protocol-treasury.test.ts b/tests/dao/proposals/aibtc-bank-account-set-protocol-treasury.test.ts new file mode 100644 index 00000000..ef184563 --- /dev/null +++ b/tests/dao/proposals/aibtc-bank-account-set-protocol-treasury.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-bank-account-set-protocol-treasury", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-bank-account-set-withdrawal-amount.test.ts b/tests/dao/proposals/aibtc-bank-account-set-withdrawal-amount.test.ts new file mode 100644 index 00000000..bfe55d33 --- /dev/null +++ b/tests/dao/proposals/aibtc-bank-account-set-withdrawal-amount.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-bank-account-set-withdrawal-amount", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-bank-account-set-withdrawal-period.test.ts b/tests/dao/proposals/aibtc-bank-account-set-withdrawal-period.test.ts new file mode 100644 index 00000000..d465e952 --- /dev/null +++ b/tests/dao/proposals/aibtc-bank-account-set-withdrawal-period.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-bank-account-set-withdrawal-period", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-base-disable-extension.test.ts b/tests/dao/proposals/aibtc-base-disable-extension.test.ts new file mode 100644 index 00000000..8483c8b1 --- /dev/null +++ b/tests/dao/proposals/aibtc-base-disable-extension.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-base-disable-extension", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-base-enable-extension.test.ts b/tests/dao/proposals/aibtc-base-enable-extension.test.ts new file mode 100644 index 00000000..e0a57c83 --- /dev/null +++ b/tests/dao/proposals/aibtc-base-enable-extension.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-base-enable-extension", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-onchain-messaging-send.test.ts b/tests/dao/proposals/aibtc-onchain-messaging-send.test.ts new file mode 100644 index 00000000..0f7ae9b4 --- /dev/null +++ b/tests/dao/proposals/aibtc-onchain-messaging-send.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-onchain-messaging-send", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-payments-invoices-add-resource.test.ts b/tests/dao/proposals/aibtc-payments-invoices-add-resource.test.ts new file mode 100644 index 00000000..6c25ec12 --- /dev/null +++ b/tests/dao/proposals/aibtc-payments-invoices-add-resource.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-payments-invoices-add-resource", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.test.ts b/tests/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.test.ts new file mode 100644 index 00000000..304694c8 --- /dev/null +++ b/tests/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-payments-invoices-pay-invoice-by-resource-name", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-payments-invoices-pay-invoice.test.ts b/tests/dao/proposals/aibtc-payments-invoices-pay-invoice.test.ts new file mode 100644 index 00000000..19ee4f14 --- /dev/null +++ b/tests/dao/proposals/aibtc-payments-invoices-pay-invoice.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-payments-invoices-pay-invoice", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-payments-invoices-set-payment-address.test.ts b/tests/dao/proposals/aibtc-payments-invoices-set-payment-address.test.ts new file mode 100644 index 00000000..dfdaa103 --- /dev/null +++ b/tests/dao/proposals/aibtc-payments-invoices-set-payment-address.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-payments-invoices-set-payment-address", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.test.ts b/tests/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.test.ts new file mode 100644 index 00000000..c59f3da8 --- /dev/null +++ b/tests/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-payments-invoices-toggle-resource-by-name", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-payments-invoices-toggle-resource.test.ts b/tests/dao/proposals/aibtc-payments-invoices-toggle-resource.test.ts new file mode 100644 index 00000000..f0b5786f --- /dev/null +++ b/tests/dao/proposals/aibtc-payments-invoices-toggle-resource.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-payments-invoices-toggle-resource", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-token-owner-set-token-uri.test.ts b/tests/dao/proposals/aibtc-token-owner-set-token-uri.test.ts new file mode 100644 index 00000000..41e6818d --- /dev/null +++ b/tests/dao/proposals/aibtc-token-owner-set-token-uri.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-token-owner-set-token-uri", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-token-owner-transfer-ownership.test.ts b/tests/dao/proposals/aibtc-token-owner-transfer-ownership.test.ts new file mode 100644 index 00000000..22af3ff2 --- /dev/null +++ b/tests/dao/proposals/aibtc-token-owner-transfer-ownership.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-token-owner-transfer-ownership", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-treasury-allow-asset.test.ts b/tests/dao/proposals/aibtc-treasury-allow-asset.test.ts new file mode 100644 index 00000000..89ec4cb2 --- /dev/null +++ b/tests/dao/proposals/aibtc-treasury-allow-asset.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-treasury-allow-asset", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-treasury-deposit-ft.test.ts b/tests/dao/proposals/aibtc-treasury-deposit-ft.test.ts new file mode 100644 index 00000000..d856a720 --- /dev/null +++ b/tests/dao/proposals/aibtc-treasury-deposit-ft.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-treasury-deposit-ft", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-treasury-deposit-nft.test.ts b/tests/dao/proposals/aibtc-treasury-deposit-nft.test.ts new file mode 100644 index 00000000..7c50a64a --- /dev/null +++ b/tests/dao/proposals/aibtc-treasury-deposit-nft.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-treasury-deposit-nft", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/proposals/aibtc-treasury-deposit-stx.test.ts b/tests/dao/proposals/aibtc-treasury-deposit-stx.test.ts new file mode 100644 index 00000000..98bf26d8 --- /dev/null +++ b/tests/dao/proposals/aibtc-treasury-deposit-stx.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtc-treasury-deposit-stx", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); diff --git a/tests/dao/traits/aibtcdev-dao-v1.test.ts b/tests/dao/traits/aibtcdev-dao-v1.test.ts new file mode 100644 index 00000000..db12fe1b --- /dev/null +++ b/tests/dao/traits/aibtcdev-dao-v1.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from "vitest"; + +describe("aibtcdev-dao-v1", () => { + it("should have tests written", () => { + expect(true).toBe(true); + }); +}); From 7925b36bee6af6114b09b60e8f71065c33aafdc5 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 11:34:30 -0700 Subject: [PATCH 19/84] fix: update auth function with correct name --- contracts/dao/extensions/aibtc-action-proposals.clar | 2 +- contracts/dao/extensions/aibtc-bank-account.clar | 2 +- contracts/dao/extensions/aibtc-core-proposals.clar | 2 +- contracts/dao/extensions/aibtc-onchain-messaging.clar | 2 +- contracts/dao/extensions/aibtc-payments-invoices.clar | 2 +- contracts/dao/extensions/aibtc-treasury.clar | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index c66c9397..47e1b758 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -341,7 +341,7 @@ ;; (define-private (is-dao-or-extension) - (ok (asserts! (or (is-eq tx-sender .aibtcdev-dao) + (ok (asserts! (or (is-eq tx-sender .aibtcdev-base-dao) (contract-call? .aibtcdev-base-dao is-extension contract-caller)) ERR_NOT_DAO_OR_EXTENSION )) ) diff --git a/contracts/dao/extensions/aibtc-bank-account.clar b/contracts/dao/extensions/aibtc-bank-account.clar index 48745b69..b9fe388f 100644 --- a/contracts/dao/extensions/aibtc-bank-account.clar +++ b/contracts/dao/extensions/aibtc-bank-account.clar @@ -142,7 +142,7 @@ ;; (define-private (is-dao-or-extension) - (ok (asserts! (or (is-eq tx-sender .aibtcdev-dao) + (ok (asserts! (or (is-eq tx-sender .aibtcdev-base-dao) (contract-call? .aibtcdev-base-dao is-extension contract-caller)) ERR_UNAUTHORIZED )) ) diff --git a/contracts/dao/extensions/aibtc-core-proposals.clar b/contracts/dao/extensions/aibtc-core-proposals.clar index 849276d1..39630ef3 100644 --- a/contracts/dao/extensions/aibtc-core-proposals.clar +++ b/contracts/dao/extensions/aibtc-core-proposals.clar @@ -303,7 +303,7 @@ ;; (define-private (is-dao-or-extension) - (ok (asserts! (or (is-eq tx-sender .aibtcdev-dao) + (ok (asserts! (or (is-eq tx-sender .aibtcdev-base-dao) (contract-call? .aibtcdev-base-dao is-extension contract-caller)) ERR_NOT_DAO_OR_EXTENSION )) ) diff --git a/contracts/dao/extensions/aibtc-onchain-messaging.clar b/contracts/dao/extensions/aibtc-onchain-messaging.clar index 7843a02d..1a482368 100644 --- a/contracts/dao/extensions/aibtc-onchain-messaging.clar +++ b/contracts/dao/extensions/aibtc-onchain-messaging.clar @@ -42,7 +42,7 @@ ;; (define-private (is-dao-or-extension) - (ok (asserts! (or (is-eq tx-sender .aibtcdev-dao) + (ok (asserts! (or (is-eq tx-sender .aibtcdev-base-dao) (contract-call? .aibtcdev-base-dao is-extension contract-caller)) ERR_UNAUTHORIZED )) ) diff --git a/contracts/dao/extensions/aibtc-payments-invoices.clar b/contracts/dao/extensions/aibtc-payments-invoices.clar index ee8d62c1..3e073c45 100644 --- a/contracts/dao/extensions/aibtc-payments-invoices.clar +++ b/contracts/dao/extensions/aibtc-payments-invoices.clar @@ -403,7 +403,7 @@ ;; (define-private (is-dao-or-extension) - (ok (asserts! (or (is-eq tx-sender .aibtcdev-dao) + (ok (asserts! (or (is-eq tx-sender .aibtcdev-base-dao) (contract-call? .aibtcdev-base-dao is-extension contract-caller)) ERR_UNAUTHORIZED )) ) diff --git a/contracts/dao/extensions/aibtc-treasury.clar b/contracts/dao/extensions/aibtc-treasury.clar index e7331c28..1e02427a 100644 --- a/contracts/dao/extensions/aibtc-treasury.clar +++ b/contracts/dao/extensions/aibtc-treasury.clar @@ -211,7 +211,7 @@ ;; (define-private (is-dao-or-extension) - (ok (asserts! (or (is-eq tx-sender .aibtcdev-dao) + (ok (asserts! (or (is-eq tx-sender .aibtcdev-base-dao) (contract-call? .aibtcdev-base-dao is-extension contract-caller)) ERR_UNAUTHORIZED )) ) From c53e3c08fe66f15e63b5b8bf1582917a7197a403 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:38:27 -0700 Subject: [PATCH 20/84] feat: Add bash script to check test coverage for Clarity contracts --- tests/check-test-coverage.sh | 38 ++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 tests/check-test-coverage.sh diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh new file mode 100644 index 00000000..80b29a2a --- /dev/null +++ b/tests/check-test-coverage.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# Exit on any error +set -e + +# Initialize counters +total_contracts=0 +untested_contracts=0 + +# Function to convert contract path to expected test path +get_test_path() { + local contract_path=$1 + # Remove 'contracts/' prefix and replace with 'tests/' + # Replace .clar with .test.ts + echo "${contract_path/contracts\//tests\/}" | sed 's/\.clar$/.test.ts/' +} + +# Find all Clarity contracts +while IFS= read -r contract; do + ((total_contracts++)) + test_file=$(get_test_path "$contract") + + if [ ! -f "$test_file" ]; then + echo "❌ Missing test file for: $contract" + echo " Expected test at: $test_file" + ((untested_contracts++)) + fi +done < <(find contracts -name "*.clar") + +# Print summary +echo "Found $total_contracts contracts total" +if [ $untested_contracts -eq 0 ]; then + echo "✅ All contracts have corresponding test files" + exit 0 +else + echo "❌ Found $untested_contracts contracts without tests" + exit 1 +fi From 62c73426a94799303b86b79706fcac6c9c5e6bcb Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 11:39:13 -0700 Subject: [PATCH 21/84] chore: Make check-test-coverage.sh script executable --- tests/check-test-coverage.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 tests/check-test-coverage.sh diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh old mode 100644 new mode 100755 From 5f5defa3b00fe21bdf4ff171f06a1ace09d8a770 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:39:15 -0700 Subject: [PATCH 22/84] feat: Enhance test coverage script with improved output and user feedback --- tests/check-test-coverage.sh | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index 80b29a2a..1278f75e 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -3,6 +3,9 @@ # Exit on any error set -e +echo "🔍 Checking test coverage for Clarity contracts..." +echo "================================================" + # Initialize counters total_contracts=0 untested_contracts=0 @@ -28,11 +31,18 @@ while IFS= read -r contract; do done < <(find contracts -name "*.clar") # Print summary -echo "Found $total_contracts contracts total" +echo "" +echo "📊 Summary" +echo "==========" +echo "Total contracts found: $total_contracts" +echo "Contracts with tests: $(($total_contracts - $untested_contracts))" +echo "Contracts without tests: $untested_contracts" +echo "" + if [ $untested_contracts -eq 0 ]; then echo "✅ All contracts have corresponding test files" exit 0 else - echo "❌ Found $untested_contracts contracts without tests" + echo "❌ Action needed: $untested_contracts contract(s) are missing tests" exit 1 fi From bbc7aed32fabb74a0b95e73f76604462306efbcf Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:40:13 -0700 Subject: [PATCH 23/84] chore: Add debug output and error handling to test coverage script --- tests/check-test-coverage.sh | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index 1278f75e..2e19a921 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -18,8 +18,25 @@ get_test_path() { echo "${contract_path/contracts\//tests\/}" | sed 's/\.clar$/.test.ts/' } -# Find all Clarity contracts +# Debug: Print current directory +echo "Running from directory: $(pwd)" +echo "Looking for .clar files..." + +# Find all Clarity contracts and store in array +contracts=() while IFS= read -r contract; do + contracts+=("$contract") +done < <(find contracts -name "*.clar") + +# Check if any contracts were found +if [ ${#contracts[@]} -eq 0 ]; then + echo "❌ No .clar files found in the contracts directory!" + echo " Please make sure you're running this script from the project root." + exit 1 +fi + +# Process each contract +for contract in "${contracts[@]}"; do ((total_contracts++)) test_file=$(get_test_path "$contract") From 498e8e9c1623bf01ee384ec0c5f16bb82be67444 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:41:32 -0700 Subject: [PATCH 24/84] fix: Remove duplicate find loop in test coverage script --- tests/check-test-coverage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index 2e19a921..0d9d4efc 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -45,7 +45,7 @@ for contract in "${contracts[@]}"; do echo " Expected test at: $test_file" ((untested_contracts++)) fi -done < <(find contracts -name "*.clar") +done # Print summary echo "" From 042ce16bb2a29f5e6e0cd5f570182cbed76a58eb Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:41:57 -0700 Subject: [PATCH 25/84] feat: Add debug output to diagnose Clarity contract file discovery process --- tests/check-test-coverage.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index 0d9d4efc..8b9e5252 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -24,10 +24,18 @@ echo "Looking for .clar files..." # Find all Clarity contracts and store in array contracts=() +echo "Debug: Running find command..." +find contracts -name "*.clar" +echo "Debug: Storing files in array..." while IFS= read -r contract; do + echo "Debug: Found contract: $contract" contracts+=("$contract") done < <(find contracts -name "*.clar") +echo "Debug: Array contents:" +printf '%s\n' "${contracts[@]}" +echo "Debug: Array size: ${#contracts[@]}" + # Check if any contracts were found if [ ${#contracts[@]} -eq 0 ]; then echo "❌ No .clar files found in the contracts directory!" From d2219ce7517e40fafcf76cbfbadb5c3b36006baa Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:42:29 -0700 Subject: [PATCH 26/84] feat: Improve test coverage script with detailed output and tracking --- tests/check-test-coverage.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index 8b9e5252..c3668b3f 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -44,6 +44,7 @@ if [ ${#contracts[@]} -eq 0 ]; then fi # Process each contract +echo -e "\nChecking test coverage..." for contract in "${contracts[@]}"; do ((total_contracts++)) test_file=$(get_test_path "$contract") @@ -52,6 +53,8 @@ for contract in "${contracts[@]}"; do echo "❌ Missing test file for: $contract" echo " Expected test at: $test_file" ((untested_contracts++)) + else + echo "✅ Found test for: $contract" fi done From 2a42de290b575b30b4f2e08e7c8518ebdd57c1af Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:42:58 -0700 Subject: [PATCH 27/84] refactor: Simplify contract discovery and reduce debug output in test coverage script --- tests/check-test-coverage.sh | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index c3668b3f..960cc775 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -24,17 +24,12 @@ echo "Looking for .clar files..." # Find all Clarity contracts and store in array contracts=() -echo "Debug: Running find command..." -find contracts -name "*.clar" -echo "Debug: Storing files in array..." +echo "Finding Clarity contracts..." while IFS= read -r contract; do - echo "Debug: Found contract: $contract" contracts+=("$contract") done < <(find contracts -name "*.clar") -echo "Debug: Array contents:" -printf '%s\n' "${contracts[@]}" -echo "Debug: Array size: ${#contracts[@]}" +echo "Found ${#contracts[@]} contract files" # Check if any contracts were found if [ ${#contracts[@]} -eq 0 ]; then From d644dc9aafe8fc6ed913818b364a04f8fc76c265 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:43:41 -0700 Subject: [PATCH 28/84] refactor: Improve contract test coverage script with better detection and output --- tests/check-test-coverage.sh | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index 960cc775..80bf9aeb 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -41,15 +41,22 @@ fi # Process each contract echo -e "\nChecking test coverage..." for contract in "${contracts[@]}"; do + # Skip test contracts directory + if [[ $contract == contracts/test/* ]]; then + continue + fi + ((total_contracts++)) test_file=$(get_test_path "$contract") - if [ ! -f "$test_file" ]; then - echo "❌ Missing test file for: $contract" - echo " Expected test at: $test_file" - ((untested_contracts++)) + # Check for both .test.ts and .ts test files + test_file_alt="${test_file/.test.ts/.ts}" + + if [ -f "$test_file" ] || [ -f "$test_file_alt" ]; then + printf "✅ %-50s -> %s\n" "$contract" "$(basename "${test_file}")" else - echo "✅ Found test for: $contract" + printf "❌ %-50s -> Missing test file\n" "$contract" + ((untested_contracts++)) fi done From ec5257e5984c644d223053ffe9aec3a81747eed5 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:44:21 -0700 Subject: [PATCH 29/84] refactor: Improve test coverage script with debug output and file path handling --- tests/check-test-coverage.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index 80bf9aeb..22b7290f 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -48,12 +48,17 @@ for contract in "${contracts[@]}"; do ((total_contracts++)) test_file=$(get_test_path "$contract") - - # Check for both .test.ts and .ts test files test_file_alt="${test_file/.test.ts/.ts}" - if [ -f "$test_file" ] || [ -f "$test_file_alt" ]; then + echo "Checking contract: $contract" + echo "Looking for test files:" + echo " - $test_file" + echo " - $test_file_alt" + + if [ -f "$test_file" ]; then printf "✅ %-50s -> %s\n" "$contract" "$(basename "${test_file}")" + elif [ -f "$test_file_alt" ]; then + printf "✅ %-50s -> %s\n" "$contract" "$(basename "${test_file_alt}")" else printf "❌ %-50s -> Missing test file\n" "$contract" ((untested_contracts++)) From b9e5f59af9f206f0b9f7aeb842dffb7e2c538852 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:44:54 -0700 Subject: [PATCH 30/84] style: Improve debug output formatting for test coverage script --- tests/check-test-coverage.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index 22b7290f..221cf967 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -50,17 +50,17 @@ for contract in "${contracts[@]}"; do test_file=$(get_test_path "$contract") test_file_alt="${test_file/.test.ts/.ts}" - echo "Checking contract: $contract" - echo "Looking for test files:" - echo " - $test_file" - echo " - $test_file_alt" + echo -e "\n📄 Analyzing contract: $contract" + echo " Looking for test files:" + echo " - $test_file" + echo " - $test_file_alt" if [ -f "$test_file" ]; then - printf "✅ %-50s -> %s\n" "$contract" "$(basename "${test_file}")" + printf " ✅ %-50s -> %s\n" "$contract" "$(basename "${test_file}")" elif [ -f "$test_file_alt" ]; then - printf "✅ %-50s -> %s\n" "$contract" "$(basename "${test_file_alt}")" + printf " ✅ %-50s -> %s\n" "$contract" "$(basename "${test_file_alt}")" else - printf "❌ %-50s -> Missing test file\n" "$contract" + printf " ❌ %-50s -> Missing test file\n" "$contract" ((untested_contracts++)) fi done From 7faf6b7caa4edcb314b8f1f1e40ec6d0dbda4ba1 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 11:46:56 -0700 Subject: [PATCH 31/84] fix: rename test files --- tests/check-test-coverage.sh | 24 ++++++------------- ...sals.ts => aibtc-action-proposals.test.ts} | 0 ...-account.ts => aibtc-bank-account.test.ts} | 0 ...low-pool.ts => aibtc-bitflow-pool.test.ts} | 0 ...posals.ts => aibtc-core-proposals.test.ts} | 0 ...ing.ts => aibtc-onchain-messaging.test.ts} | 0 ...ces.ts => aibtc-payments-invoices.test.ts} | 0 ...c-token-dex.ts => aibtc-token-dex.test.ts} | 0 ...ken-owner.ts => aibtc-token-owner.test.ts} | 0 .../{aibtc-token.ts => aibtc-token.test.ts} | 0 ...btc-treasury.ts => aibtc-treasury.test.ts} | 0 ...s => aibtc-base-add-new-extension.test.ts} | 0 ...btc-base-bootstrap-initialization.test.ts} | 0 ...s => aibtc-base-replace-extension.test.ts} | 0 ...ts => aibtc-treasury-delegate-stx.test.ts} | 0 ... aibtc-treasury-revoke-delegation.test.ts} | 0 ....ts => aibtc-treasury-withdaw-nft.test.ts} | 0 ....ts => aibtc-treasury-withdraw-ft.test.ts} | 0 ...ts => aibtc-treasury-withdraw-stx.test.ts} | 0 tests/dao/traits/aibtcdev-dao-v1.test.ts | 7 ------ 20 files changed, 7 insertions(+), 24 deletions(-) rename tests/dao/extensions/{aibtc-action-proposals.ts => aibtc-action-proposals.test.ts} (100%) rename tests/dao/extensions/{aibtc-bank-account.ts => aibtc-bank-account.test.ts} (100%) rename tests/dao/extensions/{aibtc-bitflow-pool.ts => aibtc-bitflow-pool.test.ts} (100%) rename tests/dao/extensions/{aibtc-core-proposals.ts => aibtc-core-proposals.test.ts} (100%) rename tests/dao/extensions/{aibtc-onchain-messaging.ts => aibtc-onchain-messaging.test.ts} (100%) rename tests/dao/extensions/{aibtc-payments-invoices.ts => aibtc-payments-invoices.test.ts} (100%) rename tests/dao/extensions/{aibtc-token-dex.ts => aibtc-token-dex.test.ts} (100%) rename tests/dao/extensions/{aibtc-token-owner.ts => aibtc-token-owner.test.ts} (100%) rename tests/dao/extensions/{aibtc-token.ts => aibtc-token.test.ts} (100%) rename tests/dao/extensions/{aibtc-treasury.ts => aibtc-treasury.test.ts} (100%) rename tests/dao/proposals/{aibtc-base-add-new-extension.ts => aibtc-base-add-new-extension.test.ts} (100%) rename tests/dao/proposals/{aibtc-base-bootstrap-initialization.ts => aibtc-base-bootstrap-initialization.test.ts} (100%) rename tests/dao/proposals/{aibtc-base-replace-extension.ts => aibtc-base-replace-extension.test.ts} (100%) rename tests/dao/proposals/{aibtc-treasury-delegate-stx.ts => aibtc-treasury-delegate-stx.test.ts} (100%) rename tests/dao/proposals/{aibtc-treasury-revoke-delegation.ts => aibtc-treasury-revoke-delegation.test.ts} (100%) rename tests/dao/proposals/{aibtc-treasury-withdaw-nft.ts => aibtc-treasury-withdaw-nft.test.ts} (100%) rename tests/dao/proposals/{aibtc-treasury-withdraw-ft.ts => aibtc-treasury-withdraw-ft.test.ts} (100%) rename tests/dao/proposals/{aibtc-treasury-withdraw-stx.ts => aibtc-treasury-withdraw-stx.test.ts} (100%) delete mode 100644 tests/dao/traits/aibtcdev-dao-v1.test.ts diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index 221cf967..fb2ae471 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -41,27 +41,17 @@ fi # Process each contract echo -e "\nChecking test coverage..." for contract in "${contracts[@]}"; do - # Skip test contracts directory - if [[ $contract == contracts/test/* ]]; then - continue - fi - + echo "Processing contract: $contract" ((total_contracts++)) test_file=$(get_test_path "$contract") - test_file_alt="${test_file/.test.ts/.ts}" - - echo -e "\n📄 Analyzing contract: $contract" - echo " Looking for test files:" - echo " - $test_file" - echo " - $test_file_alt" + echo "Looking for test file: $test_file" - if [ -f "$test_file" ]; then - printf " ✅ %-50s -> %s\n" "$contract" "$(basename "${test_file}")" - elif [ -f "$test_file_alt" ]; then - printf " ✅ %-50s -> %s\n" "$contract" "$(basename "${test_file_alt}")" - else - printf " ❌ %-50s -> Missing test file\n" "$contract" + if [ ! -f "$test_file" ]; then + echo "❌ Missing test file for: $contract" + echo " Expected test at: $test_file" ((untested_contracts++)) + else + echo "✅ Found test for: $contract" fi done diff --git a/tests/dao/extensions/aibtc-action-proposals.ts b/tests/dao/extensions/aibtc-action-proposals.test.ts similarity index 100% rename from tests/dao/extensions/aibtc-action-proposals.ts rename to tests/dao/extensions/aibtc-action-proposals.test.ts diff --git a/tests/dao/extensions/aibtc-bank-account.ts b/tests/dao/extensions/aibtc-bank-account.test.ts similarity index 100% rename from tests/dao/extensions/aibtc-bank-account.ts rename to tests/dao/extensions/aibtc-bank-account.test.ts diff --git a/tests/dao/extensions/aibtc-bitflow-pool.ts b/tests/dao/extensions/aibtc-bitflow-pool.test.ts similarity index 100% rename from tests/dao/extensions/aibtc-bitflow-pool.ts rename to tests/dao/extensions/aibtc-bitflow-pool.test.ts diff --git a/tests/dao/extensions/aibtc-core-proposals.ts b/tests/dao/extensions/aibtc-core-proposals.test.ts similarity index 100% rename from tests/dao/extensions/aibtc-core-proposals.ts rename to tests/dao/extensions/aibtc-core-proposals.test.ts diff --git a/tests/dao/extensions/aibtc-onchain-messaging.ts b/tests/dao/extensions/aibtc-onchain-messaging.test.ts similarity index 100% rename from tests/dao/extensions/aibtc-onchain-messaging.ts rename to tests/dao/extensions/aibtc-onchain-messaging.test.ts diff --git a/tests/dao/extensions/aibtc-payments-invoices.ts b/tests/dao/extensions/aibtc-payments-invoices.test.ts similarity index 100% rename from tests/dao/extensions/aibtc-payments-invoices.ts rename to tests/dao/extensions/aibtc-payments-invoices.test.ts diff --git a/tests/dao/extensions/aibtc-token-dex.ts b/tests/dao/extensions/aibtc-token-dex.test.ts similarity index 100% rename from tests/dao/extensions/aibtc-token-dex.ts rename to tests/dao/extensions/aibtc-token-dex.test.ts diff --git a/tests/dao/extensions/aibtc-token-owner.ts b/tests/dao/extensions/aibtc-token-owner.test.ts similarity index 100% rename from tests/dao/extensions/aibtc-token-owner.ts rename to tests/dao/extensions/aibtc-token-owner.test.ts diff --git a/tests/dao/extensions/aibtc-token.ts b/tests/dao/extensions/aibtc-token.test.ts similarity index 100% rename from tests/dao/extensions/aibtc-token.ts rename to tests/dao/extensions/aibtc-token.test.ts diff --git a/tests/dao/extensions/aibtc-treasury.ts b/tests/dao/extensions/aibtc-treasury.test.ts similarity index 100% rename from tests/dao/extensions/aibtc-treasury.ts rename to tests/dao/extensions/aibtc-treasury.test.ts diff --git a/tests/dao/proposals/aibtc-base-add-new-extension.ts b/tests/dao/proposals/aibtc-base-add-new-extension.test.ts similarity index 100% rename from tests/dao/proposals/aibtc-base-add-new-extension.ts rename to tests/dao/proposals/aibtc-base-add-new-extension.test.ts diff --git a/tests/dao/proposals/aibtc-base-bootstrap-initialization.ts b/tests/dao/proposals/aibtc-base-bootstrap-initialization.test.ts similarity index 100% rename from tests/dao/proposals/aibtc-base-bootstrap-initialization.ts rename to tests/dao/proposals/aibtc-base-bootstrap-initialization.test.ts diff --git a/tests/dao/proposals/aibtc-base-replace-extension.ts b/tests/dao/proposals/aibtc-base-replace-extension.test.ts similarity index 100% rename from tests/dao/proposals/aibtc-base-replace-extension.ts rename to tests/dao/proposals/aibtc-base-replace-extension.test.ts diff --git a/tests/dao/proposals/aibtc-treasury-delegate-stx.ts b/tests/dao/proposals/aibtc-treasury-delegate-stx.test.ts similarity index 100% rename from tests/dao/proposals/aibtc-treasury-delegate-stx.ts rename to tests/dao/proposals/aibtc-treasury-delegate-stx.test.ts diff --git a/tests/dao/proposals/aibtc-treasury-revoke-delegation.ts b/tests/dao/proposals/aibtc-treasury-revoke-delegation.test.ts similarity index 100% rename from tests/dao/proposals/aibtc-treasury-revoke-delegation.ts rename to tests/dao/proposals/aibtc-treasury-revoke-delegation.test.ts diff --git a/tests/dao/proposals/aibtc-treasury-withdaw-nft.ts b/tests/dao/proposals/aibtc-treasury-withdaw-nft.test.ts similarity index 100% rename from tests/dao/proposals/aibtc-treasury-withdaw-nft.ts rename to tests/dao/proposals/aibtc-treasury-withdaw-nft.test.ts diff --git a/tests/dao/proposals/aibtc-treasury-withdraw-ft.ts b/tests/dao/proposals/aibtc-treasury-withdraw-ft.test.ts similarity index 100% rename from tests/dao/proposals/aibtc-treasury-withdraw-ft.ts rename to tests/dao/proposals/aibtc-treasury-withdraw-ft.test.ts diff --git a/tests/dao/proposals/aibtc-treasury-withdraw-stx.ts b/tests/dao/proposals/aibtc-treasury-withdraw-stx.test.ts similarity index 100% rename from tests/dao/proposals/aibtc-treasury-withdraw-stx.ts rename to tests/dao/proposals/aibtc-treasury-withdraw-stx.test.ts diff --git a/tests/dao/traits/aibtcdev-dao-v1.test.ts b/tests/dao/traits/aibtcdev-dao-v1.test.ts deleted file mode 100644 index db12fe1b..00000000 --- a/tests/dao/traits/aibtcdev-dao-v1.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { describe, expect, it } from "vitest"; - -describe("aibtcdev-dao-v1", () => { - it("should have tests written", () => { - expect(true).toBe(true); - }); -}); From 115b1153a5359cf56ebd48ebf3d1d98c6bca568b Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:47:37 -0700 Subject: [PATCH 32/84] fix: Replace arithmetic expansion with let for bash compatibility --- tests/check-test-coverage.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index fb2ae471..69ab69b5 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -42,14 +42,14 @@ fi echo -e "\nChecking test coverage..." for contract in "${contracts[@]}"; do echo "Processing contract: $contract" - ((total_contracts++)) + let "total_contracts=total_contracts+1" test_file=$(get_test_path "$contract") echo "Looking for test file: $test_file" if [ ! -f "$test_file" ]; then echo "❌ Missing test file for: $contract" echo " Expected test at: $test_file" - ((untested_contracts++)) + let "untested_contracts=untested_contracts+1" else echo "✅ Found test for: $contract" fi From f0ca0ab7f195cdeb3dcd2c6902e4f9cc7c8009b2 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 11:49:09 -0700 Subject: [PATCH 33/84] fix: shorter simpler output --- tests/check-test-coverage.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index 69ab69b5..eaa6751a 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -41,10 +41,9 @@ fi # Process each contract echo -e "\nChecking test coverage..." for contract in "${contracts[@]}"; do - echo "Processing contract: $contract" + echo "Contract: $contract" let "total_contracts=total_contracts+1" test_file=$(get_test_path "$contract") - echo "Looking for test file: $test_file" if [ ! -f "$test_file" ]; then echo "❌ Missing test file for: $contract" From 4f18bafcd6fa7362d5fce48bb3c0122b97e479a2 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:49:31 -0700 Subject: [PATCH 34/84] refactor: Exclude contracts/test directory from coverage scan --- tests/check-test-coverage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index eaa6751a..3f6772b9 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -27,7 +27,7 @@ contracts=() echo "Finding Clarity contracts..." while IFS= read -r contract; do contracts+=("$contract") -done < <(find contracts -name "*.clar") +done < <(find contracts -name "*.clar" -not -path "contracts/test/*") echo "Found ${#contracts[@]} contract files" From 2adcd00e33946bbfa98c4785c4a6dc64ae3f7b50 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 11:51:44 -0700 Subject: [PATCH 35/84] fix: add missing test files, fix typos --- tests/check-test-coverage.sh | 1 - tests/dao/{aibtcdev-dao.test.ts => aibtcdev-base-dao.test.ts} | 0 ...thdaw-nft.test.ts => aibtc-bank-account-withdraw-stx.test.ts} | 0 tests/dao/proposals/aibtc-treasury-withdraw-nft.test.ts | 0 4 files changed, 1 deletion(-) rename tests/dao/{aibtcdev-dao.test.ts => aibtcdev-base-dao.test.ts} (100%) rename tests/dao/proposals/{aibtc-treasury-withdaw-nft.test.ts => aibtc-bank-account-withdraw-stx.test.ts} (100%) create mode 100644 tests/dao/proposals/aibtc-treasury-withdraw-nft.test.ts diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index 3f6772b9..2bfff04a 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -41,7 +41,6 @@ fi # Process each contract echo -e "\nChecking test coverage..." for contract in "${contracts[@]}"; do - echo "Contract: $contract" let "total_contracts=total_contracts+1" test_file=$(get_test_path "$contract") diff --git a/tests/dao/aibtcdev-dao.test.ts b/tests/dao/aibtcdev-base-dao.test.ts similarity index 100% rename from tests/dao/aibtcdev-dao.test.ts rename to tests/dao/aibtcdev-base-dao.test.ts diff --git a/tests/dao/proposals/aibtc-treasury-withdaw-nft.test.ts b/tests/dao/proposals/aibtc-bank-account-withdraw-stx.test.ts similarity index 100% rename from tests/dao/proposals/aibtc-treasury-withdaw-nft.test.ts rename to tests/dao/proposals/aibtc-bank-account-withdraw-stx.test.ts diff --git a/tests/dao/proposals/aibtc-treasury-withdraw-nft.test.ts b/tests/dao/proposals/aibtc-treasury-withdraw-nft.test.ts new file mode 100644 index 00000000..e69de29b From e4958d50f9d696e892a24e6c015501128a939686 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:52:16 -0700 Subject: [PATCH 36/84] refactor: Exclude contracts/traits directory from test coverage script --- tests/check-test-coverage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index 2bfff04a..0a1f60f8 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -27,7 +27,7 @@ contracts=() echo "Finding Clarity contracts..." while IFS= read -r contract; do contracts+=("$contract") -done < <(find contracts -name "*.clar" -not -path "contracts/test/*") +done < <(find contracts -name "*.clar" -not -path "contracts/test/*" -not -path "contracts/traits/*") echo "Found ${#contracts[@]} contract files" From 2bcec3c07fd7e998c693aecc9c98e8002f9df24e Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 11:54:21 -0700 Subject: [PATCH 37/84] fix: add correct dir, fancy output --- tests/check-test-coverage.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/check-test-coverage.sh b/tests/check-test-coverage.sh index 0a1f60f8..60e91bb9 100755 --- a/tests/check-test-coverage.sh +++ b/tests/check-test-coverage.sh @@ -25,9 +25,10 @@ echo "Looking for .clar files..." # Find all Clarity contracts and store in array contracts=() echo "Finding Clarity contracts..." +echo "Excluding test contracts and DAO traits..." while IFS= read -r contract; do contracts+=("$contract") -done < <(find contracts -name "*.clar" -not -path "contracts/test/*" -not -path "contracts/traits/*") +done < <(find contracts -name "*.clar" -not -path "contracts/test/*" -not -path "contracts/dao/traits/*") echo "Found ${#contracts[@]} contract files" @@ -40,6 +41,7 @@ fi # Process each contract echo -e "\nChecking test coverage..." +echo "==========================" for contract in "${contracts[@]}"; do let "total_contracts=total_contracts+1" test_file=$(get_test_path "$contract") From f8959029dcd27f3d8335be887ee3218a1e26d189 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:55:15 -0700 Subject: [PATCH 38/84] ci: Add step to verify test coverage for contract files --- .github/workflows/clarinet.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/clarinet.yml b/.github/workflows/clarinet.yml index 1fe534f5..c178ee69 100644 --- a/.github/workflows/clarinet.yml +++ b/.github/workflows/clarinet.yml @@ -35,4 +35,6 @@ jobs: uses: codecov/codecov-action@v3 with: files: ./coverage.lcov - verbose: true \ No newline at end of file + verbose: true + - name: "Verify test file for each contract file" + run: bash ./tests/check-test-coverage.sh From 73093aa8d0e4a4322ed25ffec75e071932c7f513 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 11:56:04 -0700 Subject: [PATCH 39/84] ci: update order of operations --- .github/workflows/clarinet.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/clarinet.yml b/.github/workflows/clarinet.yml index c178ee69..c46eecd5 100644 --- a/.github/workflows/clarinet.yml +++ b/.github/workflows/clarinet.yml @@ -23,6 +23,8 @@ jobs: uses: docker://hirosystems/clarinet:latest with: args: check + - name: "Verify test file for each contract file" + run: bash ./tests/check-test-coverage.sh - name: "Setup Node.js" uses: actions/setup-node@v4 with: @@ -36,5 +38,3 @@ jobs: with: files: ./coverage.lcov verbose: true - - name: "Verify test file for each contract file" - run: bash ./tests/check-test-coverage.sh From f16cdbce925dec7f11482392ce1473e452a67378 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 11:58:56 -0700 Subject: [PATCH 40/84] feat: Update Clarinet.toml with all contracts from ./contracts directory --- Clarinet.toml | 147 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 125 insertions(+), 22 deletions(-) diff --git a/Clarinet.toml b/Clarinet.toml index b31a83f1..9934a6be 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -56,13 +56,6 @@ path = 'contracts/dao/aibtcdev-base-dao.clar' clarity_version = 2 epoch = 3.0 -# dao proposals - -[contracts.aibtc-bootstrap-initialization] -path = 'contracts/dao/proposals/aibtc-bootstrap-initialization.clar' -clarity_version = 2 -epoch = 3.0 - # dao extensions [contracts.aibtc-action-proposals] @@ -75,6 +68,16 @@ path = 'contracts/dao/extensions/aibtc-bank-account.clar' clarity_version = 2 epoch = 3.0 +[contracts.aibtc-bitflow-pool] +path = 'contracts/dao/extensions/aibtc-bitflow-pool.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-bitflow-pool-owner] +path = 'contracts/dao/extensions/aibtc-bitflow-pool-owner.clar' +clarity_version = 2 +epoch = 3.0 + [contracts.aibtc-core-proposals] path = 'contracts/dao/extensions/aibtc-core-proposals.clar' clarity_version = 2 @@ -90,11 +93,6 @@ path = 'contracts/dao/extensions/aibtc-payments-invoices.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-treasury] -path = 'contracts/dao/extensions/aibtc-treasury.clar' -clarity_version = 2 -epoch = 3.0 - [contracts.aibtc-token] path = 'contracts/dao/extensions/aibtc-token.clar' clarity_version = 2 @@ -110,13 +108,53 @@ path = 'contracts/dao/extensions/aibtc-token-owner.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-bitflow-pool] -path = 'contracts/dao/extensions/aibtc-bitflow-pool.clar' +[contracts.aibtc-treasury] +path = 'contracts/dao/extensions/aibtc-treasury.clar' clarity_version = 2 epoch = 3.0 # dao proposals +[contracts.aibtc-bank-account-deposit-stx] +path = 'contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-bank-account-initialize-new] +path = 'contracts/dao/proposals/aibtc-bank-account-initialize-new.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-bank-account-override-last-withdrawal-block] +path = 'contracts/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-bank-account-set-account-holder] +path = 'contracts/dao/proposals/aibtc-bank-account-set-account-holder.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-bank-account-set-protocol-treasury] +path = 'contracts/dao/proposals/aibtc-bank-account-set-protocol-treasury.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-bank-account-set-withdrawal-amount] +path = 'contracts/dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-bank-account-set-withdrawal-period] +path = 'contracts/dao/proposals/aibtc-bank-account-set-withdrawal-period.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-bank-account-withdraw-stx] +path = 'contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar' +clarity_version = 2 +epoch = 3.0 + [contracts.aibtc-base-add-new-extension] path = 'contracts/dao/proposals/aibtc-base-add-new-extension.clar' clarity_version = 2 @@ -142,18 +180,78 @@ path = 'contracts/dao/proposals/aibtc-base-replace-extension.clar' clarity_version = 2 epoch = 3.0 +[contracts.aibtc-onchain-messaging-send] +path = 'contracts/dao/proposals/aibtc-onchain-messaging-send.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-payments-invoices-add-resource] +path = 'contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-payments-invoices-pay-invoice-by-resource-name] +path = 'contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-payments-invoices-pay-invoice] +path = 'contracts/dao/proposals/aibtc-payments-invoices-pay-invoice.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-payments-invoices-set-payment-address] +path = 'contracts/dao/proposals/aibtc-payments-invoices-set-payment-address.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-payments-invoices-toggle-resource-by-name] +path = 'contracts/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-payments-invoices-toggle-resource] +path = 'contracts/dao/proposals/aibtc-payments-invoices-toggle-resource.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-token-owner-set-token-uri] +path = 'contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-token-owner-transfer-ownership] +path = 'contracts/dao/proposals/aibtc-token-owner-transfer-ownership.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-treasury-allow-asset] +path = 'contracts/dao/proposals/aibtc-treasury-allow-asset.clar' +clarity_version = 2 +epoch = 3.0 + [contracts.aibtc-treasury-delegate-stx] path = 'contracts/dao/proposals/aibtc-treasury-delegate-stx.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-treasury-revoke-delegation] -path = 'contracts/dao/proposals/aibtc-treasury-revoke-delegation.clar' +[contracts.aibtc-treasury-deposit-ft] +path = 'contracts/dao/proposals/aibtc-treasury-deposit-ft.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-treasury-withdraw-nft] -path = 'contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar' +[contracts.aibtc-treasury-deposit-nft] +path = 'contracts/dao/proposals/aibtc-treasury-deposit-nft.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-treasury-deposit-stx] +path = 'contracts/dao/proposals/aibtc-treasury-deposit-stx.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-treasury-revoke-delegation] +path = 'contracts/dao/proposals/aibtc-treasury-revoke-delegation.clar' clarity_version = 2 epoch = 3.0 @@ -162,6 +260,11 @@ path = 'contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar' clarity_version = 2 epoch = 3.0 +[contracts.aibtc-treasury-withdraw-nft] +path = 'contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar' +clarity_version = 2 +epoch = 3.0 + [contracts.aibtc-treasury-withdraw-stx] path = 'contracts/dao/proposals/aibtc-treasury-withdraw-stx.clar' clarity_version = 2 @@ -169,13 +272,13 @@ epoch = 3.0 # dao traits -[contracts.aibtcdev-dao-v1] -path = 'contracts/dao/traits/aibtcdev-dao-v1.clar' +[contracts.aibtcdev-dao-traits-v1] +path = 'contracts/dao/traits/aibtcdev-dao-traits-v1.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtcdev-dao-traits-v1] -path = 'contracts/dao/traits/aibtcdev-dao-traits-v1.clar' +[contracts.aibtcdev-dao-v1] +path = 'contracts/dao/traits/aibtcdev-dao-v1.clar' clarity_version = 2 epoch = 3.0 From 8551639fa52d9ecda6357d6428f3326b6e2fb3dc Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 12:04:02 -0700 Subject: [PATCH 41/84] refactor: apply new naming across all contracts --- .../extensions/aibtc-action-proposals.clar | 28 +++++++++---------- .../dao/extensions/aibtc-bitflow-pool.clar | 2 +- .../extensions/aibtc-payments-invoices.clar | 2 +- contracts/dao/extensions/aibtc-token-dex.clar | 4 +-- contracts/dao/extensions/aibtc-token.clar | 4 +-- .../aibtc-base-bootstrap-initialization.clar | 10 +++---- .../extensions/aibtc-action-proposals.test.ts | 6 ++-- .../dao/extensions/aibtc-bank-account.test.ts | 4 +-- .../aibtc-onchain-messaging.test.ts | 4 +-- .../aibtc-payments-invoices.test.ts | 4 +-- tests/dao/extensions/aibtc-treasury.test.ts | 4 +-- 11 files changed, 36 insertions(+), 36 deletions(-) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index 47e1b758..5505d7e5 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -65,13 +65,13 @@ ;; data maps ;; (define-constant VALID_ACTIONS (list - "set-account-holder" ;; aibtc-ext002-bank-account - "set-withdrawal-period" ;; aibtc-ext002-bank-account, with limits - "set-withdrawal-amount";; aibtc-ext002-bank-account, with limits - "send-message" ;; aibtc-ext004-messaging - "add-resource" ;; aibtc-ext005-payments - "allow-asset" ;; aibtc-ext006-treasury - "toggle-resource" ;; aibtc-ext005-payments toggle-resource-by-name + "set-account-holder" ;; aibtc-bank-account + "set-withdrawal-period" ;; aibtc-bank-account, with limits + "set-withdrawal-amount";; aibtc-bank-account, with limits + "send-message" ;; aibtc-onchain-messaging + "add-resource" ;; aibtc-payments-invoices + "allow-asset" ;; aibtc-treasury + "toggle-resource" ;; aibtc-payments-invoices toggle-resource-by-name )) ;; exploring which structure works better vs list @@ -79,13 +79,13 @@ (string-ascii 50) bool ) -(map-set Actions "set-account-holder" true) ;; aibtc-ext002-bank-account -(map-set Actions "set-withdrawal-period" true) ;; aibtc-ext002-bank-account, with limits -(map-set Actions "set-withdrawal-amount" true) ;; aibtc-ext002-bank-account, with limits -(map-set Actions "send-message" true) ;; aibtc-ext004-messaging -(map-set Actions "add-resource" true) ;; aibtc-ext005-payments -(map-set Actions "toggle-resource" true) ;; aibtc-ext005-payments toggle-resource-by-name -(map-set Actions "allow-asset" true) ;; aibtc-ext006-treasury +(map-set Actions "set-account-holder" true) ;; aibtc-bank-account +(map-set Actions "set-withdrawal-period" true) ;; aibtc-bank-account, with limits +(map-set Actions "set-withdrawal-amount" true) ;; aibtc-bank-account, with limits +(map-set Actions "send-message" true) ;; aibtc-onchain-messaging +(map-set Actions "add-resource" true) ;; aibtc-payments-invoices +(map-set Actions "toggle-resource" true) ;; aibtc-payments-invoices toggle-resource-by-name +(map-set Actions "allow-asset" true) ;; aibtc-treasury (define-map Proposals uint ;; proposal id diff --git a/contracts/dao/extensions/aibtc-bitflow-pool.clar b/contracts/dao/extensions/aibtc-bitflow-pool.clar index 72f1dc34..f3a3b254 100644 --- a/contracts/dao/extensions/aibtc-bitflow-pool.clar +++ b/contracts/dao/extensions/aibtc-bitflow-pool.clar @@ -17,7 +17,7 @@ ;; XYK Core address and contract deployer address (define-constant CORE_ADDRESS 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.xyk-core-v-1-2) ;; <%= it.bitflow_xyk_core_address %> -(define-constant CONTRACT_DEPLOYER .aibtc-ext008-dex) ;; <%= it.dex_contract %> +(define-constant CONTRACT_DEPLOYER .aibtc-token-dex) ;; <%= it.dex_contract %> ;; Define all pool data vars (define-data-var pool-id uint u0) diff --git a/contracts/dao/extensions/aibtc-payments-invoices.clar b/contracts/dao/extensions/aibtc-payments-invoices.clar index 3e073c45..3a9ddc28 100644 --- a/contracts/dao/extensions/aibtc-payments-invoices.clar +++ b/contracts/dao/extensions/aibtc-payments-invoices.clar @@ -45,7 +45,7 @@ (define-data-var totalRevenue uint u0) ;; dao can update payment address -(define-data-var paymentAddress principal .aibtc-ext002-bank-account) +(define-data-var paymentAddress principal .aibtc-bank-account) ;; data maps ;; diff --git a/contracts/dao/extensions/aibtc-token-dex.clar b/contracts/dao/extensions/aibtc-token-dex.clar index 01f8dc37..b0ab5dc9 100644 --- a/contracts/dao/extensions/aibtc-token-dex.clar +++ b/contracts/dao/extensions/aibtc-token-dex.clar @@ -33,7 +33,7 @@ (define-constant BURN_ADDRESS 'ST000000000000000000002AMW42H) ;; <%= it.burn %> burn mainnet (define-constant deployer tx-sender) -(define-constant allow-token .aibtc-ext007-token) ;; <%= it.token_contract %> +(define-constant allow-token .aibtc-token) ;; <%= it.token_contract %> ;; data vars (define-data-var tradable bool false) @@ -88,7 +88,7 @@ ;; <%= it.pool_contract %> ;; <%= it.bitflow_stx_token_address %> ;; <%= it.bitflow_fee_address %> - (try! (as-contract (contract-call? 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.xyk-core-v-1-2 create-pool .aibtc-ext009-bitflow-pool 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.token-stx-v-1-2 token-trait remain-stx remain-tokens xyk-burn-amount u10 u40 u10 u40 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 xyk-pool-uri true))) + (try! (as-contract (contract-call? 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.xyk-core-v-1-2 create-pool .aibtc-bitflow-pool 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.token-stx-v-1-2 token-trait remain-stx remain-tokens xyk-burn-amount u10 u40 u10 u40 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 xyk-pool-uri true))) ;; send fee (try! (as-contract (stx-transfer? COMPLETE_FEE tx-sender STX_CITY_COMPLETE_FEE_WALLET))) ;; update global variables diff --git a/contracts/dao/extensions/aibtc-token.clar b/contracts/dao/extensions/aibtc-token.clar index c495a5cf..baef2d50 100644 --- a/contracts/dao/extensions/aibtc-token.clar +++ b/contracts/dao/extensions/aibtc-token.clar @@ -117,10 +117,10 @@ (try! (send-stx 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 u500000)) ;; <%= it.stxctiy_token_deployment_fee_address %> ;; Mint tokens to the dex_contract (40%) - (try! (ft-mint? SYMBOL dex-allocation .aibtc-ext008-dex)) ;; <%= it.token_symbol %> <%= it.dex_contract %> + (try! (ft-mint? SYMBOL dex-allocation .aibtc-token-dex)) ;; <%= it.token_symbol %> <%= it.dex_contract %> ;; Mint tokens to the treasury (60%) - (try! (ft-mint? SYMBOL treasury-allocation .aibtc-ext006-treasury)) ;; <%= it.token_symbol %> <%= it.treasury_contract %> + (try! (ft-mint? SYMBOL treasury-allocation .aibtc-treasury)) ;; <%= it.token_symbol %> <%= it.treasury_contract %> ) ) ) \ No newline at end of file diff --git a/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar b/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar index 853f9274..84a4db4b 100644 --- a/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar +++ b/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar @@ -7,12 +7,12 @@ ;; set initial extensions (try! (contract-call? .aibtcdev-base-dao set-extensions (list - {extension: .aibtc-ext001-actions, enabled: true} - {extension: .aibtc-ext002-bank-account, enabled: true} + {extension: .aibtc-action-proposals, enabled: true} + {extension: .aibtc-bank-account, enabled: true} {extension: .aibtc-ext003-direct-execute, enabled: true} - {extension: .aibtc-ext004-messaging, enabled: true} - {extension: .aibtc-ext005-payments, enabled: true} - {extension: .aibtc-ext006-treasury, enabled: true} + {extension: .aibtc-onchain-messaging, enabled: true} + {extension: .aibtc-payments-invoices, enabled: true} + {extension: .aibtc-treasury, enabled: true} ) )) ;; print manifest diff --git a/tests/dao/extensions/aibtc-action-proposals.test.ts b/tests/dao/extensions/aibtc-action-proposals.test.ts index a60d9dc1..e483f1fc 100644 --- a/tests/dao/extensions/aibtc-action-proposals.test.ts +++ b/tests/dao/extensions/aibtc-action-proposals.test.ts @@ -6,7 +6,7 @@ const address1 = accounts.get("wallet_1")!; const address2 = accounts.get("wallet_2")!; const addressDeployer = accounts.get("deployer")!; -const contractAddress = `${addressDeployer}.aibtc-ext001-actions`; +const contractAddress = `${addressDeployer}.aibtc-action-proposals`; enum ErrCode { ERR_UNAUTHORIZED = 1000, @@ -41,7 +41,7 @@ enum ErrCode { ERR_INVALID_PARAMETERS, } -describe("aibtc-ext001-actions", () => { +describe("aibtc-action-proposals", () => { // Protocol Treasury Tests describe("set-protocol-treasury()", () => { it("fails if caller is not DAO or extension", () => { @@ -70,7 +70,7 @@ describe("aibtc-ext001-actions", () => { const receipt = simnet.callPublicFn( contractAddress, "set-protocol-treasury", - [Cl.contractPrincipal(addressDeployer, "aibtc-ext001-actions")], + [Cl.contractPrincipal(addressDeployer, "aibtc-action-proposals")], addressDeployer ); expect(receipt.result).toBeErr( diff --git a/tests/dao/extensions/aibtc-bank-account.test.ts b/tests/dao/extensions/aibtc-bank-account.test.ts index e0e5738b..2145654d 100644 --- a/tests/dao/extensions/aibtc-bank-account.test.ts +++ b/tests/dao/extensions/aibtc-bank-account.test.ts @@ -6,7 +6,7 @@ const address1 = accounts.get("wallet_1")!; const address2 = accounts.get("wallet_2")!; const addressDeployer = accounts.get("deployer")!; -const contractAddress = `${addressDeployer}.aibtc-ext002-bank-account`; +const contractAddress = `${addressDeployer}.aibtc-bank-account`; enum ErrCode { ERR_INVALID = 2000, @@ -18,7 +18,7 @@ enum ErrCode { const withdrawalAmount = 10000000; // 10 STX const withdrawalPeriod = 144; // 144 blocks -describe("aibtc-ext002-bank-account", () => { +describe("aibtc-bank-account", () => { // Account Holder Tests describe("set-account-holder()", () => { it("fails if caller is not DAO or extension"); diff --git a/tests/dao/extensions/aibtc-onchain-messaging.test.ts b/tests/dao/extensions/aibtc-onchain-messaging.test.ts index 0eac4838..ee50624a 100644 --- a/tests/dao/extensions/aibtc-onchain-messaging.test.ts +++ b/tests/dao/extensions/aibtc-onchain-messaging.test.ts @@ -6,13 +6,13 @@ const address1 = accounts.get("wallet_1")!; const address2 = accounts.get("wallet_2")!; const addressDeployer = accounts.get("deployer")!; -const contractAddress = `${addressDeployer}.aibtc-ext004-messaging`; +const contractAddress = `${addressDeployer}.aibtc-onchain-messaging`; enum ErrCode { ERR_UNAUTHORIZED = 4000, } -describe("aibtc-ext004-messaging", () => { +describe("aibtc-onchain-messaging", () => { // Message Tests describe("send()", () => { it("succeeds if called by any user with isFromDao false"); diff --git a/tests/dao/extensions/aibtc-payments-invoices.test.ts b/tests/dao/extensions/aibtc-payments-invoices.test.ts index c5353a05..f3cc20b4 100644 --- a/tests/dao/extensions/aibtc-payments-invoices.test.ts +++ b/tests/dao/extensions/aibtc-payments-invoices.test.ts @@ -6,7 +6,7 @@ const address1 = accounts.get("wallet_1")!; const address2 = accounts.get("wallet_2")!; const addressDeployer = accounts.get("deployer")!; -const contractAddress = `${addressDeployer}.aibtc-ext005-payments`; +const contractAddress = `${addressDeployer}.aibtc-payments-invoices`; enum ErrCode { ERR_UNAUTHORIZED = 5000, @@ -25,7 +25,7 @@ enum ErrCode { ERR_RECENT_PAYMENT_NOT_FOUND, } -describe("aibtc-ext005-payments", () => { +describe("aibtc-payments-invoices", () => { // Payment Address Tests describe("set-payment-address()", () => { it("fails if caller is not DAO or extension"); diff --git a/tests/dao/extensions/aibtc-treasury.test.ts b/tests/dao/extensions/aibtc-treasury.test.ts index bdcd68bc..4f49af45 100644 --- a/tests/dao/extensions/aibtc-treasury.test.ts +++ b/tests/dao/extensions/aibtc-treasury.test.ts @@ -6,14 +6,14 @@ const address1 = accounts.get("wallet_1")!; const address2 = accounts.get("wallet_2")!; const addressDeployer = accounts.get("deployer")!; -const contractAddress = `${addressDeployer}.aibtc-ext006-treasury`; +const contractAddress = `${addressDeployer}.aibtc-treasury`; enum ErrCode { ERR_UNAUTHORIZED = 6000, ERR_UNKNOWN_ASSSET = 6001, } -describe("aibtc-ext006-treasury", () => { +describe("aibtc-treasury", () => { // Allow Asset Tests describe("allow-asset()", () => { it("fails if caller is not DAO or extension"); From 1ea9c7bb567f190cfaabce885fc8b2dfc5b90a6f Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 12:10:49 -0700 Subject: [PATCH 42/84] fix: add new functions, setup stub proposal functions --- Clarinet.toml | 9 +++++++-- .../proposals/aibtc-bank-account-deposit-stx.clar | 6 ++++++ .../aibtc-bank-account-initialize-new-account.clar | 12 ++++++++++++ .../proposals/aibtc-bank-account-initialize-new.clar | 6 ------ .../dao/proposals/aibtc-base-add-new-extension.clar | 6 ++++++ .../dao/proposals/aibtc-onchain-messaging-send.clar | 6 ++++++ .../aibtc-payments-invoices-add-resource.clar | 6 ++++++ .../proposals/aibtc-token-owner-set-token-uri.clar | 6 ++++++ .../aibtc-token-owner-transfer-ownership.clar | 6 ++++++ .../dao/proposals/aibtc-treasury-allow-asset.clar | 6 ++++++ .../dao/proposals/aibtc-treasury-freeze-asset.clar | 0 ...ibtc-bank-account-initialize-new-account.test.ts} | 0 .../proposals/aibtc-treasury-freeze-asset.test.ts | 0 13 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 contracts/dao/proposals/aibtc-bank-account-initialize-new-account.clar delete mode 100644 contracts/dao/proposals/aibtc-bank-account-initialize-new.clar create mode 100644 contracts/dao/proposals/aibtc-treasury-freeze-asset.clar rename tests/dao/proposals/{aibtc-bank-account-initialize-new.test.ts => aibtc-bank-account-initialize-new-account.test.ts} (100%) create mode 100644 tests/dao/proposals/aibtc-treasury-freeze-asset.test.ts diff --git a/Clarinet.toml b/Clarinet.toml index 9934a6be..1ab46615 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -120,8 +120,8 @@ path = 'contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-bank-account-initialize-new] -path = 'contracts/dao/proposals/aibtc-bank-account-initialize-new.clar' +[contracts.aibtc-bank-account-initialize-new-account] +path = 'contracts/dao/proposals/aibtc-bank-account-initialize-new-account.clar' clarity_version = 2 epoch = 3.0 @@ -250,6 +250,11 @@ path = 'contracts/dao/proposals/aibtc-treasury-deposit-stx.clar' clarity_version = 2 epoch = 3.0 +[contracts.aibtc-treasury-freeze-asset] +path = 'contracts/dao/proposals/aibtc-treasury-freeze-asset.clar' +clarity_version = 2 +epoch = 3.0 + [contracts.aibtc-treasury-revoke-delegation] path = 'contracts/dao/proposals/aibtc-treasury-revoke-delegation.clar' clarity_version = 2 diff --git a/contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar b/contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar index e69de29b..e73bf025 100644 --- a/contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar +++ b/contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; performs deposit of STX to the bank account + (ok true) +) diff --git a/contracts/dao/proposals/aibtc-bank-account-initialize-new-account.clar b/contracts/dao/proposals/aibtc-bank-account-initialize-new-account.clar new file mode 100644 index 00000000..8829ac81 --- /dev/null +++ b/contracts/dao/proposals/aibtc-bank-account-initialize-new-account.clar @@ -0,0 +1,12 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + + +(define-public (execute (sender principal)) + ;; what steps are required to set up a bank account? + ;; compound action: + ;; 1. deploy this contract + ;; 2. set the account holder + ;; 3. enable the extension + ;; 4. fund the extension + (ok true) +) diff --git a/contracts/dao/proposals/aibtc-bank-account-initialize-new.clar b/contracts/dao/proposals/aibtc-bank-account-initialize-new.clar deleted file mode 100644 index c7f0fa10..00000000 --- a/contracts/dao/proposals/aibtc-bank-account-initialize-new.clar +++ /dev/null @@ -1,6 +0,0 @@ -;; what steps are required to set up a bank account? -;; compound action: -;; 1. deploy this contract -;; 2. set the account holder -;; 3. enable the extension -;; 4. fund the extension \ No newline at end of file diff --git a/contracts/dao/proposals/aibtc-base-add-new-extension.clar b/contracts/dao/proposals/aibtc-base-add-new-extension.clar index e69de29b..a18ec70a 100644 --- a/contracts/dao/proposals/aibtc-base-add-new-extension.clar +++ b/contracts/dao/proposals/aibtc-base-add-new-extension.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; adds and enables a new extension to the DAO + (ok true) +) diff --git a/contracts/dao/proposals/aibtc-onchain-messaging-send.clar b/contracts/dao/proposals/aibtc-onchain-messaging-send.clar index e69de29b..1b7553b9 100644 --- a/contracts/dao/proposals/aibtc-onchain-messaging-send.clar +++ b/contracts/dao/proposals/aibtc-onchain-messaging-send.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; sends a verified message from the dao + (ok true) +) diff --git a/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar b/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar index e69de29b..c1fd62a9 100644 --- a/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar +++ b/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; adds a resource that can be used to pay invoices + (ok true) +) diff --git a/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar b/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar index e69de29b..6973f409 100644 --- a/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar +++ b/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; sets the token uri for the dao token + (ok true) +) diff --git a/contracts/dao/proposals/aibtc-token-owner-transfer-ownership.clar b/contracts/dao/proposals/aibtc-token-owner-transfer-ownership.clar index e69de29b..325bcaff 100644 --- a/contracts/dao/proposals/aibtc-token-owner-transfer-ownership.clar +++ b/contracts/dao/proposals/aibtc-token-owner-transfer-ownership.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; transfers ownership of the token uri to a new address + (ok true) +) diff --git a/contracts/dao/proposals/aibtc-treasury-allow-asset.clar b/contracts/dao/proposals/aibtc-treasury-allow-asset.clar index e69de29b..dafcbcce 100644 --- a/contracts/dao/proposals/aibtc-treasury-allow-asset.clar +++ b/contracts/dao/proposals/aibtc-treasury-allow-asset.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; allows an asset for deposit and withdrawal in the treasury + (ok true) +) diff --git a/contracts/dao/proposals/aibtc-treasury-freeze-asset.clar b/contracts/dao/proposals/aibtc-treasury-freeze-asset.clar new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/proposals/aibtc-bank-account-initialize-new.test.ts b/tests/dao/proposals/aibtc-bank-account-initialize-new-account.test.ts similarity index 100% rename from tests/dao/proposals/aibtc-bank-account-initialize-new.test.ts rename to tests/dao/proposals/aibtc-bank-account-initialize-new-account.test.ts diff --git a/tests/dao/proposals/aibtc-treasury-freeze-asset.test.ts b/tests/dao/proposals/aibtc-treasury-freeze-asset.test.ts new file mode 100644 index 00000000..e69de29b From d91b22e001c7df0d86c2d49db12a92adc4086f24 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 12:14:51 -0700 Subject: [PATCH 43/84] feat: Implement execute functions for bank account proposal contracts --- contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar | 3 +-- .../aibtc-bank-account-override-last-withdrawal-block.clar | 5 +++++ .../dao/proposals/aibtc-bank-account-set-account-holder.clar | 5 +++++ .../proposals/aibtc-bank-account-set-withdrawal-amount.clar | 5 +++++ .../proposals/aibtc-bank-account-set-withdrawal-period.clar | 5 +++++ contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar | 5 +++++ 6 files changed, 26 insertions(+), 2 deletions(-) diff --git a/contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar b/contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar index e73bf025..53cbce62 100644 --- a/contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar +++ b/contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar @@ -1,6 +1,5 @@ (impl-trait .aibtcdev-dao-traits-v1.proposal) (define-public (execute (sender principal)) - ;; performs deposit of STX to the bank account - (ok true) + (contract-call? .aibtcdev-bank-account deposit-stx u10000000) ) diff --git a/contracts/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.clar b/contracts/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.clar index e69de29b..4f278c06 100644 --- a/contracts/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.clar +++ b/contracts/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.clar @@ -0,0 +1,5 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + (contract-call? .aibtcdev-bank-account override-last-withdrawal-block burn-block-height) +) diff --git a/contracts/dao/proposals/aibtc-bank-account-set-account-holder.clar b/contracts/dao/proposals/aibtc-bank-account-set-account-holder.clar index e69de29b..f93e9967 100644 --- a/contracts/dao/proposals/aibtc-bank-account-set-account-holder.clar +++ b/contracts/dao/proposals/aibtc-bank-account-set-account-holder.clar @@ -0,0 +1,5 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + (contract-call? .aibtcdev-bank-account set-account-holder sender) +) diff --git a/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar b/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar index e69de29b..4cfe242a 100644 --- a/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar +++ b/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar @@ -0,0 +1,5 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + (contract-call? .aibtcdev-bank-account set-withdrawal-amount u10000000) +) diff --git a/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-period.clar b/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-period.clar index e69de29b..6aad8206 100644 --- a/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-period.clar +++ b/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-period.clar @@ -0,0 +1,5 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + (contract-call? .aibtcdev-bank-account set-withdrawal-period u144) +) diff --git a/contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar b/contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar index e69de29b..09da5697 100644 --- a/contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar +++ b/contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar @@ -0,0 +1,5 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + (contract-call? .aibtcdev-bank-account withdraw-stx) +) From f9625a58c68d6518b71a4de65ec22a6b40c49778 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 12:21:49 -0700 Subject: [PATCH 44/84] fix: missing a few more proposals/functions --- contracts/dao/extensions/aibtc-action-proposals.clar | 2 +- contracts/dao/extensions/aibtc-core-proposals.clar | 2 +- ...y.clar => aibtc-action-proposals-set-protocol-treasury.clar} | 0 .../dao/proposals/aibtc-action-proposals-set-voting-token.clar | 0 .../proposals/aibtc-core-proposals-set-protocol-treasury.clar | 0 .../dao/proposals/aibtc-core-proposals-set-voting-token.clar | 0 .../aibtc-action-proposals-set-protocol-treasury.test.ts | 0 .../proposals/aibtc-action-proposals-set-voting-token.test.ts | 0 .../aibtc-core-proposals-set-protocol-treasury.test.ts | 0 .../dao/proposals/aibtc-core-proposals-set-voting-token.test.ts | 0 10 files changed, 2 insertions(+), 2 deletions(-) rename contracts/dao/proposals/{aibtc-bank-account-set-protocol-treasury.clar => aibtc-action-proposals-set-protocol-treasury.clar} (100%) create mode 100644 contracts/dao/proposals/aibtc-action-proposals-set-voting-token.clar create mode 100644 contracts/dao/proposals/aibtc-core-proposals-set-protocol-treasury.clar create mode 100644 contracts/dao/proposals/aibtc-core-proposals-set-voting-token.clar create mode 100644 tests/dao/proposals/aibtc-action-proposals-set-protocol-treasury.test.ts create mode 100644 tests/dao/proposals/aibtc-action-proposals-set-voting-token.test.ts create mode 100644 tests/dao/proposals/aibtc-core-proposals-set-protocol-treasury.test.ts create mode 100644 tests/dao/proposals/aibtc-core-proposals-set-voting-token.test.ts diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index 5505d7e5..5f329387 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -59,7 +59,7 @@ ;; data vars ;; -(define-data-var protocolTreasury principal SELF) ;; the treasury contract for protocol funds +(define-data-var protocolTreasury principal .aibtc-treasury) ;; the treasury contract for protocol funds (define-data-var votingToken principal SELF) ;; the FT contract used for voting ;; data maps diff --git a/contracts/dao/extensions/aibtc-core-proposals.clar b/contracts/dao/extensions/aibtc-core-proposals.clar index 39630ef3..675dcc82 100644 --- a/contracts/dao/extensions/aibtc-core-proposals.clar +++ b/contracts/dao/extensions/aibtc-core-proposals.clar @@ -56,7 +56,7 @@ ;; data vars ;; -(define-data-var protocolTreasury principal SELF) ;; the treasury contract for protocol funds +(define-data-var protocolTreasury principal .aibtc-treasury) ;; the treasury contract for protocol funds (define-data-var votingToken principal SELF) ;; the FT contract used for voting ;; data maps diff --git a/contracts/dao/proposals/aibtc-bank-account-set-protocol-treasury.clar b/contracts/dao/proposals/aibtc-action-proposals-set-protocol-treasury.clar similarity index 100% rename from contracts/dao/proposals/aibtc-bank-account-set-protocol-treasury.clar rename to contracts/dao/proposals/aibtc-action-proposals-set-protocol-treasury.clar diff --git a/contracts/dao/proposals/aibtc-action-proposals-set-voting-token.clar b/contracts/dao/proposals/aibtc-action-proposals-set-voting-token.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-core-proposals-set-protocol-treasury.clar b/contracts/dao/proposals/aibtc-core-proposals-set-protocol-treasury.clar new file mode 100644 index 00000000..e69de29b diff --git a/contracts/dao/proposals/aibtc-core-proposals-set-voting-token.clar b/contracts/dao/proposals/aibtc-core-proposals-set-voting-token.clar new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/proposals/aibtc-action-proposals-set-protocol-treasury.test.ts b/tests/dao/proposals/aibtc-action-proposals-set-protocol-treasury.test.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/proposals/aibtc-action-proposals-set-voting-token.test.ts b/tests/dao/proposals/aibtc-action-proposals-set-voting-token.test.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/proposals/aibtc-core-proposals-set-protocol-treasury.test.ts b/tests/dao/proposals/aibtc-core-proposals-set-protocol-treasury.test.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/dao/proposals/aibtc-core-proposals-set-voting-token.test.ts b/tests/dao/proposals/aibtc-core-proposals-set-voting-token.test.ts new file mode 100644 index 00000000..e69de29b From 6858ad9b7a131e1cd416370d975b76e317c9cff3 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 12:24:16 -0700 Subject: [PATCH 45/84] fix: update contract owners to dao exts --- contracts/dao/extensions/aibtc-bitflow-pool.clar | 2 +- contracts/dao/extensions/aibtc-token.clar | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/dao/extensions/aibtc-bitflow-pool.clar b/contracts/dao/extensions/aibtc-bitflow-pool.clar index f3a3b254..14df5a35 100644 --- a/contracts/dao/extensions/aibtc-bitflow-pool.clar +++ b/contracts/dao/extensions/aibtc-bitflow-pool.clar @@ -17,7 +17,7 @@ ;; XYK Core address and contract deployer address (define-constant CORE_ADDRESS 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.xyk-core-v-1-2) ;; <%= it.bitflow_xyk_core_address %> -(define-constant CONTRACT_DEPLOYER .aibtc-token-dex) ;; <%= it.dex_contract %> +(define-constant CONTRACT_DEPLOYER .aibtc-bitflow-pool-owner) ;; <%= it.dex_contract %> ;; Define all pool data vars (define-data-var pool-id uint u0) diff --git a/contracts/dao/extensions/aibtc-token.clar b/contracts/dao/extensions/aibtc-token.clar index baef2d50..576b6bc4 100644 --- a/contracts/dao/extensions/aibtc-token.clar +++ b/contracts/dao/extensions/aibtc-token.clar @@ -17,7 +17,7 @@ ;; Variables (define-fungible-token SYMBOL MAXSUPPLY) ;; <%= it.token_symbol %> -(define-data-var contract-owner principal tx-sender) ;; TODO: set to dao? use extension? actions? +(define-data-var contract-owner principal .aibtc-token-owner) ;; extension to manage token uri ;; SIP-10 Functions (define-public (transfer (amount uint) (from principal) (to principal) (memo (optional (buff 34)))) From b99cadf32b25fabee8c23b538269d9b7b6fa1985 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 12:32:09 -0700 Subject: [PATCH 46/84] feat: Add missing proposal contracts to Clarinet.toml configuration --- Clarinet.toml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Clarinet.toml b/Clarinet.toml index 1ab46615..94e04377 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -275,6 +275,26 @@ path = 'contracts/dao/proposals/aibtc-treasury-withdraw-stx.clar' clarity_version = 2 epoch = 3.0 +[contracts.aibtc-action-proposals-set-protocol-treasury] +path = 'contracts/dao/proposals/aibtc-action-proposals-set-protocol-treasury.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-action-proposals-set-voting-token] +path = 'contracts/dao/proposals/aibtc-action-proposals-set-voting-token.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-core-proposals-set-protocol-treasury] +path = 'contracts/dao/proposals/aibtc-core-proposals-set-protocol-treasury.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-core-proposals-set-voting-token] +path = 'contracts/dao/proposals/aibtc-core-proposals-set-voting-token.clar' +clarity_version = 2 +epoch = 3.0 + # dao traits [contracts.aibtcdev-dao-traits-v1] From 2a3f15edb18531beacb5c610644e867f985f3ed6 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 12:33:28 -0700 Subject: [PATCH 47/84] fix: remove nonexistent contract Was named wrong, actually part of voting, new contract proposals added in last commit to match. --- Clarinet.toml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Clarinet.toml b/Clarinet.toml index 94e04377..95d063ec 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -135,11 +135,6 @@ path = 'contracts/dao/proposals/aibtc-bank-account-set-account-holder.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-bank-account-set-protocol-treasury] -path = 'contracts/dao/proposals/aibtc-bank-account-set-protocol-treasury.clar' -clarity_version = 2 -epoch = 3.0 - [contracts.aibtc-bank-account-set-withdrawal-amount] path = 'contracts/dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar' clarity_version = 2 From aad76c78813e3be721ad1a8fc026a2286cdf8cd6 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 12:35:31 -0700 Subject: [PATCH 48/84] fix: typo in bank acct name --- contracts/dao/extensions/aibtc-bank-account.clar | 2 +- contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar | 2 +- .../aibtc-bank-account-override-last-withdrawal-block.clar | 2 +- .../dao/proposals/aibtc-bank-account-set-account-holder.clar | 2 +- .../dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar | 2 +- .../dao/proposals/aibtc-bank-account-set-withdrawal-period.clar | 2 +- contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/contracts/dao/extensions/aibtc-bank-account.clar b/contracts/dao/extensions/aibtc-bank-account.clar index b9fe388f..bd463de4 100644 --- a/contracts/dao/extensions/aibtc-bank-account.clar +++ b/contracts/dao/extensions/aibtc-bank-account.clar @@ -1,4 +1,4 @@ -;; title: aibtcdev-bank-account +;; title: aibtc-bank-account ;; version: 1.0.0 ;; summary: An extension that allows a principal to withdraw STX from the contract with given rules. diff --git a/contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar b/contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar index 53cbce62..3df343c9 100644 --- a/contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar +++ b/contracts/dao/proposals/aibtc-bank-account-deposit-stx.clar @@ -1,5 +1,5 @@ (impl-trait .aibtcdev-dao-traits-v1.proposal) (define-public (execute (sender principal)) - (contract-call? .aibtcdev-bank-account deposit-stx u10000000) + (contract-call? .aibtc-bank-account deposit-stx u10000000) ) diff --git a/contracts/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.clar b/contracts/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.clar index 4f278c06..94f1c485 100644 --- a/contracts/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.clar +++ b/contracts/dao/proposals/aibtc-bank-account-override-last-withdrawal-block.clar @@ -1,5 +1,5 @@ (impl-trait .aibtcdev-dao-traits-v1.proposal) (define-public (execute (sender principal)) - (contract-call? .aibtcdev-bank-account override-last-withdrawal-block burn-block-height) + (contract-call? .aibtc-bank-account override-last-withdrawal-block burn-block-height) ) diff --git a/contracts/dao/proposals/aibtc-bank-account-set-account-holder.clar b/contracts/dao/proposals/aibtc-bank-account-set-account-holder.clar index f93e9967..4d44641f 100644 --- a/contracts/dao/proposals/aibtc-bank-account-set-account-holder.clar +++ b/contracts/dao/proposals/aibtc-bank-account-set-account-holder.clar @@ -1,5 +1,5 @@ (impl-trait .aibtcdev-dao-traits-v1.proposal) (define-public (execute (sender principal)) - (contract-call? .aibtcdev-bank-account set-account-holder sender) + (contract-call? .aibtc-bank-account set-account-holder sender) ) diff --git a/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar b/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar index 4cfe242a..ad58b153 100644 --- a/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar +++ b/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-amount.clar @@ -1,5 +1,5 @@ (impl-trait .aibtcdev-dao-traits-v1.proposal) (define-public (execute (sender principal)) - (contract-call? .aibtcdev-bank-account set-withdrawal-amount u10000000) + (contract-call? .aibtc-bank-account set-withdrawal-amount u10000000) ) diff --git a/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-period.clar b/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-period.clar index 6aad8206..d5bbdfbf 100644 --- a/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-period.clar +++ b/contracts/dao/proposals/aibtc-bank-account-set-withdrawal-period.clar @@ -1,5 +1,5 @@ (impl-trait .aibtcdev-dao-traits-v1.proposal) (define-public (execute (sender principal)) - (contract-call? .aibtcdev-bank-account set-withdrawal-period u144) + (contract-call? .aibtc-bank-account set-withdrawal-period u144) ) diff --git a/contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar b/contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar index 09da5697..2363fa0a 100644 --- a/contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar +++ b/contracts/dao/proposals/aibtc-bank-account-withdraw-stx.clar @@ -1,5 +1,5 @@ (impl-trait .aibtcdev-dao-traits-v1.proposal) (define-public (execute (sender principal)) - (contract-call? .aibtcdev-bank-account withdraw-stx) + (contract-call? .aibtc-bank-account withdraw-stx) ) From 95cf87d995ce78f324925b43ca3d6a7410831e11 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 14:01:55 -0700 Subject: [PATCH 49/84] fix: keep adding proposal code --- ...c-action-proposals-set-protocol-treasury.clar | 5 +++++ .../aibtc-action-proposals-set-voting-token.clar | 5 +++++ ...ibtc-bank-account-initialize-new-account.clar | 16 +++++++++------- .../proposals/aibtc-base-add-new-extension.clar | 2 +- .../proposals/aibtc-base-disable-extension.clar | 14 ++++++++++++++ .../proposals/aibtc-base-enable-extension.clar | 14 ++++++++++++++ .../proposals/aibtc-base-replace-extension.clar | 16 ++++++++++++++++ ...btc-core-proposals-set-protocol-treasury.clar | 5 +++++ .../aibtc-core-proposals-set-voting-token.clar | 5 +++++ .../proposals/aibtc-onchain-messaging-send.clar | 2 +- 10 files changed, 75 insertions(+), 9 deletions(-) diff --git a/contracts/dao/proposals/aibtc-action-proposals-set-protocol-treasury.clar b/contracts/dao/proposals/aibtc-action-proposals-set-protocol-treasury.clar index e69de29b..c2043c17 100644 --- a/contracts/dao/proposals/aibtc-action-proposals-set-protocol-treasury.clar +++ b/contracts/dao/proposals/aibtc-action-proposals-set-protocol-treasury.clar @@ -0,0 +1,5 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + (contract-call? .aibtc-action-proposals set-protocol-treasury .aibtc-treasury) +) diff --git a/contracts/dao/proposals/aibtc-action-proposals-set-voting-token.clar b/contracts/dao/proposals/aibtc-action-proposals-set-voting-token.clar index e69de29b..9b15d611 100644 --- a/contracts/dao/proposals/aibtc-action-proposals-set-voting-token.clar +++ b/contracts/dao/proposals/aibtc-action-proposals-set-voting-token.clar @@ -0,0 +1,5 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + (contract-call? .aibtc-action-proposals set-voting-token .aibtc-token) +) diff --git a/contracts/dao/proposals/aibtc-bank-account-initialize-new-account.clar b/contracts/dao/proposals/aibtc-bank-account-initialize-new-account.clar index 8829ac81..ee3025f5 100644 --- a/contracts/dao/proposals/aibtc-bank-account-initialize-new-account.clar +++ b/contracts/dao/proposals/aibtc-bank-account-initialize-new-account.clar @@ -2,11 +2,13 @@ (define-public (execute (sender principal)) - ;; what steps are required to set up a bank account? - ;; compound action: - ;; 1. deploy this contract - ;; 2. set the account holder - ;; 3. enable the extension - ;; 4. fund the extension - (ok true) + (begin + ;; set the account holder in the bank account + (try! (contract-call? .aibtc-bank-account set-account-holder sender)) + ;; enable the extension in the dao + (try! (contract-call? .aibtcdev-base-dao set-extension .aibtc-bank-account true)) + ;; fund the extension from the treasury + (try! (contract-call? .aibtc-treasury withdraw-stx u10000000 .aibtc-bank-account)) + (ok true) + ) ) diff --git a/contracts/dao/proposals/aibtc-base-add-new-extension.clar b/contracts/dao/proposals/aibtc-base-add-new-extension.clar index a18ec70a..a6046a83 100644 --- a/contracts/dao/proposals/aibtc-base-add-new-extension.clar +++ b/contracts/dao/proposals/aibtc-base-add-new-extension.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; adds and enables a new extension to the DAO - (ok true) + (contract-call? .aibtcdev-base-dao set-extension .aibtc-bank-account true) ) diff --git a/contracts/dao/proposals/aibtc-base-disable-extension.clar b/contracts/dao/proposals/aibtc-base-disable-extension.clar index e69de29b..6a9cb260 100644 --- a/contracts/dao/proposals/aibtc-base-disable-extension.clar +++ b/contracts/dao/proposals/aibtc-base-disable-extension.clar @@ -0,0 +1,14 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-constant ERR_EXTENSION_NOT_FOUND (err u404)) + +(define-public (execute (sender principal)) + ;; disables an extension in the DAO + (begin + ;; check that extension exists, avoids write if not + (asserts! (contract-call? .aibtcdev-base-dao is-extension .aibtc-bank-account) ERR_EXTENSION_NOT_FOUND) + ;; update extension status + (try! (contract-call? .aibtcdev-base-dao set-extension .aibtc-bank-account false)) + (ok true) + ) +) diff --git a/contracts/dao/proposals/aibtc-base-enable-extension.clar b/contracts/dao/proposals/aibtc-base-enable-extension.clar index e69de29b..5d518485 100644 --- a/contracts/dao/proposals/aibtc-base-enable-extension.clar +++ b/contracts/dao/proposals/aibtc-base-enable-extension.clar @@ -0,0 +1,14 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-constant ERR_EXTENSION_NOT_FOUND (err u404)) + +(define-public (execute (sender principal)) + ;; disables an extension in the DAO + (begin + ;; check that extension exists, avoids write if not + (asserts! (contract-call? .aibtcdev-base-dao is-extension .aibtc-bank-account) ERR_EXTENSION_NOT_FOUND) + ;; update extension status + (try! (contract-call? .aibtcdev-base-dao set-extension .aibtc-bank-account true)) + (ok true) + ) +) diff --git a/contracts/dao/proposals/aibtc-base-replace-extension.clar b/contracts/dao/proposals/aibtc-base-replace-extension.clar index e69de29b..14c0c36c 100644 --- a/contracts/dao/proposals/aibtc-base-replace-extension.clar +++ b/contracts/dao/proposals/aibtc-base-replace-extension.clar @@ -0,0 +1,16 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-constant ERR_EXTENSION_NOT_FOUND (err u404)) + +(define-public (execute (sender principal)) + ;; replaces an extension in the DAO + (begin + ;; check that old extension exists + (asserts! (contract-call? .aibtcdev-base-dao is-extension .aibtc-bank-account) ERR_EXTENSION_NOT_FOUND) + ;; update extension status to false + (try! (contract-call? .aibtcdev-base-dao set-extension .aibtc-bank-account false)) + ;; add new extension to the dao + (try! (contract-call? .aibtcdev-base-dao set-extension .aibtc-bank-account true)) + (ok true) + ) +) diff --git a/contracts/dao/proposals/aibtc-core-proposals-set-protocol-treasury.clar b/contracts/dao/proposals/aibtc-core-proposals-set-protocol-treasury.clar index e69de29b..c2043c17 100644 --- a/contracts/dao/proposals/aibtc-core-proposals-set-protocol-treasury.clar +++ b/contracts/dao/proposals/aibtc-core-proposals-set-protocol-treasury.clar @@ -0,0 +1,5 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + (contract-call? .aibtc-action-proposals set-protocol-treasury .aibtc-treasury) +) diff --git a/contracts/dao/proposals/aibtc-core-proposals-set-voting-token.clar b/contracts/dao/proposals/aibtc-core-proposals-set-voting-token.clar index e69de29b..9b15d611 100644 --- a/contracts/dao/proposals/aibtc-core-proposals-set-voting-token.clar +++ b/contracts/dao/proposals/aibtc-core-proposals-set-voting-token.clar @@ -0,0 +1,5 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + (contract-call? .aibtc-action-proposals set-voting-token .aibtc-token) +) diff --git a/contracts/dao/proposals/aibtc-onchain-messaging-send.clar b/contracts/dao/proposals/aibtc-onchain-messaging-send.clar index 1b7553b9..5c5205f4 100644 --- a/contracts/dao/proposals/aibtc-onchain-messaging-send.clar +++ b/contracts/dao/proposals/aibtc-onchain-messaging-send.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; sends a verified message from the dao - (ok true) + (contract-call? .aibtc-onchain-messaging send "hello world" true) ) From 9d02f50e67313ebe47458bae47a5a01f60021edd Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 14:04:17 -0700 Subject: [PATCH 50/84] feat: Add proposal contracts for aibtc-payments-invoices functions --- .../dao/proposals/aibtc-payments-invoices-add-resource.clar | 2 +- ...ibtc-payments-invoices-pay-invoice-by-resource-name.clar | 6 ++++++ .../dao/proposals/aibtc-payments-invoices-pay-invoice.clar | 6 ++++++ .../aibtc-payments-invoices-set-payment-address.clar | 6 ++++++ .../aibtc-payments-invoices-toggle-resource-by-name.clar | 6 ++++++ .../proposals/aibtc-payments-invoices-toggle-resource.clar | 6 ++++++ 6 files changed, 31 insertions(+), 1 deletion(-) diff --git a/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar b/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar index c1fd62a9..bebfa5a4 100644 --- a/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar +++ b/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; adds a resource that can be used to pay invoices - (ok true) + (contract-call? .aibtc-payments-invoices add-resource "example-resource" "An example resource" u1000000 (some "https://example.com")) ) diff --git a/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar b/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar index e69de29b..9b37dc85 100644 --- a/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar +++ b/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; pays an invoice for a resource by name + (contract-call? .aibtc-payments-invoices pay-invoice-by-resource-name "example-resource" none) +) diff --git a/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice.clar b/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice.clar index e69de29b..b3278895 100644 --- a/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice.clar +++ b/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; pays an invoice for a resource by index + (contract-call? .aibtc-payments-invoices pay-invoice u1 none) +) diff --git a/contracts/dao/proposals/aibtc-payments-invoices-set-payment-address.clar b/contracts/dao/proposals/aibtc-payments-invoices-set-payment-address.clar index e69de29b..b21c2eb5 100644 --- a/contracts/dao/proposals/aibtc-payments-invoices-set-payment-address.clar +++ b/contracts/dao/proposals/aibtc-payments-invoices-set-payment-address.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; sets payment address for invoices + (contract-call? .aibtc-payments-invoices set-payment-address .aibtc-bank-account) +) diff --git a/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.clar b/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.clar index e69de29b..3a7cbd89 100644 --- a/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.clar +++ b/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; toggles enabled status for resource by name + (contract-call? .aibtc-payments-invoices toggle-resource-by-name "example-resource") +) diff --git a/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource.clar b/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource.clar index e69de29b..e781b3a9 100644 --- a/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource.clar +++ b/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; toggles enabled status for resource by index + (contract-call? .aibtc-payments-invoices toggle-resource u1) +) From 228b26d84128463607b1c9fb811d5fc157d0d2b9 Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 14:05:38 -0700 Subject: [PATCH 51/84] feat: Implement token owner proposals with contract calls --- contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar | 2 +- .../dao/proposals/aibtc-token-owner-transfer-ownership.clar | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar b/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar index 6973f409..6995274b 100644 --- a/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar +++ b/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; sets the token uri for the dao token - (ok true) + (contract-call? .aibtc-token-owner set-token-uri "https://example.com/token.json") ) diff --git a/contracts/dao/proposals/aibtc-token-owner-transfer-ownership.clar b/contracts/dao/proposals/aibtc-token-owner-transfer-ownership.clar index 325bcaff..a0d0164a 100644 --- a/contracts/dao/proposals/aibtc-token-owner-transfer-ownership.clar +++ b/contracts/dao/proposals/aibtc-token-owner-transfer-ownership.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; transfers ownership of the token uri to a new address - (ok true) + (contract-call? .aibtc-token-owner transfer-ownership 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM) ) From d8ef85dc9336fa26eabe75a077caef6587310d6f Mon Sep 17 00:00:00 2001 From: "Jason Schrader (aider)" Date: Mon, 6 Jan 2025 14:07:34 -0700 Subject: [PATCH 52/84] feat: Add treasury proposal contracts with execute functions --- contracts/dao/proposals/aibtc-treasury-allow-asset.clar | 2 +- contracts/dao/proposals/aibtc-treasury-delegate-stx.clar | 6 ++++++ contracts/dao/proposals/aibtc-treasury-deposit-ft.clar | 6 ++++++ contracts/dao/proposals/aibtc-treasury-deposit-nft.clar | 6 ++++++ contracts/dao/proposals/aibtc-treasury-deposit-stx.clar | 6 ++++++ contracts/dao/proposals/aibtc-treasury-freeze-asset.clar | 6 ++++++ .../dao/proposals/aibtc-treasury-revoke-delegation.clar | 6 ++++++ contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar | 6 ++++++ contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar | 6 ++++++ contracts/dao/proposals/aibtc-treasury-withdraw-stx.clar | 6 ++++++ 10 files changed, 55 insertions(+), 1 deletion(-) diff --git a/contracts/dao/proposals/aibtc-treasury-allow-asset.clar b/contracts/dao/proposals/aibtc-treasury-allow-asset.clar index dafcbcce..c82b73cf 100644 --- a/contracts/dao/proposals/aibtc-treasury-allow-asset.clar +++ b/contracts/dao/proposals/aibtc-treasury-allow-asset.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; allows an asset for deposit and withdrawal in the treasury - (ok true) + (contract-call? .aibtc-treasury allow-asset 'SP3D6PV2ACBPEKYJTCMH7HEN02KP87QSP8KTEH335.abtc true) ) diff --git a/contracts/dao/proposals/aibtc-treasury-delegate-stx.clar b/contracts/dao/proposals/aibtc-treasury-delegate-stx.clar index e69de29b..fd6135c6 100644 --- a/contracts/dao/proposals/aibtc-treasury-delegate-stx.clar +++ b/contracts/dao/proposals/aibtc-treasury-delegate-stx.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; delegates STX for stacking + (contract-call? .aibtc-treasury delegate-stx u1000000 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM) +) diff --git a/contracts/dao/proposals/aibtc-treasury-deposit-ft.clar b/contracts/dao/proposals/aibtc-treasury-deposit-ft.clar index e69de29b..da0398cf 100644 --- a/contracts/dao/proposals/aibtc-treasury-deposit-ft.clar +++ b/contracts/dao/proposals/aibtc-treasury-deposit-ft.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; deposits fungible tokens to the treasury + (contract-call? .aibtc-treasury deposit-ft 'SP3D6PV2ACBPEKYJTCMH7HEN02KP87QSP8KTEH335.abtc u1000) +) diff --git a/contracts/dao/proposals/aibtc-treasury-deposit-nft.clar b/contracts/dao/proposals/aibtc-treasury-deposit-nft.clar index e69de29b..c8aa4c3c 100644 --- a/contracts/dao/proposals/aibtc-treasury-deposit-nft.clar +++ b/contracts/dao/proposals/aibtc-treasury-deposit-nft.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; deposits an NFT to the treasury + (contract-call? .aibtc-treasury deposit-nft 'SP3D6PV2ACBPEKYJTCMH7HEN02KP87QSP8KTEH335.aibtc-nft u1) +) diff --git a/contracts/dao/proposals/aibtc-treasury-deposit-stx.clar b/contracts/dao/proposals/aibtc-treasury-deposit-stx.clar index e69de29b..d2e56092 100644 --- a/contracts/dao/proposals/aibtc-treasury-deposit-stx.clar +++ b/contracts/dao/proposals/aibtc-treasury-deposit-stx.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; deposits STX to the treasury + (contract-call? .aibtc-treasury deposit-stx u1000000) +) diff --git a/contracts/dao/proposals/aibtc-treasury-freeze-asset.clar b/contracts/dao/proposals/aibtc-treasury-freeze-asset.clar index e69de29b..67b3053f 100644 --- a/contracts/dao/proposals/aibtc-treasury-freeze-asset.clar +++ b/contracts/dao/proposals/aibtc-treasury-freeze-asset.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; disables an asset for deposit and withdrawal in the treasury + (contract-call? .aibtc-treasury allow-asset 'SP3D6PV2ACBPEKYJTCMH7HEN02KP87QSP8KTEH335.abtc false) +) diff --git a/contracts/dao/proposals/aibtc-treasury-revoke-delegation.clar b/contracts/dao/proposals/aibtc-treasury-revoke-delegation.clar index e69de29b..92416362 100644 --- a/contracts/dao/proposals/aibtc-treasury-revoke-delegation.clar +++ b/contracts/dao/proposals/aibtc-treasury-revoke-delegation.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; revokes STX delegation + (contract-call? .aibtc-treasury revoke-delegate-stx) +) diff --git a/contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar b/contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar index e69de29b..100c9e6f 100644 --- a/contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar +++ b/contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; withdraws fungible tokens from the treasury + (contract-call? .aibtc-treasury withdraw-ft 'SP3D6PV2ACBPEKYJTCMH7HEN02KP87QSP8KTEH335.abtc u1000 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM) +) diff --git a/contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar b/contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar index e69de29b..301d4b93 100644 --- a/contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar +++ b/contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; withdraws an NFT from the treasury + (contract-call? .aibtc-treasury withdraw-nft 'SP3D6PV2ACBPEKYJTCMH7HEN02KP87QSP8KTEH335.aibtc-nft u1 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM) +) diff --git a/contracts/dao/proposals/aibtc-treasury-withdraw-stx.clar b/contracts/dao/proposals/aibtc-treasury-withdraw-stx.clar index e69de29b..0c7ee12d 100644 --- a/contracts/dao/proposals/aibtc-treasury-withdraw-stx.clar +++ b/contracts/dao/proposals/aibtc-treasury-withdraw-stx.clar @@ -0,0 +1,6 @@ +(impl-trait .aibtcdev-dao-traits-v1.proposal) + +(define-public (execute (sender principal)) + ;; withdraws STX from the treasury + (contract-call? .aibtc-treasury withdraw-stx u1000000 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM) +) From dfabde5957c0807c27d88577f39287e5d6751f99 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 14:18:38 -0700 Subject: [PATCH 53/84] fix: use valid ft and nft from dao Can create test contracts for this if needed but keeping it simple for now. --- contracts/dao/proposals/aibtc-treasury-deposit-ft.clar | 2 +- contracts/dao/proposals/aibtc-treasury-deposit-nft.clar | 2 +- contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar | 2 +- contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/dao/proposals/aibtc-treasury-deposit-ft.clar b/contracts/dao/proposals/aibtc-treasury-deposit-ft.clar index da0398cf..81c8b945 100644 --- a/contracts/dao/proposals/aibtc-treasury-deposit-ft.clar +++ b/contracts/dao/proposals/aibtc-treasury-deposit-ft.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; deposits fungible tokens to the treasury - (contract-call? .aibtc-treasury deposit-ft 'SP3D6PV2ACBPEKYJTCMH7HEN02KP87QSP8KTEH335.abtc u1000) + (contract-call? .aibtc-treasury deposit-ft .aibtc-token u1000) ) diff --git a/contracts/dao/proposals/aibtc-treasury-deposit-nft.clar b/contracts/dao/proposals/aibtc-treasury-deposit-nft.clar index c8aa4c3c..247a9ad4 100644 --- a/contracts/dao/proposals/aibtc-treasury-deposit-nft.clar +++ b/contracts/dao/proposals/aibtc-treasury-deposit-nft.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; deposits an NFT to the treasury - (contract-call? .aibtc-treasury deposit-nft 'SP3D6PV2ACBPEKYJTCMH7HEN02KP87QSP8KTEH335.aibtc-nft u1) + (contract-call? .aibtc-treasury deposit-nft .aibtcdev-airdrop-1 u1) ) diff --git a/contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar b/contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar index 100c9e6f..6a890f22 100644 --- a/contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar +++ b/contracts/dao/proposals/aibtc-treasury-withdraw-ft.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; withdraws fungible tokens from the treasury - (contract-call? .aibtc-treasury withdraw-ft 'SP3D6PV2ACBPEKYJTCMH7HEN02KP87QSP8KTEH335.abtc u1000 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM) + (contract-call? .aibtc-treasury withdraw-ft .aibtc-token u1000 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM) ) diff --git a/contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar b/contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar index 301d4b93..58ae012b 100644 --- a/contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar +++ b/contracts/dao/proposals/aibtc-treasury-withdraw-nft.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; withdraws an NFT from the treasury - (contract-call? .aibtc-treasury withdraw-nft 'SP3D6PV2ACBPEKYJTCMH7HEN02KP87QSP8KTEH335.aibtc-nft u1 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM) + (contract-call? .aibtc-treasury withdraw-nft .aibtcdev-airdrop-1 u1 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM) ) From 1a1dc966e4527f5662a6aacc7f8bdcd4b1b45dbd Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 14:18:47 -0700 Subject: [PATCH 54/84] feat: add token-owner extension --- .../dao/extensions/aibtc-token-owner.clar | 50 ++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/contracts/dao/extensions/aibtc-token-owner.clar b/contracts/dao/extensions/aibtc-token-owner.clar index 0abb0402..a314cbdb 100644 --- a/contracts/dao/extensions/aibtc-token-owner.clar +++ b/contracts/dao/extensions/aibtc-token-owner.clar @@ -1,2 +1,48 @@ -;; set-token-uri -;; transfer-ownership \ No newline at end of file +;; title: aibtcdev-token-owner +;; version: 1.0.0 +;; summary: An extension that provides management functions for the dao token + +;; traits +;; +(impl-trait .aibtcdev-dao-traits-v1.extension) + +;; constants +;; + +(define-constant ERR_UNAUTHORIZED (err u401)) + +;; public functions +;; + +(define-public (callback (sender principal) (memo (buff 34))) + (ok true) +) + +(define-public (set-token-uri (value (string-utf8 256))) + (begin + ;; check if caller is authorized + (try! (is-dao-or-extension)) + ;; update token uri + (try! (as-contract (contract-call? .aibtc-token set-token-uri value))) + (ok true) + ) +) + +(define-public (transfer-ownership (new-owner principal)) + (begin + ;; check if caller is authorized + (try! (is-dao-or-extension)) + ;; transfer ownership + (try! (as-contract (contract-call? .aibtc-token transfer-ownership new-owner))) + (ok true) + ) +) + +;; private functions +;; + +(define-private (is-dao-or-extension) + (ok (asserts! (or (is-eq tx-sender .aibtcdev-base-dao) + (contract-call? .aibtcdev-base-dao is-extension contract-caller)) ERR_UNAUTHORIZED + )) +) From 703d71eb3e3284911f80130e259119fc794f3b5b Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 14:22:02 -0700 Subject: [PATCH 55/84] fix: return type didnt match, execute then return --- .../dao/proposals/aibtc-payments-invoices-pay-invoice.clar | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice.clar b/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice.clar index b3278895..887ab2b4 100644 --- a/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice.clar +++ b/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice.clar @@ -2,5 +2,8 @@ (define-public (execute (sender principal)) ;; pays an invoice for a resource by index - (contract-call? .aibtc-payments-invoices pay-invoice u1 none) + (begin + (try! (contract-call? .aibtc-payments-invoices pay-invoice u1 none)) + (ok true) + ) ) From 897bd88aa5eb81caba071108a8d97400f4c801be Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 14:27:53 -0700 Subject: [PATCH 56/84] feat: script to check docs for each contract --- docs/check-docs-coverage.sh | 73 +++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 docs/check-docs-coverage.sh diff --git a/docs/check-docs-coverage.sh b/docs/check-docs-coverage.sh new file mode 100644 index 00000000..4eeff199 --- /dev/null +++ b/docs/check-docs-coverage.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +# Exit on any error +set -e + +echo "🔍 Checking docs coverage for Clarity contracts..." +echo "================================================" + +# Initialize counters +total_contracts=0 +undocumented_contracts=0 + +# Function to convert contract path to expected doc path +get_doc_path() { + local contract_path=$1 + # Remove 'contracts/' prefix and replace with 'docs/' + # Replace .clar with .md + echo "${contract_path/contracts\//docs\/}" | sed 's/\.clar$/.md/' +} + +# Debug: Print current directory +echo "Running from directory: $(pwd)" +echo "Looking for .clar files..." + +# Find all Clarity contracts and store in array +contracts=() +echo "Finding Clarity contracts..." +echo "Excluding test contracts and DAO traits..." +while IFS= read -r contract; do + contracts+=("$contract") +done < <(find contracts -name "*.clar" -not -path "contracts/test/*" -not -path "contracts/dao/traits/*") + +echo "Found ${#contracts[@]} contract files" + +# Check if any contracts were found +if [ ${#contracts[@]} -eq 0 ]; then + echo "❌ No .clar files found in the contracts directory!" + echo " Please make sure you're running this script from the project root." + exit 1 +fi + +# Process each contract +echo -e "\nChecking docs coverage..." +echo "==========================" +for contract in "${contracts[@]}"; do + let "total_contracts=total_contracts+1" + doc_file=$(get_doc_path "$contract") + + if [ ! -f "$doc_file" ]; then + echo "❌ Missing doc file for: $contract" + echo " Expected doc at: $doc_file" + let "undocumented_contracts=undocumented_contracts+1" + else + echo "✅ Found doc for: $contract" + fi +done + +# Print summary +echo "" +echo "📊 Summary" +echo "==========" +echo "Total contracts found: $total_contracts" +echo "Contracts with docs: $(($total_contracts - $undocumented_contracts))" +echo "Contracts without docs: $undocumented_contracts" +echo "" + +if [ $undocumented_contracts -eq 0 ]; then + echo "✅ All contracts have corresponding documentation files" + exit 0 +else + echo "❌ Action needed: $undocumented_contracts contract(s) are missing docs" + exit 1 +fi From eebe5d89f775b5c964875809ed05efb8d049f5e7 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 14:28:57 -0700 Subject: [PATCH 57/84] fix: u should know better (type mismatch) --- .../dao/proposals/aibtc-payments-invoices-add-resource.clar | 2 +- .../aibtc-payments-invoices-pay-invoice-by-resource-name.clar | 2 +- .../aibtc-payments-invoices-toggle-resource-by-name.clar | 2 +- contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar b/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar index bebfa5a4..3ffd0fe3 100644 --- a/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar +++ b/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; adds a resource that can be used to pay invoices - (contract-call? .aibtc-payments-invoices add-resource "example-resource" "An example resource" u1000000 (some "https://example.com")) + (contract-call? .aibtc-payments-invoices add-resource u"example-resource" u"An example resource" u1000000 (some u"https://example.com")) ) diff --git a/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar b/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar index 9b37dc85..02592aba 100644 --- a/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar +++ b/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; pays an invoice for a resource by name - (contract-call? .aibtc-payments-invoices pay-invoice-by-resource-name "example-resource" none) + (contract-call? .aibtc-payments-invoices pay-invoice-by-resource-name u"example-resource" none) ) diff --git a/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.clar b/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.clar index 3a7cbd89..cc7fe35c 100644 --- a/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.clar +++ b/contracts/dao/proposals/aibtc-payments-invoices-toggle-resource-by-name.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; toggles enabled status for resource by name - (contract-call? .aibtc-payments-invoices toggle-resource-by-name "example-resource") + (contract-call? .aibtc-payments-invoices toggle-resource-by-name u"example-resource") ) diff --git a/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar b/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar index 6995274b..e616b4ef 100644 --- a/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar +++ b/contracts/dao/proposals/aibtc-token-owner-set-token-uri.clar @@ -2,5 +2,5 @@ (define-public (execute (sender principal)) ;; sets the token uri for the dao token - (contract-call? .aibtc-token-owner set-token-uri "https://example.com/token.json") + (contract-call? .aibtc-token-owner set-token-uri u"https://example.com/token.json") ) From d8288dbbc7edee8aff696c2b7439bcdb0af828e3 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 6 Jan 2025 14:31:59 -0700 Subject: [PATCH 58/84] fix: more return type mismatch --- .../proposals/aibtc-payments-invoices-add-resource.clar | 5 ++++- ...btc-payments-invoices-pay-invoice-by-resource-name.clar | 7 +++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar b/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar index 3ffd0fe3..776528e6 100644 --- a/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar +++ b/contracts/dao/proposals/aibtc-payments-invoices-add-resource.clar @@ -2,5 +2,8 @@ (define-public (execute (sender principal)) ;; adds a resource that can be used to pay invoices - (contract-call? .aibtc-payments-invoices add-resource u"example-resource" u"An example resource" u1000000 (some u"https://example.com")) + (begin + (try! (contract-call? .aibtc-payments-invoices add-resource u"example-resource" u"An example resource" u1000000 (some u"https://example.com"))) + (ok true) + ) ) diff --git a/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar b/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar index 02592aba..202caa4e 100644 --- a/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar +++ b/contracts/dao/proposals/aibtc-payments-invoices-pay-invoice-by-resource-name.clar @@ -1,6 +1,9 @@ (impl-trait .aibtcdev-dao-traits-v1.proposal) (define-public (execute (sender principal)) - ;; pays an invoice for a resource by name - (contract-call? .aibtc-payments-invoices pay-invoice-by-resource-name u"example-resource" none) + (begin + ;; pays an invoice for a resource by name + (try! (contract-call? .aibtc-payments-invoices pay-invoice-by-resource-name u"example-resource" none)) + (ok true) + ) ) From 4def6277ba1368654e28f26b0062cd3f55a8f8cf Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 8 Jan 2025 13:43:01 -0700 Subject: [PATCH 59/84] fix: pool admin not needed, handled by x-y-k core --- .../dao/extensions/aibtc-bitflow-pool-owner.clar | 12 ------------ contracts/dao/extensions/aibtc-bitflow-pool.clar | 2 +- 2 files changed, 1 insertion(+), 13 deletions(-) delete mode 100644 contracts/dao/extensions/aibtc-bitflow-pool-owner.clar diff --git a/contracts/dao/extensions/aibtc-bitflow-pool-owner.clar b/contracts/dao/extensions/aibtc-bitflow-pool-owner.clar deleted file mode 100644 index 09a9a661..00000000 --- a/contracts/dao/extensions/aibtc-bitflow-pool-owner.clar +++ /dev/null @@ -1,12 +0,0 @@ -;; performs admin functions for bitflow-pool -;; set-pool-uri -;; set-pool-status -;; set-fee-address -;; set-x-fees -;; set-y-fees -;; update-pool-balances -;; transfer -;; pool-transfer -;; pool-mint -;; pool-burn -;; create-pool diff --git a/contracts/dao/extensions/aibtc-bitflow-pool.clar b/contracts/dao/extensions/aibtc-bitflow-pool.clar index 14df5a35..f3a3b254 100644 --- a/contracts/dao/extensions/aibtc-bitflow-pool.clar +++ b/contracts/dao/extensions/aibtc-bitflow-pool.clar @@ -17,7 +17,7 @@ ;; XYK Core address and contract deployer address (define-constant CORE_ADDRESS 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1.xyk-core-v-1-2) ;; <%= it.bitflow_xyk_core_address %> -(define-constant CONTRACT_DEPLOYER .aibtc-bitflow-pool-owner) ;; <%= it.dex_contract %> +(define-constant CONTRACT_DEPLOYER .aibtc-token-dex) ;; <%= it.dex_contract %> ;; Define all pool data vars (define-data-var pool-id uint u0) From b74ba88bd14036e95007d35a10c435d3b1800aa9 Mon Sep 17 00:00:00 2001 From: Lukasz <829210+LNow@users.noreply.github.com> Date: Wed, 8 Jan 2025 22:18:01 +0100 Subject: [PATCH 60/84] add action trait --- .../dao/extensions/aibtc-action-proposals.clar | 13 +++++++------ contracts/dao/traits/aibtcdev-dao-traits-v1.clar | 6 ++++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index 5f329387..90b08c13 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -11,6 +11,7 @@ (use-trait treasury-trait .aibtcdev-dao-traits-v1.treasury) (use-trait messaging-trait .aibtcdev-dao-traits-v1.messaging) (use-trait resources-trait .aibtcdev-dao-traits-v1.resources) +(use-trait action-trait .aibtcdev-dao-traits-v1.action) ;; constants ;; @@ -90,8 +91,8 @@ (define-map Proposals uint ;; proposal id { - action: (string-ascii 64), ;; action name - parameters: (list 10 (string-utf8 256)), ;; action parameters + action: principal, ;; action contract + parameters: (buff 2048), ;; action parameters createdAt: uint, ;; block height caller: principal, ;; contract caller creator: principal, ;; proposal creator (tx-sender) @@ -163,7 +164,7 @@ ) ) -(define-public (propose-action (action (string-ascii 64)) (parameters (list 10 (string-utf8 256))) (token )) +(define-public (propose-action (action ) (parameters (buff 2048)) (token )) (let ( (tokenContract (contract-of token)) @@ -189,7 +190,7 @@ }) ;; create the proposal (asserts! (map-insert Proposals newId { - action: action, + action: (contract-of action), parameters: parameters, createdAt: burn-block-height, caller: contract-caller, @@ -252,7 +253,7 @@ ) ) -(define-public (conclude-proposal (proposalId uint) (treasury ) (token )) +(define-public (conclude-proposal (proposalId uint) (action ) (treasury ) (token )) (let ( (proposalRecord (unwrap! (map-get? Proposals proposalId) ERR_PROPOSAL_NOT_FOUND)) @@ -288,7 +289,7 @@ ;; execute the action only if it passed ;; (and votePassed (try! (execute-action proposalRecord))) ;; return the result - (ok votePassed) + (ok (and votePassed (try! (contract-call? action run (get parameters proposalRecord))))) ) ) diff --git a/contracts/dao/traits/aibtcdev-dao-traits-v1.clar b/contracts/dao/traits/aibtcdev-dao-traits-v1.clar index 708f9d85..69d64802 100644 --- a/contracts/dao/traits/aibtcdev-dao-traits-v1.clar +++ b/contracts/dao/traits/aibtcdev-dao-traits-v1.clar @@ -164,3 +164,9 @@ ;; @returns (response bool uint) (conclude-proposal ( ) (response bool uint)) )) + +(define-trait action ( + ;; @param parameters encoded action parameters + ;; @returns (response bool uint) + (run ((buff 2048)) (response bool uint)) +)) \ No newline at end of file From 4d316ed3f17d54019fc06ffce8a67fbf7fb4b066 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 8 Jan 2025 14:19:22 -0700 Subject: [PATCH 61/84] fix: update core proposal naming in traits Also a missed spot in the bootstrap proposal --- contracts/dao/extensions/aibtc-action-proposals.clar | 4 ++-- contracts/dao/extensions/aibtc-core-proposals.clar | 4 ++-- .../dao/proposals/aibtc-base-bootstrap-initialization.clar | 2 +- contracts/dao/traits/aibtcdev-dao-traits-v1.clar | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index 5f329387..160601a5 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -1,7 +1,7 @@ -;; title: aibtcdev-actions +;; title: aibtcdev-action-proposals ;; version: 1.0.0 ;; summary: An extension that manages voting on predefined actions using a SIP-010 Stacks token. -;; description: This contract allows voting on specific extension actions with a lower threshold than direct-execute. +;; description: This contract allows voting on specific extension actions with a lower threshold than core proposals. ;; traits ;; diff --git a/contracts/dao/extensions/aibtc-core-proposals.clar b/contracts/dao/extensions/aibtc-core-proposals.clar index 675dcc82..7b31fbe1 100644 --- a/contracts/dao/extensions/aibtc-core-proposals.clar +++ b/contracts/dao/extensions/aibtc-core-proposals.clar @@ -1,4 +1,4 @@ -;; title: aibtcdev-direct-execute +;; title: aibtcdev-core-proposals ;; version: 1.0.0 ;; summary: An extension that manages voting on proposals to execute Clarity code using a SIP-010 Stacks token. ;; description: This contract can make changes to core DAO functionality with a high voting threshold by executing Clarity code in the context of the DAO. @@ -6,7 +6,7 @@ ;; traits ;; (impl-trait .aibtcdev-dao-traits-v1.extension) -(impl-trait .aibtcdev-dao-traits-v1.direct-execute) +(impl-trait .aibtcdev-dao-traits-v1.core-proposals) (use-trait ft-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) (use-trait proposal-trait .aibtcdev-dao-traits-v1.proposal) diff --git a/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar b/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar index 84a4db4b..e92f6334 100644 --- a/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar +++ b/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar @@ -9,7 +9,7 @@ (list {extension: .aibtc-action-proposals, enabled: true} {extension: .aibtc-bank-account, enabled: true} - {extension: .aibtc-ext003-direct-execute, enabled: true} + {extension: .aibtc-core-proposals, enabled: true} {extension: .aibtc-onchain-messaging, enabled: true} {extension: .aibtc-payments-invoices, enabled: true} {extension: .aibtc-treasury, enabled: true} diff --git a/contracts/dao/traits/aibtcdev-dao-traits-v1.clar b/contracts/dao/traits/aibtcdev-dao-traits-v1.clar index 708f9d85..fb40714c 100644 --- a/contracts/dao/traits/aibtcdev-dao-traits-v1.clar +++ b/contracts/dao/traits/aibtcdev-dao-traits-v1.clar @@ -137,7 +137,7 @@ (revoke-delegate-stx () (response bool uint)) )) -(define-trait direct-execute ( +(define-trait core-proposals ( ;; set the protocol treasury contract ;; @param treasury the treasury contract principal ;; @returns (response bool uint) From 3350b4a5e99a2683cf787629a102e1066d70e3d6 Mon Sep 17 00:00:00 2001 From: Lukasz <829210+LNow@users.noreply.github.com> Date: Thu, 9 Jan 2025 00:24:31 +0100 Subject: [PATCH 62/84] fix: set-voting-token and set-protocol-treasury --- .../dao/extensions/aibtc-action-proposals.clar | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index 90b08c13..38782b70 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -60,7 +60,7 @@ ;; data vars ;; -(define-data-var protocolTreasury principal .aibtc-treasury) ;; the treasury contract for protocol funds +(define-data-var protocolTreasury principal SELF) ;; the treasury contract for protocol funds (define-data-var votingToken principal SELF) ;; the FT contract used for voting ;; data maps @@ -128,8 +128,6 @@ (treasuryContract (contract-of treasury)) ) (try! (is-dao-or-extension)) - ;; treasury must be a contract - (asserts! (not (is-standard treasuryContract)) ERR_TREASURY_MUST_BE_CONTRACT) ;; treasury must not be already set (asserts! (is-eq (var-get protocolTreasury) SELF) ERR_TREASURY_NOT_INITIALIZED) ;; treasury cannot be the voting contract @@ -145,22 +143,17 @@ ) (define-public (set-voting-token (token )) - (let - ( - (tokenContract (contract-of token)) - ) + (begin (try! (is-dao-or-extension)) - ;; token must be a contract - (asserts! (not (is-standard tokenContract)) ERR_TOKEN_MUST_BE_CONTRACT) ;; token must not be already set (asserts! (is-eq (var-get votingToken) SELF) ERR_TOKEN_NOT_INITIALIZED) (print { notification: "set-voting-token", payload: { - token: tokenContract + token: token } }) - (ok (var-set votingToken tokenContract)) + (ok (var-set votingToken (contract-of token))) ) ) From e6f28b6c8f7be8bedab2dfb8894a63111b19f87d Mon Sep 17 00:00:00 2001 From: Lukasz <829210+LNow@users.noreply.github.com> Date: Thu, 9 Jan 2025 00:24:51 +0100 Subject: [PATCH 63/84] initialize action-proposals --- .../dao/proposals/aibtc-base-bootstrap-initialization.clar | 3 +++ 1 file changed, 3 insertions(+) diff --git a/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar b/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar index 84a4db4b..3ae082bb 100644 --- a/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar +++ b/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar @@ -15,6 +15,9 @@ {extension: .aibtc-treasury, enabled: true} ) )) + + (try! (contract-call? .aibtc-action-proposals set-protocol-treasury .aibtc-treasury)) + (try! (contract-call? .aibtc-action-proposals set-voting-token .aibtc-token)) ;; print manifest (print DAO_MANIFEST) (ok true) From e8160b750f9cd635a73f1b0294a91f4b9797286e Mon Sep 17 00:00:00 2001 From: Lukasz <829210+LNow@users.noreply.github.com> Date: Thu, 9 Jan 2025 00:26:04 +0100 Subject: [PATCH 64/84] validate action --- contracts/dao/extensions/aibtc-action-proposals.clar | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index 38782b70..0f7504d9 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -264,6 +264,8 @@ (asserts! (>= burn-block-height (get endBlock proposalRecord)) ERR_PROPOSAL_STILL_ACTIVE) ;; proposal not already concluded (asserts! (not (get concluded proposalRecord)) ERR_PROPOSAL_ALREADY_CONCLUDED) + ;; action must be the same as the one in proposal + (asserts! (is-eq (get action proposalRecord) (contract-of action)) ERR_INVALID_ACTION) ;; print conclusion event (print { notification: "conclude-proposal", From c2a02038e542bd325d4d1bd6d1b9ba095468beff Mon Sep 17 00:00:00 2001 From: Lukasz <829210+LNow@users.noreply.github.com> Date: Thu, 9 Jan 2025 01:31:14 +0100 Subject: [PATCH 65/84] execute action and print error if any --- contracts/dao/extensions/aibtc-action-proposals.clar | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index 0f7504d9..6e28dfa6 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -282,9 +282,10 @@ }) ) ;; execute the action only if it passed - ;; (and votePassed (try! (execute-action proposalRecord))) - ;; return the result - (ok (and votePassed (try! (contract-call? action run (get parameters proposalRecord))))) + (ok (if votePassed + (match (contract-call? action run (get parameters proposalRecord)) ok_ true err_ (begin (print {err:err_}) false)) + false + )) ) ) From e0be3a63755f28d549ceb2f19cfdd3b1a43a443b Mon Sep 17 00:00:00 2001 From: Lukasz <829210+LNow@users.noreply.github.com> Date: Thu, 9 Jan 2025 01:32:07 +0100 Subject: [PATCH 66/84] add send-message and set-account-holder actions --- Clarinet.toml | 11 ++++++++++ .../dao/extensions/actions/send-message.clar | 20 +++++++++++++++++++ .../actions/set-account-holder.clar | 20 +++++++++++++++++++ .../aibtc-base-bootstrap-initialization.clar | 2 ++ 4 files changed, 53 insertions(+) create mode 100644 contracts/dao/extensions/actions/send-message.clar create mode 100644 contracts/dao/extensions/actions/set-account-holder.clar diff --git a/Clarinet.toml b/Clarinet.toml index 95d063ec..3c07bb45 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -302,6 +302,17 @@ path = 'contracts/dao/traits/aibtcdev-dao-v1.clar' clarity_version = 2 epoch = 3.0 +# actions +[contracts.set-account-holder] +path = 'contracts/dao/extensions/actions/set-account-holder.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.send-message] +path = 'contracts/dao/extensions/actions/send-message.clar' +clarity_version = 2 +epoch = 3.0 + # testing utilities [contracts.test-treasury] diff --git a/contracts/dao/extensions/actions/send-message.clar b/contracts/dao/extensions/actions/send-message.clar new file mode 100644 index 00000000..1fe5d824 --- /dev/null +++ b/contracts/dao/extensions/actions/send-message.clar @@ -0,0 +1,20 @@ +(impl-trait .aibtcdev-dao-traits-v1.extension) +(impl-trait .aibtcdev-dao-traits-v1.action) + +(define-constant ERR_UNAUTHORIZED (err u10001)) +(define-constant ERR_INVALID_PARAMS (err u10002)) + +(define-public (callback (sender principal) (memo (buff 34))) (ok true)) + +(define-public (run (parameters (buff 2048))) + (begin + (try! (is-dao-or-extension)) + (contract-call? .aibtc-onchain-messaging send (unwrap! (from-consensus-buff? (string-ascii 2043) parameters) ERR_INVALID_PARAMS) true) + ) +) + +(define-private (is-dao-or-extension) + (ok (asserts! (or (is-eq tx-sender .aibtcdev-base-dao) + (contract-call? .aibtcdev-base-dao is-extension contract-caller)) ERR_UNAUTHORIZED + )) +) \ No newline at end of file diff --git a/contracts/dao/extensions/actions/set-account-holder.clar b/contracts/dao/extensions/actions/set-account-holder.clar new file mode 100644 index 00000000..f254c80a --- /dev/null +++ b/contracts/dao/extensions/actions/set-account-holder.clar @@ -0,0 +1,20 @@ +(impl-trait .aibtcdev-dao-traits-v1.extension) +(impl-trait .aibtcdev-dao-traits-v1.action) + +(define-constant ERR_UNAUTHORIZED (err u10001)) +(define-constant ERR_INVALID_PARAMS (err u10002)) + +(define-public (callback (sender principal) (memo (buff 34))) (ok true)) + +(define-public (run (parameters (buff 2048))) + (begin + (try! (is-dao-or-extension)) + (contract-call? .aibtc-bank-account set-account-holder (unwrap! (from-consensus-buff? principal parameters) ERR_INVALID_PARAMS)) + ) +) + +(define-private (is-dao-or-extension) + (ok (asserts! (or (is-eq tx-sender .aibtcdev-base-dao) + (contract-call? .aibtcdev-base-dao is-extension contract-caller)) ERR_UNAUTHORIZED + )) +) \ No newline at end of file diff --git a/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar b/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar index 3ae082bb..29c1e469 100644 --- a/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar +++ b/contracts/dao/proposals/aibtc-base-bootstrap-initialization.clar @@ -13,6 +13,8 @@ {extension: .aibtc-onchain-messaging, enabled: true} {extension: .aibtc-payments-invoices, enabled: true} {extension: .aibtc-treasury, enabled: true} + {extension: .set-account-holder, enabled: true} + {extension: .send-message, enabled: true} ) )) From 1eb7fb239bba81f326d11ec30350e92cb131f2c5 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Thu, 9 Jan 2025 11:23:01 -0700 Subject: [PATCH 67/84] fix: remove bitflow-pool-owner from clarinet.toml --- Clarinet.toml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Clarinet.toml b/Clarinet.toml index 3c07bb45..5576d1f7 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -73,11 +73,6 @@ path = 'contracts/dao/extensions/aibtc-bitflow-pool.clar' clarity_version = 2 epoch = 3.0 -[contracts.aibtc-bitflow-pool-owner] -path = 'contracts/dao/extensions/aibtc-bitflow-pool-owner.clar' -clarity_version = 2 -epoch = 3.0 - [contracts.aibtc-core-proposals] path = 'contracts/dao/extensions/aibtc-core-proposals.clar' clarity_version = 2 From ef56382dbb921293844270d0c3c8e5ec0a2c0627 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Thu, 9 Jan 2025 11:25:36 -0700 Subject: [PATCH 68/84] fix: update action naming template --- Clarinet.toml | 23 ++++++++++--------- ...ge.clar => aibtc-action-send-message.clar} | 0 ...r => aibtc-action-set-account-holder.clar} | 0 3 files changed, 12 insertions(+), 11 deletions(-) rename contracts/dao/extensions/actions/{send-message.clar => aibtc-action-send-message.clar} (100%) rename contracts/dao/extensions/actions/{set-account-holder.clar => aibtc-action-set-account-holder.clar} (100%) diff --git a/Clarinet.toml b/Clarinet.toml index 5576d1f7..7de28da9 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -108,6 +108,18 @@ path = 'contracts/dao/extensions/aibtc-treasury.clar' clarity_version = 2 epoch = 3.0 +# dao actions (as extensions) + +[contracts.aibtc-action-send-message] +path = 'contracts/dao/extensions/actions/aibtc-action-send-message.clar' +clarity_version = 2 +epoch = 3.0 + +[contracts.aibtc-action-set-account-holder] +path = 'contracts/dao/extensions/actions/aibtc-action-set-account-holder.clar' +clarity_version = 2 +epoch = 3.0 + # dao proposals [contracts.aibtc-bank-account-deposit-stx] @@ -297,17 +309,6 @@ path = 'contracts/dao/traits/aibtcdev-dao-v1.clar' clarity_version = 2 epoch = 3.0 -# actions -[contracts.set-account-holder] -path = 'contracts/dao/extensions/actions/set-account-holder.clar' -clarity_version = 2 -epoch = 3.0 - -[contracts.send-message] -path = 'contracts/dao/extensions/actions/send-message.clar' -clarity_version = 2 -epoch = 3.0 - # testing utilities [contracts.test-treasury] diff --git a/contracts/dao/extensions/actions/send-message.clar b/contracts/dao/extensions/actions/aibtc-action-send-message.clar similarity index 100% rename from contracts/dao/extensions/actions/send-message.clar rename to contracts/dao/extensions/actions/aibtc-action-send-message.clar diff --git a/contracts/dao/extensions/actions/set-account-holder.clar b/contracts/dao/extensions/actions/aibtc-action-set-account-holder.clar similarity index 100% rename from contracts/dao/extensions/actions/set-account-holder.clar rename to contracts/dao/extensions/actions/aibtc-action-set-account-holder.clar From 764e4090a9910d2deba489e437f927ba2e753bc8 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Thu, 9 Jan 2025 11:51:09 -0700 Subject: [PATCH 69/84] fix: remove unused code --- .../extensions/aibtc-action-proposals.clar | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index 8695c1c2..6fe4629a 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -65,28 +65,6 @@ ;; data maps ;; -(define-constant VALID_ACTIONS (list - "set-account-holder" ;; aibtc-bank-account - "set-withdrawal-period" ;; aibtc-bank-account, with limits - "set-withdrawal-amount";; aibtc-bank-account, with limits - "send-message" ;; aibtc-onchain-messaging - "add-resource" ;; aibtc-payments-invoices - "allow-asset" ;; aibtc-treasury - "toggle-resource" ;; aibtc-payments-invoices toggle-resource-by-name -)) - -;; exploring which structure works better vs list -(define-map Actions - (string-ascii 50) - bool -) -(map-set Actions "set-account-holder" true) ;; aibtc-bank-account -(map-set Actions "set-withdrawal-period" true) ;; aibtc-bank-account, with limits -(map-set Actions "set-withdrawal-amount" true) ;; aibtc-bank-account, with limits -(map-set Actions "send-message" true) ;; aibtc-onchain-messaging -(map-set Actions "add-resource" true) ;; aibtc-payments-invoices -(map-set Actions "toggle-resource" true) ;; aibtc-payments-invoices toggle-resource-by-name -(map-set Actions "allow-asset" true) ;; aibtc-treasury (define-map Proposals uint ;; proposal id From ca58c46a68a1465843279ff7b77adec222b6ceca Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 11:13:45 -0700 Subject: [PATCH 70/84] fix: cleanup unused errors, fix const naming --- .../extensions/aibtc-action-proposals.clar | 32 +++++++------------ 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index 6fe4629a..b0f6fa97 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -20,32 +20,26 @@ (define-constant VOTING_QUORUM u66) ;; 66% of liquid supply (total supply - treasury) ;; error messages - authorization -(define-constant ERR_UNAUTHORIZED (err u1000)) -(define-constant ERR_NOT_DAO_OR_EXTENSION (err u1001)) +(define-constant ERR_NOT_DAO_OR_EXTENSION (err u1000)) ;; error messages - initialization (define-constant ERR_NOT_INITIALIZED (err u1100)) -(define-constant ERR_ALREADY_INITIALIZED (err u1101)) ;; error messages - treasury -(define-constant ERR_TREASURY_MUST_BE_CONTRACT (err u1200)) -(define-constant ERR_TREASURY_CANNOT_BE_SELF (err u1201)) -(define-constant ERR_TREASURY_ALREADY_SET (err u1202)) -(define-constant ERR_TREASURY_MISMATCH (err u1203)) -(define-constant ERR_TREASURY_NOT_INITIALIZED (err u1204)) +(define-constant ERR_TREASURY_CANNOT_BE_SELF (err u1200)) +(define-constant ERR_TREASURY_MISMATCH (err u1201)) +(define-constant ERR_TREASURY_NOT_INITIALIZED (err u1202)) ;; error messages - voting token -(define-constant ERR_TOKEN_MUST_BE_CONTRACT (err u1300)) -(define-constant ERR_TOKEN_NOT_INITIALIZED (err u1301)) -(define-constant ERR_TOKEN_MISMATCH (err u1302)) -(define-constant ERR_INSUFFICIENT_BALANCE (err u1303)) +(define-constant ERR_TOKEN_ALREADY_INITIALIZED (err u1300)) +(define-constant ERR_TOKEN_MISMATCH (err u1301)) +(define-constant ERR_INSUFFICIENT_BALANCE (err u1302)) ;; error messages - proposals (define-constant ERR_PROPOSAL_NOT_FOUND (err u1400)) -(define-constant ERR_PROPOSAL_ALREADY_EXECUTED (err u1401)) -(define-constant ERR_PROPOSAL_STILL_ACTIVE (err u1402)) -(define-constant ERR_SAVING_PROPOSAL (err u1403)) -(define-constant ERR_PROPOSAL_ALREADY_CONCLUDED (err u1404)) +(define-constant ERR_PROPOSAL_STILL_ACTIVE (err u1401)) +(define-constant ERR_SAVING_PROPOSAL (err u1402)) +(define-constant ERR_PROPOSAL_ALREADY_CONCLUDED (err u1403)) ;; error messages - voting (define-constant ERR_VOTE_TOO_SOON (err u1500)) @@ -56,12 +50,12 @@ ;; error messages - actions (define-constant ERR_INVALID_ACTION (err u1600)) -(define-constant ERR_INVALID_PARAMETERS (err u1601)) ;; data vars ;; (define-data-var protocolTreasury principal SELF) ;; the treasury contract for protocol funds (define-data-var votingToken principal SELF) ;; the FT contract used for voting +(define-data-var proposalCount uint u0) ;; total number of proposals ;; data maps ;; @@ -91,8 +85,6 @@ uint ;; total votes ) -(define-data-var proposalCount uint u0) - ;; public functions ;; @@ -124,7 +116,7 @@ (begin (try! (is-dao-or-extension)) ;; token must not be already set - (asserts! (is-eq (var-get votingToken) SELF) ERR_TOKEN_NOT_INITIALIZED) + (asserts! (is-eq (var-get votingToken) SELF) ERR_TOKEN_ALREADY_INITIALIZED) (print { notification: "set-voting-token", payload: { From 8a02f281690e8b1fe1951ec9f36e230c36ee419b Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 11:23:25 -0700 Subject: [PATCH 71/84] fix: cannot set token back to self --- contracts/dao/extensions/aibtc-action-proposals.clar | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index b0f6fa97..80f8a63f 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -34,6 +34,7 @@ (define-constant ERR_TOKEN_ALREADY_INITIALIZED (err u1300)) (define-constant ERR_TOKEN_MISMATCH (err u1301)) (define-constant ERR_INSUFFICIENT_BALANCE (err u1302)) +(define-constant ERR_TOKEN_CANNOT_BE_SELF (err u1303)) ;; error messages - proposals (define-constant ERR_PROPOSAL_NOT_FOUND (err u1400)) @@ -117,6 +118,7 @@ (try! (is-dao-or-extension)) ;; token must not be already set (asserts! (is-eq (var-get votingToken) SELF) ERR_TOKEN_ALREADY_INITIALIZED) + (asserts! (not (is-eq (contract-of token) SELF)) ERR_TOKEN_CANNOT_BE_SELF) (print { notification: "set-voting-token", payload: { From e2f7f1f7ca90af2a591dc590736dc4f887974559 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 11:45:18 -0700 Subject: [PATCH 72/84] fix: add trait for action proposals contract May not need it in the future but we can use the traits as a way to look up groups of contract, so want all to be consistent. --- .../extensions/aibtc-action-proposals.clar | 1 + .../dao/traits/aibtcdev-dao-traits-v1.clar | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index 80f8a63f..b41fc7b1 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -6,6 +6,7 @@ ;; traits ;; (impl-trait .aibtcdev-dao-traits-v1.extension) +(impl-trait .aibtcdev-dao-traits-v1.action-proposals) (use-trait ft-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) (use-trait treasury-trait .aibtcdev-dao-traits-v1.treasury) diff --git a/contracts/dao/traits/aibtcdev-dao-traits-v1.clar b/contracts/dao/traits/aibtcdev-dao-traits-v1.clar index 287df4d6..ded603fa 100644 --- a/contracts/dao/traits/aibtcdev-dao-traits-v1.clar +++ b/contracts/dao/traits/aibtcdev-dao-traits-v1.clar @@ -19,6 +19,36 @@ ;; EXTENSION TRAITS +(define-trait action-proposals ( + ;; set the protocol treasury contract + ;; @param treasury the treasury contract principal + ;; @returns (response bool uint) + (set-protocol-treasury () (response bool uint)) + ;; set the voting token contract + ;; @param token the token contract principal + ;; @returns (response bool uint) + (set-voting-token () (response bool uint)) + ;; propose a new action + ;; @param action the action contract + ;; @param parameters encoded action parameters + ;; @param token the voting token contract + ;; @returns (response bool uint) + (propose-action ( (buff 2048) ) (response bool uint)) + ;; vote on an existing proposal + ;; @param proposal the proposal id + ;; @param token the voting token contract + ;; @param vote true for yes, false for no + ;; @returns (response bool uint) + (vote-on-proposal (uint bool) (response bool uint)) + ;; conclude a proposal after voting period + ;; @param proposal the proposal id + ;; @param action the action contract + ;; @param treasury the treasury contract + ;; @param token the voting token contract + ;; @returns (response bool uint) + (conclude-proposal (uint ) (response bool uint)) +)) + (define-trait bank-account ( ;; set account holder ;; @param principal the new account holder From 3559921a775efa238403db6449026b6fe945834a Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 12:06:47 -0700 Subject: [PATCH 73/84] feat: add bitflow-pool trait from dao Will help distinguish a normal pool from one deployed in our structure, just links to the same sip-010 transfer function and we're not using extension trait here since there is no is-dao-or-extension usage. --- contracts/dao/extensions/aibtc-bitflow-pool.clar | 3 +++ contracts/dao/traits/aibtcdev-dao-traits-v1.clar | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/contracts/dao/extensions/aibtc-bitflow-pool.clar b/contracts/dao/extensions/aibtc-bitflow-pool.clar index f3a3b254..39c7fa63 100644 --- a/contracts/dao/extensions/aibtc-bitflow-pool.clar +++ b/contracts/dao/extensions/aibtc-bitflow-pool.clar @@ -2,6 +2,9 @@ (impl-trait 'ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8.xyk-pool-trait-v-1-2.xyk-pool-trait) ;; <%= it.bitflow_pool_trait %> (use-trait sip-010-trait 'ST3VXT52QEQPZ5246A16RFNMR1PRJ96JK6YYX37N8.sip-010-trait-ft-standard.sip-010-trait) ;; <%= it.sip10_trait %> +;; implement aibtcdev trait +(impl-trait .aibtcdev-dao-traits-v1.bitflow-pool) + ;; Define fungible pool token (define-fungible-token pool-token) diff --git a/contracts/dao/traits/aibtcdev-dao-traits-v1.clar b/contracts/dao/traits/aibtcdev-dao-traits-v1.clar index ded603fa..a8d7bc0d 100644 --- a/contracts/dao/traits/aibtcdev-dao-traits-v1.clar +++ b/contracts/dao/traits/aibtcdev-dao-traits-v1.clar @@ -75,6 +75,12 @@ (withdraw-stx () (response bool uint)) )) +(define-trait bitflow-pool ( + ;; transfer funds (limited as we're just tagging this) + ;; all functions are covered between sip-010 and bitflow-xyk + (transfer (uint principal principal (optional (buff 34))) (response bool uint)) +)) + (define-trait messaging ( ;; send a message on-chain (opt from DAO) ;; @param msg the message to send (up to 1MB) From dc4649c5e79ffa5bda6a284ecbdbe6cbf8d8d842 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 12:17:35 -0700 Subject: [PATCH 74/84] fix: remove unused traits --- contracts/dao/extensions/aibtc-action-proposals.clar | 2 -- 1 file changed, 2 deletions(-) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index b41fc7b1..ab03b912 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -10,8 +10,6 @@ (use-trait ft-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) (use-trait treasury-trait .aibtcdev-dao-traits-v1.treasury) -(use-trait messaging-trait .aibtcdev-dao-traits-v1.messaging) -(use-trait resources-trait .aibtcdev-dao-traits-v1.resources) (use-trait action-trait .aibtcdev-dao-traits-v1.action) ;; constants From 83e74f3958fa43c76b67668853d5bef64cbf5d34 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 12:34:15 -0700 Subject: [PATCH 75/84] fix: update core propsal structure to match actions There were a few changes in formatting, err messages, flow, and voting that need to be synchronized between the two. More updates to come. --- .../extensions/aibtc-action-proposals.clar | 21 ++++++--- .../dao/extensions/aibtc-core-proposals.clar | 45 +++++++++---------- 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index ab03b912..27fc4b97 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -27,13 +27,14 @@ ;; error messages - treasury (define-constant ERR_TREASURY_CANNOT_BE_SELF (err u1200)) (define-constant ERR_TREASURY_MISMATCH (err u1201)) -(define-constant ERR_TREASURY_NOT_INITIALIZED (err u1202)) +(define-constant ERR_TREASURY_CANNOT_BE_SAME (err u1202)) ;; error messages - voting token (define-constant ERR_TOKEN_ALREADY_INITIALIZED (err u1300)) (define-constant ERR_TOKEN_MISMATCH (err u1301)) (define-constant ERR_INSUFFICIENT_BALANCE (err u1302)) (define-constant ERR_TOKEN_CANNOT_BE_SELF (err u1303)) +(define-constant ERR_TOKEN_CANNOT_BE_SAME (err u1304)) ;; error messages - proposals (define-constant ERR_PROPOSAL_NOT_FOUND (err u1400)) @@ -98,10 +99,10 @@ (treasuryContract (contract-of treasury)) ) (try! (is-dao-or-extension)) - ;; treasury must not be already set - (asserts! (is-eq (var-get protocolTreasury) SELF) ERR_TREASURY_NOT_INITIALIZED) - ;; treasury cannot be the voting contract + ;; cannot set treasury to self (asserts! (not (is-eq treasuryContract SELF)) ERR_TREASURY_CANNOT_BE_SELF) + ;; cannot set treasury to same value + (asserts! (not (is-eq treasuryContract (var-get protocolTreasury))) ERR_TREASURY_CANNOT_BE_SAME) (print { notification: "set-protocol-treasury", payload: { @@ -113,11 +114,17 @@ ) (define-public (set-voting-token (token )) - (begin + (let + ( + (tokenContract (contract-of token)) + ) (try! (is-dao-or-extension)) - ;; token must not be already set + ;; cannot set token to self + (asserts! (not (is-eq tokenContract SELF)) ERR_TOKEN_CANNOT_BE_SELF) + ;; cannot set token to same value + (asserts! (not (is-eq tokenContract (var-get votingToken))) ERR_TOKEN_CANNOT_BE_SAME) + ;; cannot set token if already set once (asserts! (is-eq (var-get votingToken) SELF) ERR_TOKEN_ALREADY_INITIALIZED) - (asserts! (not (is-eq (contract-of token) SELF)) ERR_TOKEN_CANNOT_BE_SELF) (print { notification: "set-voting-token", payload: { diff --git a/contracts/dao/extensions/aibtc-core-proposals.clar b/contracts/dao/extensions/aibtc-core-proposals.clar index 7b31fbe1..0d622698 100644 --- a/contracts/dao/extensions/aibtc-core-proposals.clar +++ b/contracts/dao/extensions/aibtc-core-proposals.clar @@ -12,7 +12,6 @@ (use-trait proposal-trait .aibtcdev-dao-traits-v1.proposal) (use-trait treasury-trait .aibtcdev-dao-traits-v1.treasury) - ;; constants ;; @@ -21,24 +20,22 @@ (define-constant VOTING_QUORUM u95) ;; 95% of liquid supply (total supply - treasury) ;; error messages - authorization -(define-constant ERR_UNAUTHORIZED (err u3000)) -(define-constant ERR_NOT_DAO_OR_EXTENSION (err u3001)) +(define-constant ERR_NOT_DAO_OR_EXTENSION (err u3000)) ;; error messages - initialization (define-constant ERR_NOT_INITIALIZED (err u3100)) -(define-constant ERR_ALREADY_INITIALIZED (err u3101)) ;; error messages - treasury -(define-constant ERR_TREASURY_MUST_BE_CONTRACT (err u3200)) -(define-constant ERR_TREASURY_CANNOT_BE_SELF (err u3201)) -(define-constant ERR_TREASURY_ALREADY_SET (err u3202)) -(define-constant ERR_TREASURY_MISMATCH (err u3203)) +(define-constant ERR_TREASURY_CANNOT_BE_SELF (err u3200)) +(define-constant ERR_TREASURY_MISMATCH (err u3201)) +(define-constant ERR_TREASURY_CANNOT_BE_SAME (err u3202)) ;; error messages - voting token -(define-constant ERR_TOKEN_MUST_BE_CONTRACT (err u3300)) -(define-constant ERR_TOKEN_NOT_INITIALIZED (err u3301)) -(define-constant ERR_TOKEN_MISMATCH (err u3302)) -(define-constant ERR_INSUFFICIENT_BALANCE (err u3303)) +(define-constant ERR_TOKEN_ALREADY_INITIALIZED (err u3300)) +(define-constant ERR_TOKEN_MISMATCH (err u3301)) +(define-constant ERR_INSUFFICIENT_BALANCE (err u3302)) +(define-constant ERR_TOKEN_CANNOT_BE_SELF (err u3303)) +(define-constant ERR_TOKEN_CANNOT_BE_SAME (err u3304)) ;; error messages - proposals (define-constant ERR_PROPOSAL_NOT_FOUND (err u3400)) @@ -56,7 +53,7 @@ ;; data vars ;; -(define-data-var protocolTreasury principal .aibtc-treasury) ;; the treasury contract for protocol funds +(define-data-var protocolTreasury principal SELF) ;; the treasury contract for protocol funds (define-data-var votingToken principal SELF) ;; the FT contract used for voting ;; data maps @@ -97,12 +94,10 @@ (treasuryContract (contract-of treasury)) ) (try! (is-dao-or-extension)) - ;; treasury must be a contract - (asserts! (not (is-standard treasuryContract)) ERR_TREASURY_MUST_BE_CONTRACT) - ;; treasury cannot be the voting contract + ;; cannot set treasury to self (asserts! (not (is-eq treasuryContract SELF)) ERR_TREASURY_CANNOT_BE_SELF) - ;; treasury cannot be the same value - (asserts! (not (is-eq treasuryContract (var-get protocolTreasury))) ERR_TREASURY_ALREADY_SET) + ;; cannot set treasury to same value + (asserts! (not (is-eq treasuryContract (var-get protocolTreasury))) ERR_TREASURY_CANNOT_BE_SAME) (print { notification: "set-protocol-treasury", payload: { @@ -119,17 +114,19 @@ (tokenContract (contract-of token)) ) (try! (is-dao-or-extension)) - ;; token must be a contract - (asserts! (not (is-standard tokenContract)) ERR_TOKEN_MUST_BE_CONTRACT) - (asserts! (is-eq (var-get votingToken) SELF) ERR_TOKEN_NOT_INITIALIZED) - (asserts! (is-eq (var-get votingToken) tokenContract) ERR_TOKEN_MISMATCH) + ;; cannot set token to self + (asserts! (not (is-eq tokenContract SELF)) ERR_TOKEN_CANNOT_BE_SELF) + ;; cannot set token to same value + (asserts! (not (is-eq tokenContract (var-get votingToken))) ERR_TOKEN_CANNOT_BE_SAME) + ;; cannot set token if already set once + (asserts! (is-eq (var-get votingToken) SELF) ERR_TOKEN_ALREADY_INITIALIZED) (print { notification: "set-voting-token", payload: { - token: tokenContract + token: token } }) - (ok (var-set votingToken tokenContract)) + (ok (var-set votingToken (contract-of token))) ) ) From f85f5e27d6585a9fedf1a1a11d51cbe60542a849 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 12:36:17 -0700 Subject: [PATCH 76/84] fix: use tokenContract consistently --- contracts/dao/extensions/aibtc-action-proposals.clar | 4 ++-- contracts/dao/extensions/aibtc-core-proposals.clar | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index 27fc4b97..2018a9b7 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -128,10 +128,10 @@ (print { notification: "set-voting-token", payload: { - token: token + token: tokenContract } }) - (ok (var-set votingToken (contract-of token))) + (ok (var-set votingToken tokenContract)) ) ) diff --git a/contracts/dao/extensions/aibtc-core-proposals.clar b/contracts/dao/extensions/aibtc-core-proposals.clar index 0d622698..677500a4 100644 --- a/contracts/dao/extensions/aibtc-core-proposals.clar +++ b/contracts/dao/extensions/aibtc-core-proposals.clar @@ -123,10 +123,10 @@ (print { notification: "set-voting-token", payload: { - token: token + token: tokenContract } }) - (ok (var-set votingToken (contract-of token))) + (ok (var-set votingToken tokenContract)) ) ) From 73817ff79eda9e89997f3f4a2734a017629d1337 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 12:42:17 -0700 Subject: [PATCH 77/84] fix: remove extra const for voting power its the same insufficient balance check we make when proposing --- contracts/dao/extensions/aibtc-core-proposals.clar | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/contracts/dao/extensions/aibtc-core-proposals.clar b/contracts/dao/extensions/aibtc-core-proposals.clar index 677500a4..3e267f40 100644 --- a/contracts/dao/extensions/aibtc-core-proposals.clar +++ b/contracts/dao/extensions/aibtc-core-proposals.clar @@ -48,7 +48,6 @@ (define-constant ERR_VOTE_TOO_SOON (err u3500)) (define-constant ERR_VOTE_TOO_LATE (err u3501)) (define-constant ERR_ALREADY_VOTED (err u3502)) -(define-constant ERR_ZERO_VOTING_POWER (err u3503)) (define-constant ERR_QUORUM_NOT_REACHED (err u3504)) ;; data vars @@ -181,7 +180,7 @@ ;; token matches set voting token (asserts! (is-eq tokenContract (var-get votingToken)) ERR_TOKEN_MISMATCH) ;; caller has the required balance - (asserts! (> senderBalance u0) ERR_ZERO_VOTING_POWER) + (asserts! (> senderBalance u0) ERR_INSUFFICIENT_BALANCE) ;; proposal was not already executed (asserts! (is-none (contract-call? .aibtcdev-base-dao executed-at proposal)) ERR_PROPOSAL_ALREADY_EXECUTED) ;; proposal is still active From 564c8e9550d0bb3059e787f8058bfebaa8b14361 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 12:45:39 -0700 Subject: [PATCH 78/84] chore: whitespace --- contracts/dao/extensions/aibtc-action-proposals.clar | 1 - 1 file changed, 1 deletion(-) diff --git a/contracts/dao/extensions/aibtc-action-proposals.clar b/contracts/dao/extensions/aibtc-action-proposals.clar index 2018a9b7..ee9d5049 100644 --- a/contracts/dao/extensions/aibtc-action-proposals.clar +++ b/contracts/dao/extensions/aibtc-action-proposals.clar @@ -60,7 +60,6 @@ ;; data maps ;; - (define-map Proposals uint ;; proposal id { From 411823b824d90f34ebc658e1bbdf4efae13857bf Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 12:53:10 -0700 Subject: [PATCH 79/84] fix: update error code numbering Trying to make it a single 1000 range per contract so it's easy to know where the error came from. --- contracts/dao/extensions/aibtc-onchain-messaging.clar | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/dao/extensions/aibtc-onchain-messaging.clar b/contracts/dao/extensions/aibtc-onchain-messaging.clar index 1a482368..ea9a784c 100644 --- a/contracts/dao/extensions/aibtc-onchain-messaging.clar +++ b/contracts/dao/extensions/aibtc-onchain-messaging.clar @@ -9,8 +9,8 @@ ;; constants ;; -(define-constant INPUT_ERROR (err u400)) -(define-constant ERR_UNAUTHORIZED (err u2000)) +(define-constant INPUT_ERROR (err u4000)) +(define-constant ERR_UNAUTHORIZED (err u4001)) ;; public functions From 7cdbe07d3e92afc72fe549e4488a318cdbc32f51 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 12:56:43 -0700 Subject: [PATCH 80/84] chore: remove unused const --- contracts/dao/extensions/aibtc-payments-invoices.clar | 3 --- 1 file changed, 3 deletions(-) diff --git a/contracts/dao/extensions/aibtc-payments-invoices.clar b/contracts/dao/extensions/aibtc-payments-invoices.clar index 3a9ddc28..e9a66779 100644 --- a/contracts/dao/extensions/aibtc-payments-invoices.clar +++ b/contracts/dao/extensions/aibtc-payments-invoices.clar @@ -14,9 +14,6 @@ ;; initially scoped to service provider deploying a contract (define-constant SELF (as-contract tx-sender)) -;; math helpers (credit: ALEX) -(define-constant ONE_8 (pow u10 u8)) - ;; errors (define-constant ERR_UNAUTHORIZED (err u5000)) (define-constant ERR_INVALID_PARAMS (err u5001)) From 4b047f6b24c764d9a976772d2eb7b64bbde6afcd Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 13:02:32 -0700 Subject: [PATCH 81/84] fix: add trait for token-owner extension --- contracts/dao/extensions/aibtc-token-owner.clar | 1 + contracts/dao/traits/aibtcdev-dao-traits-v1.clar | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/contracts/dao/extensions/aibtc-token-owner.clar b/contracts/dao/extensions/aibtc-token-owner.clar index a314cbdb..a18fb6ca 100644 --- a/contracts/dao/extensions/aibtc-token-owner.clar +++ b/contracts/dao/extensions/aibtc-token-owner.clar @@ -5,6 +5,7 @@ ;; traits ;; (impl-trait .aibtcdev-dao-traits-v1.extension) +(impl-trait .aibtcdev-dao-traits-v1.token-owner) ;; constants ;; diff --git a/contracts/dao/traits/aibtcdev-dao-traits-v1.clar b/contracts/dao/traits/aibtcdev-dao-traits-v1.clar index a8d7bc0d..2ae9cae8 100644 --- a/contracts/dao/traits/aibtcdev-dao-traits-v1.clar +++ b/contracts/dao/traits/aibtcdev-dao-traits-v1.clar @@ -201,6 +201,17 @@ (conclude-proposal ( ) (response bool uint)) )) +(define-trait token-owner ( + ;; set the token URI + ;; @param value the new token URI + ;; @returns (response bool uint) + (set-token-uri ((string-utf8 256)) (response bool uint)) + ;; transfer ownership of the token + ;; @param new-owner the new owner of the token + ;; @returns (response bool uint) + (transfer-ownership (principal) (response bool uint)) +)) + (define-trait action ( ;; @param parameters encoded action parameters ;; @returns (response bool uint) From 2e64598f836a79bd4f319c90bc76a49aeccf5c7c Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 13:22:37 -0700 Subject: [PATCH 82/84] fix: add missing traits for ID, reorg traits alpha --- contracts/dao/extensions/aibtc-token-dex.clar | 1 + contracts/dao/extensions/aibtc-token.clar | 1 + .../dao/traits/aibtcdev-dao-traits-v1.clar | 122 ++++++++++-------- 3 files changed, 72 insertions(+), 52 deletions(-) diff --git a/contracts/dao/extensions/aibtc-token-dex.clar b/contracts/dao/extensions/aibtc-token-dex.clar index b0ab5dc9..786438a6 100644 --- a/contracts/dao/extensions/aibtc-token-dex.clar +++ b/contracts/dao/extensions/aibtc-token-dex.clar @@ -5,6 +5,7 @@ ;; @dev The deployer has no ownership privileges or control over the contract's operations. ;; @version 2.0 +(impl-trait .aibtcdev-dao-traits-v1.token-dex) ;; <%= it.token_dex_trait %> ;; Implement SIP 010 trait (use-trait sip-010-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) ;; <%= it.sip10_trait %> diff --git a/contracts/dao/extensions/aibtc-token.clar b/contracts/dao/extensions/aibtc-token.clar index 576b6bc4..b129b04f 100644 --- a/contracts/dao/extensions/aibtc-token.clar +++ b/contracts/dao/extensions/aibtc-token.clar @@ -3,6 +3,7 @@ ;; @hash <%= it.hash %> ;; @targetstx <%= it.target_stx %> +(impl-trait .aibtcdev-dao-traits-v1.token) ;; <%= it.token_trait %> ;; SIP-10 Trait (impl-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) diff --git a/contracts/dao/traits/aibtcdev-dao-traits-v1.clar b/contracts/dao/traits/aibtcdev-dao-traits-v1.clar index 2ae9cae8..055c2f46 100644 --- a/contracts/dao/traits/aibtcdev-dao-traits-v1.clar +++ b/contracts/dao/traits/aibtcdev-dao-traits-v1.clar @@ -19,6 +19,12 @@ ;; EXTENSION TRAITS +(define-trait action ( + ;; @param parameters encoded action parameters + ;; @returns (response bool uint) + (run ((buff 2048)) (response bool uint)) +)) + (define-trait action-proposals ( ;; set the protocol treasury contract ;; @param treasury the treasury contract principal @@ -81,6 +87,34 @@ (transfer (uint principal principal (optional (buff 34))) (response bool uint)) )) +(define-trait core-proposals ( + ;; set the protocol treasury contract + ;; @param treasury the treasury contract principal + ;; @returns (response bool uint) + (set-protocol-treasury () (response bool uint)) + ;; set the voting token contract + ;; @param token the token contract principal + ;; @returns (response bool uint) + (set-voting-token () (response bool uint)) + ;; create a new proposal + ;; @param proposal the proposal contract + ;; @param token the voting token contract + ;; @returns (response bool uint) + (create-proposal ( ) (response bool uint)) + ;; vote on an existing proposal + ;; @param proposal the proposal contract + ;; @param token the voting token contract + ;; @param vote true for yes, false for no + ;; @returns (response bool uint) + (vote-on-proposal ( bool) (response bool uint)) + ;; conclude a proposal after voting period + ;; @param proposal the proposal contract + ;; @param treasury the treasury contract + ;; @param token the voting token contract + ;; @returns (response bool uint) + (conclude-proposal ( ) (response bool uint)) +)) + (define-trait messaging ( ;; send a message on-chain (opt from DAO) ;; @param msg the message to send (up to 1MB) @@ -89,6 +123,17 @@ (send ((string-ascii 1048576) bool) (response bool uint)) )) +(define-trait invoices ( + ;; pay an invoice by ID + ;; @param invoice the ID of the invoice + ;; @returns (response uint uint) + (pay-invoice (uint (optional (buff 34))) (response uint uint)) + ;; pay an invoice by resource name + ;; @param name the name of the resource + ;; @returns (response uint uint) + (pay-invoice-by-resource-name ((string-utf8 50) (optional (buff 34))) (response uint uint)) +)) + (define-trait resources ( ;; set payment address for resource invoices ;; @param principal the new payment address @@ -110,15 +155,33 @@ (toggle-resource-by-name ((string-utf8 50)) (response bool uint)) )) -(define-trait invoices ( - ;; pay an invoice by ID - ;; @param invoice the ID of the invoice +(define-trait token-dex ( + ;; buy tokens from the dex + ;; @param token-trait the token contract + ;; @param stx-amount the amount of microSTX to spend ;; @returns (response uint uint) - (pay-invoice (uint (optional (buff 34))) (response uint uint)) - ;; pay an invoice by resource name - ;; @param name the name of the resource + (buy ( uint) (response uint uint)) + ;; sell tokens to the dex + ;; @param token-trait the token contract + ;; @param tokens-in the amount of tokens to sell ;; @returns (response uint uint) - (pay-invoice-by-resource-name ((string-utf8 50) (optional (buff 34))) (response uint uint)) + (sell ( uint) (response uint uint)) +)) + +(define-trait token-owner ( + ;; set the token URI + ;; @param value the new token URI + ;; @returns (response bool uint) + (set-token-uri ((string-utf8 256)) (response bool uint)) + ;; transfer ownership of the token + ;; @param new-owner the new owner of the token + ;; @returns (response bool uint) + (transfer-ownership (principal) (response bool uint)) +)) + +(define-trait token ( + ;; transfer funds (limited as we're just tagging this) + (transfer (uint principal principal (optional (buff 34))) (response bool uint)) )) (define-trait treasury ( @@ -172,48 +235,3 @@ ;; @returns (response bool uint) (revoke-delegate-stx () (response bool uint)) )) - -(define-trait core-proposals ( - ;; set the protocol treasury contract - ;; @param treasury the treasury contract principal - ;; @returns (response bool uint) - (set-protocol-treasury () (response bool uint)) - ;; set the voting token contract - ;; @param token the token contract principal - ;; @returns (response bool uint) - (set-voting-token () (response bool uint)) - ;; create a new proposal - ;; @param proposal the proposal contract - ;; @param token the voting token contract - ;; @returns (response bool uint) - (create-proposal ( ) (response bool uint)) - ;; vote on an existing proposal - ;; @param proposal the proposal contract - ;; @param token the voting token contract - ;; @param vote true for yes, false for no - ;; @returns (response bool uint) - (vote-on-proposal ( bool) (response bool uint)) - ;; conclude a proposal after voting period - ;; @param proposal the proposal contract - ;; @param treasury the treasury contract - ;; @param token the voting token contract - ;; @returns (response bool uint) - (conclude-proposal ( ) (response bool uint)) -)) - -(define-trait token-owner ( - ;; set the token URI - ;; @param value the new token URI - ;; @returns (response bool uint) - (set-token-uri ((string-utf8 256)) (response bool uint)) - ;; transfer ownership of the token - ;; @param new-owner the new owner of the token - ;; @returns (response bool uint) - (transfer-ownership (principal) (response bool uint)) -)) - -(define-trait action ( - ;; @param parameters encoded action parameters - ;; @returns (response bool uint) - (run ((buff 2048)) (response bool uint)) -)) \ No newline at end of file From 4b824693a5173dca04ebc42f2df4cbf7e160e811 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 13:41:55 -0700 Subject: [PATCH 83/84] fix: simplify allocation function, change split --- contracts/dao/extensions/aibtc-token.clar | 26 ++++++++--------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/contracts/dao/extensions/aibtc-token.clar b/contracts/dao/extensions/aibtc-token.clar index b129b04f..e125e019 100644 --- a/contracts/dao/extensions/aibtc-token.clar +++ b/contracts/dao/extensions/aibtc-token.clar @@ -107,21 +107,13 @@ ) (begin - ;; Define the total supply - (let ((total-supply u21000000)) ;; <%= it.token_max_supply %> - - ;; Calculate 40% and 60% of the total supply using inline division - (let ((dex-allocation (/ (* total-supply u40) u100)) ;; Inline division for 40% - (treasury-allocation (/ (* total-supply u60) u100))) ;; Inline division for 60% - - ;; Send STX fees - (try! (send-stx 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 u500000)) ;; <%= it.stxctiy_token_deployment_fee_address %> - - ;; Mint tokens to the dex_contract (40%) - (try! (ft-mint? SYMBOL dex-allocation .aibtc-token-dex)) ;; <%= it.token_symbol %> <%= it.dex_contract %> - - ;; Mint tokens to the treasury (60%) - (try! (ft-mint? SYMBOL treasury-allocation .aibtc-treasury)) ;; <%= it.token_symbol %> <%= it.treasury_contract %> - ) - ) + ;; Send STX fees + (try! (send-stx 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 u500000)) ;; <%= it.stxcity_token_deployment_fee_address %> + + ;; mint tokens to the dex_contract (20%) + (try! (ft-mint? SYMBOL (/ (* MAXSUPPLY u20) u100) .aibtc-token-dex)) ;; <%= it.token_symbol %> <%= it.dex_contract %> + + ;; mint tokens to the treasury (80%) + (try! (ft-mint? SYMBOL (/ (* MAXSUPPLY u80) u100) .aibtc-treasury)) ;; <%= it.token_symbol %> <%= it.treasury_contract %> + ) \ No newline at end of file From 47d6a99f9ca720e88d467d8a96d29f8ea8844c7c Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 10 Jan 2025 13:49:50 -0700 Subject: [PATCH 84/84] chore: missed the save button --- contracts/dao/extensions/aibtc-token.clar | 3 --- 1 file changed, 3 deletions(-) diff --git a/contracts/dao/extensions/aibtc-token.clar b/contracts/dao/extensions/aibtc-token.clar index e125e019..7e7fb227 100644 --- a/contracts/dao/extensions/aibtc-token.clar +++ b/contracts/dao/extensions/aibtc-token.clar @@ -109,11 +109,8 @@ (begin ;; Send STX fees (try! (send-stx 'ST295MNE41DC74QYCPRS8N37YYMC06N6Q3VQDZ6G1 u500000)) ;; <%= it.stxcity_token_deployment_fee_address %> - ;; mint tokens to the dex_contract (20%) (try! (ft-mint? SYMBOL (/ (* MAXSUPPLY u20) u100) .aibtc-token-dex)) ;; <%= it.token_symbol %> <%= it.dex_contract %> - ;; mint tokens to the treasury (80%) (try! (ft-mint? SYMBOL (/ (* MAXSUPPLY u80) u100) .aibtc-treasury)) ;; <%= it.token_symbol %> <%= it.treasury_contract %> - ) \ No newline at end of file