-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup-genesis.sh
More file actions
executable file
·145 lines (119 loc) · 3.82 KB
/
Copy pathsetup-genesis.sh
File metadata and controls
executable file
·145 lines (119 loc) · 3.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/bash
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}Setting up local PQ devnet...${NC}"
# Create necessary directories
echo -e "${YELLOW}Creating directories...${NC}"
mkdir -p config/keys
mkdir -p genesis
mkdir -p leanview-data
# Use local image if available, otherwise use remote
REAM_IMAGE=${REAM_IMAGE:-"ghcr.io/reamlabs/ream:latest"}
echo "Using Docker image: ${REAM_IMAGE}"
# Generate 6 private keys for the nodes
echo -e "${YELLOW}Generating private keys for 6 nodes...${NC}"
for i in {0..5}; do
echo "Generating private key for ${i}th node..."
docker run --rm -v $(pwd)/config/keys:/keys ${REAM_IMAGE} \
generate_private_key --output-path /keys/node${i}.key
done
# Read the generated private keys
declare -a PRIVATE_KEYS
for i in {0..5}; do
PRIVATE_KEYS[$i]=$(cat config/keys/node${i}.key)
echo "Node ${i} private key: ${PRIVATE_KEYS[$i]:0:20}..."
done
# Generate validator-config.yaml
echo -e "${YELLOW}Generating validator-config.yaml...${NC}"
cat > ./genesis/validator-config.yaml << EOF
shuffle: roundrobin
validators:
EOF
# Ream: node 0, node 1
for i in {0..1}; do
NODE_IP="172.20.0.$((10 + i))"
NODE_PORT=9000 # All nodes use port 9000 internally
cat >> ./genesis/validator-config.yaml << EOF
- name: "ream_${i}"
privkey: "${PRIVATE_KEYS[$i]}"
enrFields:
ip: "${NODE_IP}"
quic: ${NODE_PORT}
seq: 1
count: 1
EOF
done
# Zeam: node 2, 3
for i in {2..3}; do
NODE_IP="172.20.0.$((10 + i))"
NODE_PORT=9000 # All nodes use port 9000 internally
cat >> ./genesis/validator-config.yaml << EOF
- name: "zeam_${i}"
privkey: "${PRIVATE_KEYS[$i]}"
enrFields:
ip: "${NODE_IP}"
quic: ${NODE_PORT}
seq: 1
count: 1
EOF
done
# Qlean: node 4, 5
for i in {4..5}; do
NODE_IP="172.20.0.$((10 + i))"
NODE_PORT=9000 # All nodes use port 9000 internally
cat >> ./genesis/validator-config.yaml << EOF
- name: "qlean_${i}"
privkey: "${PRIVATE_KEYS[$i]}"
enrFields:
ip: "${NODE_IP}"
quic: ${NODE_PORT}
seq: 1
count: 1
EOF
done
echo "validator-config.yaml generated successfully"
# Generate config.yaml with genesis time (1 minute buffer)
echo -e "${YELLOW}Generating config.yaml with genesis time...${NC}"
GENESIS_TIME=$(($(date +%s) + 60))
# Handle different date command syntax for Linux vs macOS
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS (BSD date)
echo "Genesis time set to: $(date -r ${GENESIS_TIME} '+%Y-%m-%d %H:%M:%S') (1 minute from now)"
else
# Linux (GNU date)
echo "Genesis time set to: $(date -d @${GENESIS_TIME} '+%Y-%m-%d %H:%M:%S') (1 minute from now)"
fi
cat > config.yaml << EOF
# Genesis Settings
GENESIS_TIME: ${GENESIS_TIME}
# Validator Settings
VALIDATOR_COUNT: 0 # This will be updated
EOF
echo "config.yaml generated successfully"
# Run eth-genesis-state-generator
echo -e "${YELLOW}Running eth-genesis-state-generator...${NC}"
docker run --rm -v $(pwd):/data -it ethpandaops/eth-beacon-genesis:pk910-leanchain leanchain \
--config /data/config.yaml \
--mass-validators /data/genesis/validator-config.yaml \
--state-output /data/genesis/genesis.ssz \
--json-output /data/genesis/genesis.json \
--nodes-output /data/genesis/nodes.yaml \
--validators-output /data/genesis/validators.yaml \
--config-output /data/genesis/config.yaml
echo -e "${GREEN}Genesis state generation complete!${NC}"
echo ""
echo "Generated files:"
echo " - config/keys/node*.key (6 private keys)"
echo " - config.yaml"
echo " - genesis/genesis.json"
echo " - genesis/genesis.ssz"
echo " - genesis/config.yaml"
echo " - genesis/nodes.yaml"
echo " - genesis/validators.yaml"
echo " - genesis/validator-config.yaml"
echo ""
echo -e "${GREEN}Setup complete! You can now run the nodes with docker-compose.${NC}"