@sodax/wallet-sdk-react 1.1.0-beta-rc3 → 1.2.0-beta

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/README.md CHANGED
@@ -12,7 +12,7 @@ A comprehensive React Wallet SDK tailored for the Sodax ecosystem that provides
12
12
  - ICON Wallets: ✅ (Hana Wallet and other ICON-compatible extensions)
13
13
 
14
14
  - Address and connection state management
15
- - EVM (Arbitrum, Avalanche, Base, BSC, Optimism, Polygon, Sonic, HyperEVM, LightLink, Kaia) ✅
15
+ - EVM (Arbitrum, Avalanche, Base, BSC, Optimism, Polygon, Sonic, HyperEVM, LightLink, Ethereum, Redbelly, Kaia) ✅
16
16
  - Sui ✅
17
17
  - Solana ✅
18
18
  - Stellar ✅
package/dist/index.cjs CHANGED
@@ -197,7 +197,20 @@ var hyper = /* @__PURE__ */ viem.defineChain({
197
197
  });
198
198
  var createWagmiConfig = (config) => {
199
199
  return wagmi.createConfig({
200
- chains: [chains.mainnet, chains.avalanche, chains.arbitrum, chains.base, chains.bsc, chains.sonic, chains.optimism, chains.polygon, hyper, chains.lightlinkPhoenix, chains.kaia],
200
+ chains: [
201
+ chains.mainnet,
202
+ chains.avalanche,
203
+ chains.arbitrum,
204
+ chains.base,
205
+ chains.bsc,
206
+ chains.sonic,
207
+ chains.optimism,
208
+ chains.polygon,
209
+ hyper,
210
+ chains.lightlinkPhoenix,
211
+ chains.kaia,
212
+ chains.redbellyMainnet
213
+ ],
201
214
  ssr: true,
202
215
  transports: {
203
216
  [chains.mainnet.id]: wagmi.http(config[types.ETHEREUM_MAINNET_CHAIN_ID]),
@@ -210,6 +223,7 @@ var createWagmiConfig = (config) => {
210
223
  [chains.polygon.id]: wagmi.http(config[types.POLYGON_MAINNET_CHAIN_ID]),
211
224
  [hyper.id]: wagmi.http(config[types.HYPEREVM_MAINNET_CHAIN_ID]),
212
225
  [chains.lightlinkPhoenix.id]: wagmi.http(config[types.LIGHTLINK_MAINNET_CHAIN_ID]),
226
+ [chains.redbellyMainnet.id]: wagmi.http(config[types.REDBELLY_MAINNET_CHAIN_ID]),
213
227
  [chains.kaia.id]: wagmi.http(config[types.KAIA_MAINNET_CHAIN_ID])
214
228
  }
215
229
  });
@@ -227,49 +241,71 @@ var EvmXService = class _EvmXService extends XService {
227
241
  }
228
242
  return _EvmXService.instance;
229
243
  }
244
+ // get erc20 token balance in a chain (evm chain only)
245
+ async _getTokenBalance(address, chainId, tokenAddress) {
246
+ const publicClient = actions.getPublicClient(this.wagmiConfig, { chainId });
247
+ if (!publicClient) throw new Error("Public client not found");
248
+ const balance = await publicClient.readContract({
249
+ abi: viem.erc20Abi,
250
+ address: tokenAddress,
251
+ functionName: "balanceOf",
252
+ args: [address]
253
+ });
254
+ return balance || 0n;
255
+ }
256
+ //get native balance of the chain (evm chain only)
257
+ async _getChainBalance(address, chainId) {
258
+ const balance = await actions.getPublicClient(this.wagmiConfig, { chainId })?.getBalance({
259
+ address
260
+ });
261
+ return balance || 0n;
262
+ }
230
263
  async getBalance(address, xToken) {
231
264
  if (!address) return 0n;
232
265
  if (!this.wagmiConfig) return 0n;
233
266
  const chainId = getWagmiChainId(xToken.xChainId);
234
267
  if (isNativeToken(xToken)) {
235
- const balance = await actions.getPublicClient(this.wagmiConfig, { chainId })?.getBalance({
236
- address
237
- });
238
- console.log("balance", balance);
239
- return balance || 0n;
268
+ return this._getChainBalance(address, chainId);
240
269
  }
241
270
  throw new Error(`Unsupported token: ${xToken.symbol}`);
242
271
  }
243
272
  async getBalances(address, xTokens) {
244
273
  if (!address) return {};
245
274
  if (!this.wagmiConfig) return {};
246
- const balancePromises = xTokens.filter((xToken) => isNativeToken(xToken)).map(async (xToken) => {
275
+ const nativeTokenBalancePromises = xTokens.filter((xToken) => isNativeToken(xToken)).map(async (xToken) => {
247
276
  const balance = await this.getBalance(address, xToken);
248
277
  return { symbol: xToken.symbol, address: xToken.address, balance };
249
278
  });
250
- const balances = await Promise.all(balancePromises);
251
- const tokenMap = balances.reduce((map, { address: address2, balance }) => {
279
+ const nativeTokenBalances = await Promise.all(nativeTokenBalancePromises);
280
+ const tokenMap = nativeTokenBalances.reduce((map, { address: address2, balance }) => {
252
281
  if (balance) map[address2] = balance;
253
282
  return map;
254
283
  }, {});
255
284
  const nonNativeXTokens = xTokens.filter((xToken) => !isNativeToken(xToken));
256
285
  const xChainId = xTokens[0].xChainId;
257
- const result = await actions.getPublicClient(this.wagmiConfig, { chainId: getWagmiChainId(xChainId) })?.multicall({
258
- contracts: nonNativeXTokens.map((token) => ({
259
- abi: viem.erc20Abi,
260
- address: token.address,
261
- functionName: "balanceOf",
262
- args: [address],
263
- chainId: getWagmiChainId(xChainId)
264
- }))
265
- });
266
- console.log("result", result);
267
- return nonNativeXTokens.map((token, index) => ({
268
- symbol: token.symbol,
269
- address: token.address,
270
- balance: result?.[index]?.result?.toString() || "0"
271
- })).reduce((acc, balance) => {
272
- acc[balance.address] = balance.balance;
286
+ const viemChain = this.wagmiConfig.chains.find((chain) => chain.id === getWagmiChainId(xChainId));
287
+ const chainId = getWagmiChainId(xChainId);
288
+ const publicClient = actions.getPublicClient(this.wagmiConfig, { chainId });
289
+ if (!publicClient) throw new Error("Public client not found");
290
+ if (viemChain?.contracts?.multicall3) {
291
+ const result = await publicClient.multicall({
292
+ contracts: nonNativeXTokens.map((token) => ({
293
+ abi: viem.erc20Abi,
294
+ address: token.address,
295
+ functionName: "balanceOf",
296
+ args: [address]
297
+ }))
298
+ });
299
+ return nonNativeXTokens.reduce((acc, token, index) => {
300
+ acc[token.address] = result?.[index]?.result?.toString() || "0";
301
+ return acc;
302
+ }, tokenMap);
303
+ }
304
+ const nonNativeTokenBalances = await Promise.all(
305
+ nonNativeXTokens.map((token) => this._getTokenBalance(address, chainId, token.address))
306
+ );
307
+ return nonNativeXTokens.reduce((acc, token, idx) => {
308
+ acc[token.address] = nonNativeTokenBalances[idx] || "0";
273
309
  return acc;
274
310
  }, tokenMap);
275
311
  }
@@ -907,7 +943,7 @@ function useXConnection(xChainType) {
907
943
 
908
944
  // src/hooks/useXAccount.ts
909
945
  function isChainType(chainIdentifier) {
910
- return ["ICON", "EVM", "INJECTIVE", "SUI", "STELLAR", "SOLANA"].includes(chainIdentifier);
946
+ return types.ChainTypeArr.includes(chainIdentifier);
911
947
  }
912
948
  function useXAccount(chainIdentifier) {
913
949
  const resolvedChainType = chainIdentifier ? isChainType(chainIdentifier) ? chainIdentifier : getXChainType(chainIdentifier) : void 0;
@@ -1409,14 +1445,13 @@ var reconnectStellar = async () => {
1409
1445
  }
1410
1446
  });
1411
1447
  };
1412
-
1413
- // src/SodaxWalletProvider.tsx
1448
+ var queryClient = new reactQuery.QueryClient();
1414
1449
  var SodaxWalletProvider = ({ children, rpcConfig }) => {
1415
1450
  const wagmiConfig = React2.useMemo(() => {
1416
1451
  return createWagmiConfig(rpcConfig);
1417
1452
  }, [rpcConfig]);
1418
1453
  const wallets = React2.useMemo(() => [new walletAdapterWallets.UnsafeBurnerWalletAdapter()], []);
1419
- return /* @__PURE__ */ React2__default.default.createElement(wagmi.WagmiProvider, { config: wagmiConfig }, /* @__PURE__ */ React2__default.default.createElement(dappKit.SuiClientProvider, { networks: { mainnet: { url: client.getFullnodeUrl("mainnet") } }, defaultNetwork: "mainnet" }, /* @__PURE__ */ React2__default.default.createElement(dappKit.WalletProvider, { autoConnect: true }, /* @__PURE__ */ React2__default.default.createElement(walletAdapterReact.ConnectionProvider, { endpoint: rpcConfig["solana"] ?? "" }, /* @__PURE__ */ React2__default.default.createElement(walletAdapterReact.WalletProvider, { wallets, autoConnect: true }, /* @__PURE__ */ React2__default.default.createElement(Hydrate, null), children)))));
1454
+ return /* @__PURE__ */ React2__default.default.createElement(reactQuery.QueryClientProvider, { client: queryClient }, /* @__PURE__ */ React2__default.default.createElement(wagmi.WagmiProvider, { config: wagmiConfig }, /* @__PURE__ */ React2__default.default.createElement(dappKit.SuiClientProvider, { networks: { mainnet: { url: client.getFullnodeUrl("mainnet") } }, defaultNetwork: "mainnet" }, /* @__PURE__ */ React2__default.default.createElement(dappKit.WalletProvider, { autoConnect: true }, /* @__PURE__ */ React2__default.default.createElement(walletAdapterReact.ConnectionProvider, { endpoint: rpcConfig["solana"] ?? "" }, /* @__PURE__ */ React2__default.default.createElement(walletAdapterReact.WalletProvider, { wallets, autoConnect: true }, /* @__PURE__ */ React2__default.default.createElement(Hydrate, null), children))))));
1420
1455
  };
1421
1456
  reconnectIcon();
1422
1457
  reconnectStellar();