Skip to content

Commit 9d6c1db

Browse files
committed
Evm service
1 parent a1dd7a0 commit 9d6c1db

17 files changed

Lines changed: 478 additions & 135 deletions

File tree

Packages/com.walletconnect.web3modal/Plugins/Web3Modal.jslib

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ mergeInto(LibraryManager.library, {
2222

2323
$ExecuteCall__deps: ['$SerializeJson'],
2424
$ExecuteCall: async function (callFn, id, methodNameStrPtr, parameterStrPtr, callbackPtr) {
25-
console.log("Executing call");
2625
if (!_web3ModalConfig) {
2726
console.error("Web3Modal is not initialized. Call Initialize first.");
2827
return;
@@ -35,26 +34,22 @@ mergeInto(LibraryManager.library, {
3534
let parameterObj = parameterStr === "" ? undefined : JSON.parse(parameterStr);
3635

3736
try {
38-
console.log(`Calling method`, methodName, parameterObj);
39-
4037
// Call the method using the provided function
4138
let result = await callFn(_web3ModalConfig, methodName, parameterObj);
4239

4340
if (!result) {
4441
{{{makeDynCall('viii', 'callbackPtr')}}} (id, undefined, undefined);
4542
return;
4643
}
47-
48-
// Convert the result to JSON
49-
let cache = [];
44+
5045
let resultJson = SerializeJson(result);
5146

5247
// Call the callback with the result
5348
let resultStrPtr = stringToNewUTF8(resultJson);
5449
{{{makeDynCall('viii', 'callbackPtr')}}} (id, resultStrPtr, undefined);
5550
_free(resultStrPtr);
5651
} catch (error) {
57-
console.log("Error!", error);
52+
console.error("[Web3Modal] Error executing call", error);
5853
let errorJson = JSON.stringify(error, ['name', 'message']);
5954
let errorStrPtr = stringToNewUTF8(errorJson);
6055
{{{makeDynCall('viii', 'callbackPtr')}}} (id, undefined, errorStrPtr);
@@ -73,16 +68,12 @@ mergeInto(LibraryManager.library, {
7368

7469
const enableOnramp = parameters.enableOnramp;
7570

76-
console.log("Parameters", parameters);
77-
7871
// Load the scripts and initialize the configuration
79-
import("https://cdn.jsdelivr.net/npm/cdn-wagmi@3.0.0/dist/cdn-wagmi.js").then(CDNW3M => {
72+
import("https://cdn.jsdelivr.net/npm/@web3modal/cdn@4.2.4-cn-webgl.2/dist/wagmi.js").then(CDNW3M => {
8073
const { WagmiCore, Chains, Web3modal, Connectors } = CDNW3M;
8174
const { createWeb3Modal } = Web3modal;
8275
const { coinbaseWallet, walletConnect, injected } = Connectors;
8376
const { createConfig, http, reconnect } = WagmiCore;
84-
85-
console.log("Web3Modal loaded from CDN");
8677

8778
const chainsMap = chains.map(chainName => Chains[chainName]);
8879

@@ -107,7 +98,8 @@ mergeInto(LibraryManager.library, {
10798
const modal = createWeb3Modal({
10899
wagmiConfig: config,
109100
projectId,
110-
enableOnramp: enableOnramp
101+
enableOnramp: enableOnramp,
102+
disableAppend: true
111103
});
112104

113105
// Store the configuration and modal globally
@@ -125,6 +117,10 @@ mergeInto(LibraryManager.library, {
125117
canvas.parentNode.insertBefore(container, canvas);
126118
container.appendChild(canvas);
127119

120+
const web3modal = document.createElement('w3m-modal')
121+
container.appendChild(web3modal)
122+
123+
128124
// Add styles to enable fullscreen compatibility
129125
const addCanvasActiveStyles = () => {
130126
const styleElement = document.createElement('style');
@@ -141,9 +137,6 @@ mergeInto(LibraryManager.library, {
141137
}
142138
`;
143139
document.head.appendChild(styleElement);
144-
145-
const web3modal = document.createElement('w3m-modal');
146-
container.appendChild(web3modal);
147140
};
148141

149142
const removeCanvasActiveStyles = () => {
@@ -176,7 +169,6 @@ mergeInto(LibraryManager.library, {
176169
ModalCall__deps: ['$ExecuteCall'],
177170
ModalCall: async function (id, methodNameStrPtr, parameterStrPtr, callbackPtr) {
178171
const callFn = async (web3modalConfig, methodName, parameterObj) => {
179-
console.log("ModalCall", methodName, parameterObj, web3modalConfig);
180172
return await web3modalConfig.modal[methodName](parameterObj);
181173
};
182174
await ExecuteCall(callFn, id, methodNameStrPtr, parameterStrPtr, callbackPtr);

Packages/com.walletconnect.web3modal/Runtime/Connectors/WebGl/WebGlConnectionProposal.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
namespace WalletConnect.Web3Modal
55
{
6+
#if UNITY_WEBGL
67
public class WebGlConnectionProposal : ConnectionProposal
78
{
89
private bool _disposed;
@@ -32,4 +33,5 @@ protected override void Dispose(bool disposing)
3233
}
3334
}
3435
}
36+
#endif
3537
}

Packages/com.walletconnect.web3modal/Runtime/Connectors/WebGl/WebGlConnector.cs

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,11 @@
1212

1313
namespace WalletConnect.Web3Modal
1414
{
15+
#if UNITY_WEBGL
1516
public class WebGlConnector : Connector
1617
{
1718

18-
#if UNITY_WEBGL
1919
[DllImport("__Internal")]
20-
#endif
2120
private static extern void Initialize(string parameters, Action callback);
2221

2322
private static TaskCompletionSource<bool> _initializationTaskCompletionSource;
@@ -48,9 +47,7 @@ protected override async Task InitializeAsyncCore(Web3ModalConfig web3ModalConfi
4847
};
4948

5049
var parametersJson = JsonConvert.SerializeObject(parameters);
51-
52-
Debug.Log($"Parameters json:\n: {parametersJson}");
53-
50+
5451
#pragma warning disable S2696
5552
_initializationTaskCompletionSource = new TaskCompletionSource<bool>();
5653
#pragma warning restore S2696
@@ -68,43 +65,36 @@ protected override async Task InitializeAsyncCore(Web3ModalConfig web3ModalConfi
6865

6966
protected override ConnectionProposal ConnectCore()
7067
{
71-
Debug.Log($"Webgl connector returns connection proposal");
7268
return new WebGlConnectionProposal(this);
7369
}
7470

7571
protected override async Task<bool> TryResumeSessionAsyncCore()
7672
{
77-
Debug.Log("TryResumeSessionAsyncCore");
7873

7974
var getAccountResult = await WagmiInterop.GetAccountAsync();
8075

8176
if (getAccountResult.isConnected)
8277
{
83-
Debug.Log("TryResumeSessionAsyncCore. Already connected.");
8478
return true;
8579
}
8680

8781
if (getAccountResult.isConnecting)
8882
{
89-
Debug.Log($"TryResumeSessionAsyncCore Connecting");
9083
var tcs = new TaskCompletionSource<bool>();
9184

9285
WagmiInterop.WatchAccountTriggered += WagmiInteropOnWatchAccountTriggered;
9386

9487
void WagmiInteropOnWatchAccountTriggered(GetAccountReturnType arg)
9588
{
96-
Debug.Log($"TryResumeSessionAsyncCore Connecting handler got status: {arg.status}");
9789
if (arg.isConnecting)
9890
return;
9991

100-
Debug.Log("TryResumeSessionAsyncCore Connecting handler got isConnected!");
10192
tcs.SetResult(arg.isConnected);
10293

10394
WagmiInterop.WatchAccountTriggered -= WagmiInteropOnWatchAccountTriggered;
10495
}
10596
var result = await tcs.Task;
10697

107-
Debug.Log($"TryResumeSessionAsyncCore tcs resolved to {result}");
10898
return result;
10999
}
110100
else
@@ -140,8 +130,6 @@ protected override async Task<Account[]> GetAccountsCore()
140130

141131
private void WatchAccountTriggeredHandler(GetAccountReturnType arg)
142132
{
143-
Debug.Log($"WatchAccountTriggeredHandler. Last status: {_lastAccountStatus}. New status: {arg.status}");
144-
145133
var previousLastAccountStatus = _lastAccountStatus;
146134
_lastAccountStatus = arg.status;
147135

@@ -156,7 +144,6 @@ private void WatchAccountTriggeredHandler(GetAccountReturnType arg)
156144
else if (_lastAccountStatus == "disconnected" && previousLastAccountStatus != "disconnected")
157145
{
158146
IsAccountConnected = false;
159-
Debug.Log("WebGL connector OnAccountDisconnected");
160147
OnAccountDisconnected(AccountDisconnectedEventArgs.Empty);
161148
}
162149
else
@@ -192,4 +179,5 @@ internal class WebGlInitializeParameters
192179
public bool enableEmail;
193180
public bool enableOnramp;
194181
}
182+
#endif
195183
}

Packages/com.walletconnect.web3modal/Runtime/Evm.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
using System;
2+
using System.Numerics;
3+
using System.Threading.Tasks;
4+
5+
namespace WalletConnect.Web3Modal
6+
{
7+
public abstract class EvmService
8+
{
9+
public Task InitializeAsync()
10+
{
11+
return InitializeAsyncCore();
12+
}
13+
14+
// -- Get Balance ---------------------------------------------
15+
16+
public Task<BigInteger> GetBalanceAsync(string address)
17+
{
18+
if (string.IsNullOrWhiteSpace(address))
19+
throw new ArgumentNullException(nameof(address));
20+
21+
return GetBalanceAsyncCore(address);
22+
}
23+
24+
25+
// -- Sign Message ---------------------------------------------
26+
27+
public Task<string> SignMessageAsync(string message)
28+
{
29+
if (string.IsNullOrWhiteSpace(message))
30+
throw new ArgumentNullException(nameof(message));
31+
32+
return SignMessageAsyncCore(message);
33+
}
34+
35+
36+
// -- Sign Typed Data ------------------------------------------
37+
38+
public Task<string> SignTypedDataAsync(string data)
39+
{
40+
if (string.IsNullOrWhiteSpace(data))
41+
throw new ArgumentNullException(nameof(data));
42+
43+
return SignTypedDataAsyncCore(data);
44+
}
45+
46+
47+
// -- Verify Message -------------------------------------------
48+
49+
public Task<bool> VerifyMessageSignatureAsync(string address, string message, string signature)
50+
{
51+
if (string.IsNullOrWhiteSpace(address))
52+
throw new ArgumentNullException(nameof(address));
53+
if (string.IsNullOrWhiteSpace(message))
54+
throw new ArgumentNullException(nameof(message));
55+
if (string.IsNullOrWhiteSpace(signature))
56+
throw new ArgumentNullException(nameof(signature));
57+
58+
return VerifyMessageSignatureAsyncCore(address, message, signature);
59+
}
60+
61+
62+
// -- Verify Typed Data ----------------------------------------
63+
64+
public Task<bool> VerifyTypedDataSignatureAsync(string address, string data, string signature)
65+
{
66+
if (string.IsNullOrWhiteSpace(address))
67+
throw new ArgumentNullException(nameof(address));
68+
if (string.IsNullOrWhiteSpace(data))
69+
throw new ArgumentNullException(nameof(data));
70+
if (string.IsNullOrWhiteSpace(signature))
71+
throw new ArgumentNullException(nameof(signature));
72+
73+
return VerifyTypedDataSignatureAsyncCore(address, data, signature);
74+
}
75+
76+
77+
// -- Read Contract -------------------------------------------
78+
79+
public Task<TReturn> ReadContractAsync<TReturn>(string contractAddress, string contractAbi, string methodName, object[] arguments = null)
80+
{
81+
return ReadContractAsyncCore<TReturn>(contractAddress, contractAbi, methodName, arguments);
82+
}
83+
84+
85+
// -- Write Contract ------------------------------------------
86+
87+
public Task<string> WriteContractAsync(string contractAddress, string contractAbi, string methodName, params object[] arguments)
88+
{
89+
return WriteContractAsync(contractAddress, contractAbi, methodName, default, default, arguments);
90+
}
91+
92+
public Task<string> WriteContractAsync(string contractAddress, string contractAbi, string methodName, BigInteger value = default, BigInteger gas = default, params object[] arguments)
93+
{
94+
return WriteContractAsyncCore(contractAddress, contractAbi, methodName, value, gas, arguments);
95+
}
96+
97+
98+
// -- Send Transaction ----------------------------------------
99+
100+
public Task<string> SendTransactionAsync(string addressTo, BigInteger value, string data = null)
101+
{
102+
if (string.IsNullOrWhiteSpace(data))
103+
throw new ArgumentNullException(nameof(addressTo));
104+
105+
return SendTransactionAsyncCore(addressTo, value, data);
106+
}
107+
108+
protected abstract Task InitializeAsyncCore();
109+
protected abstract Task<BigInteger> GetBalanceAsyncCore(string address);
110+
protected abstract Task<string> SignMessageAsyncCore(string message);
111+
protected abstract Task<bool> VerifyMessageSignatureAsyncCore(string address, string message, string signature);
112+
protected abstract Task<string> SignTypedDataAsyncCore(string dataJson);
113+
protected abstract Task<bool> VerifyTypedDataSignatureAsyncCore(string address, string dataJson, string signature);
114+
protected abstract Task<TReturn> ReadContractAsyncCore<TReturn>(string contractAddress, string contractAbi, string methodName, object[] arguments = null);
115+
protected abstract Task<string> WriteContractAsyncCore(string contractAddress, string contractAbi, string methodName, BigInteger value = default, BigInteger gas = default, params object[] arguments);
116+
protected abstract Task<string> SendTransactionAsyncCore(string addressTo, BigInteger value, string data = null);
117+
}
118+
}

Packages/com.walletconnect.web3modal/Runtime/Evm/EvmService.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)