11
11
//! precompiles defined by [`alphanet_precompile`].
12
12
13
13
use alphanet_precompile:: secp256r1;
14
- use reth:: {
15
- primitives:: {
14
+ use reth_primitives:: {
16
15
revm_primitives:: { CfgEnvWithHandlerCfg , TxEnv } ,
17
16
transaction:: FillTxEnv ,
18
17
Address , Bytes , Header , TransactionSigned , TxKind , U256 ,
19
- } ,
20
- revm :: {
18
+ } ;
19
+ use reth_revm :: {
21
20
handler:: register:: EvmHandler ,
22
21
inspector_handle_register,
23
22
precompile:: PrecompileSpecId ,
24
23
primitives:: { AnalysisKind , Env , OptimismFields } ,
25
24
ContextPrecompiles , Database , Evm , EvmBuilder , GetInspector ,
26
- } ,
27
25
} ;
28
26
use reth_chainspec:: { ChainSpec , EthereumHardfork , Head , OptimismHardfork } ;
29
27
use reth_node_api:: { ConfigureEvm , ConfigureEvmEnv } ;
30
28
use std:: sync:: Arc ;
31
29
32
30
/// Custom EVM configuration
33
- #[ derive( Debug , Clone , Copy , Default ) ]
31
+ #[ derive( Debug , Clone , Default ) ]
34
32
#[ non_exhaustive]
35
- pub struct AlphaNetEvmConfig ;
33
+ pub struct AlphaNetEvmConfig {
34
+ chain_spec : Arc < ChainSpec > ,
35
+ }
36
36
37
37
impl AlphaNetEvmConfig {
38
+ /// Creates a new AlphaNet EVM configuration with the given chain spec.
39
+ pub const fn new ( chain_spec : Arc < ChainSpec > ) -> Self {
40
+ Self { chain_spec }
41
+ }
42
+
38
43
/// Sets the precompiles to the EVM handler
39
44
///
40
45
/// This will be invoked when the EVM is created via [ConfigureEvm::evm] or
@@ -113,12 +118,11 @@ impl ConfigureEvmEnv for AlphaNetEvmConfig {
113
118
fn fill_cfg_env (
114
119
& self ,
115
120
cfg_env : & mut CfgEnvWithHandlerCfg ,
116
- chain_spec : & ChainSpec ,
117
121
header : & Header ,
118
122
total_difficulty : U256 ,
119
123
) {
120
124
let spec_id = revm_spec (
121
- chain_spec,
125
+ & self . chain_spec ,
122
126
& Head {
123
127
number : header. number ,
124
128
timestamp : header. timestamp ,
@@ -128,11 +132,11 @@ impl ConfigureEvmEnv for AlphaNetEvmConfig {
128
132
} ,
129
133
) ;
130
134
131
- cfg_env. chain_id = chain_spec. chain ( ) . id ( ) ;
135
+ cfg_env. chain_id = self . chain_spec . chain ( ) . id ( ) ;
132
136
cfg_env. perf_analyse_created_bytecodes = AnalysisKind :: Analyse ;
133
137
134
138
cfg_env. handler_cfg . spec_id = spec_id;
135
- cfg_env. handler_cfg . is_optimism = chain_spec. is_optimism ( ) ;
139
+ cfg_env. handler_cfg . is_optimism = self . chain_spec . is_optimism ( ) ;
136
140
}
137
141
}
138
142
@@ -167,47 +171,47 @@ impl ConfigureEvm for AlphaNetEvmConfig {
167
171
}
168
172
169
173
/// Determine the revm spec ID from the current block and reth chainspec.
170
- fn revm_spec ( chain_spec : & ChainSpec , block : & Head ) -> reth :: revm :: primitives:: SpecId {
174
+ fn revm_spec ( chain_spec : & ChainSpec , block : & Head ) -> reth_revm :: primitives:: SpecId {
171
175
if chain_spec. fork ( EthereumHardfork :: Prague ) . active_at_head ( block) {
172
- reth :: revm :: primitives:: PRAGUE_EOF
176
+ reth_revm :: primitives:: PRAGUE_EOF
173
177
} else if chain_spec. fork ( OptimismHardfork :: Granite ) . active_at_head ( block) {
174
- reth :: revm :: primitives:: GRANITE
178
+ reth_revm :: primitives:: GRANITE
175
179
} else if chain_spec. fork ( OptimismHardfork :: Fjord ) . active_at_head ( block) {
176
- reth :: revm :: primitives:: FJORD
180
+ reth_revm :: primitives:: FJORD
177
181
} else if chain_spec. fork ( OptimismHardfork :: Ecotone ) . active_at_head ( block) {
178
- reth :: revm :: primitives:: ECOTONE
182
+ reth_revm :: primitives:: ECOTONE
179
183
} else if chain_spec. fork ( OptimismHardfork :: Canyon ) . active_at_head ( block) {
180
- reth :: revm :: primitives:: CANYON
184
+ reth_revm :: primitives:: CANYON
181
185
} else if chain_spec. fork ( OptimismHardfork :: Regolith ) . active_at_head ( block) {
182
- reth :: revm :: primitives:: REGOLITH
186
+ reth_revm :: primitives:: REGOLITH
183
187
} else if chain_spec. fork ( OptimismHardfork :: Bedrock ) . active_at_head ( block) {
184
- reth :: revm :: primitives:: BEDROCK
188
+ reth_revm :: primitives:: BEDROCK
185
189
} else if chain_spec. fork ( EthereumHardfork :: Prague ) . active_at_head ( block) {
186
- reth :: revm :: primitives:: PRAGUE
190
+ reth_revm :: primitives:: PRAGUE
187
191
} else if chain_spec. fork ( EthereumHardfork :: Cancun ) . active_at_head ( block) {
188
- reth :: revm :: primitives:: CANCUN
192
+ reth_revm :: primitives:: CANCUN
189
193
} else if chain_spec. fork ( EthereumHardfork :: Shanghai ) . active_at_head ( block) {
190
- reth :: revm :: primitives:: SHANGHAI
194
+ reth_revm :: primitives:: SHANGHAI
191
195
} else if chain_spec. fork ( EthereumHardfork :: Paris ) . active_at_head ( block) {
192
- reth :: revm :: primitives:: MERGE
196
+ reth_revm :: primitives:: MERGE
193
197
} else if chain_spec. fork ( EthereumHardfork :: London ) . active_at_head ( block) {
194
- reth :: revm :: primitives:: LONDON
198
+ reth_revm :: primitives:: LONDON
195
199
} else if chain_spec. fork ( EthereumHardfork :: Berlin ) . active_at_head ( block) {
196
- reth :: revm :: primitives:: BERLIN
200
+ reth_revm :: primitives:: BERLIN
197
201
} else if chain_spec. fork ( EthereumHardfork :: Istanbul ) . active_at_head ( block) {
198
- reth :: revm :: primitives:: ISTANBUL
202
+ reth_revm :: primitives:: ISTANBUL
199
203
} else if chain_spec. fork ( EthereumHardfork :: Petersburg ) . active_at_head ( block) {
200
- reth :: revm :: primitives:: PETERSBURG
204
+ reth_revm :: primitives:: PETERSBURG
201
205
} else if chain_spec. fork ( EthereumHardfork :: Byzantium ) . active_at_head ( block) {
202
- reth :: revm :: primitives:: BYZANTIUM
206
+ reth_revm :: primitives:: BYZANTIUM
203
207
} else if chain_spec. fork ( EthereumHardfork :: SpuriousDragon ) . active_at_head ( block) {
204
- reth :: revm :: primitives:: SPURIOUS_DRAGON
208
+ reth_revm :: primitives:: SPURIOUS_DRAGON
205
209
} else if chain_spec. fork ( EthereumHardfork :: Tangerine ) . active_at_head ( block) {
206
- reth :: revm :: primitives:: TANGERINE
210
+ reth_revm :: primitives:: TANGERINE
207
211
} else if chain_spec. fork ( EthereumHardfork :: Homestead ) . active_at_head ( block) {
208
- reth :: revm :: primitives:: HOMESTEAD
212
+ reth_revm :: primitives:: HOMESTEAD
209
213
} else if chain_spec. fork ( EthereumHardfork :: Frontier ) . active_at_head ( block) {
210
- reth :: revm :: primitives:: FRONTIER
214
+ reth_revm :: primitives:: FRONTIER
211
215
} else {
212
216
panic ! (
213
217
"invalid hardfork chainspec: expected at least one hardfork, got {:?}" ,
@@ -219,7 +223,7 @@ fn revm_spec(chain_spec: &ChainSpec, block: &Head) -> reth::revm::primitives::Sp
219
223
#[ cfg( test) ]
220
224
mod tests {
221
225
use super :: * ;
222
- use reth :: primitives :: {
226
+ use reth_primitives :: {
223
227
revm_primitives:: { BlockEnv , CfgEnv , SpecId } ,
224
228
ForkCondition , Genesis ,
225
229
} ;
@@ -230,17 +234,18 @@ mod tests {
230
234
let mut cfg_env = CfgEnvWithHandlerCfg :: new_with_spec_id ( CfgEnv :: default ( ) , SpecId :: LATEST ) ;
231
235
let mut block_env = BlockEnv :: default ( ) ;
232
236
let header = Header :: default ( ) ;
233
- let chain_spec = ChainSpecBuilder :: default ( )
234
- . chain ( Chain :: optimism_mainnet ( ) )
235
- . genesis ( Genesis :: default ( ) )
236
- . with_fork ( EthereumHardfork :: Frontier , ForkCondition :: Block ( 0 ) )
237
- . build ( ) ;
237
+ let chain_spec = Arc :: new (
238
+ ChainSpecBuilder :: default ( )
239
+ . chain ( Chain :: optimism_mainnet ( ) )
240
+ . genesis ( Genesis :: default ( ) )
241
+ . with_fork ( EthereumHardfork :: Frontier , ForkCondition :: Block ( 0 ) )
242
+ . build ( ) ,
243
+ ) ;
238
244
let total_difficulty = U256 :: ZERO ;
239
245
240
- AlphaNetEvmConfig :: default ( ) . fill_cfg_and_block_env (
246
+ AlphaNetEvmConfig :: new ( chain_spec . clone ( ) ) . fill_cfg_and_block_env (
241
247
& mut cfg_env,
242
248
& mut block_env,
243
- & chain_spec,
244
249
& header,
245
250
total_difficulty,
246
251
) ;
0 commit comments