From 38d20d989a0941c478096848f15690eb99d6b228 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andy=20Gr=C3=BCning?= Date: Thu, 19 Jun 2025 21:54:14 +0200 Subject: [PATCH 1/5] started adding quickstart assembly --- .../Authentication/Tests/MockLogin.cs | 2 +- .../Tests/MockLoginCustomEventTiming.cs | 2 +- Assets/SequenceSDK/Quickstart.meta | 3 + Assets/SequenceSDK/Quickstart/Tests.meta | 3 + .../Quickstart/Tests/QuickstartTests.cs | 41 ++++ .../Quickstart/Tests/QuickstartTests.cs.meta | 3 + .../Tests/SequenceQuickstartTests.asmdef | 18 ++ .../Tests/SequenceQuickstartTests.asmdef.meta | 7 + .../SequenceSDK/Authentication/ILogin.cs | 2 +- .../EmbeddedWallet/SequenceLogin.cs | 4 +- .../Sequence/SequenceSDK/Quickstart.meta | 3 + .../Quickstart/SequenceQuickstart.asmdef | 24 +++ .../Quickstart/SequenceQuickstart.asmdef.meta | 7 + .../Quickstart/SequenceQuickstart.cs | 188 ++++++++++++++++++ .../Quickstart/SequenceQuickstart.cs.meta | 3 + 15 files changed, 305 insertions(+), 5 deletions(-) create mode 100644 Assets/SequenceSDK/Quickstart.meta create mode 100644 Assets/SequenceSDK/Quickstart/Tests.meta create mode 100644 Assets/SequenceSDK/Quickstart/Tests/QuickstartTests.cs create mode 100644 Assets/SequenceSDK/Quickstart/Tests/QuickstartTests.cs.meta create mode 100644 Assets/SequenceSDK/Quickstart/Tests/SequenceQuickstartTests.asmdef create mode 100644 Assets/SequenceSDK/Quickstart/Tests/SequenceQuickstartTests.asmdef.meta create mode 100644 Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart.meta create mode 100644 Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.asmdef create mode 100644 Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.asmdef.meta create mode 100644 Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs create mode 100644 Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs.meta diff --git a/Assets/SequenceSDK/Authentication/Tests/MockLogin.cs b/Assets/SequenceSDK/Authentication/Tests/MockLogin.cs index d6d49c9a3..0af1e5914 100644 --- a/Assets/SequenceSDK/Authentication/Tests/MockLogin.cs +++ b/Assets/SequenceSDK/Authentication/Tests/MockLogin.cs @@ -91,7 +91,7 @@ public void TryToRestoreSession() } - public void GuestLogin() + public Task GuestLogin() { throw new System.NotImplementedException(); } diff --git a/Assets/SequenceSDK/Authentication/Tests/MockLoginCustomEventTiming.cs b/Assets/SequenceSDK/Authentication/Tests/MockLoginCustomEventTiming.cs index 717b38dc3..2a6cd6895 100644 --- a/Assets/SequenceSDK/Authentication/Tests/MockLoginCustomEventTiming.cs +++ b/Assets/SequenceSDK/Authentication/Tests/MockLoginCustomEventTiming.cs @@ -80,7 +80,7 @@ public void TryToRestoreSession() } - public void GuestLogin() + public Task GuestLogin() { throw new System.NotImplementedException(); } diff --git a/Assets/SequenceSDK/Quickstart.meta b/Assets/SequenceSDK/Quickstart.meta new file mode 100644 index 000000000..74ff581c9 --- /dev/null +++ b/Assets/SequenceSDK/Quickstart.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c80db533ce3049719d92ba7d1b9a6fe6 +timeCreated: 1750361202 \ No newline at end of file diff --git a/Assets/SequenceSDK/Quickstart/Tests.meta b/Assets/SequenceSDK/Quickstart/Tests.meta new file mode 100644 index 000000000..3f6ad50c2 --- /dev/null +++ b/Assets/SequenceSDK/Quickstart/Tests.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c7fe56b63fed4a80a6017040e7404806 +timeCreated: 1750361210 \ No newline at end of file diff --git a/Assets/SequenceSDK/Quickstart/Tests/QuickstartTests.cs b/Assets/SequenceSDK/Quickstart/Tests/QuickstartTests.cs new file mode 100644 index 000000000..408a66f36 --- /dev/null +++ b/Assets/SequenceSDK/Quickstart/Tests/QuickstartTests.cs @@ -0,0 +1,41 @@ +using System; +using System.Threading.Tasks; +using NUnit.Framework; +using Sequence.Quickstart; + +namespace Sequence.Pay.Tests.Transak +{ + public class QuickstartTests + { + private const string TokenId = "0"; + + private static readonly Address TokenAddress = new (""); + private static readonly Address CurrencyAddress = new (""); + private static readonly Address SellCurrencyAddress = new (""); + private static readonly Address RecipientAddress = new (""); + + [Test] + public async Task QuickstartEndToEndTest() + { + var quickstart = new SequenceQuickstart(Chain.TestnetArbitrumSepolia); + + var recovered = await quickstart.TryRecoverWalletFromStorage(); + if (!recovered) + await quickstart.GuestLogin(); + + await quickstart.GetIdToken(); + + var nativeTokenBalance= await quickstart.GetMyNativeTokenBalance(); + var tokenBalance = await quickstart.GetMyTokenBalance(TokenAddress); + + await quickstart.SendToken(TokenAddress, RecipientAddress, TokenId, 1); + await quickstart.SwapToken(SellCurrencyAddress, CurrencyAddress, 1000); + + await quickstart.CreateListingOnMarketplace(TokenAddress, CurrencyAddress, TokenId, + 1, 1000, DateTime.MaxValue); + + var listings = await quickstart.GetAllListingsFromMarketplace(TokenAddress); + await quickstart.BuyTokenFromMarketplace(listings[0].order, 1); + } + } +} \ No newline at end of file diff --git a/Assets/SequenceSDK/Quickstart/Tests/QuickstartTests.cs.meta b/Assets/SequenceSDK/Quickstart/Tests/QuickstartTests.cs.meta new file mode 100644 index 000000000..ae9034cf3 --- /dev/null +++ b/Assets/SequenceSDK/Quickstart/Tests/QuickstartTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1be23cc916d046b69e5b0c2e9c905be7 +timeCreated: 1750361251 \ No newline at end of file diff --git a/Assets/SequenceSDK/Quickstart/Tests/SequenceQuickstartTests.asmdef b/Assets/SequenceSDK/Quickstart/Tests/SequenceQuickstartTests.asmdef new file mode 100644 index 000000000..8a3fd90bd --- /dev/null +++ b/Assets/SequenceSDK/Quickstart/Tests/SequenceQuickstartTests.asmdef @@ -0,0 +1,18 @@ +{ + "name": "SequenceQuickstartTests", + "rootNamespace": "", + "references": ["GUID:03d0ed9c50cfd4cb28a56d2d06580ffa","GUID:f7fd4ba36aabd1d499450c174865e70b","GUID:19b9eb7db56cc47349571a4fbb0dd677","GUID:403077141e1554429a890cbc129df651"], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/SequenceSDK/Quickstart/Tests/SequenceQuickstartTests.asmdef.meta b/Assets/SequenceSDK/Quickstart/Tests/SequenceQuickstartTests.asmdef.meta new file mode 100644 index 000000000..875fd8229 --- /dev/null +++ b/Assets/SequenceSDK/Quickstart/Tests/SequenceQuickstartTests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 10f7025d30db4b42b66b8d746923d16f +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Authentication/ILogin.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Authentication/ILogin.cs index 927ab6cee..2763f4c30 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Authentication/ILogin.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Authentication/ILogin.cs @@ -95,7 +95,7 @@ public interface ILogin /// /// Login as a guest /// - public void GuestLogin(); + public Task GuestLogin(); /// /// Login with PlayFab diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EmbeddedWallet/SequenceLogin.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EmbeddedWallet/SequenceLogin.cs index f68b4a2a1..ebff2f4a1 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EmbeddedWallet/SequenceLogin.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EmbeddedWallet/SequenceLogin.cs @@ -229,9 +229,9 @@ public void TryToRestoreSession() TryToLoginWithStoredSessionWallet(); } - public void GuestLogin() + public async Task GuestLogin() { - ConnectToWaaSAsGuest(); + await ConnectToWaaSAsGuest(); } private void SetupAuthenticatorAndListeners() diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart.meta new file mode 100644 index 000000000..784342f5a --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2fbda8d3e94840b497881679b1ee831b +timeCreated: 1750351968 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.asmdef b/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.asmdef new file mode 100644 index 000000000..e57faebfa --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.asmdef @@ -0,0 +1,24 @@ +{ + "name": "SequenceQuickstart", + "rootNamespace": "Sequence.Quickstart", + "references": [ + "GUID:a35e3a53d4439435f8b36ed2c6158cd8", + "GUID:4e0a798abbda240658187632ae443a67", + "GUID:f7fd4ba36aabd1d499450c174865e70b", + "GUID:b4f9c0f8f363f439b9e337f79050f189", + "GUID:f78a27d6a73d94c4baf04337e0add4dc", + "GUID:403077141e1554429a890cbc129df651", + "GUID:19b9eb7db56cc47349571a4fbb0dd677", + "GUID:a67bc3d548bec4971b914c7b64c9e959", + "GUID:94b67778c44684afdab21990eebf60aa" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.asmdef.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.asmdef.meta new file mode 100644 index 000000000..566183831 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 03d0ed9c50cfd4cb28a56d2d06580ffa +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs new file mode 100644 index 000000000..c130747f5 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs @@ -0,0 +1,188 @@ +using System; +using System.Numerics; +using System.Threading.Tasks; +using NUnit.Framework; +using Sequence.EmbeddedWallet; +using Sequence.Marketplace; + +namespace Sequence.Quickstart +{ + public class SequenceQuickstart + { + private IWallet _wallet; + public IWallet Wallet + { + get + { + Assert.IsNotNull(Wallet, "Please sign in first. For example, call 'new SequenceQuickstart().GuestLogin();'"); + return _wallet; + } + set => _wallet = value; + } + + private SequenceLogin _loginHandler; + public SequenceLogin LoginHandler + { + get + { + _loginHandler ??= SequenceLogin.GetInstance(); + return _loginHandler; + } + } + + private readonly Chain _chain; + private readonly ChainIndexer _indexer; + private readonly CurrencySwap _swap; + private readonly MarketplaceReader _marketplace; + private Checkout _checkout; + + public SequenceQuickstart(Chain chain) + { + _chain = chain; + _indexer = new ChainIndexer(_chain); + _swap = new CurrencySwap(_chain); + _marketplace = new MarketplaceReader(_chain); + + SequenceWallet.OnWalletCreated += wallet => + { + Wallet = wallet; + _checkout = new Checkout(wallet, _chain); + }; + } + + // ONBOARD + + public async Task TryRecoverWalletFromStorage() + { + var result = await _loginHandler.TryToRestoreSessionAsync(); + if (!result.StorageEnabled || result.Wallet == null) + return false; + + Wallet = result.Wallet; + return true; + } + + public async Task EmailLogin(string email) + { + await _loginHandler.Login(email); + } + + public async Task ConfirmEmailCode(string email, string code) + { + await _loginHandler.Login(email, code); + } + + public async Task GuestLogin() + { + await LoginHandler.GuestLogin(); + } + + public async Task GetIdToken() + { + var response = await Wallet.GetIdToken(); + return response.IdToken; + } + + // POWER + + /// + /// + /// + /// + /// + public async Task GetMyNativeTokenBalance() + { + var result = await _indexer.GetNativeTokenBalance(Wallet.GetWalletAddress()); + return result.balanceWei; + } + + public async Task<(BigInteger Balance, TokenMetadata TokenMetadata)> GetMyTokenBalance(Address tokenAddress) + { + var args = new GetTokenBalancesArgs(Wallet.GetWalletAddress(), tokenAddress, true); + var result = await _indexer.GetTokenBalances(args); + var balance = result.balances[0]; + return (balance.balance, balance.tokenMetadata); + } + + public async Task GetTokenSupplies(Address tokenAddress) + { + var args = new GetTokenSuppliesArgs(tokenAddress, true); + var result = await _indexer.GetTokenSupplies(args); + return result.tokenIDs; + } + + /// + /// Send any ERC20, ERC1155 or ERC721 token to another wallet. + /// + /// The address of the wallet you want to send the token to. + /// The address of your token. For example one you have deployed through https://sequence.build/ + /// Leave it blank for ERC20 contracts. + /// Leave it blank for ERC721 contracts. + /// Transaction receipt used to check transaction information onchain. + /// + public async Task SendToken(Address recipientAddress, Address tokenAddress, string tokenId, BigInteger amount) + { + var supplies = await _indexer.GetTokenSupplies(new GetTokenSuppliesArgs(tokenAddress, true)); + + Transaction transaction = supplies.contractType switch + { + ContractType.ERC20 => new SendERC20(tokenAddress, recipientAddress, amount.ToString()), + ContractType.ERC1155 => new SendERC1155(tokenAddress, recipientAddress, + new SendERC1155Values[] { new(tokenId, amount.ToString()) }), + ContractType.ERC721 => new SendERC721(tokenAddress, recipientAddress, tokenId), + _ => throw new Exception("Unknown contract type") + }; + + return await SendTransaction(new[] { transaction }); + } + + // MONETIZATION + + public async Task SwapToken(Address sellToken, Address buyToken, BigInteger buyAmount) + { + var walletAddress = Wallet.GetWalletAddress(); + var quote = await _swap.GetSwapQuote(walletAddress, buyToken, + sellToken, buyAmount.ToString(), true); + + await SendTransaction(new Transaction[] + { + new RawTransaction(sellToken, string.Empty, quote.approveData), + new RawTransaction(quote.to, quote.transactionValue, quote.transactionData), + } + ); + } + + public async Task GetAllListingsFromMarketplace(Address contractAddress) + { + return await _marketplace.ListAllCollectibleListingsWithLowestPricedListingsFirst(contractAddress); + } + + public async Task CreateListingOnMarketplace(Address contractAddress, Address currencyAddress, + string tokenId, BigInteger amount, BigInteger pricePerToken, DateTime expiry) + { + var steps = await _checkout.GenerateListingTransaction(contractAddress, tokenId, amount, + Marketplace.ContractType.ERC20, currencyAddress, pricePerToken, expiry); + + var transactions = steps.AsTransactionArray(); + return await SendTransaction(transactions); + } + + public async Task BuyTokenFromMarketplace(Order order, BigInteger amount) + { + var steps = await _checkout.GenerateBuyTransaction(order, amount); + var transactions = steps.AsTransactionArray(); + return await SendTransaction(transactions); + } + + private async Task SendTransaction(Transaction[] transactions) + { + var transactionResult = await Wallet.SendTransaction(_chain, transactions); + return transactionResult switch + { + SuccessfulTransactionReturn success => success.receipt.txnReceipt, + FailedTransactionReturn failed => throw new Exception($"Failed transaction {failed.error}"), + _ => throw new Exception("Unknown error while sending transaction.") + }; + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs.meta new file mode 100644 index 000000000..bc6c29174 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bcc333c08a2442889891ac476e1ede18 +timeCreated: 1750351985 \ No newline at end of file From 9cc40e792e0f94b2bb6355386e5a37fa89f3f694 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andy=20Gr=C3=BCning?= Date: Fri, 20 Jun 2025 09:58:53 +0200 Subject: [PATCH 2/5] renaming SequenceQuickstart to UnifiedWallet --- .../{Quickstart.meta => Unified.meta} | 0 .../{Quickstart => Unified}/Tests.meta | 0 .../Tests/SequenceUnifiedTests.asmdef} | 4 +- .../Tests/SequenceUnifiedTests.asmdef.meta} | 0 Assets/SequenceSDK/Unified/Tests/Test1.cs | 20 +++ .../SequenceSDK/Unified/Tests/Test1.cs.meta | 3 + Assets/SequenceSDK/Unified/Tests/Test2.cs | 42 ++++++ .../SequenceSDK/Unified/Tests/Test2.cs.meta | 3 + .../Tests/UnifiedTests.cs} | 9 +- .../Tests/UnifiedTests.cs.meta} | 0 .../Quickstart/SequenceQuickstart.cs.meta | 3 - .../{Quickstart.meta => Unified.meta} | 0 .../SequenceSDK/Unified/IUnifiedWallet.cs | 123 ++++++++++++++++++ .../Unified/IUnifiedWallet.cs.meta | 3 + .../SequenceUnified.asmdef} | 4 +- .../SequenceUnified.asmdef.meta} | 0 .../UnifiedWallet.cs} | 61 ++++----- .../SequenceSDK/Unified/UnifiedWallet.cs.meta | 11 ++ 18 files changed, 242 insertions(+), 44 deletions(-) rename Assets/SequenceSDK/{Quickstart.meta => Unified.meta} (100%) rename Assets/SequenceSDK/{Quickstart => Unified}/Tests.meta (100%) rename Assets/SequenceSDK/{Quickstart/Tests/SequenceQuickstartTests.asmdef => Unified/Tests/SequenceUnifiedTests.asmdef} (73%) rename Assets/SequenceSDK/{Quickstart/Tests/SequenceQuickstartTests.asmdef.meta => Unified/Tests/SequenceUnifiedTests.asmdef.meta} (100%) create mode 100644 Assets/SequenceSDK/Unified/Tests/Test1.cs create mode 100644 Assets/SequenceSDK/Unified/Tests/Test1.cs.meta create mode 100644 Assets/SequenceSDK/Unified/Tests/Test2.cs create mode 100644 Assets/SequenceSDK/Unified/Tests/Test2.cs.meta rename Assets/SequenceSDK/{Quickstart/Tests/QuickstartTests.cs => Unified/Tests/UnifiedTests.cs} (82%) rename Assets/SequenceSDK/{Quickstart/Tests/QuickstartTests.cs.meta => Unified/Tests/UnifiedTests.cs.meta} (100%) delete mode 100644 Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs.meta rename Packages/Sequence-Unity/Sequence/SequenceSDK/{Quickstart.meta => Unified.meta} (100%) create mode 100644 Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/IUnifiedWallet.cs create mode 100644 Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/IUnifiedWallet.cs.meta rename Packages/Sequence-Unity/Sequence/SequenceSDK/{Quickstart/SequenceQuickstart.asmdef => Unified/SequenceUnified.asmdef} (90%) rename Packages/Sequence-Unity/Sequence/SequenceSDK/{Quickstart/SequenceQuickstart.asmdef.meta => Unified/SequenceUnified.asmdef.meta} (100%) rename Packages/Sequence-Unity/Sequence/SequenceSDK/{Quickstart/SequenceQuickstart.cs => Unified/UnifiedWallet.cs} (79%) create mode 100644 Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/UnifiedWallet.cs.meta diff --git a/Assets/SequenceSDK/Quickstart.meta b/Assets/SequenceSDK/Unified.meta similarity index 100% rename from Assets/SequenceSDK/Quickstart.meta rename to Assets/SequenceSDK/Unified.meta diff --git a/Assets/SequenceSDK/Quickstart/Tests.meta b/Assets/SequenceSDK/Unified/Tests.meta similarity index 100% rename from Assets/SequenceSDK/Quickstart/Tests.meta rename to Assets/SequenceSDK/Unified/Tests.meta diff --git a/Assets/SequenceSDK/Quickstart/Tests/SequenceQuickstartTests.asmdef b/Assets/SequenceSDK/Unified/Tests/SequenceUnifiedTests.asmdef similarity index 73% rename from Assets/SequenceSDK/Quickstart/Tests/SequenceQuickstartTests.asmdef rename to Assets/SequenceSDK/Unified/Tests/SequenceUnifiedTests.asmdef index 8a3fd90bd..cb8f400a5 100644 --- a/Assets/SequenceSDK/Quickstart/Tests/SequenceQuickstartTests.asmdef +++ b/Assets/SequenceSDK/Unified/Tests/SequenceUnifiedTests.asmdef @@ -1,7 +1,7 @@ { - "name": "SequenceQuickstartTests", + "name": "SequenceUnifiedTests", "rootNamespace": "", - "references": ["GUID:03d0ed9c50cfd4cb28a56d2d06580ffa","GUID:f7fd4ba36aabd1d499450c174865e70b","GUID:19b9eb7db56cc47349571a4fbb0dd677","GUID:403077141e1554429a890cbc129df651"], + "references": ["GUID:03d0ed9c50cfd4cb28a56d2d06580ffa","GUID:f7fd4ba36aabd1d499450c174865e70b","GUID:19b9eb7db56cc47349571a4fbb0dd677","GUID:403077141e1554429a890cbc129df651","GUID:4e0a798abbda240658187632ae443a67","GUID:f78a27d6a73d94c4baf04337e0add4dc"], "includePlatforms": [ "Editor" ], diff --git a/Assets/SequenceSDK/Quickstart/Tests/SequenceQuickstartTests.asmdef.meta b/Assets/SequenceSDK/Unified/Tests/SequenceUnifiedTests.asmdef.meta similarity index 100% rename from Assets/SequenceSDK/Quickstart/Tests/SequenceQuickstartTests.asmdef.meta rename to Assets/SequenceSDK/Unified/Tests/SequenceUnifiedTests.asmdef.meta diff --git a/Assets/SequenceSDK/Unified/Tests/Test1.cs b/Assets/SequenceSDK/Unified/Tests/Test1.cs new file mode 100644 index 000000000..ca10d1a02 --- /dev/null +++ b/Assets/SequenceSDK/Unified/Tests/Test1.cs @@ -0,0 +1,20 @@ +using System.Threading.Tasks; +using Sequence.Unified; + +namespace Sequence.Pay.Tests.Transak +{ + public class Test1 + { + private static readonly Address TokenAddress = new (""); + private static readonly Address CurrencyAddress = new (""); + private static readonly Address SellCurrencyAddress = new (""); + private static readonly Address RecipientAddress = new (""); + + public async Task SwapToken() + { + var wallet = new UnifiedWallet(Chain.TestnetArbitrumSepolia); + await wallet.TryRecoverWalletFromStorage(); + await wallet.SwapToken(SellCurrencyAddress, CurrencyAddress, 1000); + } + } +} \ No newline at end of file diff --git a/Assets/SequenceSDK/Unified/Tests/Test1.cs.meta b/Assets/SequenceSDK/Unified/Tests/Test1.cs.meta new file mode 100644 index 000000000..a8259711c --- /dev/null +++ b/Assets/SequenceSDK/Unified/Tests/Test1.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 16832a3660dc456cb59312efb114cf19 +timeCreated: 1750363066 \ No newline at end of file diff --git a/Assets/SequenceSDK/Unified/Tests/Test2.cs b/Assets/SequenceSDK/Unified/Tests/Test2.cs new file mode 100644 index 000000000..c07eaf4a3 --- /dev/null +++ b/Assets/SequenceSDK/Unified/Tests/Test2.cs @@ -0,0 +1,42 @@ +using System; +using System.Threading.Tasks; +using Sequence.EmbeddedWallet; +using Sequence.Marketplace; + +namespace Sequence.Pay.Tests.Transak +{ + public class Test2 + { + private static readonly Address TokenAddress = new (""); + private static readonly Address CurrencyAddress = new (""); + private static readonly Address SellCurrencyAddress = new (""); + private static readonly Address RecipientAddress = new (""); + + public async Task SwapToken() + { + var loginHandler = SequenceLogin.GetInstance(); + var result = await loginHandler.TryToRestoreSessionAsync(); + var wallet = result.Wallet; + + var walletAddress = wallet.GetWalletAddress(); + + var swap = new CurrencySwap(Chain.TestnetArbitrumSepolia); + var quote = await swap.GetSwapQuote(walletAddress, CurrencyAddress, + SellCurrencyAddress, "1000", true); + + var transactions = new Transaction[] + { + new RawTransaction(SellCurrencyAddress, string.Empty, quote.approveData), + new RawTransaction(quote.to, quote.transactionValue, quote.transactionData), + }; + + var transactionResult = await wallet.SendTransaction(Chain.TestnetArbitrumSepolia, transactions); + var receipt = transactionResult switch + { + SuccessfulTransactionReturn success => success.receipt.txnReceipt, + FailedTransactionReturn failed => throw new Exception($"Failed transaction {failed.error}"), + _ => throw new Exception("Unknown error while sending transaction.") + }; + } + } +} \ No newline at end of file diff --git a/Assets/SequenceSDK/Unified/Tests/Test2.cs.meta b/Assets/SequenceSDK/Unified/Tests/Test2.cs.meta new file mode 100644 index 000000000..bc943e084 --- /dev/null +++ b/Assets/SequenceSDK/Unified/Tests/Test2.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 03808b11a083499b919ad773421800f1 +timeCreated: 1750363073 \ No newline at end of file diff --git a/Assets/SequenceSDK/Quickstart/Tests/QuickstartTests.cs b/Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs similarity index 82% rename from Assets/SequenceSDK/Quickstart/Tests/QuickstartTests.cs rename to Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs index 408a66f36..917718786 100644 --- a/Assets/SequenceSDK/Quickstart/Tests/QuickstartTests.cs +++ b/Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs @@ -1,11 +1,11 @@ using System; using System.Threading.Tasks; using NUnit.Framework; -using Sequence.Quickstart; +using Sequence.Unified; namespace Sequence.Pay.Tests.Transak { - public class QuickstartTests + public class UnifiedTests { private const string TokenId = "0"; @@ -17,7 +17,8 @@ public class QuickstartTests [Test] public async Task QuickstartEndToEndTest() { - var quickstart = new SequenceQuickstart(Chain.TestnetArbitrumSepolia); + UnifiedWallet quickstart = new UnifiedWallet(Chain.TestnetArbitrumSepolia); + quickstart.TryRecoverWalletFromStorage(); var recovered = await quickstart.TryRecoverWalletFromStorage(); if (!recovered) @@ -35,7 +36,7 @@ await quickstart.CreateListingOnMarketplace(TokenAddress, CurrencyAddress, Token 1, 1000, DateTime.MaxValue); var listings = await quickstart.GetAllListingsFromMarketplace(TokenAddress); - await quickstart.BuyTokenFromMarketplace(listings[0].order, 1); + await quickstart.PurchaseOrderFromMarketplace(listings[0].order, 1); } } } \ No newline at end of file diff --git a/Assets/SequenceSDK/Quickstart/Tests/QuickstartTests.cs.meta b/Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs.meta similarity index 100% rename from Assets/SequenceSDK/Quickstart/Tests/QuickstartTests.cs.meta rename to Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs.meta diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs.meta deleted file mode 100644 index bc6c29174..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: bcc333c08a2442889891ac476e1ede18 -timeCreated: 1750351985 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified.meta similarity index 100% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart.meta rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Unified.meta diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/IUnifiedWallet.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/IUnifiedWallet.cs new file mode 100644 index 000000000..ecc23b943 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/IUnifiedWallet.cs @@ -0,0 +1,123 @@ +using System; +using System.Numerics; +using System.Threading.Tasks; +using Sequence.EmbeddedWallet; +using Sequence.Marketplace; + +namespace Sequence.Unified +{ + public interface IUnifiedWallet + { + /// + /// The underlying Sequence Embedded Wallet reference. Use it for more control, such as transaction batches. + /// + public IWallet Wallet { get; } + + // ONBOARDING + + /// + /// Recover a wallet from secure storage. + /// + /// 'true' if a stored wallet was found or 'false' if not or if session recovery is disabled in your SequenceConfig file. + Task TryRecoverWalletFromStorage(); + + /// + /// Login using Email OTP. You will receive a code to your email. Use it with the 'ConfirmEmailCode' function to finish the login process. + /// + /// Email of the given user. + /// + Task EmailLogin(string email); + + /// + /// You receive a code after calling 'EmailLogin'. Use it with this function to complete the login process. + /// + /// + /// + /// + Task ConfirmEmailCode(string email, string code); + + /// + /// Login as a guest. When the user uninstall the application, they lose access to a guest wallet, unless they use our Account Federation feature to link the guest wallet to another login option. + /// + /// + Task GuestLogin(); + + /// + /// Get an id token as a JWT you can use to verify the user on your backend. Use any JWKS library to verify this token. + /// + /// JWT Id Token + Task GetIdToken(); + + // POWER + + /// + /// Get the native token balance for your local user. For example, the native token on the Ethereum Mainnet is the amount of 'ETH' + /// + /// Balance in wei. + Task GetMyNativeTokenBalance(); + + /// + /// Get the token balance for your local user. + /// + /// Address of your token contract. This could be an ERC20, ERC1155, or ERC721 contract you deployed on https//sequence.build/ + /// Balance in wei and the token metadata. + Task<(BigInteger Balance, TokenMetadata TokenMetadata)> GetMyTokenBalance(Address tokenAddress); + + /// + /// + /// + /// + /// + Task GetTokenSupplies(Address tokenAddress); + + /// + /// Send any ERC20, ERC1155 or ERC721 token to another wallet. + /// + /// The address of the wallet you want to send the token to. + /// The address of your token. For example one you have deployed through https://sequence.build/ + /// Leave it blank for ERC20 contracts. + /// Leave it blank for ERC721 contracts. + /// Transaction receipt used to check transaction information onchain. + /// + Task SendToken(Address recipientAddress, Address tokenAddress, string tokenId, BigInteger amount); + + // MONETIZATION + + /// + /// Swap one of your tokens to another one. Make sure you have configured enough liquidity on a DEX such as UniSwap. + /// + /// + /// + /// + /// + Task SwapToken(Address sellToken, Address buyToken, BigInteger buyAmount); + + /// + /// Get all listings from your Marketplace on a given collection. Please make sure you have configured your Marketplace on https://sequence.build/ + /// + /// + /// + Task GetAllListingsFromMarketplace(Address collectionAddress); + + /// + /// Create a listing for a given token you own. Please make sure you have configured your Marketplace on https://sequence.build/ + /// + /// + /// + /// + /// + /// + /// + /// + Task CreateListingOnMarketplace(Address contractAddress, Address currencyAddress, + string tokenId, BigInteger amount, BigInteger pricePerToken, DateTime expiry); + + /// + /// Purchase an order from your Marketplace. Please make sure you have configured your Marketplace on https://sequence.build/ + /// + /// The order as returned from the 'GetAllListingsFromMarketplace' function. + /// The amount of orders you wish to purchase. + /// + Task PurchaseOrderFromMarketplace(Order order, BigInteger amount); + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/IUnifiedWallet.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/IUnifiedWallet.cs.meta new file mode 100644 index 000000000..c935552eb --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/IUnifiedWallet.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 56129c265d66491ba5529d572d6ac2e0 +timeCreated: 1750401684 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.asmdef b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.asmdef similarity index 90% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.asmdef rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.asmdef index e57faebfa..fbb2276af 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.asmdef +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.asmdef @@ -1,6 +1,6 @@ { - "name": "SequenceQuickstart", - "rootNamespace": "Sequence.Quickstart", + "name": "SequenceUnified", + "rootNamespace": "Sequence.Unified", "references": [ "GUID:a35e3a53d4439435f8b36ed2c6158cd8", "GUID:4e0a798abbda240658187632ae443a67", diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.asmdef.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.asmdef.meta similarity index 100% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.asmdef.meta rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.asmdef.meta diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/UnifiedWallet.cs similarity index 79% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/UnifiedWallet.cs index c130747f5..3348dacf3 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Quickstart/SequenceQuickstart.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/UnifiedWallet.cs @@ -5,23 +5,23 @@ using Sequence.EmbeddedWallet; using Sequence.Marketplace; -namespace Sequence.Quickstart +namespace Sequence.Unified { - public class SequenceQuickstart + public class UnifiedWallet : IUnifiedWallet, IDisposable { private IWallet _wallet; public IWallet Wallet { get { - Assert.IsNotNull(Wallet, "Please sign in first. For example, call 'new SequenceQuickstart().GuestLogin();'"); + EnsureWalletReferenceExists(); return _wallet; } set => _wallet = value; } private SequenceLogin _loginHandler; - public SequenceLogin LoginHandler + private SequenceLogin LoginHandler { get { @@ -36,22 +36,21 @@ public SequenceLogin LoginHandler private readonly MarketplaceReader _marketplace; private Checkout _checkout; - public SequenceQuickstart(Chain chain) + public UnifiedWallet(Chain chain) { _chain = chain; _indexer = new ChainIndexer(_chain); _swap = new CurrencySwap(_chain); _marketplace = new MarketplaceReader(_chain); - SequenceWallet.OnWalletCreated += wallet => - { - Wallet = wallet; - _checkout = new Checkout(wallet, _chain); - }; + SequenceWallet.OnWalletCreated += UpdateWallet; + } + + public void Dispose() + { + SequenceWallet.OnWalletCreated -= UpdateWallet; } - // ONBOARD - public async Task TryRecoverWalletFromStorage() { var result = await _loginHandler.TryToRestoreSessionAsync(); @@ -83,13 +82,6 @@ public async Task GetIdToken() return response.IdToken; } - // POWER - - /// - /// - /// - /// - /// public async Task GetMyNativeTokenBalance() { var result = await _indexer.GetNativeTokenBalance(Wallet.GetWalletAddress()); @@ -111,17 +103,9 @@ public async Task GetTokenSupplies(Address tokenAddress) return result.tokenIDs; } - /// - /// Send any ERC20, ERC1155 or ERC721 token to another wallet. - /// - /// The address of the wallet you want to send the token to. - /// The address of your token. For example one you have deployed through https://sequence.build/ - /// Leave it blank for ERC20 contracts. - /// Leave it blank for ERC721 contracts. - /// Transaction receipt used to check transaction information onchain. - /// public async Task SendToken(Address recipientAddress, Address tokenAddress, string tokenId, BigInteger amount) { + EnsureWalletReferenceExists(); var supplies = await _indexer.GetTokenSupplies(new GetTokenSuppliesArgs(tokenAddress, true)); Transaction transaction = supplies.contractType switch @@ -136,8 +120,6 @@ public async Task SendToken(Address recipientAddress, Address tokenAddre return await SendTransaction(new[] { transaction }); } - // MONETIZATION - public async Task SwapToken(Address sellToken, Address buyToken, BigInteger buyAmount) { var walletAddress = Wallet.GetWalletAddress(); @@ -152,14 +134,15 @@ await SendTransaction(new Transaction[] ); } - public async Task GetAllListingsFromMarketplace(Address contractAddress) + public async Task GetAllListingsFromMarketplace(Address collectionAddress) { - return await _marketplace.ListAllCollectibleListingsWithLowestPricedListingsFirst(contractAddress); + return await _marketplace.ListAllCollectibleListingsWithLowestPricedListingsFirst(collectionAddress); } public async Task CreateListingOnMarketplace(Address contractAddress, Address currencyAddress, string tokenId, BigInteger amount, BigInteger pricePerToken, DateTime expiry) { + EnsureWalletReferenceExists(); var steps = await _checkout.GenerateListingTransaction(contractAddress, tokenId, amount, Marketplace.ContractType.ERC20, currencyAddress, pricePerToken, expiry); @@ -167,8 +150,9 @@ public async Task CreateListingOnMarketplace(Address contractAddress, Ad return await SendTransaction(transactions); } - public async Task BuyTokenFromMarketplace(Order order, BigInteger amount) + public async Task PurchaseOrderFromMarketplace(Order order, BigInteger amount) { + EnsureWalletReferenceExists(); var steps = await _checkout.GenerateBuyTransaction(order, amount); var transactions = steps.AsTransactionArray(); return await SendTransaction(transactions); @@ -184,5 +168,16 @@ private async Task SendTransaction(Transaction[] transactions) _ => throw new Exception("Unknown error while sending transaction.") }; } + + private void UpdateWallet(IWallet wallet) + { + Wallet = wallet; + _checkout = new Checkout(wallet, _chain); + } + + private void EnsureWalletReferenceExists() + { + Assert.IsNotNull(Wallet, "Please sign in first. For example, call 'new SequenceQuickstart().GuestLogin();'"); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/UnifiedWallet.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/UnifiedWallet.cs.meta new file mode 100644 index 000000000..3f665db39 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/UnifiedWallet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da7ded03c99be413e8cc8f4cb9456807 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 989e65e791d797d924f23889cf2598c720929701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andy=20Gr=C3=BCning?= Date: Mon, 23 Jun 2025 09:23:35 +0200 Subject: [PATCH 3/5] renamed to SequenceUnified.cs --- Assets/SequenceSDK/Unified/Tests/Test1.cs | 20 --------- .../SequenceSDK/Unified/Tests/Test1.cs.meta | 3 -- Assets/SequenceSDK/Unified/Tests/Test2.cs | 42 ------------------- .../SequenceSDK/Unified/Tests/Test2.cs.meta | 3 -- .../SequenceSDK/Unified/Tests/UnifiedTests.cs | 26 ++++++------ ...{IUnifiedWallet.cs => ISequenceUnified.cs} | 2 +- ...allet.cs.meta => ISequenceUnified.cs.meta} | 0 .../{UnifiedWallet.cs => SequenceUnified.cs} | 4 +- ...Wallet.cs.meta => SequenceUnified.cs.meta} | 0 9 files changed, 16 insertions(+), 84 deletions(-) delete mode 100644 Assets/SequenceSDK/Unified/Tests/Test1.cs delete mode 100644 Assets/SequenceSDK/Unified/Tests/Test1.cs.meta delete mode 100644 Assets/SequenceSDK/Unified/Tests/Test2.cs delete mode 100644 Assets/SequenceSDK/Unified/Tests/Test2.cs.meta rename Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/{IUnifiedWallet.cs => ISequenceUnified.cs} (99%) rename Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/{IUnifiedWallet.cs.meta => ISequenceUnified.cs.meta} (100%) rename Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/{UnifiedWallet.cs => SequenceUnified.cs} (98%) rename Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/{UnifiedWallet.cs.meta => SequenceUnified.cs.meta} (100%) diff --git a/Assets/SequenceSDK/Unified/Tests/Test1.cs b/Assets/SequenceSDK/Unified/Tests/Test1.cs deleted file mode 100644 index ca10d1a02..000000000 --- a/Assets/SequenceSDK/Unified/Tests/Test1.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Threading.Tasks; -using Sequence.Unified; - -namespace Sequence.Pay.Tests.Transak -{ - public class Test1 - { - private static readonly Address TokenAddress = new (""); - private static readonly Address CurrencyAddress = new (""); - private static readonly Address SellCurrencyAddress = new (""); - private static readonly Address RecipientAddress = new (""); - - public async Task SwapToken() - { - var wallet = new UnifiedWallet(Chain.TestnetArbitrumSepolia); - await wallet.TryRecoverWalletFromStorage(); - await wallet.SwapToken(SellCurrencyAddress, CurrencyAddress, 1000); - } - } -} \ No newline at end of file diff --git a/Assets/SequenceSDK/Unified/Tests/Test1.cs.meta b/Assets/SequenceSDK/Unified/Tests/Test1.cs.meta deleted file mode 100644 index a8259711c..000000000 --- a/Assets/SequenceSDK/Unified/Tests/Test1.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 16832a3660dc456cb59312efb114cf19 -timeCreated: 1750363066 \ No newline at end of file diff --git a/Assets/SequenceSDK/Unified/Tests/Test2.cs b/Assets/SequenceSDK/Unified/Tests/Test2.cs deleted file mode 100644 index c07eaf4a3..000000000 --- a/Assets/SequenceSDK/Unified/Tests/Test2.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Threading.Tasks; -using Sequence.EmbeddedWallet; -using Sequence.Marketplace; - -namespace Sequence.Pay.Tests.Transak -{ - public class Test2 - { - private static readonly Address TokenAddress = new (""); - private static readonly Address CurrencyAddress = new (""); - private static readonly Address SellCurrencyAddress = new (""); - private static readonly Address RecipientAddress = new (""); - - public async Task SwapToken() - { - var loginHandler = SequenceLogin.GetInstance(); - var result = await loginHandler.TryToRestoreSessionAsync(); - var wallet = result.Wallet; - - var walletAddress = wallet.GetWalletAddress(); - - var swap = new CurrencySwap(Chain.TestnetArbitrumSepolia); - var quote = await swap.GetSwapQuote(walletAddress, CurrencyAddress, - SellCurrencyAddress, "1000", true); - - var transactions = new Transaction[] - { - new RawTransaction(SellCurrencyAddress, string.Empty, quote.approveData), - new RawTransaction(quote.to, quote.transactionValue, quote.transactionData), - }; - - var transactionResult = await wallet.SendTransaction(Chain.TestnetArbitrumSepolia, transactions); - var receipt = transactionResult switch - { - SuccessfulTransactionReturn success => success.receipt.txnReceipt, - FailedTransactionReturn failed => throw new Exception($"Failed transaction {failed.error}"), - _ => throw new Exception("Unknown error while sending transaction.") - }; - } - } -} \ No newline at end of file diff --git a/Assets/SequenceSDK/Unified/Tests/Test2.cs.meta b/Assets/SequenceSDK/Unified/Tests/Test2.cs.meta deleted file mode 100644 index bc943e084..000000000 --- a/Assets/SequenceSDK/Unified/Tests/Test2.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 03808b11a083499b919ad773421800f1 -timeCreated: 1750363073 \ No newline at end of file diff --git a/Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs b/Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs index 917718786..db5348443 100644 --- a/Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs +++ b/Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs @@ -15,28 +15,28 @@ public class UnifiedTests private static readonly Address RecipientAddress = new (""); [Test] - public async Task QuickstartEndToEndTest() + public async Task UnifiedEndToEndTest() { - UnifiedWallet quickstart = new UnifiedWallet(Chain.TestnetArbitrumSepolia); - quickstart.TryRecoverWalletFromStorage(); + var sequenceUnified = new SequenceUnified(Chain.TestnetArbitrumSepolia); + await sequenceUnified.TryRecoverWalletFromStorage(); - var recovered = await quickstart.TryRecoverWalletFromStorage(); + var recovered = await sequenceUnified.TryRecoverWalletFromStorage(); if (!recovered) - await quickstart.GuestLogin(); + await sequenceUnified.GuestLogin(); - await quickstart.GetIdToken(); + await sequenceUnified.GetIdToken(); - var nativeTokenBalance= await quickstart.GetMyNativeTokenBalance(); - var tokenBalance = await quickstart.GetMyTokenBalance(TokenAddress); + var nativeTokenBalance= await sequenceUnified.GetMyNativeTokenBalance(); + var tokenBalance = await sequenceUnified.GetMyTokenBalance(TokenAddress); - await quickstart.SendToken(TokenAddress, RecipientAddress, TokenId, 1); - await quickstart.SwapToken(SellCurrencyAddress, CurrencyAddress, 1000); + await sequenceUnified.SendToken(TokenAddress, RecipientAddress, TokenId, 1); + await sequenceUnified.SwapToken(SellCurrencyAddress, CurrencyAddress, 1000); - await quickstart.CreateListingOnMarketplace(TokenAddress, CurrencyAddress, TokenId, + await sequenceUnified.CreateListingOnMarketplace(TokenAddress, CurrencyAddress, TokenId, 1, 1000, DateTime.MaxValue); - var listings = await quickstart.GetAllListingsFromMarketplace(TokenAddress); - await quickstart.PurchaseOrderFromMarketplace(listings[0].order, 1); + var listings = await sequenceUnified.GetAllListingsFromMarketplace(TokenAddress); + await sequenceUnified.PurchaseOrderFromMarketplace(listings[0].order, 1); } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/IUnifiedWallet.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs similarity index 99% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/IUnifiedWallet.cs rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs index ecc23b943..3e1ea9a43 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/IUnifiedWallet.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs @@ -6,7 +6,7 @@ namespace Sequence.Unified { - public interface IUnifiedWallet + public interface ISequenceUnified { /// /// The underlying Sequence Embedded Wallet reference. Use it for more control, such as transaction batches. diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/IUnifiedWallet.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs.meta similarity index 100% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/IUnifiedWallet.cs.meta rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs.meta diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/UnifiedWallet.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs similarity index 98% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/UnifiedWallet.cs rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs index 3348dacf3..d9566f884 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/UnifiedWallet.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs @@ -7,7 +7,7 @@ namespace Sequence.Unified { - public class UnifiedWallet : IUnifiedWallet, IDisposable + public class SequenceUnified : ISequenceUnified, IDisposable { private IWallet _wallet; public IWallet Wallet @@ -36,7 +36,7 @@ private SequenceLogin LoginHandler private readonly MarketplaceReader _marketplace; private Checkout _checkout; - public UnifiedWallet(Chain chain) + public SequenceUnified(Chain chain) { _chain = chain; _indexer = new ChainIndexer(_chain); diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/UnifiedWallet.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs.meta similarity index 100% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/UnifiedWallet.cs.meta rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs.meta From 3ee5ab37c82a355c590276501d7985b5a536b544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andy=20Gr=C3=BCning?= Date: Mon, 23 Jun 2025 10:32:27 +0200 Subject: [PATCH 4/5] added google and apple sign in --- .../Sequence/SequenceSDK/Unified/ISequenceUnified.cs | 10 ++++++++++ .../Sequence/SequenceSDK/Unified/SequenceUnified.cs | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs index 3e1ea9a43..a3ec2a401 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs @@ -42,6 +42,16 @@ public interface ISequenceUnified /// Task GuestLogin(); + /// + /// Sign In with Google. The user is redirected to an external browser. + /// + void GoogleLogin(); + + /// + /// Sign In with Apple. The user is redirected to an external browser. On iOS, this function uses the native Sign In SDK. + /// + void AppleLogin(); + /// /// Get an id token as a JWT you can use to verify the user on your backend. Use any JWKS library to verify this token. /// diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs index d9566f884..31f9d7693 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs @@ -75,6 +75,16 @@ public async Task GuestLogin() { await LoginHandler.GuestLogin(); } + + public void GoogleLogin() + { + LoginHandler.GoogleLogin(); + } + + public void AppleLogin() + { + LoginHandler.AppleLogin(); + } public async Task GetIdToken() { From 6929f059c8500a150280c62bb6862c6f7f9cb5fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andy=20Gr=C3=BCning?= Date: Tue, 24 Jun 2025 11:33:38 +0200 Subject: [PATCH 5/5] renamed namespace to Sequence.Adapter --- Assets/SequenceSDK/{Unified.meta => Adapter.meta} | 0 Assets/SequenceSDK/{Unified => Adapter}/Tests.meta | 0 .../Tests/UnifiedTests.cs => Adapter/Tests/AdapterTests.cs} | 5 ++--- .../Tests/AdapterTests.cs.meta} | 0 .../Tests/SequenceAdapterTests.asmdef} | 0 .../Tests/SequenceAdapterTests.asmdef.meta} | 0 .../Sequence/SequenceSDK/{Unified.meta => Adapter.meta} | 0 .../{Unified/ISequenceUnified.cs => Adapter/ISequence.cs} | 4 ++-- .../ISequenceUnified.cs.meta => Adapter/ISequence.cs.meta} | 0 .../{Unified/SequenceUnified.cs => Adapter/Sequence.cs} | 6 +++--- .../SequenceUnified.cs.meta => Adapter/Sequence.cs.meta} | 0 .../SequenceAdapter.asmdef} | 4 ++-- .../SequenceAdapter.asmdef.meta} | 0 13 files changed, 9 insertions(+), 10 deletions(-) rename Assets/SequenceSDK/{Unified.meta => Adapter.meta} (100%) rename Assets/SequenceSDK/{Unified => Adapter}/Tests.meta (100%) rename Assets/SequenceSDK/{Unified/Tests/UnifiedTests.cs => Adapter/Tests/AdapterTests.cs} (91%) rename Assets/SequenceSDK/{Unified/Tests/UnifiedTests.cs.meta => Adapter/Tests/AdapterTests.cs.meta} (100%) rename Assets/SequenceSDK/{Unified/Tests/SequenceUnifiedTests.asmdef => Adapter/Tests/SequenceAdapterTests.asmdef} (100%) rename Assets/SequenceSDK/{Unified/Tests/SequenceUnifiedTests.asmdef.meta => Adapter/Tests/SequenceAdapterTests.asmdef.meta} (100%) rename Packages/Sequence-Unity/Sequence/SequenceSDK/{Unified.meta => Adapter.meta} (100%) rename Packages/Sequence-Unity/Sequence/SequenceSDK/{Unified/ISequenceUnified.cs => Adapter/ISequence.cs} (98%) rename Packages/Sequence-Unity/Sequence/SequenceSDK/{Unified/ISequenceUnified.cs.meta => Adapter/ISequence.cs.meta} (100%) rename Packages/Sequence-Unity/Sequence/SequenceSDK/{Unified/SequenceUnified.cs => Adapter/Sequence.cs} (98%) rename Packages/Sequence-Unity/Sequence/SequenceSDK/{Unified/SequenceUnified.cs.meta => Adapter/Sequence.cs.meta} (100%) rename Packages/Sequence-Unity/Sequence/SequenceSDK/{Unified/SequenceUnified.asmdef => Adapter/SequenceAdapter.asmdef} (91%) rename Packages/Sequence-Unity/Sequence/SequenceSDK/{Unified/SequenceUnified.asmdef.meta => Adapter/SequenceAdapter.asmdef.meta} (100%) diff --git a/Assets/SequenceSDK/Unified.meta b/Assets/SequenceSDK/Adapter.meta similarity index 100% rename from Assets/SequenceSDK/Unified.meta rename to Assets/SequenceSDK/Adapter.meta diff --git a/Assets/SequenceSDK/Unified/Tests.meta b/Assets/SequenceSDK/Adapter/Tests.meta similarity index 100% rename from Assets/SequenceSDK/Unified/Tests.meta rename to Assets/SequenceSDK/Adapter/Tests.meta diff --git a/Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs b/Assets/SequenceSDK/Adapter/Tests/AdapterTests.cs similarity index 91% rename from Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs rename to Assets/SequenceSDK/Adapter/Tests/AdapterTests.cs index db5348443..91aea060c 100644 --- a/Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs +++ b/Assets/SequenceSDK/Adapter/Tests/AdapterTests.cs @@ -1,11 +1,10 @@ using System; using System.Threading.Tasks; using NUnit.Framework; -using Sequence.Unified; namespace Sequence.Pay.Tests.Transak { - public class UnifiedTests + public class AdapterTests { private const string TokenId = "0"; @@ -17,7 +16,7 @@ public class UnifiedTests [Test] public async Task UnifiedEndToEndTest() { - var sequenceUnified = new SequenceUnified(Chain.TestnetArbitrumSepolia); + var sequenceUnified = new Adapter.Sequence(Chain.TestnetArbitrumSepolia); await sequenceUnified.TryRecoverWalletFromStorage(); var recovered = await sequenceUnified.TryRecoverWalletFromStorage(); diff --git a/Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs.meta b/Assets/SequenceSDK/Adapter/Tests/AdapterTests.cs.meta similarity index 100% rename from Assets/SequenceSDK/Unified/Tests/UnifiedTests.cs.meta rename to Assets/SequenceSDK/Adapter/Tests/AdapterTests.cs.meta diff --git a/Assets/SequenceSDK/Unified/Tests/SequenceUnifiedTests.asmdef b/Assets/SequenceSDK/Adapter/Tests/SequenceAdapterTests.asmdef similarity index 100% rename from Assets/SequenceSDK/Unified/Tests/SequenceUnifiedTests.asmdef rename to Assets/SequenceSDK/Adapter/Tests/SequenceAdapterTests.asmdef diff --git a/Assets/SequenceSDK/Unified/Tests/SequenceUnifiedTests.asmdef.meta b/Assets/SequenceSDK/Adapter/Tests/SequenceAdapterTests.asmdef.meta similarity index 100% rename from Assets/SequenceSDK/Unified/Tests/SequenceUnifiedTests.asmdef.meta rename to Assets/SequenceSDK/Adapter/Tests/SequenceAdapterTests.asmdef.meta diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter.meta similarity index 100% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Unified.meta rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter.meta diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/ISequence.cs similarity index 98% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/ISequence.cs index a3ec2a401..3263bb496 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/ISequence.cs @@ -4,9 +4,9 @@ using Sequence.EmbeddedWallet; using Sequence.Marketplace; -namespace Sequence.Unified +namespace Sequence.Adapter { - public interface ISequenceUnified + public interface ISequence { /// /// The underlying Sequence Embedded Wallet reference. Use it for more control, such as transaction batches. diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/ISequence.cs.meta similarity index 100% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/ISequenceUnified.cs.meta rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/ISequence.cs.meta diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/Sequence.cs similarity index 98% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/Sequence.cs index 31f9d7693..c62295487 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/Sequence.cs @@ -5,9 +5,9 @@ using Sequence.EmbeddedWallet; using Sequence.Marketplace; -namespace Sequence.Unified +namespace Sequence.Adapter { - public class SequenceUnified : ISequenceUnified, IDisposable + public class Sequence : ISequence, IDisposable { private IWallet _wallet; public IWallet Wallet @@ -36,7 +36,7 @@ private SequenceLogin LoginHandler private readonly MarketplaceReader _marketplace; private Checkout _checkout; - public SequenceUnified(Chain chain) + public Sequence(Chain chain) { _chain = chain; _indexer = new ChainIndexer(_chain); diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/Sequence.cs.meta similarity index 100% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.cs.meta rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/Sequence.cs.meta diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.asmdef b/Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/SequenceAdapter.asmdef similarity index 91% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.asmdef rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/SequenceAdapter.asmdef index fbb2276af..3e434670a 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.asmdef +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/SequenceAdapter.asmdef @@ -1,6 +1,6 @@ { - "name": "SequenceUnified", - "rootNamespace": "Sequence.Unified", + "name": "SequenceAdapter", + "rootNamespace": "Sequence.Adapter", "references": [ "GUID:a35e3a53d4439435f8b36ed2c6158cd8", "GUID:4e0a798abbda240658187632ae443a67", diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.asmdef.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/SequenceAdapter.asmdef.meta similarity index 100% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/Unified/SequenceUnified.asmdef.meta rename to Packages/Sequence-Unity/Sequence/SequenceSDK/Adapter/SequenceAdapter.asmdef.meta