Add full monorepo: virtual-banker, backend, frontend, docs, scripts, deployment
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
286
docs/DEPLOYMENT_METHOD_VALIDATOR.md
Normal file
286
docs/DEPLOYMENT_METHOD_VALIDATOR.md
Normal file
@@ -0,0 +1,286 @@
|
||||
# Validator Deployment Guide - ChainID 138
|
||||
|
||||
**Date**: 2025-01-12
|
||||
**Purpose**: Guide for deploying contracts via validator nodes when RPC deployment fails
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
Validator nodes typically have full network permissions and may be able to deploy contracts even when RPC nodes cannot. This guide explains how to deploy contracts via validator nodes.
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. **Validator Node Access**
|
||||
- SSH access to validator node
|
||||
- Validator node IP: 192.168.11.100-104
|
||||
- Validator VMID: 1000-1004
|
||||
|
||||
2. **Network Configuration**
|
||||
- ChainID: 138
|
||||
- RPC Endpoint: (validator node)
|
||||
- Deployer Account: (with sufficient balance)
|
||||
|
||||
3. **Required Tools**
|
||||
- Foundry (forge, cast)
|
||||
- SSH access
|
||||
- Contract source code
|
||||
|
||||
---
|
||||
|
||||
## Step-by-Step Deployment
|
||||
|
||||
### Step 1: Access Validator Node
|
||||
|
||||
```bash
|
||||
# SSH into validator node
|
||||
ssh root@192.168.11.100
|
||||
|
||||
# Or via Proxmox
|
||||
pct enter 1000
|
||||
```
|
||||
|
||||
### Step 2: Verify Validator Status
|
||||
|
||||
```bash
|
||||
# Check Besu service status
|
||||
systemctl status besu-validator
|
||||
|
||||
# Check if validator is synced
|
||||
cast block-number --rpc-url http://localhost:8545
|
||||
|
||||
# Verify chain ID
|
||||
cast chain-id --rpc-url http://localhost:8545
|
||||
```
|
||||
|
||||
### Step 3: Prepare Deployment Environment
|
||||
|
||||
```bash
|
||||
# Create deployment directory
|
||||
mkdir -p /tmp/contract-deployment
|
||||
cd /tmp/contract-deployment
|
||||
|
||||
# Initialize Foundry project
|
||||
forge init --no-git --force .
|
||||
|
||||
# Copy contract source
|
||||
# (Copy MockLinkToken.sol to src/MockLinkToken.sol)
|
||||
```
|
||||
|
||||
### Step 4: Configure Deployment
|
||||
|
||||
```bash
|
||||
# Set environment variables
|
||||
export RPC_URL="http://localhost:8545"
|
||||
export PRIVATE_KEY="<your-deployer-private-key>"
|
||||
export GAS_PRICE="20000000000" # 20 gwei
|
||||
export GAS_LIMIT="10000000" # 10M gas
|
||||
```
|
||||
|
||||
### Step 5: Deploy Contract
|
||||
|
||||
#### Method 1: Using forge create
|
||||
|
||||
```bash
|
||||
forge create src/MockLinkToken.sol:MockLinkToken \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--private-key "$PRIVATE_KEY" \
|
||||
--gas-price "$GAS_PRICE" \
|
||||
--gas-limit "$GAS_LIMIT" \
|
||||
--legacy \
|
||||
--broadcast
|
||||
```
|
||||
|
||||
#### Method 2: Using forge script
|
||||
|
||||
```bash
|
||||
# Create deployment script
|
||||
cat > script/DeployMockLinkToken.s.sol << 'EOF'
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8.19;
|
||||
|
||||
import {Script} from "forge-std/Script.sol";
|
||||
import {MockLinkToken} from "../src/MockLinkToken.sol";
|
||||
|
||||
contract DeployMockLinkToken is Script {
|
||||
function run() external returns (MockLinkToken) {
|
||||
vm.startBroadcast();
|
||||
MockLinkToken token = new MockLinkToken();
|
||||
vm.stopBroadcast();
|
||||
return token;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
# Deploy
|
||||
forge script script/DeployMockLinkToken.s.sol:DeployMockLinkToken \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--private-key "$PRIVATE_KEY" \
|
||||
--broadcast \
|
||||
--gas-price "$GAS_PRICE" \
|
||||
--gas-limit "$GAS_LIMIT" \
|
||||
--legacy
|
||||
```
|
||||
|
||||
### Step 6: Verify Deployment
|
||||
|
||||
```bash
|
||||
# Get deployed contract address from output
|
||||
CONTRACT_ADDRESS="<deployed-address>"
|
||||
|
||||
# Verify contract exists
|
||||
cast code "$CONTRACT_ADDRESS" --rpc-url "$RPC_URL"
|
||||
|
||||
# Test contract functions
|
||||
cast call "$CONTRACT_ADDRESS" "name()" --rpc-url "$RPC_URL"
|
||||
cast call "$CONTRACT_ADDRESS" "symbol()" --rpc-url "$RPC_URL"
|
||||
cast call "$CONTRACT_ADDRESS" "totalSupply()" --rpc-url "$RPC_URL"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Alternative: Direct Validator Deployment Script
|
||||
|
||||
Create a deployment script that can be run on validator nodes:
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
# Deploy MockLinkToken on Validator Node
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
RPC_URL="${1:-http://localhost:8545}"
|
||||
PRIVATE_KEY="${2:-}"
|
||||
GAS_PRICE="${3:-20000000000}"
|
||||
GAS_LIMIT="${4:-10000000}"
|
||||
|
||||
if [ -z "$PRIVATE_KEY" ]; then
|
||||
echo "Error: PRIVATE_KEY not provided"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploying MockLinkToken..."
|
||||
echo "RPC: $RPC_URL"
|
||||
echo "Gas Price: $GAS_PRICE"
|
||||
echo "Gas Limit: $GAS_LIMIT"
|
||||
echo ""
|
||||
|
||||
# Deploy
|
||||
DEPLOY_OUTPUT=$(forge create src/MockLinkToken.sol:MockLinkToken \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--private-key "$PRIVATE_KEY" \
|
||||
--gas-price "$GAS_PRICE" \
|
||||
--gas-limit "$GAS_LIMIT" \
|
||||
--legacy \
|
||||
--broadcast 2>&1)
|
||||
|
||||
echo "$DEPLOY_OUTPUT"
|
||||
|
||||
# Extract contract address
|
||||
CONTRACT_ADDRESS=$(echo "$DEPLOY_OUTPUT" | grep -oE "Deployed to: 0x[0-9a-fA-F]{40}" | awk '{print $3}' || echo "")
|
||||
|
||||
if [ -n "$CONTRACT_ADDRESS" ]; then
|
||||
echo ""
|
||||
echo "✅ Contract deployed: $CONTRACT_ADDRESS"
|
||||
echo ""
|
||||
echo "Verifying deployment..."
|
||||
CODE=$(cast code "$CONTRACT_ADDRESS" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
||||
if [ -n "$CODE" ] && [ "$CODE" != "0x" ] && [ ${#CODE} -gt 100 ]; then
|
||||
echo "✅ Contract verified on-chain"
|
||||
else
|
||||
echo "⚠️ Contract not found on-chain"
|
||||
fi
|
||||
else
|
||||
echo "❌ Deployment failed"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Issue: Cannot Access Validator Node
|
||||
|
||||
**Solution**:
|
||||
- Verify SSH access is configured
|
||||
- Check Proxmox container status
|
||||
- Ensure network connectivity
|
||||
|
||||
### Issue: Validator Not Synced
|
||||
|
||||
**Solution**:
|
||||
- Wait for validator to sync
|
||||
- Check validator logs: `journalctl -u besu-validator -f`
|
||||
- Verify validator is producing blocks
|
||||
|
||||
### Issue: Deployment Still Fails
|
||||
|
||||
**Solution**:
|
||||
- Check validator logs for errors
|
||||
- Verify deployer account has sufficient balance
|
||||
- Try with different gas settings
|
||||
- Check if validator has deployment permissions
|
||||
|
||||
---
|
||||
|
||||
## Security Considerations
|
||||
|
||||
1. **Validator Access**
|
||||
- Validator nodes are critical infrastructure
|
||||
- Only authorized personnel should access
|
||||
- Follow network security policies
|
||||
|
||||
2. **Private Key Security**
|
||||
- Never store private keys on validator nodes
|
||||
- Use secure key management
|
||||
- Rotate keys regularly
|
||||
|
||||
3. **Deployment Verification**
|
||||
- Always verify deployed contracts
|
||||
- Check contract bytecode matches source
|
||||
- Test contract functions after deployment
|
||||
|
||||
---
|
||||
|
||||
## Network Administrator Contact
|
||||
|
||||
If validator deployment also fails:
|
||||
|
||||
1. **Contact Network Administrators**
|
||||
- Provide deployment logs
|
||||
- Share diagnostic report
|
||||
- Request investigation
|
||||
|
||||
2. **Request Manual Deployment**
|
||||
- Provide contract bytecode
|
||||
- Request network administrator to deploy
|
||||
- Verify deployment after completion
|
||||
|
||||
---
|
||||
|
||||
## Next Steps
|
||||
|
||||
After successful deployment:
|
||||
|
||||
1. **Update Configuration**
|
||||
- Update `.env` with contract address
|
||||
- Update CCIP configuration
|
||||
- Update token lists
|
||||
|
||||
2. **Verify Integration**
|
||||
- Test contract with CCIP bridge
|
||||
- Verify token transfers work
|
||||
- Check event emissions
|
||||
|
||||
3. **Document Deployment**
|
||||
- Record deployment details
|
||||
- Update deployment documentation
|
||||
- Share with team
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: 2025-01-12
|
||||
|
||||
Reference in New Issue
Block a user