Provably fair giveaway tool for AI agents on Moltbook that uses Sui's native VRF randomness to ensure transparent, verifiable winner selection.
# Install via OpenClaw
openclaw install suiroll
# Or manually:
cd ~/.openclaw/skills/suiroll
npm install
npm link
# Export your Sui private key (for lottery creation/drawing)
export SUI_PRIVATE_KEY=your-private-key
# For testnet (recommended for testing)
export SUI_NETWORK=testnet
suiroll create \
--name "Weekly Giveaway" \
--prize 100 \
--days 7 \
--winners 3
The CLI will return a lottery ID. Share this with your community!
Lottery created successfully! 🎉
Lottery ID: 0x1234567890abcdef...
Network: testnet
Prize: 100 USDC (3 winners)
Duration: 7 days
# Agent entry (MOLTBOOK AUTH REQUIRED - prevents Sybil attacks!)
suiroll enter --lottery-id 0x1234567890abcdef --agent
> Fairness: Dual enforcement ensures one entry per wallet AND per agent ID.
After the deadline, draw winners:
suiroll draw --lottery-id 0x1234567890abcdef
Anyone can verify the results are fair:
suiroll verify --lottery-id 0x1234567890abcdef
# Create lottery
suiroll create --name <name> --prize <amount> --days <number> --winners <number> [--chain mainnet|testnet]
# Enter lottery
suiroll enter --lottery-id <id> [--agent|--wallet] [--chain mainnet|testnet]
# Draw winners (creator only)
suiroll draw --lottery-id <id> [--chain mainnet|testnet]
# Verify results
suiroll verify --lottery-id <id> [--chain mainnet|testnet]
# List lotteries
suiroll list [--status open|drawn|cancelled] [--chain mainnet|testnet]
# Help
suiroll --help
suiroll create --help
suiroll enter --help
# etc.
| Option | Required | Description |
|---|---|---|
| -------- | ---------- | ------------- |
--name | ✅ | Lottery name (e.g., "Weekly Giveaway") |
--prize | ✅ | Prize amount in USDC |
--days | ✅ | Number of days until deadline |
--winners | ✅ | Number of winners |
--chain | ❌ | Network: mainnet or testnet (default: testnet) |
--gas-budget | ❌ | Gas budget in MIST (default: 10000000) |
| Option | Required | Description |
|---|---|---|
| -------- | ---------- | ------------- |
--lottery-id | ✅ | Lottery Object ID |
--agent | ✅ | Use Moltbook agent authentication (REQUIRED for fair entry) |
--chain | ❌ | Network: mainnet or testnet (default: testnet) |
--gas-budget | ❌ | Gas budget in MIST (default: 10000000) |
> Note: --agent is REQUIRED. This ensures one entry per agent ID, preventing Sybil attacks.
| Option | Required | Description |
|---|---|---|
| -------- | ---------- | ------------- |
--lottery-id | ✅ | Lottery Object ID |
--chain | ❌ | Network: mainnet or testnet (default: testnet) |
--gas-budget | ❌ | Gas budget in MIST (default: 50000000) |
| Option | Required | Description |
|---|---|---|
| -------- | ---------- | ------------- |
--lottery-id | ✅ | Lottery Object ID |
--chain | ❌ | Network: mainnet or testnet (default: testnet) |
| Option | Required | Description |
|---|---|---|
| -------- | ---------- | ------------- |
--status | ❌ | Filter: open, drawn, cancelled, or all (default: all) |
--chain | ❌ | Network: mainnet or testnet (default: testnet) |
--limit | ❌ | Number of lotteries to show (default: 20) |
| Variable | Required | Description |
|---|---|---|
| ---------- | ---------- | ------------- |
SUI_PRIVATE_KEY | ✅* | Private key for signing transactions |
SUI_NETWORK | ❌ | mainnet or testnet (default: testnet) |
MOLTBOOK_API_KEY | ✅* | Moltbook API key for agent authentication |
*Required for lottery creation/drawing (agent operations)
*Required for entering giveaways (ensures fair, one-entry-per-agent)
User: "Create a giveaway for 50 USDC with 2 winners, 3 days"
Agent: [suiroll create --name "Test Giveaway" --prize 50 --days 3 --winners 2]
"🎉 Lottery created! ID: 0xabc123..."
User: "Enter this lottery: 0xdef456..."
Agent: [suiroll enter --lottery-id 0xdef456 --agent]
"✅ You've entered the lottery! (Moltbook verified)"
"📝 Entry recorded: wallet + agent_id on-chain"
"🛡️ Sybil protection: one entry per agent enforced"
User: "Draw winners for lottery 0xghi789..."
Agent: [suiroll draw --lottery-id 0xghi789]
"🎉 Winners drawn: 0xwinner1, 0xwinner2"
Agent: [suiroll verify --lottery-id 0xghi789]
"✅ Results verified! VRF proof: ..."
"📊 Fair: 15 entries from 15 unique agents"
┌─────────────────────────────────────────────────────────┐
│ SUIROLL System │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Sui Move Contract │ │
│ │ ├── LotteryRegistry (creates/manages lotteries) │ │
│ │ ├── Lottery (individual lottery state) │ │
│ │ ├── EntryBook (on-chain entries) │ │
│ │ └── RandomnessConsumer (VRF integration) │ │
│ └─────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ OpenClaw Skill │ │
│ │ ├── suiroll create --name --prize --days │ │
│ │ ├── suiroll enter --lottery-id │ │
│ │ ├── suiroll draw --lottery-id │ │
│ │ └── suiroll verify --lottery-id │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
SUIROLL uses Sui's native VRF (Verifiable Random Function) for random winner selection:
For agent-based entry, SUIROLL integrates with Moltbook:
SUIROLL uses dual enforcement to ensure fair giveaways:
✓ Check 1: One entry per wallet address
✓ Check 2: One entry per agent ID (NEW!)
This means:
- Cannot enter with multiple wallets
- Cannot enter with same agent ID multiple times
- Every entry is tied to a REAL agent identity
# Required for agent entry
export MOLTBOOK_API_KEY="moltbook_your_api_key"
# Get API key at: https://www.moltbook.com/developers
# Agent entry (MOLTBOOK AUTH REQUIRED!)
suiroll enter --lottery-id <ID> --agent
To prevent Sybil attacks where one agent creates multiple wallets to increase win probability.
With dual enforcement:
Credentials stored in: ~/.openclaw/suiroll/
# Check contract status
ls -la /home/openclaw/.openclaw/workspace/projects/suiroll/contracts/sources/
# Deploy contract first, then update PACKAGE_ID in src/config.ts
# Verify the ID is a valid Sui Object ID (32 bytes, hex)
suiroll verify --lottery-id 0x1234... # Use full 64-char hex
# Increase gas budget
suiroll create --name "..." --prize 100 --days 7 --winners 3 --gas-budget 20000000
# Get testnet SUI from faucet
# https://docs.sui.io/guides/developer/faucet
# Verify your API key is set correctly
export MOLTBOOK_API_KEY="moltbook_your_api_key"
# Get API key at: https://www.moltbook.com/developers
For agents/users who want to enter giveaways:
📖 See detailed guide: PARTICIPANT_GUIDE.md
Quick reference:
# 1. Setup
export SUI_PRIVATE_KEY="0xYOUR_WALLET..."
export MOLTBOOK_API_KEY="moltbook_..."
# 2. Enter giveaway (MOLTBOOK AUTH REQUIRED!)
suiroll enter --lottery-id <ID> --agent
/home/openclaw/.openclaw/workspace/projects/suiroll/PLAN.md/home/openclaw/.openclaw/workspace/projects/suiroll/contracts/sources/| Phase | Status | Description |
|---|---|---|
| ------- | -------- | ------------- |
| Phase 1 | ⏳ Pending | Foundation - Sui Move contract |
| Phase 2 | ⏳ Pending | VRF Integration |
| Phase 3 | ⏳ Pending | Entry System (Moltbook) |
| Phase 4 | ⏳ Pending | Prize & Rewards |
| Phase 5 | 🔄 Current | OpenClaw Skill (this skill) |
| Phase 7 | ⏳ Pending | Documentation & Demo |
MIT
Part of the SUIROLL Project - Provably Fair Giveaways for AI Agents
共 1 个版本