refactor: extract script snippets to reusable scripts
All checks were successful
Documentation Validation / validate-docs (push) Successful in 9s
All checks were successful
Documentation Validation / validate-docs (push) Successful in 9s
- Create modular scripts for multi-node blockchain setup - Extract 6 core setup scripts from workflow documentation - Add master orchestrator script for complete setup - Replace inline code with script references in workflow - Create comprehensive README for script documentation - Copy scripts to aitbc for cross-node execution - Improve maintainability and reusability of setup process Scripts created: - 01_preflight_setup.sh - System preparation - 02_genesis_authority_setup.sh - Genesis node setup - 03_follower_node_setup.sh - Follower node setup - 04_create_wallet.sh - Wallet creation - 05_send_transaction.sh - Transaction sending - 06_final_verification.sh - System verification - setup_multinode_blockchain.sh - Master orchestrator This makes the workflow cleaner and scripts reusable while maintaining all functionality.
This commit is contained in:
@@ -20,41 +20,8 @@ This workflow sets up a two-node AITBC blockchain network (aitbc1 as genesis aut
|
|||||||
Before running the workflow, ensure the following setup is complete:
|
Before running the workflow, ensure the following setup is complete:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Stop existing services
|
# Run the pre-flight setup script
|
||||||
systemctl stop aitbc-blockchain-* 2>/dev/null || true
|
/opt/aitbc/scripts/workflow/01_preflight_setup.sh
|
||||||
|
|
||||||
# 2. Update ALL systemd configurations (main files + drop-ins + overrides)
|
|
||||||
# Update main service files
|
|
||||||
sed -i 's|EnvironmentFile=/opt/aitbc/.env|EnvironmentFile=/etc/aitbc/.env|g' /opt/aitbc/systemd/aitbc-blockchain-*.service
|
|
||||||
# Update drop-in configs
|
|
||||||
find /etc/systemd/system/aitbc-blockchain-*.service.d/ -name "10-central-env.conf" -exec sed -i 's|EnvironmentFile=/opt/aitbc/.env|EnvironmentFile=/etc/aitbc/.env|g' {} \; 2>/dev/null || true
|
|
||||||
# Fix override configs (wrong venv paths)
|
|
||||||
find /etc/systemd/system/aitbc-blockchain-*.service.d/ -name "override.conf" -exec sed -i 's|/opt/aitbc/apps/blockchain-node/.venv/bin/python3|/opt/aitbc/venv/bin/python3|g' {} \; 2>/dev/null || true
|
|
||||||
systemctl daemon-reload
|
|
||||||
|
|
||||||
# 3. Create central configuration file
|
|
||||||
cp /opt/aitbc/.env /etc/aitbc/.env.backup 2>/dev/null || true
|
|
||||||
# Ensure .env is in the correct location (already should be)
|
|
||||||
mv /opt/aitbc/.env /etc/aitbc/.env 2>/dev/null || true
|
|
||||||
|
|
||||||
# 4. Setup AITBC CLI tool
|
|
||||||
# Use central virtual environment (dependencies already installed)
|
|
||||||
source /opt/aitbc/venv/bin/activate
|
|
||||||
pip install -e /opt/aitbc/cli/ 2>/dev/null || true
|
|
||||||
echo 'alias aitbc="source /opt/aitbc/venv/bin/activate && aitbc"' >> ~/.bashrc
|
|
||||||
source ~/.bashrc
|
|
||||||
|
|
||||||
# 5. Clean old data (optional but recommended)
|
|
||||||
rm -rf /var/lib/aitbc/data/ait-mainnet/*
|
|
||||||
rm -rf /var/lib/aitbc/keystore/*
|
|
||||||
|
|
||||||
# 6. Create keystore password file
|
|
||||||
echo 'aitbc123' > /var/lib/aitbc/keystore/.password
|
|
||||||
chmod 600 /var/lib/aitbc/keystore/.password
|
|
||||||
|
|
||||||
# 7. Verify setup
|
|
||||||
aitbc --help 2>/dev/null || echo "CLI available but limited commands"
|
|
||||||
ls -la /etc/aitbc/.env
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Directory Structure
|
## Directory Structure
|
||||||
@@ -106,66 +73,8 @@ The workflow uses the single central `/etc/aitbc/.env` file as the configuration
|
|||||||
### 1. Prepare aitbc1 (Genesis Authority Node)
|
### 1. Prepare aitbc1 (Genesis Authority Node)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# We are already on aitbc1 node (localhost)
|
# Run the genesis authority setup script
|
||||||
# No SSH needed - running locally
|
/opt/aitbc/scripts/workflow/02_genesis_authority_setup.sh
|
||||||
|
|
||||||
# Pull latest code
|
|
||||||
cd /opt/aitbc
|
|
||||||
git pull origin main
|
|
||||||
|
|
||||||
# Install/update dependencies
|
|
||||||
/opt/aitbc/venv/bin/pip install -r requirements.txt
|
|
||||||
|
|
||||||
# Check and create required directories if they don't exist
|
|
||||||
mkdir -p /var/lib/aitbc/data /var/lib/aitbc/keystore /etc/aitbc /var/log/aitbc
|
|
||||||
|
|
||||||
# Verify directories exist
|
|
||||||
ls -la /var/lib/aitbc/ || echo "Creating /var/lib/aitbc/ structure..."
|
|
||||||
|
|
||||||
# Copy and adapt central .env for aitbc1 (genesis authority)
|
|
||||||
cp /etc/aitbc/blockchain.env /etc/aitbc/blockchain.env.aitbc1.backup
|
|
||||||
|
|
||||||
# Update .env for aitbc1 genesis authority configuration
|
|
||||||
sed -i 's|proposer_id=.*|proposer_id=aitbc1genesis|g' /etc/aitbc/.env
|
|
||||||
sed -i 's|keystore_path=/opt/aitbc/apps/blockchain-node/keystore|keystore_path=/var/lib/aitbc/keystore|g' /etc/aitbc/.env
|
|
||||||
sed -i 's|keystore_password_file=/opt/aitbc/apps/blockchain-node/keystore/.password|keystore_password_file=/var/lib/aitbc/keystore/.password|g' /etc/aitbc/.env
|
|
||||||
sed -i 's|db_path=./data/ait-mainnet/chain.db|db_path=/var/lib/aitbc/data/ait-mainnet/chain.db|g' /etc/aitbc/.env
|
|
||||||
sed -i 's|enable_block_production=true|enable_block_production=true|g' /etc/aitbc/.env
|
|
||||||
sed -i 's|gossip_broadcast_url=redis://127.0.0.1:6379|gossip_broadcast_url=redis://localhost:6379|g' /etc/aitbc/.env
|
|
||||||
sed -i 's|p2p_bind_port=8005|p2p_bind_port=7070|g' /etc/aitbc/.env
|
|
||||||
|
|
||||||
# Add trusted proposers for follower nodes
|
|
||||||
echo "trusted_proposers=aitbc1genesis" >> /etc/aitbc/.env
|
|
||||||
|
|
||||||
# Create genesis block with wallets (using Python script until CLI is fully implemented)
|
|
||||||
cd /opt/aitbc/apps/blockchain-node
|
|
||||||
/opt/aitbc/venv/bin/python scripts/setup_production.py \
|
|
||||||
--base-dir /opt/aitbc/apps/blockchain-node \
|
|
||||||
--chain-id ait-mainnet \
|
|
||||||
--total-supply 1000000000
|
|
||||||
|
|
||||||
# Get actual genesis wallet address and update config
|
|
||||||
GENESIS_ADDR=$(cat /var/lib/aitbc/keystore/aitbc1genesis.json | jq -r '.address')
|
|
||||||
echo "Genesis address: $GENESIS_ADDR"
|
|
||||||
sed -i "s|proposer_id=.*|proposer_id=$GENESIS_ADDR|g" /etc/aitbc/.env
|
|
||||||
sed -i "s|trusted_proposers=.*|trusted_proposers=$GENESIS_ADDR|g" /etc/aitbc/.env
|
|
||||||
|
|
||||||
# Copy genesis and allocations to standard location
|
|
||||||
mkdir -p /var/lib/aitbc/data/ait-mainnet
|
|
||||||
cp /opt/aitbc/apps/blockchain-node/data/ait-mainnet/genesis.json /var/lib/aitbc/data/ait-mainnet/
|
|
||||||
cp /opt/aitbc/apps/blockchain-node/data/ait-mainnet/allocations.json /var/lib/aitbc/data/ait-mainnet/
|
|
||||||
cp /opt/aitbc/apps/blockchain-node/keystore/* /var/lib/aitbc/keystore/
|
|
||||||
|
|
||||||
# Note: systemd services should already use /etc/aitbc/.env
|
|
||||||
# No need to update systemd if they are properly configured
|
|
||||||
|
|
||||||
# Enable and start blockchain services
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl enable aitbc-blockchain-node aitbc-blockchain-rpc
|
|
||||||
systemctl start aitbc-blockchain-node aitbc-blockchain-rpc
|
|
||||||
|
|
||||||
# Monitor startup
|
|
||||||
journalctl -f -u aitbc-blockchain-node -u aitbc-blockchain-rpc
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Verify aitbc1 Genesis State
|
### 2. Verify aitbc1 Genesis State
|
||||||
@@ -184,54 +93,8 @@ curl -s "http://localhost:8006/rpc/getBalance/$GENESIS_ADDR" | jq .
|
|||||||
### 3. Prepare aitbc (Follower Node)
|
### 3. Prepare aitbc (Follower Node)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# SSH to aitbc
|
# Run the follower node setup script (executed on aitbc)
|
||||||
ssh aitbc
|
ssh aitbc '/opt/aitbc/scripts/workflow/03_follower_node_setup.sh'
|
||||||
|
|
||||||
# Pull latest code
|
|
||||||
cd /opt/aitbc
|
|
||||||
git pull origin main
|
|
||||||
|
|
||||||
# Install/update dependencies
|
|
||||||
/opt/aitbc/venv/bin/pip install -r requirements.txt
|
|
||||||
|
|
||||||
# Check and create required directories if they don't exist
|
|
||||||
mkdir -p /var/lib/aitbc/data /var/lib/aitbc/keystore /etc/aitbc /var/log/aitbc
|
|
||||||
|
|
||||||
# Verify directories exist
|
|
||||||
ls -la /var/lib/aitbc/ || echo "Creating /var/lib/aitbc/ structure..."
|
|
||||||
|
|
||||||
# Copy and adapt central .env for aitbc (follower node)
|
|
||||||
cp /etc/aitbc/blockchain.env /etc/aitbc/blockchain.env.aitbc.backup
|
|
||||||
|
|
||||||
# Update .env for aitbc follower node configuration
|
|
||||||
sed -i 's|proposer_id=.*|proposer_id=follower-node-aitbc|g' /etc/aitbc/.env
|
|
||||||
sed -i 's|keystore_path=/opt/aitbc/apps/blockchain-node/keystore|keystore_path=/var/lib/aitbc/keystore|g' /etc/aitbc/.env
|
|
||||||
sed -i 's|keystore_password_file=/opt/aitbc/apps/blockchain-node/keystore/.password|keystore_password_file=/var/lib/aitbc/keystore/.password|g' /etc/aitbc/.env
|
|
||||||
sed -i 's|db_path=./data/ait-mainnet/chain.db|db_path=/var/lib/aitbc/data/ait-mainnet/chain.db|g' /etc/aitbc/.env
|
|
||||||
sed -i 's|enable_block_production=true|enable_block_production=false|g' /etc/aitbc/.env
|
|
||||||
sed -i 's|gossip_broadcast_url=redis://127.0.0.1:6379|gossip_broadcast_url=redis://10.1.223.40:6379|g' /etc/aitbc/.env
|
|
||||||
sed -i 's|p2p_bind_port=8005|p2p_bind_port=7070|g' /etc/aitbc/.env
|
|
||||||
sed -i 's|trusted_proposers=.*|trusted_proposers=ait1apmaugx6csz50q07m99z8k44llry0zpl0yurl23hygarcey8z85qy4zr96|g' /etc/aitbc/.env
|
|
||||||
|
|
||||||
# Note: aitbc should sync genesis from aitbc1, not copy it
|
|
||||||
# The follower node will receive the genesis block via blockchain sync
|
|
||||||
# ⚠️ DO NOT: scp aitbc1:/var/lib/aitbc/data/ait-mainnet/genesis.json /var/lib/aitbc/data/ait-mainnet/
|
|
||||||
# ✅ INSTEAD: Wait for automatic sync via blockchain protocol
|
|
||||||
|
|
||||||
# Note: systemd services should already use /etc/aitbc/.env
|
|
||||||
# No need to update systemd if they are properly configured
|
|
||||||
|
|
||||||
# Stop any existing services and clear old data
|
|
||||||
systemctl stop aitbc-blockchain-* 2>/dev/null || true
|
|
||||||
rm -f /var/lib/aitbc/data/ait-mainnet/chain.db*
|
|
||||||
|
|
||||||
# Start follower services
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl enable aitbc-blockchain-node aitbc-blockchain-rpc
|
|
||||||
systemctl start aitbc-blockchain-node aitbc-blockchain-rpc
|
|
||||||
|
|
||||||
# Monitor sync
|
|
||||||
journalctl -f -u aitbc-blockchain-node -u aitbc-blockchain-rpc
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4. Watch Blockchain Sync
|
### 4. Watch Blockchain Sync
|
||||||
@@ -259,15 +122,8 @@ fi
|
|||||||
### 5. Create Wallet on aitbc
|
### 5. Create Wallet on aitbc
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# On aitbc, create a new wallet using AITBC simple wallet CLI
|
# Run the wallet creation script
|
||||||
ssh aitbc 'python /opt/aitbc/cli/simple_wallet.py create --name aitbc-user --password-file /var/lib/aitbc/keystore/.password'
|
/opt/aitbc/scripts/workflow/04_create_wallet.sh
|
||||||
|
|
||||||
# Note the new wallet address
|
|
||||||
WALLET_ADDR=$(ssh aitbc 'cat /var/lib/aitbc/keystore/aitbc-user.json | jq -r .address')
|
|
||||||
echo "New wallet: $WALLET_ADDR"
|
|
||||||
|
|
||||||
# Verify wallet was created successfully
|
|
||||||
ssh aitbc "python /opt/aitbc/cli/simple_wallet.py list --format json | jq '.[] | select(.name == \"aitbc-user\")'"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**🔑 Wallet Attachment & Coin Access:**
|
**🔑 Wallet Attachment & Coin Access:**
|
||||||
@@ -287,58 +143,15 @@ The newly created wallet on aitbc will:
|
|||||||
### 6. Send 1000 AIT from Genesis to aitbc Wallet
|
### 6. Send 1000 AIT from Genesis to aitbc Wallet
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# On aitbc1, send 1000 AIT using AITBC simple wallet CLI
|
# Run the transaction sending script
|
||||||
python /opt/aitbc/cli/simple_wallet.py send \
|
/opt/aitbc/scripts/workflow/05_send_transaction.sh
|
||||||
--from aitbc1genesis \
|
|
||||||
--to $WALLET_ADDR \
|
|
||||||
--amount 1000 \
|
|
||||||
--fee 10 \
|
|
||||||
--password-file /var/lib/aitbc/keystore/.password \
|
|
||||||
--rpc-url http://localhost:8006
|
|
||||||
|
|
||||||
# Get transaction hash for verification (simplified - using RPC to check latest transaction)
|
|
||||||
TX_HASH=$(curl -s http://localhost:8006/rpc/transactions --limit 1 | jq -r '.transactions[0].hash' 2>/dev/null || echo "Transaction hash retrieval failed")
|
|
||||||
echo "Transaction hash: $TX_HASH"
|
|
||||||
|
|
||||||
# Wait for transaction to be mined
|
|
||||||
echo "Waiting for transaction to be mined..."
|
|
||||||
for i in {1..10}; do
|
|
||||||
sleep 2
|
|
||||||
BALANCE=$(ssh aitbc "curl -s \"http://localhost:8006/rpc/getBalance/$WALLET_ADDR\" | jq .balance")
|
|
||||||
if [ "$BALANCE" -gt "0" ]; then
|
|
||||||
echo "Transaction mined! Balance: $BALANCE AIT"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
echo "Check $i/10: Balance = $BALANCE AIT"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Final balance verification
|
|
||||||
ssh aitbc "curl -s \"http://localhost:8006/rpc/getBalance/$WALLET_ADDR\" | jq ."
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 7. Final Verification
|
### 7. Final Verification
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Check both nodes are in sync
|
# Run the final verification script
|
||||||
echo "=== aitbc1 height (localhost) ==="
|
/opt/aitbc/scripts/workflow/06_final_verification.sh
|
||||||
curl -s http://localhost:8006/rpc/head | jq .height
|
|
||||||
|
|
||||||
echo "=== aitbc height (remote) ==="
|
|
||||||
ssh aitbc 'curl -s http://localhost:8006/rpc/head | jq .height'
|
|
||||||
|
|
||||||
echo "=== aitbc wallet balance (remote) ==="
|
|
||||||
ssh aitbc "curl -s \"http://localhost:8006/rpc/getBalance/$WALLET_ADDR\" | jq ."
|
|
||||||
|
|
||||||
echo "=== Transaction verification ==="
|
|
||||||
echo "Transaction hash: 0x9975fc6ed8eabdc20886f9c33ddb68d40e6a9820d3e1182ebe5612686b12ca22"
|
|
||||||
# Verify transaction was mined (check if balance increased)
|
|
||||||
|
|
||||||
# Additional verification commands
|
|
||||||
echo "=== Network health check ==="
|
|
||||||
echo "Redis connection:"
|
|
||||||
redis-cli -h localhost ping
|
|
||||||
echo "P2P connectivity:"
|
|
||||||
curl -s http://localhost:8006/rpc/info | jq '.supported_chains'
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 8. Complete Sync (Optional - for full demonstration)
|
### 8. Complete Sync (Optional - for full demonstration)
|
||||||
|
|||||||
54
scripts/workflow/01_preflight_setup.sh
Executable file
54
scripts/workflow/01_preflight_setup.sh
Executable file
@@ -0,0 +1,54 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Pre-Flight Setup Script for AITBC Multi-Node Blockchain
|
||||||
|
# This script prepares the system for multi-node blockchain deployment
|
||||||
|
|
||||||
|
set -e # Exit on any error
|
||||||
|
|
||||||
|
echo "=== AITBC Multi-Node Blockchain Pre-Flight Setup ==="
|
||||||
|
|
||||||
|
# 1. Stop existing services
|
||||||
|
echo "1. Stopping existing services..."
|
||||||
|
systemctl stop aitbc-blockchain-* 2>/dev/null || true
|
||||||
|
|
||||||
|
# 2. Update ALL systemd configurations (main files + drop-ins + overrides)
|
||||||
|
echo "2. Updating systemd configurations..."
|
||||||
|
# Update main service files
|
||||||
|
sed -i 's|EnvironmentFile=/opt/aitbc/.env|EnvironmentFile=/etc/aitbc/.env|g' /opt/aitbc/systemd/aitbc-blockchain-*.service
|
||||||
|
# Update drop-in configs
|
||||||
|
find /etc/systemd/system/aitbc-blockchain-*.service.d/ -name "10-central-env.conf" -exec sed -i 's|EnvironmentFile=/opt/aitbc/.env|EnvironmentFile=/etc/aitbc/.env|g' {} \; 2>/dev/null || true
|
||||||
|
# Fix override configs (wrong venv paths)
|
||||||
|
find /etc/systemd/system/aitbc-blockchain-*.service.d/ -name "override.conf" -exec sed -i 's|/opt/aitbc/apps/blockchain-node/.venv/bin/python3|/opt/aitbc/venv/bin/python3|g' {} \; 2>/dev/null || true
|
||||||
|
systemctl daemon-reload
|
||||||
|
|
||||||
|
# 3. Create central configuration file
|
||||||
|
echo "3. Setting up central configuration file..."
|
||||||
|
cp /opt/aitbc/.env /etc/aitbc/.env.backup 2>/dev/null || true
|
||||||
|
# Ensure .env is in the correct location (already should be)
|
||||||
|
mv /opt/aitbc/.env /etc/aitbc/.env 2>/dev/null || true
|
||||||
|
|
||||||
|
# 4. Setup AITBC CLI tool
|
||||||
|
echo "4. Setting up AITBC CLI tool..."
|
||||||
|
# Use central virtual environment (dependencies already installed)
|
||||||
|
source /opt/aitbc/venv/bin/activate
|
||||||
|
pip install -e /opt/aitbc/cli/ 2>/dev/null || true
|
||||||
|
echo 'alias aitbc="source /opt/aitbc/venv/bin/activate && aitbc"' >> ~/.bashrc
|
||||||
|
source ~/.bashrc
|
||||||
|
|
||||||
|
# 5. Clean old data (optional but recommended)
|
||||||
|
echo "5. Cleaning old data..."
|
||||||
|
rm -rf /var/lib/aitbc/data/ait-mainnet/*
|
||||||
|
rm -rf /var/lib/aitbc/keystore/*
|
||||||
|
|
||||||
|
# 6. Create keystore password file
|
||||||
|
echo "6. Creating keystore password file..."
|
||||||
|
mkdir -p /var/lib/aitbc/keystore
|
||||||
|
echo 'aitbc123' > /var/lib/aitbc/keystore/.password
|
||||||
|
chmod 600 /var/lib/aitbc/keystore/.password
|
||||||
|
|
||||||
|
# 7. Verify setup
|
||||||
|
echo "7. Verifying setup..."
|
||||||
|
aitbc --help 2>/dev/null || echo "CLI available but limited commands"
|
||||||
|
ls -la /etc/aitbc/.env
|
||||||
|
|
||||||
|
echo "✅ Pre-flight setup completed successfully!"
|
||||||
|
echo "System is ready for multi-node blockchain deployment."
|
||||||
77
scripts/workflow/02_genesis_authority_setup.sh
Executable file
77
scripts/workflow/02_genesis_authority_setup.sh
Executable file
@@ -0,0 +1,77 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Genesis Authority Setup Script for AITBC Node (aitbc1)
|
||||||
|
# This script configures aitbc1 as the genesis authority node
|
||||||
|
|
||||||
|
set -e # Exit on any error
|
||||||
|
|
||||||
|
echo "=== AITBC Genesis Authority Setup (aitbc1) ==="
|
||||||
|
|
||||||
|
# We are already on aitbc1 node (localhost)
|
||||||
|
# No SSH needed - running locally
|
||||||
|
|
||||||
|
# Pull latest code
|
||||||
|
echo "1. Pulling latest code..."
|
||||||
|
cd /opt/aitbc
|
||||||
|
git pull origin main
|
||||||
|
|
||||||
|
# Install/update dependencies
|
||||||
|
echo "2. Installing/updating dependencies..."
|
||||||
|
/opt/aitbc/venv/bin/pip install -r requirements.txt
|
||||||
|
|
||||||
|
# Check and create required directories if they don't exist
|
||||||
|
echo "3. Creating required directories..."
|
||||||
|
mkdir -p /var/lib/aitbc/data /var/lib/aitbc/keystore /etc/aitbc /var/log/aitbc
|
||||||
|
|
||||||
|
# Verify directories exist
|
||||||
|
ls -la /var/lib/aitbc/ || echo "Creating /var/lib/aitbc/ structure..."
|
||||||
|
|
||||||
|
# Copy and adapt central .env for aitbc1 (genesis authority)
|
||||||
|
cp /etc/aitbc/blockchain.env /etc/aitbc/blockchain.env.aitbc1.backup 2>/dev/null || true
|
||||||
|
|
||||||
|
# Update .env for aitbc1 genesis authority configuration
|
||||||
|
echo "4. Updating environment configuration..."
|
||||||
|
sed -i 's|proposer_id=.*|proposer_id=aitbc1genesis|g' /etc/aitbc/.env
|
||||||
|
sed -i 's|keystore_path=/opt/aitbc/apps/blockchain-node/keystore|keystore_path=/var/lib/aitbc/keystore|g' /etc/aitbc/.env
|
||||||
|
sed -i 's|keystore_password_file=/opt/aitbc/apps/blockchain-node/keystore/.password|keystore_password_file=/var/lib/aitbc/keystore/.password|g' /etc/aitbc/.env
|
||||||
|
sed -i 's|db_path=./data/ait-mainnet/chain.db|db_path=/var/lib/aitbc/data/ait-mainnet/chain.db|g' /etc/aitbc/.env
|
||||||
|
sed -i 's|enable_block_production=true|enable_block_production=true|g' /etc/aitbc/.env
|
||||||
|
sed -i 's|gossip_broadcast_url=redis://127.0.0.1:6379|gossip_broadcast_url=redis://localhost:6379|g' /etc/aitbc/.env
|
||||||
|
sed -i 's|p2p_bind_port=8005|p2p_bind_port=7070|g' /etc/aitbc/.env
|
||||||
|
|
||||||
|
# Add trusted proposers for follower nodes
|
||||||
|
echo "trusted_proposers=aitbc1genesis" >> /etc/aitbc/.env
|
||||||
|
|
||||||
|
# Create genesis block with wallets (using Python script until CLI is fully implemented)
|
||||||
|
echo "5. Creating genesis block with wallets..."
|
||||||
|
cd /opt/aitbc/apps/blockchain-node
|
||||||
|
/opt/aitbc/venv/bin/python scripts/setup_production.py \
|
||||||
|
--base-dir /opt/aitbc/apps/blockchain-node \
|
||||||
|
--chain-id ait-mainnet \
|
||||||
|
--total-supply 1000000000
|
||||||
|
|
||||||
|
# Get actual genesis wallet address and update config
|
||||||
|
echo "6. Updating genesis address configuration..."
|
||||||
|
GENESIS_ADDR=$(cat /var/lib/aitbc/keystore/aitbc1genesis.json | jq -r '.address')
|
||||||
|
echo "Genesis address: $GENESIS_ADDR"
|
||||||
|
sed -i "s|proposer_id=.*|proposer_id=$GENESIS_ADDR|g" /etc/aitbc/.env
|
||||||
|
sed -i "s|trusted_proposers=.*|trusted_proposers=$GENESIS_ADDR|g" /etc/aitbc/.env
|
||||||
|
|
||||||
|
# Copy genesis and allocations to standard location
|
||||||
|
echo "7. Copying genesis and allocations to standard location..."
|
||||||
|
mkdir -p /var/lib/aitbc/data/ait-mainnet
|
||||||
|
cp /opt/aitbc/apps/blockchain-node/data/ait-mainnet/genesis.json /var/lib/aitbc/data/ait-mainnet/
|
||||||
|
cp /opt/aitbc/apps/blockchain-node/data/ait-mainnet/allocations.json /var/lib/aitbc/data/ait-mainnet/
|
||||||
|
cp /opt/aitbc/apps/blockchain-node/keystore/* /var/lib/aitbc/keystore/
|
||||||
|
|
||||||
|
# Note: systemd services should already use /etc/aitbc/.env
|
||||||
|
# No need to update systemd if they are properly configured
|
||||||
|
|
||||||
|
# Enable and start blockchain services
|
||||||
|
echo "8. Starting blockchain services..."
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable aitbc-blockchain-node aitbc-blockchain-rpc
|
||||||
|
systemctl start aitbc-blockchain-node aitbc-blockchain-rpc
|
||||||
|
|
||||||
|
echo "✅ Genesis authority setup completed successfully!"
|
||||||
|
echo "aitbc1 is now configured as the genesis authority node."
|
||||||
|
echo "Genesis address: $GENESIS_ADDR"
|
||||||
57
scripts/workflow/03_follower_node_setup.sh
Executable file
57
scripts/workflow/03_follower_node_setup.sh
Executable file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Follower Node Setup Script for AITBC Node (aitbc)
|
||||||
|
# This script configures aitbc as a follower node
|
||||||
|
|
||||||
|
set -e # Exit on any error
|
||||||
|
|
||||||
|
echo "=== AITBC Follower Node Setup (aitbc) ==="
|
||||||
|
|
||||||
|
# Pull latest code
|
||||||
|
echo "1. Pulling latest code..."
|
||||||
|
cd /opt/aitbc
|
||||||
|
git pull origin main
|
||||||
|
|
||||||
|
# Install/update dependencies
|
||||||
|
echo "2. Installing/updating dependencies..."
|
||||||
|
/opt/aitbc/venv/bin/pip install -r requirements.txt
|
||||||
|
|
||||||
|
# Check and create required directories if they don't exist
|
||||||
|
echo "3. Creating required directories..."
|
||||||
|
mkdir -p /var/lib/aitbc/data /var/lib/aitbc/keystore /etc/aitbc /var/log/aitbc
|
||||||
|
|
||||||
|
# Verify directories exist
|
||||||
|
ls -la /var/lib/aitbc/ || echo "Creating /var/lib/aitbc/ structure..."
|
||||||
|
|
||||||
|
# Copy and adapt central .env for aitbc (follower node)
|
||||||
|
cp /etc/aitbc/blockchain.env /etc/aitbc/blockchain.env.aitbc.backup 2>/dev/null || true
|
||||||
|
|
||||||
|
# Update .env for aitbc follower node configuration
|
||||||
|
echo "4. Updating environment configuration..."
|
||||||
|
sed -i 's|proposer_id=.*|proposer_id=follower-node-aitbc|g' /etc/aitbc/.env
|
||||||
|
sed -i 's|keystore_path=/opt/aitbc/apps/blockchain-node/keystore|keystore_path=/var/lib/aitbc/keystore|g' /etc/aitbc/.env
|
||||||
|
sed -i 's|keystore_password_file=/opt/aitbc/apps/blockchain-node/keystore/.password|keystore_password_file=/var/lib/aitbc/keystore/.password|g' /etc/aitbc/.env
|
||||||
|
sed -i 's|db_path=./data/ait-mainnet/chain.db|db_path=/var/lib/aitbc/data/ait-mainnet/chain.db|g' /etc/aitbc/.env
|
||||||
|
sed -i 's|enable_block_production=true|enable_block_production=false|g' /etc/aitbc/.env
|
||||||
|
sed -i 's|gossip_broadcast_url=redis://127.0.0.1:6379|gossip_broadcast_url=redis://10.1.223.40:6379|g' /etc/aitbc/.env
|
||||||
|
sed -i 's|p2p_bind_port=8005|p2p_bind_port=7070|g' /etc/aitbc/.env
|
||||||
|
sed -i 's|trusted_proposers=.*|trusted_proposers=ait1apmaugx6csz50q07m99z8k44llry0zpl0yurl23hygarcey8z85qy4zr96|g' /etc/aitbc/.env
|
||||||
|
|
||||||
|
# Note: aitbc should sync genesis from aitbc1, not copy it
|
||||||
|
# The follower node will receive the genesis block via blockchain sync
|
||||||
|
# ⚠️ DO NOT: scp aitbc1:/var/lib/aitbc/data/ait-mainnet/genesis.json /var/lib/aitbc/data/ait-mainnet/
|
||||||
|
# ✅ INSTEAD: Wait for automatic sync via blockchain protocol
|
||||||
|
|
||||||
|
# Stop any existing services and clear old data
|
||||||
|
echo "5. Stopping existing services and clearing old data..."
|
||||||
|
systemctl stop aitbc-blockchain-* 2>/dev/null || true
|
||||||
|
rm -f /var/lib/aitbc/data/ait-mainnet/chain.db*
|
||||||
|
|
||||||
|
# Start follower services
|
||||||
|
echo "6. Starting follower services..."
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable aitbc-blockchain-node aitbc-blockchain-rpc
|
||||||
|
systemctl start aitbc-blockchain-node aitbc-blockchain-rpc
|
||||||
|
|
||||||
|
echo "✅ Follower node setup completed successfully!"
|
||||||
|
echo "aitbc is now configured as a follower node."
|
||||||
|
echo "Waiting for blockchain sync from aitbc1..."
|
||||||
24
scripts/workflow/04_create_wallet.sh
Executable file
24
scripts/workflow/04_create_wallet.sh
Executable file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Wallet Creation Script for AITBC
|
||||||
|
# This script creates a new wallet on the aitbc follower node
|
||||||
|
|
||||||
|
set -e # Exit on any error
|
||||||
|
|
||||||
|
echo "=== AITBC Wallet Creation ==="
|
||||||
|
|
||||||
|
# On aitbc, create a new wallet using AITBC simple wallet CLI
|
||||||
|
echo "1. Creating new wallet on aitbc..."
|
||||||
|
ssh aitbc 'python /opt/aitbc/cli/simple_wallet.py create --name aitbc-user --password-file /var/lib/aitbc/keystore/.password'
|
||||||
|
|
||||||
|
# Note the new wallet address
|
||||||
|
WALLET_ADDR=$(ssh aitbc 'cat /var/lib/aitbc/keystore/aitbc-user.json | jq -r .address')
|
||||||
|
echo "New wallet: $WALLET_ADDR"
|
||||||
|
|
||||||
|
# Verify wallet was created successfully
|
||||||
|
echo "2. Verifying wallet creation..."
|
||||||
|
ssh aitbc "python /opt/aitbc/cli/simple_wallet.py list --format json | jq '.[] | select(.name == \"aitbc-user\")'"
|
||||||
|
|
||||||
|
echo "✅ Wallet created successfully!"
|
||||||
|
echo "Wallet name: aitbc-user"
|
||||||
|
echo "Wallet address: $WALLET_ADDR"
|
||||||
|
echo "Wallet is ready to receive AIT coins."
|
||||||
48
scripts/workflow/05_send_transaction.sh
Executable file
48
scripts/workflow/05_send_transaction.sh
Executable file
@@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Transaction Sending Script for AITBC
|
||||||
|
# This script sends 1000 AIT from genesis to aitbc wallet
|
||||||
|
|
||||||
|
set -e # Exit on any error
|
||||||
|
|
||||||
|
echo "=== AITBC Transaction Sending ==="
|
||||||
|
|
||||||
|
# Get wallet address (source from wallet creation script)
|
||||||
|
if [ -z "$WALLET_ADDR" ]; then
|
||||||
|
echo "Error: WALLET_ADDR not set. Please run wallet creation script first."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "1. Sending 1000 AIT from genesis to aitbc wallet..."
|
||||||
|
python /opt/aitbc/cli/simple_wallet.py send \
|
||||||
|
--from aitbc1genesis \
|
||||||
|
--to $WALLET_ADDR \
|
||||||
|
--amount 1000 \
|
||||||
|
--fee 10 \
|
||||||
|
--password-file /var/lib/aitbc/keystore/.password \
|
||||||
|
--rpc-url http://localhost:8006
|
||||||
|
|
||||||
|
# Get transaction hash for verification (simplified - using RPC to check latest transaction)
|
||||||
|
TX_HASH=$(curl -s http://localhost:8006/rpc/transactions --limit 1 | jq -r '.transactions[0].hash' 2>/dev/null || echo "Transaction hash retrieval failed")
|
||||||
|
echo "Transaction hash: $TX_HASH"
|
||||||
|
|
||||||
|
# Wait for transaction to be mined
|
||||||
|
echo "2. Waiting for transaction to be mined..."
|
||||||
|
for i in {1..10}; do
|
||||||
|
sleep 2
|
||||||
|
BALANCE=$(ssh aitbc "curl -s \"http://localhost:8006/rpc/getBalance/$WALLET_ADDR\" | jq .balance")
|
||||||
|
if [ "$BALANCE" -gt "0" ]; then
|
||||||
|
echo "Transaction mined! Balance: $BALANCE AIT"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
echo "Check $i/10: Balance = $BALANCE AIT"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Final balance verification
|
||||||
|
echo "3. Final balance verification..."
|
||||||
|
ssh aitbc "curl -s \"http://localhost:8006/rpc/getBalance/$WALLET_ADDR\" | jq ."
|
||||||
|
|
||||||
|
echo "✅ Transaction sent successfully!"
|
||||||
|
echo "From: aitbc1genesis"
|
||||||
|
echo "To: $WALLET_ADDR"
|
||||||
|
echo "Amount: 1000 AIT"
|
||||||
|
echo "Transaction hash: $TX_HASH"
|
||||||
78
scripts/workflow/06_final_verification.sh
Executable file
78
scripts/workflow/06_final_verification.sh
Executable file
@@ -0,0 +1,78 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Final Verification Script for AITBC Multi-Node Blockchain
|
||||||
|
# This script verifies the complete multi-node setup
|
||||||
|
|
||||||
|
set -e # Exit on any error
|
||||||
|
|
||||||
|
echo "=== AITBC Multi-Node Blockchain Final Verification ==="
|
||||||
|
|
||||||
|
# Get wallet address (source from wallet creation script)
|
||||||
|
if [ -z "$WALLET_ADDR" ]; then
|
||||||
|
echo "Error: WALLET_ADDR not set. Please run wallet creation script first."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check both nodes are in sync
|
||||||
|
echo "1. Checking blockchain heights..."
|
||||||
|
echo "=== aitbc1 height (localhost) ==="
|
||||||
|
AITBC1_HEIGHT=$(curl -s http://localhost:8006/rpc/head | jq .height)
|
||||||
|
echo $AITBC1_HEIGHT
|
||||||
|
|
||||||
|
echo "=== aitbc height (remote) ==="
|
||||||
|
AITBC_HEIGHT=$(ssh aitbc 'curl -s http://localhost:8006/rpc/head | jq .height')
|
||||||
|
echo $AITBC_HEIGHT
|
||||||
|
|
||||||
|
HEIGHT_DIFF=$((AITBC1_HEIGHT - AITBC_HEIGHT))
|
||||||
|
echo "Height difference: $HEIGHT_DIFF blocks"
|
||||||
|
|
||||||
|
# Check wallet balance
|
||||||
|
echo "2. Checking aitbc wallet balance..."
|
||||||
|
echo "=== aitbc wallet balance (remote) ==="
|
||||||
|
BALANCE=$(ssh aitbc "curl -s \"http://localhost:8006/rpc/getBalance/$WALLET_ADDR\" | jq .")
|
||||||
|
echo $BALANCE AIT
|
||||||
|
|
||||||
|
# Transaction verification
|
||||||
|
echo "3. Transaction verification..."
|
||||||
|
echo "Transaction hash: 0x9975fc6ed8eabdc20886f9c33ddb68d40e6a9820d3e1182ebe5612686b12ca22"
|
||||||
|
# Verify transaction was mined (check if balance increased)
|
||||||
|
|
||||||
|
# Network health check
|
||||||
|
echo "4. Network health check..."
|
||||||
|
echo "=== Redis connection ==="
|
||||||
|
redis-cli -h localhost ping
|
||||||
|
|
||||||
|
echo "=== RPC connectivity ==="
|
||||||
|
curl -s http://localhost:8006/rpc/info | jq '.chain_id, .supported_chains, .rpc_version'
|
||||||
|
|
||||||
|
echo "=== Service status ==="
|
||||||
|
systemctl is-active aitbc-blockchain-node aitbc-blockchain-rpc
|
||||||
|
ssh aitbc 'systemctl is-active aitbc-blockchain-node aitbc-blockchain-rpc'
|
||||||
|
|
||||||
|
# Success criteria
|
||||||
|
echo "5. Success criteria check..."
|
||||||
|
if [ "$HEIGHT_DIFF" -le 5 ]; then
|
||||||
|
echo "✅ Blockchain synchronized (height difference: $HEIGHT_DIFF)"
|
||||||
|
else
|
||||||
|
echo "❌ Blockchain not synchronized (height difference: $HEIGHT_DIFF)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$BALANCE" -gt "0" ]; then
|
||||||
|
echo "✅ Transaction successful (balance: $BALANCE AIT)"
|
||||||
|
else
|
||||||
|
echo "❌ Transaction failed (balance: $BALANCE AIT)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$(systemctl is-active aitbc-blockchain-node)" = "active" ] && [ "$(systemctl is-active aitbc-blockchain-rpc)" = "active" ]; then
|
||||||
|
echo "✅ aitbc1 services operational"
|
||||||
|
else
|
||||||
|
echo "❌ aitbc1 services not operational"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$(ssh aitbc 'systemctl is-active aitbc-blockchain-node')" = "active" ] && [ "$(ssh aitbc 'systemctl is-active aitbc-blockchain-rpc')" = "active" ]; then
|
||||||
|
echo "✅ aitbc services operational"
|
||||||
|
else
|
||||||
|
echo "❌ aitbc services not operational"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Final verification completed!"
|
||||||
|
echo "Multi-node blockchain setup is ready for operation."
|
||||||
191
scripts/workflow/README.md
Normal file
191
scripts/workflow/README.md
Normal file
@@ -0,0 +1,191 @@
|
|||||||
|
# AITBC Multi-Node Blockchain Setup Scripts
|
||||||
|
|
||||||
|
This directory contains modular scripts for setting up and managing a multi-node AITBC blockchain network.
|
||||||
|
|
||||||
|
## Scripts Overview
|
||||||
|
|
||||||
|
### Core Setup Scripts
|
||||||
|
|
||||||
|
1. **01_preflight_setup.sh** - Pre-flight system preparation
|
||||||
|
- Stops existing services
|
||||||
|
- Updates systemd configurations
|
||||||
|
- Sets up environment files
|
||||||
|
- Installs CLI tool
|
||||||
|
- Creates keystore and directories
|
||||||
|
|
||||||
|
2. **02_genesis_authority_setup.sh** - Genesis authority node setup (aitbc1)
|
||||||
|
- Pulls latest code
|
||||||
|
- Configures genesis authority
|
||||||
|
- Creates genesis block
|
||||||
|
- Starts blockchain services
|
||||||
|
|
||||||
|
3. **03_follower_node_setup.sh** - Follower node setup (aitbc)
|
||||||
|
- Configures follower node
|
||||||
|
- Sets up cross-node communication
|
||||||
|
- Starts follower services
|
||||||
|
|
||||||
|
4. **04_create_wallet.sh** - Wallet creation on follower node
|
||||||
|
- Creates new wallet using CLI tool
|
||||||
|
- Verifies wallet creation
|
||||||
|
- Returns wallet address
|
||||||
|
|
||||||
|
5. **05_send_transaction.sh** - Transaction sending
|
||||||
|
- Sends AIT from genesis to wallet
|
||||||
|
- Monitors transaction confirmation
|
||||||
|
- Verifies balance update
|
||||||
|
|
||||||
|
6. **06_final_verification.sh** - Complete system verification
|
||||||
|
- Checks blockchain synchronization
|
||||||
|
- Verifies transaction success
|
||||||
|
- Tests network health
|
||||||
|
- Validates service status
|
||||||
|
|
||||||
|
### Master Script
|
||||||
|
|
||||||
|
- **setup_multinode_blockchain.sh** - Master orchestrator script
|
||||||
|
- Runs all scripts in sequence
|
||||||
|
- Provides interactive execution
|
||||||
|
- Includes comprehensive summary
|
||||||
|
- Handles error checking
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Individual Script Execution
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run individual scripts
|
||||||
|
./01_preflight_setup.sh
|
||||||
|
./02_genesis_authority_setup.sh
|
||||||
|
./03_follower_node_setup.sh
|
||||||
|
./04_create_wallet.sh
|
||||||
|
./05_send_transaction.sh
|
||||||
|
./06_final_verification.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Master Script Execution
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run complete setup (interactive)
|
||||||
|
./setup_multinode_blockchain.sh
|
||||||
|
|
||||||
|
# Run complete setup (non-interactive)
|
||||||
|
echo "y" | ./setup_multinode_blockchain.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Script Dependencies
|
||||||
|
|
||||||
|
### System Requirements
|
||||||
|
- aitbc1 node (genesis authority)
|
||||||
|
- aitbc node (follower)
|
||||||
|
- SSH access between nodes
|
||||||
|
- Redis service running
|
||||||
|
- Python virtual environment
|
||||||
|
|
||||||
|
### Environment Variables
|
||||||
|
- `WALLET_ADDR` - Set by wallet creation script
|
||||||
|
- `GENESIS_ADDR` - Set by genesis setup script
|
||||||
|
|
||||||
|
### File Structure
|
||||||
|
```
|
||||||
|
/opt/aitbc/scripts/workflow/
|
||||||
|
├── 01_preflight_setup.sh
|
||||||
|
├── 02_genesis_authority_setup.sh
|
||||||
|
├── 03_follower_node_setup.sh
|
||||||
|
├── 04_create_wallet.sh
|
||||||
|
├── 05_send_transaction.sh
|
||||||
|
├── 06_final_verification.sh
|
||||||
|
├── setup_multinode_blockchain.sh
|
||||||
|
└── README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
## Script Features
|
||||||
|
|
||||||
|
### Error Handling
|
||||||
|
- All scripts use `set -e` for error detection
|
||||||
|
- Comprehensive error messages
|
||||||
|
- Graceful failure handling
|
||||||
|
|
||||||
|
### Logging
|
||||||
|
- Clear step-by-step output
|
||||||
|
- Progress indicators
|
||||||
|
- Success/failure confirmation
|
||||||
|
|
||||||
|
### Modularity
|
||||||
|
- Each script is self-contained
|
||||||
|
- Can be run independently
|
||||||
|
- State management between scripts
|
||||||
|
|
||||||
|
### Cross-Node Operations
|
||||||
|
- Automatic SSH handling
|
||||||
|
- Remote command execution
|
||||||
|
- File synchronization
|
||||||
|
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
### Environment Modifications
|
||||||
|
- Edit `.env` files for different configurations
|
||||||
|
- Modify service names as needed
|
||||||
|
- Adjust network settings
|
||||||
|
|
||||||
|
### Script Parameters
|
||||||
|
- Wallet names can be changed
|
||||||
|
- Transaction amounts are configurable
|
||||||
|
- Network settings are customizable
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Common Issues
|
||||||
|
1. **SSH Connection**: Verify SSH keys between nodes
|
||||||
|
2. **Service Failures**: Check systemd logs
|
||||||
|
3. **Network Issues**: Verify Redis and RPC connectivity
|
||||||
|
4. **Permission Errors**: Ensure proper file permissions
|
||||||
|
|
||||||
|
### Debug Mode
|
||||||
|
Add `set -x` to scripts for detailed execution tracing.
|
||||||
|
|
||||||
|
### Log Locations
|
||||||
|
- Systemd logs: `journalctl -u aitbc-blockchain-*`
|
||||||
|
- Application logs: `/var/log/aitbc/`
|
||||||
|
- Script logs: Console output
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
### Password Management
|
||||||
|
- Keystore passwords stored in `/var/lib/aitbc/keystore/.password`
|
||||||
|
- Change default password in production
|
||||||
|
- Use proper key management
|
||||||
|
|
||||||
|
### Network Security
|
||||||
|
- SSH key authentication recommended
|
||||||
|
- Firewall rules for RPC ports
|
||||||
|
- Redis security configuration
|
||||||
|
|
||||||
|
### File Permissions
|
||||||
|
- Keystore files: `600` (owner only)
|
||||||
|
- Scripts: `755` (executable)
|
||||||
|
- Configuration: `644` (readable)
|
||||||
|
|
||||||
|
## Maintenance
|
||||||
|
|
||||||
|
### Regular Tasks
|
||||||
|
- Monitor blockchain synchronization
|
||||||
|
- Check service health
|
||||||
|
- Update scripts as needed
|
||||||
|
- Backup configurations
|
||||||
|
|
||||||
|
### Updates
|
||||||
|
- Pull latest code changes
|
||||||
|
- Update script dependencies
|
||||||
|
- Test script modifications
|
||||||
|
- Document changes
|
||||||
|
|
||||||
|
## Integration with Workflow
|
||||||
|
|
||||||
|
These scripts are referenced in the main workflow documentation:
|
||||||
|
- `/opt/aitbc/.windsurf/workflows/multi-node-blockchain-setup.md`
|
||||||
|
|
||||||
|
The workflow now uses script references instead of inline code, making it:
|
||||||
|
- More maintainable
|
||||||
|
- Easier to test
|
||||||
|
- Reusable components
|
||||||
|
- Better organized
|
||||||
80
scripts/workflow/setup_multinode_blockchain.sh
Executable file
80
scripts/workflow/setup_multinode_blockchain.sh
Executable file
@@ -0,0 +1,80 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Master AITBC Multi-Node Blockchain Setup Script
|
||||||
|
# This script orchestrates the complete multi-node blockchain setup
|
||||||
|
|
||||||
|
set -e # Exit on any error
|
||||||
|
|
||||||
|
echo "=== AITBC Multi-Node Blockchain Setup ==="
|
||||||
|
echo "This script will set up a complete multi-node blockchain network"
|
||||||
|
echo "with aitbc1 as genesis authority and aitbc as follower node"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Check if running on aitbc1
|
||||||
|
if [ "$(hostname)" != "aitbc1" ]; then
|
||||||
|
echo "Error: This script must be run on aitbc1 (genesis authority node)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -p "Do you want to execute the complete workflow? (y/N): " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
echo "Workflow execution cancelled."
|
||||||
|
echo "You can run individual scripts as needed:"
|
||||||
|
echo " ./01_preflight_setup.sh"
|
||||||
|
echo " ./02_genesis_authority_setup.sh"
|
||||||
|
echo " ./03_follower_node_setup.sh"
|
||||||
|
echo " ./04_create_wallet.sh"
|
||||||
|
echo " ./05_send_transaction.sh"
|
||||||
|
echo " ./06_final_verification.sh"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "🚀 Starting complete multi-node blockchain setup..."
|
||||||
|
|
||||||
|
# Get script directory
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
cd "$SCRIPT_DIR"
|
||||||
|
|
||||||
|
# Execute all steps in sequence
|
||||||
|
echo "Step 1: Pre-Flight Setup"
|
||||||
|
./01_preflight_setup.sh
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "Step 2: Genesis Authority Setup (aitbc1)"
|
||||||
|
./02_genesis_authority_setup.sh
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "Step 3: Follower Node Setup (aitbc)"
|
||||||
|
./03_follower_node_setup.sh
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "Step 4: Wallet Creation"
|
||||||
|
./04_create_wallet.sh
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "Step 5: Transaction Sending"
|
||||||
|
./05_send_transaction.sh
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "Step 6: Final Verification"
|
||||||
|
./06_final_verification.sh
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "🎉 COMPLETE MULTI-NODE BLOCKCHAIN SETUP FINISHED!"
|
||||||
|
echo
|
||||||
|
echo "📋 Summary:"
|
||||||
|
echo "✅ aitbc1: Genesis authority node running"
|
||||||
|
echo "✅ aitbc: Follower node synchronized"
|
||||||
|
echo "✅ Network: Multi-node blockchain operational"
|
||||||
|
echo "✅ Transactions: Cross-node transfers working"
|
||||||
|
echo "✅ Configuration: Both nodes properly configured"
|
||||||
|
echo "✅ CLI Tool: All operations use CLI interface"
|
||||||
|
echo
|
||||||
|
echo "🔗 Quick Commands:"
|
||||||
|
echo " Check status: ./06_final_verification.sh"
|
||||||
|
echo " Create wallet: ./04_create_wallet.sh"
|
||||||
|
echo " Send transaction: ./05_send_transaction.sh"
|
||||||
|
echo
|
||||||
|
echo "📚 Documentation: See workflow documentation for detailed information"
|
||||||
|
echo "🌐 Web Interface: http://localhost:8006 (aitbc1) and http://10.1.223.40:8006 (aitbc)"
|
||||||
Reference in New Issue
Block a user