def abi_request_formatters(normalizers, abis): for method, abi_types in abis.items(): if isinstance(abi_types, list): yield method, map_abi_data(normalizers, abi_types) elif isinstance(abi_types, dict): single_dict_formatter = apply_abi_formatters_to_dict(normalizers, abi_types) yield method, apply_formatter_at_index(single_dict_formatter, 0) else: raise TypeError("ABI definitions must be a list or dictionary, got %r" % abi_types)
'to': apply_formatter_if( compose(complement(bool), decode_hex), static_return(None), ), } def ethtestrpc_string_middleware(make_request, web3): def middleware(method, params): return force_obj_to_text(make_request(method, params)) return middleware ethtestrpc_middleware = construct_formatting_middleware( request_formatters={ 'eth_uninstallFilter': apply_formatter_at_index(to_integer_if_hex, 0), 'eth_getFilterChanges': apply_formatter_at_index(to_integer_if_hex, 0), 'eth_getFilterLogs': apply_formatter_at_index(to_integer_if_hex, 0), }, result_formatters={ # Eth 'eth_newFilter': apply_formatter_if(is_integer, hex), 'eth_protocolVersion': apply_formatter_if(is_integer, str), 'eth_getTransactionByHash': apply_formatters_to_dict(TRANSACTION_FORMATTERS), # Net 'net_version': apply_formatter_if(is_integer, str), }, ) return_none_result = static_result(None)
'fromBlock': apply_formatter_if(is_integer, integer_to_hex), 'toBlock': apply_formatter_if(is_integer, integer_to_hex), } filter_params_formatter = apply_formatters_to_dict(FILTER_PARAMS_FORMATTERS) filter_result_formatter = apply_one_of_formatters(( (apply_formatter_to_array(log_entry_formatter), is_array_of_dicts), (apply_formatter_to_array(to_hexbytes(32)), is_array_of_strings), )) pythonic_middleware = construct_formatting_middleware( request_formatters={ # Eth 'eth_getBalance': apply_formatter_at_index(block_number_formatter, 1), 'eth_getBlockByNumber': apply_formatter_at_index(block_number_formatter, 0), 'eth_getBlockTransactionCountByNumber': apply_formatter_at_index( block_number_formatter, 0, ), 'eth_getCode': apply_formatter_at_index(block_number_formatter, 1), 'eth_getStorageAt': apply_formatter_at_index(block_number_formatter, 2), 'eth_getTransactionByBlockNumberAndIndex': compose( apply_formatter_at_index(block_number_formatter, 0), apply_formatter_at_index(integer_to_hex, 1),
compose(complement(bool), decode_hex), static_return(None), ), } def ethtestrpc_string_middleware(make_request, web3): def middleware(method, params): return force_obj_to_text(make_request(method, params)) return middleware ethtestrpc_middleware = construct_formatting_middleware( request_formatters={ 'eth_uninstallFilter': apply_formatter_at_index(to_integer_if_hex, 0), 'eth_getFilterChanges': apply_formatter_at_index(to_integer_if_hex, 0), 'eth_getFilterLogs': apply_formatter_at_index(to_integer_if_hex, 0), }, result_formatters={ # Eth 'eth_newFilter': apply_formatter_if(is_integer, hex), 'eth_protocolVersion': apply_formatter_if(is_integer, str), 'eth_getTransactionByHash': apply_formatters_to_dict(TRANSACTION_FORMATTERS), # Net 'net_version': apply_formatter_if(is_integer, str), },
filter_result_formatter = apply_one_of_formatters(( (apply_formatter_to_array(log_entry_formatter), is_array_of_dicts), (apply_formatter_to_array(to_hexbytes(32)), is_array_of_strings), )) TRANSACTION_PARAM_FORMATTERS = { 'chainId': apply_formatter_if(is_integer, str), } transaction_param_formatter = apply_formatters_to_dict(TRANSACTION_PARAM_FORMATTERS) pythonic_middleware = construct_formatting_middleware( request_formatters={ # Eth 'eth_getBalance': apply_formatter_at_index(block_number_formatter, 1), 'eth_getBlockByNumber': apply_formatter_at_index(block_number_formatter, 0), 'eth_getBlockTransactionCountByNumber': apply_formatter_at_index( block_number_formatter, 0, ), 'eth_getCode': apply_formatter_at_index(block_number_formatter, 1), 'eth_getStorageAt': apply_formatter_at_index(block_number_formatter, 2), 'eth_getTransactionByBlockNumberAndIndex': compose( apply_formatter_at_index(block_number_formatter, 0), apply_formatter_at_index(integer_to_hex, 1), ), 'eth_getTransactionCount': apply_formatter_at_index(block_number_formatter, 1), 'eth_getUncleCountByBlockNumber': apply_formatter_at_index(block_number_formatter, 0), 'eth_newFilter': apply_formatter_at_index(filter_params_formatter, 0), 'eth_getLogs': apply_formatter_at_index(filter_params_formatter, 0),
} filter_params_formatter = apply_formatters_to_dict(FILTER_PARAMS_FORMATTERS) filter_result_formatter = apply_one_of_formatters(( (apply_formatter_to_array(log_entry_formatter), is_array_of_dicts), (apply_formatter_to_array(to_ascii_if_bytes), is_array_of_strings), )) pythonic_middleware = construct_formatting_middleware( request_formatters={ # Eth 'eth_getBalance': apply_formatter_at_index(block_number_formatter, 1), 'eth_getBlockByNumber': apply_formatter_at_index(block_number_formatter, 0), 'eth_getBlockTransactionCountByNumber': apply_formatter_at_index( block_number_formatter, 0, ), 'eth_getCode': apply_formatter_at_index(block_number_formatter, 1), 'eth_getStorageAt': apply_formatter_at_index(block_number_formatter, 2), 'eth_getTransactionByBlockNumberAndIndex': compose( apply_formatter_at_index(block_number_formatter, 0), apply_formatter_at_index(integer_to_hex, 1), ), 'eth_getTransactionCount': apply_formatter_at_index(block_number_formatter, 1), 'eth_getUncleCountByBlockNumber': apply_formatter_at_index(block_number_formatter, 0), 'eth_newFilter': apply_formatter_at_index(filter_params_formatter, 0), 'eth_getLogs': apply_formatter_at_index(filter_params_formatter, 0),
from eth_utils import ( is_string, ) from web3.utils.formatters import ( apply_formatter_at_index, apply_formatter_if, apply_formatters_to_dict, ) from .formatting import ( construct_formatting_middleware, ) FILTER_PARAM_NORMALIZERS = apply_formatters_to_dict( {'address': apply_formatter_if(is_string, lambda x: [x])}) METHOD_NORMALIZERS = { 'eth_getLogs': apply_formatter_at_index(FILTER_PARAM_NORMALIZERS, 0), 'eth_newFilter': apply_formatter_at_index(FILTER_PARAM_NORMALIZERS, 0) } request_parameter_normalizer = construct_formatting_middleware( request_formatters=METHOD_NORMALIZERS, )
transaction_pool_inspect_formatter = apply_formatters_to_dict( TRANSACTION_POOL_INSPECT_FORMATTERS) FILTER_PARAMS_FORMATTERS = { 'fromBlock': apply_formatter_if(hex, is_integer), 'toBlock': apply_formatter_if(hex, is_integer), } filter_params_formatter = apply_formatters_to_dict(FILTER_PARAMS_FORMATTERS) pythonic_middleware = construct_formatting_middleware( request_formatters={ # Eth 'eth_call': apply_formatter_at_index(transaction_params_formatter, 0), 'eth_getBalance': apply_formatter_at_index(block_number_formatter, 1), 'eth_getBlockByNumber': apply_formatter_at_index(block_number_formatter, 0), 'eth_getBlockTransactionCountByNumber': apply_formatter_at_index( block_number_formatter, 1, ), 'eth_getBlockTransactionCountByHash': apply_formatter_at_index( block_number_formatter, 1, ), 'eth_getCode':
(apply_formatter_to_array(log_entry_formatter), is_array_of_dicts), (apply_formatter_to_array(to_ascii_if_bytes), is_array_of_strings), )) format_abi_parameters = map_abi_data([ abi_bytes_to_hex, abi_int_to_hex, abi_string_to_hex, ]) pythonic_middleware = construct_formatting_middleware( request_formatters={ # Eth 'eth_call': apply_formatter_at_index(transaction_params_formatter, 0), 'eth_getBalance': apply_formatter_at_index(block_number_formatter, 1), 'eth_getBlockByHash': format_abi_parameters(['bytes32', 'bool']), 'eth_getBlockByNumber': apply_formatter_at_index(block_number_formatter, 0), 'eth_getBlockTransactionCountByNumber': apply_formatter_at_index( block_number_formatter, 0, ), 'eth_getBlockTransactionCountByHash': format_abi_parameters(['bytes32']), 'eth_getCode': apply_formatter_at_index(block_number_formatter, 1), 'eth_getStorageAt': compose( apply_formatter_at_index(integer_to_hex, 1), apply_formatter_at_index(block_number_formatter, 2), ), 'eth_getTransactionByBlockNumberAndIndex': compose( apply_formatter_at_index(block_number_formatter, 0),
)) TRANSACTION_PARAM_FORMATTERS = { 'chainId': apply_formatter_if(is_integer, str), } transaction_param_formatter = compose( remove_key_if('to', lambda txn: txn['to'] in {'', b'', None}), apply_formatters_to_dict(TRANSACTION_PARAM_FORMATTERS), ) pythonic_middleware = construct_formatting_middleware( request_formatters={ # Eth 'eth_getBalance': apply_formatter_at_index(block_number_formatter, 1), 'eth_getBlockByNumber': apply_formatter_at_index(block_number_formatter, 0), 'eth_getBlockTransactionCountByNumber': apply_formatter_at_index( block_number_formatter, 0, ), 'eth_getCode': apply_formatter_at_index(block_number_formatter, 1), 'eth_getStorageAt': apply_formatter_at_index(block_number_formatter, 2), 'eth_getTransactionByBlockNumberAndIndex': compose( apply_formatter_at_index(block_number_formatter, 0), apply_formatter_at_index(integer_to_hex, 1),