コード例 #1
0
ファイル: tester.py プロジェクト: pipermerriam/web3.py

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)),
コード例 #2
0
ファイル: middleware.py プロジェクト: thewillxu/web3.py
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,
    },
)
コード例 #3
0
ファイル: middleware.py プロジェクト: Harmouch101/web3.py
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,
    },
)
コード例 #4
0
    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)),
コード例 #5
0
ファイル: middleware.py プロジェクト: syngraph/web3.py
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,
    },
)
コード例 #6
0
    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),
    })
コード例 #7
0
ファイル: middleware.py プロジェクト: fubuloubu/web3.py
    # 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
コード例 #8
0
            "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),
    })