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) ethtestrpc_exception_middleware = construct_exception_handler_middleware( method_handlers={ 'eth_getBlockByHash': (ValueError, static_result(None)),
ethereum_tester_middleware = construct_formatting_middleware( request_formatters={ # Eth 'eth_getBlockByNumber': apply_formatters_to_args( apply_formatter_if(to_integer_if_hex, is_not_named_block), ), 'eth_getFilterChanges': apply_formatters_to_args(hex_to_integer), 'eth_getFilterLogs': apply_formatters_to_args(hex_to_integer), 'eth_getBlockTransactionCountByNumber': apply_formatters_to_args( apply_formatter_if(to_integer_if_hex, is_not_named_block), ), 'eth_getUncleCountByBlockNumber': apply_formatters_to_args( apply_formatter_if(to_integer_if_hex, is_not_named_block), ), 'eth_getTransactionByBlockHashAndIndex': apply_formatters_to_args( identity, to_integer_if_hex, ), 'eth_getTransactionByBlockNumberAndIndex': apply_formatters_to_args( apply_formatter_if(to_integer_if_hex, is_not_named_block), to_integer_if_hex, ), 'eth_getUncleByBlockNumberAndIndex': apply_formatters_to_args( apply_formatter_if(to_integer_if_hex, is_not_named_block), to_integer_if_hex, ), 'eth_sendTransaction': apply_formatters_to_args( transaction_params_formatter, ), 'eth_estimateGas': apply_formatters_to_args( transaction_params_formatter, ), 'eth_call': apply_formatters_to_args( transaction_params_formatter, ), 'eth_uninstallFilter': apply_formatters_to_args(hex_to_integer), # Personal 'personal_sendTransaction': apply_formatters_to_args( compose(transaction_params_remapper, transaction_params_formatter), identity, ), }, result_formatters={ 'eth_getBlockByHash': apply_formatter_if( block_key_remapper, is_dict, ), 'eth_getBlockByNumber': apply_formatter_if( block_key_remapper, is_dict, ), 'eth_getBlockTransactionCountByHash': apply_formatter_if( transaction_key_remapper, is_dict, ), 'eth_getBlockTransactionCountByNumber': apply_formatter_if( transaction_key_remapper, is_dict, ), 'eth_getTransactionByHash': apply_formatter_if( compose(transaction_key_remapper, transaction_formatter), is_dict, ), 'eth_getTransactionReceipt': apply_formatter_if(receipt_key_remapper, is_dict), 'eth_newFilter': integer_to_hex, 'eth_newBlockFilter': integer_to_hex, 'eth_newPendingTransactionFilter': integer_to_hex, }, )
ethereum_tester_middleware = construct_formatting_middleware( request_formatters={ # Eth RPCEndpoint('eth_getBlockByNumber'): apply_formatters_to_args( apply_formatter_if(is_not_named_block, to_integer_if_hex), ), RPCEndpoint('eth_getFilterChanges'): apply_formatters_to_args(hex_to_integer), RPCEndpoint('eth_getFilterLogs'): apply_formatters_to_args(hex_to_integer), RPCEndpoint('eth_getBlockTransactionCountByNumber'): apply_formatters_to_args( apply_formatter_if(is_not_named_block, to_integer_if_hex), ), RPCEndpoint('eth_getUncleCountByBlockNumber'): apply_formatters_to_args( apply_formatter_if(is_not_named_block, to_integer_if_hex), ), RPCEndpoint('eth_getTransactionByBlockHashAndIndex'): apply_formatters_to_args( identity, to_integer_if_hex, ), RPCEndpoint('eth_getTransactionByBlockNumberAndIndex'): apply_formatters_to_args( apply_formatter_if(is_not_named_block, to_integer_if_hex), to_integer_if_hex, ), RPCEndpoint('eth_getUncleByBlockNumberAndIndex'): apply_formatters_to_args( apply_formatter_if(is_not_named_block, to_integer_if_hex), to_integer_if_hex, ), RPCEndpoint('eth_newFilter'): apply_formatters_to_args( filter_request_transformer, ), RPCEndpoint('eth_getLogs'): apply_formatters_to_args( filter_request_transformer, ), RPCEndpoint('eth_sendTransaction'): apply_formatters_to_args( transaction_request_transformer, ), RPCEndpoint('eth_estimateGas'): apply_formatters_to_args( transaction_request_transformer, ), RPCEndpoint('eth_call'): apply_formatters_to_args( transaction_request_transformer, apply_formatter_if(is_not_named_block, to_integer_if_hex), ), RPCEndpoint('eth_uninstallFilter'): apply_formatters_to_args(hex_to_integer), RPCEndpoint('eth_getCode'): 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 RPCEndpoint('personal_sendTransaction'): apply_formatters_to_args( transaction_request_transformer, identity, ), }, result_formatters={ RPCEndpoint('eth_getBlockByHash'): apply_formatter_if( is_dict, block_result_remapper, ), RPCEndpoint('eth_getBlockByNumber'): apply_formatter_if( is_dict, block_result_remapper, ), RPCEndpoint('eth_getBlockTransactionCountByHash'): apply_formatter_if( is_dict, transaction_result_remapper, ), RPCEndpoint('eth_getBlockTransactionCountByNumber'): apply_formatter_if( is_dict, transaction_result_remapper, ), RPCEndpoint('eth_getTransactionByHash'): apply_formatter_if( is_dict, compose(transaction_result_remapper, transaction_result_formatter), ), RPCEndpoint('eth_getTransactionReceipt'): apply_formatter_if( is_dict, compose(receipt_result_remapper, receipt_result_formatter), ), RPCEndpoint('eth_newFilter'): integer_to_hex, RPCEndpoint('eth_newBlockFilter'): integer_to_hex, RPCEndpoint('eth_newPendingTransactionFilter'): integer_to_hex, RPCEndpoint('eth_getLogs'): apply_formatter_if( is_array_of_dicts, apply_formatter_to_array(log_result_remapper), ), RPCEndpoint('eth_getFilterChanges'): apply_formatter_if( is_array_of_dicts, apply_formatter_to_array(log_result_remapper), ), RPCEndpoint('eth_getFilterLogs'): apply_formatter_if( is_array_of_dicts, apply_formatter_to_array(log_result_remapper), ), # EVM RPCEndpoint('evm_snapshot'): integer_to_hex, }, )
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) ethtestrpc_exception_middleware = construct_exception_handler_middleware( method_handlers={ 'eth_getBlockByHash': (ValueError, static_result(None)),
ethereum_tester_middleware = construct_formatting_middleware( request_formatters={ # Eth 'eth_getBlockByNumber': apply_formatters_to_args( apply_formatter_if(is_not_named_block, to_integer_if_hex), ), 'eth_getFilterChanges': apply_formatters_to_args(hex_to_integer), 'eth_getFilterLogs': apply_formatters_to_args(hex_to_integer), 'eth_getBlockTransactionCountByNumber': apply_formatters_to_args( apply_formatter_if(is_not_named_block, to_integer_if_hex), ), 'eth_getUncleCountByBlockNumber': apply_formatters_to_args( apply_formatter_if(is_not_named_block, to_integer_if_hex), ), 'eth_getTransactionByBlockHashAndIndex': apply_formatters_to_args( identity, to_integer_if_hex, ), 'eth_getTransactionByBlockNumberAndIndex': apply_formatters_to_args( apply_formatter_if(is_not_named_block, to_integer_if_hex), to_integer_if_hex, ), 'eth_getUncleByBlockNumberAndIndex': apply_formatters_to_args( apply_formatter_if(is_not_named_block, to_integer_if_hex), to_integer_if_hex, ), 'eth_newFilter': apply_formatters_to_args( filter_params_transformer, ), 'eth_getLogs': apply_formatters_to_args( filter_params_transformer, ), 'eth_sendTransaction': apply_formatters_to_args( transaction_params_transformer, ), 'eth_estimateGas': apply_formatters_to_args( transaction_params_transformer, ), 'eth_call': apply_formatters_to_args( transaction_params_transformer, ), 'eth_uninstallFilter': apply_formatters_to_args(hex_to_integer), # EVM 'evm_revert': apply_formatters_to_args(hex_to_integer), # Personal 'personal_sendTransaction': apply_formatters_to_args( transaction_params_transformer, identity, ), }, result_formatters={ 'eth_getBlockByHash': apply_formatter_if( is_dict, block_key_remapper, ), 'eth_getBlockByNumber': apply_formatter_if( is_dict, block_key_remapper, ), 'eth_getBlockTransactionCountByHash': apply_formatter_if( is_dict, transaction_key_remapper, ), 'eth_getBlockTransactionCountByNumber': apply_formatter_if( is_dict, transaction_key_remapper, ), 'eth_getTransactionByHash': apply_formatter_if( is_dict, compose(transaction_key_remapper, transaction_formatter), ), 'eth_getTransactionReceipt': apply_formatter_if( is_dict, compose(receipt_key_remapper, receipt_formatter), ), 'eth_newFilter': integer_to_hex, 'eth_newBlockFilter': integer_to_hex, 'eth_newPendingTransactionFilter': integer_to_hex, 'eth_getLogs': apply_formatter_if( is_array_of_dicts, apply_formatter_to_array(log_key_remapper), ), 'eth_getFilterChanges': apply_formatter_if( is_array_of_dicts, apply_formatter_to_array(log_key_remapper), ), 'eth_getFilterLogs': apply_formatter_if( is_array_of_dicts, apply_formatter_to_array(log_key_remapper), ), # EVM 'evm_snapshot': integer_to_hex, }, )
block_normalizers = { **BLOCK_NORMALIZERS, **{ "sealFields": identity, "author": encode_hex, "signature": encode_hex, "step": str, }, } @classmethod def normalize_outbound_block(cls, block): return normalize_dict(block, cls.block_normalizers) def fix_web3_keys(block): return AttributeDict({ **block, "receiptsRoot": HexBytes(block["receipts_root"]), "logsBloom": block["logs_bloom"], }) key_renaming_middleware = construct_formatting_middleware( result_formatters={ "eth_getBlockByHash": apply_formatter_if(is_dict, fix_web3_keys), "eth_getBlockByNumber": apply_formatter_if(is_dict, fix_web3_keys), })
# EVM RPCEndpoint('evm_snapshot'): integer_to_hex, } async def async_ethereum_tester_middleware(make_request, web3: "Web3" # type: ignore ) -> Middleware: middleware = await async_construct_formatting_middleware( request_formatters=request_formatters, result_formatters=result_formatters ) return await middleware(make_request, web3) ethereum_tester_middleware = construct_formatting_middleware( request_formatters=request_formatters, result_formatters=result_formatters ) def guess_from(w3: "Web3", _: TxParams) -> ChecksumAddress: coinbase = w3.eth.coinbase if coinbase is not None: return coinbase try: return w3.eth.accounts[0] except KeyError: # no accounts available to pre-fill, carry on pass return None
"signature": encode_hex, "step": str, }, } @classmethod def normalize_outbound_block(cls, block): return normalize_dict(block, cls.block_normalizers) def fix_web3_keys(block): return AttributeDict({ **block, "receiptsRoot": HexBytes(block["receipts_root"]), "logsBloom": block["logs_bloom"], }) key_renaming_middleware = construct_formatting_middleware( # Mypy expects the string to have type RPCEndpoint, which cannot be found result_formatters={ "eth_getBlockByHash": functools.partial( # type: ignore apply_formatter_if, is_dict, fix_web3_keys), "eth_getBlockByNumber": functools.partial( # type: ignore apply_formatter_if, is_dict, fix_web3_keys), })