This commit is contained in:
Piper Merriam 2016-09-07 09:56:29 -06:00
parent 3b7a6382d6
commit 9b956c3e8a
5 changed files with 43 additions and 21 deletions

View File

@ -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']
@ -48,11 +44,20 @@ def test_eth_getBlock_by_hash_with_full_transactions(web3):
def test_eth_getBlock_using_latest(web3):
assert web3.eth.blockNumber >= 1
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

View 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

View File

@ -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'

View File

@ -66,20 +66,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
View 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"}