Skip to content

Commit 5fcaa7d

Browse files
authored
Merge pull request #249 from 0xsequence/Fix/functionRegex
Fix function regex to allow tuples. Add test to confirm we can use tu…
2 parents eba6ac0 + d771797 commit 5fcaa7d

File tree

4 files changed

+75
-2
lines changed

4 files changed

+75
-2
lines changed

Assets/SequenceSDK/Ethereum/Tests/ABIRegexTests.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,15 @@ public void TestMatchesFunctionName(string input, bool expected)
3636
[TestCase("functionName(a[],a)", true)]
3737
[TestCase("functionName(a[5],a)", true)]
3838
[TestCase("functionName(a[][],a)", true)]
39+
[TestCase("functionName((a[5],a))", true)]
40+
[TestCase("functionName((a[][],a),int)", true)]
41+
[TestCase("functionName((a[][],a),int)", true)]
42+
[TestCase("functionName((a[][],a,int)", false)]
43+
[TestCase("functionName((a[][),a,int)", false)]
44+
[TestCase("functionName((a[][]),a,int)", true)]
45+
[TestCase("functionName(a[][],(a,int))", true)]
46+
[TestCase("functionName(a[][],a,int))", false)]
47+
[TestCase("functionName(a[][],(a,int),string,(uint,int,a,bytes[5][]))", true)]
3948
public void TestMatchesFunctionABI(string input, bool expected)
4049
{
4150
bool result = ABIRegex.MatchesFunctionABI(input);

Assets/SequenceSDK/WaaS/Tests/WalletInteractionsTests.cs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Sequence.Authentication;
1010
using Sequence.Contracts;
1111
using Sequence.Ethereum.Tests;
12+
using Sequence.Provider;
1213
using Sequence.Utils;
1314
using Sequence.Wallet;
1415

@@ -553,5 +554,68 @@ public async Task TestInteractingWithContractFunctionsInSnakeCase_DelayedServerS
553554

554555
await tcs.Task;
555556
}
557+
558+
[Test]
559+
public async Task TestInteractWithTupleContract()
560+
{
561+
var tcs = new TaskCompletionSource<bool>();
562+
EndToEndTestHarness testHarness = new EndToEndTestHarness();
563+
Contract contract = new Contract("0x88e57238a23e2619fd42f479d546560b44c698fe");
564+
IEthClient client = new SequenceEthClient(Chain.ArbitrumNova);
565+
566+
Address someAddress = new Address("0x8f408550720b268b0ea0969c527ac997d969a638");
567+
Address anotherAddress = new Address("0x38104f7bb130756dcdd24d804e3e2d2e9df25d7d");
568+
byte[] data = "Something".ToByteArray();
569+
int integer = 3;
570+
string first = "firstWord";
571+
string second = "secondWord";
572+
int number = 7;
573+
574+
testHarness.Login(async wallet =>
575+
{
576+
try
577+
{
578+
TransactionReturn transactionReturn = await wallet.SendTransaction(_chain,
579+
new Transaction[]
580+
{
581+
new SequenceContractCall(contract.GetAddress(),
582+
new AbiData("testTuple((address,string),(string,address,bytes,uint),int)", new object[]
583+
{
584+
(someAddress, first),
585+
(second, anotherAddress, data, integer.ToString()),
586+
number.ToString()
587+
}))
588+
});
589+
Assert.IsNotNull(transactionReturn);
590+
Assert.IsTrue(transactionReturn is SuccessfulTransactionReturn);
591+
592+
Address storedAddress = await contract.QueryContract<Address>("getStoredAddress").Invoke(client);
593+
Assert.AreEqual(someAddress, storedAddress);
594+
Address storedAddress2 = await contract.QueryContract<Address>("getStoredAddress2").Invoke(client);
595+
Assert.AreEqual(anotherAddress, storedAddress2);
596+
byte[] storedBytes = await contract.QueryContract<byte[]>("getStoredBytes").Invoke(client);
597+
Assert.AreEqual(data, storedBytes);
598+
int storedInt = await contract.QueryContract<int>("getStoredInt").Invoke(client);
599+
Assert.AreEqual(integer, storedInt);
600+
string storedString = await contract.QueryContract<string>("getStoredString").Invoke(client);
601+
Assert.AreEqual(first, storedString);
602+
string storedString2 = await contract.QueryContract<string>("getStoredString2").Invoke(client);
603+
Assert.AreEqual(second, storedString2);
604+
uint storedUint = await contract.QueryContract<uint>("getStoredUint").Invoke(client);
605+
Assert.AreEqual(number, storedUint);
606+
607+
tcs.TrySetResult(true);
608+
}
609+
catch (System.Exception e)
610+
{
611+
tcs.TrySetException(e);
612+
}
613+
}, (error, method, email, methods) =>
614+
{
615+
tcs.TrySetException(new Exception(error));
616+
});
617+
618+
await tcs.Task;
619+
}
556620
}
557621
}

Packages/Sequence-Unity/Sequence/SequenceSDK/Ethereum/Contract/ABIRegex.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ public static class ABIRegex
44
{
55

66
public const string FunctionNameRegex = @"^[A-Z|a-z|_,-|0-9]+$";
7-
public const string FunctionABIRegex = @"^[A-Z|a-z|_,-|0-9]+\(([A-Za-z0-9\[\]]+(, *[A-Za-z0-9\[\]]+)*)?\)$";
7+
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*)?)*\)))*)?\)$";
88

99
public static bool MatchesFunctionName(string input)
1010
{

Packages/Sequence-Unity/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "xyz.0xsequence.waas-unity",
3-
"version": "3.19.0",
3+
"version": "3.19.1",
44
"displayName": "Sequence Embedded Wallet SDK",
55
"description": "A Unity SDK for the Sequence WaaS API",
66
"unity": "2021.3",

0 commit comments

Comments
 (0)