Skip to content

Commit f376523

Browse files
authored
Genesis setup (#48)
1 parent 8ce97b0 commit f376523

File tree

5 files changed

+234
-25
lines changed

5 files changed

+234
-25
lines changed

README.md

Lines changed: 114 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,124 @@ POLKADOT_BULLETIN_BINARY_PATH=./target/release/polkadot-bulletin-chain ENV_PATH=
8181

8282
### Run a production chain
8383

84+
### Prepare keys for a production chain
85+
86+
**Prerequisites:**
8487
```
88+
# Build the node
8589
cargo build --release -p polkadot-bulletin-chain
86-
./target/release/polkadot-bulletin-chain --chain bulletin-polkadot
90+
91+
# Working dir (can be customized)
92+
mkdir /tmp/bulletin
93+
```
94+
95+
**Generate a validator account**
96+
```
97+
./target/release/polkadot-bulletin-chain key generate --scheme sr25519 --output-type json
98+
{
99+
"accountId": "0x4026e944eb9c6dabc42ba6155f5a6728b1f25c93b905b082450dffc64f4b6b7b",
100+
"networkId": "substrate",
101+
"publicKey": "0x4026e944eb9c6dabc42ba6155f5a6728b1f25c93b905b082450dffc64f4b6b7b",
102+
"secretPhrase": "arm glove mutual frequent melt world bicycle bean later donor clown choice",
103+
"secretSeed": "0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646",
104+
"ss58Address": "5DWpUqkKHHCaRHVqgocGMnJhuvNtCfm7xvqtSd23Mu6kEVQ9",
105+
"ss58PublicKey": "5DWpUqkKHHCaRHVqgocGMnJhuvNtCfm7xvqtSd23Mu6kEVQ9"
106+
}
107+
```
108+
109+
**Generate node-key (used for networking and peerId)**
110+
```
111+
./target/release/polkadot-bulletin-chain key generate-node-key --chain bulletin-polkadot --base-path /tmp/bulletin
112+
(example output)
113+
Generating key in "/tmp/bulletin/chains/bulletin-polkadot/network/secret_ed25519" (secret key)
114+
12D3KooWMTpYuDPNHoapmkfgJDCRe9XRcUuNzLYTgf82itZv4PZr (public key)
115+
116+
# Validate node key
117+
./target/release/polkadot-bulletin-chain key inspect-node-key --file /tmp/bulletin/chains/bulletin-polkadot/network/secret_ed25519
118+
(should print the same public key as above)
119+
```
120+
121+
**Generate initial session keys for genesis chain spec**
122+
```
123+
# Babe (suri is `secretSeed`)
124+
./target/release/polkadot-bulletin-chain key insert --chain bulletin-polkadot --base-path /tmp/bulletin --scheme sr25519 --key-type babe --suri 0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646
125+
# (check the generate file name, starts with babe / 62616265, e.g.: 626162654026e944eb9c6dabc42ba6155f5a6728b1f25c93b905b082450dffc64f4b6b7b)
126+
# (contains the secret key)
127+
cat /tmp/bulletin/chains/bulletin-polkadot/keystore/626162654026e944eb9c6dabc42ba6155f5a6728b1f25c93b905b082450dffc64f4b6b7b
128+
# "0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646"
129+
130+
# Grandpa (suri is `secretSeed`)
131+
./target/release/polkadot-bulletin-chain key insert --chain bulletin-polkadot --base-path /tmp/bulletin --scheme ed25519 --key-type gran --suri 0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646
132+
# (check the generate file name, starts with granpa / 6772616e, e.g.: 6772616e4026e944eb9c6dabc42ba6155f5a6728b1f25c93b905b082450dffc64f4b6b7b)
133+
# (contains the secret key)
134+
cat /tmp/bulletin/chains/bulletin-polkadot/keystore/6772616eddf71d1605421edfa311b8321e203b3d7cff1405eaeb891176638539e85a3d5b
135+
# "0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646"
136+
137+
# Two files should be generated here:
138+
./scripts/keystore-dump.sh /tmp/bulletin/chains/bulletin-polkadot/keystore
139+
(example output)
140+
Seed: 0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646
141+
=== babe (sr25519)===
142+
Secret Key URI `0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646` is account:
143+
Network ID: substrate
144+
Secret seed: 0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646
145+
Public key (hex): 0x4026e944eb9c6dabc42ba6155f5a6728b1f25c93b905b082450dffc64f4b6b7b
146+
Account ID: 0x4026e944eb9c6dabc42ba6155f5a6728b1f25c93b905b082450dffc64f4b6b7b
147+
Public key (SS58): 5DWpUqkKHHCaRHVqgocGMnJhuvNtCfm7xvqtSd23Mu6kEVQ9
148+
SS58 Address: 5DWpUqkKHHCaRHVqgocGMnJhuvNtCfm7xvqtSd23Mu6kEVQ9
149+
=== babe (ed25519)===
150+
Secret Key URI `0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646` is account:
151+
Network ID: substrate
152+
Secret seed: 0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646
153+
Public key (hex): 0xddf71d1605421edfa311b8321e203b3d7cff1405eaeb891176638539e85a3d5b
154+
Account ID: 0xddf71d1605421edfa311b8321e203b3d7cff1405eaeb891176638539e85a3d5b
155+
Public key (SS58): 5H5jr87N42Bpt36LKZxZcWS7P1ppgH5Yyf31C4LGb6PFFz9w
156+
SS58 Address: 5H5jr87N42Bpt36LKZxZcWS7P1ppgH5Yyf31C4LGb6PFFz9w
157+
158+
Seed: 0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646
159+
=== gran (sr25519)===
160+
Secret Key URI `0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646` is account:
161+
Network ID: substrate
162+
Secret seed: 0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646
163+
Public key (hex): 0x4026e944eb9c6dabc42ba6155f5a6728b1f25c93b905b082450dffc64f4b6b7b
164+
Account ID: 0x4026e944eb9c6dabc42ba6155f5a6728b1f25c93b905b082450dffc64f4b6b7b
165+
Public key (SS58): 5DWpUqkKHHCaRHVqgocGMnJhuvNtCfm7xvqtSd23Mu6kEVQ9
166+
SS58 Address: 5DWpUqkKHHCaRHVqgocGMnJhuvNtCfm7xvqtSd23Mu6kEVQ9
167+
=== gran (ed25519)===
168+
Secret Key URI `0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646` is account:
169+
Network ID: substrate
170+
Secret seed: 0x749a0904471df8d128b49dfeedf4081af0846b839c6eb69c536cf500e3886646
171+
Public key (hex): 0xddf71d1605421edfa311b8321e203b3d7cff1405eaeb891176638539e85a3d5b
172+
Account ID: 0xddf71d1605421edfa311b8321e203b3d7cff1405eaeb891176638539e85a3d5b
173+
Public key (SS58): 5H5jr87N42Bpt36LKZxZcWS7P1ppgH5Yyf31C4LGb6PFFz9w
174+
SS58 Address: 5H5jr87N42Bpt36LKZxZcWS7P1ppgH5Yyf31C4LGb6PFFz9w
87175
```
88176

177+
**Update genesis chain spec script**
178+
* File `./scripts/create_bulletin_polkadot_spec.sh`
179+
* Update `.genesis.runtimeGenesis.patch.validatorSet.initialValidators` with a validator account public key (example above: `5DWpUqkKHHCaRHVqgocGMnJhuvNtCfm7xvqtSd23Mu6kEVQ9`)
180+
* Update `genesis.runtimeGenesis.patch.session.keys` (and new element)
181+
* validator account public key
182+
* validator account public key
183+
* babe: <Babe public key (sr25519), e.g. 5DWpUqkKHHCaRHVqgocGMnJhuvNtCfm7xvqtSd23Mu6kEVQ9>
184+
* grandpa: <Grandpa public key (ed25519), e.g. 5H5jr87N42Bpt36LKZxZcWS7P1ppgH5Yyf31C4LGb6PFFz9w>
185+
* Update `.bootNodes` (if needed) - format: `"/dns/bulletin-polkadot-node-todo.w3f.node.io/tcp/443/wss/p2p/12D3KooWCF1eA2Gap69zgXD7Df3e9DqDUsGoByocggTGejoHjK23"`
186+
* Generate new chain spec:
187+
```
188+
./scripts/create_bulletin_polkadot_spec.sh ./target/production/wbuild/bulletin-polkadot-runtime/bulletin_polkadot_runtime.compact.compressed.wasm
189+
```
190+
* Run node
191+
```
192+
# point to updated chain spec
193+
./target/release/polkadot-bulletin-chain --validator --chain ./node/chain-specs/bulletin-polkadot.json --base-path /tmp/bulletin --node-key-file /tmp/bulletin/chains/bulletin-polkadot/network/secret_ed25519
194+
or
195+
# rebuild because of updated chain spec
196+
cargo build --release -p polkadot-bulletin-chain
197+
./target/release/polkadot-bulletin-chain --validator --chain bulletin-polkadot --base-path /tmp/bulletin --node-key-file /tmp/bulletin/chains/bulletin-polkadot/network/secret_ed25519
198+
```
199+
* **You should see finalized blocks in the logs.**
200+
* **!!! Push changes `./scripts/create_bulletin_polkadot_spec.sh` !!!**
201+
89202
### Fresh benchmarks
90203

91204
Run on the dedicated machine from the root directory:

node/chain-specs/bulletin-polkadot-plain.json

Lines changed: 73 additions & 0 deletions
Large diffs are not rendered by default.

node/chain-specs/bulletin-polkadot.json

Lines changed: 13 additions & 13 deletions
Large diffs are not rendered by default.

scripts/create_bulletin_polkadot_spec.sh

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,24 +52,22 @@ cat chain-spec-plain.json | jq --rawfile code rt-hex.txt '.genesis.runtimeGenesi
5252
| jq '.name = "Polkadot Bulletin"' \
5353
| jq '.id = "bulletin-polkadot"' \
5454
| jq '.chainType = "Live"' \
55-
| jq '.bootNodes = [
56-
"/ip4/127.0.0.1/tcp/33333/ws/p2p/5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"
57-
]' \
55+
| jq '.bootNodes = []' \
5856
| jq '.genesis.runtimeGenesis.patch.session.keys = [
5957
[
60-
"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
61-
"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
58+
"5DWpUqkKHHCaRHVqgocGMnJhuvNtCfm7xvqtSd23Mu6kEVQ9",
59+
"5DWpUqkKHHCaRHVqgocGMnJhuvNtCfm7xvqtSd23Mu6kEVQ9",
6260
{
63-
"babe": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
64-
"grandpa": "5FA9nQDVg267DEd8m1ZypXLBnvN7SFxYwV7ndqSYGiN9TTpu"
61+
"babe": "5DWpUqkKHHCaRHVqgocGMnJhuvNtCfm7xvqtSd23Mu6kEVQ9",
62+
"grandpa": "5H5jr87N42Bpt36LKZxZcWS7P1ppgH5Yyf31C4LGb6PFFz9w"
6563
}
6664
]
6765
]' \
6866
| jq '.genesis.runtimeGenesis.patch.validatorSet.initialValidators = [
69-
"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"
67+
"5DWpUqkKHHCaRHVqgocGMnJhuvNtCfm7xvqtSd23Mu6kEVQ9"
7068
]' \
7169
| jq '.genesis.runtimeGenesis.patch.relayerSet.initialRelayers = [
72-
"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"
70+
"5DWpUqkKHHCaRHVqgocGMnJhuvNtCfm7xvqtSd23Mu6kEVQ9"
7371
]' \
7472
| jq 'del(.genesis.runtimeGenesis.patch.bridgePolkadotGrandpa.owner)' \
7573
| jq 'del(.genesis.runtimeGenesis.patch.bridgePolkadotParachains.owner)' \
@@ -78,9 +76,8 @@ cat chain-spec-plain.json | jq --rawfile code rt-hex.txt '.genesis.runtimeGenesi
7876

7977
# build a raw spec
8078
$binary build-spec --chain edited-chain-spec-plain.json --raw > chain-spec-raw.json
81-
cp edited-chain-spec-plain.json bulletin-polkadot-spec.json
79+
cp edited-chain-spec-plain.json ./node/chain-specs/bulletin-polkadot-plain.json
8280
cp chain-spec-raw.json ./node/chain-specs/bulletin-polkadot.json
83-
cp chain-spec-raw.json bulletin-polkadot-spec-raw.json
8481

8582
# build genesis data
8683
$binary export-genesis-state --chain chain-spec-raw.json > bulletin-polkadot-genesis-head-data

scripts/keystore-dump.sh

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
# Path to your keystore (adjust as needed)
5+
KEYSTORE_DIR=$1
6+
7+
if [ ! -d "$KEYSTORE_DIR" ]; then
8+
echo "Keystore not found at $KEYSTORE_DIR"
9+
exit 1
10+
fi
11+
12+
for f in "$KEYSTORE_DIR"/*; do
13+
# extract key-type from first 8 hex chars of filename
14+
key_hex=$(basename "$f" | cut -c1-8)
15+
key_type=$(echo -n "$key_hex" | xxd -r -p)
16+
17+
# read seed from file (strip quotes)
18+
seed=$(cat "$f" | tr -d '"')
19+
20+
echo "Seed: $seed"
21+
echo "=== $key_type (sr25519)==="
22+
./target/release/polkadot-bulletin-chain key inspect --scheme sr25519 "$seed"
23+
echo "=== $key_type (ed25519)==="
24+
./target/release/polkadot-bulletin-chain key inspect --scheme ed25519 "$seed"
25+
echo
26+
done

0 commit comments

Comments
 (0)