mirror of
https://github.com/FlipsideCrypto/web3.py.git
synced 2026-02-06 10:56:47 +00:00
Merge pull request #88 from pipermerriam/piper/fix-broken-get-block-function
Fix eth methods that use `latest/earliest/pending`
This commit is contained in:
commit
e8d20a6b09
@ -9,7 +9,6 @@ def wait_for_first_block(web3, wait_for_block):
|
||||
|
||||
|
||||
def test_eth_getBlock_by_number(web3):
|
||||
assert web3.eth.blockNumber >= 1
|
||||
block_1 = web3.eth.getBlock(1)
|
||||
assert block_1
|
||||
assert block_1['number'] == 1
|
||||
@ -17,7 +16,6 @@ def test_eth_getBlock_by_number(web3):
|
||||
|
||||
|
||||
def test_eth_getBlock_by_hash(web3):
|
||||
assert web3.eth.blockNumber >= 1
|
||||
block_1 = web3.eth.getBlock(1)
|
||||
block_1_hash = block_1['hash']
|
||||
|
||||
@ -29,14 +27,12 @@ def test_eth_getBlock_by_hash(web3):
|
||||
|
||||
|
||||
def test_eth_getBlock_by_number_with_full_transactions(web3):
|
||||
assert web3.eth.blockNumber >= 1
|
||||
block_1 = web3.eth.getBlock(1, True)
|
||||
assert block_1['number'] == 1
|
||||
assert all(isinstance(txn, dict) for txn in block_1['transactions'])
|
||||
|
||||
|
||||
def test_eth_getBlock_by_hash_with_full_transactions(web3):
|
||||
assert web3.eth.blockNumber >= 1
|
||||
block_1 = web3.eth.getBlock(1, True)
|
||||
block_1_hash = block_1['hash']
|
||||
|
||||
@ -45,3 +41,23 @@ def test_eth_getBlock_by_hash_with_full_transactions(web3):
|
||||
assert block_1_by_hash['number'] == 1
|
||||
assert block_1_by_hash['hash'] == block_1_hash
|
||||
assert all(isinstance(txn, dict) for txn in block_1['transactions'])
|
||||
|
||||
|
||||
def test_eth_getBlock_using_latest(web3):
|
||||
current_block_number = web3.eth.blockNumber
|
||||
|
||||
block = web3.eth.getBlock('latest')
|
||||
block_number = block['number']
|
||||
|
||||
assert block_number >= current_block_number
|
||||
|
||||
|
||||
def test_eth_getBlock_using_earliest(web3):
|
||||
current_block_number = web3.eth.blockNumber
|
||||
|
||||
block = web3.eth.getBlock('earliest')
|
||||
|
||||
assert block['number'] == 0
|
||||
|
||||
block_1 = web3.eth.getBlock(0)
|
||||
assert block == block_1
|
||||
|
||||
20
tests/utilities/test_is_predefined_block_number.py
Normal file
20
tests/utilities/test_is_predefined_block_number.py
Normal file
@ -0,0 +1,20 @@
|
||||
import pytest
|
||||
|
||||
from web3.utils.blocks import (
|
||||
is_predefined_block_number,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'block_identifier,expected',
|
||||
(
|
||||
('earliest', True),
|
||||
('latest', True),
|
||||
('pending', True),
|
||||
(1, False),
|
||||
('0x1', False),
|
||||
),
|
||||
)
|
||||
def test_is_predefined_block_number(block_identifier, expected):
|
||||
actual = is_predefined_block_number(block_identifier)
|
||||
assert actual is expected
|
||||
@ -20,6 +20,9 @@ from web3.utils.filters import (
|
||||
TransactionFilter,
|
||||
LogFilter,
|
||||
)
|
||||
from web3.utils.blocks import (
|
||||
is_predefined_block_number,
|
||||
)
|
||||
from web3.contract import construct_contract_class
|
||||
|
||||
|
||||
@ -138,7 +141,7 @@ class Eth(object):
|
||||
`eth_getBlockByHash`
|
||||
`eth_getBlockByNumber`
|
||||
"""
|
||||
if is_integer(block_identifier):
|
||||
if is_predefined_block_number(block_identifier) or is_integer(block_identifier):
|
||||
method = 'eth_getBlockByNumber'
|
||||
else:
|
||||
method = 'eth_getBlockByHash'
|
||||
@ -154,7 +157,7 @@ class Eth(object):
|
||||
`eth_getBlockTransactionCountByHash`
|
||||
`eth_getBlockTransactionCountByNumber`
|
||||
"""
|
||||
if is_integer(block_identifier):
|
||||
if is_predefined_block_number(block_identifier) or is_integer(block_identifier):
|
||||
method = 'eth_getBlockTransactionCountByNumber'
|
||||
else:
|
||||
method = 'eth_getBlockTransactionCountByHash'
|
||||
@ -180,7 +183,7 @@ class Eth(object):
|
||||
`eth_getTransactionByBlockHashAndIndex`
|
||||
`eth_getTransactionByBlockNumberAndIndex`
|
||||
"""
|
||||
if is_integer(block_identifier):
|
||||
if is_predefined_block_number(block_identifier) or is_integer(block_identifier):
|
||||
method = 'eth_getTransactionByBlockNumberAndIndex'
|
||||
else:
|
||||
method = 'eth_getTransactionByBlockHashAndIndex'
|
||||
|
||||
@ -6,7 +6,6 @@ import operator
|
||||
from web3.iban import Iban
|
||||
|
||||
from web3.utils.string import (
|
||||
force_text,
|
||||
coerce_args_to_text,
|
||||
coerce_return_to_text,
|
||||
)
|
||||
@ -26,7 +25,6 @@ from web3.utils.formatting import (
|
||||
add_0x_prefix,
|
||||
)
|
||||
from web3.utils.encoding import (
|
||||
to_hex,
|
||||
encode_hex,
|
||||
decode_hex,
|
||||
from_decimal,
|
||||
@ -66,20 +64,6 @@ def apply_to_array(formatter_fn):
|
||||
)
|
||||
|
||||
|
||||
def isPredefinedBlockNumber(blockNumber):
|
||||
if not is_string(blockNumber):
|
||||
return False
|
||||
return force_text(blockNumber) in {"latest", "pending", "earliest"}
|
||||
|
||||
|
||||
def inputBlockNumberFormatter(blockNumber):
|
||||
if not blockNumber:
|
||||
return None
|
||||
elif isPredefinedBlockNumber(blockNumber):
|
||||
return blockNumber
|
||||
return to_hex(blockNumber)
|
||||
|
||||
|
||||
@coerce_args_to_text
|
||||
@coerce_return_to_text
|
||||
def input_call_formatter(eth, txn):
|
||||
|
||||
8
web3/utils/blocks.py
Normal file
8
web3/utils/blocks.py
Normal file
@ -0,0 +1,8 @@
|
||||
from .types import is_string
|
||||
from .string import force_text
|
||||
|
||||
|
||||
def is_predefined_block_number(block_number):
|
||||
if not is_string(block_number):
|
||||
return False
|
||||
return force_text(block_number) in {"latest", "pending", "earliest"}
|
||||
Loading…
Reference in New Issue
Block a user