@@ -24,50 +24,48 @@ use protocol::{
2424 codec:: { hex_decode, ProtocolCodec as _} ,
2525 tokio,
2626 trie:: { MemoryDB , PatriciaTrie , Trie as _} ,
27- types:: { Header , Metadata , Proposal , RichBlock , H256 } ,
27+ types:: {
28+ Bloom , BloomInput , Header , Metadata , Proposal , RichBlock , H256 , RLP_EMPTY_LIST , RLP_NULL ,
29+ } ,
2830} ;
2931
3032use crate :: { components:: chain_spec:: ChainSpecExt as _, execute_genesis, DatabaseGroup } ;
3133
3234const DEV_CONFIG_DIR : & str = "../../devtools/chain" ;
3335
3436struct TestCase < ' a > {
35- chain_name : & ' a str ,
36- config_file : & ' a str ,
37- chain_spec_file : & ' a str ,
38- key_file : & ' a str ,
39- input_genesis_hash : & ' a str ,
40- genesis_state_root : & ' a str ,
41- genesis_receipts_root : & ' a str ,
37+ chain_name : & ' a str ,
38+ config_file : & ' a str ,
39+ chain_spec_file : & ' a str ,
40+ key_file : & ' a str ,
41+ input_genesis_hash : & ' a str ,
42+ genesis_state_root : & ' a str ,
4243}
4344
4445const TESTCASES : & [ TestCase ] = & [
4546 TestCase {
46- chain_name : "single_node" ,
47- config_file : "config.toml" ,
48- chain_spec_file : "specs/single_node/chain-spec.toml" ,
49- key_file : "debug.key" ,
50- input_genesis_hash : "0x57db5b4b5c7dd1246c97b0c28aa4d10664035b2ee367df2ae1916c86b6fdffa9" ,
51- genesis_state_root : "0x2f1e8e50d5ab97af96fdb5d6de8e691e5bb80f46f2c98c4133d265bd8b60de61" ,
52- genesis_receipts_root : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" ,
47+ chain_name : "single_node" ,
48+ config_file : "config.toml" ,
49+ chain_spec_file : "specs/single_node/chain-spec.toml" ,
50+ key_file : "debug.key" ,
51+ input_genesis_hash : "0xe3a40f0115fbf101520ceea1ce7103a73cb46554187ac7ed67f3522103e06d99" ,
52+ genesis_state_root : "0x2f1e8e50d5ab97af96fdb5d6de8e691e5bb80f46f2c98c4133d265bd8b60de61" ,
5353 } ,
5454 TestCase {
55- chain_name : "multi_nodes" ,
56- config_file : "nodes/node_1.toml" ,
57- chain_spec_file : "specs/multi_nodes/chain-spec.toml" ,
58- key_file : "debug.key" ,
59- input_genesis_hash : "0x9dc9e22c984214a8a82f24045079e2c4dc7aa3c8510343b9c40a6e50986f3c9f" ,
60- genesis_state_root : "0xf684cbec490eb5b8a07b80f369f3bf87f05ec73494b869111010a6ad6fa89894" ,
61- genesis_receipts_root : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" ,
55+ chain_name : "multi_nodes" ,
56+ config_file : "nodes/node_1.toml" ,
57+ chain_spec_file : "specs/multi_nodes/chain-spec.toml" ,
58+ key_file : "debug.key" ,
59+ input_genesis_hash : "0x1b4cf78373961dabcba5d4a9402c924fc4fecdd9ce367239f02c8971a052f3b5" ,
60+ genesis_state_root : "0xf684cbec490eb5b8a07b80f369f3bf87f05ec73494b869111010a6ad6fa89894" ,
6261 } ,
6362 TestCase {
64- chain_name : "multi_nodes_short_epoch_len" ,
65- config_file : "nodes/node_1.toml" ,
66- chain_spec_file : "specs/multi_nodes_short_epoch_len/chain-spec.toml" ,
67- key_file : "debug.key" ,
68- input_genesis_hash : "0x02c6715381ee05c5e6b2a432c9da4843108c573aca6369a85ca06d26b88c1fb7" ,
69- genesis_state_root : "0xa5e1e7ac3e03f7dc26cc93ab69c0ec49e591cbdaa7694c75682745c40bfca468" ,
70- genesis_receipts_root : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" ,
63+ chain_name : "multi_nodes_short_epoch_len" ,
64+ config_file : "nodes/node_1.toml" ,
65+ chain_spec_file : "specs/multi_nodes_short_epoch_len/chain-spec.toml" ,
66+ key_file : "debug.key" ,
67+ input_genesis_hash : "0xd930632a7565acfc149c1d896d79910608768de5b936fdb34cc47c9b2296dd2a" ,
68+ genesis_state_root : "0xa5e1e7ac3e03f7dc26cc93ab69c0ec49e591cbdaa7694c75682745c40bfca468" ,
7169 } ,
7270] ;
7371
@@ -141,27 +139,57 @@ async fn check_genesis_data<'a>(case: &TestCase<'a>) {
141139 assert ! ( genesis. block. tx_hashes. is_empty( ) ) ;
142140
143141 println ! ( "checking genesis hash" ) ;
144- check_hashes (
142+ check_hashes_via_str (
145143 case. chain_name ,
146144 "input genesis hash" ,
147145 case. input_genesis_hash ,
148146 genesis. block . header . hash ( ) ,
149147 ) ;
150148
151149 println ! ( "checking state root" ) ;
152- check_hashes (
150+ check_hashes_via_str (
153151 case. chain_name ,
154152 "genesis state root" ,
155153 case. genesis_state_root ,
156154 genesis. block . header . state_root ,
157155 ) ;
158156
157+ check_hashes (
158+ case. chain_name ,
159+ "genesis transactions root" ,
160+ genesis. block . header . transactions_root ,
161+ RLP_NULL ,
162+ ) ;
163+
164+ check_hashes (
165+ case. chain_name ,
166+ "genesis signed transactions hash" ,
167+ genesis. block . header . signed_txs_hash ,
168+ RLP_EMPTY_LIST ,
169+ ) ;
170+
159171 println ! ( "checking receipts hash" ) ;
160172 check_hashes (
161173 case. chain_name ,
162174 "genesis receipts root" ,
163- case. genesis_receipts_root ,
164175 genesis. block . header . receipts_root ,
176+ RLP_NULL ,
177+ ) ;
178+
179+ let logs: Vec < Bloom > = Default :: default ( ) ;
180+ let expected_log_bloom = Bloom :: from ( BloomInput :: Raw ( rlp:: encode_list ( & logs) . as_ref ( ) ) ) ;
181+ assert_eq ! (
182+ genesis. block. header. log_bloom, expected_log_bloom,
183+ "log bloom in genesis of chain {} should be empty since no transactions, \
184+ expect {expected_log_bloom:#x}, actual {:#x}",
185+ case. chain_name, genesis. block. header. log_bloom,
186+ ) ;
187+
188+ assert ! (
189+ genesis. block. header. gas_used. is_zero( ) ,
190+ "gas used in genesis of chain {} should be zero since no transactions, actual {}" ,
191+ case. chain_name,
192+ genesis. block. header. gas_used,
165193 ) ;
166194
167195 println ! ( "checking state" ) ;
@@ -198,9 +226,13 @@ fn check_state(spec: &ChainSpec, genesis_header: &Header, db_group: &DatabaseGro
198226 assert_metadata ( metadata_1, handle. get_metadata_by_epoch ( 1 ) . unwrap ( ) ) ;
199227}
200228
201- fn check_hashes ( chain : & str , name : & str , expected_str : & str , actual : H256 ) {
229+ fn check_hashes_via_str ( chain : & str , name : & str , expected_str : & str , actual : H256 ) {
202230 let expected = H256 :: from_str ( expected_str)
203231 . unwrap_or_else ( |err| panic ! ( "failed to parse hash {name} of chain {chain} since {err}" ) ) ;
232+ check_hashes ( chain, name, expected, actual) ;
233+ }
234+
235+ fn check_hashes ( chain : & str , name : & str , expected : H256 , actual : H256 ) {
204236 assert_eq ! (
205237 expected, actual,
206238 "hash {name} of chain {chain} is changed, expect {expected:#x}, but got {actual:#x}" ,
0 commit comments