def test_multiple_levels(w3, get_contract_with_gas_estimation): inner_code = """ @external def returnten() -> int128: return 10 """ c = get_contract_with_gas_estimation(inner_code) outer_code = """ @external def create_and_call_returnten(inp: address) -> int128: x: address = create_forwarder_to(inp) o: int128 = extract32(raw_call(x, convert("\xd0\x1f\xb1\xb8", Bytes[4]), max_outsize=32, gas=50000), 0, output_type=int128) # noqa: E501 return o @external def create_and_return_forwarder(inp: address) -> address: x: address = create_forwarder_to(inp) return x """ c2 = get_contract_with_gas_estimation(outer_code) assert c2.create_and_call_returnten(c.address) == 10 c2.create_and_call_returnten(c.address, transact={}) _, preamble, callcode = get_create_forwarder_to_bytecode() c3 = c2.create_and_return_forwarder(c.address, call={}) c2.create_and_return_forwarder(c.address, transact={}) c3_contract_code = w3.toBytes(w3.eth.getCode(c3)) assert c3_contract_code[:10] == HexBytes(preamble) assert c3_contract_code[-15:] == HexBytes(callcode) print("Passed forwarder test")
def test_multiple_levels(w3, get_contract_with_gas_estimation): inner_code = """ @public def returnten() -> int128: return 10 """ c = get_contract_with_gas_estimation(inner_code) outer_code = """ @public def create_and_call_returnten(inp: address) -> int128: x: address = create_forwarder_to(inp) o: int128 = extract32(raw_call(x, convert("\xd0\x1f\xb1\xb8", bytes[4]), max_outsize=32, gas=50000), 0, type=int128) # noqa: E501 return o @public def create_and_return_forwarder(inp: address) -> address: x: address = create_forwarder_to(inp) return x """ c2 = get_contract_with_gas_estimation(outer_code) assert c2.create_and_call_returnten(c.address) == 10 c2.create_and_call_returnten(c.address, transact={}) expected_forwarder_code_mask = get_create_forwarder_to_bytecode()[12:] c3 = c2.create_and_return_forwarder(c.address, call={}) c2.create_and_return_forwarder(c.address, transact={}) c3_contract_code = w3.toBytes(w3.eth.getCode(c3)) assert c3_contract_code[:14] == expected_forwarder_code_mask[:14] assert c3_contract_code[35:] == expected_forwarder_code_mask[35:] print('Passed forwarder test')