Skip to content

Commit 5c3fe05

Browse files
Additional tests for relayed V3.
1 parent ec09e15 commit 5c3fe05

File tree

1 file changed

+176
-3
lines changed

1 file changed

+176
-3
lines changed

systemtests/generate_testdata_on_network.py

Lines changed: 176 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
UserSigner)
2020
from multiversx_sdk.abi import (AddressValue, BigUIntValue, BytesValue,
2121
I32Value, I64Value, Serializer, StringValue,
22-
U32Value)
22+
TokenIdentifierValue, U32Value)
2323
from multiversx_sdk.core.address import get_shard_of_pubkey
2424

2525
from systemtests.config import CONFIGURATIONS, Configuration
@@ -96,6 +96,10 @@ def do_run(args: Any):
9696

9797
controller.wait_until_epoch(configuration.activation_epoch_relayed_v3)
9898

99+
do_run_relayed_builtin_functions(memento, accounts, controller)
100+
# TODO: integrate "do_run_relayed_builtin_functions" into main flow.
101+
return
102+
99103
print("## Intra-shard, simple MoveBalance with refund")
100104
controller.send(controller.create_transfer(
101105
sender=accounts.get_user(shard=SOME_SHARD, index=0),
@@ -876,6 +880,162 @@ def do_run(args: Any):
876880
memento.replace_run_transactions(controller.transactions_hashes_accumulator)
877881

878882

883+
def do_run_relayed_builtin_functions(memento: "Memento", accounts: "BunchOfAccounts", controller: "Controller"):
884+
named_accounts = {
885+
"sponsor": accounts.sponsor,
886+
"a": accounts.get_user(shard=0, index=0),
887+
"b": accounts.get_user(shard=0, index=1),
888+
"c": accounts.get_user(shard=0, index=2),
889+
"m": accounts.get_user(shard=1, index=0),
890+
"n": accounts.get_user(shard=1, index=1),
891+
"p": accounts.get_user(shard=1, index=2),
892+
}
893+
894+
named_contracts = {
895+
# Owned by "a".
896+
"x": accounts.get_contract_address("dummy", shard=0, index=0),
897+
# Ownership transferred to "a".
898+
"y": accounts.get_contract_address("dummy", shard=1, index=0),
899+
}
900+
901+
custom_token = Token(memento.get_custom_currencies()[0])
902+
903+
# Ownership transferred to "a".
904+
controller.do_change_contract_owner(contract=named_contracts["y"], new_owner=named_accounts["a"])
905+
906+
# BuiltInFunctionClaimDeveloperRewards
907+
908+
for (sender, contract, relayer) in [("a", "x", "a"), ("a", "x", "b"), ("a", "y", "a"), ("a", "y", "b")]:
909+
print(f"## BuiltInFunctionClaimDeveloperRewards, sender={sender}, contract={contract}, relayer={relayer}")
910+
911+
controller.send(controller.create_transfer_and_execute(
912+
sender=named_accounts[sender],
913+
contract=named_contracts[contract],
914+
function="ClaimDeveloperRewards",
915+
arguments=[],
916+
gas_limit=6_000_000,
917+
native_amount=0,
918+
custom_amount=0,
919+
relayer=named_accounts[relayer],
920+
), await_processing_started=True)
921+
922+
# BuiltInFunctionChangeOwnerAddress
923+
924+
for (sender, contract, relayer) in [("a", "x", "b"), ("a", "x", "a"), ("a", "y", "b"), ("a", "y", "a")]:
925+
print(f"## BuiltInFunctionChangeOwnerAddress, sender={sender}, contract={contract}, relayer={relayer}")
926+
927+
controller.send(controller.create_transfer_and_execute(
928+
sender=named_accounts[sender],
929+
contract=named_contracts[contract],
930+
function="ChangeOwnerAddress",
931+
# Keep "a" as the owner.
932+
arguments=[AddressValue.new_from_address(named_accounts["a"].address)],
933+
gas_limit=6_000_000,
934+
native_amount=0,
935+
custom_amount=0,
936+
relayer=named_accounts[relayer],
937+
), await_processing_started=True)
938+
939+
# BuiltInFunctionSetUserName
940+
941+
for (sender, relayer) in [("a", "a"), ("a", "b")]:
942+
print(f"## BuiltInFunctionSetUserName, sender={sender}, relayer={relayer}")
943+
944+
controller.send(controller.create_transfer_and_execute(
945+
sender=named_accounts[sender],
946+
contract=Address.new_from_bech32("erd1qqqqqqqqqqqqqpgqx4ca3eu4k6w63hl8pjjyq2cp7ul7a4ukqz0skq6fxj"),
947+
function="SetUserName",
948+
arguments=[StringValue("test.elrond")],
949+
gas_limit=6_000_000,
950+
native_amount=0,
951+
custom_amount=0,
952+
relayer=named_accounts[relayer],
953+
), await_processing_started=True)
954+
955+
# BuiltInFunctionSaveKeyValue
956+
957+
for (sender, relayer) in [("a", "a"), ("b", "b")]:
958+
print(f"## BuiltInFunctionSaveKeyValue, sender={sender}, relayer={relayer}")
959+
960+
controller.send(controller.create_transfer_and_execute(
961+
sender=named_accounts[sender],
962+
contract=named_accounts[sender].address,
963+
function="SaveKeyValue",
964+
arguments=[StringValue("test"), StringValue("test")],
965+
gas_limit=1_000_000,
966+
native_amount=0,
967+
custom_amount=0,
968+
relayer=named_accounts[relayer],
969+
), await_processing_started=True)
970+
971+
# BuiltInFunctionESDTTransfer
972+
973+
for (sender, receiver, relayer) in [
974+
("a", "b", "c"), ("a", "a", "c"), ("a", "b", "b"), ("a", "a", "a"),
975+
("a", "m", "c"), ("a", "m", "a")
976+
]:
977+
print(f"## BuiltInFunctionESDTTransfer, sender={sender}, receiver={receiver}, relayer={relayer}")
978+
979+
controller.send(controller.create_transfer(
980+
sender=named_accounts[sender],
981+
receiver=named_accounts[receiver].address,
982+
native_amount=0,
983+
custom_amount=43,
984+
additional_gas_limit=0,
985+
relayer=named_accounts[relayer],
986+
), await_completion=True)
987+
988+
# BuiltInFunctionESDTBurn / BuiltInFunctionESDTLocalBurn
989+
990+
for (sender, relayer) in [("a", "b"), ("a", "a")]:
991+
print(f"## BuiltInFunctionESDTBurn, sender={sender}, relayer={relayer}")
992+
993+
controller.send(controller.create_transfer_and_execute(
994+
sender=named_accounts[sender],
995+
contract=named_accounts[sender].address,
996+
function="ESDTLocalBurn",
997+
arguments=[TokenIdentifierValue(custom_token.identifier), U32Value(1)],
998+
gas_limit=300_000,
999+
native_amount=0,
1000+
custom_amount=0,
1001+
relayer=named_accounts[relayer],
1002+
), await_processing_started=True)
1003+
1004+
# BuiltInFunctionESDTFreeze
1005+
1006+
for (sender, relayer) in [("sponsor", "b"), ("sponsor", "a")]:
1007+
print(f"## BuiltInFunctionESDTFreeze, sender={sender}, relayer={relayer}")
1008+
1009+
controller.send(controller.create_transfer_and_execute(
1010+
sender=named_accounts[sender],
1011+
contract=Address.new_from_bech32("erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u"),
1012+
function="freeze",
1013+
# Freeze token for "a".
1014+
arguments=[TokenIdentifierValue(custom_token.identifier), AddressValue.new_from_address(named_accounts["a"].address)],
1015+
gas_limit=70_000_000,
1016+
native_amount=0,
1017+
custom_amount=0,
1018+
relayer=named_accounts[relayer],
1019+
), await_completion=True)
1020+
1021+
# BuiltInFunctionESDTUnFreeze
1022+
1023+
for (sender, relayer) in [("sponsor", "b"), ("sponsor", "a")]:
1024+
print(f"## BuiltInFunctionESDTUnFreeze, sender={sender}, relayer={relayer}")
1025+
1026+
controller.send(controller.create_transfer_and_execute(
1027+
sender=named_accounts[sender],
1028+
contract=Address.new_from_bech32("erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u"),
1029+
function="unFreeze",
1030+
# UnFreeze token for "a".
1031+
arguments=[TokenIdentifierValue(custom_token.identifier), AddressValue.new_from_address(named_accounts["a"].address)],
1032+
gas_limit=70_000_000,
1033+
native_amount=0,
1034+
custom_amount=0,
1035+
relayer=named_accounts[relayer],
1036+
), await_completion=True)
1037+
1038+
8791039
class BunchOfAccounts:
8801040
def __init__(self, configuration: Configuration, memento: "Memento") -> None:
8811041
self.configuration = configuration
@@ -1270,7 +1430,7 @@ def create_arbitrary_transaction(self, sender: "Account", receiver: Address, val
12701430

12711431
return transaction
12721432

1273-
def create_transfer(self, sender: "Account", receiver: Address, native_amount: int, custom_amount: int, additional_gas_limit: int = 0) -> Transaction:
1433+
def create_transfer(self, sender: "Account", receiver: Address, native_amount: int, custom_amount: int, additional_gas_limit: int = 0, relayer: Optional["Account"] = None) -> Transaction:
12741434
token_transfers: List[TokenTransfer] = []
12751435

12761436
if custom_amount:
@@ -1286,12 +1446,19 @@ def create_transfer(self, sender: "Account", receiver: Address, native_amount: i
12861446

12871447
transaction.gas_limit += additional_gas_limit
12881448

1449+
if relayer is not None:
1450+
transaction.relayer = relayer.address
1451+
transaction.gas_limit += ADDITIONAL_GAS_LIMIT_FOR_RELAYED_V3
1452+
12891453
self.apply_nonce(transaction)
12901454
self.sign(transaction)
12911455

1456+
if relayer is not None:
1457+
self.sign_as_relayer_v3(transaction)
1458+
12921459
return transaction
12931460

1294-
def create_transfer_and_execute(self, sender: "Account", contract: Address, function: str, arguments: list[Any], gas_limit: int, native_amount: int, custom_amount: int) -> Transaction:
1461+
def create_transfer_and_execute(self, sender: "Account", contract: Address, function: str, arguments: list[Any], gas_limit: int, native_amount: int, custom_amount: int, relayer: Optional["Account"] = None) -> Transaction:
12951462
token_transfers: List[TokenTransfer] = []
12961463

12971464
if custom_amount:
@@ -1308,9 +1475,15 @@ def create_transfer_and_execute(self, sender: "Account", contract: Address, func
13081475
token_transfers=token_transfers
13091476
)
13101477

1478+
if relayer is not None:
1479+
transaction.relayer = relayer.address
1480+
13111481
self.apply_nonce(transaction)
13121482
self.sign(transaction)
13131483

1484+
if relayer is not None:
1485+
self.sign_as_relayer_v3(transaction)
1486+
13141487
return transaction
13151488

13161489
def create_contract_deployment(self, sender: "Account", bytecode: Path, arguments: list[Any], gas_limit: int, amount: int) -> Transaction:

0 commit comments

Comments
 (0)