Deployment Guide
This guide covers deploying the AgenC Coordination Protocol to Solana devnet and mainnet.
Deployment Guide
This guide covers deploying the AgenC Coordination Protocol to Solana devnet and mainnet.
Prerequisites
Required Tools
bash
# Solana CLI
sh -c "$(curl -sSfL https://release.solana.com/v3.0.13/install)"
# Anchor Framework
cargo install --git https://github.com/coral-xyz/anchor anchor-cli --tag v0.32.1 --locked
# Node.js (for Anchor tests)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejsVerify Installation
bash
solana --version # Should be 3.0.13+
anchor --version # Should be 0.32.1+
node --version # Should be 18+Devnet Deployment
Step 1: Configure Wallet
bash
# Create new keypair (or use existing)
solana-keygen new -o ~/.config/solana/deployer.json
# Set as default
solana config set --keypair ~/.config/solana/deployer.json
# Set to devnet
solana config set --url https://api.devnet.solana.com
# Verify
solana config getStep 2: Fund Wallet
bash
# Airdrop SOL (may need multiple attempts)
solana airdrop 2
solana airdrop 2
solana airdrop 2
# Check balance (need ~6 SOL for deployment)
solana balanceStep 3: Build Program
bash
cd programs/agenc-coordination
# Build
anchor build
# Get program keypair
ls -la target/deploy/
# View program ID
solana-keygen pubkey target/deploy/agenc_coordination-keypair.jsonStep 4: Update Program ID
Edit programs/agenc-coordination/src/lib.rs:
rust
declare_id!("YOUR_PROGRAM_ID_HERE");Edit Anchor.toml:
toml
[programs.devnet]
agenc_coordination = "YOUR_PROGRAM_ID_HERE"Rebuild after updating:
bash
anchor buildStep 5: Deploy
bash
# Deploy to devnet
anchor deploy --provider.cluster devnet
# Or using solana CLI directly
solana program deploy \
--program-id target/deploy/agenc_coordination-keypair.json \
target/deploy/agenc_coordination.soStep 6: Initialize Protocol
Create initialization script scripts/initialize.ts:
typescript
import * as anchor from "@coral-xyz/anchor";
import { Program } from "@coral-xyz/anchor";
import { AgencCoordination } from "../target/types/agenc_coordination";
async function main() {
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const program = anchor.workspace.AgencCoordination as ProgramAgencCoordination>;
const [protocolConfig] = anchor.web3.PublicKey.findProgramAddressSync(
[Buffer.from("protocol")],
program.programId
);
const treasury = anchor.web3.Keypair.generate();
await program.methods
.initializeProtocol(
51, // dispute_threshold (51%)
100, // protocol_fee_bps (1%)
new anchor.BN(1_000_000) // min_stake (0.001 SOL)
)
.accounts({
protocolConfig,
treasury: treasury.publicKey,
authority: provider.wallet.publicKey,
systemProgram: anchor.web3.SystemProgram.programId,
})
.rpc();
console.log("Protocol initialized!");
console.log("Protocol config:", protocolConfig.toBase58());
console.log("Treasury:", treasury.publicKey.toBase58());
}
main().catch(console.error);Run:
bash
npx ts-node scripts/initialize.tsStep 7: Verify Deployment
bash
# Check program
solana program show YOUR_PROGRAM_ID
# Check protocol config account
solana account PROTOCOL_CONFIG_PDAMainnet Deployment
Important Considerations
- Security Audit: Have the program audited before mainnet
- Upgrade Authority: Decide on upgrade authority strategy
- Testing: Extensive testing on devnet first
- Monitoring: Set up monitoring and alerting
Step 1: Prepare Mainnet Wallet
bash
# Use a hardware wallet for mainnet
solana config set --keypair usb://ledger
# Or use a secure file keypair
solana-keygen new -o ~/.config/solana/mainnet-deployer.json --forceStep 2: Configure for Mainnet
bash
solana config set --url https://api.mainnet-beta.solana.comUpdate Anchor.toml:
toml
[programs.mainnet]
agenc_coordination = "YOUR_MAINNET_PROGRAM_ID"
[provider]
cluster = "mainnet"Step 3: Deploy
bash
# Ensure sufficient SOL (~10 SOL recommended)
solana balance
# Deploy
anchor deploy --provider.cluster mainnetStep 4: Initialize with Production Parameters
typescript
await program.methods
.initializeProtocol(
66, // Higher threshold for mainnet (66%)
50, // Lower fee (0.5%)
new anchor.BN(100_000_000) // Higher stake (0.1 SOL)
)
// ...Step 5: Renounce or Transfer Upgrade Authority
bash
# Option 1: Make program immutable (cannot upgrade)
solana program set-upgrade-authority YOUR_PROGRAM_ID --final
# Option 2: Transfer to multisig
solana program set-upgrade-authority YOUR_PROGRAM_ID \
--new-upgrade-authority MULTISIG_ADDRESSUpgrading the Program
Devnet Upgrade
bash
# Build new version
anchor build
# Deploy upgrade
anchor upgrade target/deploy/agenc_coordination.so \
--program-id YOUR_PROGRAM_ID \
--provider.cluster devnetMainnet Upgrade (with Multisig)
bash
# Create upgrade proposal
solana program write-buffer target/deploy/agenc_coordination.so
# Transfer buffer authority to multisig
solana program set-buffer-authority BUFFER_ADDRESS \
--new-buffer-authority MULTISIG_ADDRESS
# Execute upgrade via multisigEnvironment Configuration
Devnet `.env`
env
ANCHOR_PROVIDER_URL=https://api.devnet.solana.com
ANCHOR_WALLET=~/.config/solana/deployer.json
PROGRAM_ID=YOUR_DEVNET_PROGRAM_IDMainnet `.env`
env
ANCHOR_PROVIDER_URL=https://api.mainnet-beta.solana.com
ANCHOR_WALLET=~/.config/solana/mainnet-deployer.json
PROGRAM_ID=YOUR_MAINNET_PROGRAM_IDTroubleshooting
Deployment Fails with Insufficient Funds
bash
# Check rent requirements
solana rent 500000 # Size in bytes
# Airdrop more (devnet only)
solana airdrop 2Transaction Simulation Failed
bash
# Enable verbose logging
RUST_LOG=solana_runtime::system_instruction_processor=trace anchor deployProgram Account Already Exists
bash
# Close and reclaim rent (devnet only)
solana program close YOUR_PROGRAM_ID