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
This commit is contained in:
2025-11-02 01:54:20 +03:00
commit 6fc40b89c3
11 changed files with 1022 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
Beta Testnet Setup - Computer 2 (Validators 5-8)
================================================
BOOTNODE ADDRESS:
/ip4/172.31.134.70/tcp/30333/p2p/12D3KooWLdhYkAXWWR7fFSWhMmBFgHVTf78ZWaWf2BpJxzJbTqCU
QUICK START:
1. Copy this entire computer2 folder to Computer 2
2. Run: python3 generate-key-insertion-computer2.py /path/to/beta_testnet_validators_WITH_SEEDS_BACKUP.json
3. Run: ./start-all-validators-computer2.sh
4. Run: ./insert-keys-computer2.sh
5. Restart validators for keys to take effect
VALIDATORS:
- Validator 5: Port 30337 (P2P), 9948 (RPC)
- Validator 6: Port 30338 (P2P), 9949 (RPC)
- Validator 7: Port 30339 (P2P), 9950 (RPC)
- Validator 8: Port 30340 (P2P), 9951 (RPC)
CHECK LOGS:
tail -f /tmp/beta-validator-5.log
+193
View File
@@ -0,0 +1,193 @@
#!/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()
+29
View File
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
# Start all validators for Computer 2 (Validators 5-8)
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo -e "${BLUE}═══════════════════════════════════════════════════════${NC}"
echo -e "${BLUE} Beta Testnet - Computer 2 (Validators 5-8)${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════${NC}"
echo ""
for i in 5 6 7 8; do
echo -e "${GREEN}Starting Validator $i...${NC}"
"$SCRIPT_DIR/start-beta-validator-$i.sh"
echo ""
sleep 3
done
echo -e "${GREEN}✅ All 4 validators started!${NC}"
echo ""
echo "Logs:"
for i in 5 6 7 8; do
echo " Validator $i: tail -f /tmp/beta-validator-$i.log"
done
+89
View File
@@ -0,0 +1,89 @@
#!/usr/bin/env bash
# Beta Testnet Validator 5 Startup Script
# This is the bootnode for the beta testnet
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PEZKUWI_DIR="$(dirname "$SCRIPT_DIR")"
BINARY="$PEZKUWI_DIR/target/release/pezkuwi"
BASE_PATH="/tmp/beta-validator-5"
LOG_FILE="/tmp/beta-validator-5.log"
# Colors
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${BLUE}🚀 Starting Beta Testnet Validator 5 (Bootnode)${NC}"
echo -e "${YELLOW}⚠️ Make sure you have inserted the validator keys before starting${NC}"
echo ""
# Check if binary exists
if [ ! -f "$BINARY" ]; then
echo "Error: Pezkuwi binary not found at $BINARY"
echo "Please run: cargo build --release"
exit 1
fi
# Create base path
mkdir -p "$BASE_PATH"
# Start validator
echo -e "${GREEN}📡 Starting validator node...${NC}"
echo "Base path: $BASE_PATH"
echo "Log file: $LOG_FILE"
echo "P2P port: 30333"
echo "RPC port: 9944"
echo "WS port: 9944"
echo ""
nohup "$BINARY" \
--chain pezkuwichain-beta-testnet \
--base-path "$BASE_PATH" \
--validator \
--name "Validator-beta-5" \
--port 30337 \
--rpc-port 9948 \
--rpc-cors all \
--rpc-external \
--rpc-methods=Unsafe \
--unsafe-rpc-external \
--unsafe-force-node-key-generation \
--prometheus-external \
--telemetry-url "wss://telemetry.pezkuwichain.io/submit/ 0" \
> "$LOG_FILE" 2>&1 &
NODE_PID=$!
echo "$NODE_PID" > /tmp/beta-validator-5.pid
echo -e "${GREEN}✅ Validator started with PID: $NODE_PID${NC}"
echo ""
echo "Waiting for node to initialize..."
sleep 10
# Check if node is running
if ps -p $NODE_PID > /dev/null 2>&1; then
echo -e "${GREEN}✅ Node is running!${NC}"
echo ""
echo "📊 Recent logs:"
tail -20 "$LOG_FILE"
echo ""
echo -e "${BLUE}🔗 Connections:${NC}"
echo " RPC: http://127.0.0.1:9944"
echo " WebSocket: ws://127.0.0.1:9944"
echo ""
echo -e "${YELLOW}📝 To insert keys, use:${NC}"
echo " ./scripts/insert-keys-validator-1.sh"
echo ""
echo -e "${YELLOW}📝 To stop the validator:${NC}"
echo " kill $NODE_PID"
echo " # or"
echo " kill \$(cat /tmp/beta-validator-5.pid)"
else
echo -e "${RED}❌ Node failed to start${NC}"
echo "Check logs at: $LOG_FILE"
tail -50 "$LOG_FILE"
exit 1
fi
+65
View File
@@ -0,0 +1,65 @@
#!/usr/bin/env bash
# Beta Testnet Validator 6 Startup Script
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PEZKUWI_DIR="$(dirname "$SCRIPT_DIR")"
BINARY="$PEZKUWI_DIR/target/release/pezkuwi"
BASE_PATH="/tmp/beta-validator-6"
LOG_FILE="/tmp/beta-validator-6.log"
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo -e "${BLUE}🚀 Starting Beta Testnet Validator 6${NC}"
if [ ! -f "$BINARY" ]; then
echo "Error: Pezkuwi binary not found at $BINARY"
exit 1
fi
mkdir -p "$BASE_PATH"
echo -e "${GREEN}📡 Starting validator node...${NC}"
echo "Base path: $BASE_PATH"
echo "Log file: $LOG_FILE"
echo "P2P port: 30334"
echo "RPC port: 9945"
echo ""
nohup "$BINARY" \
--chain pezkuwichain-beta-testnet \
--base-path "$BASE_PATH" \
--validator \
--name "Validator-beta-6" \
--port 30338 \
--rpc-port 9949 \
--rpc-cors all \
--rpc-external \
--rpc-methods=Unsafe \
--unsafe-rpc-external \
--unsafe-force-node-key-generation \
--prometheus-external \
--prometheus-port 9620 \
--bootnodes "/ip4/172.31.134.70/tcp/30333/p2p/12D3KooWLdhYkAXWWR7fFSWhMmBFgHVTf78ZWaWf2BpJxzJbTqCU" \
> "$LOG_FILE" 2>&1 &
NODE_PID=$!
echo "$NODE_PID" > /tmp/beta-validator-6.pid
echo -e "${GREEN}✅ Validator started with PID: $NODE_PID${NC}"
sleep 10
if ps -p $NODE_PID > /dev/null 2>&1; then
echo -e "${GREEN}✅ Node is running!${NC}"
tail -20 "$LOG_FILE"
echo ""
echo "RPC: http://127.0.0.1:9945"
else
echo "❌ Node failed to start"
tail -50 "$LOG_FILE"
exit 1
fi
+64
View File
@@ -0,0 +1,64 @@
#!/usr/bin/env bash
# Beta Testnet Validator 7 Startup Script
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PEZKUWI_DIR="$(dirname "$SCRIPT_DIR")"
BINARY="$PEZKUWI_DIR/target/release/pezkuwi"
BASE_PATH="/tmp/beta-validator-7"
LOG_FILE="/tmp/beta-validator-7.log"
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
echo -e "${BLUE}🚀 Starting Beta Testnet Validator 7${NC}"
if [ ! -f "$BINARY" ]; then
echo "Error: Pezkuwi binary not found at $BINARY"
exit 1
fi
mkdir -p "$BASE_PATH"
echo -e "${GREEN}📡 Starting validator node...${NC}"
echo "Base path: $BASE_PATH"
echo "Log file: $LOG_FILE"
echo "P2P port: 30335"
echo "RPC port: 9946"
echo ""
nohup "$BINARY" \
--chain pezkuwichain-beta-testnet \
--base-path "$BASE_PATH" \
--validator \
--name "Validator-beta-7" \
--port 30339 \
--rpc-port 9950 \
--rpc-cors all \
--rpc-external \
--rpc-methods=Unsafe \
--unsafe-rpc-external \
--unsafe-force-node-key-generation \
--prometheus-external \
--prometheus-port 9621 \
--bootnodes "/ip4/172.31.134.70/tcp/30333/p2p/12D3KooWLdhYkAXWWR7fFSWhMmBFgHVTf78ZWaWf2BpJxzJbTqCU" \
> "$LOG_FILE" 2>&1 &
NODE_PID=$!
echo "$NODE_PID" > /tmp/beta-validator-7.pid
echo -e "${GREEN}✅ Validator started with PID: $NODE_PID${NC}"
sleep 10
if ps -p $NODE_PID > /dev/null 2>&1; then
echo -e "${GREEN}✅ Node is running!${NC}"
tail -20 "$LOG_FILE"
echo ""
echo "RPC: http://127.0.0.1:9946"
else
echo "❌ Node failed to start"
tail -50 "$LOG_FILE"
exit 1
fi
+64
View File
@@ -0,0 +1,64 @@
#!/usr/bin/env bash
# Beta Testnet Validator 8 Startup Script
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PEZKUWI_DIR="$(dirname "$SCRIPT_DIR")"
BINARY="$PEZKUWI_DIR/target/release/pezkuwi"
BASE_PATH="/tmp/beta-validator-8"
LOG_FILE="/tmp/beta-validator-8.log"
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
echo -e "${BLUE}🚀 Starting Beta Testnet Validator 8${NC}"
if [ ! -f "$BINARY" ]; then
echo "Error: Pezkuwi binary not found at $BINARY"
exit 1
fi
mkdir -p "$BASE_PATH"
echo -e "${GREEN}📡 Starting validator node...${NC}"
echo "Base path: $BASE_PATH"
echo "Log file: $LOG_FILE"
echo "P2P port: 30336"
echo "RPC port: 9947"
echo ""
nohup "$BINARY" \
--chain pezkuwichain-beta-testnet \
--base-path "$BASE_PATH" \
--validator \
--name "Validator-beta-8" \
--port 30340 \
--rpc-port 9951 \
--rpc-cors all \
--rpc-external \
--rpc-methods=Unsafe \
--unsafe-rpc-external \
--unsafe-force-node-key-generation \
--prometheus-external \
--prometheus-port 9622 \
--bootnodes "/ip4/172.31.134.70/tcp/30333/p2p/12D3KooWLdhYkAXWWR7fFSWhMmBFgHVTf78ZWaWf2BpJxzJbTqCU" \
> "$LOG_FILE" 2>&1 &
NODE_PID=$!
echo "$NODE_PID" > /tmp/beta-validator-8.pid
echo -e "${GREEN}✅ Validator started with PID: $NODE_PID${NC}"
sleep 10
if ps -p $NODE_PID > /dev/null 2>&1; then
echo -e "${GREEN}✅ Node is running!${NC}"
tail -20 "$LOG_FILE"
echo ""
echo "RPC: http://127.0.0.1:9947"
else
echo "❌ Node failed to start"
tail -50 "$LOG_FILE"
exit 1
fi
+19
View File
@@ -0,0 +1,19 @@
#!/usr/bin/env bash
# Stop all validators on Computer 2
YELLOW='\033[1;33m'
GREEN='\033[0;32m'
NC='\033[0m'
echo -e "${YELLOW}🛑 Stopping Computer 2 Validators...${NC}"
for i in 5 6 7 8; do
if [ -f "/tmp/beta-validator-$i.pid" ]; then
PID=$(cat /tmp/beta-validator-$i.pid)
echo -e "${GREEN}Stopping Validator $i (PID: $PID)...${NC}"
kill $PID 2>/dev/null || true
rm /tmp/beta-validator-$i.pid
fi
done
echo -e "${GREEN}✅ All validators stopped${NC}"