@@ -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
8589cargo 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
91204Run on the dedicated machine from the root directory:
0 commit comments