Files
testnet/scripts/generate-key-insertion-computer2.py
pezkuwichain 6fc40b89c3 Initial commit: Beta testnet configuration
- Chainspec file (5.2MB) with genesis hash 0xa017...54b1
- Validator startup scripts for Computer 2 (validators 5-8)
- Complete setup instructions in README
- Configuration for 8-validator beta testnet
2025-11-02 01:54:20 +03:00

194 lines
6.5 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Generate insert-all-beta-keys.sh from JSON validator file
This prevents manual copy-paste errors
"""
import json
import sys
from pathlib import Path
def main():
# Check if JSON file path provided
if len(sys.argv) < 2:
print("❌ Error: Please provide the path to validator JSON file")
print("")
print("Usage:")
print(" python3 generate-key-insertion-script.py /path/to/beta_testnet_validators_WITH_SEEDS_BACKUP.json")
print("")
print("Example:")
print(" python3 generate-key-insertion-script.py /media/mamostehp/D/res/beta_testnet_validators_WITH_SEEDS_BACKUP.json")
sys.exit(1)
json_file = Path(sys.argv[1])
if not json_file.exists():
print(f"❌ Error: File not found: {json_file}")
sys.exit(1)
print(f"📖 Reading validators from: {json_file}")
try:
with open(json_file, 'r') as f:
data = json.load(f)
except Exception as e:
print(f"❌ Error reading JSON: {e}")
sys.exit(1)
# Get validators from "beta" key
validators = data.get('beta', [])
if not validators:
print("❌ Error: No validators found in 'beta' key")
sys.exit(1)
print(f"✅ Found {len(validators)} validators")
# We need validators 5-8 (indices 4-7) validators for Computer 2
validators_to_use = validators[4:8]
# Generate the script
output_file = Path("/home/mamostehp/Pezkuwi-SDK/scripts/insert-all-beta-keys.sh")
print(f"🔧 Generating script: {output_file}")
script_content = """#!/usr/bin/env bash
# Insert all validator keys for Beta Testnet (Validators 5-8 (Computer 2))
# AUTO-GENERATED from validator JSON file
# DO NOT EDIT MANUALLY - Regenerate using generate-key-insertion-script.py
set -e
GREEN='\\033[0;32m'
BLUE='\\033[0;34m'
YELLOW='\\033[1;33m'
RED='\\033[0;31m'
NC='\\033[0m'
echo -e "${BLUE}═══════════════════════════════════════════════════════${NC}"
echo -e "${BLUE} Beta Testnet - Bulk Key Insertion${NC}"
echo -e "${BLUE} Auto-generated from JSON validator file${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════${NC}"
echo ""
echo -e "${YELLOW}⚠️ SECURITY CHECK${NC}"
echo "This script will insert validator keys for 4 local validators."
echo "Make sure all validators are running before proceeding."
echo ""
read -p "Press Ctrl+C to cancel, or Enter to continue..."
echo ""
# Function to insert key
insert_key() {
local validator_num=$1
local rpc_port=$2
local key_type=$3
local seed=$4
local public_key=$5
local rpc_url="http://127.0.0.1:${rpc_port}"
echo -e "${GREEN}Validator ${validator_num}: Inserting ${key_type} key...${NC}"
result=$(curl -s -H "Content-Type: application/json" \\
-d "{\\"id\\":1,\\"jsonrpc\\":\\"2.0\\",\\"method\\":\\"author_insertKey\\",\\"params\\":[\\"${key_type}\\",\\"${seed}\\",\\"${public_key}\\"]}" \\
"$rpc_url")
if echo "$result" | grep -q '"result":null'; then
echo -e "${GREEN} ✅ Success${NC}"
return 0
else
echo -e "${RED} ❌ Failed${NC}"
echo " Response: $result"
return 1
fi
}
echo -e "${BLUE}🔑 Starting key insertion for 4 validators...${NC}"
echo ""
"""
# Add validator keys
for idx, validator in enumerate(validators_to_use, 5):
rpc_port = 9943 + idx # 9944, 9945, 9946, 9947
script_content += f"""
# =============================================================================
# VALIDATOR {idx} - {validator.get('name', f'Validator-{idx}')} (Port {rpc_port})
# =============================================================================
echo -e "${{BLUE}}🔑 Validator {idx} - {validator.get('name', f'Validator-{idx}')}${{NC}}"
"""
# BABE key
script_content += f"""insert_key {idx} {rpc_port} "babe" "{validator['babe_seed']}" "{validator['babe']}"
"""
# GRANDPA key
script_content += f"""insert_key {idx} {rpc_port} "gran" "{validator['grandpa_seed']}" "{validator['grandpa']}"
"""
# Para Validator key
script_content += f"""insert_key {idx} {rpc_port} "para" "{validator['para_validator_seed']}" "{validator['para_validator']}"
"""
# Para Assignment key
script_content += f"""insert_key {idx} {rpc_port} "asgn" "{validator['para_assignment_seed']}" "{validator['para_assignment']}"
"""
# Authority Discovery key
script_content += f"""insert_key {idx} {rpc_port} "audi" "{validator['authority_discovery_seed']}" "{validator['authority_discovery']}"
"""
# BEEFY key
script_content += f"""insert_key {idx} {rpc_port} "beef" "{validator['beefy_seed']}" "{validator['beefy']}"
"""
script_content += f"""
echo ""
"""
# Add footer
script_content += """
echo -e "${GREEN}═══════════════════════════════════════════════════════${NC}"
echo -e "${GREEN}✅ Key insertion complete!${NC}"
echo -e "${GREEN}═══════════════════════════════════════════════════════${NC}"
echo ""
echo -e "${YELLOW}📝 Next steps:${NC}"
echo "1. Restart all validators to apply keys"
echo "2. Wait for network to start producing blocks"
echo "3. Check logs for 'Prepared block for proposing'"
echo ""
echo "Validator logs:"
echo " Validator 1: tail -f /tmp/beta-validator-1.log"
echo " Validator 2: tail -f /tmp/beta-validator-2.log"
echo " Validator 3: tail -f /tmp/beta-validator-3.log"
echo " Validator 4: tail -f /tmp/beta-validator-4.log"
"""
# Write the script
try:
with open(output_file, 'w') as f:
f.write(script_content)
# Make executable
output_file.chmod(0o755)
print(f"✅ Script generated successfully!")
print(f"")
print(f"📁 Output: {output_file}")
print(f"")
print(f"🚀 Next steps:")
print(f" 1. Start validators: ./scripts/start-all-beta-validators.sh")
print(f" 2. Insert keys: ./scripts/insert-all-beta-keys.sh")
print(f"")
print(f"✅ Done! No manual copy-paste needed!")
except Exception as e:
print(f"❌ Error writing script: {e}")
sys.exit(1)
if __name__ == "__main__":
main()