Ozon-cli (PLEASE NOTE - We are currently in the development stage , So mainnet deployments are not live yet. please stick to our Devnet and have fun).
Command-line interface for interacting with the Ozon restaking protocol on Solana. Manage operators and AVS (Actively Validated Services) registrations directly from your terminal.
🚀 Features
- Operator Management: Register, update, and de-register operators with bond staking
- AVS Management: Register and manage Actively Validated Services
- Multi-Cluster Support: Works with Solana devnet, testnet, and mainnet
- Flexible Wallet Options: Use default or custom wallet configurations
- Transaction Verification: Get detailed transaction signatures for all operations
📦 Installation
Install from crates.io (Recommended)
Install from Source(Repo is private as of now - use the above option)
Verify Installation
🔧 Prerequisites
Before using ozon-cli, ensure you have:
- Rust and Cargo installed (rustup)
- Solana CLI tools installed (Solana Docs)
- A Solana wallet configured
Setting Up Your Solana Wallet
# Create a new wallet (if you don't have one)
# Set cluster to devnet for testing
# Check your wallet address
# Get devnet SOL for testing (devnet only)
📖 Usage
Basic Command Structure
Global Options
--cluster <CLUSTER>: Specify Solana cluster (devnet, testnet, mainnet) [default: devnet]--wallet <PATH>: Path to wallet keypair file [default: ~/.config/solana/id.json]--help: Display help information--version: Display version information
🎯 Commands
1. Initialize Operator
Register a new operator with the Ozon protocol by staking a bond amount.
Syntax:
Parameters:
--bond-amount: Amount of SOL to bond in lamports (minimum: 2 SOL = 2,000,000,000 lamports)--metadata: Metadata describing your operator (e.g., "My Operator Node")--cluster: Network cluster (devnet, testnet, mainnet) [default: devnet]--wallet: Path to wallet file [default: ~/.config/solana/id.json]
Example:
# Register operator with 5 SOL bond on devnet
# Register on mainnet with custom wallet
Output:
🔍 Debug info:
Program ID: 6UqcKJ3U7zfr5JkhzjDZQsunbJeFBxgCKYbuMw8Scv6B
Operator key: 8xYz...AbCd
Operator account PDA: 9pQw...XyZa
Vault PDA: 7mNb...LmNo
Bond amount: 5000000000
Metadata: Acme Validator Services
✅ Operator initialized with tx 3kL9...8fH2
2. De-register Operator
Remove your operator registration and reclaim your bonded SOL.
Syntax:
Parameters:
--cluster: Network cluster [default: devnet]--wallet: Path to wallet file [default: ~/.config/solana/id.json]
Example:
# De-register operator on devnet
# De-register on mainnet with custom wallet
Output:
🔍 Debug info:
Program ID: 6UqcKJ3U7zfr5JkhzjDZQsunbJeFBxgCKYbuMw8Scv6B
Operator key: 8xYz...AbCd
Operator account PDA: 9pQw...XyZa
Vault PDA: 7mNb...LmNo
✅ Operator de-registered with tx 2jK8...9gI1
3. Register AVS
Register a new Actively Validated Service (AVS) with the protocol.
Syntax:
Parameters:
--name: Name/metadata for your AVS--registration-fee: Registration fee in lamports (minimum: 3 SOL = 3,000,000,000 lamports)--cluster: Network cluster [default: devnet]--wallet: Path to wallet file [default: ~/.config/solana/id.json]
Example:
# Register AVS on devnet
# Register on mainnet
Output:
🔍 Debug info:
Program ID: 6UqcKJ3U7zfr5JkhzjDZQsunbJeFBxgCKYbuMw8Scv6B
AVS owner: 8xYz...AbCd
AVS account PDA: 4sWx...KlMn
Treasury PDA: 6tRy...PqRs
Registration fee: 3000000000
Avs Name: Oracle Price Feeds
✅ Avs registered with tx 5nM7...3pQ9
4. Update AVS Metadata
Update the metadata/name of your registered AVS.
Syntax:
Parameters:
--name: New name/metadata for your AVS--cluster: Network cluster [default: devnet]--wallet: Path to wallet file [default: ~/.config/solana/id.json]
Example:
# Update AVS metadata
# Update on mainnet
Output:
🔍 Debug info:
Program ID: 6UqcKJ3U7zfr5JkhzjDZQsunbJeFBxgCKYbuMw8Scv6B
AVS owner: 8xYz...AbCd
AVS account PDA: 4sWx...KlMn
New Avs Name: Oracle Price Feeds v2.0
✅ AVS metadata updated with tx 7oL6...4rH8
5. De-register AVS
Remove your AVS registration from the protocol.
Syntax:
Parameters:
--cluster: Network cluster [default: devnet]--wallet: Path to wallet file [default: ~/.config/solana/id.json]
Example:
# De-register AVS on devnet
# De-register on mainnet(comming soon)
Output:
🔍 Debug info:
Program ID: 6UqcKJ3U7zfr5JkhzjDZQsunbJeFBxgCKYbuMw8Scv6B
AVS owner: 8xYz...AbCd
AVS account PDA: 4sWx...KlMn
✅ AVS de-registered with tx 9kP4...2sG7
💡 Common Workflows
Setting Up as an Operator
# 1. Check your balance
# 2. Request airdrop if on devnet
# 3. Register as operator
# 4. Verify transaction on explorer
# Visit: https://explorer.solana.com/tx/<SIGNATURE>?cluster=devnet
Setting Up an AVS
# 1. Ensure you have enough SOL
# 2. Register your AVS
# 3. Update name later if needed
Switching Between Clusters
# Development/Testing on devnet
# Production on mainnet
🔐 Security Best Practices
- Protect Your Wallet: Never share your private key file
- Test on Devnet First: Always test operations on devnet before mainnet
- Use Hardware Wallets: Consider using Ledger for mainnet operations
- Backup Your Keys: Store wallet backups in secure locations
- Verify Transactions: Always check transaction signatures on Solana Explorer
🐛 Troubleshooting
Issue: "Command not found"
# Ensure cargo bin is in your PATH
# Add to your shell profile (~/.bashrc, ~/.zshrc)
Issue: "Insufficient funds"
# Check your balance
# On devnet, request airdrop
# On mainnet, ensure you have enough SOL
Issue: "Invalid cluster"
Supported clusters are:
devnet(default)testnetmainnetormainnet-beta(coming soon)
Issue: "Unauthorized action"
Ensure you're using the correct wallet that owns the operator/AVS you're trying to modify.
📊 Transaction Verification
After each command, you'll receive a transaction signature. Verify it on Solana Explorer:
Devnet:
https://explorer.solana.com/tx/<SIGNATURE>?cluster=devnet
Mainnet:
https://explorer.solana.com/tx/<SIGNATURE>
🔗 Program Information
- Program ID:
6UqcKJ3U7zfr5JkhzjDZQsunbJeFBxgCKYbuMw8Scv6B - Network: Solana (devnet, testnet, mainnet)
- Repository: [
we will share this once we make our repo public]
📚 Resources
📄 License
This project is licensed under the Apache-2.0 License - see the LICENSE file for details.
💬 Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
🎉 Acknowledgments
Built with:
Made with ❤️ by the Ozon Team