using System.Threading.Tasks; using Nethereum.RPC.Eth.DTOs; using Nethereum.RPC.HostWallet; namespace WalletConnectUnity.Nethereum { public abstract class WalletConnectService { public virtual bool IsWalletConnected { get => false; } public bool IsMethodSupported(string method) { if (string.IsNullOrEmpty(method)) throw new System.ArgumentException("Method cannot be null or empty", nameof(method)); return IsMethodSupportedCore(method); } public Task SendTransactionAsync(TransactionInput transaction) { return SendTransactionAsyncCore(transaction); } public Task PersonalSignAsync(string message) { if (string.IsNullOrEmpty(message)) throw new System.ArgumentException("Message cannot be null or empty", nameof(message)); return PersonalSignAsyncCore(message); } public Task EthSignTypedDataV4Async(string data) { if (string.IsNullOrEmpty(data)) throw new System.ArgumentException("Data cannot be null or empty", nameof(data)); return EthSignTypedDataV4AsyncCore(data); } public Task WalletSwitchEthereumChainAsync(SwitchEthereumChainParameter chainId) { return WalletSwitchEthereumChainAsyncCore(chainId); } public Task WalletAddEthereumChainAsync(AddEthereumChainParameter chain) { return WalletAddEthereumChainAsyncCore(chain); } protected abstract bool IsMethodSupportedCore(string method); protected abstract Task SendTransactionAsyncCore(TransactionInput transaction); protected abstract Task PersonalSignAsyncCore(string message); protected abstract Task EthSignTypedDataV4AsyncCore(string data); protected abstract Task WalletSwitchEthereumChainAsyncCore(SwitchEthereumChainParameter chainId); protected abstract Task WalletAddEthereumChainAsyncCore(AddEthereumChainParameter chain); } }