From c59aa6df90b30ebc08fd373d8b8c242cef4241e8 Mon Sep 17 00:00:00 2001 From: Matthias Lohr Date: Tue, 26 May 2020 22:41:00 +0200 Subject: [PATCH 1/6] fixed error when accessing blocks by blocknumber using eth_tester --- web3/providers/eth_tester/middleware.py | 4 ++++ 1 file changed, 4 insertions(+) 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 From 264657a9cac52167a70703dd0ead8acb5bb96b1f Mon Sep 17 00:00:00 2001 From: Matthias Lohr Date: Tue, 26 May 2020 22:48:49 +0200 Subject: [PATCH 2/6] added newsfragment --- newsfragments/1660.bugfix.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 newsfragments/1660.bugfix.rst diff --git a/newsfragments/1660.bugfix.rst b/newsfragments/1660.bugfix.rst new file mode 100644 index 0000000000..3779e40f18 --- /dev/null +++ b/newsfragments/1660.bugfix.rst @@ -0,0 +1 @@ +- Added formatter rules for eth_tester middleware to allow getBalance by using integer block numbers \ No newline at end of file From bda0a21b41753c1bf0bf2be3d6c916660a7bb477 Mon Sep 17 00:00:00 2001 From: Marc Garreau Date: Fri, 5 Jun 2020 15:56:21 -0600 Subject: [PATCH 3/6] Add (and trigger) block identifier test --- web3/_utils/module_testing/eth_module.py | 11 +++++++++++ web3/providers/eth_tester/middleware.py | 8 ++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/web3/_utils/module_testing/eth_module.py b/web3/_utils/module_testing/eth_module.py index c4930d0f73..918e20b8f9 100644 --- a/web3/_utils/module_testing/eth_module.py +++ b/web3/_utils/module_testing/eth_module.py @@ -126,6 +126,17 @@ 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: + coinbase = web3.eth.coinbase + + with pytest.raises(InvalidAddress): + web3.eth.getBalance(ChecksumAddress(HexAddress(HexStr(coinbase.lower())))) + + balance = web3.eth.getBalance(coinbase, 0) + + assert is_integer(balance) + assert balance >= 0 + 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 ef07242c79..9a18d6fe42 100644 --- a/web3/providers/eth_tester/middleware.py +++ b/web3/providers/eth_tester/middleware.py @@ -225,10 +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), - ), + # 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 From 4fab3b5beef9aace2fbd490a9bcaea7c83a10b8c Mon Sep 17 00:00:00 2001 From: Marc Garreau Date: Fri, 5 Jun 2020 16:05:50 -0600 Subject: [PATCH 4/6] Reimplement formatter --- web3/providers/eth_tester/middleware.py | 8 ++++---- web3/types.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/web3/providers/eth_tester/middleware.py b/web3/providers/eth_tester/middleware.py index 9a18d6fe42..ef07242c79 100644 --- a/web3/providers/eth_tester/middleware.py +++ b/web3/providers/eth_tester/middleware.py @@ -225,10 +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), - # ), + 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 a1ddfe3ef3..96c56e74f8 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]] From 4cb28e59d10c56179076d3651cbc28fe2bfb3680 Mon Sep 17 00:00:00 2001 From: Marc Garreau Date: Mon, 8 Jun 2020 17:05:01 -0600 Subject: [PATCH 5/6] Test balance before and after mining --- web3/_utils/module_testing/eth_module.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/web3/_utils/module_testing/eth_module.py b/web3/_utils/module_testing/eth_module.py index 918e20b8f9..16bcf3cdfd 100644 --- a/web3/_utils/module_testing/eth_module.py +++ b/web3/_utils/module_testing/eth_module.py @@ -127,15 +127,13 @@ def test_eth_getBalance(self, web3: "Web3") -> None: assert balance >= 0 def test_eth_getBalance_with_block_identifier(self, web3: "Web3") -> None: - coinbase = web3.eth.coinbase - - with pytest.raises(InvalidAddress): - web3.eth.getBalance(ChecksumAddress(HexAddress(HexStr(coinbase.lower())))) + miner_address = web3.eth.getBlock(1)['miner'] + genesis_balance = web3.eth.getBalance(miner_address, 0) + later_balance = web3.eth.getBalance(miner_address, 1) - balance = web3.eth.getBalance(coinbase, 0) - - assert is_integer(balance) - assert balance >= 0 + 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 From 58f52fb71adb2529bed791bf423abef1ec270785 Mon Sep 17 00:00:00 2001 From: Marc Garreau Date: Tue, 9 Jun 2020 15:52:48 -0600 Subject: [PATCH 6/6] Update newsfragments/1660.bugfix.rst Co-authored-by: Jason Carver --- newsfragments/1660.bugfix.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newsfragments/1660.bugfix.rst b/newsfragments/1660.bugfix.rst index 3779e40f18..a4c1ecd73e 100644 --- a/newsfragments/1660.bugfix.rst +++ b/newsfragments/1660.bugfix.rst @@ -1 +1 @@ -- Added formatter rules for eth_tester middleware to allow getBalance by using integer block numbers \ No newline at end of file +Added formatter rules for eth_tester middleware to allow :meth:`~web3.eth.Eth.getBalance` by using integer block numbers