From 74ac23613e448ee3c7fae07d8869641c0433ba0a Mon Sep 17 00:00:00 2001 From: Natalie Bunduwongse Date: Thu, 16 Jan 2025 10:56:59 +1300 Subject: [PATCH] feat: swap, marketplace docs --- src/Packages/Marketplace/CHANGELOG.md.meta | 7 +++ src/Packages/Marketplace/LICENSE.md.meta | 7 +++ src/Packages/Marketplace/README.md.meta | 7 +++ .../Marketplace/Runtime/OnRamp/OnRamp.cs | 33 ++++++++--- src/Packages/Marketplace/Runtime/Swap.meta | 3 + src/Packages/Marketplace/Runtime/Swap/Swap.cs | 57 +++++++++++++++++++ .../Marketplace/Runtime/Swap/Swap.cs.meta | 3 + 7 files changed, 109 insertions(+), 8 deletions(-) create mode 100644 src/Packages/Marketplace/CHANGELOG.md.meta create mode 100644 src/Packages/Marketplace/LICENSE.md.meta create mode 100644 src/Packages/Marketplace/README.md.meta create mode 100644 src/Packages/Marketplace/Runtime/Swap.meta create mode 100644 src/Packages/Marketplace/Runtime/Swap/Swap.cs create mode 100644 src/Packages/Marketplace/Runtime/Swap/Swap.cs.meta diff --git a/src/Packages/Marketplace/CHANGELOG.md.meta b/src/Packages/Marketplace/CHANGELOG.md.meta new file mode 100644 index 00000000..7fcd4795 --- /dev/null +++ b/src/Packages/Marketplace/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: af82d5225d9804276b038c20c2134221 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Packages/Marketplace/LICENSE.md.meta b/src/Packages/Marketplace/LICENSE.md.meta new file mode 100644 index 00000000..4d25e1b9 --- /dev/null +++ b/src/Packages/Marketplace/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 57ae1a41ec4a844418d4d7bf0d229887 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Packages/Marketplace/README.md.meta b/src/Packages/Marketplace/README.md.meta new file mode 100644 index 00000000..dead28e1 --- /dev/null +++ b/src/Packages/Marketplace/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dde9286aa4f64487fa8a8856852bb797 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Packages/Marketplace/Runtime/OnRamp/OnRamp.cs b/src/Packages/Marketplace/Runtime/OnRamp/OnRamp.cs index 8edea257..72c82f97 100644 --- a/src/Packages/Marketplace/Runtime/OnRamp/OnRamp.cs +++ b/src/Packages/Marketplace/Runtime/OnRamp/OnRamp.cs @@ -1,27 +1,36 @@ using System; using System.Collections.Generic; using System.Linq; -using Cysharp.Threading.Tasks; namespace Immutable.Marketplace.OnRamp { + /// + /// Provides functionality for generating an on-ramp link, allowing players to purchase tokens + /// using fiat currency and transfer them directly to the Immutable zkEVM network. + /// public class OnRamp { private readonly string _environment; private readonly string _email; private readonly string _address; - private static readonly Dictionary TransakBaseUrls = new Dictionary + private static readonly Dictionary BaseUrls = new() { { "sandbox", "https://global-stg.transak.com" }, - { "production", "https://global.transak.com/" } + { "production", "https://global.transak.com" } }; - private static readonly Dictionary TransakApiKeys = new Dictionary + private static readonly Dictionary ApiKeys = new() { { "sandbox", "d14b44fb-0f84-4db5-affb-e044040d724b" }, // This can be hardcoded as it is a public API key { "production", "ad1bca70-d917-4628-bb0f-5609537498bc" } }; + /// + /// Initialises a new instance of the class. + /// + /// Specifies the environment (sandbox or production). + /// The user's email address, pre-filled in the on-ramp flow. + /// The user's wallet address, where tokens will be sent. public OnRamp(string environment, string email, string address) { _environment = environment; @@ -29,15 +38,23 @@ public OnRamp(string environment, string email, string address) _address = address; } - public async UniTask GetLink( + /// + /// Generates a link for the on-ramp flow. + /// + /// The fiat currency to be used (default is "USD"). + /// The default amount of fiat currency (default is "50"). + /// The default cryptocurrency (default is "IMX").. + /// A comma-separated list of available cryptocurrencies to purchase (default is "imx,eth,usdc"). + /// An on-ramp URL + public string GetLink( string fiatCurrency = "USD", string defaultFiatAmount = "50", string defaultCryptoCurrency = "IMX", string defaultCryptoCurrencyList = "imx,eth,usdc" ) { - string baseUrl = TransakBaseUrls[_environment]; - string apiKey = TransakApiKeys[_environment]; + var baseUrl = BaseUrls[_environment]; + var apiKey = ApiKeys[_environment]; var queryParams = new Dictionary { @@ -58,7 +75,7 @@ public async UniTask GetLink( {"cryptoCurrencyList", defaultCryptoCurrencyList} }; - string queryString = string.Join("&", queryParams.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray()); + var queryString = string.Join("&", queryParams.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray()); return $"{baseUrl}?{queryString}"; } } diff --git a/src/Packages/Marketplace/Runtime/Swap.meta b/src/Packages/Marketplace/Runtime/Swap.meta new file mode 100644 index 00000000..422bff91 --- /dev/null +++ b/src/Packages/Marketplace/Runtime/Swap.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ecc83add57164e7f9bebe81b9336b6d1 +timeCreated: 1736976769 \ No newline at end of file diff --git a/src/Packages/Marketplace/Runtime/Swap/Swap.cs b/src/Packages/Marketplace/Runtime/Swap/Swap.cs new file mode 100644 index 00000000..2b0e7f33 --- /dev/null +++ b/src/Packages/Marketplace/Runtime/Swap/Swap.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Immutable.Marketplace.Swap +{ + /// + /// Provides functionality for generating a link to the swap flow, + /// simplifying the process of swapping tokens on the Immutable zkEVM network. + /// + public class Swap + { + private readonly string _environment; + private static readonly Dictionary BaseUrls = new() + { + { "sandbox", "https://checkout-playground.sandbox.immutable.com/checkout/swap" }, + { "production", "https://toolkit.immutable.com/checkout/swap" } + }; + + private static readonly Dictionary ApiKeys = new() + { + { "sandbox", "pk_imapik-test-7-hfC5T$W$eEDE8Mc5mp" }, // This can be hardcoded as it is a public API key + { "production", "pk_imapik-WGd9orNd8mLdtTCTb3CP" } + }; + + /// + /// Initialises a new instance of the class. + /// + /// Specifies the environment (sandbox or production). + public Swap(string environment) + { + _environment = environment; + } + + /// + /// Generates a link for the swap flow. + /// + /// The address of the token being swapped from. + /// The address of the token being swapped to. + /// A swap URL + public string GetLink(string fromTokenAddress, string toTokenAddress) + { + var baseUrl = BaseUrls[_environment]; + var apiKey = ApiKeys[_environment]; + + var queryParams = new Dictionary + { + {"publishableKey", apiKey}, + {"fromTokenAddress", fromTokenAddress}, + {"toTokenAddress", toTokenAddress} + }; + + var queryString = string.Join("&", queryParams.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}").ToArray()); + return $"{baseUrl}?{queryString}"; + } + } +} \ No newline at end of file diff --git a/src/Packages/Marketplace/Runtime/Swap/Swap.cs.meta b/src/Packages/Marketplace/Runtime/Swap/Swap.cs.meta new file mode 100644 index 00000000..3844c791 --- /dev/null +++ b/src/Packages/Marketplace/Runtime/Swap/Swap.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8c465e6a6157457c9c11e43759058ee1 +timeCreated: 1736976774 \ No newline at end of file