Skip to content

Commit 1f22112

Browse files
mmv08grandizzy
andauthored
feat(anvil): add genesis number to configuration and update related structures (#10083)
* feat: add genesis number to configuration and update related structures - Introduced `genesis.number` in `GenesisConfig` to store the genesis block number. - Added `get_genesis_number` method to retrieve the genesis number. - Updated `setup` function to initialize the genesis number. - Modified `BlockchainStorage` and `Blockchain` constructors to accept and utilize the genesis number. - Adjusted tests to reflect the new genesis number functionality. * Fix fmt --------- Co-authored-by: grandizzy <[email protected]> Co-authored-by: grandizzy <[email protected]>
1 parent 8d482d5 commit 1f22112

File tree

5 files changed

+44
-5
lines changed

5 files changed

+44
-5
lines changed

crates/anvil/src/config.rs

+17
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,17 @@ Genesis Timestamp
331331
self.get_genesis_timestamp().green()
332332
);
333333

334+
let _ = write!(
335+
s,
336+
r#"
337+
Genesis Number
338+
==================
339+
340+
{}
341+
"#,
342+
self.get_genesis_number().green()
343+
);
344+
334345
s
335346
}
336347

@@ -654,6 +665,11 @@ impl NodeConfig {
654665
self
655666
}
656667

668+
/// Returns the genesis number
669+
pub fn get_genesis_number(&self) -> u64 {
670+
self.genesis.as_ref().and_then(|g| g.number).unwrap_or(0)
671+
}
672+
657673
/// Sets the hardfork
658674
#[must_use]
659675
pub fn with_hardfork(mut self, hardfork: Option<ChainHardfork>) -> Self {
@@ -1033,6 +1049,7 @@ impl NodeConfig {
10331049
}
10341050

10351051
let genesis = GenesisConfig {
1052+
number: self.get_genesis_number(),
10361053
timestamp: self.get_genesis_timestamp(),
10371054
balance: self.genesis_balance,
10381055
accounts: self.genesis_accounts.iter().map(|acc| acc.address()).collect(),

crates/anvil/src/eth/backend/genesis.rs

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ use tokio::sync::RwLockWriteGuard;
1212
/// Genesis settings
1313
#[derive(Clone, Debug, Default)]
1414
pub struct GenesisConfig {
15+
/// The initial number for the genesis block
16+
pub number: u64,
1517
/// The initial timestamp for the genesis block
1618
pub timestamp: u64,
1719
/// Balance for genesis accounts

crates/anvil/src/eth/backend/mem/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ impl Backend {
241241
env.handler_cfg.spec_id,
242242
fees.is_eip1559().then(|| fees.base_fee()),
243243
genesis.timestamp,
244+
genesis.number,
244245
)
245246
};
246247

crates/anvil/src/eth/backend/mem/storage.rs

+20-4
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,13 @@ pub struct BlockchainStorage {
271271

272272
impl BlockchainStorage {
273273
/// Creates a new storage with a genesis block
274-
pub fn new(env: &Env, spec_id: SpecId, base_fee: Option<u64>, timestamp: u64) -> Self {
274+
pub fn new(
275+
env: &Env,
276+
spec_id: SpecId,
277+
base_fee: Option<u64>,
278+
timestamp: u64,
279+
genesis_number: u64,
280+
) -> Self {
275281
let is_shanghai = spec_id >= SpecId::SHANGHAI;
276282
let is_cancun = spec_id >= SpecId::CANCUN;
277283
let is_prague = spec_id >= SpecId::PRAGUE;
@@ -294,7 +300,7 @@ impl BlockchainStorage {
294300
let block = Block::new::<MaybeImpersonatedTransaction>(partial_header, vec![]);
295301
let genesis_hash = block.header.hash_slow();
296302
let best_hash = genesis_hash;
297-
let best_number: U64 = U64::from(0u64);
303+
let best_number: U64 = U64::from(genesis_number);
298304

299305
let mut blocks = B256HashMap::default();
300306
blocks.insert(genesis_hash, block);
@@ -440,10 +446,20 @@ pub struct Blockchain {
440446

441447
impl Blockchain {
442448
/// Creates a new storage with a genesis block
443-
pub fn new(env: &Env, spec_id: SpecId, base_fee: Option<u64>, timestamp: u64) -> Self {
449+
pub fn new(
450+
env: &Env,
451+
spec_id: SpecId,
452+
base_fee: Option<u64>,
453+
timestamp: u64,
454+
genesis_number: u64,
455+
) -> Self {
444456
Self {
445457
storage: Arc::new(RwLock::new(BlockchainStorage::new(
446-
env, spec_id, base_fee, timestamp,
458+
env,
459+
spec_id,
460+
base_fee,
461+
timestamp,
462+
genesis_number,
447463
))),
448464
}
449465
}

crates/anvil/tests/it/genesis.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ async fn can_apply_genesis() {
3030
"balance": "0xffffffffffffffffffffffffff"
3131
}
3232
},
33-
"number": "0x0",
33+
"number": 73,
3434
"gasUsed": "0x0",
3535
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
3636
}
@@ -47,4 +47,7 @@ async fn can_apply_genesis() {
4747

4848
let expected: U256 = U256::from_str_radix("ffffffffffffffffffffffffff", 16).unwrap();
4949
assert_eq!(balance, expected);
50+
51+
let block_number = provider.get_block_number().await.unwrap();
52+
assert_eq!(block_number, 73u64);
5053
}

0 commit comments

Comments
 (0)