# Next Steps: Script-Based Deployment & Boot Node for Validated Set This document outlines the complete set of next steps needed to build out a working and functional deployment system using **EITHER**: - **Script-based approach**: Automated scripts to deploy and configure the validated set - **Boot node approach**: A dedicated boot node to bootstrap the network discovery Both approaches can be used together or separately, depending on network requirements. ## Overview The goal is to create a comprehensive, production-ready deployment system that: 1. ✅ Deploys containers (already done) 2. 🔄 Properly bootstraps the network using **scripts** OR **boot node** (or both) 3. ✅ Validates and verifies the entire deployment 4. ✅ Ensures all validators are properly configured and connected 5. ✅ Provides end-to-end orchestration scripts ## Two Approaches: Script vs Boot Node ### Approach 1: Script-Based Deployment **Use when:** Private/permissioned network with known static nodes, no external discovery needed **Characteristics:** - Uses `static-nodes.json` for peer discovery - Scripts orchestrate deployment and configuration - No dedicated boot node required - All nodes listed statically - Faster initial setup - **Recommended for your current setup** (validators ↔ sentries topology) ### Approach 2: Boot Node Deployment **Use when:** Network needs dynamic peer discovery, external nodes will join later **Characteristics:** - Dedicated boot node for initial discovery - Other nodes connect to boot node first - Boot node helps discover additional peers - More flexible for network expansion - Required for public/open networks - Can be combined with static nodes ### Approach 3: Hybrid (Script + Boot Node) **Use when:** Best of both worlds - script orchestration + boot node for discovery **Characteristics:** - Scripts handle deployment and configuration - Boot node provides discovery service - Static nodes for critical connections - Boot node for dynamic discovery - Most flexible approach --- ## Phase 1: Script-Based Deployment (Primary Approach) ### 1.1 Create Validated Set Deployment Script **File:** `scripts/deployment/deploy-validated-set.sh` **Purpose:** Script-based deployment that orchestrates the entire validated set without requiring a boot node **Functionality:** - Deploy all containers (validators, sentries, RPC) - Copy configuration files (genesis, static-nodes, permissions) - Copy validator keys - Start services in correct order (sentries → validators → RPC) - Validate deployment - Generate deployment report **Key Features:** - Uses static-nodes.json (no boot node needed) - Sequential startup orchestration - Comprehensive validation - Error handling and rollback - Detailed logging **Status:** ❌ **NOT CREATED** (This is the PRIMARY script-based approach) **Alternative:** If boot node is desired, see Phase 1A below --- ## Phase 1A: Boot Node Deployment (Optional) ### 1A.1 Create Boot Node Deployment Script **File:** `scripts/deployment/deploy-boot-node.sh` **Purpose:** Deploy and configure a dedicated boot node (optional - only if using boot node approach) **Functionality:** - Deploy container with boot node configuration - Configure as discovery/bootstrap node - Expose only P2P port (30303) - no RPC - Generate and export enode for use by other nodes - Ensure boot node starts first before other nodes **Key Features:** - Special configuration for boot node (if separate) - OR configure first validator (106) as boot node - Generate boot node enode for inclusion in genesis or static-nodes - Health checks to ensure boot node is ready before proceeding **Status:** ❌ **NOT CREATED** (Optional - only if boot node approach is chosen) **Decision Point:** Do you need a boot node, or can you use script-based static-nodes approach? --- ### 1.2 Create Network Bootstrap Script **File:** `scripts/network/bootstrap-network.sh` **Purpose:** Orchestrate the initial network bootstrap sequence (works with EITHER script-based or boot node approach) **Functionality (Script-Based Approach):** 1. Extract enodes from all deployed containers 2. Generate static-nodes.json with all validator enodes 3. Deploy static-nodes.json to all nodes 4. Start nodes in sequence (sentries → validators → RPC) 5. Verify peer connections 6. Validate network is operational **Functionality (Boot Node Approach):** 1. Start boot node first 2. Wait for boot node to be ready (P2P listening, enode available) 3. Extract boot node enode 4. Update static-nodes.json for all other nodes with boot node enode 5. Deploy static-nodes.json to all nodes 6. Start remaining nodes in sequence (sentries, then validators, then RPC) 7. Verify peer connections **Key Features:** - Supports both script-based and boot node approaches - Sequential startup with dependencies - Health checks between steps - Automatic enode extraction - Updates static-nodes.json dynamically - Validates peer connections after startup **Status:** ❌ **NOT CREATED** **Recommendation:** Start with script-based approach (simpler for permissioned networks) --- ## Phase 2: Validated Set Deployment ### 2.1 Create Validator Set Validation Script **File:** `scripts/validation/validate-validator-set.sh` **Purpose:** Validate that all validators are properly configured and can participate in consensus **Functionality:** - Check validator keys exist and are accessible - Verify validator addresses match configuration - Validate validator keys are loaded by Besu - Check validators are in genesis (if static) or validator contract - Verify validator services are running - Check validators can connect to each other - Validate consensus is active (blocks being produced) **Key Features:** - Comprehensive validator health checks - Validator key validation - Consensus participation verification - Network connectivity checks - QBFT-specific validation **Status:** ❌ **NOT CREATED** --- ### 2.2 Create Validator Registration Script **File:** `scripts/validation/register-validators.sh` **Purpose:** Register validators in the validator contract (for dynamic validator management) **Functionality:** - Read validator addresses from key files - Submit validator registration transactions - Verify validator registration on-chain - Wait for epoch change if needed - Validate validators are active in consensus **Key Features:** - Smart contract interaction - Transaction submission and verification - Epoch management - Validator set verification **Status:** ❌ **NOT CREATED** (Note: Only needed if using dynamic validator management via contract) --- ### 2.3 Create Deployment Validation Orchestrator **File:** `scripts/validation/validate-deployment.sh` **Purpose:** Comprehensive end-to-end validation of the entire deployment **Functionality:** 1. Validate container deployment (all containers running) 2. Validate network connectivity (P2P, RPC) 3. Validate configuration files (genesis, static-nodes, permissions) 4. Validate validator set (keys, addresses, consensus participation) 5. Validate sentry connectivity (can connect to validators) 6. Validate RPC endpoints (can query blockchain state) 7. Validate allowlist configuration (permissions-nodes.toml) 8. Generate validation report **Key Features:** - Multi-phase validation - Comprehensive checks - Detailed reporting - Error collection and reporting - Exit codes for CI/CD integration **Status:** ⚠️ **PARTIAL** (Some validation exists, but not comprehensive) --- ## Phase 3: End-to-End Deployment Orchestration ### 3.1 Create Complete Deployment Orchestrator **File:** `scripts/deployment/deploy-validated-set.sh` **Purpose:** Single script that orchestrates the entire validated set deployment **Functionality:** 1. **Pre-deployment Validation** - Check prerequisites - Validate configuration - Check resources - Verify no conflicts 2. **Deploy Containers** - Deploy boot node (or first validator) - Deploy remaining validators - Deploy sentries - Deploy RPC nodes 3. **Bootstrap Network** - Start boot node - Extract boot node enode - Update static-nodes.json - Deploy configuration files - Start remaining nodes in correct order 4. **Configure Validators** - Copy validator keys - Register validators (if dynamic) - Verify validator set 5. **Post-Deployment Validation** - Run comprehensive validation - Verify consensus is active - Check all services - Generate deployment report 6. **Rollback on Failure** - Clean up partial deployments - Restore previous state if needed **Key Features:** - Single command deployment - Error handling and rollback - Progress reporting - Detailed logging - Validation at each step **Status:** ❌ **NOT CREATED** --- ### 3.2 Create Quick Bootstrap Script **File:** `scripts/deployment/bootstrap-quick.sh` **Purpose:** Quick bootstrap for existing deployed containers **Functionality:** - Assume containers already deployed - Extract boot node enode - Update static-nodes.json - Deploy updated configs - Restart services in correct order - Verify connectivity **Use Case:** When containers are deployed but network needs to be bootstrapped/rebootstrapped **Status:** ❌ **NOT CREATED** --- ## Phase 4: Health Checks & Monitoring ### 4.1 Create Node Health Check Script **File:** `scripts/health/check-node-health.sh` **Purpose:** Check health of individual nodes **Functionality:** - Container status - Service status (systemd) - Process status - P2P connectivity - RPC availability (if enabled) - Block sync status - Peer count - Consensus participation (for validators) **Key Features:** - Per-node health checks - Detailed status output - JSON output option (for monitoring) - Exit codes for alerts **Status:** ⚠️ **PARTIAL** (Some checks exist in other scripts) --- ### 4.2 Create Network Health Dashboard Script **File:** `scripts/health/network-health-dashboard.sh` **Purpose:** Display comprehensive network health overview **Functionality:** - All nodes status table - Peer connectivity matrix - Block height comparison - Consensus status - Validator participation - Error summary **Key Features:** - Human-readable dashboard - Color-coded status - Quick problem identification - Summary statistics **Status:** ❌ **NOT CREATED** --- ## Phase 5: Configuration Management ### 5.1 Create Configuration Generator **File:** `scripts/config/generate-configs.sh` **Purpose:** Generate all configuration files from templates **Functionality:** - Generate genesis.json (if needed) - Generate static-nodes.json from live nodes - Generate permissions-nodes.toml - Generate node-specific config files (config-validator.toml, etc.) - Validate generated configs **Key Features:** - Template-based generation - Dynamic enode extraction - Validation of generated files - Backup of existing configs **Status:** ⚠️ **PARTIAL** (Some config generation exists for allowlist) --- ### 5.2 Create Configuration Validator **File:** `scripts/config/validate-configs.sh` **Purpose:** Validate all configuration files before deployment **Functionality:** - Validate JSON/TOML syntax - Validate genesis.json structure - Validate static-nodes.json (enode format, node IDs) - Validate permissions-nodes.toml - Check for missing files - Verify file permissions **Key Features:** - Pre-deployment validation - Detailed error messages - Report generation **Status:** ❌ **NOT CREATED** --- ## Phase 6: Documentation & Runbooks ### 6.1 Create Boot Node Runbook **File:** `docs/BOOT_NODE_RUNBOOK.md` **Purpose:** Detailed runbook for boot node setup and troubleshooting **Contents:** - Boot node concept explanation - Setup instructions - Configuration details - Troubleshooting guide - Best practices **Status:** ❌ **NOT CREATED** --- ### 6.2 Create Validated Set Deployment Guide **File:** `docs/VALIDATED_SET_DEPLOYMENT_GUIDE.md` **Purpose:** Step-by-step guide for deploying a validated set **Contents:** - Prerequisites - Deployment steps - Validation procedures - Troubleshooting - Rollback procedures **Status:** ❌ **NOT CREATED** --- ### 6.3 Create Network Bootstrap Guide **File:** `docs/NETWORK_BOOTSTRAP_GUIDE.md` **Purpose:** Guide for bootstrapping the network from scratch **Contents:** - Bootstrap sequence - Node startup order - Configuration updates - Verification steps - Common issues **Status:** ❌ **NOT CREATED** --- ## Phase 7: Testing & Validation ### 7.1 Create Integration Test Suite **File:** `scripts/test/test-deployment.sh` **Purpose:** Automated integration tests for deployment **Functionality:** - Test container deployment - Test network bootstrap - Test validator connectivity - Test consensus functionality - Test RPC endpoints - Test rollback procedures **Key Features:** - Automated testing - Test reports - CI/CD integration **Status:** ❌ **NOT CREATED** --- ### 7.2 Create Smoke Tests **File:** `scripts/test/smoke-tests.sh` **Purpose:** Quick smoke tests after deployment **Functionality:** - Basic connectivity checks - Service status checks - RPC endpoint checks - Quick consensus check **Key Features:** - Fast execution - Critical path validation - Exit codes for automation **Status:** ❌ **NOT CREATED** --- ## Implementation Priority ### High Priority (Critical Path) - Script-Based Approach 1. ✅ **Validated Set Deployment Script** (`deploy-validated-set.sh`) - **PRIMARY** 2. ✅ **Network Bootstrap Script** (`bootstrap-network.sh`) - Script-based mode 3. ✅ **Deployment Validation Orchestrator** (`validate-deployment.sh`) 4. ✅ **Validator Set Validation** (`validate-validator-set.sh`) ### Optional (Boot Node Approach) 5. ⚠️ **Boot Node Deployment Script** (`deploy-boot-node.sh`) - Only if boot node needed 6. ⚠️ **Network Bootstrap Script** - Boot node mode (enhance existing script) ### Medium Priority (Important Features) 5. ⚠️ **Validator Set Validation** (`validate-validator-set.sh`) 6. ⚠️ **Node Health Checks** (`check-node-health.sh`) 7. ⚠️ **Configuration Generator** (enhance existing) 8. ⚠️ **Quick Bootstrap Script** (`bootstrap-quick.sh`) ### Low Priority (Nice to Have) 9. 📝 **Network Health Dashboard** (`network-health-dashboard.sh`) 10. 📝 **Validator Registration** (`register-validators.sh`) - only if using dynamic validators 11. 📝 **Configuration Validator** (`validate-configs.sh`) 12. 📝 **Documentation** (runbooks and guides) 13. 📝 **Test Suites** (integration and smoke tests) --- ## Recommended Implementation Order ### Week 1: Core Infrastructure (Script-Based) 1. Create `deploy-validated-set.sh` - **Primary script-based deployment** 2. Create `bootstrap-network.sh` - Script-based mode (uses static-nodes) 3. Enhance existing `validate-deployment.sh` 4. Create `validate-validator-set.sh` ### Optional: Boot Node Support (If Needed) 5. Create `deploy-boot-node.sh` - Only if boot node approach is chosen 6. Enhance `bootstrap-network.sh` - Add boot node mode support ### Week 2: Orchestration 4. Create `deploy-validated-set.sh` 5. Create `validate-validator-set.sh` 6. Create `bootstrap-quick.sh` ### Week 3: Health & Monitoring 7. Create `check-node-health.sh` 8. Create `network-health-dashboard.sh` 9. Enhance configuration generation scripts ### Week 4: Documentation & Testing 10. Create documentation (runbooks, guides) 11. Create test suites 12. Final validation and testing --- ## Existing Assets to Leverage ### Already Implemented - ✅ Container deployment scripts (`deploy-besu-nodes.sh`, etc.) - ✅ Configuration copying (`copy-besu-config.sh`) - ✅ Allowlist management (`besu-*.sh` scripts) - ✅ Network utilities (`update-static-nodes.sh`) - ✅ Basic validation scripts (`validate-ml110-deployment.sh`) - ✅ Deployment status checks (`check-deployments.sh`) ### Can Be Enhanced - ⚠️ `validate-deployment.sh` - needs comprehensive validator set validation - ⚠️ `deploy-all.sh` - needs boot node support and sequential startup - ⚠️ Configuration generation - needs boot node enode integration --- ## Success Criteria A successful implementation should provide: 1. **Single Command Deployment** ```bash ./scripts/deployment/deploy-validated-set.sh ``` - Deploys all containers - Bootstraps network correctly - Validates entire deployment - Reports success/failure 2. **Network Bootstrap** - Boot node starts first - Other nodes connect successfully - All validators participate in consensus - Network is fully operational 3. **Validation** - All validators are validated and active - Network connectivity verified - Consensus is functional - RPC endpoints are working 4. **Documentation** - Complete runbooks for all procedures - Troubleshooting guides - Best practices documented --- ## Quick Start Checklist ### Script-Based Approach (Recommended for Your Setup) - [ ] Review existing deployment scripts - [ ] Create `deploy-validated-set.sh` - Main deployment orchestrator - [ ] Create `bootstrap-network.sh` - Script-based mode (static-nodes) - [ ] Create `validate-validator-set.sh` - Validator validation - [ ] Enhance existing `validate-deployment.sh` - [ ] Test deployment sequence on test environment - [ ] Document procedures - [ ] Test end-to-end on production-like environment ### Boot Node Approach (Optional - Only If Needed) - [ ] Decide if boot node is needed (probably not for permissioned network) - [ ] Design boot node strategy (separate node vs first validator) - [ ] Create `deploy-boot-node.sh` (if using dedicated boot node) - [ ] Enhance `bootstrap-network.sh` with boot node mode - [ ] Test boot node bootstrap sequence - [ ] Document boot node procedures --- ## Notes ### Script-Based vs Boot Node Decision **For Your Current Setup (Permissioned Network with Validators ↔ Sentries):** - ✅ **Recommend: Script-Based Approach** - You already use `static-nodes.json` for peer discovery - All nodes are known and static - No external discovery needed - Simpler and faster deployment - Script orchestrates everything using static configuration - ❌ **Boot Node Not Required** - Boot nodes are for dynamic peer discovery - Public/open networks that need discovery - Your network is permissioned with known validators - Static-nodes.json already serves the bootstrap purpose **When to Use Boot Node:** - Network will expand with external nodes - Dynamic peer discovery needed - Public network deployment - Combining static + dynamic discovery ### Other Notes - **Validator Registration**: Only needed if using dynamic validator management via smart contract. If validators are statically defined in genesis, skip this step. - **Sequential Startup**: Critical for network bootstrap. Nodes must start in correct order: sentries → validators → RPC nodes (for script-based) OR boot node → sentries → validators → RPC nodes (for boot node approach). - **Validation**: Comprehensive validation should happen at multiple stages: pre-deployment, post-deployment, and ongoing health checks.