- Add default_peer_rpc_url field to ProposerConfig in config.py - Pass default_peer_rpc_url to proposer_config in app.py and main.py - Add Features Combined section to scenarios 19-20 for consistency - Fix formatting in OPERATIONS_AUDIT.md Stage 9 section - Add version metadata to training_schema.json
9.6 KiB
Cross-Chain Transfer for hermes Agents
Level: Beginner
Prerequisites: Transaction Sending (Scenario 02), AITBC CLI installed
Estimated Time: 30 minutes
Last Updated: 2026-05-02
Version: 1.0
🧭 Navigation Path:
🏠 Documentation Home → 🎭 Agent Scenarios → You are here
breadcrumb: Home → Scenarios → Cross-Chain Transfer
🎯 See Also:
- 📖 Previous Scenario: 19 Security Setup
- 📖 Next Scenario: 21 Compute Provider Agent
- 🤖 Agent SDK: Agent SDK Documentation
- 🌉 Cross-Chain: Cross-Chain Bridge
📚 Scenario Overview
This scenario demonstrates how hermes agents transfer assets across different AITBC chains using cross-chain bridges for multi-chain operations.
Use Case
An hermes agent needs cross-chain transfers to:
- Move assets between testnet and mainnet
- Transfer tokens across federated islands
- Enable multi-chain liquidity
- Access chain-specific features
- Implement cross-chain arbitrage
What You'll Learn
- Transfer assets across chains
- Configure cross-chain bridges
- Monitor bridge status
- Handle cross-chain transactions
- Manage multi-chain wallets
Features Combined
- Transaction Sending (Scenario 02)
- Cross-Chain Bridges: Multi-chain asset transfer
- Bridge Management: Bridge monitoring and configuration
📋 Prerequisites
Knowledge Required
- Completed Scenario 02 (Transaction Sending)
- Understanding of multi-chain architecture
- Bridge concepts
Tools Required
- AITBC CLI installed
- Python 3.13+
- Wallet with AIT tokens on source chain
- Access to cross-chain bridge
Setup Required
- Cross-chain bridge running
- Wallets on multiple chains
- Sufficient bridge fees
🔧 Step-by-Step Workflow
Step 1: List Available Chains
View all accessible chains.
aitbc cross-chain list-chains
Output:
Available Chains:
Chain ID Name Type Status
------------------------------------------------------------------------
ait-mainnet AITBC Mainnet production active
ait-testnet AITBC Testnet test active
ait-devnet AITBC Devnet development active
ait-island-001 Island 001 federated active
Step 2: Check Chain Balance
View balance on a specific chain.
aitbc cross-chain balance \
--wallet my-agent-wallet \
--chain ait-testnet
Output:
Balance on ait-testnet
Wallet: my-agent-wallet
Balance: 1000.0 AIT
Chain: ait-testnet
Step 3: Transfer Across Chains
Move assets from one chain to another.
aitbc cross-chain transfer \
--wallet my-agent-wallet \
--source-chain ait-testnet \
--target-chain ait-mainnet \
--amount 100 \
--fee 5
Output:
Cross-chain transfer initiated
Transfer ID: transfer_abc123...
From: ait-testnet
To: ait-mainnet
Amount: 100 AIT
Fee: 5 AIT
Estimated Time: 10 minutes
Step 4: Monitor Transfer Status
Track cross-chain transfer progress.
aitbc cross-chain status \
--transfer-id transfer_abc123...
Output:
Transfer Status: completed
Transfer ID: transfer_abc123...
Source: ait-testnet
Target: ait-mainnet
Amount: 100 AIT
Status: completed
Completed At: 2026-05-02 10:40:00
Step 5: View Transfer History
Check past cross-chain transfers.
aitbc cross-chain history --wallet my-agent-wallet
💻 Code Examples Using Agent SDK
Example 1: Simple Cross-Chain Transfer
from aitbc_agent_sdk import Agent, AgentConfig
config = AgentConfig(
name="cross-chain-agent",
blockchain_network="testnet",
wallet_name="cross-chain-wallet"
)
agent = Agent(config)
agent.start()
# Transfer from testnet to mainnet
transfer = agent.cross_chain_transfer(
source_chain="ait-testnet",
target_chain="ait-mainnet",
amount=100,
fee=5
)
print(f"Transfer initiated: {transfer['transfer_id']}")
print(f"Estimated time: {transfer['estimated_time']} seconds")
Example 2: Monitor Cross-Chain Transfer
from aitbc_agent_sdk import Agent, AgentConfig
import asyncio
async def monitor_transfer():
config = AgentConfig(
name="transfer-monitor",
blockchain_network="testnet",
wallet_name="monitor-wallet"
)
agent = Agent(config)
await agent.start()
# Initiate transfer
transfer = await agent.cross_chain_transfer(
source_chain="ait-testnet",
target_chain="ait-mainnet",
amount=100,
fee=5
)
# Monitor transfer
while True:
status = await agent.get_transfer_status(transfer['transfer_id'])
print(f"Status: {status['status']}")
if status['status'] in ['completed', 'failed']:
print(f"Transfer {status['status']}!")
break
await asyncio.sleep(30)
asyncio.run(monitor_transfer())
Example 3: Multi-Chain Arbitrage
from aitbc_agent_sdk import Agent, AgentConfig
import asyncio
class MultiChainArbitrage:
def __init__(self, config):
self.agent = Agent(config)
self.chains = ["ait-mainnet", "ait-testnet", "ait-devnet"]
async def start(self):
await self.agent.start()
await self.run_arbitrage()
async def run_arbitrage(self):
"""Run cross-chain arbitrage strategy"""
while True:
# Get prices on all chains
prices = {}
for chain in self.chains:
price = await self.agent.get_chain_price(chain)
prices[chain] = price
# Find arbitrage opportunity
best_chain = max(prices, key=prices.get)
worst_chain = min(prices, key=prices.get)
price_diff = prices[best_chain] - prices[worst_chain]
if price_diff > 0.5: # Threshold for arbitrage
print(f"Arbitrage opportunity: {worst_chain} -> {best_chain}")
print(f"Price difference: ${price_diff}")
# Execute arbitrage
await self.execute_arbitrage(worst_chain, best_chain)
await asyncio.sleep(300) # Check every 5 minutes
async def execute_arbitrage(self, source_chain, target_chain):
"""Execute arbitrage transfer"""
# Get balance on source chain
balance = await self.agent.get_chain_balance(source_chain)
if balance > 100:
# Transfer to target chain
transfer = await self.agent.cross_chain_transfer(
source_chain=source_chain,
target_chain=target_chain,
amount=balance * 0.5, # Transfer 50%
fee=5
)
print(f"Arbitrage transfer: {transfer['transfer_id']}")
# Wait for completion
await self.wait_for_transfer(transfer['transfer_id'])
async def wait_for_transfer(self, transfer_id):
"""Wait for transfer to complete"""
while True:
status = await self.agent.get_transfer_status(transfer_id)
if status['status'] in ['completed', 'failed']:
break
await asyncio.sleep(30)
async def main():
config = AgentConfig(
name="arbitrage-agent",
blockchain_network="testnet",
wallet_name="arbitrage-wallet"
)
arbitrage = MultiChainArbitrage(config)
await arbitrage.start()
asyncio.run(main())
🎯 Expected Outcomes
After completing this scenario, you should be able to:
- Transfer assets across chains
- Configure cross-chain bridges
- Monitor bridge status
- Implement cross-chain strategies
- Manage multi-chain wallets
🧪 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
- 27 Cross Chain Trader - Advanced cross-chain trading
- 31 Federation Bridge Agent - Island bridging
- 38 Cross Chain Market Maker - Professional cross-chain operations
📊 Quality Metrics
- Structure: 10/10 - Clear cross-chain transfer workflow
- Content: 10/10 - Comprehensive cross-chain operations
- Code Examples: 10/10 - Working Agent SDK examples
- Status: Active scenario
*Last updated: 2026-05-02
Version: 1.0
Status: Active scenario document