Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 130 additions & 0 deletions aibtc-dao-consistency-report.md
Original file line number Diff line number Diff line change
@@ -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
19 changes: 12 additions & 7 deletions contracts/dao/extensions/aibtc-action-proposals-v2.clar
Original file line number Diff line number Diff line change
Expand Up @@ -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
;;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -256,7 +261,7 @@
(print {
notification: "conclude-proposal",
payload: {
caller: contract-caller,
contractCaller: contract-caller,
concludedBy: tx-sender,
bond: (get bond proposalRecord),
proposalId: proposalId,
Expand Down
19 changes: 12 additions & 7 deletions contracts/dao/extensions/aibtc-core-proposals-v2.clar
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -244,7 +249,7 @@
(print {
notification: "conclude-proposal",
payload: {
caller: contract-caller,
contractCaller: contract-caller,
concludedBy: tx-sender,
bond: (get bond proposalRecord),
proposal: proposalContract,
Expand Down
5 changes: 3 additions & 2 deletions contracts/dao/extensions/aibtc-dao-charter.clar
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
13 changes: 7 additions & 6 deletions contracts/dao/extensions/aibtc-onchain-messaging.clar
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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)
Expand All @@ -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
))
)
2 changes: 1 addition & 1 deletion contracts/dao/extensions/aibtc-payment-processor-dao.clar
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@
contractCaller: contract-caller,
oldAddress: (var-get paymentAddress),
newAddress: newAddress,
txSender: tx-sender,
txSender: tx-sender
}
})
;; set new payment address
Expand Down
13 changes: 9 additions & 4 deletions contracts/dao/extensions/aibtc-timed-vault-dao.clar
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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))
Expand Down
13 changes: 9 additions & 4 deletions contracts/dao/extensions/aibtc-timed-vault-sbtc.clar
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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))
Expand Down
13 changes: 9 additions & 4 deletions contracts/dao/extensions/aibtc-timed-vault-stx.clar
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)))
Expand Down
Loading