Skip to content

Commit de6c0b0

Browse files
Tests for legacy relayed (before deactivation, after deactivation).
1 parent 96b5b6c commit de6c0b0

File tree

2 files changed

+116
-4
lines changed

2 files changed

+116
-4
lines changed

systemtests/generate_testdata_on_network.py

Lines changed: 115 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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
104105
def 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

118165
def 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)

systemtests/localnet.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[general]
22
log_level = "*:DEBUG"
33
genesis_delay_seconds = 10
4-
rounds_per_epoch = 50
4+
rounds_per_epoch = 70
55
round_duration_milliseconds = 6000
66

77
[metashard]

0 commit comments

Comments
 (0)