diff --git a/Assets/SequenceSDK/Ethereum/Tests/ABIRegexTests.cs b/Assets/SequenceSDK/Ethereum/Tests/ABIRegexTests.cs index a461b4d3d..4359e0be7 100644 --- a/Assets/SequenceSDK/Ethereum/Tests/ABIRegexTests.cs +++ b/Assets/SequenceSDK/Ethereum/Tests/ABIRegexTests.cs @@ -36,6 +36,15 @@ public void TestMatchesFunctionName(string input, bool expected) [TestCase("functionName(a[],a)", true)] [TestCase("functionName(a[5],a)", true)] [TestCase("functionName(a[][],a)", true)] + [TestCase("functionName((a[5],a))", true)] + [TestCase("functionName((a[][],a),int)", true)] + [TestCase("functionName((a[][],a),int)", true)] + [TestCase("functionName((a[][],a,int)", false)] + [TestCase("functionName((a[][),a,int)", false)] + [TestCase("functionName((a[][]),a,int)", true)] + [TestCase("functionName(a[][],(a,int))", true)] + [TestCase("functionName(a[][],a,int))", false)] + [TestCase("functionName(a[][],(a,int),string,(uint,int,a,bytes[5][]))", true)] public void TestMatchesFunctionABI(string input, bool expected) { bool result = ABIRegex.MatchesFunctionABI(input); diff --git a/Assets/SequenceSDK/WaaS/Tests/WalletInteractionsTests.cs b/Assets/SequenceSDK/WaaS/Tests/WalletInteractionsTests.cs index aed8db23d..6a2fddbd6 100644 --- a/Assets/SequenceSDK/WaaS/Tests/WalletInteractionsTests.cs +++ b/Assets/SequenceSDK/WaaS/Tests/WalletInteractionsTests.cs @@ -9,6 +9,7 @@ using Sequence.Authentication; using Sequence.Contracts; using Sequence.Ethereum.Tests; +using Sequence.Provider; using Sequence.Utils; using Sequence.Wallet; @@ -553,5 +554,68 @@ public async Task TestInteractingWithContractFunctionsInSnakeCase_DelayedServerS await tcs.Task; } + + [Test] + public async Task TestInteractWithTupleContract() + { + var tcs = new TaskCompletionSource(); + EndToEndTestHarness testHarness = new EndToEndTestHarness(); + Contract contract = new Contract("0x88e57238a23e2619fd42f479d546560b44c698fe"); + IEthClient client = new SequenceEthClient(Chain.ArbitrumNova); + + Address someAddress = new Address("0x8f408550720b268b0ea0969c527ac997d969a638"); + Address anotherAddress = new Address("0x38104f7bb130756dcdd24d804e3e2d2e9df25d7d"); + byte[] data = "Something".ToByteArray(); + int integer = 3; + string first = "firstWord"; + string second = "secondWord"; + int number = 7; + + testHarness.Login(async wallet => + { + try + { + TransactionReturn transactionReturn = await wallet.SendTransaction(_chain, + new Transaction[] + { + new SequenceContractCall(contract.GetAddress(), + new AbiData("testTuple((address,string),(string,address,bytes,uint),int)", new object[] + { + (someAddress, first), + (second, anotherAddress, data, integer.ToString()), + number.ToString() + })) + }); + Assert.IsNotNull(transactionReturn); + Assert.IsTrue(transactionReturn is SuccessfulTransactionReturn); + + Address storedAddress = await contract.QueryContract
("getStoredAddress").Invoke(client); + Assert.AreEqual(someAddress, storedAddress); + Address storedAddress2 = await contract.QueryContract
("getStoredAddress2").Invoke(client); + Assert.AreEqual(anotherAddress, storedAddress2); + byte[] storedBytes = await contract.QueryContract("getStoredBytes").Invoke(client); + Assert.AreEqual(data, storedBytes); + int storedInt = await contract.QueryContract("getStoredInt").Invoke(client); + Assert.AreEqual(integer, storedInt); + string storedString = await contract.QueryContract("getStoredString").Invoke(client); + Assert.AreEqual(first, storedString); + string storedString2 = await contract.QueryContract("getStoredString2").Invoke(client); + Assert.AreEqual(second, storedString2); + uint storedUint = await contract.QueryContract("getStoredUint").Invoke(client); + Assert.AreEqual(number, storedUint); + + tcs.TrySetResult(true); + } + catch (System.Exception e) + { + tcs.TrySetException(e); + } + }, (error, method, email, methods) => + { + tcs.TrySetException(new Exception(error)); + }); + + await tcs.Task; + } } } diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Ethereum/Contract/ABIRegex.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Ethereum/Contract/ABIRegex.cs index 0cfbcdf00..657d4e525 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Ethereum/Contract/ABIRegex.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Ethereum/Contract/ABIRegex.cs @@ -4,7 +4,7 @@ public static class ABIRegex { public const string FunctionNameRegex = @"^[A-Z|a-z|_,-|0-9]+$"; - public const string FunctionABIRegex = @"^[A-Z|a-z|_,-|0-9]+\(([A-Za-z0-9\[\]]+(, *[A-Za-z0-9\[\]]+)*)?\)$"; + public const string FunctionABIRegex = @"^[A-Za-z_][A-Za-z0-9_-]*\((([A-Za-z0-9]+(?:\[\d*\])*|\((?:[A-Za-z0-9]+(?:\[\d*\])*(?:,\s*)?)*\))(?:,\s*([A-Za-z0-9]+(?:\[\d*\])*|\((?:[A-Za-z0-9]+(?:\[\d*\])*(?:,\s*)?)*\)))*)?\)$"; public static bool MatchesFunctionName(string input) { diff --git a/Packages/Sequence-Unity/package.json b/Packages/Sequence-Unity/package.json index 1f18690d3..6c2b1312a 100644 --- a/Packages/Sequence-Unity/package.json +++ b/Packages/Sequence-Unity/package.json @@ -1,6 +1,6 @@ { "name": "xyz.0xsequence.waas-unity", - "version": "3.19.0", + "version": "3.19.1", "displayName": "Sequence Embedded Wallet SDK", "description": "A Unity SDK for the Sequence WaaS API", "unity": "2021.3",