Files
smom-dbis-138/scripts/generate-genesis-proper.sh
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

157 lines
4.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
# Generate Genesis for ChainID 138 with proper IBFT extraData
# This script uses Besu's operator generate-blockchain-config to create a proper genesis file
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../lib/init.sh"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
CONFIG_DIR="$PROJECT_ROOT/config"
KEYS_DIR="$PROJECT_ROOT/keys"
VALIDATORS_DIR="$KEYS_DIR/validators"
OUTPUT_DIR="$PROJECT_ROOT/config/generated"
# Configuration
CHAIN_ID=138
BLOCK_PERIOD=2
EPOCH_LENGTH=30000
REQUEST_TIMEOUT=10
GAS_LIMIT="0x1c9c380"
NUM_VALIDATORS=${1:-4}
log_success "Generating genesis for ChainID ${CHAIN_ID} with proper IBFT extraData"
# Check if Besu is installed
if ! command -v besu &> /dev/null; then
log_error "Error: Besu CLI not found. Please install Besu."
echo "Visit: https://besu.hyperledger.org/en/stable/HowTo/Get-Started/Installation-Options/"
exit 1
fi
# Create directories
mkdir -p "$VALIDATORS_DIR"
mkdir -p "$OUTPUT_DIR"
mkdir -p "$CONFIG_DIR"
# Create genesis configuration file for Besu operator
cat > "$CONFIG_DIR/genesis-config.json" <<EOF
{
"genesis": {
"config": {
"chainId": ${CHAIN_ID},
"berlinBlock": 0,
"londonBlock": 0,
"istanbulBlock": 0,
"ibft2": {
"blockperiodseconds": ${BLOCK_PERIOD},
"epochlength": ${EPOCH_LENGTH},
"requesttimeoutseconds": ${REQUEST_TIMEOUT}
}
},
"nonce": "0x0",
"timestamp": "0x$(printf '%x' $(date +%s))",
"gasLimit": "${GAS_LIMIT}",
"difficulty": "0x1",
"mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb": {
"balance": "0xde0b6b3a7640000"
}
}
},
"blockchain": {
"nodes": {
"generate": true,
"count": ${NUM_VALIDATORS}
}
}
}
EOF
log_warn "Generating validator keys and genesis using Besu operator..."
# Generate blockchain configuration using Besu operator
besu operator generate-blockchain-config \
--config-file="$CONFIG_DIR/genesis-config.json" \
--to="$OUTPUT_DIR" \
--private-key-file-name=key.priv
if [ $? -ne 0 ]; then
log_error "Error: Failed to generate blockchain configuration"
echo "Please ensure Besu is properly installed and the configuration file is valid"
exit 1
fi
# Copy generated files
log_warn "Copying generated files..."
# Copy genesis file
if [ -f "$OUTPUT_DIR/genesis.json" ]; then
cp "$OUTPUT_DIR/genesis.json" "$CONFIG_DIR/genesis.json"
log_success "✓ Genesis file generated: $CONFIG_DIR/genesis.json"
else
log_error "Error: Genesis file not found in output directory"
exit 1
fi
# Copy validator keys
if [ -d "$OUTPUT_DIR/keys" ]; then
cp -r "$OUTPUT_DIR/keys"/* "$VALIDATORS_DIR/"
log_success "✓ Validator keys copied to: $VALIDATORS_DIR"
fi
# Extract validator addresses from genesis
log_warn "Extracting validator information..."
# Get validator addresses from genesis file
VALIDATOR_ADDRESSES=$(jq -r '.extraData' "$CONFIG_DIR/genesis.json" | xxd -r -p | tail -c +33 | head -c $((NUM_VALIDATORS * 20)) | xxd -p -c 20 | sed 's/../0x&/g')
log_success "Validator addresses:"
echo "$VALIDATOR_ADDRESSES"
# Verify genesis file
log_warn "Verifying genesis file..."
# Check chain ID
GENESIS_CHAIN_ID=$(jq -r '.config.chainId' "$CONFIG_DIR/genesis.json")
if [ "$GENESIS_CHAIN_ID" != "$CHAIN_ID" ]; then
log_error "Error: Chain ID mismatch. Expected ${CHAIN_ID}, got ${GENESIS_CHAIN_ID}"
exit 1
fi
# Check extraData is not empty
EXTRA_DATA=$(jq -r '.extraData' "$CONFIG_DIR/genesis.json")
if [ "$EXTRA_DATA" = "0x" ] || [ -z "$EXTRA_DATA" ]; then
log_error "Error: extraData is empty. IBFT configuration may be invalid"
exit 1
fi
log_success "✓ Genesis file verified"
log_success "✓ Chain ID: ${GENESIS_CHAIN_ID}"
log_success "✓ ExtraData: ${EXTRA_DATA:0:50}..."
# Create static-nodes.json template
log_warn "Creating static-nodes.json template..."
# Note: static-nodes.json will need to be populated with actual enode addresses
# after nodes are deployed and enode addresses are known
cat > "$CONFIG_DIR/static-nodes.json.template" <<EOF
[
// Add enode addresses here after deployment
// Format: "enode://<public-key>@<ip>:30303"
]
EOF
log_success "Setup complete!"
log_warn "Next steps:"
echo "1. Review genesis.json: $CONFIG_DIR/genesis.json"
echo "2. Store validator keys securely (Azure Key Vault for production)"
echo "3. Deploy infrastructure using Terraform"
echo "4. Update static-nodes.json with actual enode addresses after deployment"
echo "5. Deploy Kubernetes resources"