Skip to content

Commit 8170e25

Browse files
committed
Merge branch 'master' into demo-boilerplates
2 parents 3e03642 + 922360e commit 8170e25

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+688
-21
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/Indexer/Tests/ChainIndexerTests.cs

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,14 @@
55
using System.Threading.Tasks;
66
using NUnit.Framework;
77
using Sequence;
8+
using Sequence.Contracts;
9+
using Sequence.EmbeddedWallet;
10+
using Sequence.EmbeddedWallet.Tests;
811
using Sequence.Utils;
912
using UnityEngine;
1013
using UnityEngine.TestTools;
14+
using EOAWallet = Sequence.Wallet.EOAWallet;
15+
using Transaction = System.Transactions.Transaction;
1116

1217
namespace Sequence.Indexer.Tests
1318
{
@@ -299,5 +304,217 @@ public async Task TestRequestDecodingErrorHandling(bool logError)
299304

300305
Assert.IsTrue(errorEventFired);
301306
}
307+
308+
[TestCase]
309+
public void TestSubscribeReceipts()
310+
{
311+
var indexer = new ChainIndexer(Chain.TestnetArbitrumSepolia);
312+
var streamOptions = new WebRPCStreamOptions<SubscribeReceiptsReturn>(
313+
OnSubscribeReceiptsMessageReceived,
314+
OnWebRPCErrorReceived);
315+
316+
var filter = new TransactionFilter
317+
{
318+
contractAddress = "0x4ab3b16e9d3328f6d8025e71cefc64305ae4fe9c"
319+
};
320+
321+
indexer.SubscribeReceipts(new SubscribeReceiptsArgs(filter), streamOptions);
322+
}
323+
324+
[Test]
325+
public async Task TestReceiptSubscriptionReceived()
326+
{
327+
Chain chain = Chain.ArbitrumNova;
328+
bool receiptReceived = false;
329+
IIndexer indexer = new ChainIndexer(chain);
330+
ERC1155 universallyMintable = new ERC1155("0x0ee3af1874789245467e7482f042ced9c5171073");
331+
var streamOptions = new WebRPCStreamOptions<SubscribeReceiptsReturn>(
332+
(@return =>
333+
{
334+
Assert.IsNotNull(@return);
335+
Assert.IsNotNull(@return.receipt);
336+
receiptReceived = true;
337+
}),
338+
OnWebRPCErrorReceived);
339+
340+
341+
var filter = new TransactionFilter()
342+
{
343+
contractAddress = universallyMintable.Contract.GetAddress()
344+
};
345+
indexer.SubscribeReceipts(new SubscribeReceiptsArgs(filter), streamOptions);
346+
347+
await DoMintTransaction(chain);
348+
349+
while (!receiptReceived)
350+
{
351+
await Task.Yield();
352+
}
353+
}
354+
355+
private async Task DoMintTransaction(Chain chain)
356+
{
357+
var tcs = new TaskCompletionSource<bool>();
358+
EndToEndTestHarness testHarness = new EndToEndTestHarness();
359+
EOAWallet toWallet = new EOAWallet();
360+
string toAddress = toWallet.GetAddress().Value;
361+
362+
testHarness.Login(async wallet =>
363+
{
364+
try
365+
{
366+
ERC1155 erc1155 = new ERC1155("0x0ee3af1874789245467e7482f042ced9c5171073");
367+
368+
TransactionReturn transactionReturn = await wallet.SendTransaction(chain,
369+
new EmbeddedWallet.Transaction[]
370+
{
371+
new RawTransaction(erc1155.Mint(toAddress, 1, 1)),
372+
});
373+
Assert.IsNotNull(transactionReturn);
374+
Assert.IsTrue(transactionReturn is SuccessfulTransactionReturn);
375+
376+
tcs.TrySetResult(true);
377+
}
378+
catch (System.Exception e)
379+
{
380+
tcs.TrySetException(e);
381+
}
382+
}, (error, method, email, methods) =>
383+
{
384+
tcs.TrySetException(new Exception(error));
385+
});
386+
387+
await tcs.Task;
388+
}
389+
390+
[TestCase]
391+
public void TestSubscribeEvents()
392+
{
393+
var indexer = new ChainIndexer(Chain.TestnetArbitrumSepolia);
394+
var streamOptions = new WebRPCStreamOptions<SubscribeEventsReturn>(
395+
OnSubscribeEventsMessageReceived,
396+
OnWebRPCErrorReceived);
397+
398+
var eventFilter = new EventFilter
399+
{
400+
accounts = Array.Empty<string>(),
401+
contractAddresses = new[] {"0x4ab3b16e9d3328f6d8025e71cefc64305ae4fe9c"},
402+
tokenIDs = new[] {"0"},
403+
events = new[] {"Transfer(address from, address to, uint256 value)"}
404+
};
405+
406+
indexer.SubscribeEvents(new SubscribeEventsArgs(eventFilter), streamOptions);
407+
}
408+
409+
[Test]
410+
public async Task TestEventSubscriptionReceived()
411+
{
412+
Chain chain = Chain.ArbitrumNova;
413+
bool eventReceived = false;
414+
IIndexer indexer = new ChainIndexer(chain);
415+
ERC1155 universallyMintable = new ERC1155("0x0ee3af1874789245467e7482f042ced9c5171073");
416+
var streamOptions = new WebRPCStreamOptions<SubscribeEventsReturn>(
417+
(@return =>
418+
{
419+
Assert.IsNotNull(@return);
420+
Assert.IsNotNull(@return.log);
421+
Assert.AreEqual(universallyMintable.Contract.GetAddress().Value, @return.log.contractAddress);
422+
eventReceived = true;
423+
}),
424+
OnWebRPCErrorReceived);
425+
426+
427+
var eventFilter = new EventFilter
428+
{
429+
accounts = Array.Empty<string>(),
430+
contractAddresses = new[] {universallyMintable.Contract.GetAddress().Value},
431+
tokenIDs = new[] {"1"},
432+
events = new[] {"TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)"}
433+
};
434+
435+
indexer.SubscribeEvents(new SubscribeEventsArgs(eventFilter), streamOptions);
436+
437+
await DoMintTransaction(chain);
438+
439+
while (!eventReceived)
440+
{
441+
await Task.Yield();
442+
}
443+
}
444+
445+
[TestCase]
446+
public void TestSubscribeBalanceUpdates()
447+
{
448+
var indexer = new ChainIndexer(Chain.TestnetArbitrumSepolia);
449+
var streamOptions = new WebRPCStreamOptions<SubscribeBalanceUpdatesReturn>(
450+
OnSubscribeEventsMessageReceived,
451+
OnWebRPCErrorReceived);
452+
453+
var contractAddress = "0x4ab3b16e9d3328f6d8025e71cefc64305ae4fe9c";
454+
indexer.SubscribeBalanceUpdates(new SubscribeBalanceUpdatesArgs(contractAddress), streamOptions);
455+
}
456+
457+
[Test]
458+
public async Task TestBalanceUpdateSubscriptionReceived()
459+
{
460+
Chain chain = Chain.ArbitrumNova;
461+
bool eventReceived = false;
462+
IIndexer indexer = new ChainIndexer(chain);
463+
var streamOptions = new WebRPCStreamOptions<SubscribeBalanceUpdatesReturn>(
464+
(@return =>
465+
{
466+
Assert.IsNotNull(@return);
467+
Assert.IsNotNull(@return.balance);
468+
if (!@return.balance.accountAddress.IsZeroAddress())
469+
{
470+
Assert.AreEqual(BigInteger.One, @return.balance.balance);
471+
}
472+
eventReceived = true;
473+
}),
474+
OnWebRPCErrorReceived);
475+
476+
ERC1155 universallyMintable = new ERC1155("0x0ee3af1874789245467e7482f042ced9c5171073");
477+
478+
indexer.SubscribeBalanceUpdates(new SubscribeBalanceUpdatesArgs(universallyMintable.Contract.GetAddress()), streamOptions);
479+
480+
await DoMintTransaction(chain);
481+
482+
while (!eventReceived)
483+
{
484+
await Task.Yield();
485+
}
486+
}
487+
488+
[TestCase]
489+
public void TestAbortStreams()
490+
{
491+
new ChainIndexer(Chain.TestnetArbitrumSepolia).AbortStreams();
492+
}
493+
494+
[TearDown]
495+
public void UnsubscribeFromEvents()
496+
{
497+
new ChainIndexer(Chain.ArbitrumNova).AbortStreams();
498+
}
499+
500+
private void OnSubscribeReceiptsMessageReceived(SubscribeReceiptsReturn @event)
501+
{
502+
Debug.Log($"Receipt Event Received - hash: {@event.receipt.txnHash}");
503+
}
504+
505+
private void OnSubscribeEventsMessageReceived(SubscribeEventsReturn @event)
506+
{
507+
Debug.Log($"Contract Event Received - {@event.log.type} {@event.log.contractType}: {@event.log.txnHash}");
508+
}
509+
510+
private void OnSubscribeEventsMessageReceived(SubscribeBalanceUpdatesReturn @event)
511+
{
512+
Debug.Log($"Balance Update Received - {@event.balance.accountAddress} owns {@event.balance.balance}");
513+
}
514+
515+
private void OnWebRPCErrorReceived(WebRPCError error)
516+
{
517+
Debug.LogError($"OnWebRPCErrorReceived: {error.msg}");
518+
}
302519
}
303520
}

Assets/SequenceSDK/Indexer/Tests/MockHttpHandler.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,15 @@ public Task<string> HttpPost(string chainID, string endPoint, object args, int r
2626
}
2727
return Task.FromResult(_response);
2828
}
29+
30+
public void HttpStream<T>(string chainID, string endPoint, object args, WebRPCStreamOptions<T> options, int retries = 0)
31+
{
32+
throw new NotImplementedException();
33+
}
34+
35+
public void AbortStreams()
36+
{
37+
throw new NotImplementedException();
38+
}
2939
}
3040
}

Assets/SequenceSDK/Indexer/Tests/SequenceIndexerTests.asmdef

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
"GUID:0acc523941302664db1f4e527237feb3",
88
"GUID:a35e3a53d4439435f8b36ed2c6158cd8",
99
"GUID:b4f9c0f8f363f439b9e337f79050f189",
10-
"GUID:403077141e1554429a890cbc129df651"
10+
"GUID:403077141e1554429a890cbc129df651",
11+
"GUID:040286810a82b46ed9acd6d70bfbbfd4",
12+
"SequenceEmbeddedWallet",
13+
"SequenceAuthentication"
1114
],
1215
"includePlatforms": [
1316
"Editor"

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/SequenceFrontend/ScriptableObjects/NetworkIcons.asset

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ MonoBehaviour:
5959
Value: {fileID: 21300000, guid: fca1fb969526641ab92a7dadb3373992, type: 3}
6060
- Key: 1284
6161
Value: {fileID: 21300000, guid: 487a52377dc99420699217f27a3f7940, type: 3}
62+
- Key: 42793
63+
Value: {fileID: 21300000, guid: f555d6588bf384a80b090c446349e04e, type: 3}
64+
- Key: 273
65+
Value: {fileID: 21300000, guid: 3fd037e980ef344a698dc0f47ad1b695, type: 3}
6266
- Key: 11155111
6367
Value: {fileID: 21300000, guid: 3e21b6696eaaa46b1b176b8b5e6254a3, type: 3}
6468
- Key: 80002
@@ -105,3 +109,5 @@ MonoBehaviour:
105109
Value: {fileID: 21300000, guid: fca1fb969526641ab92a7dadb3373992, type: 3}
106110
- Key: 1287
107111
Value: {fileID: 21300000, guid: 67e27505fbd0e4afe8ed08544b5e232d, type: 3}
112+
- Key: 128123
113+
Value: {fileID: 21300000, guid: f555d6588bf384a80b090c446349e04e, type: 3}

Packages/Sequence-Unity/Sequence/SequenceFrontend/Scripts/UI/SequenceSampleUI.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
using Sequence.Authentication;
2-
using Sequence.Boilerplates.DailyRewards;
3-
using Sequence.Boilerplates.InGameShop;
4-
using Sequence.Boilerplates.Inventory;
5-
using Sequence.Boilerplates.Login;
6-
using Sequence.Boilerplates.PlayerProfile;
7-
using Sequence.Config;
1+
using System;
82
using Sequence.EmbeddedWallet;
93
using Sequence.Utils.SecureStorage;
104
using UnityEngine;

0 commit comments

Comments
 (0)