@@ -56,3 +56,46 @@ def __default__():
5656 assert receiver .last_sender () == sender .address
5757 assert w3 .eth .get_balance (sender .address ) == 0
5858 assert w3 .eth .get_balance (receiver .address ) == 1
59+
60+ def test_gas_kwarg (get_contract , w3 ):
61+ """
62+ Tests to verify that send to default function will send limited gas (2300),
63+ but raw_call can send more.
64+ """
65+
66+ sender_code = """
67+ @external
68+ def test_send(receiver: address):
69+ send(receiver, 1, gas=50000)
70+
71+ @external
72+ def test_call(receiver: address):
73+ raw_call(receiver, b"", gas=50000, max_outsize=0, value=1)
74+ """
75+
76+ # default function writes variable, this requires more gas than send can pass
77+ receiver_code = """
78+ last_sender: public(address)
79+
80+ @external
81+ @payable
82+ def __default__():
83+ self.last_sender = msg.sender
84+ """
85+
86+ sender = get_contract (sender_code , value = 1 )
87+ receiver = get_contract (receiver_code )
88+
89+ sender .test_send (receiver .address , transact = {"gas" : 100000 })
90+
91+ # no value transfer hapenned, variable was not changed
92+ assert receiver .last_sender () == sender .address
93+ assert w3 .eth .get_balance (sender .address ) == 0
94+ assert w3 .eth .get_balance (receiver .address ) == 1
95+
96+ sender .test_call (receiver .address , transact = {"gas" : 100000 })
97+
98+ # value transfer hapenned, variable was changed
99+ assert receiver .last_sender () == sender .address
100+ assert w3 .eth .get_balance (sender .address ) == 0
101+ assert w3 .eth .get_balance (receiver .address ) == 1
0 commit comments