@@ -46,7 +46,7 @@ def main():
4646 subparser_setup .add_argument ("--network" , choices = CONFIGURATIONS .keys (), required = True )
4747 subparser_setup .set_defaults (func = do_setup )
4848
49- # Remove this ~Supernova (necessary only for a short period of time).
49+ # Remove this after ~Supernova (necessary only for a short period of time).
5050 subparser_run = subparsers .add_parser ("run-for-relayed-v1-v2" )
5151 subparser_run .add_argument ("--network" , choices = CONFIGURATIONS .keys (), required = True )
5252 subparser_run .set_defaults (func = do_run_for_relayed_v1_v2 )
@@ -101,6 +101,7 @@ def do_setup(args: Any):
101101 print ("Setup done." )
102102
103103
104+ # Remove this after ~Supernova
104105def do_run_for_relayed_v1_v2 (args : Any ):
105106 print ("Phase [run_for_relayed_v1_v2] started..." )
106107
@@ -110,9 +111,55 @@ def do_run_for_relayed_v1_v2(args: Any):
110111 accounts = BunchOfAccounts (configuration , memento )
111112 controller = Controller (configuration , accounts , memento )
112113
113- # send relayed v1, v2.
114+ controller .send (controller .create_legacy_relayed_transfer_and_execute (
115+ relayer = accounts .get_user (shard = SOME_SHARD , index = 0 ),
116+ sender = accounts .get_user (shard = SOME_SHARD , index = 1 ),
117+ contract = accounts .get_contract_address ("dummy" , shard = SOME_SHARD , index = 0 ),
118+ function = "doSomething" ,
119+ arguments = [],
120+ gas_limit = 3_000_000 ,
121+ native_amount = 0 ,
122+ custom_amount = 0 ,
123+ relayed_version = 1
124+ ), await_processing_started = True )
125+
126+ controller .send (controller .create_legacy_relayed_transfer_and_execute (
127+ relayer = accounts .get_user (shard = SOME_SHARD , index = 0 ),
128+ sender = accounts .get_user (shard = SOME_SHARD , index = 1 ),
129+ contract = accounts .get_contract_address ("dummy" , shard = SOME_SHARD , index = 0 ),
130+ function = "doSomething" ,
131+ arguments = [],
132+ gas_limit = 3_000_000 ,
133+ native_amount = 0 ,
134+ custom_amount = 0 ,
135+ relayed_version = 2
136+ ), await_processing_started = True )
137+
114138 controller .wait_until_epoch (configuration .deactivation_epoch_relayed_v1v2 )
115- # send relayed v1, v2 (again)
139+
140+ controller .send (controller .create_legacy_relayed_transfer_and_execute (
141+ relayer = accounts .get_user (shard = SOME_SHARD , index = 0 ),
142+ sender = accounts .get_user (shard = SOME_SHARD , index = 1 ),
143+ contract = accounts .get_contract_address ("dummy" , shard = SOME_SHARD , index = 0 ),
144+ function = "doSomething" ,
145+ arguments = [],
146+ gas_limit = 3_000_000 ,
147+ native_amount = 0 ,
148+ custom_amount = 0 ,
149+ relayed_version = 1
150+ ), await_processing_started = True )
151+
152+ controller .send (controller .create_legacy_relayed_transfer_and_execute (
153+ relayer = accounts .get_user (shard = SOME_SHARD , index = 0 ),
154+ sender = accounts .get_user (shard = SOME_SHARD , index = 1 ),
155+ contract = accounts .get_contract_address ("dummy" , shard = SOME_SHARD , index = 0 ),
156+ function = "doSomething" ,
157+ arguments = [],
158+ gas_limit = 3_000_000 ,
159+ native_amount = 0 ,
160+ custom_amount = 0 ,
161+ relayed_version = 2
162+ ), await_processing_started = True )
116163
117164
118165def do_run (args : Any ):
@@ -2007,6 +2054,71 @@ def create_relayed_transfer_and_execute(self, relayer: "Account", sender: "Accou
20072054
20082055 return transaction
20092056
2057+ # Remove this after ~Supernova
2058+ def create_legacy_relayed_transfer_and_execute (self , relayer : "Account" , sender : "Account" , contract : Address , function : str , arguments : list [Any ], gas_limit : int , native_amount : int , custom_amount : int , relayed_version : int ) -> Transaction :
2059+ token_transfers : List [TokenTransfer ] = []
2060+
2061+ if custom_amount :
2062+ custom_currency = self .memento .get_custom_currencies ()[0 ]
2063+ token_transfers = [TokenTransfer (Token (custom_currency ), custom_amount )]
2064+
2065+ if relayed_version == 1 :
2066+ # Relayer nonce is reserved before sender nonce, to ensure good ordering (if sender and relayer are the same account).
2067+ relayer_nonce = self ._reserve_nonce (relayer )
2068+
2069+ inner_transaction = self .contracts_transactions_factory .create_transaction_for_execute (
2070+ sender = sender .address ,
2071+ contract = contract ,
2072+ function = function ,
2073+ gas_limit = gas_limit ,
2074+ arguments = arguments ,
2075+ native_transfer_amount = native_amount ,
2076+ token_transfers = token_transfers
2077+ )
2078+
2079+ self .apply_nonce (inner_transaction )
2080+ self .sign (inner_transaction )
2081+
2082+ transaction = self .relayed_transactions_factory .create_relayed_v1_transaction (
2083+ inner_transaction = inner_transaction ,
2084+ relayer_address = relayer .address ,
2085+ )
2086+
2087+ transaction .nonce = relayer_nonce
2088+ self .sign (transaction )
2089+
2090+ return transaction
2091+
2092+ if relayed_version == 2 :
2093+ # Relayer nonce is reserved before sender nonce, to ensure good ordering (if sender and relayer are the same account).
2094+ relayer_nonce = self ._reserve_nonce (relayer )
2095+
2096+ inner_transaction = self .contracts_transactions_factory .create_transaction_for_execute (
2097+ sender = sender .address ,
2098+ contract = contract ,
2099+ function = function ,
2100+ gas_limit = 0 ,
2101+ arguments = arguments ,
2102+ native_transfer_amount = native_amount ,
2103+ token_transfers = token_transfers
2104+ )
2105+
2106+ self .apply_nonce (inner_transaction )
2107+ self .sign (inner_transaction )
2108+
2109+ transaction = self .relayed_transactions_factory .create_relayed_v2_transaction (
2110+ inner_transaction = inner_transaction ,
2111+ inner_transaction_gas_limit = gas_limit ,
2112+ relayer_address = relayer .address ,
2113+ )
2114+
2115+ transaction .nonce = relayer_nonce
2116+ self .sign (transaction )
2117+
2118+ return transaction
2119+
2120+ raise ValueError (f"Unsupported legacy relayed version: { relayed_version } " )
2121+
20102122 def apply_nonce (self , transaction : Transaction ):
20112123 sender = self .accounts .get_account_by_bech32 (transaction .sender .to_bech32 ())
20122124 transaction .nonce = self .nonces_tracker .get_then_increment_nonce (sender .address )
0 commit comments