# Gotchi Dao Voting

> 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!

- Skill: `modbender/gotchi-dao-voting` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add modbender/gotchi-dao-voting`
- Raw SKILL.md: https://api.skillmd.com/api/skills/modbender/gotchi-dao-voting/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: modbender (https://skillmd.com/u/modbender)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/modbender/gotchi-dao-voting

---


# 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

```bash
./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

```bash
./scripts/check-voting-power.sh <proposal-id>
```

Shows your voting power breakdown:
- GHST holdings
- Aavegotchi NFTs
- Total VP
- Voting eligibility

### Cast a Vote

```bash
./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:**

```bash
# Vote on proposal (option 2)
./scripts/vote.sh 0xabc123... 2

# Weighted vote (all VP on option 3)
./scripts/vote.sh 0xdef456... '{"3": 2238}'
```

### Batch Vote

```bash
./scripts/vote-batch.sh
```

Reads votes from `votes.json` and submits them all:

```json
{
  "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:

1. **GHST tokens** - Held in your wallet
2. **Aavegotchi NFTs** - Each gotchi contributes VP
3. **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

1. **Query Proposal** - Get proposal details, type, and choices
2. **Check VP** - Verify you have voting power
3. **Sign Vote** - Create EIP-712 signature via Bankr
4. **Submit** - Send to Snapshot sequencer
5. **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`:

```json
{
  "wallet": "0xYourWallet",
  "space": "aavegotchi.eth",
  "snapshotApiUrl": "https://hub.snapshot.org/graphql",
  "snapshotSequencer": "https://seq.snapshot.org/"
}
```

## Technical Details

### Snapshot EIP-712 Structure

```javascript
{
  "types": {
    "Vote": [
      {"name": "from", "type": "address"},
      {"name": "space", "type": "string"},
      {"name": "timestamp", "type": "uint64"},
      {"name": "proposal", "type": "bytes32"},
      {"name": "choice", "type": "string"},  // or "uint32" for single
      {"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

```bash
# 1. Check what's active
./scripts/list-proposals.sh

# 2. Check your power on a proposal
./scripts/check-voting-power.sh 0xabc123...

# 3. Vote!
./scripts/vote.sh 0xabc123... '{"2": 2238}'

# 4. Verify vote was recorded
# Visit: https://snapshot.org/#/aavegotchi.eth/proposal/0xabc123...
```

### Automated Voting

Create a votes file and execute:

```bash
# Create votes.json with your choices
cat > votes.json << 'EOF'
{
  "votes": [
    {"proposal": "0x...", "choice": "{\"2\": 2238}"}
  ]
}
EOF

# Execute all votes
./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

- [Snapshot Documentation](https://docs.snapshot.box/)
- [Aavegotchi Governance](https://snapshot.org/#/aavegotchi.eth)
- [EIP-712 Spec](https://eips.ethereum.org/EIPS/eip-712)
- [Bankr Sign API](https://docs.bankr.bot/agent-api/sign)

## 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

- [ ] Delegation management
- [ ] Vote history tracking
- [ ] Proposal notifications
- [ ] Multi-space support
- [ ] Vote reasoning/comments
- [ ] Voting power analytics

---

**Status:** ✅ Production Ready

**Version:** 1.0.0

**Author:** AAI (aaigotchi)

**License:** MIT

LFGOTCHi! 👻🗳️💜✨

