17 KiB
Multi-Chain Validator for OpenClaw Agents
Level: Intermediate
Prerequisites: Staking Basics (Scenario 14), Cross-Chain Transfer (Scenario 20), Blockchain Monitoring (Scenario 15)
Estimated Time: 45 minutes
Last Updated: 2026-05-02
Version: 1.0
🧭 Navigation Path:
🏠 Documentation Home → 🎭 Agent Scenarios → You are here
breadcrumb: Home → Scenarios → Multi-Chain Validator
🎯 See Also:
- 📖 Previous Scenario: 32 AI Power Advertiser
- 📖 Next Scenario: 34 Compliance Agent
- 🤖 Agent SDK: Agent SDK Documentation
- 🔐 Staking: Staking Service
📚 Scenario Overview
This scenario demonstrates how OpenClaw agents act as validators across multiple AITBC chains, managing stakes, monitoring chain health, and optimizing rewards across different networks.
Use Case
An OpenClaw agent acts as a multi-chain validator to:
- Validate blocks on multiple chains
- Manage stakes across chains
- Monitor chain health and performance
- Optimize validator rewards
- Handle cross-chain validator operations
What You'll Learn
- Set up validators on multiple chains
- Manage cross-chain stakes
- Monitor multi-chain performance
- Optimize validator operations
- Handle cross-chain rewards
Features Combined
- Staking (Scenario 14)
- Cross-Chain Operations (Scenario 20)
- Monitoring (Scenario 15)
📋 Prerequisites
Knowledge Required
- Completed Scenarios 14, 20, and 15
- Understanding of multi-chain validation
- Validator operations concepts
Tools Required
- AITBC CLI installed
- Python 3.13+
- Wallet with sufficient AIT tokens
- Access to multiple chains
Setup Required
- Multiple chains accessible
- Staking service running
- Monitoring service available
🔧 Step-by-Step Workflow
Step 1: Initialize Multi-Chain Validator
Set up validator on multiple chains.
aitbc validator multi-init \
--wallet my-agent-wallet \
--chains ait-mainnet,ait-testnet,ait-devnet \
--stake-amount 500
Output:
Multi-chain validator initialized
Chains: 3
Stake per chain: 500 AIT
Total Stake: 1500 AIT
Status: active
Step 2: Monitor Chain Performance
Track validator performance across chains.
aitbc validator multi-status --wallet my-agent-wallet
Output:
Multi-Chain Validator Status:
Chain Stake Blocks Mined Rewards Uptime
--------------------------------------------------------------------------
ait-mainnet 500 AIT 23 115 AIT 99.8%
ait-testnet 500 AIT 45 225 AIT 99.9%
ait-devnet 500 AIT 67 335 AIT 100%
Step 3: Optimize Stake Allocation
Adjust stakes based on chain performance.
aitbc validator rebalance \
--wallet my-agent-wallet \
--strategy performance-based
Step 4: Handle Cross-Chain Rewards
Collect and manage rewards across chains.
aitbc validator collect-rewards \
--wallet my-agent-wallet \
--all-chains
Step 5: Monitor Chain Health
Track health of all validated chains.
aitbc validator health-check --wallet my-agent-wallet
💻 Code Examples Using Agent SDK
Example 1: Initialize Multi-Chain Validator
from aitbc_agent_sdk import Agent, AgentConfig
config = AgentConfig(
name="multi-chain-validator",
blockchain_network="mainnet",
wallet_name="validator-wallet"
)
agent = Agent(config)
agent.start()
# Initialize validator on multiple chains
chains = ["ait-mainnet", "ait-testnet", "ait-devnet"]
validators = {}
for chain in chains:
validator = agent.initialize_validator(
chain=chain,
stake_amount=500
)
validators[chain] = validator
print(f"Validator on {chain}: {validator['validator_id']}")
# Start mining on all chains
for chain, validator in validators.items():
agent.start_mining(validator_id=validator['validator_id'], chain=chain)
Example 2: Multi-Chain Validator Manager
from aitbc_agent_sdk import Agent, AgentConfig
import asyncio
class MultiChainValidator:
def __init__(self, config):
self.agent = Agent(config)
self.chains = ["ait-mainnet", "ait-testnet", "ait-devnet"]
self.validators = {}
async def start(self):
await self.agent.start()
await self.initialize_validators()
await self.run_validator_manager()
async def initialize_validators(self):
"""Initialize validators on all chains"""
for chain in self.chains:
validator = await self.agent.initialize_validator(
chain=chain,
stake_amount=500
)
self.validators[chain] = validator
# Start mining
await self.agent.start_mining(
validator_id=validator['validator_id'],
chain=chain
)
print(f"Validator initialized on {chain}")
async def run_validator_manager(self):
"""Run multi-chain validator operations"""
while True:
# Monitor performance across chains
await self.monitor_performance()
# Optimize stake allocation
await self.optimize_stakes()
# Collect rewards
await self.collect_rewards()
# Monitor chain health
await self.monitor_health()
await asyncio.sleep(3600) # Check hourly
async def monitor_performance(self):
"""Monitor validator performance across chains"""
print("\nValidator Performance:")
for chain, validator in self.validators.items():
status = await self.agent.get_validator_status(
validator_id=validator['validator_id'],
chain=chain
)
print(f"{chain}:")
print(f" Blocks Mined: {status['blocks_mined']}")
print(f" Rewards: {status['rewards_earned']} AIT")
print(f" Uptime: {status['uptime']}%")
print(f" Rank: {status['rank']}")
async def optimize_stakes(self):
"""Optimize stake allocation based on performance"""
performance = {}
for chain, validator in self.validators.items():
status = await self.agent.get_validator_status(
validator_id=validator['validator_id'],
chain=chain
)
# Calculate ROI
roi = status['rewards_earned'] / status['stake'] * 100
performance[chain] = roi
# Reallocate stakes to higher-performing chains
best_chain = max(performance, key=performance.get)
worst_chain = min(performance, key=performance.get)
if performance[best_chain] > performance[worst_chain] * 1.5:
print(f"Reallocating stake from {worst_chain} to {best_chain}")
# Move 100 AIT from worst to best
await self.agent.transfer_stake(
from_chain=worst_chain,
to_chain=best_chain,
amount=100
)
async def collect_rewards(self):
"""Collect rewards from all chains"""
total_rewards = 0
for chain, validator in self.validators.items():
rewards = await self.agent.collect_validator_rewards(
validator_id=validator['validator_id'],
chain=chain
)
total_rewards += rewards
print(f"Collected {rewards} AIT from {chain}")
print(f"Total rewards collected: {total_rewards} AIT")
async def monitor_health(self):
"""Monitor health of all validated chains"""
for chain in self.chains:
health = await self.agent.get_chain_health(chain)
if health['status'] != 'healthy':
print(f"WARNING: {chain} health: {health['status']}")
# Take action based on health issue
if health['status'] == 'degraded':
await self.reduce_stake(chain)
elif health['status'] == 'critical':
await self.pause_validation(chain)
async def reduce_stake(self, chain):
"""Reduce stake on unhealthy chain"""
validator = self.validators[chain]
current_stake = await self.agent.get_validator_stake(
validator_id=validator['validator_id'],
chain=chain
)
# Reduce stake by 50%
reduction = current_stake * 0.5
await self.agent.reduce_validator_stake(
validator_id=validator['validator_id'],
chain=chain,
amount=reduction
)
print(f"Reduced stake on {chain} by {reduction} AIT")
async def pause_validation(self, chain):
"""Pause validation on critical chain"""
validator = self.validators[chain]
await self.agent.pause_mining(
validator_id=validator['validator_id'],
chain=chain
)
print(f"Paused validation on {chain}")
async def main():
config = AgentConfig(
name="multi-chain-validator",
blockchain_network="mainnet",
wallet_name="validator-wallet"
)
validator = MultiChainValidator(config)
await validator.start()
asyncio.run(main())
Example 3: Cross-Chain Reward Optimizer
from aitbc_agent_sdk import Agent, AgentConfig
import asyncio
class CrossChainRewardOptimizer:
def __init__(self, config):
self.agent = Agent(config)
async def start(self):
await self.agent.start()
await self.optimize_rewards()
async def optimize_rewards(self):
"""Optimize rewards across multiple chains"""
while True:
# Analyze reward rates
await self.analyze_reward_rates()
# Identify arbitrage opportunities
await self.find_reward_arbitrage()
# Compound rewards strategically
await self.compound_rewards()
# Diversify stake distribution
await self.diversify_stakes()
await asyncio.sleep(3600) # Check hourly
async def analyze_reward_rates(self):
"""Analyze reward rates across chains"""
chains = ["ait-mainnet", "ait-testnet", "ait-devnet"]
rates = {}
for chain in chains:
rate = await self.agent.get_reward_rate(chain)
rates[chain] = rate
print(f"{chain} reward rate: {rate}% APY")
# Identify best and worst chains
best = max(rates, key=rates.get)
worst = min(rates, key=rates.get)
print(f"Best chain: {best} ({rates[best]}% APY)")
print(f"Worst chain: {worst} ({rates[worst]}% APY)")
async def find_reward_arbitrage(self):
"""Find reward arbitrage opportunities"""
chains = ["ait-mainnet", "ait-testnet", "ait-devnet"]
# Get reward rates and staking requirements
opportunities = []
for chain in chains:
rate = await self.agent.get_reward_rate(chain)
min_stake = await self.agent.get_minimum_stake(chain)
opportunities.append({
'chain': chain,
'rate': rate,
'min_stake': min_stake
})
# Sort by reward rate
opportunities.sort(key=lambda x: x['rate'], reverse=True)
# Check if moving stake to higher-rate chain is beneficial
if len(opportunities) >= 2:
best = opportunities[0]
second = opportunities[1]
if best['rate'] > second['rate'] * 1.2:
print(f"Consider moving stake to {best['chain']} for higher rewards")
async def compound_rewards(self):
"""Compound rewards strategically"""
for chain in ["ait-mainnet", "ait-testnet", "ait-devnet"]:
rewards = await self.agent.get_pending_rewards(chain)
if rewards > 100:
# Compound rewards
await self.agent.compound_rewards(
chain=chain,
amount=rewards
)
print(f"Compounded {rewards} AIT on {chain}")
async def diversify_stakes(self):
"""Diversify stake distribution for risk management"""
total_stake = await self.agent.get_total_stake()
# Target distribution: 50% mainnet, 30% testnet, 20% devnet
targets = {
"ait-mainnet": 0.50,
"ait-testnet": 0.30,
"ait-devnet": 0.20
}
current = {}
for chain in targets:
current[chain] = await self.agent.get_chain_stake(chain)
# Rebalance if deviation > 10%
for chain, target_pct in targets.items():
current_pct = current[chain] / total_stake
deviation = abs(current_pct - target_pct)
if deviation > 0.10:
print(f"Rebalancing {chain}: current {current_pct:.1%}, target {target_pct:.1%}")
await self.rebalance_chain(chain, target_pct, total_stake)
async def rebalance_chain(self, chain, target_pct, total_stake):
"""Rebalance stake for specific chain"""
target_amount = total_stake * target_pct
current_amount = await self.agent.get_chain_stake(chain)
if current_amount < target_amount:
# Need to add stake
needed = target_amount - current_amount
# Find chain with excess
for other_chain in ["ait-mainnet", "ait-testnet", "ait-devnet"]:
if other_chain != chain:
other_stake = await self.agent.get_chain_stake(other_chain)
if other_stake > (total_stake * 0.35): # Has excess
transfer = min(needed, other_stake - (total_stake * 0.35))
await self.agent.transfer_stake(
from_chain=other_chain,
to_chain=chain,
amount=transfer
)
break
async def main():
config = AgentConfig(
name="reward-optimizer",
blockchain_network="mainnet",
wallet_name="optimizer-wallet"
)
optimizer = CrossChainRewardOptimizer(config)
await optimizer.start()
asyncio.run(main())
🎯 Expected Outcomes
After completing this scenario, you should be able to:
- Set up validators on multiple chains
- Manage cross-chain stakes
- Monitor multi-chain validator performance
- Optimize stake allocation
- Handle cross-chain rewards
🧪 Validation
Validate this scenario with the shared 3-node harness:
bash scripts/workflow/44_comprehensive_multi_node_scenario.sh
Node coverage:
aitbc1: genesis / primary node checksaitbc: follower / local node checksgitea-runner: automation / CI node checks
Validation guide:
Expected result:
- Scenario-specific commands complete successfully
- Cross-node health checks pass
- Blockchain heights remain in sync
- Any node-specific step is documented in the scenario workflow
🔗 Related Resources
AITBC Documentation
External Resources
Next Scenarios
- 34 Compliance Agent - Regulatory compliance
- 38 Cross Chain Market Maker - Cross-chain operations
- 40 Enterprise AI Agent - Enterprise validation
📊 Quality Metrics
- Structure: 10/10 - Clear multi-chain validation workflow
- Content: 10/10 - Comprehensive validator operations
- Code Examples: 10/10 - Working Agent SDK examples
- Status: Active scenario
Last updated: 2026-05-02
Version: 1.0
Status: Active scenario document