diff --git a/newsfragments/1660.bugfix.rst b/newsfragments/1660.bugfix.rst new file mode 100644 index 0000000000..a4c1ecd73e --- /dev/null +++ b/newsfragments/1660.bugfix.rst @@ -0,0 +1 @@ +Added formatter rules for eth_tester middleware to allow :meth:`~web3.eth.Eth.getBalance` by using integer block numbers diff --git a/web3/_utils/module_testing/eth_module.py b/web3/_utils/module_testing/eth_module.py index c4930d0f73..16bcf3cdfd 100644 --- a/web3/_utils/module_testing/eth_module.py +++ b/web3/_utils/module_testing/eth_module.py @@ -126,6 +126,15 @@ def test_eth_getBalance(self, web3: "Web3") -> None: assert is_integer(balance) assert balance >= 0 + def test_eth_getBalance_with_block_identifier(self, web3: "Web3") -> None: + miner_address = web3.eth.getBlock(1)['miner'] + genesis_balance = web3.eth.getBalance(miner_address, 0) + later_balance = web3.eth.getBalance(miner_address, 1) + + assert is_integer(genesis_balance) + assert is_integer(later_balance) + assert later_balance > genesis_balance + def test_eth_getStorageAt( self, web3: "Web3", emitter_contract_address: ChecksumAddress ) -> None: diff --git a/web3/providers/eth_tester/middleware.py b/web3/providers/eth_tester/middleware.py index b03828abb4..ef07242c79 100644 --- a/web3/providers/eth_tester/middleware.py +++ b/web3/providers/eth_tester/middleware.py @@ -225,6 +225,10 @@ def is_hexstr(value: Any) -> bool: identity, apply_formatter_if(is_not_named_block, to_integer_if_hex), ), + RPCEndpoint('eth_getBalance'): apply_formatters_to_args( + identity, + apply_formatter_if(is_not_named_block, to_integer_if_hex), + ), # EVM RPCEndpoint('evm_revert'): apply_formatters_to_args(hex_to_integer), # Personal diff --git a/web3/types.py b/web3/types.py index 28d3c4ae14..0c8c94dd84 100644 --- a/web3/types.py +++ b/web3/types.py @@ -44,7 +44,7 @@ TValue = TypeVar("TValue") BlockParams = Literal["latest", "earliest", "pending"] -BlockIdentifier = Union[BlockParams, BlockNumber, Hash32, HexStr, HexBytes] +BlockIdentifier = Union[BlockParams, BlockNumber, Hash32, HexStr, HexBytes, int] LatestBlockParam = Literal["latest"] FunctionIdentifier = Union[str, Type[FallbackFn], Type[ReceiveFn]]