@nomicfoundation/edr 0.12.0-next.0 → 0.12.0-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +217 -64
- package/index.js +4 -1
- package/package.json +26 -21
- package/src/account.rs +6 -5
- package/src/block.rs +1 -1
- package/src/call_override.rs +1 -1
- package/src/cast.rs +1 -1
- package/src/chains/generic.rs +27 -20
- package/src/chains/l1.rs +84 -78
- package/src/chains/op.rs +50 -51
- package/src/config.rs +166 -9
- package/src/context.rs +96 -89
- package/src/contract_decoder.rs +57 -0
- package/src/debug_trace.rs +2 -0
- package/src/gas_report.rs +92 -0
- package/src/lib.rs +4 -1
- package/src/log.rs +2 -2
- package/src/logger.rs +4 -2
- package/src/mock/time.rs +134 -0
- package/src/mock.rs +4 -1
- package/src/precompile.rs +1 -1
- package/src/provider/response.rs +4 -4
- package/src/provider.rs +51 -4
- package/src/result.rs +35 -80
- package/src/serde.rs +1 -1
- package/src/solidity_tests/config.rs +80 -12
- package/src/solidity_tests/l1.rs +7 -7
- package/src/solidity_tests/op.rs +5 -5
- package/src/solidity_tests/runner.rs +1 -1
- package/src/solidity_tests/test_results.rs +109 -41
- package/src/solidity_tests.rs +1 -1
- package/src/trace/debug.rs +29 -26
- package/src/trace/exit.rs +9 -8
- package/src/trace/return_data.rs +19 -7
- package/src/trace/solidity_stack_trace.rs +56 -28
- package/src/trace.rs +6 -5
- package/src/ts/solidity_tests.ts +46 -0
- package/src/withdrawal.rs +5 -5
- package/Cargo.toml +0 -92
- package/build.rs +0 -3
package/src/chains/generic.rs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
use std::sync::Arc;
|
|
2
2
|
|
|
3
|
-
use edr_eth::l1;
|
|
4
3
|
use edr_generic::GenericChainSpec;
|
|
5
4
|
use edr_napi_core::{
|
|
6
|
-
logger::
|
|
7
|
-
provider::{
|
|
8
|
-
|
|
9
|
-
subscription,
|
|
5
|
+
logger::Logger,
|
|
6
|
+
provider::{SyncProvider, SyncProviderFactory},
|
|
7
|
+
subscription::subscriber_callback_for_chain_spec,
|
|
10
8
|
};
|
|
9
|
+
use edr_provider::time::CurrentTime;
|
|
11
10
|
use edr_solidity::contract_decoder::ContractDecoder;
|
|
11
|
+
use napi::tokio::runtime;
|
|
12
12
|
use napi_derive::napi;
|
|
13
13
|
|
|
14
14
|
use crate::provider::ProviderFactory;
|
|
@@ -16,33 +16,40 @@ use crate::provider::ProviderFactory;
|
|
|
16
16
|
pub struct GenericChainProviderFactory;
|
|
17
17
|
|
|
18
18
|
impl SyncProviderFactory for GenericChainProviderFactory {
|
|
19
|
-
fn
|
|
19
|
+
fn create_provider(
|
|
20
20
|
&self,
|
|
21
|
-
|
|
21
|
+
runtime: runtime::Handle,
|
|
22
22
|
provider_config: edr_napi_core::provider::Config,
|
|
23
|
-
logger_config: logger::Config,
|
|
24
|
-
|
|
23
|
+
logger_config: edr_napi_core::logger::Config,
|
|
24
|
+
subscription_callback: edr_napi_core::subscription::Callback,
|
|
25
25
|
contract_decoder: Arc<ContractDecoder>,
|
|
26
|
-
) -> napi::Result<
|
|
27
|
-
let logger = Logger::<GenericChainSpec>::new(
|
|
26
|
+
) -> napi::Result<Arc<dyn SyncProvider>> {
|
|
27
|
+
let logger = Logger::<GenericChainSpec, CurrentTime>::new(
|
|
28
|
+
logger_config,
|
|
29
|
+
Arc::clone(&contract_decoder),
|
|
30
|
+
)?;
|
|
28
31
|
|
|
29
32
|
let provider_config =
|
|
30
|
-
edr_provider::ProviderConfig::<
|
|
33
|
+
edr_provider::ProviderConfig::<edr_chain_l1::Hardfork>::try_from(provider_config)?;
|
|
31
34
|
|
|
32
|
-
let
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Ok(Box::new(ProviderBuilder::new(
|
|
36
|
-
contract_decoder,
|
|
35
|
+
let provider = edr_provider::Provider::<GenericChainSpec>::new(
|
|
36
|
+
runtime.clone(),
|
|
37
37
|
Box::new(logger),
|
|
38
|
+
subscriber_callback_for_chain_spec::<GenericChainSpec, CurrentTime>(
|
|
39
|
+
subscription_callback,
|
|
40
|
+
),
|
|
38
41
|
provider_config,
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
contract_decoder,
|
|
43
|
+
CurrentTime,
|
|
44
|
+
)
|
|
45
|
+
.map_err(|error| napi::Error::new(napi::Status::GenericFailure, error.to_string()))?;
|
|
46
|
+
|
|
47
|
+
Ok(Arc::new(provider))
|
|
41
48
|
}
|
|
42
49
|
}
|
|
43
50
|
|
|
44
51
|
#[napi]
|
|
45
|
-
pub const GENERIC_CHAIN_TYPE: &str =
|
|
52
|
+
pub const GENERIC_CHAIN_TYPE: &str = edr_generic::CHAIN_TYPE;
|
|
46
53
|
|
|
47
54
|
#[napi(catch_unwind)]
|
|
48
55
|
pub fn generic_chain_provider_factory() -> ProviderFactory {
|
package/src/chains/l1.rs
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
use std::{str::FromStr, sync::Arc};
|
|
2
2
|
|
|
3
|
-
use
|
|
3
|
+
use edr_chain_l1::L1ChainSpec;
|
|
4
4
|
use edr_evm::eips::{
|
|
5
5
|
eip2935::{HISTORY_STORAGE_ADDRESS, HISTORY_STORAGE_UNSUPPORTED_BYTECODE},
|
|
6
6
|
eip4788::{BEACON_ROOTS_ADDRESS, BEACON_ROOTS_BYTECODE},
|
|
7
7
|
};
|
|
8
8
|
use edr_napi_core::{
|
|
9
9
|
logger::Logger,
|
|
10
|
-
provider::{
|
|
11
|
-
|
|
12
|
-
subscription,
|
|
10
|
+
provider::{SyncProvider, SyncProviderFactory},
|
|
11
|
+
subscription::subscriber_callback_for_chain_spec,
|
|
13
12
|
};
|
|
13
|
+
use edr_provider::time::CurrentTime;
|
|
14
14
|
use edr_solidity::contract_decoder::ContractDecoder;
|
|
15
|
-
use napi::
|
|
15
|
+
use napi::{
|
|
16
|
+
bindgen_prelude::{BigInt, Uint8Array},
|
|
17
|
+
tokio::runtime,
|
|
18
|
+
};
|
|
16
19
|
use napi_derive::napi;
|
|
17
20
|
|
|
18
21
|
use crate::{account::AccountOverride, provider::ProviderFactory};
|
|
@@ -20,33 +23,36 @@ use crate::{account::AccountOverride, provider::ProviderFactory};
|
|
|
20
23
|
pub struct L1ProviderFactory;
|
|
21
24
|
|
|
22
25
|
impl SyncProviderFactory for L1ProviderFactory {
|
|
23
|
-
fn
|
|
26
|
+
fn create_provider(
|
|
24
27
|
&self,
|
|
25
|
-
|
|
28
|
+
runtime: runtime::Handle,
|
|
26
29
|
provider_config: edr_napi_core::provider::Config,
|
|
27
30
|
logger_config: edr_napi_core::logger::Config,
|
|
28
|
-
|
|
31
|
+
subscription_callback: edr_napi_core::subscription::Callback,
|
|
29
32
|
contract_decoder: Arc<ContractDecoder>,
|
|
30
|
-
) -> napi::Result<
|
|
31
|
-
let logger =
|
|
33
|
+
) -> napi::Result<Arc<dyn SyncProvider>> {
|
|
34
|
+
let logger =
|
|
35
|
+
Logger::<L1ChainSpec, CurrentTime>::new(logger_config, Arc::clone(&contract_decoder))?;
|
|
32
36
|
|
|
33
37
|
let provider_config =
|
|
34
|
-
edr_provider::ProviderConfig::<
|
|
35
|
-
|
|
36
|
-
let subscription_callback =
|
|
37
|
-
subscription::Callback::new(env, subscription_config.subscription_callback)?;
|
|
38
|
+
edr_provider::ProviderConfig::<edr_chain_l1::Hardfork>::try_from(provider_config)?;
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
let provider = edr_provider::Provider::<L1ChainSpec>::new(
|
|
41
|
+
runtime.clone(),
|
|
41
42
|
Box::new(logger),
|
|
43
|
+
subscriber_callback_for_chain_spec::<L1ChainSpec, CurrentTime>(subscription_callback),
|
|
42
44
|
provider_config,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
contract_decoder,
|
|
46
|
+
CurrentTime,
|
|
47
|
+
)
|
|
48
|
+
.map_err(|error| napi::Error::new(napi::Status::GenericFailure, error.to_string()))?;
|
|
49
|
+
|
|
50
|
+
Ok(Arc::new(provider))
|
|
45
51
|
}
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
#[napi]
|
|
49
|
-
pub const L1_CHAIN_TYPE: &str =
|
|
55
|
+
pub const L1_CHAIN_TYPE: &str = edr_chain_l1::CHAIN_TYPE;
|
|
50
56
|
|
|
51
57
|
#[napi(catch_unwind)]
|
|
52
58
|
pub fn l1_genesis_state(hardfork: SpecId) -> Vec<AccountOverride> {
|
|
@@ -136,25 +142,25 @@ impl FromStr for SpecId {
|
|
|
136
142
|
|
|
137
143
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
138
144
|
match s {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
145
|
+
edr_chain_l1::hardfork::name::FRONTIER => Ok(SpecId::Frontier),
|
|
146
|
+
edr_chain_l1::hardfork::name::FRONTIER_THAWING => Ok(SpecId::FrontierThawing),
|
|
147
|
+
edr_chain_l1::hardfork::name::HOMESTEAD => Ok(SpecId::Homestead),
|
|
148
|
+
edr_chain_l1::hardfork::name::DAO_FORK => Ok(SpecId::DaoFork),
|
|
149
|
+
edr_chain_l1::hardfork::name::TANGERINE => Ok(SpecId::Tangerine),
|
|
150
|
+
edr_chain_l1::hardfork::name::SPURIOUS_DRAGON => Ok(SpecId::SpuriousDragon),
|
|
151
|
+
edr_chain_l1::hardfork::name::BYZANTIUM => Ok(SpecId::Byzantium),
|
|
152
|
+
edr_chain_l1::hardfork::name::CONSTANTINOPLE => Ok(SpecId::Constantinople),
|
|
153
|
+
edr_chain_l1::hardfork::name::PETERSBURG => Ok(SpecId::Petersburg),
|
|
154
|
+
edr_chain_l1::hardfork::name::ISTANBUL => Ok(SpecId::Istanbul),
|
|
155
|
+
edr_chain_l1::hardfork::name::MUIR_GLACIER => Ok(SpecId::MuirGlacier),
|
|
156
|
+
edr_chain_l1::hardfork::name::BERLIN => Ok(SpecId::Berlin),
|
|
157
|
+
edr_chain_l1::hardfork::name::LONDON => Ok(SpecId::London),
|
|
158
|
+
edr_chain_l1::hardfork::name::ARROW_GLACIER => Ok(SpecId::ArrowGlacier),
|
|
159
|
+
edr_chain_l1::hardfork::name::GRAY_GLACIER => Ok(SpecId::GrayGlacier),
|
|
160
|
+
edr_chain_l1::hardfork::name::MERGE => Ok(SpecId::Merge),
|
|
161
|
+
edr_chain_l1::hardfork::name::SHANGHAI => Ok(SpecId::Shanghai),
|
|
162
|
+
edr_chain_l1::hardfork::name::CANCUN => Ok(SpecId::Cancun),
|
|
163
|
+
edr_chain_l1::hardfork::name::PRAGUE => Ok(SpecId::Prague),
|
|
158
164
|
_ => Err(napi::Error::new(
|
|
159
165
|
napi::Status::InvalidArg,
|
|
160
166
|
format!("The provided hardfork `{s}` is not supported."),
|
|
@@ -163,28 +169,28 @@ impl FromStr for SpecId {
|
|
|
163
169
|
}
|
|
164
170
|
}
|
|
165
171
|
|
|
166
|
-
impl From<SpecId> for
|
|
172
|
+
impl From<SpecId> for edr_chain_l1::Hardfork {
|
|
167
173
|
fn from(value: SpecId) -> Self {
|
|
168
174
|
match value {
|
|
169
|
-
SpecId::Frontier =>
|
|
170
|
-
SpecId::FrontierThawing =>
|
|
171
|
-
SpecId::Homestead =>
|
|
172
|
-
SpecId::DaoFork =>
|
|
173
|
-
SpecId::Tangerine =>
|
|
174
|
-
SpecId::SpuriousDragon =>
|
|
175
|
-
SpecId::Byzantium =>
|
|
176
|
-
SpecId::Constantinople =>
|
|
177
|
-
SpecId::Petersburg =>
|
|
178
|
-
SpecId::Istanbul =>
|
|
179
|
-
SpecId::MuirGlacier =>
|
|
180
|
-
SpecId::Berlin =>
|
|
181
|
-
SpecId::London =>
|
|
182
|
-
SpecId::ArrowGlacier =>
|
|
183
|
-
SpecId::GrayGlacier =>
|
|
184
|
-
SpecId::Merge =>
|
|
185
|
-
SpecId::Shanghai =>
|
|
186
|
-
SpecId::Cancun =>
|
|
187
|
-
SpecId::Prague =>
|
|
175
|
+
SpecId::Frontier => edr_chain_l1::Hardfork::FRONTIER,
|
|
176
|
+
SpecId::FrontierThawing => edr_chain_l1::Hardfork::FRONTIER_THAWING,
|
|
177
|
+
SpecId::Homestead => edr_chain_l1::Hardfork::HOMESTEAD,
|
|
178
|
+
SpecId::DaoFork => edr_chain_l1::Hardfork::DAO_FORK,
|
|
179
|
+
SpecId::Tangerine => edr_chain_l1::Hardfork::TANGERINE,
|
|
180
|
+
SpecId::SpuriousDragon => edr_chain_l1::Hardfork::SPURIOUS_DRAGON,
|
|
181
|
+
SpecId::Byzantium => edr_chain_l1::Hardfork::BYZANTIUM,
|
|
182
|
+
SpecId::Constantinople => edr_chain_l1::Hardfork::CONSTANTINOPLE,
|
|
183
|
+
SpecId::Petersburg => edr_chain_l1::Hardfork::PETERSBURG,
|
|
184
|
+
SpecId::Istanbul => edr_chain_l1::Hardfork::ISTANBUL,
|
|
185
|
+
SpecId::MuirGlacier => edr_chain_l1::Hardfork::MUIR_GLACIER,
|
|
186
|
+
SpecId::Berlin => edr_chain_l1::Hardfork::BERLIN,
|
|
187
|
+
SpecId::London => edr_chain_l1::Hardfork::LONDON,
|
|
188
|
+
SpecId::ArrowGlacier => edr_chain_l1::Hardfork::ARROW_GLACIER,
|
|
189
|
+
SpecId::GrayGlacier => edr_chain_l1::Hardfork::GRAY_GLACIER,
|
|
190
|
+
SpecId::Merge => edr_chain_l1::Hardfork::MERGE,
|
|
191
|
+
SpecId::Shanghai => edr_chain_l1::Hardfork::SHANGHAI,
|
|
192
|
+
SpecId::Cancun => edr_chain_l1::Hardfork::CANCUN,
|
|
193
|
+
SpecId::Prague => edr_chain_l1::Hardfork::PRAGUE,
|
|
188
194
|
}
|
|
189
195
|
}
|
|
190
196
|
}
|
|
@@ -200,25 +206,25 @@ pub fn l1_hardfork_from_string(hardfork: String) -> napi::Result<SpecId> {
|
|
|
200
206
|
#[napi(catch_unwind)]
|
|
201
207
|
pub fn l1_hardfork_to_string(harfork: SpecId) -> &'static str {
|
|
202
208
|
match harfork {
|
|
203
|
-
SpecId::Frontier =>
|
|
204
|
-
SpecId::FrontierThawing =>
|
|
205
|
-
SpecId::Homestead =>
|
|
206
|
-
SpecId::DaoFork =>
|
|
207
|
-
SpecId::Tangerine =>
|
|
208
|
-
SpecId::SpuriousDragon =>
|
|
209
|
-
SpecId::Byzantium =>
|
|
210
|
-
SpecId::Constantinople =>
|
|
211
|
-
SpecId::Petersburg =>
|
|
212
|
-
SpecId::Istanbul =>
|
|
213
|
-
SpecId::MuirGlacier =>
|
|
214
|
-
SpecId::Berlin =>
|
|
215
|
-
SpecId::London =>
|
|
216
|
-
SpecId::ArrowGlacier =>
|
|
217
|
-
SpecId::GrayGlacier =>
|
|
218
|
-
SpecId::Merge =>
|
|
219
|
-
SpecId::Shanghai =>
|
|
220
|
-
SpecId::Cancun =>
|
|
221
|
-
SpecId::Prague =>
|
|
209
|
+
SpecId::Frontier => edr_chain_l1::hardfork::name::FRONTIER,
|
|
210
|
+
SpecId::FrontierThawing => edr_chain_l1::hardfork::name::FRONTIER_THAWING,
|
|
211
|
+
SpecId::Homestead => edr_chain_l1::hardfork::name::HOMESTEAD,
|
|
212
|
+
SpecId::DaoFork => edr_chain_l1::hardfork::name::DAO_FORK,
|
|
213
|
+
SpecId::Tangerine => edr_chain_l1::hardfork::name::TANGERINE,
|
|
214
|
+
SpecId::SpuriousDragon => edr_chain_l1::hardfork::name::SPURIOUS_DRAGON,
|
|
215
|
+
SpecId::Byzantium => edr_chain_l1::hardfork::name::BYZANTIUM,
|
|
216
|
+
SpecId::Constantinople => edr_chain_l1::hardfork::name::CONSTANTINOPLE,
|
|
217
|
+
SpecId::Petersburg => edr_chain_l1::hardfork::name::PETERSBURG,
|
|
218
|
+
SpecId::Istanbul => edr_chain_l1::hardfork::name::ISTANBUL,
|
|
219
|
+
SpecId::MuirGlacier => edr_chain_l1::hardfork::name::MUIR_GLACIER,
|
|
220
|
+
SpecId::Berlin => edr_chain_l1::hardfork::name::BERLIN,
|
|
221
|
+
SpecId::London => edr_chain_l1::hardfork::name::LONDON,
|
|
222
|
+
SpecId::ArrowGlacier => edr_chain_l1::hardfork::name::ARROW_GLACIER,
|
|
223
|
+
SpecId::GrayGlacier => edr_chain_l1::hardfork::name::GRAY_GLACIER,
|
|
224
|
+
SpecId::Merge => edr_chain_l1::hardfork::name::MERGE,
|
|
225
|
+
SpecId::Shanghai => edr_chain_l1::hardfork::name::SHANGHAI,
|
|
226
|
+
SpecId::Cancun => edr_chain_l1::hardfork::name::CANCUN,
|
|
227
|
+
SpecId::Prague => edr_chain_l1::hardfork::name::PRAGUE,
|
|
222
228
|
}
|
|
223
229
|
}
|
|
224
230
|
|
|
@@ -234,7 +240,7 @@ macro_rules! export_spec_id {
|
|
|
234
240
|
($($variant:ident),*) => {
|
|
235
241
|
$(
|
|
236
242
|
#[napi]
|
|
237
|
-
pub const $variant: &str =
|
|
243
|
+
pub const $variant: &str = edr_chain_l1::hardfork::name::$variant;
|
|
238
244
|
)*
|
|
239
245
|
};
|
|
240
246
|
}
|
package/src/chains/op.rs
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
use std::{str::FromStr, sync::Arc};
|
|
2
2
|
|
|
3
|
-
use edr_eth::hex;
|
|
4
3
|
use edr_napi_core::{
|
|
5
|
-
logger::
|
|
6
|
-
provider::{
|
|
7
|
-
subscription,
|
|
4
|
+
logger::Logger,
|
|
5
|
+
provider::{SyncProvider, SyncProviderFactory},
|
|
6
|
+
subscription::subscriber_callback_for_chain_spec,
|
|
8
7
|
};
|
|
9
|
-
use edr_op::{
|
|
8
|
+
use edr_op::{
|
|
9
|
+
predeploys::{
|
|
10
|
+
gas_price_oracle_code_ecotone, gas_price_oracle_code_fjord, gas_price_oracle_code_isthmus,
|
|
11
|
+
GAS_PRICE_ORACLE_ADDRESS,
|
|
12
|
+
},
|
|
13
|
+
OpChainSpec,
|
|
14
|
+
};
|
|
15
|
+
use edr_primitives::hex;
|
|
16
|
+
use edr_provider::time::CurrentTime;
|
|
10
17
|
use edr_solidity::contract_decoder::ContractDecoder;
|
|
11
|
-
use napi::
|
|
18
|
+
use napi::{
|
|
19
|
+
bindgen_prelude::{BigInt, Uint8Array},
|
|
20
|
+
tokio::runtime,
|
|
21
|
+
};
|
|
12
22
|
use napi_derive::napi;
|
|
13
23
|
|
|
14
24
|
use crate::{
|
|
@@ -19,27 +29,31 @@ use crate::{
|
|
|
19
29
|
pub struct OpProviderFactory;
|
|
20
30
|
|
|
21
31
|
impl SyncProviderFactory for OpProviderFactory {
|
|
22
|
-
fn
|
|
32
|
+
fn create_provider(
|
|
23
33
|
&self,
|
|
24
|
-
|
|
25
|
-
provider_config: provider::Config,
|
|
26
|
-
logger_config: logger::Config,
|
|
27
|
-
|
|
34
|
+
runtime: runtime::Handle,
|
|
35
|
+
provider_config: edr_napi_core::provider::Config,
|
|
36
|
+
logger_config: edr_napi_core::logger::Config,
|
|
37
|
+
subscription_callback: edr_napi_core::subscription::Callback,
|
|
28
38
|
contract_decoder: Arc<ContractDecoder>,
|
|
29
|
-
) -> napi::Result<
|
|
30
|
-
let logger =
|
|
31
|
-
|
|
32
|
-
let provider_config = edr_provider::ProviderConfig::<OpSpecId>::try_from(provider_config)?;
|
|
39
|
+
) -> napi::Result<Arc<dyn SyncProvider>> {
|
|
40
|
+
let logger =
|
|
41
|
+
Logger::<OpChainSpec, CurrentTime>::new(logger_config, Arc::clone(&contract_decoder))?;
|
|
33
42
|
|
|
34
|
-
let
|
|
35
|
-
|
|
43
|
+
let provider_config =
|
|
44
|
+
edr_provider::ProviderConfig::<edr_op::Hardfork>::try_from(provider_config)?;
|
|
36
45
|
|
|
37
|
-
|
|
38
|
-
|
|
46
|
+
let provider = edr_provider::Provider::<OpChainSpec>::new(
|
|
47
|
+
runtime.clone(),
|
|
39
48
|
Box::new(logger),
|
|
49
|
+
subscriber_callback_for_chain_spec::<OpChainSpec, CurrentTime>(subscription_callback),
|
|
40
50
|
provider_config,
|
|
41
|
-
|
|
42
|
-
|
|
51
|
+
contract_decoder,
|
|
52
|
+
CurrentTime,
|
|
53
|
+
)
|
|
54
|
+
.map_err(|error| napi::Error::new(napi::Status::GenericFailure, error.to_string()))?;
|
|
55
|
+
|
|
56
|
+
Ok(Arc::new(provider))
|
|
43
57
|
}
|
|
44
58
|
}
|
|
45
59
|
|
|
@@ -56,17 +70,17 @@ pub enum OpHardfork {
|
|
|
56
70
|
Isthmus = 107,
|
|
57
71
|
}
|
|
58
72
|
|
|
59
|
-
impl From<OpHardfork> for
|
|
73
|
+
impl From<OpHardfork> for edr_op::Hardfork {
|
|
60
74
|
fn from(hardfork: OpHardfork) -> Self {
|
|
61
75
|
match hardfork {
|
|
62
|
-
OpHardfork::Bedrock =>
|
|
63
|
-
OpHardfork::Regolith =>
|
|
64
|
-
OpHardfork::Canyon =>
|
|
65
|
-
OpHardfork::Ecotone =>
|
|
66
|
-
OpHardfork::Fjord =>
|
|
67
|
-
OpHardfork::Granite =>
|
|
68
|
-
OpHardfork::Holocene =>
|
|
69
|
-
OpHardfork::Isthmus =>
|
|
76
|
+
OpHardfork::Bedrock => edr_op::Hardfork::BEDROCK,
|
|
77
|
+
OpHardfork::Regolith => edr_op::Hardfork::REGOLITH,
|
|
78
|
+
OpHardfork::Canyon => edr_op::Hardfork::CANYON,
|
|
79
|
+
OpHardfork::Ecotone => edr_op::Hardfork::ECOTONE,
|
|
80
|
+
OpHardfork::Fjord => edr_op::Hardfork::FJORD,
|
|
81
|
+
OpHardfork::Granite => edr_op::Hardfork::GRANITE,
|
|
82
|
+
OpHardfork::Holocene => edr_op::Hardfork::HOLOCENE,
|
|
83
|
+
OpHardfork::Isthmus => edr_op::Hardfork::ISTHMUS,
|
|
70
84
|
}
|
|
71
85
|
}
|
|
72
86
|
}
|
|
@@ -328,10 +342,10 @@ pub fn op_provider_factory() -> ProviderFactory {
|
|
|
328
342
|
factory.into()
|
|
329
343
|
}
|
|
330
344
|
|
|
331
|
-
fn gas_price_oracle_override(hardfork:
|
|
332
|
-
if hardfork >=
|
|
345
|
+
fn gas_price_oracle_override(hardfork: edr_op::Hardfork) -> AccountOverride {
|
|
346
|
+
if hardfork >= edr_op::Hardfork::ISTHMUS {
|
|
333
347
|
gas_price_oracle_isthmus()
|
|
334
|
-
} else if hardfork >=
|
|
348
|
+
} else if hardfork >= edr_op::Hardfork::FJORD {
|
|
335
349
|
gas_price_oracle_fjord()
|
|
336
350
|
} else {
|
|
337
351
|
gas_price_oracle_ecotone()
|
|
@@ -339,16 +353,11 @@ fn gas_price_oracle_override(hardfork: OpSpecId) -> AccountOverride {
|
|
|
339
353
|
}
|
|
340
354
|
|
|
341
355
|
fn gas_price_oracle_ecotone() -> AccountOverride {
|
|
342
|
-
let gas_price_oracle_code = hex::decode(include_str!(
|
|
343
|
-
"../../data/op/predeploys/gas_price_oracle/ecotone.txt"
|
|
344
|
-
))
|
|
345
|
-
.expect("The bytecode for the GasPriceOracle predeploy should be a valid hex string");
|
|
346
|
-
|
|
347
356
|
AccountOverride {
|
|
348
357
|
address: Uint8Array::with_data_copied(GAS_PRICE_ORACLE_ADDRESS),
|
|
349
358
|
balance: None,
|
|
350
359
|
nonce: None,
|
|
351
|
-
code: Some(
|
|
360
|
+
code: Some(gas_price_oracle_code_ecotone().into()),
|
|
352
361
|
storage: Some(vec![StorageSlot {
|
|
353
362
|
index: BigInt::from(0u64),
|
|
354
363
|
// bool isEcotone = true
|
|
@@ -360,16 +369,11 @@ fn gas_price_oracle_ecotone() -> AccountOverride {
|
|
|
360
369
|
}
|
|
361
370
|
|
|
362
371
|
fn gas_price_oracle_fjord() -> AccountOverride {
|
|
363
|
-
let gas_price_oracle_code = hex::decode(include_str!(
|
|
364
|
-
"../../data/op/predeploys/gas_price_oracle/fjord.txt"
|
|
365
|
-
))
|
|
366
|
-
.expect("The bytecode for the GasPriceOracle predeploy should be a valid hex string");
|
|
367
|
-
|
|
368
372
|
AccountOverride {
|
|
369
373
|
address: Uint8Array::with_data_copied(GAS_PRICE_ORACLE_ADDRESS),
|
|
370
374
|
balance: None,
|
|
371
375
|
nonce: None,
|
|
372
|
-
code: Some(
|
|
376
|
+
code: Some(gas_price_oracle_code_fjord().into()),
|
|
373
377
|
storage: Some(vec![StorageSlot {
|
|
374
378
|
index: BigInt::from(0u64),
|
|
375
379
|
// bool isEcotone = true
|
|
@@ -382,16 +386,11 @@ fn gas_price_oracle_fjord() -> AccountOverride {
|
|
|
382
386
|
}
|
|
383
387
|
|
|
384
388
|
fn gas_price_oracle_isthmus() -> AccountOverride {
|
|
385
|
-
let gas_price_oracle_code = hex::decode(include_str!(
|
|
386
|
-
"../../data/op/predeploys/gas_price_oracle/isthmus.txt"
|
|
387
|
-
))
|
|
388
|
-
.expect("The bytecode for the GasPriceOracle predeploy should be a valid hex string");
|
|
389
|
-
|
|
390
389
|
AccountOverride {
|
|
391
390
|
address: Uint8Array::with_data_copied(GAS_PRICE_ORACLE_ADDRESS),
|
|
392
391
|
balance: None,
|
|
393
392
|
nonce: None,
|
|
394
|
-
code: Some(
|
|
393
|
+
code: Some(gas_price_oracle_code_isthmus().into()),
|
|
395
394
|
storage: Some(vec![StorageSlot {
|
|
396
395
|
index: BigInt::from(0u64),
|
|
397
396
|
// bool isEcotone = true
|