Files
sonr/contracts/DAO/README.md
T

367 lines
9.1 KiB
Markdown
Raw Normal View History

2025-10-03 14:45:52 -04:00
# Identity DAO - Decentralized Identity Governance
A modular Decentralized Identity DAO implementation for the Sonr blockchain, integrating with the x/did module to provide identity-based governance capabilities.
## Overview
The Identity DAO enables decentralized governance where voting power and proposal submission rights are determined by verified identity status rather than token holdings. This creates a more equitable governance system based on identity verification levels.
## Architecture
The DAO follows [DAO DAO's modular architecture](https://github.com/DA0-DA0/dao-contracts) with four core components:
### 1. Identity DAO Core Module
- **Location**: `/contracts/core/`
- **Purpose**: Central coordination and treasury management
- **Key Features**:
- Treasury management for DAO funds
- Proposal execution orchestration
- Module registry and configuration
- Wyoming DAO compliance features
### 2. DID-Based Voting Module
- **Location**: `/contracts/voting/`
- **Purpose**: Identity-based voting power calculation
- **Key Features**:
- Voting power based on DID verification level
- Reputation-weighted voting
- Quorum and threshold management
- Vote tallying and results
### 3. Identity Proposal Module
- **Location**: `/contracts/proposals/`
- **Purpose**: Proposal lifecycle management
- **Key Features**:
- Proposal creation and state management
- Identity-gated proposal types
- Execution scheduling
- Multi-signature support
### 4. Pre-Propose Identity Module
- **Location**: `/contracts/pre-propose/`
- **Purpose**: DID-gated proposal submission
- **Key Features**:
- Verification requirements for proposers
- Deposit management
- Anti-spam mechanisms
- Proposal review workflow
## Installation
### Prerequisites
- Rust 1.70+
- Docker (for contract optimization)
- `snrd` binary (Sonr blockchain node)
- `jq` for JSON processing
### Building Contracts
```bash
# Build all contracts with optimizer
cd contracts/DAO
docker run --rm -v "$(pwd)":/code \
--mount type=volume,source="$(basename "$(pwd)")_cache",target=/target \
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
cosmwasm/workspace-optimizer:0.13.0
# Artifacts will be in ./artifacts/
```
## Deployment
### Quick Deploy
```bash
# Set environment variables
export CHAIN_ID="sonrtest_1-1"
export NODE="http://localhost:26657"
export DEPLOYER="your-key-name"
# Run deployment script
./scripts/deploy.sh
```
### Manual Deployment
1. **Store Contract Codes**:
```bash
# Store each contract
snrd tx wasm store artifacts/identity_dao_core.wasm \
--from $DEPLOYER --chain-id $CHAIN_ID --gas-prices 0.025usnr
# Repeat for voting, proposals, and pre-propose modules
```
2. **Instantiate Core Module**:
```bash
snrd tx wasm instantiate $CORE_CODE_ID \
'{"admin":"'$DEPLOYER'","dao_name":"Sonr Identity DAO","dao_uri":"https://sonr.io/dao","voting_module":null,"proposal_modules":[]}' \
--from $DEPLOYER --label "identity-dao-core" --admin $DEPLOYER
```
3. **Deploy Other Modules** (see deployment script for details)
4. **Link Modules**:
```bash
# Update core with voting and proposal modules
snrd tx wasm execute $CORE_ADDR \
'{"update_config":{"voting_module":"'$VOTING_ADDR'","proposal_modules":["'$PROPOSALS_ADDR'"]}}' \
--from $DEPLOYER
```
## Contract Interactions
### Creating a Proposal
1. **Submit to Pre-Propose Module**:
```bash
snrd tx wasm execute $PRE_PROPOSE_ADDR \
'{"submit_proposal":{"title":"Upgrade Protocol","description":"Upgrade to v2.0","msgs":[...]}}' \
--from $PROPOSER --amount 1000000usnr
```
2. **Admin Approval** (if required):
```bash
snrd tx wasm execute $PRE_PROPOSE_ADDR \
'{"approve_proposal":{"proposal_id":1}}' \
--from $ADMIN
```
### Voting
```bash
# Cast a vote
snrd tx wasm execute $VOTING_ADDR \
'{"vote":{"proposal_id":1,"vote":"yes"}}' \
--from $VOTER
# Vote options: "yes", "no", "abstain", "no_with_veto"
```
### Executing Proposals
```bash
# After voting period ends and proposal passes
snrd tx wasm execute $PROPOSALS_ADDR \
'{"execute":{"proposal_id":1}}' \
--from $EXECUTOR
```
## Query Commands
### Query Proposal Status
```bash
snrd query wasm contract-state smart $PROPOSALS_ADDR \
'{"proposal":{"proposal_id":1}}'
```
### Query Voting Power
```bash
snrd query wasm contract-state smart $VOTING_ADDR \
'{"voting_power":{"address":"sonr1..."}}'
```
### Query DAO Configuration
```bash
snrd query wasm contract-state smart $CORE_ADDR \
'{"config":{}}'
```
### List Pending Proposals
```bash
snrd query wasm contract-state smart $PRE_PROPOSE_ADDR \
'{"pending_proposals":{}}'
```
## Governance Flow
```mermaid
graph TD
A[DID Holder] -->|Submit Proposal| B[Pre-Propose Module]
B -->|Verify DID Status| C{Verification Check}
C -->|Pass| D[Pending Queue]
C -->|Fail| E[Rejected]
D -->|Admin Review| F{Approval}
F -->|Approved| G[Proposal Module]
F -->|Rejected| H[Refund Deposit]
G -->|Open Voting| I[Voting Module]
I -->|Cast Votes| J[Vote Tally]
J -->|Voting Period Ends| K{Result}
K -->|Pass| L[Execute]
K -->|Fail| M[Archive]
L -->|Run Messages| N[Core Module]
```
## Verification Levels
The DAO recognizes four verification levels:
| Level | Name | Voting Power Multiplier | Proposal Rights |
|-------|------|------------------------|-----------------|
| 0 | Unverified | 0x | None |
| 1 | Basic | 1x | Standard proposals |
| 2 | Advanced | 2x | Policy changes |
| 3 | Full | 3x | All proposals |
## Wyoming DAO Compliance
The Identity DAO includes features for Wyoming DAO legal compliance:
- **Named Entity**: DAO name and URI stored on-chain
- **Member Registry**: DID-based membership tracking
- **Voting Records**: All votes recorded on-chain
- **Treasury Management**: Transparent fund management
- **Governance Rules**: Codified in smart contracts
## Security Considerations
### Access Control
- Admin functions restricted to DAO governance
- Module interactions validated
- DID verification required for participation
### Economic Security
- Deposit requirements for proposals
- Refund mechanisms for failed proposals
- Anti-spam through verification requirements
### Upgrade Security
- Migration support with admin approval
- Code ID tracking for audit trail
- Gradual rollout capabilities
## Testing
### Unit Tests
```bash
cd contracts/DAO
cargo test
```
### Integration Tests
```bash
# Run e2e tests (requires running testnet)
cd tests/e2e
go test -v ./...
```
### Local Testnet
```bash
# Start local testnet
make localnet
# Deploy contracts
./scripts/deploy.sh
# Run test transactions
./scripts/test_governance.sh
```
## Migration
To migrate contracts to new versions:
```bash
# Migrate single module
./scripts/migrate.sh core
# Migrate all modules
./scripts/migrate.sh all
```
## Gas Optimization
### Recommended Gas Settings
- **Store Code**: 5,000,000 gas
- **Instantiate**: 500,000 gas
- **Execute (simple)**: 200,000 gas
- **Execute (complex)**: 1,000,000 gas
- **Query**: No gas required
### Optimization Tips
1. Batch operations when possible
2. Use efficient data structures
3. Minimize storage writes
4. Cache frequently accessed data
## Troubleshooting
### Common Issues
**Issue**: "Insufficient verification level"
- **Solution**: Ensure your DID has the required verification level
**Issue**: "Insufficient deposit"
- **Solution**: Include the minimum deposit amount with proposal submission
**Issue**: "Unauthorized"
- **Solution**: Check that you have the correct role/permissions
**Issue**: "Proposal already executed"
- **Solution**: Proposals can only be executed once
## API Reference
### Core Module
#### Execute Messages
- `UpdateConfig`: Update DAO configuration
- `ExecuteProposal`: Execute approved proposal
- `UpdateAdmin`: Transfer admin rights
#### Query Messages
- `Config`: Get DAO configuration
- `Admin`: Get current admin
- `ProposalModules`: List proposal modules
### Voting Module
#### Execute Messages
- `Vote`: Cast a vote on a proposal
- `UpdateConfig`: Update voting parameters
#### Query Messages
- `VotingPower`: Get address voting power
- `ProposalVotes`: Get votes for a proposal
- `Config`: Get voting configuration
### Proposals Module
#### Execute Messages
- `Propose`: Create a new proposal
- `Execute`: Execute passed proposal
- `Close`: Close expired proposal
#### Query Messages
- `Proposal`: Get proposal details
- `ListProposals`: List all proposals
- `ProposalResult`: Get proposal outcome
### Pre-Propose Module
#### Execute Messages
- `SubmitProposal`: Submit proposal for review
- `ApproveProposal`: Approve pending proposal
- `RejectProposal`: Reject pending proposal
- `WithdrawProposal`: Withdraw pending proposal
#### Query Messages
- `PendingProposals`: List pending proposals
- `DepositInfo`: Get deposit information
- `Config`: Get module configuration
## Contributing
Please see the main [Sonr contribution guidelines](https://sonr.dev/contributing).
## License
This project is licensed under the Apache 2.0 License - see the [LICENSE](../../LICENSE) file for details.
## Support
- GitHub Issues: [sonr-io/sonr](https://github.com/sonr-io/sonr/issues)
- Discord: [Sonr Community](https://discord.gg/sonr)
- Documentation: [docs.sonr.io](https://sonr.dev)