| name | gotchi-dao-voting |
| description | Autonomous Aavegotchi DAO voting on Snapshot. Check active proposals, view voting power, and cast votes automatically via Bankr wallet signature. No gas fees, secure voting with your gotchi power! |
| homepage | https://github.com/aaigotchi/gotchi-dao-voting |
| metadata | {"openclaw":{"requires":{"bins":["curl","jq"],"env":["BANKR_API_KEY"]},"primaryEnv":"BANKR_API_KEY"}} |
Gotchi DAO Voting 🗳️
Autonomous voting on Aavegotchi DAO proposals via Snapshot. Check proposals, view your voting power, and cast votes automatically using secure Bankr wallet signatures.
Features
- ✅ Check Active Proposals - Find all active Aavegotchi governance votes
- ✅ View Voting Power - See your VP from GHST + Aavegotchis
- ✅ Automatic Voting - Cast votes via Bankr (no private keys!)
- ✅ Weighted Voting Support - Handles single-choice and weighted votes
- ✅ Gas-Free - Snapshot voting has no gas fees
- ✅ Secure - Uses Bankr EIP-712 signing (no key exposure)
Usage
List Active Proposals
./scripts/list-proposals.sh
Shows all active proposals in aavegotchi.eth space with:
- Proposal titles
- End dates
- Your voting power
- Choices available
Check Voting Power
./scripts/check-voting-power.sh <proposal-id>
Shows your voting power breakdown:
- GHST holdings
- Aavegotchi NFTs
- Total VP
- Voting eligibility
Cast a Vote
./scripts/vote.sh <proposal-id> <choice>
For single-choice voting:
- choice = 1, 2, 3, etc. (option number)
For weighted voting:
- choice = JSON like
{"2": 2238} (all VP on option 2)
Examples:
./scripts/vote.sh 0xabc123... 2
./scripts/vote.sh 0xdef456... '{"3": 2238}'
Batch Vote
./scripts/vote-batch.sh
Reads votes from votes.json and submits them all:
{
"votes": [
{
"proposal": "0xabc...",
"choice": "{\"2\": 2238}",
"description": "Multisig signers"
},
{
"proposal": "0xdef...",
"choice": "{\"3\": 2238}",
"description": "Signer compensation"
}
]
}
How It Works
Voting Power Sources
Your voting power on Aavegotchi proposals comes from:
- GHST tokens - Held in your wallet
- Aavegotchi NFTs - Each gotchi contributes VP
- Other strategies - Space-specific (staking, etc.)
The snapshot is taken at a specific block, so your current holdings may differ from voting power.
Snapshot Voting Process
- Query Proposal - Get proposal details, type, and choices
- Check VP - Verify you have voting power
- Sign Vote - Create EIP-712 signature via Bankr
- Submit - Send to Snapshot sequencer
- Confirm - Receive vote ID and IPFS hash
Weighted vs Single-Choice
Single-choice:
- Format:
choice: 2 (pick one option)
- Your full VP goes to that choice
Weighted:
- Format:
choice: "{\"2\": 2238}" (distribute VP)
- Can split VP across multiple options
- JSON string mapping choice to VP amount
Security
- ✅ No private keys - Uses Bankr API for EIP-712 signing
- ✅ Read-only queries - Proposal/VP checks are safe
- ✅ Explicit voting - Never auto-votes without confirmation
- ✅ Signature validation - Snapshot validates all votes
Security Score: 10/10 ✅
No on-chain transactions, no private key exposure, secure message signing.
Configuration
Edit config.json:
{
"wallet": "0xYourWallet",
"space": "aavegotchi.eth",
"snapshotApiUrl": "https://hub.snapshot.org/graphql",
"snapshotSequencer": "https://seq.snapshot.org/"
}
Technical Details
Snapshot EIP-712 Structure
{
"types": {
"Vote": [
{"name": "from", "type": "address"},
{"name": "space", "type": "string"},
{"name": "timestamp", "type": "uint64"},
{"name": "proposal", "type": "bytes32"},
{"name": "choice", "type": "string"},
{"name": "reason", "type": "string"},
{"name": "app", "type": "string"},
{"name": "metadata", "type": "string"}
]
},
"domain": {
"name": "snapshot",
"version": "0.1.4"
}
}
API Endpoints
- GraphQL API:
https://hub.snapshot.org/graphql
- Sequencer:
https://seq.snapshot.org/
- Snapshot Hub:
https://snapshot.org/#/aavegotchi.eth
Examples
Complete Voting Workflow
./scripts/list-proposals.sh
./scripts/check-voting-power.sh 0xabc123...
./scripts/vote.sh 0xabc123... '{"2": 2238}'
Automated Voting
Create a votes file and execute:
cat > votes.json << 'EOF'
{
"votes": [
{"proposal": "0x...", "choice": "{\"2\": 2238}"}
]
}
EOF
./scripts/vote-batch.sh
Troubleshooting
"Invalid choice" Error
- Check if proposal uses weighted or single-choice voting
- For weighted: use JSON format
{"N": VP}
- For single: use number
2
"Signature validation failed"
- Ensure Bankr API key is correct
- Check wallet address matches config
- Verify EIP-712 structure matches Snapshot's format
"No voting power"
- Snapshot was taken at a specific block
- Check historical holdings, not current
- Use
check-voting-power.sh to see breakdown
"Wrong envelope format"
- Ensure JSON is properly escaped
- Check choice format matches voting type
- Verify timestamp is current Unix timestamp
References
Live Test Results
Production Test (2026-02-21):
- ✅ Voted on "Multisig Signers" proposal
- ✅ Voted on "Signer Compensation" proposal
- ✅ Both votes confirmed on-chain
- ✅ Voting power: 2,238 VP (825 GHST + 1,413 gotchis)
- ✅ Vote IDs verified on Snapshot
Future Enhancements
Status: ✅ Production Ready
Version: 1.0.0
Author: AAI (aaigotchi)
License: MIT
LFGOTCHi! 👻🗳️💜✨