Skip to main content
ClaudeWave
Slash Command65 repo starsupdated yesterday

deploy

Deploy Solana program (devnet first, then mainnet)

Install in Claude Code
Copy
mkdir -p ~/.claude/commands && curl -fsSL https://raw.githubusercontent.com/solanabr/solana-ai-kit/HEAD/.claude/commands/deploy.md -o ~/.claude/commands/deploy.md
Then start a new Claude Code session; the slash command loads automatically.

deploy.md

You are deploying a Solana program. **ALWAYS test on devnet before mainnet.**

## Related Skills

- [deployment.md](../skills/deployment.md) - Full deployment workflow details
- [security.md](../skills/security.md) - Pre-deployment security checklist

## Step 1: Identify Target Network

```bash
echo "🎯 Deployment Target Selection"
echo ""
echo "Choose deployment target:"
echo "  1. devnet (testing - safe, free SOL)"
echo "  2. mainnet (production - REAL SOL, IRREVERSIBLE)"
echo ""

# Check current config
CURRENT_NETWORK=$(solana config get | grep "RPC URL" | awk '{print $3}')
echo "Current network: $CURRENT_NETWORK"
```

**IMPORTANT**: If this is a new program, **ALWAYS deploy to devnet first**.

---

## DEVNET DEPLOYMENT

### Step D1: Configure Devnet

```bash
echo "🌐 Configuring for devnet..."

solana config set --url devnet

# Verify
solana config get
# Should show: RPC URL: https://api.devnet.solana.com
```

### Step D2: Verify Build

```bash
echo "🔨 Building program..."

# Build
if [ -f "Anchor.toml" ]; then
    anchor build
else
    cargo build-sbf
fi

# Check program exists
ls -lh target/deploy/*.so
```

### Step D3: Fund Wallet

```bash
echo "💰 Checking wallet balance..."

solana address
solana balance

# If balance is low, airdrop (devnet only!)
solana airdrop 2

solana balance
```

### Step D4: Deploy to Devnet

```bash
echo "🚀 Deploying to devnet..."

if [ -f "Anchor.toml" ]; then
    anchor deploy --provider.cluster devnet
else
    solana program deploy target/deploy/program.so
fi

# Get program ID
PROGRAM_ID=$(solana address -k target/deploy/program-keypair.json)
echo "✅ Program deployed: $PROGRAM_ID"

# Save program ID
echo $PROGRAM_ID > .program-id-devnet
```

### Step D5: Verify Devnet Deployment

```bash
echo "🔍 Verifying deployment..."

solana program show $PROGRAM_ID

# Explorer link
echo ""
echo "📡 Explorer: https://explorer.solana.com/address/$PROGRAM_ID?cluster=devnet"
```

### Step D6: Test on Devnet

```bash
echo "🧪 Running devnet tests..."

if [ -f "Anchor.toml" ]; then
    anchor test --skip-build --skip-deploy
fi

# Or run custom integration tests
```

### Devnet Checklist

- [ ] Program deployed to devnet
- [ ] Program ID saved
- [ ] Upgrade authority verified
- [ ] Program visible on explorer
- [ ] Basic functionality tested
- [ ] Integration with frontend tested

**Next step**: Test thoroughly on devnet for multiple days before mainnet.

---

## MAINNET DEPLOYMENT

### ⚠️ CRITICAL PRE-DEPLOYMENT CHECKLIST

**STOP: Do NOT proceed to mainnet without ALL items checked:**

- [ ] All tests passing (unit + integration + fuzz)
- [ ] Security audit completed (use /audit-solana)
- [ ] CU usage optimized and verified
- [ ] **Devnet testing successful (multiple days)**
- [ ] Program audited by professional firm (for financial programs)
- [ ] Emergency procedures documented
- [ ] Upgrade authority strategy decided
- [ ] Monitoring/alerts configured

### Step M1: CONFIRMATION REQUIRED

```
🚨 MAINNET DEPLOYMENT CONFIRMATION REQUIRED 🚨

Network: Solana Mainnet-Beta
Program: [program name]
Estimated Cost: [X SOL for deployment + buffer]

This action will:
- Deploy program to MAINNET (IRREVERSIBLE)
- Spend REAL SOL
- Make program publicly accessible
- Potentially handle user funds

⚠️  HAVE YOU COMPLETED:
- [ ] Security audit
- [ ] Professional code review
- [ ] Extensive devnet testing (multiple days)
- [ ] Emergency procedures

Type 'DEPLOY TO MAINNET' to confirm:
```

**DO NOT PROCEED WITHOUT USER CONFIRMATION**

### Step M2: Configure Mainnet

```bash
echo "🌐 Configuring for mainnet..."

solana config set --url mainnet-beta

# VERIFY
solana config get
# Must show: RPC URL: https://api.mainnet-beta.solana.com

# Check wallet and balance
solana address
solana balance
# Need ~3-5 SOL for deployment
```

### Step M3: Final Build Verification

```bash
echo "🔨 Final build verification..."

# Clean build
anchor clean
anchor build --verifiable

# Verify program size
ls -lh target/deploy/*.so

# Run all tests one more time
anchor test

# Security checks
cargo clippy -- -W clippy::all
cargo audit
```

### Step M4: Calculate Deployment Cost

```bash
# Estimate deployment cost
solana program deploy target/deploy/program.so --dry-run

# Ensure you have 2x this amount for safety
```

### Step M5: Deploy to Mainnet

```bash
echo "⚠️  FINAL CONFIRMATION"
echo "Network: $(solana config get | grep 'RPC URL')"
echo "Deployer: $(solana address)"
echo "Balance: $(solana balance)"

# Deploy
anchor deploy --provider.cluster mainnet-beta

# SAVE PROGRAM ID IMMEDIATELY
PROGRAM_ID=$(solana address -k target/deploy/program-keypair.json)
echo "🎯 DEPLOYED PROGRAM ID: $PROGRAM_ID"

# Save to file
echo $PROGRAM_ID > .program-id-mainnet
```

### Step M6: Verify Mainnet Deployment

```bash
# Verify program is on mainnet
solana program show $PROGRAM_ID

# Check upgrade authority
UPGRADE_AUTH=$(solana program show $PROGRAM_ID | grep "Upgrade Authority" | awk '{print $3}')
echo "Upgrade Authority: $UPGRADE_AUTH"

# Explorer
echo "Explorer: https://explorer.solana.com/address/$PROGRAM_ID"

# Verify program binary
solana program dump $PROGRAM_ID program-dump.so
diff target/deploy/program.so program-dump.so
```

### Step M7: Initial Mainnet Testing

**Test with SMALL amounts first!**

```bash
# Test read-only operations first
# Test write operations with MINIMAL amounts (0.01 SOL)
# Monitor for any issues
```

### Step M8: Post-Deployment

```bash
# Save deployment info
cat > deployment-mainnet.json <<EOF
{
  "programId": "$PROGRAM_ID",
  "deployedAt": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
  "deployer": "$(solana address)",
  "network": "mainnet-beta",
  "upgradeAuthority": "$UPGRADE_AUTH"
}
EOF

# Update frontend
echo "NEXT_PUBLIC_PROGRAM_ID=$PROGRAM_ID" >> .env.production
```

### Mainnet Checklist

- [ ] Program deployed successfully
- [ ] Visible on Solana explorer
- [ ] Program ID documented
- [ ] Initial tests passed
- [ ] Monitoring active
- [ ] Emergency procedures ready
- [ ] Team notified
anchor-engineerSubagent

Anchor framework specialist for rapid Solana program development. Use for building programs with Anchor macros, IDL generation, account validation, and standardized patterns. Prioritizes developer experience while maintaining security.\\n\\nUse when: Building new programs quickly, team projects needing standardization, projects requiring IDL for client generation, or when developer experience is prioritized over maximum CU optimization.

defi-engineerSubagent

DeFi integration specialist for composing with Solana protocols including Jupiter, Drift, Kamino, Raydium, Orca, Meteora, Marginfi, and Sanctum. Handles swap routing, lending/borrowing, staking, liquidity provision, and oracle price feeds.\n\nUse when: Integrating DeFi protocols, building swap interfaces, implementing lending/borrowing, setting up yield strategies, working with Pyth/Switchboard oracles, or composing multi-protocol transactions.

devops-engineerSubagent

CI/CD, infrastructure, and deployment specialist for Solana projects. Handles GitHub Actions, Docker, monitoring, RPC management, and Cloudflare Workers edge deployment.\n\nUse when: Setting up CI/CD pipelines, containerizing Solana validators or programs, configuring monitoring and alerting, managing RPC infrastructure, deploying edge workers, or automating build and deploy workflows.

game-architectSubagent

Senior Solana game architect for game system design, Unity/C# architecture, on-chain game state, player progression, NFT integration, and PlaySolana ecosystem. Use for high-level game design decisions, architecture reviews, and planning complex game systems.\n\nUse when: Designing new Solana games from scratch, planning game state on-chain, Unity project architecture, integrating with PlaySolana/PSG1, or deciding between implementation approaches.

mobile-engineerSubagent

React Native and Expo specialist for building Solana mobile dApps. Handles mobile wallet adapter integration, transaction signing UX, deep linking, and mobile-specific performance optimization.\n\nUse when: Building React Native or Expo mobile apps with Solana integration, implementing mobile wallet adapter flows, setting up deep links for transaction signing, or optimizing mobile dApp performance.

pinocchio-engineerSubagent

CU optimization specialist using Pinocchio framework. Use for performance-critical programs requiring 80-95% CU reduction vs Anchor. Specializes in zero-copy access, manual validation, and minimal binary size.\\n\\nUse when: CU limits are being hit, transaction costs are significant at scale, binary size must be minimized, or maximum throughput is required.

rust-backend-engineerSubagent

Rust backend specialist for building async services that interact with Solana blockchain. Builds APIs, indexing services, and off-chain processing using Axum, Tokio, and modern async patterns.\n\nUse when: Building REST/WebSocket APIs for Solana dApps, implementing transaction indexers, creating webhook services, or any Rust backend that interacts with Solana.

solana-architectSubagent

Senior Solana program architect for system design, account structures, PDA schemes, token economics, and cross-program composability. Use for high-level design decisions, architecture reviews, and planning complex multi-program systems.\n\nUse when: Designing new programs from scratch, planning account structures, optimizing PDA schemes, reviewing architecture for security, or deciding between implementation approaches.