@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.
@@ -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::{self, Logger},
7
- provider::{self, ProviderBuilder, SyncProviderFactory},
8
- spec::SyncNapiSpec as _,
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 create_provider_builder(
19
+ fn create_provider(
20
20
  &self,
21
- env: &napi::Env,
21
+ runtime: runtime::Handle,
22
22
  provider_config: edr_napi_core::provider::Config,
23
- logger_config: logger::Config,
24
- subscription_config: subscription::Config,
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<Box<dyn provider::Builder>> {
27
- let logger = Logger::<GenericChainSpec>::new(logger_config, Arc::clone(&contract_decoder))?;
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::<l1::SpecId>::try_from(provider_config)?;
33
+ edr_provider::ProviderConfig::<edr_chain_l1::Hardfork>::try_from(provider_config)?;
31
34
 
32
- let subscription_callback =
33
- subscription::Callback::new(env, subscription_config.subscription_callback)?;
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
- subscription_callback,
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 = GenericChainSpec::CHAIN_TYPE;
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 edr_eth::l1::{self, L1ChainSpec};
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::{self, ProviderBuilder, SyncProviderFactory},
11
- spec::SyncNapiSpec as _,
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::bindgen_prelude::{BigInt, Uint8Array};
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 create_provider_builder(
26
+ fn create_provider(
24
27
  &self,
25
- env: &napi::Env,
28
+ runtime: runtime::Handle,
26
29
  provider_config: edr_napi_core::provider::Config,
27
30
  logger_config: edr_napi_core::logger::Config,
28
- subscription_config: edr_napi_core::subscription::Config,
31
+ subscription_callback: edr_napi_core::subscription::Callback,
29
32
  contract_decoder: Arc<ContractDecoder>,
30
- ) -> napi::Result<Box<dyn provider::Builder>> {
31
- let logger = Logger::<L1ChainSpec>::new(logger_config, Arc::clone(&contract_decoder))?;
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::<l1::SpecId>::try_from(provider_config)?;
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
- Ok(Box::new(ProviderBuilder::new(
40
- contract_decoder,
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
- subscription_callback,
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 = L1ChainSpec::CHAIN_TYPE;
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
- edr_eth::l1::hardfork::name::FRONTIER => Ok(SpecId::Frontier),
140
- edr_eth::l1::hardfork::name::FRONTIER_THAWING => Ok(SpecId::FrontierThawing),
141
- edr_eth::l1::hardfork::name::HOMESTEAD => Ok(SpecId::Homestead),
142
- edr_eth::l1::hardfork::name::DAO_FORK => Ok(SpecId::DaoFork),
143
- edr_eth::l1::hardfork::name::TANGERINE => Ok(SpecId::Tangerine),
144
- edr_eth::l1::hardfork::name::SPURIOUS_DRAGON => Ok(SpecId::SpuriousDragon),
145
- edr_eth::l1::hardfork::name::BYZANTIUM => Ok(SpecId::Byzantium),
146
- edr_eth::l1::hardfork::name::CONSTANTINOPLE => Ok(SpecId::Constantinople),
147
- edr_eth::l1::hardfork::name::PETERSBURG => Ok(SpecId::Petersburg),
148
- edr_eth::l1::hardfork::name::ISTANBUL => Ok(SpecId::Istanbul),
149
- edr_eth::l1::hardfork::name::MUIR_GLACIER => Ok(SpecId::MuirGlacier),
150
- edr_eth::l1::hardfork::name::BERLIN => Ok(SpecId::Berlin),
151
- edr_eth::l1::hardfork::name::LONDON => Ok(SpecId::London),
152
- edr_eth::l1::hardfork::name::ARROW_GLACIER => Ok(SpecId::ArrowGlacier),
153
- edr_eth::l1::hardfork::name::GRAY_GLACIER => Ok(SpecId::GrayGlacier),
154
- edr_eth::l1::hardfork::name::MERGE => Ok(SpecId::Merge),
155
- edr_eth::l1::hardfork::name::SHANGHAI => Ok(SpecId::Shanghai),
156
- edr_eth::l1::hardfork::name::CANCUN => Ok(SpecId::Cancun),
157
- edr_eth::l1::hardfork::name::PRAGUE => Ok(SpecId::Prague),
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 edr_eth::l1::SpecId {
175
+ impl From<SpecId> for edr_chain_l1::Hardfork {
167
176
  fn from(value: SpecId) -> Self {
168
177
  match value {
169
- SpecId::Frontier => edr_eth::l1::SpecId::FRONTIER,
170
- SpecId::FrontierThawing => edr_eth::l1::SpecId::FRONTIER_THAWING,
171
- SpecId::Homestead => edr_eth::l1::SpecId::HOMESTEAD,
172
- SpecId::DaoFork => edr_eth::l1::SpecId::DAO_FORK,
173
- SpecId::Tangerine => edr_eth::l1::SpecId::TANGERINE,
174
- SpecId::SpuriousDragon => edr_eth::l1::SpecId::SPURIOUS_DRAGON,
175
- SpecId::Byzantium => edr_eth::l1::SpecId::BYZANTIUM,
176
- SpecId::Constantinople => edr_eth::l1::SpecId::CONSTANTINOPLE,
177
- SpecId::Petersburg => edr_eth::l1::SpecId::PETERSBURG,
178
- SpecId::Istanbul => edr_eth::l1::SpecId::ISTANBUL,
179
- SpecId::MuirGlacier => edr_eth::l1::SpecId::MUIR_GLACIER,
180
- SpecId::Berlin => edr_eth::l1::SpecId::BERLIN,
181
- SpecId::London => edr_eth::l1::SpecId::LONDON,
182
- SpecId::ArrowGlacier => edr_eth::l1::SpecId::ARROW_GLACIER,
183
- SpecId::GrayGlacier => edr_eth::l1::SpecId::GRAY_GLACIER,
184
- SpecId::Merge => edr_eth::l1::SpecId::MERGE,
185
- SpecId::Shanghai => edr_eth::l1::SpecId::SHANGHAI,
186
- SpecId::Cancun => edr_eth::l1::SpecId::CANCUN,
187
- SpecId::Prague => edr_eth::l1::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 => edr_eth::l1::hardfork::name::FRONTIER,
204
- SpecId::FrontierThawing => edr_eth::l1::hardfork::name::FRONTIER_THAWING,
205
- SpecId::Homestead => edr_eth::l1::hardfork::name::HOMESTEAD,
206
- SpecId::DaoFork => edr_eth::l1::hardfork::name::DAO_FORK,
207
- SpecId::Tangerine => edr_eth::l1::hardfork::name::TANGERINE,
208
- SpecId::SpuriousDragon => edr_eth::l1::hardfork::name::SPURIOUS_DRAGON,
209
- SpecId::Byzantium => edr_eth::l1::hardfork::name::BYZANTIUM,
210
- SpecId::Constantinople => edr_eth::l1::hardfork::name::CONSTANTINOPLE,
211
- SpecId::Petersburg => edr_eth::l1::hardfork::name::PETERSBURG,
212
- SpecId::Istanbul => edr_eth::l1::hardfork::name::ISTANBUL,
213
- SpecId::MuirGlacier => edr_eth::l1::hardfork::name::MUIR_GLACIER,
214
- SpecId::Berlin => edr_eth::l1::hardfork::name::BERLIN,
215
- SpecId::London => edr_eth::l1::hardfork::name::LONDON,
216
- SpecId::ArrowGlacier => edr_eth::l1::hardfork::name::ARROW_GLACIER,
217
- SpecId::GrayGlacier => edr_eth::l1::hardfork::name::GRAY_GLACIER,
218
- SpecId::Merge => edr_eth::l1::hardfork::name::MERGE,
219
- SpecId::Shanghai => edr_eth::l1::hardfork::name::SHANGHAI,
220
- SpecId::Cancun => edr_eth::l1::hardfork::name::CANCUN,
221
- SpecId::Prague => edr_eth::l1::hardfork::name::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::Prague
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 = edr_eth::l1::hardfork::name::$variant;
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
  );