Skip to content

Commit bdff97b

Browse files
committed
chore(workspace): metering refactor
1 parent 70b4a9b commit bdff97b

File tree

5 files changed

+110
-240
lines changed

5 files changed

+110
-240
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/client/metering/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ serde.workspace = true
4242
base-reth-test-utils.workspace = true
4343
reth-db = { workspace = true, features = ["test-utils"] }
4444
reth-db-common.workspace = true
45+
reth-e2e-test-utils.workspace = true
4546
reth-optimism-node.workspace = true
4647
reth-testing-utils.workspace = true
4748
reth-transaction-pool = { workspace = true, features = ["test-utils"] }

crates/client/metering/tests/meter.rs

Lines changed: 19 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -2,94 +2,48 @@
22
33
use std::sync::Arc;
44

5-
use alloy_consensus::crypto::secp256k1::public_key_to_address;
65
use alloy_eips::Encodable2718;
7-
use alloy_genesis::GenesisAccount;
8-
use alloy_primitives::{Address, B256, Bytes, U256, keccak256};
6+
use alloy_primitives::{Address, B256, Bytes, U256, hex::FromHex, keccak256};
97
use base_bundles::{Bundle, ParsedBundle};
108
use base_reth_metering::meter_bundle;
11-
use base_reth_test_utils::create_provider_factory;
9+
use base_reth_test_utils::{TestAccounts, create_provider_factory, load_genesis};
1210
use eyre::Context;
1311
use op_alloy_consensus::OpTxEnvelope;
14-
use rand::{SeedableRng, rngs::StdRng};
1512
use reth::{api::NodeTypesWithDBAdapter, chainspec::EthChainSpec};
1613
use reth_db::{DatabaseEnv, test_utils::TempDatabase};
17-
use reth_optimism_chainspec::{BASE_MAINNET, OpChainSpec, OpChainSpecBuilder};
14+
use reth_optimism_chainspec::{OpChainSpec, OpChainSpecBuilder};
1815
use reth_optimism_node::OpNode;
1916
use reth_optimism_primitives::OpTransactionSigned;
2017
use reth_primitives_traits::SealedHeader;
2118
use reth_provider::{HeaderProvider, StateProviderFactory, providers::BlockchainProvider};
22-
use reth_testing_utils::generators::generate_keys;
2319
use reth_transaction_pool::test_utils::TransactionBuilder;
2420

2521
type NodeTypes = NodeTypesWithDBAdapter<OpNode, Arc<TempDatabase<DatabaseEnv>>>;
2622

27-
#[derive(Eq, PartialEq, Debug, Hash, Clone, Copy)]
28-
enum User {
29-
Alice,
30-
Bob,
31-
}
32-
3323
#[derive(Debug, Clone)]
3424
struct TestHarness {
3525
provider: BlockchainProvider<NodeTypes>,
3626
header: SealedHeader,
3727
chain_spec: Arc<OpChainSpec>,
38-
user_to_address: std::collections::HashMap<User, Address>,
39-
user_to_private_key: std::collections::HashMap<User, B256>,
28+
accounts: TestAccounts,
4029
}
4130

4231
impl TestHarness {
43-
fn address(&self, u: User) -> Address {
44-
self.user_to_address[&u]
32+
fn alice_signer(&self) -> B256 {
33+
B256::from_hex(self.accounts.alice.private_key).expect("valid hex-encoded key")
4534
}
4635

47-
fn signer(&self, u: User) -> B256 {
48-
self.user_to_private_key[&u]
36+
fn bob_signer(&self) -> B256 {
37+
B256::from_hex(self.accounts.bob.private_key).expect("valid hex-encoded key")
4938
}
5039
}
5140

52-
fn create_chain_spec(
53-
seed: u64,
54-
) -> (
55-
Arc<OpChainSpec>,
56-
std::collections::HashMap<User, Address>,
57-
std::collections::HashMap<User, B256>,
58-
) {
59-
let keys = generate_keys(&mut StdRng::seed_from_u64(seed), 2);
60-
61-
let mut addresses = std::collections::HashMap::new();
62-
let mut private_keys = std::collections::HashMap::new();
63-
64-
let alice_key = keys[0];
65-
let alice_address = public_key_to_address(alice_key.public_key());
66-
let alice_secret = B256::from(alice_key.secret_bytes());
67-
addresses.insert(User::Alice, alice_address);
68-
private_keys.insert(User::Alice, alice_secret);
69-
70-
let bob_key = keys[1];
71-
let bob_address = public_key_to_address(bob_key.public_key());
72-
let bob_secret = B256::from(bob_key.secret_bytes());
73-
addresses.insert(User::Bob, bob_address);
74-
private_keys.insert(User::Bob, bob_secret);
75-
76-
let genesis = BASE_MAINNET
77-
.genesis
78-
.clone()
79-
.extend_accounts(vec![
80-
(alice_address, GenesisAccount::default().with_balance(U256::from(1_000_000_000_u64))),
81-
(bob_address, GenesisAccount::default().with_balance(U256::from(1_000_000_000_u64))),
82-
])
83-
.with_gas_limit(100_000_000);
84-
85-
let spec =
41+
fn setup_harness() -> eyre::Result<TestHarness> {
42+
let accounts = TestAccounts::new();
43+
let genesis = load_genesis();
44+
let chain_spec =
8645
Arc::new(OpChainSpecBuilder::base_mainnet().genesis(genesis).isthmus_activated().build());
8746

88-
(spec, addresses, private_keys)
89-
}
90-
91-
fn setup_harness() -> eyre::Result<TestHarness> {
92-
let (chain_spec, user_to_address, user_to_private_key) = create_chain_spec(1337);
9347
let factory = create_provider_factory::<OpNode>(chain_spec.clone());
9448

9549
reth_db_common::init::init_genesis(&factory).context("initializing genesis state")?;
@@ -100,7 +54,7 @@ fn setup_harness() -> eyre::Result<TestHarness> {
10054
.context("fetching genesis header")?
10155
.expect("genesis header exists");
10256

103-
Ok(TestHarness { provider, header, chain_spec, user_to_address, user_to_private_key })
57+
Ok(TestHarness { provider, header, chain_spec, accounts })
10458
}
10559

10660
fn envelope_from_signed(tx: &OpTransactionSigned) -> eyre::Result<OpTxEnvelope> {
@@ -155,7 +109,7 @@ fn meter_bundle_single_transaction() -> eyre::Result<()> {
155109

156110
let to = Address::random();
157111
let signed_tx = TransactionBuilder::default()
158-
.signer(harness.signer(User::Alice))
112+
.signer(harness.alice_signer())
159113
.chain_id(harness.chain_spec.chain_id())
160114
.nonce(0)
161115
.to(to)
@@ -185,7 +139,7 @@ fn meter_bundle_single_transaction() -> eyre::Result<()> {
185139
let result = &results[0];
186140
assert!(total_execution_time > 0);
187141

188-
assert_eq!(result.from_address, harness.address(User::Alice));
142+
assert_eq!(result.from_address, harness.accounts.alice.address);
189143
assert_eq!(result.to_address, Some(to));
190144
assert_eq!(result.tx_hash, tx_hash);
191145
assert_eq!(result.gas_price, U256::from(10));
@@ -213,7 +167,7 @@ fn meter_bundle_multiple_transactions() -> eyre::Result<()> {
213167

214168
// Create first transaction
215169
let signed_tx_1 = TransactionBuilder::default()
216-
.signer(harness.signer(User::Alice))
170+
.signer(harness.alice_signer())
217171
.chain_id(harness.chain_spec.chain_id())
218172
.nonce(0)
219173
.to(to_1)
@@ -229,7 +183,7 @@ fn meter_bundle_multiple_transactions() -> eyre::Result<()> {
229183

230184
// Create second transaction
231185
let signed_tx_2 = TransactionBuilder::default()
232-
.signer(harness.signer(User::Bob))
186+
.signer(harness.bob_signer())
233187
.chain_id(harness.chain_spec.chain_id())
234188
.nonce(0)
235189
.to(to_2)
@@ -263,7 +217,7 @@ fn meter_bundle_multiple_transactions() -> eyre::Result<()> {
263217

264218
// Check first transaction
265219
let result_1 = &results[0];
266-
assert_eq!(result_1.from_address, harness.address(User::Alice));
220+
assert_eq!(result_1.from_address, harness.accounts.alice.address);
267221
assert_eq!(result_1.to_address, Some(to_1));
268222
assert_eq!(result_1.tx_hash, tx_hash_1);
269223
assert_eq!(result_1.gas_price, U256::from(10));
@@ -272,7 +226,7 @@ fn meter_bundle_multiple_transactions() -> eyre::Result<()> {
272226

273227
// Check second transaction
274228
let result_2 = &results[1];
275-
assert_eq!(result_2.from_address, harness.address(User::Bob));
229+
assert_eq!(result_2.from_address, harness.accounts.bob.address);
276230
assert_eq!(result_2.to_address, Some(to_2));
277231
assert_eq!(result_2.tx_hash, tx_hash_2);
278232
assert_eq!(result_2.gas_price, U256::from(15));

crates/client/metering/tests/meter_block.rs

Lines changed: 20 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -2,79 +2,48 @@
22
33
use std::sync::Arc;
44

5-
use alloy_consensus::{BlockHeader, Header, crypto::secp256k1::public_key_to_address};
6-
use alloy_genesis::GenesisAccount;
7-
use alloy_primitives::{Address, B256, U256};
5+
use alloy_consensus::{BlockHeader, Header};
6+
use alloy_primitives::{Address, B256, hex::FromHex};
87
use base_reth_metering::meter_block;
9-
use base_reth_test_utils::create_provider_factory;
8+
use base_reth_test_utils::{TestAccounts, create_provider_factory, load_genesis};
109
use eyre::Context;
11-
use rand::{SeedableRng, rngs::StdRng};
1210
use reth::{api::NodeTypesWithDBAdapter, chainspec::EthChainSpec};
1311
use reth_db::{DatabaseEnv, test_utils::TempDatabase};
14-
use reth_optimism_chainspec::{BASE_MAINNET, OpChainSpec, OpChainSpecBuilder};
12+
use reth_optimism_chainspec::{OpChainSpec, OpChainSpecBuilder};
1513
use reth_optimism_node::OpNode;
1614
use reth_optimism_primitives::{OpBlock, OpBlockBody, OpTransactionSigned};
1715
use reth_primitives_traits::Block as BlockT;
1816
use reth_provider::{HeaderProvider, providers::BlockchainProvider};
19-
use reth_testing_utils::generators::generate_keys;
2017
use reth_transaction_pool::test_utils::TransactionBuilder;
2118

2219
type NodeTypes = NodeTypesWithDBAdapter<OpNode, Arc<TempDatabase<DatabaseEnv>>>;
2320

24-
#[derive(Eq, PartialEq, Debug, Hash, Clone, Copy)]
25-
enum User {
26-
Alice,
27-
Bob,
28-
}
29-
3021
#[derive(Debug, Clone)]
3122
struct TestHarness {
3223
provider: BlockchainProvider<NodeTypes>,
3324
genesis_header_hash: B256,
3425
genesis_header_number: u64,
3526
genesis_header_timestamp: u64,
3627
chain_spec: Arc<OpChainSpec>,
37-
user_to_private_key: std::collections::HashMap<User, B256>,
28+
accounts: TestAccounts,
3829
}
3930

4031
impl TestHarness {
41-
fn signer(&self, u: User) -> B256 {
42-
self.user_to_private_key[&u]
32+
fn alice_signer(&self) -> B256 {
33+
B256::from_hex(self.accounts.alice.private_key).expect("valid hex-encoded key")
4334
}
44-
}
45-
46-
fn create_chain_spec(seed: u64) -> (Arc<OpChainSpec>, std::collections::HashMap<User, B256>) {
47-
let keys = generate_keys(&mut StdRng::seed_from_u64(seed), 2);
48-
49-
let mut private_keys = std::collections::HashMap::new();
50-
51-
let alice_key = keys[0];
52-
let alice_address = public_key_to_address(alice_key.public_key());
53-
let alice_secret = B256::from(alice_key.secret_bytes());
54-
private_keys.insert(User::Alice, alice_secret);
55-
56-
let bob_key = keys[1];
57-
let bob_address = public_key_to_address(bob_key.public_key());
58-
let bob_secret = B256::from(bob_key.secret_bytes());
59-
private_keys.insert(User::Bob, bob_secret);
6035

61-
let genesis = BASE_MAINNET
62-
.genesis
63-
.clone()
64-
.extend_accounts(vec![
65-
(alice_address, GenesisAccount::default().with_balance(U256::from(1_000_000_000_u64))),
66-
(bob_address, GenesisAccount::default().with_balance(U256::from(1_000_000_000_u64))),
67-
])
68-
.with_gas_limit(100_000_000);
69-
70-
let spec =
71-
Arc::new(OpChainSpecBuilder::base_mainnet().genesis(genesis).isthmus_activated().build());
72-
73-
(spec, private_keys)
36+
fn bob_signer(&self) -> B256 {
37+
B256::from_hex(self.accounts.bob.private_key).expect("valid hex-encoded key")
38+
}
7439
}
7540

7641
fn setup_harness() -> eyre::Result<TestHarness> {
77-
let (chain_spec, user_to_private_key) = create_chain_spec(1337);
42+
let accounts = TestAccounts::new();
43+
let genesis = load_genesis();
44+
let chain_spec =
45+
Arc::new(OpChainSpecBuilder::base_mainnet().genesis(genesis).isthmus_activated().build());
46+
7847
let factory = create_provider_factory::<OpNode>(chain_spec.clone());
7948

8049
reth_db_common::init::init_genesis(&factory).context("initializing genesis state")?;
@@ -91,7 +60,7 @@ fn setup_harness() -> eyre::Result<TestHarness> {
9160
genesis_header_number: header.number(),
9261
genesis_header_timestamp: header.timestamp(),
9362
chain_spec,
94-
user_to_private_key,
63+
accounts,
9564
})
9665
}
9766

@@ -144,7 +113,7 @@ fn meter_block_single_transaction() -> eyre::Result<()> {
144113

145114
let to = Address::random();
146115
let signed_tx = TransactionBuilder::default()
147-
.signer(harness.signer(User::Alice))
116+
.signer(harness.alice_signer())
148117
.chain_id(harness.chain_spec.chain_id())
149118
.nonce(0)
150119
.to(to)
@@ -191,7 +160,7 @@ fn meter_block_multiple_transactions() -> eyre::Result<()> {
191160

192161
// Create first transaction from Alice
193162
let signed_tx_1 = TransactionBuilder::default()
194-
.signer(harness.signer(User::Alice))
163+
.signer(harness.alice_signer())
195164
.chain_id(harness.chain_spec.chain_id())
196165
.nonce(0)
197166
.to(to_1)
@@ -208,7 +177,7 @@ fn meter_block_multiple_transactions() -> eyre::Result<()> {
208177

209178
// Create second transaction from Bob
210179
let signed_tx_2 = TransactionBuilder::default()
211-
.signer(harness.signer(User::Bob))
180+
.signer(harness.bob_signer())
212181
.chain_id(harness.chain_spec.chain_id())
213182
.nonce(0)
214183
.to(to_2)
@@ -268,7 +237,7 @@ fn meter_block_timing_consistency() -> eyre::Result<()> {
268237

269238
// Create a block with one transaction
270239
let signed_tx = TransactionBuilder::default()
271-
.signer(harness.signer(User::Alice))
240+
.signer(harness.alice_signer())
272241
.chain_id(harness.chain_spec.chain_id())
273242
.nonce(0)
274243
.to(Address::random())

0 commit comments

Comments
 (0)