@nomicfoundation/edr 0.12.0-next.2 → 0.12.0-next.20
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 +220 -62
- package/index.js +5 -1
- package/package.json +12 -12
- package/src/account.rs +7 -6
- 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 +93 -81
- package/src/chains/op.rs +140 -115
- package/src/config.rs +182 -15
- package/src/context.rs +69 -73
- 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 +7 -7
- package/src/provider/response.rs +4 -4
- package/src/provider.rs +51 -4
- package/src/result.rs +42 -83
- package/src/serde.rs +1 -1
- package/src/solidity_tests/config.rs +93 -19
- package/src/solidity_tests/l1.rs +11 -7
- package/src/solidity_tests/op.rs +11 -8
- package/src/solidity_tests/runner.rs +1 -1
- package/src/solidity_tests/test_results.rs +122 -37
- 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 +11 -10
- package/src/withdrawal.rs +5 -5
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
|
|
4
|
-
use edr_evm::eips::{
|
|
3
|
+
use edr_blockchain_fork::eips::{
|
|
5
4
|
eip2935::{HISTORY_STORAGE_ADDRESS, HISTORY_STORAGE_UNSUPPORTED_BYTECODE},
|
|
6
5
|
eip4788::{BEACON_ROOTS_ADDRESS, BEACON_ROOTS_BYTECODE},
|
|
7
6
|
};
|
|
7
|
+
use edr_chain_l1::L1ChainSpec;
|
|
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> {
|
|
@@ -129,6 +135,8 @@ pub enum SpecId {
|
|
|
129
135
|
Cancun = 17,
|
|
130
136
|
/// Prague
|
|
131
137
|
Prague = 18,
|
|
138
|
+
/// Osaka
|
|
139
|
+
Osaka = 19,
|
|
132
140
|
}
|
|
133
141
|
|
|
134
142
|
impl FromStr for SpecId {
|
|
@@ -136,25 +144,26 @@ impl FromStr for SpecId {
|
|
|
136
144
|
|
|
137
145
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
138
146
|
match s {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
147
|
+
edr_chain_l1::chains::name::FRONTIER => Ok(SpecId::Frontier),
|
|
148
|
+
edr_chain_l1::chains::name::FRONTIER_THAWING => Ok(SpecId::FrontierThawing),
|
|
149
|
+
edr_chain_l1::chains::name::HOMESTEAD => Ok(SpecId::Homestead),
|
|
150
|
+
edr_chain_l1::chains::name::DAO_FORK => Ok(SpecId::DaoFork),
|
|
151
|
+
edr_chain_l1::chains::name::TANGERINE => Ok(SpecId::Tangerine),
|
|
152
|
+
edr_chain_l1::chains::name::SPURIOUS_DRAGON => Ok(SpecId::SpuriousDragon),
|
|
153
|
+
edr_chain_l1::chains::name::BYZANTIUM => Ok(SpecId::Byzantium),
|
|
154
|
+
edr_chain_l1::chains::name::CONSTANTINOPLE => Ok(SpecId::Constantinople),
|
|
155
|
+
edr_chain_l1::chains::name::PETERSBURG => Ok(SpecId::Petersburg),
|
|
156
|
+
edr_chain_l1::chains::name::ISTANBUL => Ok(SpecId::Istanbul),
|
|
157
|
+
edr_chain_l1::chains::name::MUIR_GLACIER => Ok(SpecId::MuirGlacier),
|
|
158
|
+
edr_chain_l1::chains::name::BERLIN => Ok(SpecId::Berlin),
|
|
159
|
+
edr_chain_l1::chains::name::LONDON => Ok(SpecId::London),
|
|
160
|
+
edr_chain_l1::chains::name::ARROW_GLACIER => Ok(SpecId::ArrowGlacier),
|
|
161
|
+
edr_chain_l1::chains::name::GRAY_GLACIER => Ok(SpecId::GrayGlacier),
|
|
162
|
+
edr_chain_l1::chains::name::MERGE => Ok(SpecId::Merge),
|
|
163
|
+
edr_chain_l1::chains::name::SHANGHAI => Ok(SpecId::Shanghai),
|
|
164
|
+
edr_chain_l1::chains::name::CANCUN => Ok(SpecId::Cancun),
|
|
165
|
+
edr_chain_l1::chains::name::PRAGUE => Ok(SpecId::Prague),
|
|
166
|
+
edr_chain_l1::chains::name::OSAKA => Ok(SpecId::Osaka),
|
|
158
167
|
_ => Err(napi::Error::new(
|
|
159
168
|
napi::Status::InvalidArg,
|
|
160
169
|
format!("The provided hardfork `{s}` is not supported."),
|
|
@@ -163,28 +172,29 @@ impl FromStr for SpecId {
|
|
|
163
172
|
}
|
|
164
173
|
}
|
|
165
174
|
|
|
166
|
-
impl From<SpecId> for
|
|
175
|
+
impl From<SpecId> for edr_chain_l1::Hardfork {
|
|
167
176
|
fn from(value: SpecId) -> Self {
|
|
168
177
|
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 =>
|
|
178
|
+
SpecId::Frontier => edr_chain_l1::Hardfork::FRONTIER,
|
|
179
|
+
SpecId::FrontierThawing => edr_chain_l1::Hardfork::FRONTIER_THAWING,
|
|
180
|
+
SpecId::Homestead => edr_chain_l1::Hardfork::HOMESTEAD,
|
|
181
|
+
SpecId::DaoFork => edr_chain_l1::Hardfork::DAO_FORK,
|
|
182
|
+
SpecId::Tangerine => edr_chain_l1::Hardfork::TANGERINE,
|
|
183
|
+
SpecId::SpuriousDragon => edr_chain_l1::Hardfork::SPURIOUS_DRAGON,
|
|
184
|
+
SpecId::Byzantium => edr_chain_l1::Hardfork::BYZANTIUM,
|
|
185
|
+
SpecId::Constantinople => edr_chain_l1::Hardfork::CONSTANTINOPLE,
|
|
186
|
+
SpecId::Petersburg => edr_chain_l1::Hardfork::PETERSBURG,
|
|
187
|
+
SpecId::Istanbul => edr_chain_l1::Hardfork::ISTANBUL,
|
|
188
|
+
SpecId::MuirGlacier => edr_chain_l1::Hardfork::MUIR_GLACIER,
|
|
189
|
+
SpecId::Berlin => edr_chain_l1::Hardfork::BERLIN,
|
|
190
|
+
SpecId::London => edr_chain_l1::Hardfork::LONDON,
|
|
191
|
+
SpecId::ArrowGlacier => edr_chain_l1::Hardfork::ARROW_GLACIER,
|
|
192
|
+
SpecId::GrayGlacier => edr_chain_l1::Hardfork::GRAY_GLACIER,
|
|
193
|
+
SpecId::Merge => edr_chain_l1::Hardfork::MERGE,
|
|
194
|
+
SpecId::Shanghai => edr_chain_l1::Hardfork::SHANGHAI,
|
|
195
|
+
SpecId::Cancun => edr_chain_l1::Hardfork::CANCUN,
|
|
196
|
+
SpecId::Prague => edr_chain_l1::Hardfork::PRAGUE,
|
|
197
|
+
SpecId::Osaka => edr_chain_l1::Hardfork::OSAKA,
|
|
188
198
|
}
|
|
189
199
|
}
|
|
190
200
|
}
|
|
@@ -200,25 +210,26 @@ pub fn l1_hardfork_from_string(hardfork: String) -> napi::Result<SpecId> {
|
|
|
200
210
|
#[napi(catch_unwind)]
|
|
201
211
|
pub fn l1_hardfork_to_string(harfork: SpecId) -> &'static str {
|
|
202
212
|
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 =>
|
|
213
|
+
SpecId::Frontier => edr_chain_l1::chains::name::FRONTIER,
|
|
214
|
+
SpecId::FrontierThawing => edr_chain_l1::chains::name::FRONTIER_THAWING,
|
|
215
|
+
SpecId::Homestead => edr_chain_l1::chains::name::HOMESTEAD,
|
|
216
|
+
SpecId::DaoFork => edr_chain_l1::chains::name::DAO_FORK,
|
|
217
|
+
SpecId::Tangerine => edr_chain_l1::chains::name::TANGERINE,
|
|
218
|
+
SpecId::SpuriousDragon => edr_chain_l1::chains::name::SPURIOUS_DRAGON,
|
|
219
|
+
SpecId::Byzantium => edr_chain_l1::chains::name::BYZANTIUM,
|
|
220
|
+
SpecId::Constantinople => edr_chain_l1::chains::name::CONSTANTINOPLE,
|
|
221
|
+
SpecId::Petersburg => edr_chain_l1::chains::name::PETERSBURG,
|
|
222
|
+
SpecId::Istanbul => edr_chain_l1::chains::name::ISTANBUL,
|
|
223
|
+
SpecId::MuirGlacier => edr_chain_l1::chains::name::MUIR_GLACIER,
|
|
224
|
+
SpecId::Berlin => edr_chain_l1::chains::name::BERLIN,
|
|
225
|
+
SpecId::London => edr_chain_l1::chains::name::LONDON,
|
|
226
|
+
SpecId::ArrowGlacier => edr_chain_l1::chains::name::ARROW_GLACIER,
|
|
227
|
+
SpecId::GrayGlacier => edr_chain_l1::chains::name::GRAY_GLACIER,
|
|
228
|
+
SpecId::Merge => edr_chain_l1::chains::name::MERGE,
|
|
229
|
+
SpecId::Shanghai => edr_chain_l1::chains::name::SHANGHAI,
|
|
230
|
+
SpecId::Cancun => edr_chain_l1::chains::name::CANCUN,
|
|
231
|
+
SpecId::Prague => edr_chain_l1::chains::name::PRAGUE,
|
|
232
|
+
SpecId::Osaka => edr_chain_l1::chains::name::OSAKA,
|
|
222
233
|
}
|
|
223
234
|
}
|
|
224
235
|
|
|
@@ -227,14 +238,14 @@ pub fn l1_hardfork_to_string(harfork: SpecId) -> &'static str {
|
|
|
227
238
|
/// The returned value will be updated after each network upgrade.
|
|
228
239
|
#[napi]
|
|
229
240
|
pub fn l1_hardfork_latest() -> SpecId {
|
|
230
|
-
SpecId::
|
|
241
|
+
SpecId::Osaka
|
|
231
242
|
}
|
|
232
243
|
|
|
233
244
|
macro_rules! export_spec_id {
|
|
234
245
|
($($variant:ident),*) => {
|
|
235
246
|
$(
|
|
236
247
|
#[napi]
|
|
237
|
-
pub const $variant: &str =
|
|
248
|
+
pub const $variant: &str = edr_chain_l1::chains::name::$variant;
|
|
238
249
|
)*
|
|
239
250
|
};
|
|
240
251
|
}
|
|
@@ -258,5 +269,6 @@ export_spec_id!(
|
|
|
258
269
|
MERGE,
|
|
259
270
|
SHANGHAI,
|
|
260
271
|
CANCUN,
|
|
261
|
-
PRAGUE
|
|
272
|
+
PRAGUE,
|
|
273
|
+
OSAKA
|
|
262
274
|
);
|