diff --git a/aibtc-dao-consistency-report.md b/aibtc-dao-consistency-report.md new file mode 100644 index 0000000..68a2130 --- /dev/null +++ b/aibtc-dao-consistency-report.md @@ -0,0 +1,130 @@ +# AIBTC DAO Platform Consistency Analysis + +## 1. Error Code Definitions + +### Inconsistency: +- Some contracts use `ERR_` prefix (most common) +- Some use full words like `INPUT_ERROR` (in `aibtc-onchain-messaging.clar`) +- Some use shorter forms like `ERR_UNAUTHORIZED` vs `ERR_NOT_DAO_OR_EXTENSION` + +### Recommendation: +Standardize all error codes with the `ERR_` prefix followed by a descriptive name in uppercase with underscores. + +## 2. Print Event Notifications + +### Inconsistency: +- Most contracts use a structured format with `notification` and `payload` fields +- The payload structure varies between contracts +- Some print events include more fields than others for similar actions + +### Recommendation: +Standardize the print event structure across all contracts: +``` +(print { + notification: "[action-name]", + payload: { + // Consistent set of fields based on action type + } +}) +``` + +## 3. Function Naming Conventions + +### Inconsistency: +- Some functions use hyphenated names (`set-payment-address`) +- Similar functions have different names across contracts (e.g., `toggle-resource` vs `allow-asset`) +- Some functions have inconsistent verb usage (e.g., `get-` vs direct noun) + +### Recommendation: +Standardize function naming with consistent verbs: +- Use `get-` prefix for all read-only functions +- Use `set-` prefix for state-changing functions that update a single value +- Use consistent action verbs (`add-`, `remove-`, `toggle-`, etc.) + +## 4. Variable Naming + +### Inconsistency: +- Some variables use camelCase (`lastWithdrawalBlock`) +- Others use kebab-case in function parameters +- Inconsistent abbreviations (e.g., `pmt` vs `payment`) + +### Recommendation: +Standardize on kebab-case for all function parameters and consistent abbreviations throughout. + +## 5. Constants Naming + +### Inconsistency: +- Some constants use `CFG_` prefix (`CFG_PAYMENT_TOKEN`) +- Others use descriptive names without prefixes (`VOTING_DELAY`) +- Some use `SELF` while others use `TREASURY` for contract principal + +### Recommendation: +Standardize constant naming: +- Use all uppercase with underscores +- Use consistent prefixes for similar types of constants +- Standardize on `SELF` for the contract principal reference + +## 6. Data Structure Consistency + +### Inconsistency: +- Different naming conventions for similar data structures across contracts +- Inconsistent field names in similar data structures +- Varying approaches to optional fields + +### Recommendation: +Create consistent data structure templates for common concepts (proposals, resources, etc.) and use them across all contracts. + +## 7. Specific Inconsistencies Found + +### Payment Processor Contracts +- Three nearly identical implementations (`aibtc-payment-processor-dao.clar`, `aibtc-payment-processor-stx.clar`, `aibtc-payment-processor-sbtc.clar`) with minor differences +- Inconsistent handling of payment methods + +### Timed Vault Contracts +- Similar inconsistencies between `aibtc-timed-vault-dao.clar`, `aibtc-timed-vault-stx.clar`, and `aibtc-timed-vault-sbtc.clar` +- Different default values for similar concepts + +### Proposal Contracts +- Inconsistent approach between `aibtc-action-proposals-v2.clar` and `aibtc-core-proposals-v2.clar` +- Different voting parameter names and structures + +### Treasury Contract +- Inconsistent approach to asset management compared to other resource management + +## 8. Documentation Style + +### Inconsistency: +- Some contracts have detailed headers with version, title, summary +- Others have minimal or no documentation +- Inconsistent inline commenting style + +### Recommendation: +Standardize documentation with: +- Consistent header format for all contracts +- Standard sections for traits, constants, data vars, etc. +- Consistent inline commenting style + +## 9. Error Handling Patterns + +### Inconsistency: +- Some functions use `try!` for authorization checks +- Others use `asserts!` directly +- Inconsistent error propagation + +### Recommendation: +Standardize error handling patterns: +- Use `try!` consistently for authorization and external calls +- Use `asserts!` for validation checks +- Consistent approach to error propagation + +## 10. Authorization Checks + +### Inconsistency: +- Some contracts check `is-dao-or-extension` at the beginning +- Others perform checks later in the function +- Inconsistent implementation of the check itself + +### Recommendation: +Standardize authorization checks: +- Always perform them at the beginning of functions +- Use consistent implementation across all contracts diff --git a/contracts/dao/extensions/aibtc-action-proposals-v2.clar b/contracts/dao/extensions/aibtc-action-proposals-v2.clar index 6904221..df3a9e5 100644 --- a/contracts/dao/extensions/aibtc-action-proposals-v2.clar +++ b/contracts/dao/extensions/aibtc-action-proposals-v2.clar @@ -55,7 +55,7 @@ (define-data-var concludedProposalCount uint u0) ;; total number of concluded proposals (define-data-var executedProposalCount uint u0) ;; total number of executed proposals (define-data-var lastProposalCreated uint u0) ;; block height of last proposal created -(define-data-var proposalBond uint u100000000000) ;; proposal bond amount, starts at 1000 DAO tokens (8 decimals) +(define-data-var proposalBond uint u250000000000) ;; action proposal bond, default 2,500 DAO tokens w/ 8 decimals ;; data maps ;; @@ -107,8 +107,8 @@ notification: "set-proposal-bond", payload: { amount: amount, - caller: contract-caller, - sender: tx-sender + contractCaller: contract-caller, + txSender: tx-sender } }) ;; set the proposal bond amount @@ -146,13 +146,17 @@ proposalId: newId, action: actionContract, parameters: parameters, - caller: contract-caller, + contractCaller: contract-caller, creator: tx-sender, bond: bondAmount, createdAt: createdAt, startBlock: startBlock, endBlock: endBlock, liquidTokens: liquidTokens, + votingPeriod: VOTING_PERIOD, + votingQuorum: VOTING_QUORUM, + votingThreshold: VOTING_THRESHOLD, + votingDelay: VOTING_DELAY } }) ;; create the proposal @@ -204,9 +208,10 @@ notification: "vote-on-proposal", payload: { proposalId: proposalId, - caller: contract-caller, + contractCaller: contract-caller, voter: tx-sender, - amount: senderBalance + amount: senderBalance, + vote: vote } }) ;; update the proposal record @@ -256,7 +261,7 @@ (print { notification: "conclude-proposal", payload: { - caller: contract-caller, + contractCaller: contract-caller, concludedBy: tx-sender, bond: (get bond proposalRecord), proposalId: proposalId, diff --git a/contracts/dao/extensions/aibtc-core-proposals-v2.clar b/contracts/dao/extensions/aibtc-core-proposals-v2.clar index abade68..90a1936 100644 --- a/contracts/dao/extensions/aibtc-core-proposals-v2.clar +++ b/contracts/dao/extensions/aibtc-core-proposals-v2.clar @@ -55,7 +55,7 @@ (define-data-var concludedProposalCount uint u0) ;; total number of concluded proposals (define-data-var executedProposalCount uint u0) ;; total number of executed proposals (define-data-var lastProposalCreated uint u0) ;; block height of last proposal created -(define-data-var proposalBond uint u100000000000) ;; proposal bond amount, starts at 1000 DAO tokens (8 decimals) +(define-data-var proposalBond uint u25000000000000) ;; core proposal bond, default 250,000 DAO tokens w/ 8 decimals ;; data maps ;; (define-map Proposals @@ -104,8 +104,8 @@ notification: "set-proposal-bond", payload: { amount: amount, - caller: contract-caller, - sender: tx-sender + contractCaller: contract-caller, + txSender: tx-sender } }) ;; set the proposal bond amount @@ -139,13 +139,17 @@ notification: "create-proposal", payload: { proposal: proposalContract, - caller: contract-caller, + contractCaller: contract-caller, creator: tx-sender, bond: bondAmount, createdAt: createdAt, startBlock: startBlock, endBlock: endBlock, liquidTokens: liquidTokens, + votingPeriod: VOTING_PERIOD, + votingQuorum: VOTING_QUORUM, + votingThreshold: VOTING_THRESHOLD, + votingDelay: VOTING_DELAY } }) ;; create the proposal @@ -195,9 +199,10 @@ notification: "vote-on-proposal", payload: { proposal: proposalContract, - caller: contract-caller, + contractCaller: contract-caller, voter: tx-sender, - amount: senderBalance + amount: senderBalance, + vote: vote } }) ;; update the proposal record @@ -244,7 +249,7 @@ (print { notification: "conclude-proposal", payload: { - caller: contract-caller, + contractCaller: contract-caller, concludedBy: tx-sender, bond: (get bond proposalRecord), proposal: proposalContract, diff --git a/contracts/dao/extensions/aibtc-dao-charter.clar b/contracts/dao/extensions/aibtc-dao-charter.clar index 9526a49..5ea9179 100644 --- a/contracts/dao/extensions/aibtc-dao-charter.clar +++ b/contracts/dao/extensions/aibtc-dao-charter.clar @@ -69,10 +69,11 @@ payload: { burnHeight: burn-block-height, createdAt: stacks-block-height, - caller: contract-caller, - sender: tx-sender, + contractCaller: contract-caller, + txSender: tx-sender, dao: SELF, charter: charter, + previousCharter: (var-get daoCharter), inscriptionId: inscriptionId, version: newVersion } diff --git a/contracts/dao/extensions/aibtc-onchain-messaging.clar b/contracts/dao/extensions/aibtc-onchain-messaging.clar index 263eeef..9cf79bb 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 u4000)) -(define-constant ERR_UNAUTHORIZED (err u4001)) +(define-constant ERR_INVALID_INPUT (err u4000)) +(define-constant ERR_NOT_DAO_OR_EXTENSION (err u4001)) ;; public functions @@ -21,17 +21,18 @@ (define-public (send (msg (string-ascii 1048576)) (isFromDao bool)) (begin (and isFromDao (try! (is-dao-or-extension))) - (asserts! (> (len msg) u0) INPUT_ERROR) + (asserts! (> (len msg) u0) ERR_INVALID_INPUT) ;; print the message as the first event (print msg) ;; print the envelope info for the message (print { notification: "send", payload: { - caller: contract-caller, + contractCaller: contract-caller, height: stacks-block-height, isFromDao: isFromDao, - sender: tx-sender, + txSender: tx-sender, + messageLength: (len msg) } }) (ok true) @@ -43,6 +44,6 @@ (define-private (is-dao-or-extension) (ok (asserts! (or (is-eq tx-sender .aibtc-base-dao) - (contract-call? .aibtc-base-dao is-extension contract-caller)) ERR_UNAUTHORIZED + (contract-call? .aibtc-base-dao is-extension contract-caller)) ERR_NOT_DAO_OR_EXTENSION )) ) diff --git a/contracts/dao/extensions/aibtc-payment-processor-dao.clar b/contracts/dao/extensions/aibtc-payment-processor-dao.clar index 4cb6eb1..381de75 100644 --- a/contracts/dao/extensions/aibtc-payment-processor-dao.clar +++ b/contracts/dao/extensions/aibtc-payment-processor-dao.clar @@ -129,7 +129,7 @@ contractCaller: contract-caller, oldAddress: (var-get paymentAddress), newAddress: newAddress, - txSender: tx-sender, + txSender: tx-sender } }) ;; set new payment address diff --git a/contracts/dao/extensions/aibtc-timed-vault-dao.clar b/contracts/dao/extensions/aibtc-timed-vault-dao.clar index 5c760bf..668f078 100644 --- a/contracts/dao/extensions/aibtc-timed-vault-dao.clar +++ b/contracts/dao/extensions/aibtc-timed-vault-dao.clar @@ -79,8 +79,9 @@ notification: "deposit", payload: { amount: amount, - caller: contract-caller, - recipient: SELF + contractCaller: contract-caller, + recipient: SELF, + txSender: tx-sender } }) (contract-call? .aibtc-token transfer amount tx-sender SELF none) @@ -100,8 +101,12 @@ notification: "withdraw", payload: { amount: (var-get withdrawalAmount), - caller: contract-caller, - recipient: (var-get accountHolder) + contractCaller: contract-caller, + recipient: (var-get accountHolder), + txSender: tx-sender, + withdrawalPeriod: (var-get withdrawalPeriod), + lastWithdrawalBlock: (var-get lastWithdrawalBlock), + newLastWithdrawalBlock: burn-block-height } }) (as-contract (contract-call? .aibtc-token transfer (var-get withdrawalAmount) SELF (var-get accountHolder) none)) diff --git a/contracts/dao/extensions/aibtc-timed-vault-sbtc.clar b/contracts/dao/extensions/aibtc-timed-vault-sbtc.clar index 87a80aa..4606cce 100644 --- a/contracts/dao/extensions/aibtc-timed-vault-sbtc.clar +++ b/contracts/dao/extensions/aibtc-timed-vault-sbtc.clar @@ -79,8 +79,9 @@ notification: "deposit", payload: { amount: amount, - caller: contract-caller, - recipient: SELF + contractCaller: contract-caller, + recipient: SELF, + txSender: tx-sender } }) (contract-call? 'STV9K21TBFAK4KNRJXF5DFP8N7W46G4V9RJ5XDY2.sbtc-token transfer amount tx-sender SELF none) @@ -100,8 +101,12 @@ notification: "withdraw", payload: { amount: (var-get withdrawalAmount), - caller: contract-caller, - recipient: (var-get accountHolder) + contractCaller: contract-caller, + recipient: (var-get accountHolder), + txSender: tx-sender, + withdrawalPeriod: (var-get withdrawalPeriod), + lastWithdrawalBlock: (var-get lastWithdrawalBlock), + newLastWithdrawalBlock: burn-block-height } }) (as-contract (contract-call? 'STV9K21TBFAK4KNRJXF5DFP8N7W46G4V9RJ5XDY2.sbtc-token transfer (var-get withdrawalAmount) SELF (var-get accountHolder) none)) diff --git a/contracts/dao/extensions/aibtc-timed-vault-stx.clar b/contracts/dao/extensions/aibtc-timed-vault-stx.clar index 0fd4035..4d6e1a7 100644 --- a/contracts/dao/extensions/aibtc-timed-vault-stx.clar +++ b/contracts/dao/extensions/aibtc-timed-vault-stx.clar @@ -75,8 +75,9 @@ notification: "deposit", payload: { amount: amount, - caller: contract-caller, - recipient: SELF + contractCaller: contract-caller, + recipient: SELF, + txSender: tx-sender } }) (stx-transfer? amount contract-caller SELF) @@ -96,8 +97,12 @@ notification: "withdraw", payload: { amount: (var-get withdrawalAmount), - caller: contract-caller, - recipient: (var-get accountHolder) + contractCaller: contract-caller, + recipient: (var-get accountHolder), + txSender: tx-sender, + withdrawalPeriod: (var-get withdrawalPeriod), + lastWithdrawalBlock: (var-get lastWithdrawalBlock), + newLastWithdrawalBlock: burn-block-height } }) (as-contract (stx-transfer? (var-get withdrawalAmount) SELF (var-get accountHolder))) diff --git a/contracts/dao/extensions/aibtc-token-owner.clar b/contracts/dao/extensions/aibtc-token-owner.clar index 2ebc152..15a582d 100644 --- a/contracts/dao/extensions/aibtc-token-owner.clar +++ b/contracts/dao/extensions/aibtc-token-owner.clar @@ -10,7 +10,7 @@ ;; constants ;; -(define-constant ERR_UNAUTHORIZED (err u7000)) +(define-constant ERR_NOT_DAO_OR_EXTENSION (err u7000)) ;; public functions ;; @@ -25,6 +25,15 @@ (try! (is-dao-or-extension)) ;; update token uri (try! (as-contract (contract-call? .aibtc-token set-token-uri value))) + ;; print event + (print { + notification: "set-token-uri", + payload: { + contractCaller: contract-caller, + txSender: tx-sender, + value: value + } + }) (ok true) ) ) @@ -36,6 +45,15 @@ (try! (is-dao-or-extension)) ;; transfer ownership (try! (as-contract (contract-call? .aibtc-token set-contract-owner new-owner))) + ;; print event + (print { + notification: "transfer-ownership", + payload: { + contractCaller: contract-caller, + txSender: tx-sender, + newOwner: new-owner + } + }) (ok true) ) ) @@ -45,6 +63,6 @@ (define-private (is-dao-or-extension) (ok (asserts! (or (is-eq tx-sender .aibtc-base-dao) - (contract-call? .aibtc-base-dao is-extension contract-caller)) ERR_UNAUTHORIZED + (contract-call? .aibtc-base-dao is-extension contract-caller)) ERR_NOT_DAO_OR_EXTENSION )) ) diff --git a/contracts/dao/extensions/aibtc-treasury.clar b/contracts/dao/extensions/aibtc-treasury.clar index 8b7ef17..8a08c3f 100644 --- a/contracts/dao/extensions/aibtc-treasury.clar +++ b/contracts/dao/extensions/aibtc-treasury.clar @@ -13,7 +13,7 @@ ;; constants ;; -(define-constant ERR_UNAUTHORIZED (err u6000)) +(define-constant ERR_NOT_DAO_OR_EXTENSION (err u6000)) (define-constant ERR_UNKNOWN_ASSSET (err u6001)) (define-constant TREASURY (as-contract tx-sender)) @@ -37,7 +37,9 @@ notification: "allow-asset", payload: { enabled: enabled, - token: token + token: token, + contractCaller: contract-caller, + txSender: tx-sender } }) (ok (map-set AllowedAssets token enabled)) @@ -60,9 +62,10 @@ notification: "deposit-stx", payload: { amount: amount, - caller: contract-caller, + contractCaller: contract-caller, recipient: TREASURY, - sender: tx-sender + txSender: tx-sender, + balance: (stx-get-balance TREASURY) } }) (stx-transfer? amount tx-sender TREASURY) @@ -78,9 +81,9 @@ payload: { amount: amount, assetContract: (contract-of ft), - caller: contract-caller, + contractCaller: contract-caller, recipient: TREASURY, - sender: tx-sender + txSender: tx-sender } }) (contract-call? ft transfer amount tx-sender TREASURY none) @@ -95,9 +98,9 @@ notification: "deposit-nft", payload: { assetContract: (contract-of nft), - caller: contract-caller, + contractCaller: contract-caller, recipient: TREASURY, - sender: tx-sender, + txSender: tx-sender, tokenId: id } }) @@ -113,9 +116,10 @@ notification: "withdraw-stx", payload: { amount: amount, - caller: contract-caller, + contractCaller: contract-caller, recipient: recipient, - sender: tx-sender + txSender: tx-sender, + balance: (stx-get-balance TREASURY) } }) (as-contract (stx-transfer? amount TREASURY recipient)) @@ -131,9 +135,10 @@ notification: "withdraw-ft", payload: { assetContract: (contract-of ft), - caller: contract-caller, + contractCaller: contract-caller, recipient: recipient, - sender: tx-sender + txSender: tx-sender, + amount: amount } }) (as-contract (contract-call? ft transfer amount TREASURY recipient none)) @@ -149,10 +154,11 @@ notification: "withdraw-nft", payload: { assetContract: (contract-of nft), - caller: contract-caller, + contractCaller: contract-caller, recipient: recipient, - sender: tx-sender, - tokenId: id + txSender: tx-sender, + tokenId: id, + amount: u1 } }) (as-contract (contract-call? nft transfer id TREASURY recipient)) @@ -167,9 +173,9 @@ notification: "delegate-stx", payload: { amount: maxAmount, - caller: contract-caller, + contractCaller: contract-caller, delegate: to, - sender: tx-sender + txSender: tx-sender } }) (match (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-4 delegate-stx maxAmount to none none)) @@ -186,8 +192,8 @@ (print { notification: "revoke-delegate-stx", payload: { - caller: contract-caller, - sender: tx-sender + contractCaller: contract-caller, + txSender: tx-sender } }) (match (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-4 revoke-delegate-stx)) @@ -213,7 +219,7 @@ (define-private (is-dao-or-extension) (ok (asserts! (or (is-eq tx-sender .aibtc-base-dao) - (contract-call? .aibtc-base-dao is-extension contract-caller)) ERR_UNAUTHORIZED + (contract-call? .aibtc-base-dao is-extension contract-caller)) ERR_NOT_DAO_OR_EXTENSION )) ) @@ -223,7 +229,9 @@ notification: "allow-asset", payload: { enabled: (get enabled item), - token: (get token item) + token: (get token item), + contractCaller: contract-caller, + txSender: tx-sender } }) (map-set AllowedAssets (get token item) (get enabled item)) diff --git a/contracts/dao/token/aibtc-token.clar b/contracts/dao/token/aibtc-token.clar index b49624e..34a09c3 100644 --- a/contracts/dao/token/aibtc-token.clar +++ b/contracts/dao/token/aibtc-token.clar @@ -7,7 +7,7 @@ (define-constant ERR-NOT-AUTHORIZED u401) (define-constant ERR-NOT-OWNER u402) -(define-fungible-token SYMBOL MAX) ;; <%= it.token_symbol %> +(define-fungible-token SYMBOL-AIBTC-DAO MAX) ;; <%= it.token_symbol %> (define-constant MAX u100000000000000000) ;; <%= it.token_max_supply %> (define-data-var contract-owner principal .aibtc-token-owner) ;; <%= it.token_owner %> (define-data-var token-uri (optional (string-utf8 256)) (some u"<%= it.token_uri %>")) @@ -17,7 +17,7 @@ (begin (asserts! (is-eq tx-sender sender) (err ERR-NOT-AUTHORIZED)) (and (is-some memo) (is-some (print memo))) - (ft-transfer? SYMBOL amount sender recipient) ;; <%= it.token_symbol %> + (ft-transfer? SYMBOL-AIBTC-DAO amount sender recipient) ;; <%= it.token_symbol %> ) ) @@ -37,15 +37,15 @@ ) (define-read-only (get-balance (account principal)) - (ok (ft-get-balance SYMBOL account)) ;; <%= it.token_symbol %> + (ok (ft-get-balance SYMBOL-AIBTC-DAO account)) ;; <%= it.token_symbol %> ) (define-read-only (get-name) - (ok "NAME") ;; <%= it.token_name %> + (ok "SYMBOL-AIBTC-DAO") ;; <%= it.token_name %> ) (define-read-only (get-symbol) - (ok "SYMBOL") ;; <%= it.token_symbol %> + (ok "SYMBOL-AIBTC-DAO") ;; <%= it.token_symbol %> ) (define-read-only (get-decimals) @@ -53,7 +53,7 @@ ) (define-read-only (get-total-supply) - (ok (ft-get-supply SYMBOL)) ;; <%= it.token_symbol %> + (ok (ft-get-supply SYMBOL-AIBTC-DAO)) ;; <%= it.token_symbol %> ) (define-read-only (get-token-uri) @@ -92,14 +92,14 @@ (begin ;; ft distribution - (try! (ft-mint? SYMBOL (/ (* MAX u80) u100) .aibtc-treasury)) ;; 80% treasury SPVMS254T8Q0RXQP95Y01T7KBHZV91X88CDK48QH - (try! (ft-mint? SYMBOL (/ (* MAX u16) u100) .aibtc-token-dex)) ;; 16% dex SPVMS254T8Q0RXQP95Y01T7KBHZV91X88CDK48QH - (try! (ft-mint? SYMBOL (/ (* MAX u4) u100) .aibtc-pre-dex)) ;; 4% pre-launch SPVMS254T8Q0RXQP95Y01T7KBHZV91X88CDK48QH + (try! (ft-mint? SYMBOL-AIBTC-DAO (/ (* MAX u80) u100) .aibtc-treasury)) ;; 80% treasury SPVMS254T8Q0RXQP95Y01T7KBHZV91X88CDK48QH + (try! (ft-mint? SYMBOL-AIBTC-DAO (/ (* MAX u16) u100) .aibtc-token-dex)) ;; 16% dex SPVMS254T8Q0RXQP95Y01T7KBHZV91X88CDK48QH + (try! (ft-mint? SYMBOL-AIBTC-DAO (/ (* MAX u4) u100) .aibtc-pre-dex)) ;; 4% pre-launch SPVMS254T8Q0RXQP95Y01T7KBHZV91X88CDK48QH (print { type: "faktory-trait-v1", name: "NAME", ;; <%= it.token_name %> - symbol: "SYMBOL", ;; <%= it.token_symbol %> + symbol: "SYMBOL-AIBTC-DAO", ;; <%= it.token_symbol %> token-uri: u"<%= it.token_uri %>", tokenContract: (as-contract tx-sender), supply: MAX, diff --git a/tests/aibtc-user-agent-account.test.ts b/tests/aibtc-user-agent-account.test.ts index 00bd751..984e616 100644 --- a/tests/aibtc-user-agent-account.test.ts +++ b/tests/aibtc-user-agent-account.test.ts @@ -64,7 +64,7 @@ function setupAccount(sender: string, satsAmount: number = 1000000) { // get our balances from the assets map const balancesMap = simnet.getAssetsMap(); dbgLog(balancesMap); - const aibtcKey = ".aibtc-token.SYMBOL"; + const aibtcKey = ".aibtc-token.SYMBOL-AIBTC-DAO"; const sbtcKey = ".sbtc-token.sbtc-token"; const stxKey = "STX"; const deployerBalances = { @@ -1556,7 +1556,7 @@ describe(`public functions: ${contractName}`, () => { // get our balances from the assets map const balancesMap = simnet.getAssetsMap(); dbgLog(balancesMap); - const aibtcKey = ".aibtc-token.SYMBOL"; + const aibtcKey = ".aibtc-token.SYMBOL-AIBTC-DAO"; const sbtcKey = ".sbtc-token.sbtc-token"; const stxKey = "STX"; const accountBalances = { diff --git a/tests/dao-types.ts b/tests/dao-types.ts index 90cdf2a..5ac10bb 100644 --- a/tests/dao-types.ts +++ b/tests/dao-types.ts @@ -133,7 +133,7 @@ export type VoteSettings = { votingPeriod: number; votingQuorum: number; votingThreshold: number; - votingBond: number; + votingBond: bigint; }; type VotableContracts = diff --git a/tests/dao/extensions/aibtc-core-proposals-v2.test.ts b/tests/dao/extensions/aibtc-core-proposals-v2.test.ts index 0317f58..48d0d69 100644 --- a/tests/dao/extensions/aibtc-core-proposals-v2.test.ts +++ b/tests/dao/extensions/aibtc-core-proposals-v2.test.ts @@ -50,6 +50,9 @@ const ErrCode = CoreProposalV2ErrCode; // generic context for creating proposals const memoContext = "Can pass up to 1024 characters for additional context."; +// default price for getting dao tokens from dex +const defaultPriceInSbtc = 100000; // 0.001 sbtc + // helper for getting start block for proposals const getProposalStartBlock = (burnBlockHeight: number): number => { return burnBlockHeight + coreProposalV2VoteSettings.votingDelay; @@ -206,7 +209,7 @@ describe(`public functions: ${ContractType.DAO_CORE_PROPOSALS_V2}`, () => { tokenContractAddress, tokenDexContractAddress, deployer, - 1000 + defaultPriceInSbtc ); expect(daoTokensReceipt.result).toBeOk(Cl.bool(true)); // construct DAO @@ -237,7 +240,7 @@ describe(`public functions: ${ContractType.DAO_CORE_PROPOSALS_V2}`, () => { tokenContractAddress, tokenDexContractAddress, deployer, - 1000 + defaultPriceInSbtc ); expect(daoTokensReceipt.result).toBeOk(Cl.bool(true)); // construct DAO @@ -325,7 +328,7 @@ describe(`public functions: ${ContractType.DAO_CORE_PROPOSALS_V2}`, () => { tokenContractAddress, tokenDexContractAddress, deployer, - 1000 + defaultPriceInSbtc ); expect(daoTokensReceipt.result).toBeOk(Cl.bool(true)); // construct DAO @@ -401,7 +404,7 @@ describe(`public functions: ${ContractType.DAO_CORE_PROPOSALS_V2}`, () => { tokenContractAddress, tokenDexContractAddress, deployer, - 1000 + defaultPriceInSbtc ); expect(daoTokensReceipt.result).toBeOk(Cl.bool(true)); // construct DAO @@ -440,7 +443,7 @@ describe(`public functions: ${ContractType.DAO_CORE_PROPOSALS_V2}`, () => { tokenContractAddress, tokenDexContractAddress, deployer, - 1000 + defaultPriceInSbtc ); expect(daoTokensReceipt.result).toBeOk(Cl.bool(true)); // construct DAO @@ -484,7 +487,7 @@ describe(`public functions: ${ContractType.DAO_CORE_PROPOSALS_V2}`, () => { tokenContractAddress, tokenDexContractAddress, deployer, - 1000 + defaultPriceInSbtc ); expect(daoTokensReceipt.result).toBeOk(Cl.bool(true)); // construct DAO @@ -587,7 +590,7 @@ describe(`public functions: ${ContractType.DAO_CORE_PROPOSALS_V2}`, () => { tokenContractAddress, tokenDexContractAddress, deployer, - 1000 + defaultPriceInSbtc ); expect(daoTokensReceipt.result).toBeOk(Cl.bool(true)); // construct DAO @@ -628,7 +631,7 @@ describe(`public functions: ${ContractType.DAO_CORE_PROPOSALS_V2}`, () => { tokenContractAddress, tokenDexContractAddress, deployer, - 1000 + defaultPriceInSbtc ); expect(daoTokensReceipt.result).toBeOk(Cl.bool(true)); // construct DAO @@ -859,7 +862,7 @@ describe(`read-only functions: ${ContractType.DAO_CORE_PROPOSALS_V2}`, () => { tokenContractAddress, tokenDexContractAddress, deployer, - 1000 + defaultPriceInSbtc ); expect(daoTokensReceipt.result).toBeOk(Cl.bool(true)); // construct DAO @@ -953,7 +956,7 @@ describe(`read-only functions: ${ContractType.DAO_CORE_PROPOSALS_V2}`, () => { tokenContractAddress, tokenDexContractAddress, deployer, - 1000 + defaultPriceInSbtc ); expect(daoTokensReceipt.result).toBeOk(Cl.bool(true)); // get dao tokens for address1, increases liquid tokens @@ -1064,7 +1067,7 @@ describe(`read-only functions: ${ContractType.DAO_CORE_PROPOSALS_V2}`, () => { tokenContractAddress, tokenDexContractAddress, deployer, - 1000 + defaultPriceInSbtc ); expect(daoTokensReceipt.result).toBeOk(Cl.bool(true)); @@ -1245,7 +1248,7 @@ describe(`read-only functions: ${ContractType.DAO_CORE_PROPOSALS_V2}`, () => { tokenContractAddress, tokenDexContractAddress, deployer, - 1000 + defaultPriceInSbtc ); expect(daoTokensReceipt.result).toBeOk(Cl.bool(true)); dbgLog(simnet.blockHeight, { titleBefore: "after dao tokens receipt" }); @@ -1393,7 +1396,7 @@ describe(`read-only functions: ${ContractType.DAO_CORE_PROPOSALS_V2}`, () => { tokenContractAddress, tokenDexContractAddress, deployer, - 10000 + defaultPriceInSbtc ).result; expect(daoTokensResult).toBeOk(Cl.bool(true)); // arrange part 2 diff --git a/tests/dao/extensions/aibtc-onchain-messaging.test.ts b/tests/dao/extensions/aibtc-onchain-messaging.test.ts index 53a617e..cb1e97d 100644 --- a/tests/dao/extensions/aibtc-onchain-messaging.test.ts +++ b/tests/dao/extensions/aibtc-onchain-messaging.test.ts @@ -47,7 +47,7 @@ describe(`extension: ${ContractType.DAO_MESSAGING}`, () => { [Cl.stringAscii(message), Cl.bool(true)], address1 ); - expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_UNAUTHORIZED)); + expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_NOT_DAO_OR_EXTENSION)); }); it("send() succeeds if called by a DAO proposal with isFromDao true", () => { diff --git a/tests/dao/extensions/aibtc-treasury.test.ts b/tests/dao/extensions/aibtc-treasury.test.ts index 9261d20..fc64ba5 100644 --- a/tests/dao/extensions/aibtc-treasury.test.ts +++ b/tests/dao/extensions/aibtc-treasury.test.ts @@ -40,7 +40,7 @@ describe(`extension: ${contractName}`, () => { ); // Assert - expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_UNAUTHORIZED)); + expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_NOT_DAO_OR_EXTENSION)); }); it("allow-assets() fails if caller is not DAO or extension", () => { @@ -68,7 +68,7 @@ describe(`extension: ${contractName}`, () => { ); // Assert - expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_UNAUTHORIZED)); + expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_NOT_DAO_OR_EXTENSION)); }); it("withdraw-stx() fails if caller is not DAO or extension", () => { @@ -85,7 +85,7 @@ describe(`extension: ${contractName}`, () => { ); // Assert - expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_UNAUTHORIZED)); + expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_NOT_DAO_OR_EXTENSION)); }); it("withdraw-ft() fails if caller is not DAO or extension", () => { @@ -106,7 +106,7 @@ describe(`extension: ${contractName}`, () => { ); // Assert - expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_UNAUTHORIZED)); + expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_NOT_DAO_OR_EXTENSION)); }); it("withdraw-nft() fails if caller is not DAO or extension", () => { @@ -127,7 +127,7 @@ describe(`extension: ${contractName}`, () => { ); // Assert - expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_UNAUTHORIZED)); + expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_NOT_DAO_OR_EXTENSION)); }); it("delegate-stx() fails if caller is not DAO or extension", () => { @@ -144,7 +144,7 @@ describe(`extension: ${contractName}`, () => { ); // Assert - expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_UNAUTHORIZED)); + expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_NOT_DAO_OR_EXTENSION)); }); it("revoke-delegate-stx() fails if caller is not DAO or extension", () => { @@ -159,7 +159,7 @@ describe(`extension: ${contractName}`, () => { ); // Assert - expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_UNAUTHORIZED)); + expect(receipt.result).toBeErr(Cl.uint(ErrCode.ERR_NOT_DAO_OR_EXTENSION)); }); }); diff --git a/tests/dao/proposals/aibtc-action-proposals-set-proposal-bond.test.ts b/tests/dao/proposals/aibtc-action-proposals-set-proposal-bond.test.ts index b757d8e..1f03020 100644 --- a/tests/dao/proposals/aibtc-action-proposals-set-proposal-bond.test.ts +++ b/tests/dao/proposals/aibtc-action-proposals-set-proposal-bond.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-action-proposals-set-proposal-bond"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-base-add-new-extension.test.ts b/tests/dao/proposals/aibtc-base-add-new-extension.test.ts index 1cd4a34..4d2f96e 100644 --- a/tests/dao/proposals/aibtc-base-add-new-extension.test.ts +++ b/tests/dao/proposals/aibtc-base-add-new-extension.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-base-add-new-extension"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-base-disable-extension.test.ts b/tests/dao/proposals/aibtc-base-disable-extension.test.ts index 1545bbb..2f3d554 100644 --- a/tests/dao/proposals/aibtc-base-disable-extension.test.ts +++ b/tests/dao/proposals/aibtc-base-disable-extension.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-base-disable-extension"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-base-enable-extension.test.ts b/tests/dao/proposals/aibtc-base-enable-extension.test.ts index 89e7c4e..74f89b5 100644 --- a/tests/dao/proposals/aibtc-base-enable-extension.test.ts +++ b/tests/dao/proposals/aibtc-base-enable-extension.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-base-enable-extension"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-base-replace-extension-proposal-voting.test.ts b/tests/dao/proposals/aibtc-base-replace-extension-proposal-voting.test.ts index 5893c8d..6720c2f 100644 --- a/tests/dao/proposals/aibtc-base-replace-extension-proposal-voting.test.ts +++ b/tests/dao/proposals/aibtc-base-replace-extension-proposal-voting.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-base-replace-extension"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly before dao is initialized", () => { diff --git a/tests/dao/proposals/aibtc-base-replace-extension.test.ts b/tests/dao/proposals/aibtc-base-replace-extension.test.ts index 5893c8d..6720c2f 100644 --- a/tests/dao/proposals/aibtc-base-replace-extension.test.ts +++ b/tests/dao/proposals/aibtc-base-replace-extension.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-base-replace-extension"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly before dao is initialized", () => { diff --git a/tests/dao/proposals/aibtc-core-proposals-set-proposal-bond.test.ts b/tests/dao/proposals/aibtc-core-proposals-set-proposal-bond.test.ts index 17e5c7f..364dff3 100644 --- a/tests/dao/proposals/aibtc-core-proposals-set-proposal-bond.test.ts +++ b/tests/dao/proposals/aibtc-core-proposals-set-proposal-bond.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-core-proposals-set-proposal-bond"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-dao-charter-set-dao-charter.test.ts b/tests/dao/proposals/aibtc-dao-charter-set-dao-charter.test.ts index ad4dc50..36cc125 100644 --- a/tests/dao/proposals/aibtc-dao-charter-set-dao-charter.test.ts +++ b/tests/dao/proposals/aibtc-dao-charter-set-dao-charter.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-dao-charter-set-dao-charter"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-onchain-messaging-send.test.ts b/tests/dao/proposals/aibtc-onchain-messaging-send.test.ts index f3bcff9..e641e1e 100644 --- a/tests/dao/proposals/aibtc-onchain-messaging-send.test.ts +++ b/tests/dao/proposals/aibtc-onchain-messaging-send.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-onchain-messaging-send"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-pmt-dao-add-resource.test.ts b/tests/dao/proposals/aibtc-pmt-dao-add-resource.test.ts index f5715d3..303e17e 100644 --- a/tests/dao/proposals/aibtc-pmt-dao-add-resource.test.ts +++ b/tests/dao/proposals/aibtc-pmt-dao-add-resource.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-pmt-dao-add-resource"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-pmt-dao-set-payment-address.test.ts b/tests/dao/proposals/aibtc-pmt-dao-set-payment-address.test.ts index 4258890..46d62a8 100644 --- a/tests/dao/proposals/aibtc-pmt-dao-set-payment-address.test.ts +++ b/tests/dao/proposals/aibtc-pmt-dao-set-payment-address.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-pmt-dao-set-payment-address"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-pmt-dao-toggle-resource-by-name.test.ts b/tests/dao/proposals/aibtc-pmt-dao-toggle-resource-by-name.test.ts index b38a3dc..a261e50 100644 --- a/tests/dao/proposals/aibtc-pmt-dao-toggle-resource-by-name.test.ts +++ b/tests/dao/proposals/aibtc-pmt-dao-toggle-resource-by-name.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-pmt-dao-toggle-resource-by-name"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-pmt-dao-toggle-resource.test.ts b/tests/dao/proposals/aibtc-pmt-dao-toggle-resource.test.ts index 9cfdabb..33a4c8e 100644 --- a/tests/dao/proposals/aibtc-pmt-dao-toggle-resource.test.ts +++ b/tests/dao/proposals/aibtc-pmt-dao-toggle-resource.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-pmt-dao-toggle-resource"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-pmt-sbtc-add-resource.test.ts b/tests/dao/proposals/aibtc-pmt-sbtc-add-resource.test.ts index 85bec04..e2bbe13 100644 --- a/tests/dao/proposals/aibtc-pmt-sbtc-add-resource.test.ts +++ b/tests/dao/proposals/aibtc-pmt-sbtc-add-resource.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-pmt-sbtc-add-resource"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-pmt-sbtc-set-payment-address.test.ts b/tests/dao/proposals/aibtc-pmt-sbtc-set-payment-address.test.ts index eedf3d7..f0f2689 100644 --- a/tests/dao/proposals/aibtc-pmt-sbtc-set-payment-address.test.ts +++ b/tests/dao/proposals/aibtc-pmt-sbtc-set-payment-address.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-pmt-sbtc-set-payment-address"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-pmt-sbtc-toggle-resource-by-name.test.ts b/tests/dao/proposals/aibtc-pmt-sbtc-toggle-resource-by-name.test.ts index 3065d5c..2d7247c 100644 --- a/tests/dao/proposals/aibtc-pmt-sbtc-toggle-resource-by-name.test.ts +++ b/tests/dao/proposals/aibtc-pmt-sbtc-toggle-resource-by-name.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-pmt-sbtc-toggle-resource-by-name"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-pmt-sbtc-toggle-resource.test.ts b/tests/dao/proposals/aibtc-pmt-sbtc-toggle-resource.test.ts index ffff134..e75dacc 100644 --- a/tests/dao/proposals/aibtc-pmt-sbtc-toggle-resource.test.ts +++ b/tests/dao/proposals/aibtc-pmt-sbtc-toggle-resource.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-pmt-sbtc-toggle-resource"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-pmt-stx-add-resource.test.ts b/tests/dao/proposals/aibtc-pmt-stx-add-resource.test.ts index e00fdd4..de682c6 100644 --- a/tests/dao/proposals/aibtc-pmt-stx-add-resource.test.ts +++ b/tests/dao/proposals/aibtc-pmt-stx-add-resource.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-pmt-stx-add-resource"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-pmt-stx-set-payment-address.test.ts b/tests/dao/proposals/aibtc-pmt-stx-set-payment-address.test.ts index 06f864a..e06d877 100644 --- a/tests/dao/proposals/aibtc-pmt-stx-set-payment-address.test.ts +++ b/tests/dao/proposals/aibtc-pmt-stx-set-payment-address.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-pmt-stx-set-payment-address"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-pmt-stx-toggle-resource-by-name.test.ts b/tests/dao/proposals/aibtc-pmt-stx-toggle-resource-by-name.test.ts index 086490f..d21650e 100644 --- a/tests/dao/proposals/aibtc-pmt-stx-toggle-resource-by-name.test.ts +++ b/tests/dao/proposals/aibtc-pmt-stx-toggle-resource-by-name.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-pmt-stx-toggle-resource-by-name"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-pmt-stx-toggle-resource.test.ts b/tests/dao/proposals/aibtc-pmt-stx-toggle-resource.test.ts index ece2783..a7dd8b8 100644 --- a/tests/dao/proposals/aibtc-pmt-stx-toggle-resource.test.ts +++ b/tests/dao/proposals/aibtc-pmt-stx-toggle-resource.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-pmt-stx-toggle-resource"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-dao-initialize-new-vault.test.ts b/tests/dao/proposals/aibtc-timed-vault-dao-initialize-new-vault.test.ts index 01bb242..0378811 100644 --- a/tests/dao/proposals/aibtc-timed-vault-dao-initialize-new-vault.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-dao-initialize-new-vault.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-dao-initialize-new-vault"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-dao-override-last-withdrawal-block.test.ts b/tests/dao/proposals/aibtc-timed-vault-dao-override-last-withdrawal-block.test.ts index 9eece44..1afff8c 100644 --- a/tests/dao/proposals/aibtc-timed-vault-dao-override-last-withdrawal-block.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-dao-override-last-withdrawal-block.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-dao-override-last-withdrawal-block"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-dao-set-account-holder.test.ts b/tests/dao/proposals/aibtc-timed-vault-dao-set-account-holder.test.ts index e1f7172..f27e900 100644 --- a/tests/dao/proposals/aibtc-timed-vault-dao-set-account-holder.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-dao-set-account-holder.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-dao-set-account-holder"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-dao-set-withdrawal-amount.test.ts b/tests/dao/proposals/aibtc-timed-vault-dao-set-withdrawal-amount.test.ts index 02a8758..c2dbd58 100644 --- a/tests/dao/proposals/aibtc-timed-vault-dao-set-withdrawal-amount.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-dao-set-withdrawal-amount.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-dao-set-withdrawal-amount"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-dao-set-withdrawal-period.test.ts b/tests/dao/proposals/aibtc-timed-vault-dao-set-withdrawal-period.test.ts index d3ebdfb..c8b1ffa 100644 --- a/tests/dao/proposals/aibtc-timed-vault-dao-set-withdrawal-period.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-dao-set-withdrawal-period.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-dao-set-withdrawal-period"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-dao-withdraw.test.ts b/tests/dao/proposals/aibtc-timed-vault-dao-withdraw.test.ts index 7b982b0..48bba51 100644 --- a/tests/dao/proposals/aibtc-timed-vault-dao-withdraw.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-dao-withdraw.test.ts @@ -7,7 +7,7 @@ const accounts = simnet.getAccounts(); const deployer = accounts.get("deployer")!; const contractAddress = `${deployer}.${ContractProposalType.DAO_TIMED_VAULT_DAO_WITHDRAW}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${ContractProposalType.DAO_TIMED_VAULT_DAO_WITHDRAW}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-sbtc-initialize-new-vault.test.ts b/tests/dao/proposals/aibtc-timed-vault-sbtc-initialize-new-vault.test.ts index aee4e94..237ee3a 100644 --- a/tests/dao/proposals/aibtc-timed-vault-sbtc-initialize-new-vault.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-sbtc-initialize-new-vault.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-sbtc-initialize-new-vault"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-sbtc-override-last-withdrawal-block.test.ts b/tests/dao/proposals/aibtc-timed-vault-sbtc-override-last-withdrawal-block.test.ts index 96ce215..41106ac 100644 --- a/tests/dao/proposals/aibtc-timed-vault-sbtc-override-last-withdrawal-block.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-sbtc-override-last-withdrawal-block.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-sbtc-override-last-withdrawal-block"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-sbtc-set-account-holder.test.ts b/tests/dao/proposals/aibtc-timed-vault-sbtc-set-account-holder.test.ts index b639e68..7316c6a 100644 --- a/tests/dao/proposals/aibtc-timed-vault-sbtc-set-account-holder.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-sbtc-set-account-holder.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-sbtc-set-account-holder"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-sbtc-set-withdrawal-amount.test.ts b/tests/dao/proposals/aibtc-timed-vault-sbtc-set-withdrawal-amount.test.ts index e816ec7..9e917f0 100644 --- a/tests/dao/proposals/aibtc-timed-vault-sbtc-set-withdrawal-amount.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-sbtc-set-withdrawal-amount.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-sbtc-set-withdrawal-amount"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-sbtc-set-withdrawal-period.test.ts b/tests/dao/proposals/aibtc-timed-vault-sbtc-set-withdrawal-period.test.ts index 3b2fb10..7393a8d 100644 --- a/tests/dao/proposals/aibtc-timed-vault-sbtc-set-withdrawal-period.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-sbtc-set-withdrawal-period.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-sbtc-set-withdrawal-period"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-sbtc-withdraw.test.ts b/tests/dao/proposals/aibtc-timed-vault-sbtc-withdraw.test.ts index 521136a..4ad21dc 100644 --- a/tests/dao/proposals/aibtc-timed-vault-sbtc-withdraw.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-sbtc-withdraw.test.ts @@ -7,7 +7,7 @@ const accounts = simnet.getAccounts(); const deployer = accounts.get("deployer")!; const contractAddress = `${deployer}.${ContractProposalType.DAO_TIMED_VAULT_SBTC_WITHDRAW}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${ContractProposalType.DAO_TIMED_VAULT_SBTC_WITHDRAW}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-stx-initialize-new-vault.test.ts b/tests/dao/proposals/aibtc-timed-vault-stx-initialize-new-vault.test.ts index 1d67d3e..2f22723 100644 --- a/tests/dao/proposals/aibtc-timed-vault-stx-initialize-new-vault.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-stx-initialize-new-vault.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-stx-initialize-new-vault"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { //dbgLog(`core proposal: ${contractName}`); diff --git a/tests/dao/proposals/aibtc-timed-vault-stx-override-last-withdrawal-block.test.ts b/tests/dao/proposals/aibtc-timed-vault-stx-override-last-withdrawal-block.test.ts index 700ba11..ce89afd 100644 --- a/tests/dao/proposals/aibtc-timed-vault-stx-override-last-withdrawal-block.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-stx-override-last-withdrawal-block.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-stx-override-last-withdrawal-block"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-stx-set-account-holder.test.ts b/tests/dao/proposals/aibtc-timed-vault-stx-set-account-holder.test.ts index 8b22ee2..e892e3f 100644 --- a/tests/dao/proposals/aibtc-timed-vault-stx-set-account-holder.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-stx-set-account-holder.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-stx-set-account-holder"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-stx-set-withdrawal-amount.test.ts b/tests/dao/proposals/aibtc-timed-vault-stx-set-withdrawal-amount.test.ts index eae35f7..e564b0a 100644 --- a/tests/dao/proposals/aibtc-timed-vault-stx-set-withdrawal-amount.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-stx-set-withdrawal-amount.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-stx-set-withdrawal-amount"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-stx-set-withdrawal-period.test.ts b/tests/dao/proposals/aibtc-timed-vault-stx-set-withdrawal-period.test.ts index ebb5432..d8095ed 100644 --- a/tests/dao/proposals/aibtc-timed-vault-stx-set-withdrawal-period.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-stx-set-withdrawal-period.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-timed-vault-stx-set-withdrawal-period"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-timed-vault-stx-withdraw.test.ts b/tests/dao/proposals/aibtc-timed-vault-stx-withdraw.test.ts index 410ec2b..f68a8cc 100644 --- a/tests/dao/proposals/aibtc-timed-vault-stx-withdraw.test.ts +++ b/tests/dao/proposals/aibtc-timed-vault-stx-withdraw.test.ts @@ -7,7 +7,7 @@ const accounts = simnet.getAccounts(); const deployer = accounts.get("deployer")!; const contractAddress = `${deployer}.${ContractProposalType.DAO_TIMED_VAULT_STX_WITHDRAW}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${ContractProposalType.DAO_TIMED_VAULT_STX_WITHDRAW}`, () => { it("execute() fails if called directly", () => { 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 index 69fc30d..c84d9ac 100644 --- a/tests/dao/proposals/aibtc-token-owner-set-token-uri.test.ts +++ b/tests/dao/proposals/aibtc-token-owner-set-token-uri.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-token-owner-set-token-uri"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-token-owner-transfer-ownership.test.ts b/tests/dao/proposals/aibtc-token-owner-transfer-ownership.test.ts index 9d7d8a5..fdc60f6 100644 --- a/tests/dao/proposals/aibtc-token-owner-transfer-ownership.test.ts +++ b/tests/dao/proposals/aibtc-token-owner-transfer-ownership.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-token-owner-transfer-ownership"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-treasury-allow-asset.test.ts b/tests/dao/proposals/aibtc-treasury-allow-asset.test.ts index 75081df..988812e 100644 --- a/tests/dao/proposals/aibtc-treasury-allow-asset.test.ts +++ b/tests/dao/proposals/aibtc-treasury-allow-asset.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-treasury-allow-asset"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-treasury-allow-assets.test.ts b/tests/dao/proposals/aibtc-treasury-allow-assets.test.ts index 8eb2af9..3629f97 100644 --- a/tests/dao/proposals/aibtc-treasury-allow-assets.test.ts +++ b/tests/dao/proposals/aibtc-treasury-allow-assets.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-treasury-allow-assets"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-treasury-delegate-stx.test.ts b/tests/dao/proposals/aibtc-treasury-delegate-stx.test.ts index f87ba8a..57ad41a 100644 --- a/tests/dao/proposals/aibtc-treasury-delegate-stx.test.ts +++ b/tests/dao/proposals/aibtc-treasury-delegate-stx.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-treasury-delegate-stx"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-treasury-disable-asset.test.ts b/tests/dao/proposals/aibtc-treasury-disable-asset.test.ts index 82f59c0..ea0b3fd 100644 --- a/tests/dao/proposals/aibtc-treasury-disable-asset.test.ts +++ b/tests/dao/proposals/aibtc-treasury-disable-asset.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-treasury-disable-asset"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-treasury-revoke-delegation.test.ts b/tests/dao/proposals/aibtc-treasury-revoke-delegation.test.ts index d6fd566..226a7a6 100644 --- a/tests/dao/proposals/aibtc-treasury-revoke-delegation.test.ts +++ b/tests/dao/proposals/aibtc-treasury-revoke-delegation.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-treasury-revoke-delegation"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-treasury-withdraw-ft.test.ts b/tests/dao/proposals/aibtc-treasury-withdraw-ft.test.ts index 44665f4..c617c7f 100644 --- a/tests/dao/proposals/aibtc-treasury-withdraw-ft.test.ts +++ b/tests/dao/proposals/aibtc-treasury-withdraw-ft.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-treasury-withdraw-ft"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-treasury-withdraw-nft.test.ts b/tests/dao/proposals/aibtc-treasury-withdraw-nft.test.ts index 4ed1db1..b4556ae 100644 --- a/tests/dao/proposals/aibtc-treasury-withdraw-nft.test.ts +++ b/tests/dao/proposals/aibtc-treasury-withdraw-nft.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-treasury-withdraw-nft"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(TreasuryErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(TreasuryErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/proposals/aibtc-treasury-withdraw-stx.test.ts b/tests/dao/proposals/aibtc-treasury-withdraw-stx.test.ts index b37f5e3..bded8df 100644 --- a/tests/dao/proposals/aibtc-treasury-withdraw-stx.test.ts +++ b/tests/dao/proposals/aibtc-treasury-withdraw-stx.test.ts @@ -7,7 +7,7 @@ const deployer = accounts.get("deployer")!; const contractName = "aibtc-treasury-withdraw-stx"; const contractAddress = `${deployer}.${contractName}`; -const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_UNAUTHORIZED); +const expectedErr = Cl.uint(OnchainMessagingErrCode.ERR_NOT_DAO_OR_EXTENSION); describe(`core proposal: ${contractName}`, () => { it("execute() fails if called directly", () => { diff --git a/tests/dao/token/aibtc-token.test.ts b/tests/dao/token/aibtc-token.test.ts index 24bf08f..5e985f4 100644 --- a/tests/dao/token/aibtc-token.test.ts +++ b/tests/dao/token/aibtc-token.test.ts @@ -1,5 +1,6 @@ import { Cl } from "@stacks/transactions"; import { describe, expect, it } from "vitest"; +import { ResponseOkCV } from "@stacks/stacks-transactions"; const accounts = simnet.getAccounts(); const deployer = accounts.get("deployer")!; @@ -8,6 +9,8 @@ const address2 = accounts.get("wallet_2")!; const contractName = "aibtc-token"; const contractAddress = `${deployer}.${contractName}`; +const tokenOwnerAddress = `${deployer}.aibtc-token-owner`; +const treasuryAddress = `${deployer}.aibtc-treasury`; describe(`token: ${contractName}`, () => { it("get-symbol() should return the token symbol", () => { @@ -17,6 +20,73 @@ describe(`token: ${contractName}`, () => { [], deployer ).result; - expect(result).toBeOk(Cl.stringAscii("SYMBOL")); + expect(result).toBeOk(Cl.stringAscii("SYMBOL-AIBTC-DAO")); + }); + + it("get-name() should return the token name", () => { + const result = simnet.callReadOnlyFn( + contractAddress, + "get-name", + [], + deployer + ).result; + expect(result).toBeOk(Cl.stringAscii("SYMBOL-AIBTC-DAO")); + }); + + it("get-decimals() should return the token decimals", () => { + const result = simnet.callReadOnlyFn( + contractAddress, + "get-decimals", + [], + deployer + ).result; + expect(result).toBeOk(Cl.uint(8)); + }); + + it("get-total-supply() should return the total supply", () => { + const expectedTotalSupply = 100000000000000000n; + const result = simnet.callReadOnlyFn( + contractAddress, + "get-total-supply", + [], + deployer + ).result; + expect(result).toBeOk(Cl.uint(expectedTotalSupply)); + }); + + it("get-token-uri() should return the token URI", () => { + const result = simnet.callReadOnlyFn( + contractAddress, + "get-token-uri", + [], + deployer + ).result; + // The token URI is set in the contract initialization + expect(result).toBeOk(Cl.some(Cl.stringUtf8("<%= it.token_uri %>"))); // template placeholder + }); + + it("get-balance() should return the balance for an account", () => { + // Check treasury balance (should have 80% of total supply) + const totalSupply = 100000000000000000n; + const expectedTreasuryBalance = (totalSupply * 80n) / 100n; + + const treasuryBalanceResult = simnet.callReadOnlyFn( + contractAddress, + "get-balance", + [Cl.principal(treasuryAddress)], + deployer + ).result; + + expect(treasuryBalanceResult).toBeOk(Cl.uint(expectedTreasuryBalance)); + + // Check a user with no balance + const userBalanceResult = simnet.callReadOnlyFn( + contractAddress, + "get-balance", + [Cl.principal(address1)], + deployer + ).result; + + expect(userBalanceResult).toBeOk(Cl.uint(0)); }); }); diff --git a/tests/error-codes.ts b/tests/error-codes.ts index 6eaaf2c..ff767ef 100644 --- a/tests/error-codes.ts +++ b/tests/error-codes.ts @@ -90,8 +90,8 @@ export enum CoreProposalV2ErrCode { } export enum OnchainMessagingErrCode { - INPUT_ERROR = 4000, - ERR_UNAUTHORIZED, + ERR_INVALID_INPUT = 4000, + ERR_NOT_DAO_OR_EXTENSION, } export enum PaymentProcessorErrCode { @@ -112,12 +112,12 @@ export enum PaymentProcessorErrCode { } export enum TreasuryErrCode { - ERR_UNAUTHORIZED = 6000, + ERR_NOT_DAO_OR_EXTENSION = 6000, ERR_UNKNOWN_ASSSET, } export enum TokenOwnerErrCode { - ERR_UNAUTHORIZED = 7000, + ERR_NOT_DAO_OR_EXTENSION = 7000, } export enum DaoCharterErrCode { diff --git a/tests/test-utilities.ts b/tests/test-utilities.ts index 38eb0c2..156efc5 100644 --- a/tests/test-utilities.ts +++ b/tests/test-utilities.ts @@ -60,28 +60,28 @@ export const VOTING_CONFIG: VotingConfig = { votingPeriod: 144, // 144 Bitcoin blocks (~1 days) votingQuorum: 95, // 95% of liquid supply must participate votingThreshold: 95, // 95% of votes must be in favor - votingBond: 0, // no bond + votingBond: 0n, // no bond }, [ContractType.DAO_CORE_PROPOSALS_V2]: { votingDelay: 432, // 3 x 144 Bitcoin blocks (~3 days) votingPeriod: 432, // 3 x 144 Bitcoin blocks (~3 days) votingQuorum: 25, // 25% of liquid supply must participate votingThreshold: 90, // 90% of votes must be in favor - votingBond: 100000000000, // 1000 DAO token, 8 decimals + votingBond: 25000000000000n, // 250,000 DAO token, 8 decimals }, [ContractType.DAO_ACTION_PROPOSALS]: { votingDelay: 0, // no delay votingPeriod: 144, // 144 Bitcoin blocks (~1 days) votingQuorum: 66, // 66% of liquid supply must participate votingThreshold: 66, // 66% of votes must be in favor - votingBond: 0, // no bond + votingBond: 0n, // no bond }, [ContractType.DAO_ACTION_PROPOSALS_V2]: { votingDelay: 144, // 1 x 144 Bitcoin blocks (~3 days) votingPeriod: 288, // 2 x 144 Bitcoin blocks (~2 days) votingQuorum: 15, // 15% of liquid supply must participate votingThreshold: 66, // 66% of votes must be in favor - votingBond: 100000000000, // 1000 DAO token, 8 decimals + votingBond: 250000000000n, // 2,500 DAO token, 8 decimals }, }; @@ -202,7 +202,8 @@ export function fundVoters( const getDaoTokensEvent = getDaoTokensReceipt.events.find( (eventRecord) => eventRecord.event === "ft_transfer_event" && - eventRecord.data?.asset_identifier === `${tokenContractAddress}::SYMBOL` + eventRecord.data?.asset_identifier === + `${tokenContractAddress}::SYMBOL-AIBTC-DAO` ); expect(getDaoTokensEvent).toBeDefined(); const daoTokensAmount = parseInt(getDaoTokensEvent!.data.amount);