@multiversx/sdk-dapp-liquidity 1.1.7 → 2.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +7 -0
- package/index.mjs +8 -1
- package/package.json +19 -16
- package/reactjs/adapters/SuiAdapter.d.ts +60 -0
- package/reactjs/adapters/SuiAdapter.js +350 -0
- package/reactjs/adapters/SuiAdapter.mjs +349 -0
- package/reactjs/components/AmountInput/AmountInput.js +1 -1
- package/reactjs/components/AmountInput/AmountInput.mjs +1 -1
- package/reactjs/components/BridgeForm/Deposit.js +57 -18
- package/reactjs/components/BridgeForm/Deposit.mjs +57 -18
- package/reactjs/components/BridgeForm/Transfer.js +17 -10
- package/reactjs/components/BridgeForm/Transfer.mjs +17 -10
- package/reactjs/components/BridgeForm/hooks/useBridgeTokenSelection.js +31 -9
- package/reactjs/components/BridgeForm/hooks/useBridgeTokenSelection.mjs +31 -9
- package/reactjs/components/BridgeForm/utils/bridgeFormHelpers.d.ts +6 -0
- package/reactjs/components/BridgeForm/utils/bridgeFormHelpers.js +18 -0
- package/reactjs/components/BridgeForm/utils/bridgeFormHelpers.mjs +18 -0
- package/reactjs/components/BridgeHistory/BridgeHistory.js +2 -2
- package/reactjs/components/BridgeHistory/BridgeHistory.mjs +2 -2
- package/reactjs/components/Connect/BridgeAccountDisplay.js +77 -25
- package/reactjs/components/Connect/BridgeAccountDisplay.mjs +77 -25
- package/reactjs/components/Connect/BridgeConnectButton.js +1 -1
- package/reactjs/components/Connect/BridgeConnectButton.mjs +1 -1
- package/reactjs/components/Connect/ChainSelectConnect.d.ts +7 -0
- package/reactjs/components/Connect/ChainSelectConnect.js +144 -0
- package/reactjs/components/Connect/ChainSelectConnect.mjs +143 -0
- package/reactjs/components/Connect/MvxAccountDisplay.js +17 -3
- package/reactjs/components/Connect/MvxAccountDisplay.mjs +17 -3
- package/reactjs/components/Connect/MvxConnectButton.js +2 -2
- package/reactjs/components/Connect/MvxConnectButton.mjs +2 -2
- package/reactjs/components/Connect/index.d.ts +1 -0
- package/reactjs/components/Connect/index.js +2 -0
- package/reactjs/components/Connect/index.mjs +2 -0
- package/reactjs/components/TokenSelector/components/TokenItem.js +11 -1
- package/reactjs/components/TokenSelector/components/TokenItem.mjs +11 -1
- package/reactjs/components/TrimAddress/TrimAddress.js +1 -1
- package/reactjs/components/TrimAddress/TrimAddress.mjs +1 -1
- package/reactjs/components/index.js +2 -0
- package/reactjs/components/index.mjs +2 -0
- package/reactjs/constants/chains.d.ts +7 -1
- package/reactjs/constants/chains.js +6 -0
- package/reactjs/constants/chains.mjs +6 -0
- package/reactjs/helpers/index.d.ts +1 -0
- package/reactjs/helpers/index.js +7 -0
- package/reactjs/helpers/index.mjs +6 -0
- package/reactjs/helpers/resolveBridgeApiChainId.d.ts +18 -0
- package/reactjs/helpers/resolveBridgeApiChainId.js +41 -0
- package/reactjs/helpers/resolveBridgeApiChainId.mjs +40 -0
- package/reactjs/hooks/index.d.ts +2 -0
- package/reactjs/hooks/index.js +4 -0
- package/reactjs/hooks/index.mjs +4 -0
- package/reactjs/hooks/useBridgeApiChainId.d.ts +2 -0
- package/reactjs/hooks/useBridgeApiChainId.js +14 -0
- package/reactjs/hooks/useBridgeApiChainId.mjs +13 -0
- package/reactjs/hooks/useFetchTokens.js +17 -17
- package/reactjs/hooks/useFetchTokens.mjs +17 -17
- package/reactjs/hooks/useGenericSignMessage.d.ts +1 -1
- package/reactjs/hooks/useGenericSignMessage.js +14 -0
- package/reactjs/hooks/useGenericSignMessage.mjs +14 -0
- package/reactjs/hooks/useSignTransaction.d.ts +418 -3
- package/reactjs/hooks/useSignTransaction.js +28 -0
- package/reactjs/hooks/useSignTransaction.mjs +28 -0
- package/reactjs/hooks/useSuiConnect.d.ts +8 -0
- package/reactjs/hooks/useSuiConnect.js +87 -0
- package/reactjs/hooks/useSuiConnect.mjs +86 -0
- package/reactjs/index.js +7 -0
- package/reactjs/index.mjs +8 -1
- package/reactjs/init/index.js +1 -0
- package/reactjs/init/index.mjs +2 -1
- package/reactjs/init/init.d.ts +9 -30
- package/reactjs/init/init.js +90 -9
- package/reactjs/init/init.mjs +91 -10
- package/reactjs/queries/useCheckAccount.query.js +4 -14
- package/reactjs/queries/useCheckAccount.query.mjs +4 -14
- package/reactjs/queries/useGetNonMvxTokensBalances.query.js +1 -0
- package/reactjs/queries/useGetNonMvxTokensBalances.query.mjs +1 -0
- package/style.css +51 -0
- package/types/chainType.d.ts +2 -1
- package/types/chainType.js +1 -0
- package/types/chainType.mjs +1 -0
- package/types/transaction.d.ts +5 -0
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
import { AdapterBlueprint, WalletConnectConnector, WcHelpersUtil } from "@reown/appkit-controllers";
|
|
5
|
+
const WC_ID = "walletConnect";
|
|
6
|
+
const DEFAULT_SUI_CAIP_CHAINS = ["sui:mainnet", "sui:testnet", "sui:devnet"];
|
|
7
|
+
class SuiAdapter extends AdapterBlueprint {
|
|
8
|
+
constructor(opts) {
|
|
9
|
+
super({
|
|
10
|
+
namespace: "sui",
|
|
11
|
+
adapterType: "sui"
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* AppKit’s single WalletConnect UniversalProvider (same instance as Wagmi/EVM).
|
|
15
|
+
* @see @reown/appkit-adapter-solana — adapters must NOT call UniversalProvider.init() again
|
|
16
|
+
* (duplicate Core breaks pairing / QR). `listenWalletConnect` attaches `display_uri` here only.
|
|
17
|
+
*/
|
|
18
|
+
__publicField(this, "sharedWcProvider");
|
|
19
|
+
__publicField(this, "explicitCaipChainsFromInit");
|
|
20
|
+
/**
|
|
21
|
+
* AppKit passes `networks` here from `createAppKit({ networks })` filtered by namespace.
|
|
22
|
+
* `ChainController.getRequestedCaipNetworks('sui')` is often still empty → we must keep this.
|
|
23
|
+
*/
|
|
24
|
+
__publicField(this, "suiNetworksFromConfig", []);
|
|
25
|
+
this.explicitCaipChainsFromInit = (opts == null ? void 0 : opts.explicitCaipChains) ?? [];
|
|
26
|
+
}
|
|
27
|
+
construct(params) {
|
|
28
|
+
super.construct(params);
|
|
29
|
+
this.suiNetworksFromConfig = params.networks ?? [];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Resolves CAIP-2 chain ids for the WC session. Never return [] (breaks pairing + QR UI).
|
|
33
|
+
*/
|
|
34
|
+
pickChainsFromExplicit(explicit, chainId) {
|
|
35
|
+
if (explicit.length === 0) {
|
|
36
|
+
return DEFAULT_SUI_CAIP_CHAINS;
|
|
37
|
+
}
|
|
38
|
+
if (chainId !== void 0 && chainId !== null) {
|
|
39
|
+
const cid = chainId.toString();
|
|
40
|
+
const match = explicit.find(
|
|
41
|
+
(c) => c === `sui:${cid}` || c.endsWith(`:${cid}`)
|
|
42
|
+
);
|
|
43
|
+
if (match) {
|
|
44
|
+
return [match];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return explicit;
|
|
48
|
+
}
|
|
49
|
+
resolveSuiChainsForConnect(chainId) {
|
|
50
|
+
const fromController = this.getCaipNetworks("sui");
|
|
51
|
+
const source = fromController.length > 0 ? fromController : this.suiNetworksFromConfig;
|
|
52
|
+
if (source.length === 0) {
|
|
53
|
+
return this.pickChainsFromExplicit(
|
|
54
|
+
this.explicitCaipChainsFromInit,
|
|
55
|
+
chainId
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
const toCaip = (n) => n.caipNetworkId || `sui:${n.id}`;
|
|
59
|
+
if (chainId !== void 0 && chainId !== null) {
|
|
60
|
+
const match = source.find((n) => {
|
|
61
|
+
var _a;
|
|
62
|
+
return ((_a = n.id) == null ? void 0 : _a.toString()) === chainId.toString();
|
|
63
|
+
});
|
|
64
|
+
if (match) {
|
|
65
|
+
return [toCaip(match)];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return source.map(toCaip);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* `WalletConnectConnector` typings require `caipNetworks` (ChainController may still be empty
|
|
72
|
+
* when this runs). Prefer networks from `construct`, else explicit/init CAIP ids.
|
|
73
|
+
*/
|
|
74
|
+
getCaipNetworksForWalletConnectConnector() {
|
|
75
|
+
if (this.suiNetworksFromConfig.length > 0) {
|
|
76
|
+
return this.suiNetworksFromConfig;
|
|
77
|
+
}
|
|
78
|
+
const caipIds = this.explicitCaipChainsFromInit.length > 0 ? this.explicitCaipChainsFromInit : DEFAULT_SUI_CAIP_CHAINS;
|
|
79
|
+
return caipIds.map((caip) => {
|
|
80
|
+
const id = caip.startsWith("sui:") ? caip.slice(4) : caip;
|
|
81
|
+
return {
|
|
82
|
+
id,
|
|
83
|
+
chainNamespace: "sui",
|
|
84
|
+
caipNetworkId: caip,
|
|
85
|
+
name: "Sui",
|
|
86
|
+
nativeCurrency: { name: "SUI", symbol: "SUI", decimals: 9 },
|
|
87
|
+
rpcUrls: {
|
|
88
|
+
default: { http: [`https://fullnode.${id}.sui.io:443`] }
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
syncConnectors() {
|
|
94
|
+
}
|
|
95
|
+
async setUniversalProvider(sharedProvider) {
|
|
96
|
+
this.sharedWcProvider = sharedProvider;
|
|
97
|
+
const wcConnector = new WalletConnectConnector({
|
|
98
|
+
provider: sharedProvider,
|
|
99
|
+
namespace: "sui",
|
|
100
|
+
caipNetworks: this.getCaipNetworksForWalletConnectConnector()
|
|
101
|
+
});
|
|
102
|
+
this.addConnector(wcConnector);
|
|
103
|
+
WcHelpersUtil.listenWcProvider({
|
|
104
|
+
universalProvider: sharedProvider,
|
|
105
|
+
namespace: "sui",
|
|
106
|
+
onConnect: (accounts) => this.onConnect(accounts, WC_ID),
|
|
107
|
+
onDisconnect: () => this.onDisconnect(WC_ID),
|
|
108
|
+
onAccountsChanged: (accounts) => this.onAccountsChanged(accounts, WC_ID, false)
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
getWcProvider() {
|
|
112
|
+
if (!this.sharedWcProvider) {
|
|
113
|
+
throw new Error(
|
|
114
|
+
"SuiAdapter: UniversalProvider not ready — setUniversalProvider must run before connect"
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
return this.sharedWcProvider;
|
|
118
|
+
}
|
|
119
|
+
async connectWalletConnect(chainId) {
|
|
120
|
+
var _a, _b;
|
|
121
|
+
const wc = this.getWcProvider();
|
|
122
|
+
if ((_b = (_a = wc.session) == null ? void 0 : _a.namespaces) == null ? void 0 : _b["sui"]) {
|
|
123
|
+
const clientId2 = await wc.client.core.crypto.getClientId();
|
|
124
|
+
return { clientId: clientId2 };
|
|
125
|
+
}
|
|
126
|
+
const chains = this.resolveSuiChainsForConnect(chainId);
|
|
127
|
+
const safeChains = chains.length > 0 ? chains : DEFAULT_SUI_CAIP_CHAINS;
|
|
128
|
+
await wc.connect({
|
|
129
|
+
optionalNamespaces: {
|
|
130
|
+
sui: {
|
|
131
|
+
methods: [
|
|
132
|
+
"sui_signPersonalMessage",
|
|
133
|
+
"sui_signTransaction",
|
|
134
|
+
"sui_signAndExecuteTransaction"
|
|
135
|
+
],
|
|
136
|
+
chains: safeChains,
|
|
137
|
+
events: []
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
const clientId = await wc.client.core.crypto.getClientId();
|
|
142
|
+
return { clientId };
|
|
143
|
+
}
|
|
144
|
+
async connect(params) {
|
|
145
|
+
var _a, _b, _c;
|
|
146
|
+
const connector = this.connectors.find((c) => c.id === params.id);
|
|
147
|
+
if (!connector) {
|
|
148
|
+
throw new Error("Sui connector not found");
|
|
149
|
+
}
|
|
150
|
+
const existingConnection = this.getConnection({
|
|
151
|
+
address: params.address,
|
|
152
|
+
connectorId: connector.id,
|
|
153
|
+
connections: this.connections,
|
|
154
|
+
connectors: this.connectors
|
|
155
|
+
});
|
|
156
|
+
if (existingConnection == null ? void 0 : existingConnection.account) {
|
|
157
|
+
const chainId2 = ((_a = existingConnection.caipNetwork) == null ? void 0 : _a.id) ?? params.chainId ?? "mainnet";
|
|
158
|
+
this.emit("accountChanged", {
|
|
159
|
+
address: existingConnection.account.address,
|
|
160
|
+
chainId: chainId2,
|
|
161
|
+
connector
|
|
162
|
+
});
|
|
163
|
+
return {
|
|
164
|
+
id: connector.id,
|
|
165
|
+
address: existingConnection.account.address,
|
|
166
|
+
chainId: chainId2,
|
|
167
|
+
provider: connector.provider,
|
|
168
|
+
type: connector.type
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
const wc = this.getWcProvider();
|
|
172
|
+
const accounts = WcHelpersUtil.getWalletConnectAccounts(
|
|
173
|
+
wc,
|
|
174
|
+
"sui"
|
|
175
|
+
);
|
|
176
|
+
const address = (_b = accounts[0]) == null ? void 0 : _b.address;
|
|
177
|
+
if (!address) {
|
|
178
|
+
throw new Error("No Sui account found after WalletConnect session");
|
|
179
|
+
}
|
|
180
|
+
const caipNetwork = (_c = this.getCaipNetworks()) == null ? void 0 : _c.find(
|
|
181
|
+
(n) => n.id === params.chainId
|
|
182
|
+
);
|
|
183
|
+
this.addConnection({
|
|
184
|
+
connectorId: connector.id,
|
|
185
|
+
accounts: [{ address }],
|
|
186
|
+
caipNetwork
|
|
187
|
+
});
|
|
188
|
+
const chainId = params.chainId ?? (caipNetwork == null ? void 0 : caipNetwork.id) ?? "mainnet";
|
|
189
|
+
this.emit("accountChanged", {
|
|
190
|
+
address,
|
|
191
|
+
chainId,
|
|
192
|
+
connector
|
|
193
|
+
});
|
|
194
|
+
return {
|
|
195
|
+
id: connector.id,
|
|
196
|
+
address,
|
|
197
|
+
chainId,
|
|
198
|
+
provider: connector.provider,
|
|
199
|
+
type: connector.type
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
async disconnect(params) {
|
|
203
|
+
if (params == null ? void 0 : params.id) {
|
|
204
|
+
if (this.sharedWcProvider) {
|
|
205
|
+
try {
|
|
206
|
+
await this.sharedWcProvider.disconnect();
|
|
207
|
+
} catch {
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
this.deleteConnection(params.id);
|
|
211
|
+
}
|
|
212
|
+
if (this.connections.length === 0) {
|
|
213
|
+
this.emit("disconnect");
|
|
214
|
+
} else {
|
|
215
|
+
this.emitFirstAvailableConnection();
|
|
216
|
+
}
|
|
217
|
+
return { connections: this.connections };
|
|
218
|
+
}
|
|
219
|
+
async getAccounts(params) {
|
|
220
|
+
if (!this.sharedWcProvider) {
|
|
221
|
+
return { accounts: [] };
|
|
222
|
+
}
|
|
223
|
+
const accounts = WcHelpersUtil.getWalletConnectAccounts(
|
|
224
|
+
this.sharedWcProvider,
|
|
225
|
+
"sui"
|
|
226
|
+
);
|
|
227
|
+
return {
|
|
228
|
+
accounts: accounts.map((a) => ({
|
|
229
|
+
namespace: "sui",
|
|
230
|
+
address: a.address,
|
|
231
|
+
type: "eoa"
|
|
232
|
+
}))
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
async getBalance(params) {
|
|
236
|
+
var _a, _b, _c;
|
|
237
|
+
if (!params.address) {
|
|
238
|
+
return { balance: "0", symbol: "SUI" };
|
|
239
|
+
}
|
|
240
|
+
try {
|
|
241
|
+
const caipNetwork = (_a = this.getCaipNetworks()) == null ? void 0 : _a.find(
|
|
242
|
+
(n) => n.id === params.chainId
|
|
243
|
+
);
|
|
244
|
+
const rpcUrl = `https://fullnode.${caipNetwork == null ? void 0 : caipNetwork.id}.sui.io:443`;
|
|
245
|
+
if (!rpcUrl) {
|
|
246
|
+
return { balance: "0", symbol: "SUI" };
|
|
247
|
+
}
|
|
248
|
+
const res = await fetch(rpcUrl, {
|
|
249
|
+
method: "POST",
|
|
250
|
+
headers: { "Content-Type": "application/json" },
|
|
251
|
+
body: JSON.stringify({
|
|
252
|
+
jsonrpc: "2.0",
|
|
253
|
+
id: 1,
|
|
254
|
+
method: "suix_getBalance",
|
|
255
|
+
params: [params.address, "0x2::sui::SUI"]
|
|
256
|
+
})
|
|
257
|
+
});
|
|
258
|
+
const data = await res.json();
|
|
259
|
+
const totalBalance = ((_b = data == null ? void 0 : data.result) == null ? void 0 : _b.totalBalance) ?? "0";
|
|
260
|
+
const formatted = (parseInt(totalBalance, 10) / 1e9).toString();
|
|
261
|
+
return {
|
|
262
|
+
balance: formatted,
|
|
263
|
+
symbol: ((_c = caipNetwork == null ? void 0 : caipNetwork.nativeCurrency) == null ? void 0 : _c.symbol) || "SUI"
|
|
264
|
+
};
|
|
265
|
+
} catch {
|
|
266
|
+
return { balance: "0", symbol: "SUI" };
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
async switchNetwork(params) {
|
|
270
|
+
await super.switchNetwork(params);
|
|
271
|
+
}
|
|
272
|
+
async syncConnection(params) {
|
|
273
|
+
return this.connect({ ...params, type: "" });
|
|
274
|
+
}
|
|
275
|
+
async syncConnections({
|
|
276
|
+
connectToFirstConnector,
|
|
277
|
+
caipNetwork
|
|
278
|
+
}) {
|
|
279
|
+
if (!this.sharedWcProvider) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
const accounts = WcHelpersUtil.getWalletConnectAccounts(
|
|
283
|
+
this.sharedWcProvider,
|
|
284
|
+
"sui"
|
|
285
|
+
);
|
|
286
|
+
if (accounts.length > 0) {
|
|
287
|
+
this.addConnection({
|
|
288
|
+
connectorId: WC_ID,
|
|
289
|
+
accounts: accounts.map((a) => ({ address: a.address })),
|
|
290
|
+
caipNetwork
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
if (connectToFirstConnector) {
|
|
294
|
+
this.emitFirstAvailableConnection();
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
getWalletConnectProvider(params) {
|
|
298
|
+
return params.provider;
|
|
299
|
+
}
|
|
300
|
+
async signMessage(params) {
|
|
301
|
+
const wc = this.getWcProvider();
|
|
302
|
+
const result = await wc.request(
|
|
303
|
+
{
|
|
304
|
+
method: "sui_signPersonalMessage",
|
|
305
|
+
params: { message: params.message, address: params.address }
|
|
306
|
+
},
|
|
307
|
+
"sui:mainnet"
|
|
308
|
+
);
|
|
309
|
+
return { signature: result.signature };
|
|
310
|
+
}
|
|
311
|
+
async sendTransaction(params) {
|
|
312
|
+
const wc = this.getWcProvider();
|
|
313
|
+
const result = await wc.request(
|
|
314
|
+
{
|
|
315
|
+
method: "sui_signAndExecuteTransaction",
|
|
316
|
+
params: { transaction: params.data, address: params.to }
|
|
317
|
+
},
|
|
318
|
+
"sui:mainnet"
|
|
319
|
+
);
|
|
320
|
+
return { hash: result.digest };
|
|
321
|
+
}
|
|
322
|
+
async estimateGas() {
|
|
323
|
+
return { gas: 0n };
|
|
324
|
+
}
|
|
325
|
+
async writeContract() {
|
|
326
|
+
return { hash: "" };
|
|
327
|
+
}
|
|
328
|
+
parseUnits() {
|
|
329
|
+
return 0n;
|
|
330
|
+
}
|
|
331
|
+
formatUnits() {
|
|
332
|
+
return "";
|
|
333
|
+
}
|
|
334
|
+
async getCapabilities() {
|
|
335
|
+
return {};
|
|
336
|
+
}
|
|
337
|
+
async grantPermissions() {
|
|
338
|
+
return {};
|
|
339
|
+
}
|
|
340
|
+
async revokePermissions() {
|
|
341
|
+
return "0x";
|
|
342
|
+
}
|
|
343
|
+
async walletGetAssets() {
|
|
344
|
+
return {};
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
export {
|
|
348
|
+
SuiAdapter
|
|
349
|
+
};
|
|
@@ -50,7 +50,7 @@ const AmountInput = ({
|
|
|
50
50
|
allowNegative: false,
|
|
51
51
|
disabled,
|
|
52
52
|
className: reactjs_utils_mxClsx.mxClsx(
|
|
53
|
-
"liq-text-3xl liq-leading-9 liq-min-h-12 liq-py-0 liq-w-full liq-h-full liq-border-none liq-font-medium liq-px-0 liq-outline-0 liq-bg-transparent",
|
|
53
|
+
"liq-text-3xl liq-leading-9 liq-min-h-12 liq-py-0 liq-w-full liq-h-full liq-border-none liq-font-medium liq-px-0 liq-outline-0 liq-bg-transparent focus-visible:liq-outline-none",
|
|
54
54
|
{
|
|
55
55
|
"liq-disabled liq-animate-pulse": disabled && !omitDisableClass
|
|
56
56
|
},
|
|
@@ -47,7 +47,7 @@ const AmountInput = ({
|
|
|
47
47
|
allowNegative: false,
|
|
48
48
|
disabled,
|
|
49
49
|
className: mxClsx(
|
|
50
|
-
"liq-text-3xl liq-leading-9 liq-min-h-12 liq-py-0 liq-w-full liq-h-full liq-border-none liq-font-medium liq-px-0 liq-outline-0 liq-bg-transparent",
|
|
50
|
+
"liq-text-3xl liq-leading-9 liq-min-h-12 liq-py-0 liq-w-full liq-h-full liq-border-none liq-font-medium liq-px-0 liq-outline-0 liq-bg-transparent focus-visible:liq-outline-none",
|
|
51
51
|
{
|
|
52
52
|
"liq-disabled liq-animate-pulse": disabled && !omitDisableClass
|
|
53
53
|
},
|
|
@@ -11,11 +11,14 @@ const debounce = require("lodash/debounce");
|
|
|
11
11
|
const React = require("react");
|
|
12
12
|
const reactToastify = require("react-toastify");
|
|
13
13
|
const reactjs_components_BridgeForm_hooks_useBridgeTokenSelection = require("./hooks/useBridgeTokenSelection.js");
|
|
14
|
+
const reactjs_components_BridgeForm_utils_bridgeFormHelpers = require("./utils/bridgeFormHelpers.js");
|
|
14
15
|
const constants_index = require("../../../constants/index.js");
|
|
15
16
|
const helpers_getApiURL = require("../../../helpers/getApiURL.js");
|
|
16
17
|
const types_chainType = require("../../../types/chainType.js");
|
|
17
18
|
const reactjs_context_useWeb3App = require("../../context/useWeb3App.js");
|
|
19
|
+
const reactjs_helpers_resolveBridgeApiChainId = require("../../helpers/resolveBridgeApiChainId.js");
|
|
18
20
|
const reactjs_hooks_useAccount = require("../../hooks/useAccount.js");
|
|
21
|
+
const reactjs_hooks_useBridgeApiChainId = require("../../hooks/useBridgeApiChainId.js");
|
|
19
22
|
const reactjs_hooks_useBridgeFormik = require("../../hooks/useBridgeFormik.js");
|
|
20
23
|
const reactjs_hooks_useFetchBridgeData = require("../../hooks/useFetchBridgeData.js");
|
|
21
24
|
const reactjs_hooks_useGetChainId = require("../../hooks/useGetChainId.js");
|
|
@@ -42,6 +45,7 @@ require("wagmi");
|
|
|
42
45
|
const reactjs_components_Connect_MvxConnectButton = require("../Connect/MvxConnectButton.js");
|
|
43
46
|
const reactjs_components_Connect_BridgeAccountDisplay = require("../Connect/BridgeAccountDisplay.js");
|
|
44
47
|
const reactjs_components_Connect_MvxAccountDisplay = require("../Connect/MvxAccountDisplay.js");
|
|
48
|
+
require("@reown/appkit-controllers");
|
|
45
49
|
const reactjs_components_ToggleDirection_ToggleDirection = require("../ToggleDirection/ToggleDirection.js");
|
|
46
50
|
const reactjs_components_TokenSelector_TokenSelector = require("../TokenSelector/TokenSelector.js");
|
|
47
51
|
let fetchRateInterval;
|
|
@@ -81,6 +85,7 @@ const Deposit = ({
|
|
|
81
85
|
bridgeOnly
|
|
82
86
|
} = reactjs_context_useWeb3App.useWeb3App();
|
|
83
87
|
const chainId = reactjs_hooks_useGetChainId.useGetChainId();
|
|
88
|
+
const bridgeApiChainId = reactjs_hooks_useBridgeApiChainId.useBridgeApiChainId();
|
|
84
89
|
const {
|
|
85
90
|
evmTokensWithBalances,
|
|
86
91
|
mvxTokensWithBalances,
|
|
@@ -96,16 +101,14 @@ const Deposit = ({
|
|
|
96
101
|
});
|
|
97
102
|
const isTokensLoading = tokensLoading || isLoadingEvmTokensBalances || isLoadingMvxTokensBalances || isChainsLoading;
|
|
98
103
|
const activeChain = React.useMemo(() => {
|
|
99
|
-
return sdkChains.find(
|
|
100
|
-
(chain) => chain.id.toString() === (chainId == null ? void 0 : chainId.toString())
|
|
101
|
-
);
|
|
104
|
+
return sdkChains.find((chain) => reactjs_helpers_resolveBridgeApiChainId.sameBridgeApiChainId(chain.id, chainId));
|
|
102
105
|
}, [chainId, sdkChains]);
|
|
103
106
|
const mvxChain = React.useMemo(() => {
|
|
104
107
|
return chains.find(
|
|
105
108
|
(chain) => chain.chainId.toString() === mvxChainId.toString()
|
|
106
109
|
);
|
|
107
110
|
}, [chainId, chains]);
|
|
108
|
-
const { evm, solana, bitcoin } = reactjs_hooks_useSignTransaction.useSignTransaction();
|
|
111
|
+
const { evm, solana, bitcoin, sui } = reactjs_hooks_useSignTransaction.useSignTransaction();
|
|
109
112
|
const sendTransactions = reactjs_hooks_useSendTransactions.useSendTransactions();
|
|
110
113
|
const {
|
|
111
114
|
mutate: getRate,
|
|
@@ -117,7 +120,7 @@ const Deposit = ({
|
|
|
117
120
|
const handleSwitchNetwork = React.useCallback(
|
|
118
121
|
(chain) => {
|
|
119
122
|
const sdkChain = sdkChains.find(
|
|
120
|
-
(c) => c.id
|
|
123
|
+
(c) => reactjs_helpers_resolveBridgeApiChainId.sameBridgeApiChainId(c.id, chain.id)
|
|
121
124
|
);
|
|
122
125
|
if (sdkChain) {
|
|
123
126
|
switchNetwork(sdkChain);
|
|
@@ -161,15 +164,19 @@ const Deposit = ({
|
|
|
161
164
|
return selectedChainOption;
|
|
162
165
|
}
|
|
163
166
|
return chains.find(
|
|
164
|
-
(chain) => chain.chainId
|
|
167
|
+
(chain) => reactjs_helpers_resolveBridgeApiChainId.sameBridgeApiChainId(chain.chainId, firstToken.chainId)
|
|
165
168
|
) ?? selectedChainOption;
|
|
166
169
|
}, [firstToken == null ? void 0 : firstToken.chainId, chains, selectedChainOption]);
|
|
170
|
+
const bridgeFromChainId = React.useMemo(
|
|
171
|
+
() => reactjs_helpers_resolveBridgeApiChainId.toBridgeApiChainId(firstToken == null ? void 0 : firstToken.chainId) ?? bridgeApiChainId,
|
|
172
|
+
[firstToken == null ? void 0 : firstToken.chainId, bridgeApiChainId]
|
|
173
|
+
);
|
|
167
174
|
const bridgeAddress = account.address;
|
|
168
175
|
const isAuthenticated = account.isConnected && Boolean(bridgeAddress);
|
|
169
176
|
const hasAmounts = firstAmount !== "" && secondAmount !== "";
|
|
170
177
|
const fetchRateDebounced = React.useCallback(
|
|
171
178
|
debounce(async (amount) => {
|
|
172
|
-
if (!amount || !Number(amount) || !account.address || !(firstToken == null ? void 0 : firstToken.address) || !(secondToken == null ? void 0 : secondToken.address) || !selectedChainOption || !
|
|
179
|
+
if (!amount || !Number(amount) || !account.address || !(firstToken == null ? void 0 : firstToken.address) || !(secondToken == null ? void 0 : secondToken.address) || !selectedChainOption || !bridgeFromChainId) {
|
|
173
180
|
return;
|
|
174
181
|
}
|
|
175
182
|
getRate({
|
|
@@ -177,7 +184,7 @@ const Deposit = ({
|
|
|
177
184
|
body: {
|
|
178
185
|
tokenIn: firstToken.address,
|
|
179
186
|
amountIn: amount,
|
|
180
|
-
fromChainId:
|
|
187
|
+
fromChainId: bridgeFromChainId,
|
|
181
188
|
tokenOut: secondToken.address,
|
|
182
189
|
toChainId: mvxChainId
|
|
183
190
|
}
|
|
@@ -185,6 +192,7 @@ const Deposit = ({
|
|
|
185
192
|
}, 500),
|
|
186
193
|
[
|
|
187
194
|
account.address,
|
|
195
|
+
bridgeFromChainId,
|
|
188
196
|
firstToken == null ? void 0 : firstToken.address,
|
|
189
197
|
secondToken == null ? void 0 : secondToken.address,
|
|
190
198
|
selectedChainOption
|
|
@@ -243,6 +251,7 @@ const Deposit = ({
|
|
|
243
251
|
transactions,
|
|
244
252
|
provider
|
|
245
253
|
}) => {
|
|
254
|
+
var _a2, _b2, _c;
|
|
246
255
|
const signedTransactions = [];
|
|
247
256
|
setPendingSigning(true);
|
|
248
257
|
setSigningTransactionsCount(() => transactions.length);
|
|
@@ -251,8 +260,8 @@ const Deposit = ({
|
|
|
251
260
|
for (const transaction of transactions) {
|
|
252
261
|
++txIndex;
|
|
253
262
|
try {
|
|
254
|
-
switch (
|
|
255
|
-
case types_chainType.ChainType.evm:
|
|
263
|
+
switch (reactjs_components_BridgeForm_utils_bridgeFormHelpers.resolveSigningChainType(transaction, firstTokenChain)) {
|
|
264
|
+
case types_chainType.ChainType.evm: {
|
|
256
265
|
const hash = await evm.signTransaction({
|
|
257
266
|
...transaction,
|
|
258
267
|
value: BigInt(transaction.value),
|
|
@@ -281,6 +290,7 @@ const Deposit = ({
|
|
|
281
290
|
hash
|
|
282
291
|
});
|
|
283
292
|
break;
|
|
293
|
+
}
|
|
284
294
|
case types_chainType.ChainType.sol:
|
|
285
295
|
if (!transaction.instructions || !transaction.feePayer) {
|
|
286
296
|
break;
|
|
@@ -311,6 +321,29 @@ const Deposit = ({
|
|
|
311
321
|
txHash: psbt
|
|
312
322
|
});
|
|
313
323
|
break;
|
|
324
|
+
case types_chainType.ChainType.sui: {
|
|
325
|
+
const serializedTx = (_a2 = transaction.suiParams) == null ? void 0 : _a2.transactionBytes;
|
|
326
|
+
const sender = (_b2 = transaction.suiParams) == null ? void 0 : _b2.sender;
|
|
327
|
+
if (!serializedTx || !sender) {
|
|
328
|
+
console.error("No Sui transaction bytes or sender address");
|
|
329
|
+
break;
|
|
330
|
+
}
|
|
331
|
+
const signature = await sui.signTransaction({
|
|
332
|
+
transaction: serializedTx,
|
|
333
|
+
address: sender
|
|
334
|
+
});
|
|
335
|
+
if (!signature) {
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
signedTransactions.push({
|
|
339
|
+
...transaction,
|
|
340
|
+
suiParams: {
|
|
341
|
+
...transaction.suiParams,
|
|
342
|
+
signature
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
314
347
|
default:
|
|
315
348
|
reactToastify.toast.error("Provider not supported");
|
|
316
349
|
setPendingSigning(false);
|
|
@@ -327,13 +360,15 @@ const Deposit = ({
|
|
|
327
360
|
return;
|
|
328
361
|
}
|
|
329
362
|
}
|
|
330
|
-
await sendTransactions({
|
|
363
|
+
const { data: batch } = await sendTransactions({
|
|
331
364
|
transactions: signedTransactions,
|
|
332
365
|
provider,
|
|
333
366
|
url: helpers_getApiURL.getApiURL() ?? "",
|
|
334
367
|
token: nativeAuthToken ?? ""
|
|
335
368
|
});
|
|
336
|
-
const
|
|
369
|
+
const apiHashes = ((_c = batch.transactions) == null ? void 0 : _c.map((tx) => tx.txHash).filter((h) => Boolean(h))) ?? [];
|
|
370
|
+
const localHashes = signedTransactions.map((tx) => tx.txHash).filter((h) => Boolean(h));
|
|
371
|
+
const txHashes = apiHashes.length > 0 ? apiHashes : localHashes.length > 0 ? localHashes : batch.batchId ? [batch.batchId] : [];
|
|
337
372
|
onSuccess(txHashes);
|
|
338
373
|
setPendingSigning(false);
|
|
339
374
|
} catch (e) {
|
|
@@ -349,14 +384,18 @@ const Deposit = ({
|
|
|
349
384
|
}
|
|
350
385
|
},
|
|
351
386
|
[
|
|
352
|
-
|
|
387
|
+
firstTokenChain == null ? void 0 : firstTokenChain.chainType,
|
|
353
388
|
bridgeAddress,
|
|
389
|
+
config,
|
|
354
390
|
handleOnChangeFirstAmount,
|
|
355
391
|
handleOnChangeSecondAmount,
|
|
356
392
|
nativeAuthToken,
|
|
357
393
|
onSuccess,
|
|
358
394
|
sendTransactions,
|
|
359
|
-
|
|
395
|
+
bitcoin.signTransaction,
|
|
396
|
+
evm.signTransaction,
|
|
397
|
+
solana.signTransaction,
|
|
398
|
+
sui.signTransaction
|
|
360
399
|
]
|
|
361
400
|
);
|
|
362
401
|
const {
|
|
@@ -375,7 +414,7 @@ const Deposit = ({
|
|
|
375
414
|
receiver: mvxAddress ?? "",
|
|
376
415
|
firstToken,
|
|
377
416
|
firstAmount,
|
|
378
|
-
fromChainId:
|
|
417
|
+
fromChainId: bridgeFromChainId,
|
|
379
418
|
toChainId: mvxChainId,
|
|
380
419
|
secondToken,
|
|
381
420
|
secondAmount,
|
|
@@ -583,14 +622,14 @@ const Deposit = ({
|
|
|
583
622
|
className: "liq-w-full disabled:liq-bg-neutral-850/50 liq-py-3 hover:enabled:liq-bg-primary !liq-text-primary-200",
|
|
584
623
|
disabled: !hasAmounts || isPendingRate || !mvxAddress || !account.address || hasError || pendingSigning,
|
|
585
624
|
children: [
|
|
586
|
-
hasAmounts && !pendingSigning && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "liq-flex liq-justify-center liq-gap-2", children: [
|
|
625
|
+
hasAmounts && !pendingSigning && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "liq-flex liq-justify-center liq-items-center liq-gap-2", children: [
|
|
587
626
|
/* @__PURE__ */ jsxRuntime.jsx("div", { children: "Deposit on " }),
|
|
588
627
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
589
628
|
"img",
|
|
590
629
|
{
|
|
591
630
|
src: (mvxChain == null ? void 0 : mvxChain.pngUrl) ?? "",
|
|
592
631
|
alt: "",
|
|
593
|
-
className: "liq-h-[1.5rem] liq-w-[1.5rem]"
|
|
632
|
+
className: "liq-h-[1.5rem] liq-w-[1.5rem] liq-rounded-lg"
|
|
594
633
|
}
|
|
595
634
|
),
|
|
596
635
|
/* @__PURE__ */ jsxRuntime.jsx("div", { children: "MultiversX" })
|
|
@@ -611,7 +650,7 @@ const Deposit = ({
|
|
|
611
650
|
{
|
|
612
651
|
src: (mvxChain == null ? void 0 : mvxChain.pngUrl) ?? "",
|
|
613
652
|
alt: "",
|
|
614
|
-
className: "liq-h-[1.5rem] liq-w-[1.5rem]"
|
|
653
|
+
className: "liq-h-[1.5rem] liq-w-[1.5rem] liq-rounded-lg"
|
|
615
654
|
}
|
|
616
655
|
),
|
|
617
656
|
/* @__PURE__ */ jsxRuntime.jsx("div", { children: "MultiversX" })
|