mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-02 17:31:39 +00:00
367 lines
9.1 KiB
Markdown
367 lines
9.1 KiB
Markdown
# 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)
|