- Organized 252 files across project - Root directory: 187 → 2 files (98.9% reduction) - Moved configuration guides to docs/04-configuration/ - Moved troubleshooting guides to docs/09-troubleshooting/ - Moved quick start guides to docs/01-getting-started/ - Moved reports to reports/ directory - Archived temporary files - Generated comprehensive reports and documentation - Created maintenance scripts and guides All files organized according to established standards.
171 lines
6.0 KiB
Bash
Executable File
171 lines
6.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Deploy contracts from Proxmox host where RPC access is allowed
|
|
# Usage: ./deploy-contracts-from-proxmox.sh
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
SOURCE_PROJECT="/home/intlc/projects/smom-dbis-138"
|
|
PROXMOX_HOST="${PROXMOX_HOST:-192.168.11.10}"
|
|
PROXMOX_PASS="${PROXMOX_PASS:-L@kers2010}"
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
|
|
# SSH helper
|
|
ssh_proxmox() {
|
|
sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@"$PROXMOX_HOST" "$@"
|
|
}
|
|
|
|
log_info "========================================="
|
|
log_info "Deploy Contracts from Proxmox Host"
|
|
log_info "========================================="
|
|
log_info ""
|
|
|
|
# Step 1: Check if source project exists on Proxmox host
|
|
log_info "Step 1: Checking source project on Proxmox host..."
|
|
|
|
SOURCE_PROJECT_REMOTE="/root/smom-dbis-138"
|
|
if ssh_proxmox "[ -d '$SOURCE_PROJECT_REMOTE' ]"; then
|
|
log_success "Source project found at $SOURCE_PROJECT_REMOTE"
|
|
REMOTE_PROJECT="$SOURCE_PROJECT_REMOTE"
|
|
elif ssh_proxmox "[ -d '/home/intlc/projects/smom-dbis-138' ]"; then
|
|
log_success "Source project found at /home/intlc/projects/smom-dbis-138"
|
|
REMOTE_PROJECT="/home/intlc/projects/smom-dbis-138"
|
|
else
|
|
log_error "Source project not found on Proxmox host"
|
|
log_info "Syncing source project to Proxmox host..."
|
|
|
|
# Create directory
|
|
ssh_proxmox "mkdir -p $SOURCE_PROJECT_REMOTE"
|
|
|
|
# Sync files (excluding node_modules, .git, etc.)
|
|
rsync -avz --exclude 'node_modules' --exclude '.git' --exclude 'broadcast' \
|
|
"$SOURCE_PROJECT/" "root@$PROXMOX_HOST:$SOURCE_PROJECT_REMOTE/" || {
|
|
log_error "Failed to sync source project"
|
|
exit 1
|
|
}
|
|
|
|
REMOTE_PROJECT="$SOURCE_PROJECT_REMOTE"
|
|
log_success "Source project synced to $REMOTE_PROJECT"
|
|
fi
|
|
|
|
# Step 2: Check .env file
|
|
log_info ""
|
|
log_info "Step 2: Checking .env file..."
|
|
|
|
if ssh_proxmox "[ -f '$REMOTE_PROJECT/.env' ]"; then
|
|
log_success ".env file found"
|
|
else
|
|
log_warn ".env file not found, copying from local..."
|
|
if [ -f "$SOURCE_PROJECT/.env" ]; then
|
|
scp -o StrictHostKeyChecking=no "$SOURCE_PROJECT/.env" "root@$PROXMOX_HOST:$REMOTE_PROJECT/.env" || {
|
|
log_error "Failed to copy .env file"
|
|
exit 1
|
|
}
|
|
log_success ".env file copied"
|
|
else
|
|
log_error ".env file not found locally or remotely"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Step 3: Verify network from Proxmox host
|
|
log_info ""
|
|
log_info "Step 3: Verifying network from Proxmox host..."
|
|
|
|
BLOCK=$(ssh_proxmox "cd $REMOTE_PROJECT && source .env 2>/dev/null && \
|
|
curl -s -X POST \${RPC_URL_138:-http://192.168.11.250:8545} \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}' | \
|
|
python3 -c 'import sys, json; data=json.load(sys.stdin); print(int(data.get(\"result\", \"0x0\"), 16))' 2>/dev/null" || echo "0")
|
|
|
|
if [ "$BLOCK" -gt 0 ]; then
|
|
log_success "Network is ready! Block: $BLOCK"
|
|
else
|
|
log_warn "Could not verify block number, but continuing..."
|
|
fi
|
|
|
|
# Step 4: Deploy contracts
|
|
log_info ""
|
|
log_info "========================================="
|
|
log_info "Step 4: Deploying Contracts"
|
|
log_info "========================================="
|
|
log_info ""
|
|
|
|
DEPLOYMENT_LOG="/tmp/contract-deployment-$(date +%Y%m%d-%H%M%S).log"
|
|
|
|
# Deploy Oracle
|
|
log_info "4.1: Deploying Oracle Contract..."
|
|
ssh_proxmox "cd $REMOTE_PROJECT && source .env 2>/dev/null && \
|
|
forge script script/DeployOracle.s.sol:DeployOracle \
|
|
--rpc-url \${RPC_URL_138:-http://192.168.11.250:8545} \
|
|
--broadcast \
|
|
--private-key \$PRIVATE_KEY \
|
|
--legacy -vvv" 2>&1 | tee -a "$DEPLOYMENT_LOG" | grep -E "Oracle|Aggregator|Proxy|deployed at|Error" | head -10 || {
|
|
log_warn "Oracle deployment may have issues (check logs)"
|
|
}
|
|
|
|
# Deploy CCIP Router
|
|
log_info ""
|
|
log_info "4.2: Deploying CCIP Router..."
|
|
ssh_proxmox "cd $REMOTE_PROJECT && source .env 2>/dev/null && \
|
|
forge script script/DeployCCIPRouter.s.sol:DeployCCIPRouter \
|
|
--rpc-url \${RPC_URL_138:-http://192.168.11.250:8545} \
|
|
--broadcast \
|
|
--private-key \$PRIVATE_KEY \
|
|
--legacy -vvv" 2>&1 | tee -a "$DEPLOYMENT_LOG" | grep -E "CCIP Router|deployed at|Error" | head -10 || {
|
|
log_warn "CCIP Router deployment may have issues (check logs)"
|
|
}
|
|
|
|
# Deploy CCIP Sender
|
|
log_info ""
|
|
log_info "4.3: Deploying CCIP Sender..."
|
|
ssh_proxmox "cd $REMOTE_PROJECT && source .env 2>/dev/null && \
|
|
forge script script/DeployCCIPSender.s.sol:DeployCCIPSender \
|
|
--rpc-url \${RPC_URL_138:-http://192.168.11.250:8545} \
|
|
--broadcast \
|
|
--private-key \$PRIVATE_KEY \
|
|
--legacy -vvv" 2>&1 | tee -a "$DEPLOYMENT_LOG" | grep -E "CCIPSender|deployed at|Error" | head -10 || {
|
|
log_warn "CCIP Sender deployment may have issues (check logs)"
|
|
}
|
|
|
|
# Extract addresses
|
|
log_info ""
|
|
log_info "========================================="
|
|
log_info "Step 5: Extracting Contract Addresses"
|
|
log_info "========================================="
|
|
log_info ""
|
|
|
|
# Extract addresses from broadcast files
|
|
ssh_proxmox "cd $REMOTE_PROJECT && \
|
|
find broadcast -name 'run-latest.json' -type f 2>/dev/null | head -5" | while read -r broadcast_file; do
|
|
if [ -n "$broadcast_file" ]; then
|
|
log_info "Found broadcast file: $broadcast_file"
|
|
# Extract addresses would go here
|
|
fi
|
|
done
|
|
|
|
log_success "========================================="
|
|
log_success "Deployment Complete!"
|
|
log_success "========================================="
|
|
log_info ""
|
|
log_info "Deployment log: $DEPLOYMENT_LOG"
|
|
log_info ""
|
|
log_info "Next steps:"
|
|
log_info "1. Extract contract addresses from broadcast files on Proxmox host"
|
|
log_info "2. Update .env file with deployed addresses"
|
|
log_info "3. Update service configurations in Proxmox containers"
|
|
log_info ""
|
|
|