1
1
//! genesis.json tests
2
2
3
+ use crate :: fork:: fork_config;
3
4
use alloy_genesis:: Genesis ;
4
5
use alloy_primitives:: { Address , U256 } ;
5
6
use alloy_provider:: Provider ;
6
7
use anvil:: { spawn, NodeConfig } ;
7
8
use std:: str:: FromStr ;
8
9
9
- #[ tokio:: test( flavor = "multi_thread" ) ]
10
- async fn can_apply_genesis ( ) {
11
- let genesis = r#"{
10
+ const GENESIS : & str = r#"{
12
11
"config": {
13
12
"chainId": 19763,
14
13
"homesteadBlock": 0,
@@ -35,7 +34,10 @@ async fn can_apply_genesis() {
35
34
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
36
35
}
37
36
"# ;
38
- let genesis: Genesis = serde_json:: from_str ( genesis) . unwrap ( ) ;
37
+
38
+ #[ tokio:: test( flavor = "multi_thread" ) ]
39
+ async fn can_apply_genesis ( ) {
40
+ let genesis: Genesis = serde_json:: from_str ( GENESIS ) . unwrap ( ) ;
39
41
let ( _api, handle) = spawn ( NodeConfig :: test ( ) . with_genesis ( Some ( genesis) ) ) . await ;
40
42
41
43
let provider = handle. http_provider ( ) ;
@@ -51,3 +53,49 @@ async fn can_apply_genesis() {
51
53
let block_number = provider. get_block_number ( ) . await . unwrap ( ) ;
52
54
assert_eq ! ( block_number, 73u64 ) ;
53
55
}
56
+
57
+ // <https://github.com/foundry-rs/foundry/issues/10059>
58
+ // <https://github.com/foundry-rs/foundry/issues/10238>
59
+ #[ tokio:: test( flavor = "multi_thread" ) ]
60
+ async fn chain_id_precedence ( ) {
61
+ // Order: --chain-id > fork-chain-id > Genesis > default.
62
+
63
+ // --chain-id > Genesis.
64
+ let genesis: Genesis = serde_json:: from_str ( GENESIS ) . unwrap ( ) ;
65
+ let ( _api, handle) =
66
+ spawn ( NodeConfig :: test ( ) . with_genesis ( Some ( genesis. clone ( ) ) ) . with_chain_id ( Some ( 300u64 ) ) )
67
+ . await ;
68
+ let provider = handle. http_provider ( ) ;
69
+ let chain_id = provider. get_chain_id ( ) . await . unwrap ( ) ;
70
+ assert_eq ! ( chain_id, 300u64 ) ;
71
+
72
+ // fork > Genesis.
73
+ let ( _api, handle) = spawn ( fork_config ( ) . with_genesis ( Some ( genesis. clone ( ) ) ) ) . await ;
74
+ let provider = handle. http_provider ( ) ;
75
+ let chain_id = provider. get_chain_id ( ) . await . unwrap ( ) ;
76
+ assert_eq ! ( chain_id, 1 ) ;
77
+
78
+ // --chain-id > fork.
79
+ let ( _api, handle) = spawn ( fork_config ( ) . with_chain_id ( Some ( 300u64 ) ) ) . await ;
80
+ let provider = handle. http_provider ( ) ;
81
+ let chain_id = provider. get_chain_id ( ) . await . unwrap ( ) ;
82
+ assert_eq ! ( chain_id, 300u64 ) ;
83
+
84
+ // fork
85
+ let ( _api, handle) = spawn ( fork_config ( ) ) . await ;
86
+ let provider = handle. http_provider ( ) ;
87
+ let chain_id = provider. get_chain_id ( ) . await . unwrap ( ) ;
88
+ assert_eq ! ( chain_id, 1 ) ;
89
+
90
+ // Genesis
91
+ let ( _api, handle) = spawn ( NodeConfig :: test ( ) . with_genesis ( Some ( genesis) ) ) . await ;
92
+ let provider = handle. http_provider ( ) ;
93
+ let chain_id = provider. get_chain_id ( ) . await . unwrap ( ) ;
94
+ assert_eq ! ( chain_id, 19763u64 ) ;
95
+
96
+ // default
97
+ let ( _api, handle) = spawn ( NodeConfig :: test ( ) ) . await ;
98
+ let provider = handle. http_provider ( ) ;
99
+ let chain_id = provider. get_chain_id ( ) . await . unwrap ( ) ;
100
+ assert_eq ! ( chain_id, 31337 ) ;
101
+ }
0 commit comments