Exemplo n.º 1
0
def test_eth_call(rpc_client, accounts):
    txn_hash = rpc_client(
        method="eth_sendTransaction",
        params=[{
            "from": accounts[0],
            "data": CONTRACT_BIN,
            "value": 1234,
        }],
    )
    txn_receipt = rpc_client(
        method="eth_getTransactionReceipt",
        params=[txn_hash],
    )
    contract_address = txn_receipt['contractAddress']

    assert contract_address

    function_sig = encode_data(sha3("return13()")[:4])

    should_be_13 = rpc_client(
        method="eth_call",
        params=[{
            "from": accounts[0],
            "to": contract_address,
            "data": function_sig,
        }],
    )

    result = big_endian_to_int(decode_hex(should_be_13[2:]))
    assert result == 13
Exemplo n.º 2
0
def test_eth_call(rpc_client, accounts):
    txn_hash = rpc_client(
        method="eth_sendTransaction",
        params=[{
            "from": accounts[0],
            "data": CONTRACT_BIN,
            "value": 1234,
        }],
    )
    txn_receipt = rpc_client(
        method="eth_getTransactionReceipt",
        params=[txn_hash],
    )
    contract_address = txn_receipt['contractAddress']

    assert contract_address

    function_sig = encode_data(sha3("return13()")[:4])

    should_be_13 = rpc_client(
        method="eth_call",
        params=[{
            "from": accounts[0],
            "to": contract_address,
            "data": function_sig,
        }],
    )

    result = big_endian_to_int(decode_hex(should_be_13[2:]))
    assert result == 13
Exemplo n.º 3
0
def normalize_number(value):
    if is_numeric(value):
        return value
    elif is_string(value):
        if value.startswith(b'0x'):
            return int(value, 16)
        else:
            return big_endian_to_int(value)
    else:
        raise ValueError("Unknown numeric encoding: {0}".format(value))
Exemplo n.º 4
0
def normalize_number(value):
    if is_numeric(value):
        return value
    elif is_string(value):
        if value.startswith(b'0x'):
            return int(value, 16)
        else:
            return big_endian_to_int(value)
    else:
        raise ValueError("Unknown numeric encoding: {0}".format(value))
Exemplo n.º 5
0
def runTest(contract, optimize, verbose=False):
    client = EthTesterClient()
    client.reset_evm()
    a0 = sorted(client.get_accounts())[0]
    try:
        bin = list(compile_source(contract,
                                  optimize=optimize).values())[0]['bin']
    except SolcError as e:
        if "Compiler error: Stack too deep" in str(e):
            return ("STACK TOO DEEP", None, None)
        if "Internal compiler error during compilation" in str(e):
            print(contract)
            print("INTERNAL COMPILER ERROR WITH optimize =", optimize)
            print(e)
            assert False
        if verbose:
            print(e)
        return ("COMPILATION FAILED", None, None)
    try:
        txnHash = client.send_transaction(_from=a0, data=bytes(bin), value=0)
    except TransactionFailed as e:
        if verbose:
            print(e)
        return ("SEND CONTRACT TRANSACTION FAILED", bytes(bin), None)
    txnReceipt = client.get_transaction_receipt(txnHash)
    contractAddress = txnReceipt['contractAddress']

    origBalances = {}

    for a in client.get_accounts():
        origBalances[a] = client.get_balance(a)

    sendVal = 9999999

    fsig = encode_data(sha3("f()")[:4])
    try:
        val = client.call(_from=a0,
                          to=contractAddress,
                          data=fsig,
                          value=sendVal)
    except TransactionFailed as e:
        balances = {}
        for a in client.get_accounts():
            balances[a] = client.get_balance(a) - origBalances[a]
        if verbose:
            print("CALL FAILURE:")
            print(e)
        return ("CALL FAILED", bytes(bin), balances)
    balances = {}
    for a in client.get_accounts():
        balances[a] = client.get_balance(a) - origBalances[a]
    if verbose:
        print(balances)
    return (big_endian_to_int(decode_hex(val)), bytes(bin), balances)
def test_eth_call(client, accounts):
    txn_hash = client.send_transaction(
        _from=accounts[0],
        data=CONTRACT_BIN,
        value=1234,
    )
    txn_receipt = client.get_transaction_receipt(txn_hash)
    contract_address = txn_receipt['contractAddress']

    assert contract_address

    function_sig = encode_data(sha3("return13()")[:4])

    should_be_13 = client.call(
        _from=accounts[0],
        to=contract_address,
        data=function_sig,
    )

    result = big_endian_to_int(decode_hex(should_be_13[2:]))
    assert result == 13
Exemplo n.º 7
0
 def abi_signature(self):
     """
     Compute the bytes4 signature for the object.
     """
     return big_endian_to_int(sha3(str_to_bytes(self.signature))[:4])