Skip to content

Commit 7765320

Browse files
authored
add BASE support (#35)
- add base mainnet and testnet to test data - enable test to automatically pull recent blocks for test data if chain ID not defined in CHAIN_INFO - upgrade locust and click versions, and change psycopg2 to psycopg2-binary
1 parent 177c49e commit 7765320

File tree

4 files changed

+970
-894
lines changed

4 files changed

+970
-894
lines changed

chainbench/profile/ethereum/general.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ def call_task(self):
3232
method="eth_call",
3333
params=[
3434
{
35-
"to": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
36-
"data": "0x70a082310000000000000000000000009696f59E4d72E237BE84fFD425DCaD154Bf96976", # noqa: E501
35+
"to": "0x8BB4C975Ff3c250e0ceEA271728547f3802B36Fd",
36+
"data": "0x734e7fb90000000000000000000000000000000000000000000000000000000064d40c600000000000000000000000000000000000000000000000000000000064d43690", # noqa: E501
3737
},
3838
"latest",
3939
],

chainbench/test_data/evm.py

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import logging
12
from typing import Mapping
23

34
from chainbench.test_data.base import BaseTestData, BlockchainData, Blocks, ChainInfo
45
from chainbench.util.rng import get_rng
56

7+
logger = logging.getLogger(__name__)
8+
69

710
class EVMTestData(BaseTestData):
811
TXS_REQUIRED = 100
@@ -35,6 +38,16 @@ class EVMTestData(BaseTestData):
3538
"start_block": 20000000,
3639
"end_block": 32000000,
3740
},
41+
8453: {
42+
"name": "base-mainnet",
43+
"start_block": 1,
44+
"end_block": 2400000,
45+
},
46+
84531: {
47+
"name": "base-testnet",
48+
"start_block": 1,
49+
"end_block": 8200000,
50+
},
3851
}
3952

4053
def _fetch_chain_id(self) -> int:
@@ -57,23 +70,29 @@ def _fetch_random_block(self, start, end, return_txs=True) -> tuple[int, dict]:
5770
block_number = rng.random.randint(start, end)
5871
return self._fetch_block(block_number, return_txs=return_txs)
5972

73+
def _get_start_and_end_blocks(self, use_recent_blocks: bool) -> tuple[int, int]:
74+
chain_id: int = self._fetch_chain_id()
75+
if not use_recent_blocks and chain_id in self.CHAIN_INFO:
76+
start_block_number = self.CHAIN_INFO[chain_id]["start_block"]
77+
end_block_number = self.CHAIN_INFO[chain_id]["end_block"]
78+
logger.info("Using blocks from %s to %s as test data", start_block_number, end_block_number)
79+
return start_block_number, end_block_number
80+
else:
81+
end_block_number = int(self._make_call("eth_blockNumber"), 0)
82+
start_block_number = end_block_number - 20
83+
logger.info("Using recent blocks from %s to %s as test data", start_block_number, end_block_number)
84+
return start_block_number, end_block_number
85+
6086
# get initial data from blockchain
6187
def _get_init_data(self, parsed_options) -> BlockchainData:
6288
txs: list[dict] = []
6389
tx_hashes: list[str] = []
6490
accounts: set[str] = set()
6591
blocks: Blocks = []
66-
chain_id: int = self._fetch_chain_id()
6792
start_block_number: int
6893
end_block_number: int
6994
return_txs: bool
70-
71-
if parsed_options.use_recent_blocks:
72-
end_block_number = int(self._make_call("eth_blockNumber"), 0)
73-
start_block_number = end_block_number - 20
74-
else:
75-
start_block_number = self.CHAIN_INFO[chain_id]["start_block"]
76-
end_block_number = self.CHAIN_INFO[chain_id]["end_block"]
95+
start_block_number, end_block_number = self._get_start_and_end_blocks(parsed_options.use_recent_blocks)
7796

7897
while self.TXS_REQUIRED > len(txs) or self.ACCOUNTS_REQUIRED > len(accounts) or self.SAVE_BLOCKS > len(blocks):
7998
if self.ACCOUNTS_REQUIRED > len(accounts) or self.TXS_REQUIRED > len(txs):

0 commit comments

Comments
 (0)