diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries/ChainSafe.Gaming.HyperPlay.dll b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries/ChainSafe.Gaming.HyperPlay.dll index 1a2e43c0f..4ea6aad1a 100644 Binary files a/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries/ChainSafe.Gaming.HyperPlay.dll and b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries/ChainSafe.Gaming.HyperPlay.dll differ diff --git a/Packages/io.chainsafe.web3-unity.lootboxes/Chainlink/Runtime/Libraries/ChainSafe.Gaming.Lootboxes.Chainlink.dll b/Packages/io.chainsafe.web3-unity.lootboxes/Chainlink/Runtime/Libraries/ChainSafe.Gaming.Lootboxes.Chainlink.dll index 5efc269a3..8ba45c124 100644 Binary files a/Packages/io.chainsafe.web3-unity.lootboxes/Chainlink/Runtime/Libraries/ChainSafe.Gaming.Lootboxes.Chainlink.dll and b/Packages/io.chainsafe.web3-unity.lootboxes/Chainlink/Runtime/Libraries/ChainSafe.Gaming.Lootboxes.Chainlink.dll differ diff --git a/Packages/io.chainsafe.web3-unity.lootboxes/Chainlink/Runtime/Libraries/Chainsafe.Gaming.Chainlink.dll b/Packages/io.chainsafe.web3-unity.lootboxes/Chainlink/Runtime/Libraries/Chainsafe.Gaming.Chainlink.dll index d4ed40598..96f8cb8d3 100644 Binary files a/Packages/io.chainsafe.web3-unity.lootboxes/Chainlink/Runtime/Libraries/Chainsafe.Gaming.Chainlink.dll and b/Packages/io.chainsafe.web3-unity.lootboxes/Chainlink/Runtime/Libraries/Chainsafe.Gaming.Chainlink.dll differ diff --git a/Packages/io.chainsafe.web3-unity.mud/Runtime/Libraries/ChainSafe.Gaming.Mud.dll b/Packages/io.chainsafe.web3-unity.mud/Runtime/Libraries/ChainSafe.Gaming.Mud.dll index d7918d82d..44d093315 100644 Binary files a/Packages/io.chainsafe.web3-unity.mud/Runtime/Libraries/ChainSafe.Gaming.Mud.dll and b/Packages/io.chainsafe.web3-unity.mud/Runtime/Libraries/ChainSafe.Gaming.Mud.dll differ diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthProvider.cs b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthProvider.cs index be5e853d2..e24ad08e0 100644 --- a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthProvider.cs +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthProvider.cs @@ -26,8 +26,9 @@ public Web3AuthProvider( Web3AuthWalletConfig config, Web3Environment environment, IChainConfig chainConfig, - IOperationTracker operationTracker) - : base(environment, chainConfig, operationTracker) + IOperationTracker operationTracker, + IOperatingSystemMediator operatingSystemMediator) + : base(environment, chainConfig, operationTracker, operatingSystemMediator) { this.operationTracker = operationTracker; _config = config; diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWebGLProvider.cs b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWebGLProvider.cs index ea861f970..9fe43a179 100644 --- a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWebGLProvider.cs +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWebGLProvider.cs @@ -12,8 +12,8 @@ public class Web3AuthWebGLProvider : Web3AuthProvider { private readonly Web3AuthWalletConfig _config; - public Web3AuthWebGLProvider(Web3AuthWalletConfig config, Web3Environment environment, IChainConfig chainConfig, IOperationTracker operationTracker) - : base(config, environment, chainConfig, operationTracker) + public Web3AuthWebGLProvider(Web3AuthWalletConfig config, Web3Environment environment, IChainConfig chainConfig, IOperationTracker operationTracker, IOperatingSystemMediator operatingSystemMediator) + : base(config, environment, chainConfig, operationTracker, operatingSystemMediator) { _config = config; } diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/chainsafe.web3-unity.web3auth.asmdef b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/chainsafe.web3-unity.web3auth.asmdef index f0dfa8586..c7bc5073e 100644 --- a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/chainsafe.web3-unity.web3auth.asmdef +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/chainsafe.web3-unity.web3auth.asmdef @@ -3,13 +3,15 @@ "rootNamespace": "", "references": [ "GUID:5426c6b788696eb4c88f4198b59839eb", - "Unity.TextMeshPro" + "GUID:6055be8ebefd69e48b49212b09b47b2f" ], "includePlatforms": [], "excludePlatforms": [], "allowUnsafeCode": false, "overrideReferences": false, - "precompiledReferences": [], + "precompiledReferences": [ + "Nethereum.Signer.dll" + ], "autoReferenced": true, "defineConstraints": [], "versionDefines": [], diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Debugging.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Debugging.dll index 54256d59f..498eaca35 100644 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Debugging.dll and b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Debugging.dll differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Gelato.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Gelato.dll index dcb068ed2..913b6ecf1 100644 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Gelato.dll and b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Gelato.dll differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.InProcessSigner.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.InProcessSigner.dll index 675a91021..d4568e29c 100644 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.InProcessSigner.dll and b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.InProcessSigner.dll differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.InProcessTransactionExecutor.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.InProcessTransactionExecutor.dll index 0d396851c..021537bde 100644 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.InProcessTransactionExecutor.dll and b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.InProcessTransactionExecutor.dll differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Marketplace.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Marketplace.dll index b8df79549..898a79342 100644 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Marketplace.dll and b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Marketplace.dll differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Reown.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Reown.dll index cb1f86e8f..70dca84c6 100644 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Reown.dll and b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Reown.dll differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.SygmaClient.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.SygmaClient.dll index 8cba8ed54..d17afdf8f 100644 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.SygmaClient.dll and b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.SygmaClient.dll differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.EthereumWindow.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.EthereumWindow.dll index f9b9a8308..b5d7c4289 100644 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.EthereumWindow.dll and b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.EthereumWindow.dll differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.MetaMask.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.MetaMask.dll index aa9a7d319..f0cf3ede6 100644 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.MetaMask.dll and b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.MetaMask.dll differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.ThirdParty.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.ThirdParty.dll index 713bb52ae..38ede5f69 100644 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.ThirdParty.dll and b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.ThirdParty.dll differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.dll index c75d7d1a9..20b63f55e 100644 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.dll and b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.Unity.dll differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.dll index 723861ad0..612c98125 100644 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.dll and b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/ChainSafe.Gaming.dll differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/Nethereum.Signer.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/Nethereum.Signer.dll deleted file mode 100755 index 4fdb46c6f..000000000 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/Nethereum.Signer.dll and /dev/null differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/Nethereum.Signer.dll.meta b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/Nethereum.Signer.dll.meta deleted file mode 100644 index 9153f24bd..000000000 --- a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/Nethereum.Signer.dll.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: 1315cf3b9d584c38bbda0a17239b5ecc -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 1 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/Nethereum.Web3.dll b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/Nethereum.Web3.dll deleted file mode 100644 index 49b364684..000000000 Binary files a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/Nethereum.Web3.dll and /dev/null differ diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/Nethereum.Web3.dll.meta b/Packages/io.chainsafe.web3-unity/Runtime/Libraries/Nethereum.Web3.dll.meta deleted file mode 100644 index 1033f22e7..000000000 --- a/Packages/io.chainsafe.web3-unity/Runtime/Libraries/Nethereum.Web3.dll.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: f65917bc849a476692cef16063b2d614 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 1 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Plugins/Countly/csc.rsp.meta b/Packages/io.chainsafe.web3-unity/Runtime/Plugins/Countly/csc.rsp.meta deleted file mode 100644 index b29495dcd..000000000 --- a/Packages/io.chainsafe.web3-unity/Runtime/Plugins/Countly/csc.rsp.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a24005f16a377574c88b9a818a391065 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Reown/AppKit/ReownWebGLProvider.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Reown/AppKit/ReownWebGLProvider.cs index 750a9e0eb..c7c12de36 100644 --- a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Reown/AppKit/ReownWebGLProvider.cs +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Reown/AppKit/ReownWebGLProvider.cs @@ -40,7 +40,7 @@ public class ReownWebGLProvider : WalletProvider, ILifecycleParticipant, IConnec public ReownWebGLProvider(ReownHttpClient httpClient, IChainConfigSet chains, IReownConfig reownConfig, ILogWriter logWriter, Web3Environment web3Environment, IChainManager chainManager, - IOperationTracker operationTracker) : base(web3Environment, chainManager.Current, operationTracker) + IOperationTracker operationTracker, IOperatingSystemMediator operatingSystemMediator) : base(web3Environment, chainManager.Current, operationTracker, operatingSystemMediator) { _httpClient = httpClient; _chains = chains; diff --git a/src/ChainSafe.Gaming.HyperPlay/HyperPlayProvider.cs b/src/ChainSafe.Gaming.HyperPlay/HyperPlayProvider.cs index 4d2099582..62759806c 100644 --- a/src/ChainSafe.Gaming.HyperPlay/HyperPlayProvider.cs +++ b/src/ChainSafe.Gaming.HyperPlay/HyperPlayProvider.cs @@ -31,14 +31,16 @@ public class HyperPlayProvider : WalletProvider /// Injected . /// ChainConfig to fetch chain data. /// Injected . + /// Injected . public HyperPlayProvider( IHyperPlayConfig config, IHyperPlayData data, ILocalStorage localStorage, Web3Environment environment, IChainConfig chainConfig, - IOperationTracker operationTracker) - : base(environment, chainConfig, operationTracker) + IOperationTracker operationTracker, + IOperatingSystemMediator operatingSystemMediator) + : base(environment, chainConfig, operationTracker, operatingSystemMediator) { this.config = config; this.data = data; diff --git a/src/ChainSafe.Gaming.Reown/ReownProvider.cs b/src/ChainSafe.Gaming.Reown/ReownProvider.cs index 7176f3247..e3e621456 100644 --- a/src/ChainSafe.Gaming.Reown/ReownProvider.cs +++ b/src/ChainSafe.Gaming.Reown/ReownProvider.cs @@ -71,8 +71,9 @@ public ReownProvider( Web3Environment environment, ReownHttpClient reownHttpClient, IOperationTracker operationTracker, - IRpcProvider rpcProvider) - : base(environment, chainConfig, operationTracker) + IRpcProvider rpcProvider, + IOperatingSystemMediator operatingSystemMediator) + : base(environment, chainConfig, operationTracker, operatingSystemMediator) { this.operationTracker = operationTracker; this.rpcProvider = rpcProvider; @@ -139,62 +140,61 @@ private async Task Initialize() ReownLogger.Instance = new ReownLogWriter(logWriter, config); - using (operationTracker.TrackOperation("Initializing the Reown module...")) - { - var storage = await ReownStorageFactory.Build(environment); - var signClientOptions = new SignClientOptions - { - ProjectId = config.ProjectId, - Name = config.ProjectName, - Metadata = config.Metadata, - BaseContext = config.BaseContext, - Storage = storage, - KeyChain = new KeyChain(storage), - ConnectionBuilder = config.ConnectionBuilder, - RelayUrlBuilder = config.RelayUrlBuilder, - }; - SignClient = await SignClient.Init(signClientOptions); - await SignClient.AddressProvider.LoadDefaultsAsync(); + var storage = await ReownStorageFactory.Build(environment); + var signClientOptions = new SignClientOptions + { + ProjectId = config.ProjectId, + Name = config.ProjectName, + Metadata = config.Metadata, + BaseContext = config.BaseContext, + Storage = storage, + KeyChain = new KeyChain(storage), + ConnectionBuilder = config.ConnectionBuilder, + RelayUrlBuilder = config.RelayUrlBuilder, + }; + + SignClient = await SignClient.Init(signClientOptions); + await SignClient.AddressProvider.LoadDefaultsAsync(); + + if (config.OnRelayErrored is not null) + { + SignClient.CoreClient.Relayer.OnErrored += config.OnRelayErrored; + } - if (config.OnRelayErrored is not null) + var optionalNamespace = + new ProposedNamespace // todo using optional namespaces like AppKit does, should they be required? { - SignClient.CoreClient.Relayer.OnErrored += config.OnRelayErrored; - } - - var optionalNamespace = - new ProposedNamespace // todo using optional namespaces like AppKit does, should they be required? + Chains = chainConfigSet.Configs + .Select(chainEntry => chainEntry.ChainId) + .ToArray(), + Methods = new[] { - Chains = chainConfigSet.Configs - .Select(chainEntry => chainEntry.ChainId) - .ToArray(), - Methods = new[] - { - "eth_sign", - "personal_sign", - "eth_signTypedData", - "eth_signTransaction", - "eth_sendTransaction", - "eth_chainId", - "eth_getTransactionByHash", - "wallet_switchEthereumChain", - "wallet_addEthereumChain", - "eth_blockNumber", - }, - Events = new[] - { - "chainChanged", - "accountsChanged", - }, - }; - - optionalNamespaces = new Dictionary - { - { EvmNamespace, optionalNamespace }, + "eth_sign", + "personal_sign", + "eth_signTypedData", + "eth_signTransaction", + "eth_sendTransaction", + "eth_chainId", + "eth_getTransactionByHash", + "wallet_switchEthereumChain", + "wallet_addEthereumChain", + "eth_blockNumber", + }, + Events = new[] + { + "chainChanged", + "accountsChanged", + }, }; - initialized = true; - } + optionalNamespaces = new Dictionary + { + { EvmNamespace, optionalNamespace }, + }; + + initialized = true; + } protected override Task GetWalletChainId() @@ -314,13 +314,9 @@ private async Task ConnectSession() { ConnectedData connectedData; IConnectionHandler connectionHandler; - - using (operationTracker.TrackOperation("Initializing a new Reown session...")) - { - var connectOptions = new ConnectOptions { OptionalNamespaces = optionalNamespaces }; - connectedData = await SignClient.Connect(connectOptions); - connectionHandler = await config.ConnectionHandlerProvider.ProvideHandler(); - } + var connectOptions = new ConnectOptions { OptionalNamespaces = optionalNamespaces }; + connectedData = await SignClient.Connect(connectOptions); + connectionHandler = await config.ConnectionHandlerProvider.ProvideHandler(); try { diff --git a/src/ChainSafe.Gaming.Unity.MetaMask/MetaMaskProvider.cs b/src/ChainSafe.Gaming.Unity.MetaMask/MetaMaskProvider.cs index 433b0aa92..683c61aea 100644 --- a/src/ChainSafe.Gaming.Unity.MetaMask/MetaMaskProvider.cs +++ b/src/ChainSafe.Gaming.Unity.MetaMask/MetaMaskProvider.cs @@ -28,12 +28,15 @@ public class MetaMaskProvider : WalletProvider /// Injected . /// Injected . /// Injected . + /// Injected . + /// Injected public MetaMaskProvider( Web3Environment environment, IChainConfig chainConfig, ChainRegistryProvider chainRegistryProvider, - IOperationTracker operationTracker) - : base(environment, chainConfig, operationTracker) + IOperationTracker operationTracker, + IOperatingSystemMediator operatingSystemMediator) + : base(environment, chainConfig, operationTracker, operatingSystemMediator) { logWriter = environment.LogWriter; this.chainConfig = chainConfig; diff --git a/src/ChainSafe.Gaming/Web3/Evm/Wallet/WalletProvider.cs b/src/ChainSafe.Gaming/Web3/Evm/Wallet/WalletProvider.cs index 2eab858ac..9383dfa1d 100644 --- a/src/ChainSafe.Gaming/Web3/Evm/Wallet/WalletProvider.cs +++ b/src/ChainSafe.Gaming/Web3/Evm/Wallet/WalletProvider.cs @@ -9,34 +9,37 @@ namespace ChainSafe.Gaming.Web3.Evm.Wallet { /// - /// Concrete implementation of . + /// Concrete implementation of . /// - public abstract class WalletProvider : RpcClientProvider, IWalletProvider, IChainSwitchHandler // todo make sure chain id is in sync for wallet and sdk + public abstract class + WalletProvider : RpcClientProvider, IWalletProvider, + IChainSwitchHandler // todo make sure chain id is in sync for wallet and sdk { - private readonly ILogWriter logWriter; private readonly IChainConfig chainConfig; + private readonly ILogWriter logWriter; + private readonly IOperatingSystemMediator operatingSystemMediator; private readonly IOperationTracker operationTracker; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// - /// Injected . - /// Injected . - /// Injected . - protected WalletProvider(Web3Environment environment, IChainConfig chainConfig, IOperationTracker operationTracker) + /// Injected . + /// Injected . + /// Injected . + /// Injected . + protected WalletProvider( + Web3Environment environment, + IChainConfig chainConfig, + IOperationTracker operationTracker, + IOperatingSystemMediator operatingSystemMediator) : base(environment, chainConfig) { this.operationTracker = operationTracker; + this.operatingSystemMediator = operatingSystemMediator; this.chainConfig = chainConfig; - this.logWriter = environment.LogWriter; + logWriter = environment.LogWriter; } - public abstract Task Connect(); - - public abstract Task Disconnect(); - - public abstract Task Request(string method, params object[] parameters); // todo sync wallet chain id before sending any other request - public virtual async Task HandleChainSwitching() { try @@ -45,29 +48,18 @@ public virtual async Task HandleChainSwitching() } catch (Exception ex) { - throw new Web3Exception($"Error occured while trying to switch wallet chain.", ex); + throw new Web3Exception("Error occured while trying to switch wallet chain.", ex); } } - private async Task SwitchChain(IChainConfig chainId) - { - await SwitchChainAddIfMissing(chainId); - } - - protected virtual async Task GetWalletChainId() - { - var rawHexChainId = await Request( - "eth_chainId"); - rawHexChainId = rawHexChainId.Replace("0x", string.Empty); - ulong number = Convert.ToUInt64(rawHexChainId, 16); + public abstract Task Connect(); - return number.ToString(CultureInfo.InvariantCulture); - } + public abstract Task Disconnect(); - public string GetChainId(string chainId) - { - return "0x" + ulong.Parse(chainId).ToString("X"); - } + public abstract Task + Request( + string method, + params object[] parameters); // todo sync wallet chain id before sending any other request public virtual async Task SwitchChainAddIfMissing(IChainConfig config = null) { @@ -84,7 +76,7 @@ public virtual async Task SwitchChainAddIfMissing(IChainConfig config = null) } catch (Exception) { - logWriter.Log($"Chain Id isn't present in the wallet. Adding it..."); + logWriter.Log("Chain Id isn't present in the wallet. Adding it..."); } var addChainParameter = new @@ -101,34 +93,66 @@ public virtual async Task SwitchChainAddIfMissing(IChainConfig config = null) blockExplorerUrls = new[] { chainConfig.BlockExplorerUrl }, }; - using (operationTracker.TrackOperation($"Switching the network to: {chainConfig.Chain}...\n(The network will be added if it's missing)")) + try { - try + if (operatingSystemMediator.IsMobilePlatform) { - // this will switch to the network and add it to the wallet if it's missing await Task.Run(() => Request("wallet_addEthereumChain", addChainParameter)); } - catch (Exception ex) + else { - if (ex.Message.Contains("May not specify default MetaMask chain", StringComparison.InvariantCultureIgnoreCase)) + await Request("wallet_addEthereumChain", addChainParameter); + } + } + catch (Exception ex) + { + if (ex.Message.Contains( + "May not specify default MetaMask chain", + StringComparison.InvariantCultureIgnoreCase)) + { + if (operatingSystemMediator.IsMobilePlatform) + { + await Task.Run(SwitchToDefaultMetaMaskChain); + } + else { await SwitchToDefaultMetaMaskChain(); - return; } - logWriter.LogError($"Failed to add or switch to the network: {ex.Message}"); - throw new InvalidOperationException("Failed to add or switch to the network.", ex); + return; } + + logWriter.LogError($"Failed to add or switch to the network: {ex.Message}"); + throw new InvalidOperationException("Failed to add or switch to the network.", ex); } } + private async Task SwitchChain(IChainConfig chainId) + { + await SwitchChainAddIfMissing(chainId); + } + + protected virtual async Task GetWalletChainId() + { + var rawHexChainId = await Request( + "eth_chainId"); + rawHexChainId = rawHexChainId.Replace("0x", string.Empty); + var number = Convert.ToUInt64(rawHexChainId, 16); + + return number.ToString(CultureInfo.InvariantCulture); + } + + public string GetChainId(string chainId) + { + return "0x" + ulong.Parse(chainId).ToString("X"); + } + /// - /// Switching to the default chain (either mainnet or sepolia) in MetaMask. + /// Switching to the default chain (either mainnet or sepolia) in MetaMask. /// /// Switching to the desired chain is not successful. private async Task SwitchToDefaultMetaMaskChain() { - using (operationTracker.TrackOperation($"Switching the network to: {chainConfig.Chain}...")) { try { @@ -144,4 +168,4 @@ await Request( } } } -} +} \ No newline at end of file diff --git a/src/UnitySampleProject/Assets/Tests/Anvil/AnvilProvider.cs b/src/UnitySampleProject/Assets/Tests/Anvil/AnvilProvider.cs index 68aee57f9..937e85e81 100644 --- a/src/UnitySampleProject/Assets/Tests/Anvil/AnvilProvider.cs +++ b/src/UnitySampleProject/Assets/Tests/Anvil/AnvilProvider.cs @@ -16,8 +16,8 @@ public class AnvilProvider : WalletProvider, IAccountProvider { public IAccount Account { get; private set; } - public AnvilProvider(Web3Environment environment, IChainConfig chainConfig, IOperationTracker operationTracker) - : base(environment, chainConfig, operationTracker) + public AnvilProvider(Web3Environment environment, IChainConfig chainConfig, IOperationTracker operationTracker, IOperatingSystemMediator mediator) + : base(environment, chainConfig, operationTracker, mediator) { // Initialize account via private key Account = new Account("0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"); diff --git a/src/UnitySampleProject/Assets/csc.rsp.meta b/src/UnitySampleProject/Assets/csc.rsp.meta deleted file mode 100644 index b7d246f8d..000000000 --- a/src/UnitySampleProject/Assets/csc.rsp.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 8630a7b4d41c54991bb6abdad2d1bbe6 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/UnitySampleProject/ProjectSettings/PackageManagerSettings.asset b/src/UnitySampleProject/ProjectSettings/PackageManagerSettings.asset index 2ecba18d0..ff1307679 100644 --- a/src/UnitySampleProject/ProjectSettings/PackageManagerSettings.asset +++ b/src/UnitySampleProject/ProjectSettings/PackageManagerSettings.asset @@ -50,6 +50,6 @@ MonoBehaviour: m_RegistryInfoDraft: m_Modified: 0 m_ErrorMessage: - m_UserModificationsInstanceId: -834 - m_OriginalInstanceId: -836 + m_UserModificationsInstanceId: -854 + m_OriginalInstanceId: -858 m_LoadAssets: 0