diff --git a/ethereum/tests/test_contracts.py b/ethereum/tests/test_contracts.py index 6d652603b..27581c076 100644 --- a/ethereum/tests/test_contracts.py +++ b/ethereum/tests/test_contracts.py @@ -1685,6 +1685,61 @@ def test_prefix_types_in_functions(): assert c.sqrdiv(25, 2) == 156 +origin_child_code = \ + ''' +def sender(): + return (msg.sender:address) + +def origin(): + return (tx.origin:address) + +def senderisorigin(): + return (msg.sender == tx.origin:bool) +''' + +filename_origin_child = "origin_qwertyuioplkjhgfdsa.se" + +origin_code = \ + ''' +extern child.serpent: [origin:[]:int256, sender:[]:int256, senderisorigin:[]:int256] + +x = create("%s") + +def sender(): + return (msg.sender:address) + +def origin(): + return (tx.origin:address) + +def senderisorigin(): + return (msg.sender == tx.origin:bool) + +def childsender(): + return (x.sender():address) + +def childorigin(): + return (x.origin():address) + +def childsenderisorigin(): + return (x.senderisorigin():bool) +''' % filename_origin_child + + +def test_origin(): + s = tester.state() + open(filename_origin_child, 'w').write(origin_child_code) + c = s.abi_contract(origin_code, language='serpent') + + try: + assert c.sender() == utils.encode_hex(tester.a0) + assert c.origin() == utils.encode_hex(tester.a0) + assert c.senderisorigin() == True + + assert c.childsender() == utils.encode_hex(c.address) + assert c.childorigin() == utils.encode_hex(tester.a0) + assert c.childsenderisorigin() == False + finally: + os.remove(filename_origin_child) # test_evm = None # test_sixten = None @@ -1736,3 +1791,4 @@ def test_prefix_types_in_functions(): # test_string_logging = None # test_params_contract = None # test_prefix_types_in_functions = None +# test_origin = None diff --git a/ethereum/tests/test_solidity.py b/ethereum/tests/test_solidity.py index bddf4ad8c..39d52fbec 100644 --- a/ethereum/tests/test_solidity.py +++ b/ethereum/tests/test_solidity.py @@ -269,3 +269,55 @@ def test_abi_contract(): assert contract.seven() == 7 assert contract.mul2(2) == 4 assert contract.mul2(-2) == -4 + + +def test_origin(): + code = """ +contract testme { + function sender() returns (address) { + return msg.sender; + } + + function origin() returns (address) { + return tx.origin; + } + + function senderisorigin() returns (bool) { + return msg.sender == tx.origin; + } +} + +contract testmechild is testme { +} + +contract testmeparent is testme { + testmechild child; + + function testmeparent() { + child = new testmechild(); + } + + function childsender() returns(address) { + return child.sender(); + } + + function childorigin() returns(address) { + return child.origin(); + } + + function childsenderisorigin() returns(bool) { + return child.senderisorigin(); + } +} + """ + + state = tester.state() + c = state.abi_contract(code, language='solidity') + + assert c.sender() == utils.encode_hex(tester.a0) + assert c.origin() == utils.encode_hex(tester.a0) + assert c.senderisorigin() == True + + assert c.childsender() == utils.encode_hex(c.address) + assert c.childorigin() == utils.encode_hex(tester.a0) + assert c.childsenderisorigin() == False