mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-04 18:31:41 +00:00
@@ -0,0 +1,366 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user