@sodax/sdk 0.0.1-rc.31 → 0.0.1-rc.33

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/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import { getAbiItem, encodeAbiParameters, parseAbiParameters, fromHex, createPublicClient, http, toHex, erc20Abi as erc20Abi$1, encodeFunctionData, decodeAbiParameters, encodePacked, parseEventLogs, keccak256, isAddress } from 'viem';
2
2
  import { nibiru, polygon, bsc, optimism, base, arbitrum, avalanche, sonic } from 'viem/chains';
3
- import { SPOKE_CHAIN_IDS, ICON_MAINNET_CHAIN_ID, SUI_MAINNET_CHAIN_ID, STELLAR_MAINNET_CHAIN_ID, INJECTIVE_MAINNET_CHAIN_ID, POLYGON_MAINNET_CHAIN_ID, BSC_MAINNET_CHAIN_ID, OPTIMISM_MAINNET_CHAIN_ID, BASE_MAINNET_CHAIN_ID, ARBITRUM_MAINNET_CHAIN_ID, NIBIRU_MAINNET_CHAIN_ID, AVALANCHE_MAINNET_CHAIN_ID, SOLANA_MAINNET_CHAIN_ID, SONIC_MAINNET_CHAIN_ID } from '@sodax/types';
3
+ import { SONIC_MAINNET_CHAIN_ID, SPOKE_CHAIN_IDS, ICON_MAINNET_CHAIN_ID, SUI_MAINNET_CHAIN_ID, STELLAR_MAINNET_CHAIN_ID, INJECTIVE_MAINNET_CHAIN_ID, POLYGON_MAINNET_CHAIN_ID, BSC_MAINNET_CHAIN_ID, OPTIMISM_MAINNET_CHAIN_ID, BASE_MAINNET_CHAIN_ID, ARBITRUM_MAINNET_CHAIN_ID, NIBIRU_MAINNET_CHAIN_ID, AVALANCHE_MAINNET_CHAIN_ID, SOLANA_MAINNET_CHAIN_ID } from '@sodax/types';
4
4
  export * from '@sodax/types';
5
- import { ChainGrpcWasmApi, TxGrpcApi, toBase64 } from '@injectivelabs/sdk-ts';
5
+ import { ChainGrpcWasmApi, TxGrpcApi, toBase64, fromBase64 } from '@injectivelabs/sdk-ts';
6
6
  import { getNetworkEndpoints, Network } from '@injectivelabs/networks';
7
7
  import * as IconSdkRaw from 'icon-sdk-js';
8
8
  import { SorobanRpc, Horizon, Contract, TransactionBuilder, BASE_FEE, nativeToScVal, TimeoutInfinite, rpc, scValToBigInt, Operation, Address, Account, FeeBumpTransaction } from '@stellar/stellar-sdk';
@@ -15,7 +15,7 @@ import * as rlp from 'rlp';
15
15
  import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
16
16
  import * as anchor from '@coral-xyz/anchor';
17
17
  import BN from 'bn.js';
18
- import invariant11 from 'tiny-invariant';
18
+ import invariant12 from 'tiny-invariant';
19
19
  import BigNumber4, { BigNumber } from 'bignumber.js';
20
20
 
21
21
  // src/abis/asset-manager.abi.ts
@@ -6105,7 +6105,7 @@ async function waitForTransactionReceipt(hash, provider) {
6105
6105
  return provider.waitForTransactionReceipt(hash);
6106
6106
  }
6107
6107
  var DEFAULT_MAX_RETRY = 3;
6108
- var DEFAULT_RELAY_TX_TIMEOUT = 6e4;
6108
+ var DEFAULT_RELAY_TX_TIMEOUT = 12e4;
6109
6109
  var DEFAULT_RETRY_DELAY_MS = 2e3;
6110
6110
  var ICON_TX_RESULT_WAIT_MAX_RETRY = 10;
6111
6111
  var MAX_UINT256 = (1n << 256n) - 1n;
@@ -6113,6 +6113,12 @@ var FEE_PERCENTAGE_SCALE = 10000n;
6113
6113
  var STELLAR_PRIORITY_FEE = "10000";
6114
6114
  var STELLAR_DEFAULT_TX_TIMEOUT_SECONDS = 100;
6115
6115
  var DEFAULT_DEADLINE_OFFSET = 300n;
6116
+ var DEFAULT_BACKEND_API_ENDPOINT = "https://apiv1.coolify.iconblockchain.xyz";
6117
+ var DEFAULT_BACKEND_API_TIMEOUT = 3e4;
6118
+ var DEFAULT_BACKEND_API_HEADERS = {
6119
+ "Content-Type": "application/json",
6120
+ Accept: "application/json"
6121
+ };
6116
6122
  var VAULT_TOKEN_DECIMALS = 18;
6117
6123
  var INTENT_RELAY_CHAIN_IDS = {
6118
6124
  AVAX: 6n,
@@ -6187,6 +6193,155 @@ function getEvmViemChain(id) {
6187
6193
  throw new Error(`Unsupported EVM chain ID: ${id}`);
6188
6194
  }
6189
6195
  }
6196
+ var HubVaultSymbols = [
6197
+ "sodaAVAX",
6198
+ "sodaBNB",
6199
+ "sodaETH",
6200
+ "sodaBTC",
6201
+ "sodaSUI",
6202
+ "sodaINJ",
6203
+ "sodaXLM",
6204
+ "sodaSOL",
6205
+ "sodaSODA",
6206
+ "sodaUSDT",
6207
+ "sodaUSDC",
6208
+ "bnUSD",
6209
+ "sodaPOL",
6210
+ "sodaNIBI",
6211
+ "sodaS",
6212
+ "IbnUSD"
6213
+ ];
6214
+ var SodaTokens = {
6215
+ sodaBNB: {
6216
+ symbol: "sodaBNB",
6217
+ name: "Soda BNB",
6218
+ decimals: 18,
6219
+ address: "0x40Cd41b35DB9e5109ae7E54b44De8625dB320E6b",
6220
+ xChainId: SONIC_MAINNET_CHAIN_ID
6221
+ },
6222
+ sodaAVAX: {
6223
+ symbol: "sodaAVAX",
6224
+ name: "Soda AVAX",
6225
+ decimals: 18,
6226
+ address: "0x14238D267557E9d799016ad635B53CD15935d290",
6227
+ xChainId: SONIC_MAINNET_CHAIN_ID
6228
+ },
6229
+ sodaETH: {
6230
+ symbol: "sodaETH",
6231
+ name: "Soda ETH",
6232
+ decimals: 18,
6233
+ address: "0x4effB5813271699683C25c734F4daBc45B363709",
6234
+ xChainId: SONIC_MAINNET_CHAIN_ID
6235
+ },
6236
+ sodaBTC: {
6237
+ symbol: "sodaBTC",
6238
+ name: "Soda BTC",
6239
+ decimals: 18,
6240
+ address: "0x7A1A5555842Ad2D0eD274d09b5c4406a95799D5d",
6241
+ xChainId: SONIC_MAINNET_CHAIN_ID
6242
+ },
6243
+ sodaSOL: {
6244
+ symbol: "sodaSOL",
6245
+ name: "Soda SOL",
6246
+ decimals: 18,
6247
+ address: "0xdEa692287E2cE8Cb08FA52917Be0F16b1DACDC87",
6248
+ xChainId: SONIC_MAINNET_CHAIN_ID
6249
+ },
6250
+ sodaXLM: {
6251
+ symbol: "sodaXLM",
6252
+ name: "Soda XLM",
6253
+ decimals: 18,
6254
+ address: "0x6BC8C37cba91F76E68C9e6d689A9C21E4d32079B",
6255
+ xChainId: SONIC_MAINNET_CHAIN_ID
6256
+ },
6257
+ sodaINJ: {
6258
+ symbol: "sodaINJ",
6259
+ name: "Soda INJ",
6260
+ decimals: 18,
6261
+ address: "0x1f22279C89B213944b7Ea41daCB0a868DdCDFd13",
6262
+ xChainId: SONIC_MAINNET_CHAIN_ID
6263
+ },
6264
+ sodaNIBI: {
6265
+ symbol: "sodaNIBI",
6266
+ name: "Soda NIBI",
6267
+ decimals: 18,
6268
+ address: "0xc6c85287a8b173A509C2F198bB719A8a5a2d0C68",
6269
+ xChainId: SONIC_MAINNET_CHAIN_ID
6270
+ },
6271
+ sodaSUI: {
6272
+ symbol: "sodaSUI",
6273
+ name: "Soda SUI",
6274
+ decimals: 18,
6275
+ address: "0xdc5B4b00F98347E95b9F94911213DAB4C687e1e3",
6276
+ xChainId: SONIC_MAINNET_CHAIN_ID
6277
+ },
6278
+ bnUSD: {
6279
+ symbol: "bnUSD",
6280
+ name: "Balanced Dollar",
6281
+ decimals: 18,
6282
+ address: "0xE801CA34E19aBCbFeA12025378D19c4FBE250131",
6283
+ xChainId: SONIC_MAINNET_CHAIN_ID
6284
+ },
6285
+ sodaUSDC: {
6286
+ symbol: "sodaUSDC",
6287
+ name: "Soda USDC",
6288
+ decimals: 18,
6289
+ address: "0xAbbb91c0617090F0028BDC27597Cd0D038F3A833",
6290
+ xChainId: SONIC_MAINNET_CHAIN_ID
6291
+ },
6292
+ sodaUSDT: {
6293
+ symbol: "sodaUSDT",
6294
+ name: "Soda USDT",
6295
+ decimals: 18,
6296
+ address: "0xbDf1F453FCB61424011BBDDCB96cFDB30f3Fe876",
6297
+ xChainId: SONIC_MAINNET_CHAIN_ID
6298
+ },
6299
+ IbnUSD: {
6300
+ symbol: "IbnUSD",
6301
+ name: "ICON bnUSD (Migration)",
6302
+ decimals: 18,
6303
+ address: "0x9D4b663Eb075d2a1C7B8eaEFB9eCCC0510388B51",
6304
+ xChainId: SONIC_MAINNET_CHAIN_ID
6305
+ },
6306
+ sodaS: {
6307
+ symbol: "sodaS",
6308
+ name: "Soda S",
6309
+ decimals: 18,
6310
+ address: "0x62ecc3Eeb80a162c57624B3fF80313FE69f5203e",
6311
+ xChainId: SONIC_MAINNET_CHAIN_ID
6312
+ },
6313
+ sodaPOL: {
6314
+ symbol: "sodaPOL",
6315
+ name: "Soda POL",
6316
+ decimals: 18,
6317
+ address: "0x208ED38f4783328aA9eBFeC360D32e7520A9B779",
6318
+ xChainId: SONIC_MAINNET_CHAIN_ID
6319
+ },
6320
+ sodaSODA: {
6321
+ symbol: "sodaSODA",
6322
+ name: "Soda SODA",
6323
+ decimals: 18,
6324
+ address: "0x21685E341DE7844135329914Be6Bd8D16982d834",
6325
+ xChainId: SONIC_MAINNET_CHAIN_ID
6326
+ }
6327
+ };
6328
+ var SodaTokensAsHubAssets = Object.values(SodaTokens).reduce(
6329
+ (acc, token) => {
6330
+ acc[token.address] = {
6331
+ asset: token.address,
6332
+ decimal: token.decimals,
6333
+ symbol: token.symbol,
6334
+ name: token.name,
6335
+ vault: token.address
6336
+ };
6337
+ return acc;
6338
+ },
6339
+ {}
6340
+ );
6341
+ var SodaVaultTokensSet = new Set(Object.values(SodaTokens).map((token) => token.address.toLowerCase()));
6342
+ var isSodaVaultToken = (address) => {
6343
+ return SodaVaultTokensSet.has(address.toLowerCase());
6344
+ };
6190
6345
  var hubChainConfig = {
6191
6346
  [SONIC_MAINNET_CHAIN_ID]: {
6192
6347
  chain: {
@@ -6201,6 +6356,7 @@ var hubChainConfig = {
6201
6356
  icxMigration: "0x8294DE9fc60F5ABCc19245E5857071d7C42B9875",
6202
6357
  balnSwap: "0x610a90B61b89a98b954d5750E94834Aa45d08d10",
6203
6358
  sodaToken: "0x7c7d53eecda37a87ce0d5bf8e0b24512a48dc963"
6359
+ // SODA token on Sonic
6204
6360
  },
6205
6361
  nativeToken: "0x0000000000000000000000000000000000000000",
6206
6362
  wrappedNativeToken: "0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38",
@@ -6226,44 +6382,45 @@ var spokeChainConfig = {
6226
6382
  symbol: "S",
6227
6383
  name: "Sonic",
6228
6384
  decimals: 18,
6229
- address: "0x0000000000000000000000000000000000000000"
6230
- },
6231
- bnUSD: {
6232
- symbol: "bnUSD",
6233
- name: "bnUSD",
6234
- decimals: 18,
6235
- address: "0xE801CA34E19aBCbFeA12025378D19c4FBE250131"
6385
+ address: "0x0000000000000000000000000000000000000000",
6386
+ xChainId: SONIC_MAINNET_CHAIN_ID
6236
6387
  },
6237
6388
  WETH: {
6238
6389
  symbol: "WETH",
6239
6390
  name: "Wrapped Ether",
6240
6391
  decimals: 18,
6241
- address: "0x50c42dEAcD8Fc9773493ED674b675bE577f2634b"
6392
+ address: "0x50c42dEAcD8Fc9773493ED674b675bE577f2634b",
6393
+ xChainId: SONIC_MAINNET_CHAIN_ID
6242
6394
  },
6243
6395
  USDC: {
6244
6396
  symbol: "USDC",
6245
6397
  name: "USD Coin",
6246
6398
  decimals: 6,
6247
- address: "0x29219dd400f2Bf60E5a23d13Be72B486D4038894"
6399
+ address: "0x29219dd400f2Bf60E5a23d13Be72B486D4038894",
6400
+ xChainId: SONIC_MAINNET_CHAIN_ID
6248
6401
  },
6249
6402
  USDT: {
6250
6403
  symbol: "USDT",
6251
6404
  name: "Tether USD",
6252
6405
  decimals: 6,
6253
- address: "0x6047828dc181963ba44974801FF68e538dA5eaF9"
6406
+ address: "0x6047828dc181963ba44974801FF68e538dA5eaF9",
6407
+ xChainId: SONIC_MAINNET_CHAIN_ID
6254
6408
  },
6255
6409
  wS: {
6256
6410
  symbol: "wS",
6257
6411
  name: "Wrapped Sonic",
6258
6412
  decimals: 18,
6259
- address: "0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38"
6413
+ address: "0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38",
6414
+ xChainId: SONIC_MAINNET_CHAIN_ID
6260
6415
  },
6261
6416
  SODA: {
6262
6417
  symbol: "SODA",
6263
6418
  name: "SODAX",
6264
6419
  decimals: 18,
6265
- address: "0x7c7d53EEcda37a87ce0D5bf8E0b24512A48dC963"
6266
- }
6420
+ address: "0x7c7d53EEcda37a87ce0D5bf8E0b24512A48dC963",
6421
+ xChainId: SONIC_MAINNET_CHAIN_ID
6422
+ },
6423
+ ...SodaTokens
6267
6424
  }
6268
6425
  },
6269
6426
  [SOLANA_MAINNET_CHAIN_ID]: {
@@ -6282,19 +6439,29 @@ var spokeChainConfig = {
6282
6439
  symbol: "SOL",
6283
6440
  name: "Solana",
6284
6441
  decimals: 9,
6285
- address: "11111111111111111111111111111111"
6442
+ address: "11111111111111111111111111111111",
6443
+ xChainId: SOLANA_MAINNET_CHAIN_ID
6286
6444
  },
6287
6445
  bnUSD: {
6288
6446
  symbol: "bnUSD",
6289
6447
  name: "bnUSD",
6290
6448
  decimals: 9,
6291
- address: "3rSPCLNEF7Quw4wX8S1NyKivELoyij8eYA2gJwBgt4V5"
6449
+ address: "3rSPCLNEF7Quw4wX8S1NyKivELoyij8eYA2gJwBgt4V5",
6450
+ xChainId: SOLANA_MAINNET_CHAIN_ID
6292
6451
  },
6293
6452
  USDC: {
6294
6453
  symbol: "USDC",
6295
6454
  name: "USD Coin",
6296
6455
  decimals: 6,
6297
- address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
6456
+ address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
6457
+ xChainId: SOLANA_MAINNET_CHAIN_ID
6458
+ },
6459
+ SODA: {
6460
+ symbol: "SODA",
6461
+ name: "SODAX",
6462
+ decimals: 9,
6463
+ address: "8Bj8gSbga8My8qRkT1RrvgxFBExiGFgdRNHFaR9o2T3Q",
6464
+ xChainId: SOLANA_MAINNET_CHAIN_ID
6298
6465
  }
6299
6466
  },
6300
6467
  gasPrice: "500000",
@@ -6318,25 +6485,36 @@ var spokeChainConfig = {
6318
6485
  symbol: "AVAX",
6319
6486
  name: "Avalanche",
6320
6487
  decimals: 18,
6321
- address: "0x0000000000000000000000000000000000000000"
6488
+ address: "0x0000000000000000000000000000000000000000",
6489
+ xChainId: AVALANCHE_MAINNET_CHAIN_ID
6322
6490
  },
6323
6491
  bnUSD: {
6324
6492
  symbol: "bnUSD",
6325
6493
  name: "bnUSD",
6326
6494
  decimals: 18,
6327
- address: "0x6958a4CBFe11406E2a1c1d3a71A1971aD8B3b92F"
6495
+ address: "0x6958a4CBFe11406E2a1c1d3a71A1971aD8B3b92F",
6496
+ xChainId: AVALANCHE_MAINNET_CHAIN_ID
6328
6497
  },
6329
6498
  USDT: {
6330
6499
  symbol: "USDT",
6331
6500
  name: "Tether USD",
6332
6501
  decimals: 6,
6333
- address: "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7"
6502
+ address: "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7",
6503
+ xChainId: AVALANCHE_MAINNET_CHAIN_ID
6334
6504
  },
6335
6505
  USDC: {
6336
6506
  symbol: "USDC",
6337
6507
  name: "USD Coin",
6338
6508
  decimals: 6,
6339
- address: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"
6509
+ address: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
6510
+ xChainId: AVALANCHE_MAINNET_CHAIN_ID
6511
+ },
6512
+ SODA: {
6513
+ symbol: "SODA",
6514
+ name: "SODAX",
6515
+ decimals: 18,
6516
+ address: "0x390ceed555905ec225Da330A188EA04e85570f00",
6517
+ xChainId: AVALANCHE_MAINNET_CHAIN_ID
6340
6518
  }
6341
6519
  }
6342
6520
  },
@@ -6357,13 +6535,22 @@ var spokeChainConfig = {
6357
6535
  symbol: "NIBI",
6358
6536
  name: "Nibiru",
6359
6537
  decimals: 6,
6360
- address: "0x0000000000000000000000000000000000000000"
6538
+ address: "0x0000000000000000000000000000000000000000",
6539
+ xChainId: NIBIRU_MAINNET_CHAIN_ID
6361
6540
  },
6362
6541
  bnUSD: {
6363
6542
  symbol: "bnUSD",
6364
6543
  name: "bnUSD",
6365
6544
  decimals: 18,
6366
- address: "0x043fb7e23350Dd5b77dE5E228B528763DEcb9131"
6545
+ address: "0x043fb7e23350Dd5b77dE5E228B528763DEcb9131",
6546
+ xChainId: NIBIRU_MAINNET_CHAIN_ID
6547
+ },
6548
+ SODA: {
6549
+ symbol: "SODA",
6550
+ name: "SODAX",
6551
+ decimals: 18,
6552
+ address: "0x5bda87f18109CA85fa7ADDf1D48B97734e9dc6F5",
6553
+ xChainId: NIBIRU_MAINNET_CHAIN_ID
6367
6554
  }
6368
6555
  }
6369
6556
  },
@@ -6384,49 +6571,64 @@ var spokeChainConfig = {
6384
6571
  symbol: "ETH",
6385
6572
  name: "Ethereum",
6386
6573
  decimals: 18,
6387
- address: "0x0000000000000000000000000000000000000000"
6574
+ address: "0x0000000000000000000000000000000000000000",
6575
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6388
6576
  },
6389
6577
  bnUSD: {
6390
6578
  symbol: "bnUSD",
6391
6579
  name: "bnUSD",
6392
6580
  decimals: 18,
6393
- address: "0xA256dd181C3f6E5eC68C6869f5D50a712d47212e"
6581
+ address: "0xA256dd181C3f6E5eC68C6869f5D50a712d47212e",
6582
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6394
6583
  },
6395
6584
  wstETH: {
6396
6585
  symbol: "wstETH",
6397
6586
  name: "Wrapped stETH",
6398
6587
  decimals: 18,
6399
- address: "0x5979D7b546E38E414F7E9822514be443A4800529"
6588
+ address: "0x5979D7b546E38E414F7E9822514be443A4800529",
6589
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6400
6590
  },
6401
6591
  weETH: {
6402
6592
  symbol: "weETH",
6403
6593
  name: "Wrapped eETH",
6404
6594
  decimals: 18,
6405
- address: "0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe"
6595
+ address: "0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe",
6596
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6406
6597
  },
6407
6598
  tBTC: {
6408
6599
  symbol: "tBTC",
6409
6600
  name: "Arbitrum tBTC v2",
6410
6601
  decimals: 18,
6411
- address: "0x6c84a8f1c29108F47a79964b5Fe888D4f4D0dE40"
6602
+ address: "0x6c84a8f1c29108F47a79964b5Fe888D4f4D0dE40",
6603
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6412
6604
  },
6413
6605
  WBTC: {
6414
6606
  symbol: "WBTC",
6415
6607
  name: "Wrapped BTC",
6416
6608
  decimals: 8,
6417
- address: "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f"
6609
+ address: "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f",
6610
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6418
6611
  },
6419
6612
  USDC: {
6420
6613
  symbol: "USDC",
6421
6614
  name: "USD Coin (USDC)",
6422
6615
  decimals: 6,
6423
- address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
6616
+ address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
6617
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6424
6618
  },
6425
6619
  USDT: {
6426
6620
  symbol: "USDT",
6427
6621
  name: "TetherToken",
6428
6622
  decimals: 6,
6429
- address: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9"
6623
+ address: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
6624
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6625
+ },
6626
+ SODA: {
6627
+ symbol: "SODA",
6628
+ name: "SODAX",
6629
+ decimals: 18,
6630
+ address: "0x6958a4CBFe11406E2a1c1d3a71A1971aD8B3b92F",
6631
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6430
6632
  }
6431
6633
  }
6432
6634
  },
@@ -6447,37 +6649,50 @@ var spokeChainConfig = {
6447
6649
  symbol: "ETH",
6448
6650
  name: "Ethereum",
6449
6651
  decimals: 18,
6450
- address: "0x0000000000000000000000000000000000000000"
6652
+ address: "0x0000000000000000000000000000000000000000",
6653
+ xChainId: BASE_MAINNET_CHAIN_ID
6451
6654
  },
6452
6655
  bnUSD: {
6453
6656
  symbol: "bnUSD",
6454
6657
  name: "bnUSD",
6455
6658
  decimals: 18,
6456
- address: "0xAcfab3F31C0a18559D78556BBf297EC29c6cf8aa"
6659
+ address: "0xAcfab3F31C0a18559D78556BBf297EC29c6cf8aa",
6660
+ xChainId: BASE_MAINNET_CHAIN_ID
6457
6661
  },
6458
6662
  weETH: {
6459
6663
  symbol: "weETH",
6460
6664
  name: "Wrapped eETH",
6461
6665
  decimals: 18,
6462
- address: "0x04c0599ae5a44757c0af6f9ec3b93da8976c150a"
6666
+ address: "0x04c0599ae5a44757c0af6f9ec3b93da8976c150a",
6667
+ xChainId: BASE_MAINNET_CHAIN_ID
6463
6668
  },
6464
6669
  USDC: {
6465
6670
  symbol: "USDC",
6466
6671
  name: "USD Coin",
6467
6672
  decimals: 6,
6468
- address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
6673
+ address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
6674
+ xChainId: BASE_MAINNET_CHAIN_ID
6469
6675
  },
6470
6676
  wstETH: {
6471
6677
  symbol: "wstETH",
6472
6678
  name: "Wrapped stETH",
6473
6679
  decimals: 18,
6474
- address: "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452"
6680
+ address: "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452",
6681
+ xChainId: BASE_MAINNET_CHAIN_ID
6475
6682
  },
6476
6683
  cbBTC: {
6477
6684
  symbol: "cbBTC",
6478
6685
  name: "Coinbase Wrapped BTC",
6479
6686
  decimals: 8,
6480
- address: "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf"
6687
+ address: "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf",
6688
+ xChainId: BASE_MAINNET_CHAIN_ID
6689
+ },
6690
+ SODA: {
6691
+ symbol: "SODA",
6692
+ name: "SODAX",
6693
+ decimals: 18,
6694
+ address: "0xdc5B4b00F98347E95b9F94911213DAB4C687e1e3",
6695
+ xChainId: BASE_MAINNET_CHAIN_ID
6481
6696
  }
6482
6697
  }
6483
6698
  },
@@ -6498,37 +6713,50 @@ var spokeChainConfig = {
6498
6713
  symbol: "ETH",
6499
6714
  name: "Ethereum",
6500
6715
  decimals: 18,
6501
- address: "0x0000000000000000000000000000000000000000"
6716
+ address: "0x0000000000000000000000000000000000000000",
6717
+ xChainId: OPTIMISM_MAINNET_CHAIN_ID
6502
6718
  },
6503
6719
  bnUSD: {
6504
6720
  symbol: "bnUSD",
6505
6721
  name: "bnUSD",
6506
6722
  decimals: 18,
6507
- address: "0xF4f7dC27c17470a26d0de9039Cf0EA5045F100E8"
6723
+ address: "0xF4f7dC27c17470a26d0de9039Cf0EA5045F100E8",
6724
+ xChainId: OPTIMISM_MAINNET_CHAIN_ID
6508
6725
  },
6509
6726
  USDC: {
6510
6727
  symbol: "USDC",
6511
6728
  name: "USD Coin",
6512
6729
  decimals: 6,
6513
- address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"
6730
+ address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
6731
+ xChainId: OPTIMISM_MAINNET_CHAIN_ID
6514
6732
  },
6515
6733
  wstETH: {
6516
6734
  symbol: "wstETH",
6517
6735
  name: "Wrapped stETH",
6518
6736
  decimals: 18,
6519
- address: "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb"
6737
+ address: "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb",
6738
+ xChainId: OPTIMISM_MAINNET_CHAIN_ID
6520
6739
  },
6521
6740
  weETH: {
6522
6741
  symbol: "weETH",
6523
6742
  name: "Wrapped eETH",
6524
6743
  decimals: 18,
6525
- address: "0x5A7fACB970D094B6C7FF1df0eA68D99E6e73CBFF"
6744
+ address: "0x5A7fACB970D094B6C7FF1df0eA68D99E6e73CBFF",
6745
+ xChainId: OPTIMISM_MAINNET_CHAIN_ID
6526
6746
  },
6527
6747
  USDT: {
6528
6748
  symbol: "USDT",
6529
6749
  name: "Tether USD",
6530
6750
  decimals: 6,
6531
- address: "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58"
6751
+ address: "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58",
6752
+ xChainId: OPTIMISM_MAINNET_CHAIN_ID
6753
+ },
6754
+ SODA: {
6755
+ symbol: "SODA",
6756
+ name: "SODAX",
6757
+ decimals: 18,
6758
+ address: "0x1f22279C89B213944b7Ea41daCB0a868DdCDFd13",
6759
+ xChainId: OPTIMISM_MAINNET_CHAIN_ID
6532
6760
  }
6533
6761
  }
6534
6762
  },
@@ -6549,31 +6777,43 @@ var spokeChainConfig = {
6549
6777
  symbol: "BNB",
6550
6778
  name: "BNB",
6551
6779
  decimals: 18,
6552
- address: "0x0000000000000000000000000000000000000000"
6780
+ address: "0x0000000000000000000000000000000000000000",
6781
+ xChainId: BSC_MAINNET_CHAIN_ID
6553
6782
  },
6554
6783
  bnUSD: {
6555
6784
  symbol: "bnUSD",
6556
6785
  name: "bnUSD",
6557
6786
  decimals: 18,
6558
- address: "0x8428FedC020737a5A2291F46cB1B80613eD71638"
6787
+ address: "0x8428FedC020737a5A2291F46cB1B80613eD71638",
6788
+ xChainId: BSC_MAINNET_CHAIN_ID
6559
6789
  },
6560
6790
  ETHB: {
6561
6791
  symbol: "ETHB",
6562
6792
  name: "Ethereum BSC",
6563
6793
  decimals: 18,
6564
- address: "0x2170Ed0880ac9A755fd29B2688956BD959F933F8"
6794
+ address: "0x2170Ed0880ac9A755fd29B2688956BD959F933F8",
6795
+ xChainId: BSC_MAINNET_CHAIN_ID
6565
6796
  },
6566
6797
  BTCB: {
6567
6798
  symbol: "BTCB",
6568
6799
  name: "Bitcoin BSC",
6569
6800
  decimals: 18,
6570
- address: "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c"
6801
+ address: "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c",
6802
+ xChainId: BSC_MAINNET_CHAIN_ID
6571
6803
  },
6572
6804
  USDC: {
6573
6805
  symbol: "USDC",
6574
6806
  name: "USD Coin",
6575
6807
  decimals: 18,
6576
- address: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"
6808
+ address: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
6809
+ xChainId: BSC_MAINNET_CHAIN_ID
6810
+ },
6811
+ SODA: {
6812
+ symbol: "SODA",
6813
+ name: "SODAX",
6814
+ decimals: 18,
6815
+ address: "0xdc5B4b00F98347E95b9F94911213DAB4C687e1e3",
6816
+ xChainId: BSC_MAINNET_CHAIN_ID
6577
6817
  }
6578
6818
  }
6579
6819
  },
@@ -6594,19 +6834,29 @@ var spokeChainConfig = {
6594
6834
  symbol: "POL",
6595
6835
  name: "Polygon",
6596
6836
  decimals: 18,
6597
- address: "0x0000000000000000000000000000000000000000"
6837
+ address: "0x0000000000000000000000000000000000000000",
6838
+ xChainId: POLYGON_MAINNET_CHAIN_ID
6598
6839
  },
6599
6840
  bnUSD: {
6600
6841
  symbol: "bnUSD",
6601
6842
  name: "bnUSD",
6602
6843
  decimals: 18,
6603
- address: "0x39E77f86C1B1f3fbAb362A82b49D2E86C09659B4"
6844
+ address: "0x39E77f86C1B1f3fbAb362A82b49D2E86C09659B4",
6845
+ xChainId: POLYGON_MAINNET_CHAIN_ID
6604
6846
  },
6605
6847
  USDC: {
6606
6848
  symbol: "USDC",
6607
6849
  name: "USD Coin",
6608
6850
  decimals: 6,
6609
- address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
6851
+ address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
6852
+ xChainId: POLYGON_MAINNET_CHAIN_ID
6853
+ },
6854
+ SODA: {
6855
+ symbol: "SODA",
6856
+ name: "SODAX",
6857
+ decimals: 18,
6858
+ address: "0xDDF645F33eDAD18fC23E01416eD0267A1bF59D45",
6859
+ xChainId: POLYGON_MAINNET_CHAIN_ID
6610
6860
  }
6611
6861
  }
6612
6862
  },
@@ -6631,19 +6881,29 @@ var spokeChainConfig = {
6631
6881
  symbol: "INJ",
6632
6882
  name: "Injective",
6633
6883
  decimals: 18,
6634
- address: "inj"
6884
+ address: "inj",
6885
+ xChainId: INJECTIVE_MAINNET_CHAIN_ID
6635
6886
  },
6636
6887
  bnUSD: {
6637
6888
  symbol: "bnUSD",
6638
6889
  name: "bnUSD",
6639
6890
  decimals: 18,
6640
- address: "factory/inj1d036ftaatxpkqsu9hja8r24rv3v33chz3appxp/bnUSD"
6891
+ address: "factory/inj1d036ftaatxpkqsu9hja8r24rv3v33chz3appxp/bnUSD",
6892
+ xChainId: INJECTIVE_MAINNET_CHAIN_ID
6641
6893
  },
6642
6894
  USDC: {
6643
6895
  symbol: "USDC",
6644
6896
  name: "USD Coin",
6645
6897
  decimals: 6,
6646
- address: "ibc/2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E"
6898
+ address: "ibc/2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E",
6899
+ xChainId: INJECTIVE_MAINNET_CHAIN_ID
6900
+ },
6901
+ SODA: {
6902
+ symbol: "SODA",
6903
+ name: "SODAX",
6904
+ decimals: 18,
6905
+ address: "factory/inj1d036ftaatxpkqsu9hja8r24rv3v33chz3appxp/soda",
6906
+ xChainId: INJECTIVE_MAINNET_CHAIN_ID
6647
6907
  }
6648
6908
  },
6649
6909
  gasPrice: "500000000inj",
@@ -6666,25 +6926,36 @@ var spokeChainConfig = {
6666
6926
  symbol: "bnUSD",
6667
6927
  name: "bnUSD",
6668
6928
  decimals: 7,
6669
- address: "CD6YBFFWMU2UJHX2NGRJ7RN76IJVTCC7MRA46DUBXNB7E6W7H7JRJ2CX"
6929
+ address: "CD6YBFFWMU2UJHX2NGRJ7RN76IJVTCC7MRA46DUBXNB7E6W7H7JRJ2CX",
6930
+ xChainId: STELLAR_MAINNET_CHAIN_ID
6670
6931
  },
6671
6932
  XLM: {
6672
6933
  symbol: "XLM",
6673
6934
  name: "Stellar Lumens",
6674
6935
  decimals: 7,
6675
- address: "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA"
6936
+ address: "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA",
6937
+ xChainId: STELLAR_MAINNET_CHAIN_ID
6676
6938
  },
6677
6939
  USDC: {
6678
6940
  symbol: "USDC",
6679
6941
  name: "USD Coin",
6680
6942
  decimals: 7,
6681
- address: "CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"
6943
+ address: "CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75",
6944
+ xChainId: STELLAR_MAINNET_CHAIN_ID
6682
6945
  },
6683
6946
  legacybnUSD: {
6684
- symbol: "bnUSD",
6947
+ symbol: "bnUSD (legacy)",
6685
6948
  name: "legacybnUSD",
6686
6949
  decimals: 18,
6687
- address: "CCT4ZYIYZ3TUO2AWQFEOFGBZ6HQP3GW5TA37CK7CRZVFRDXYTHTYX7KP"
6950
+ address: "CCT4ZYIYZ3TUO2AWQFEOFGBZ6HQP3GW5TA37CK7CRZVFRDXYTHTYX7KP",
6951
+ xChainId: STELLAR_MAINNET_CHAIN_ID
6952
+ },
6953
+ SODA: {
6954
+ symbol: "SODA",
6955
+ name: "SODAX",
6956
+ decimals: 7,
6957
+ address: "CAH5LKJC2ZB4RVUVEVL2QWJWNJLHQE2UF767ILLQ5EQ4O3OURR2XIUGM",
6958
+ xChainId: STELLAR_MAINNET_CHAIN_ID
6688
6959
  }
6689
6960
  },
6690
6961
  nativeToken: "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA",
@@ -6711,61 +6982,78 @@ var spokeChainConfig = {
6711
6982
  symbol: "SUI",
6712
6983
  name: "SUI",
6713
6984
  decimals: 9,
6714
- address: "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI"
6985
+ address: "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
6986
+ xChainId: SUI_MAINNET_CHAIN_ID
6715
6987
  },
6716
6988
  bnUSD: {
6717
6989
  symbol: "bnUSD",
6718
6990
  name: "bnUSD",
6719
6991
  decimals: 9,
6720
- address: "0xff4de2b2b57dd7611d2812d231a467d007b702a101fd5c7ad3b278257cddb507::bnusd::BNUSD"
6992
+ address: "0xff4de2b2b57dd7611d2812d231a467d007b702a101fd5c7ad3b278257cddb507::bnusd::BNUSD",
6993
+ xChainId: SUI_MAINNET_CHAIN_ID
6721
6994
  },
6722
6995
  USDC: {
6723
6996
  symbol: "USDC",
6724
6997
  name: "USD Coin",
6725
6998
  decimals: 6,
6726
- address: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC"
6999
+ address: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
7000
+ xChainId: SUI_MAINNET_CHAIN_ID
6727
7001
  },
6728
7002
  legacybnUSD: {
6729
- symbol: "bnUSD",
7003
+ symbol: "bnUSD (legacy)",
6730
7004
  name: "legacybnUSD",
6731
7005
  decimals: 9,
6732
- address: "0x03917a812fe4a6d6bc779c5ab53f8a80ba741f8af04121193fc44e0f662e2ceb::balanced_dollar::BALANCED_DOLLAR"
7006
+ address: "0x03917a812fe4a6d6bc779c5ab53f8a80ba741f8af04121193fc44e0f662e2ceb::balanced_dollar::BALANCED_DOLLAR",
7007
+ xChainId: SUI_MAINNET_CHAIN_ID
6733
7008
  },
6734
7009
  afSUI: {
6735
7010
  symbol: "afSUI",
6736
7011
  name: "Aftermath Staked Sui",
6737
7012
  decimals: 9,
6738
- address: "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI"
7013
+ address: "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI",
7014
+ xChainId: SUI_MAINNET_CHAIN_ID
6739
7015
  },
6740
7016
  mSUI: {
6741
7017
  symbol: "mSUI",
6742
7018
  name: "Mirai Staked SUI",
6743
7019
  decimals: 9,
6744
- address: "0x922d15d7f55c13fd790f6e54397470ec592caa2b508df292a2e8553f3d3b274f::msui::MSUI"
7020
+ address: "0x922d15d7f55c13fd790f6e54397470ec592caa2b508df292a2e8553f3d3b274f::msui::MSUI",
7021
+ xChainId: SUI_MAINNET_CHAIN_ID
6745
7022
  },
6746
7023
  haSUI: {
6747
7024
  symbol: "haSUI",
6748
7025
  name: "haSUI",
6749
7026
  decimals: 9,
6750
- address: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI"
7027
+ address: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",
7028
+ xChainId: SUI_MAINNET_CHAIN_ID
6751
7029
  },
6752
7030
  vSUI: {
6753
7031
  symbol: "vSUI",
6754
7032
  name: "Volo Staked SUI",
6755
7033
  decimals: 9,
6756
- address: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT"
7034
+ address: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",
7035
+ xChainId: SUI_MAINNET_CHAIN_ID
6757
7036
  },
6758
7037
  yapSUI: {
6759
7038
  symbol: "yapSUI",
6760
7039
  name: "Yap Staked SUI",
6761
7040
  decimals: 9,
6762
- address: "0x83f1bb8c91ecd1fd313344058b0eed94d63c54e41d8d1ae5bff1353443517d65::yap_sui::YAP_SUI"
7041
+ address: "0x83f1bb8c91ecd1fd313344058b0eed94d63c54e41d8d1ae5bff1353443517d65::yap_sui::YAP_SUI",
7042
+ xChainId: SUI_MAINNET_CHAIN_ID
6763
7043
  },
6764
7044
  trevinSUI: {
6765
7045
  symbol: "trevinSUI",
6766
7046
  name: "Trevin Staked SUI",
6767
7047
  decimals: 9,
6768
- address: "0x502867b177303bf1bf226245fcdd3403c177e78d175a55a56c0602c7ff51c7fa::trevin_sui::TREVIN_SUI"
7048
+ address: "0x502867b177303bf1bf226245fcdd3403c177e78d175a55a56c0602c7ff51c7fa::trevin_sui::TREVIN_SUI",
7049
+ xChainId: SUI_MAINNET_CHAIN_ID
7050
+ },
7051
+ SODA: {
7052
+ symbol: "SODA",
7053
+ name: "SODAX",
7054
+ decimals: 9,
7055
+ address: "0x0a0393721732617a2a771535e83c0a46f04aeef7d03239bbbb1249bc0981b952::soda::SODA",
7056
+ xChainId: SUI_MAINNET_CHAIN_ID
6769
7057
  }
6770
7058
  },
6771
7059
  nativeToken: "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
@@ -6786,7 +7074,7 @@ var spokeChainConfig = {
6786
7074
  },
6787
7075
  chain: {
6788
7076
  id: ICON_MAINNET_CHAIN_ID,
6789
- name: "ICON Mainnet",
7077
+ name: "ICON",
6790
7078
  type: "ICON"
6791
7079
  },
6792
7080
  supportedTokens: {
@@ -6794,33 +7082,38 @@ var spokeChainConfig = {
6794
7082
  symbol: "ICX",
6795
7083
  name: "ICON",
6796
7084
  decimals: 18,
6797
- address: "cx0000000000000000000000000000000000000000"
7085
+ address: "cx0000000000000000000000000000000000000000",
7086
+ xChainId: ICON_MAINNET_CHAIN_ID
6798
7087
  },
6799
7088
  wICX: {
6800
7089
  symbol: "wICX",
6801
7090
  name: "Wrapped ICX",
6802
7091
  decimals: 18,
6803
- address: "cx3975b43d260fb8ec802cef6e60c2f4d07486f11d"
7092
+ address: "cx3975b43d260fb8ec802cef6e60c2f4d07486f11d",
7093
+ xChainId: ICON_MAINNET_CHAIN_ID
6804
7094
  },
6805
7095
  bnUSD: {
6806
7096
  // same as legacy
6807
- symbol: "bnUSD",
7097
+ symbol: "bnUSD (legacy)",
6808
7098
  name: "bnUSD",
6809
7099
  decimals: 18,
6810
- address: "cx88fd7df7ddff82f7cc735c871dc519838cb235bb"
7100
+ address: "cx88fd7df7ddff82f7cc735c871dc519838cb235bb",
7101
+ xChainId: ICON_MAINNET_CHAIN_ID
6811
7102
  },
6812
7103
  legacybnUSD: {
6813
7104
  // duplicate of bnUSD purely for consistency with other legacy tokens chains (sui, stellar)
6814
- symbol: "bnUSD",
7105
+ symbol: "bnUSD (legacy)",
6815
7106
  name: "bnUSD",
6816
7107
  decimals: 18,
6817
- address: "cx88fd7df7ddff82f7cc735c871dc519838cb235bb"
7108
+ address: "cx88fd7df7ddff82f7cc735c871dc519838cb235bb",
7109
+ xChainId: ICON_MAINNET_CHAIN_ID
6818
7110
  },
6819
7111
  BALN: {
6820
7112
  symbol: "BALN",
6821
7113
  name: "BALN",
6822
7114
  decimals: 18,
6823
- address: "cxf61cd5a45dc9f91c15aa65831a30a90d59a09619"
7115
+ address: "cxf61cd5a45dc9f91c15aa65831a30a90d59a09619",
7116
+ xChainId: ICON_MAINNET_CHAIN_ID
6824
7117
  }
6825
7118
  },
6826
7119
  nativeToken: "cx0000000000000000000000000000000000000000",
@@ -6828,26 +7121,8 @@ var spokeChainConfig = {
6828
7121
  nid: "0x1"
6829
7122
  }
6830
7123
  };
6831
- var HubVaultSymbols = [
6832
- "sodaAVAX",
6833
- "sodaBNB",
6834
- "sodaETH",
6835
- "sodaBTC",
6836
- "sodaSUI",
6837
- "sodaINJ",
6838
- "sodaXLM",
6839
- "sodaSOL",
6840
- "sodaSODA",
6841
- "sodaUSDT",
6842
- "sodaUSDC",
6843
- "bnUSD",
6844
- "sodaPOL",
6845
- "sodaNIBI",
6846
- "sodaS",
6847
- "IbnUSD"
6848
- ];
6849
7124
  var hubVaults = {
6850
- IbnUSD: {
7125
+ [SodaTokens.IbnUSD.symbol]: {
6851
7126
  // ICON bnUSD (Migration) vault on Sonic contains legacy bnUSD tokens (stellar, sui, icon)
6852
7127
  address: "0x9D4b663Eb075d2a1C7B8eaEFB9eCCC0510388B51",
6853
7128
  reserves: [
@@ -6857,28 +7132,28 @@ var hubVaults = {
6857
7132
  "0x1559B52d2e165da1505a542EA37C543c9137f52a"
6858
7133
  ]
6859
7134
  },
6860
- sodaS: {
7135
+ [SodaTokens.sodaS.symbol]: {
6861
7136
  address: "0x62ecc3eeb80a162c57624b3ff80313fe69f5203e",
6862
7137
  reserves: [
6863
7138
  // hub asset addresses contained in the vault
6864
7139
  "0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38"
6865
7140
  ]
6866
7141
  },
6867
- sodaNIBI: {
7142
+ [SodaTokens.sodaNIBI.symbol]: {
6868
7143
  address: "0xc6c85287a8b173a509c2f198bb719a8a5a2d0c68",
6869
7144
  reserves: [
6870
7145
  // hub asset addresses contained in the vault
6871
7146
  "0xe0064414c2c1a636a9424c7a17d86fbf7fd3f190"
6872
7147
  ]
6873
7148
  },
6874
- sodaPOL: {
7149
+ [SodaTokens.sodaPOL.symbol]: {
6875
7150
  address: "0x208ed38f4783328aa9ebfec360d32e7520a9b779",
6876
7151
  reserves: [
6877
7152
  // hub asset addresses contained in the vault
6878
7153
  "0x9ee17486571917837210824b0d4cadfe3b324d12"
6879
7154
  ]
6880
7155
  },
6881
- bnUSD: {
7156
+ [SodaTokens.bnUSD.symbol]: {
6882
7157
  // new bnUSD vault on Sonic (also contains IbnUSD vault token as part of it)
6883
7158
  address: "0xe801ca34e19abcbfea12025378d19c4fbe250131",
6884
7159
  reserves: [
@@ -6897,19 +7172,33 @@ var hubVaults = {
6897
7172
  "0xdf23097b9aeb917bf8fb70e99b6c528fffa35364",
6898
7173
  "0x11b93c162aabffd026539bb3b9f9ec22c8b7ef8a",
6899
7174
  "0x69425ffb14704124a58d6f69d510f74a59d9a5bc",
6900
- "0x9d4b663eb075d2a1c7b8eaefb9eccc0510388b51"
7175
+ "0x9d4b663eb075d2a1c7b8eaefb9eccc0510388b51",
7176
+ "0xD1d14BF3324C901855A1f7d0d5CA4c8458D2a780"
6901
7177
  ]
6902
7178
  },
6903
- sodaSODA: {
7179
+ [SodaTokens.sodaSODA.symbol]: {
6904
7180
  // SODA SODA vault
6905
7181
  address: "0x21685e341de7844135329914be6bd8d16982d834",
6906
7182
  reserves: [
6907
7183
  // hub asset addresses contained in the vault
6908
- "0x7c7d53eecda37a87ce0d5bf8e0b24512a48dc963"
7184
+ "0x7c7d53eecda37a87ce0d5bf8e0b24512a48dc963",
6909
7185
  // SODA SODA hub asset
7186
+ "0xf51d7082375cdca8C19C74e1A0c77dA482aFDa4e",
7187
+ "0x93a367E5B37a1B9E8D04ef25a6Af40d181a3DfFF",
7188
+ "0x17fF8Ad5EBe6CA8B15751067cD0c89f0E580CD17",
7189
+ "0x4d12c72A8633588097D10e57b559ed642588e4C6",
7190
+ "0x26cd76cB5622Dc8638670A16E0Da5a51394A8DB1",
7191
+ "0x0eD0d274dC77ef460DC96b9fBaFF3EDB074e0471",
7192
+ "0x8D78A620E009Ba751Eb40d77A5e9Db48A3F2016b",
7193
+ "0x4Cf5Ce9594AEDdc5D3efe9d4Cdf0b944b4e73A53",
7194
+ "0xD749B5FfFED7cEDaa3239abDd16D677179C29AEc",
7195
+ "0x07Db7b1a96ebE474B20F52fF487cEE415adee79e",
7196
+ "0x20Ce75CdcEe44B1308365447b91B9c26e2b71Ffd",
7197
+ "0x5Db9CEc919f40C50809D9490DC3BbA4F05b0a1D7",
7198
+ "0x655730024B673B3378CD6031B1Cd01eaE9afb138"
6910
7199
  ]
6911
7200
  },
6912
- sodaAVAX: {
7201
+ [SodaTokens.sodaAVAX.symbol]: {
6913
7202
  // SODA AVAX vault
6914
7203
  address: "0x14238d267557e9d799016ad635b53cd15935d290",
6915
7204
  reserves: [
@@ -6918,7 +7207,7 @@ var hubVaults = {
6918
7207
  // AvalancheAVAX hub asset
6919
7208
  ]
6920
7209
  },
6921
- sodaBNB: {
7210
+ [SodaTokens.sodaBNB.symbol]: {
6922
7211
  // SODA BNB vault
6923
7212
  address: "0x40cd41b35db9e5109ae7e54b44de8625db320e6b",
6924
7213
  reserves: [
@@ -6927,7 +7216,7 @@ var hubVaults = {
6927
7216
  // BSC BNB hub asset
6928
7217
  ]
6929
7218
  },
6930
- sodaETH: {
7219
+ [SodaTokens.sodaETH.symbol]: {
6931
7220
  // SODA ETH vault
6932
7221
  address: "0x4effb5813271699683c25c734f4dabc45b363709",
6933
7222
  reserves: [
@@ -6944,7 +7233,7 @@ var hubVaults = {
6944
7233
  // Sonic WETH hub asset
6945
7234
  ]
6946
7235
  },
6947
- sodaBTC: {
7236
+ [SodaTokens.sodaBTC.symbol]: {
6948
7237
  // SODA BTC vault
6949
7238
  address: "0x7a1a5555842ad2d0ed274d09b5c4406a95799d5d",
6950
7239
  reserves: [
@@ -6955,11 +7244,12 @@ var hubVaults = {
6955
7244
  // Arbitrum wBTC hub asset
6956
7245
  "0x96fc8540736f1598b7e235e6de8814062b3b5d3b",
6957
7246
  // Arbitrum tBTC hub asset,
6958
- "0xd8a24c71fea5bb81c66c01e532de7d9b11e13905"
7247
+ "0xd8a24c71fea5bb81c66c01e532de7d9b11e13905",
6959
7248
  // BSC BTCB hub asset
7249
+ "0x03E99853C6376b13a4c6e4d0A115F1639c9FA14e"
6960
7250
  ]
6961
7251
  },
6962
- sodaSUI: {
7252
+ [SodaTokens.sodaSUI.symbol]: {
6963
7253
  // SODA SUI vault
6964
7254
  address: "0xdc5b4b00f98347e95b9f94911213dab4c687e1e3",
6965
7255
  reserves: [
@@ -6968,7 +7258,7 @@ var hubVaults = {
6968
7258
  // SUI SUI hub asset
6969
7259
  ]
6970
7260
  },
6971
- sodaINJ: {
7261
+ [SodaTokens.sodaINJ.symbol]: {
6972
7262
  // SODA INJ vault
6973
7263
  address: "0x1f22279c89b213944b7ea41dacb0a868ddcdfd13",
6974
7264
  reserves: [
@@ -6977,7 +7267,7 @@ var hubVaults = {
6977
7267
  // Injective INJ hub asset
6978
7268
  ]
6979
7269
  },
6980
- sodaXLM: {
7270
+ [SodaTokens.sodaXLM.symbol]: {
6981
7271
  // SODA XLM vault
6982
7272
  address: "0x6bc8c37cba91f76e68c9e6d689a9c21e4d32079b",
6983
7273
  reserves: [
@@ -6986,7 +7276,7 @@ var hubVaults = {
6986
7276
  // Stellar XLM hub asset
6987
7277
  ]
6988
7278
  },
6989
- sodaSOL: {
7279
+ [SodaTokens.sodaSOL.symbol]: {
6990
7280
  // SODA SOL vault
6991
7281
  address: "0xdea692287e2ce8cb08fa52917be0f16b1dacdc87",
6992
7282
  reserves: [
@@ -6995,7 +7285,7 @@ var hubVaults = {
6995
7285
  // Solana SOL hub asset
6996
7286
  ]
6997
7287
  },
6998
- sodaUSDT: {
7288
+ [SodaTokens.sodaUSDT.symbol]: {
6999
7289
  // SODA USDT vault
7000
7290
  address: "0xbdf1f453fcb61424011bbddcb96cfdb30f3fe876",
7001
7291
  reserves: [
@@ -7007,7 +7297,7 @@ var hubVaults = {
7007
7297
  // Sonic USDT
7008
7298
  ]
7009
7299
  },
7010
- sodaUSDC: {
7300
+ [SodaTokens.sodaUSDC.symbol]: {
7011
7301
  address: "0xabbb91c0617090f0028bdc27597cd0d038f3a833",
7012
7302
  reserves: [
7013
7303
  "0x41abf4b1559ff709ef8150079bcb26db1fffd117",
@@ -7021,10 +7311,25 @@ var hubVaults = {
7021
7311
  "0x4bc1211faa06fb50ff61a70331f56167ae511057",
7022
7312
  "0x348007b53f25a9a857ab8ea81ec9e3ccbcf440f2",
7023
7313
  "0xc3f020057510ffe10ceb882e1b48238b43d78a5e",
7024
- "0x9d58508ad10d34048a11640735ca5075bba07b35"
7314
+ "0x9d58508ad10d34048a11640735ca5075bba07b35",
7315
+ "0xC1df02fb7b1b06bE886592C89F6955387998B2f7"
7025
7316
  ]
7026
7317
  }
7027
7318
  };
7319
+ var hubVaultTokensMap = new Map(
7320
+ Object.entries(hubVaults).map(([symbol, vault]) => [
7321
+ vault.address.toLowerCase(),
7322
+ {
7323
+ address: vault.address.toLowerCase(),
7324
+ symbol,
7325
+ name: symbol,
7326
+ decimals: 18
7327
+ }
7328
+ ])
7329
+ );
7330
+ var getHubVaultTokenByAddress = (address) => {
7331
+ return hubVaultTokensMap.get(address.toLowerCase());
7332
+ };
7028
7333
  var bnUSDLegacySpokeChainIds = [
7029
7334
  ICON_MAINNET_CHAIN_ID,
7030
7335
  SUI_MAINNET_CHAIN_ID,
@@ -7070,6 +7375,13 @@ var hubAssets = {
7070
7375
  name: "Sonic",
7071
7376
  vault: hubVaults.sodaS.address
7072
7377
  },
7378
+ [spokeChainConfig[SONIC_MAINNET_CHAIN_ID].bnUSD]: {
7379
+ asset: "0x289cDa1043b4Ce26BDCa3c12E534f56b24308A5B",
7380
+ decimal: 18,
7381
+ symbol: "bnUSD",
7382
+ name: "bnUSD",
7383
+ vault: hubVaults.bnUSD.address
7384
+ },
7073
7385
  [spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.wS.address]: {
7074
7386
  asset: spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.wS.address,
7075
7387
  decimal: 18,
@@ -7104,7 +7416,8 @@ var hubAssets = {
7104
7416
  symbol: "SODA",
7105
7417
  name: "SODA",
7106
7418
  vault: hubVaults.sodaSODA.address
7107
- }
7419
+ },
7420
+ ...SodaTokensAsHubAssets
7108
7421
  },
7109
7422
  [AVALANCHE_MAINNET_CHAIN_ID]: {
7110
7423
  [spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].nativeToken]: {
@@ -7134,6 +7447,13 @@ var hubAssets = {
7134
7447
  symbol: "bnUSD",
7135
7448
  name: "bnUSD",
7136
7449
  vault: hubVaults.bnUSD.address
7450
+ },
7451
+ [spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7452
+ asset: "0xf51d7082375cdca8C19C74e1A0c77dA482aFDa4e",
7453
+ decimal: 18,
7454
+ symbol: "SODA",
7455
+ name: "SODAX",
7456
+ vault: hubVaults.sodaSODA.address
7137
7457
  }
7138
7458
  },
7139
7459
  [ARBITRUM_MAINNET_CHAIN_ID]: {
@@ -7194,6 +7514,13 @@ var hubAssets = {
7194
7514
  symbol: "bnUSD",
7195
7515
  name: "bnUSD",
7196
7516
  vault: hubVaults.bnUSD.address
7517
+ },
7518
+ [spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7519
+ asset: "0x93a367E5B37a1B9E8D04ef25a6Af40d181a3DfFF",
7520
+ decimal: 18,
7521
+ symbol: "SODA",
7522
+ name: "SODAX",
7523
+ vault: hubVaults.sodaSODA.address
7197
7524
  }
7198
7525
  },
7199
7526
  [BASE_MAINNET_CHAIN_ID]: {
@@ -7240,6 +7567,13 @@ var hubAssets = {
7240
7567
  name: "Wrapped Staked Ethereum",
7241
7568
  vault: "0x"
7242
7569
  // no vault yet
7570
+ },
7571
+ [spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7572
+ asset: "0x17fF8Ad5EBe6CA8B15751067cD0c89f0E580CD17",
7573
+ decimal: 18,
7574
+ symbol: "SODA",
7575
+ name: "SODAX",
7576
+ vault: hubVaults.sodaSODA.address
7243
7577
  }
7244
7578
  },
7245
7579
  [OPTIMISM_MAINNET_CHAIN_ID]: {
@@ -7286,6 +7620,13 @@ var hubAssets = {
7286
7620
  symbol: "USDT",
7287
7621
  name: "Tether USD",
7288
7622
  vault: hubVaults.sodaUSDT.address
7623
+ },
7624
+ [spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7625
+ asset: "0x0eD0d274dC77ef460DC96b9fBaFF3EDB074e0471",
7626
+ decimal: 18,
7627
+ symbol: "SODA",
7628
+ name: "SODAX",
7629
+ vault: hubVaults.sodaSODA.address
7289
7630
  }
7290
7631
  },
7291
7632
  [NIBIRU_MAINNET_CHAIN_ID]: {
@@ -7302,6 +7643,13 @@ var hubAssets = {
7302
7643
  symbol: "bnUSD",
7303
7644
  name: "bnUSD",
7304
7645
  vault: hubVaults.bnUSD.address
7646
+ },
7647
+ [spokeChainConfig[NIBIRU_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7648
+ asset: "0x26cd76cB5622Dc8638670A16E0Da5a51394A8DB1",
7649
+ decimal: 18,
7650
+ symbol: "SODA",
7651
+ name: "SODAX",
7652
+ vault: hubVaults.sodaSODA.address
7305
7653
  }
7306
7654
  },
7307
7655
  [BSC_MAINNET_CHAIN_ID]: {
@@ -7339,6 +7687,13 @@ var hubAssets = {
7339
7687
  symbol: "USDC",
7340
7688
  name: "USD Coin",
7341
7689
  vault: hubVaults.sodaUSDC.address
7690
+ },
7691
+ [spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7692
+ asset: "0x4d12c72A8633588097D10e57b559ed642588e4C6",
7693
+ decimal: 18,
7694
+ symbol: "SODA",
7695
+ name: "SODAX",
7696
+ vault: hubVaults.sodaSODA.address
7342
7697
  }
7343
7698
  },
7344
7699
  [POLYGON_MAINNET_CHAIN_ID]: {
@@ -7362,6 +7717,13 @@ var hubAssets = {
7362
7717
  symbol: "USDC",
7363
7718
  name: "USD Coin",
7364
7719
  vault: hubVaults.sodaUSDC.address
7720
+ },
7721
+ [spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7722
+ asset: "0x8D78A620E009Ba751Eb40d77A5e9Db48A3F2016b",
7723
+ decimal: 18,
7724
+ symbol: "SODA",
7725
+ name: "SODAX",
7726
+ vault: hubVaults.sodaSODA.address
7365
7727
  }
7366
7728
  },
7367
7729
  [INJECTIVE_MAINNET_CHAIN_ID]: {
@@ -7385,6 +7747,13 @@ var hubAssets = {
7385
7747
  symbol: "USDC",
7386
7748
  name: "USD Coin",
7387
7749
  vault: hubVaults.sodaUSDC.address
7750
+ },
7751
+ [spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7752
+ asset: "0x20Ce75CdcEe44B1308365447b91B9c26e2b71Ffd",
7753
+ decimal: 18,
7754
+ symbol: "SODA",
7755
+ name: "SODAX",
7756
+ vault: hubVaults.sodaSODA.address
7388
7757
  }
7389
7758
  },
7390
7759
  [STELLAR_MAINNET_CHAIN_ID]: {
@@ -7415,6 +7784,13 @@ var hubAssets = {
7415
7784
  symbol: "legacybnUSD",
7416
7785
  name: "legacybnUSD",
7417
7786
  vault: hubVaults.IbnUSD.address
7787
+ },
7788
+ [spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7789
+ asset: "0xD749B5FfFED7cEDaa3239abDd16D677179C29AEc",
7790
+ decimal: 7,
7791
+ symbol: "SODA",
7792
+ name: "SODAX",
7793
+ vault: hubVaults.sodaSODA.address
7418
7794
  }
7419
7795
  },
7420
7796
  [SUI_MAINNET_CHAIN_ID]: {
@@ -7493,6 +7869,13 @@ var hubAssets = {
7493
7869
  symbol: "bnUSD",
7494
7870
  name: "legacybnUSD",
7495
7871
  vault: hubVaults.IbnUSD.address
7872
+ },
7873
+ [spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7874
+ asset: "0x5Db9CEc919f40C50809D9490DC3BbA4F05b0a1D7",
7875
+ decimal: 9,
7876
+ symbol: "SODA",
7877
+ name: "SODAX",
7878
+ vault: hubVaults.sodaSODA.address
7496
7879
  }
7497
7880
  },
7498
7881
  [SOLANA_MAINNET_CHAIN_ID]: {
@@ -7516,6 +7899,13 @@ var hubAssets = {
7516
7899
  symbol: "USDC",
7517
7900
  name: "USD Coin",
7518
7901
  vault: hubVaults.sodaUSDC.address
7902
+ },
7903
+ [spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7904
+ asset: "0x07Db7b1a96ebE474B20F52fF487cEE415adee79e",
7905
+ decimal: 9,
7906
+ symbol: "SODA",
7907
+ name: "SODAX",
7908
+ vault: hubVaults.sodaSODA.address
7519
7909
  }
7520
7910
  },
7521
7911
  [ICON_MAINNET_CHAIN_ID]: {
@@ -7565,17 +7955,18 @@ var solverSupportedTokens = {
7565
7955
  spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.WETH,
7566
7956
  spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.USDC,
7567
7957
  spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.USDT,
7568
- spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.wS
7958
+ spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.wS,
7959
+ spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.bnUSD
7569
7960
  ],
7570
7961
  [AVALANCHE_MAINNET_CHAIN_ID]: [
7571
7962
  spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.AVAX,
7572
7963
  spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDT,
7573
- spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDC
7574
- // spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7964
+ spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDC,
7965
+ spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.bnUSD
7575
7966
  ],
7576
7967
  [ARBITRUM_MAINNET_CHAIN_ID]: [
7577
7968
  spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.ETH,
7578
- // spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7969
+ spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7579
7970
  spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.WBTC,
7580
7971
  spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.weETH,
7581
7972
  spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.wstETH,
@@ -7585,7 +7976,7 @@ var solverSupportedTokens = {
7585
7976
  ],
7586
7977
  [BASE_MAINNET_CHAIN_ID]: [
7587
7978
  spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.ETH,
7588
- // spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7979
+ spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7589
7980
  spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.weETH,
7590
7981
  spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.USDC,
7591
7982
  spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.wstETH,
@@ -7593,7 +7984,7 @@ var solverSupportedTokens = {
7593
7984
  ],
7594
7985
  [OPTIMISM_MAINNET_CHAIN_ID]: [
7595
7986
  spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.ETH,
7596
- // spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7987
+ spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7597
7988
  spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.USDC,
7598
7989
  spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.wstETH,
7599
7990
  // spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.weETH, // NOTE: Not Implemented
@@ -7601,19 +7992,20 @@ var solverSupportedTokens = {
7601
7992
  ],
7602
7993
  [POLYGON_MAINNET_CHAIN_ID]: [
7603
7994
  spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.POL,
7604
- // spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7995
+ spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7605
7996
  spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.USDC
7606
7997
  ],
7607
7998
  [BSC_MAINNET_CHAIN_ID]: [
7608
7999
  spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.BNB,
7609
8000
  spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.ETHB,
7610
8001
  spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.BTCB,
7611
- // spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
8002
+ spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7612
8003
  spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.USDC
7613
8004
  ],
7614
8005
  [SOLANA_MAINNET_CHAIN_ID]: [
7615
8006
  spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.SOL,
7616
- // spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
8007
+ spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
8008
+ // NOTE: Not Implemented
7617
8009
  spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.USDC
7618
8010
  ],
7619
8011
  [ICON_MAINNET_CHAIN_ID]: [
@@ -7625,12 +8017,14 @@ var solverSupportedTokens = {
7625
8017
  ],
7626
8018
  [STELLAR_MAINNET_CHAIN_ID]: [
7627
8019
  spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.XLM,
7628
- // spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
8020
+ spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
8021
+ // NOTE: Not Implemented
7629
8022
  spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.USDC
7630
8023
  ],
7631
8024
  [SUI_MAINNET_CHAIN_ID]: [
7632
8025
  spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.SUI,
7633
- // spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
8026
+ spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
8027
+ // NOTE: Not Implemented
7634
8028
  spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.USDC,
7635
8029
  spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.afSUI,
7636
8030
  spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.mSUI,
@@ -7640,9 +8034,9 @@ var solverSupportedTokens = {
7640
8034
  spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.trevinSUI
7641
8035
  ],
7642
8036
  [INJECTIVE_MAINNET_CHAIN_ID]: [
7643
- spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.INJ,
8037
+ // spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.INJ,
7644
8038
  // spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7645
- spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.USDC
8039
+ // spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.USDC,
7646
8040
  ],
7647
8041
  [NIBIRU_MAINNET_CHAIN_ID]: [
7648
8042
  // spokeChainConfig[NIBIRU_MAINNET_CHAIN_ID].supportedTokens.NIBI, // NOTE: Not Implemented
@@ -7774,11 +8168,30 @@ var chainIdToHubAssetsMap = new Map(
7774
8168
  var supportedHubAssets = new Set(
7775
8169
  Object.values(hubAssets).flatMap((assets) => Object.values(assets).map((info) => info.asset.toLowerCase()))
7776
8170
  );
8171
+ var supportedSodaAssets = new Set(
8172
+ Object.values(hubAssets).flatMap((assets) => Object.values(assets).map((info) => info.vault.toLowerCase()))
8173
+ );
7777
8174
  var spokeChainIdsSet = new Set(SPOKE_CHAIN_IDS);
8175
+ var getOriginalAssetInfoFromVault = (chainId, vault) => {
8176
+ const assets = hubAssets[chainId];
8177
+ if (!assets) {
8178
+ return [];
8179
+ }
8180
+ const vaultAddress = vault.toLowerCase();
8181
+ const result = [];
8182
+ for (const [spokeToken, info] of Object.entries(assets)) {
8183
+ if (info.vault.toLowerCase() === vaultAddress) {
8184
+ result.push(spokeToken);
8185
+ }
8186
+ }
8187
+ return result;
8188
+ };
7778
8189
  var getHubAssetInfo = (chainId, asset) => originalAssetTohubAssetMap.get(chainId)?.get(asset.toLowerCase());
7779
8190
  var isValidOriginalAssetAddress = (chainId, asset) => originalAssetTohubAssetMap.get(chainId)?.has(asset.toLowerCase()) ?? false;
7780
8191
  var getOriginalAssetAddress = (chainId, hubAsset) => hubAssetToOriginalAssetMap.get(chainId)?.get(hubAsset.toLowerCase());
8192
+ var getOriginalTokenFromOriginalAssetAddress = (chainId, asset) => Object.values(spokeChainConfig[chainId].supportedTokens).find((t) => t.address.toLowerCase() === asset.toLowerCase()) ?? void 0;
7781
8193
  var isValidHubAsset = (hubAsset) => supportedHubAssets.has(hubAsset.toLowerCase());
8194
+ var isValidVault = (vault) => supportedSodaAssets.has(vault.toLowerCase());
7782
8195
  var isValidChainHubAsset = (chainId, hubAsset) => chainIdToHubAssetsMap.get(chainId)?.has(hubAsset.toLowerCase()) ?? false;
7783
8196
  var isValidSpokeChainId = (chainId) => spokeChainIdsSet.has(chainId);
7784
8197
  var isValidIntentRelayChainId = (chainId) => Object.values(INTENT_RELAY_CHAIN_IDS).some((id) => id === chainId);
@@ -7831,12 +8244,13 @@ var InjectiveSpokeProvider = class {
7831
8244
  );
7832
8245
  }
7833
8246
  async getBalance(token) {
7834
- return this.chainGrpcWasmApi.fetchSmartContractState(
8247
+ const response = await this.chainGrpcWasmApi.fetchSmartContractState(
7835
8248
  this.chainConfig.addresses.assetManager,
7836
8249
  toBase64({
7837
8250
  get_balance: { denom: token }
7838
8251
  })
7839
8252
  );
8253
+ return fromBase64(response.data);
7840
8254
  }
7841
8255
  // Execute Methods (requires SigningCosmWasmClient)
7842
8256
  /**
@@ -9287,7 +9701,7 @@ var EvmSpokeService = class _EvmSpokeService {
9287
9701
  address: token,
9288
9702
  abi: erc20Abi,
9289
9703
  functionName: "balanceOf",
9290
- args: [token]
9704
+ args: [spokeProvider.chainConfig.addresses.assetManager]
9291
9705
  });
9292
9706
  }
9293
9707
  /**
@@ -9800,18 +10214,14 @@ var SolanaSpokeService = class _SolanaSpokeService {
9800
10214
  );
9801
10215
  }
9802
10216
  static async getDeposit(token, spokeProvider) {
9803
- const assetManagerProgram = await getAssetManagerProgram(
9804
- spokeProvider.walletProvider.getWalletBase58PublicKey(),
9805
- spokeProvider.chainConfig.rpcUrl,
9806
- spokeProvider.chainConfig.addresses.assetManager
9807
- );
9808
- const solToken = new PublicKey(Buffer.from(token, "hex"));
10217
+ const assetManagerProgramId = new PublicKey(spokeProvider.chainConfig.addresses.assetManager);
10218
+ const solToken = new PublicKey(token);
9809
10219
  if (isNative(new PublicKey(solToken))) {
9810
- const vaultNative = AssetManagerPDA.vault_native(assetManagerProgram.programId);
10220
+ const vaultNative = AssetManagerPDA.vault_native(assetManagerProgramId);
9811
10221
  const balance = await spokeProvider.walletProvider.getBalance(vaultNative.pda.toBase58());
9812
10222
  return BigInt(balance);
9813
10223
  }
9814
- const vaultToken = AssetManagerPDA.vault_token(assetManagerProgram.programId, new PublicKey(solToken));
10224
+ const vaultToken = AssetManagerPDA.vault_token(assetManagerProgramId, new PublicKey(solToken));
9815
10225
  const tokenAccount = await spokeProvider.walletProvider.getTokenAccountBalance(vaultToken.pda.toBase58());
9816
10226
  return BigInt(tokenAccount.value.amount);
9817
10227
  }
@@ -10019,6 +10429,12 @@ var StellarSpokeService = class _StellarSpokeService {
10019
10429
  raw
10020
10430
  );
10021
10431
  }
10432
+ /**
10433
+ * Get the balance of the token in the spoke chain asset manager.
10434
+ * @param token - The address of the token to get the balance of.
10435
+ * @param spokeProvider - The spoke provider.
10436
+ * @returns The balance of the token.
10437
+ */
10022
10438
  static async getDeposit(token, spokeProvider) {
10023
10439
  return BigInt(await spokeProvider.getBalance(token));
10024
10440
  }
@@ -10135,7 +10551,7 @@ var SonicSpokeService = class _SonicSpokeService {
10135
10551
  * @returns {PromiseEvmTxReturnType<R>} A promise that resolves to the transaction hash
10136
10552
  */
10137
10553
  static async deposit(params, spokeProvider, raw) {
10138
- invariant11(spokeProvider instanceof SonicSpokeProvider, "[SonicSpokeService] invalid spoke provider");
10554
+ invariant12(spokeProvider instanceof SonicSpokeProvider, "[SonicSpokeService] invalid spoke provider");
10139
10555
  const userHubAddress = params.to ?? await _SonicSpokeService.getUserRouter(params.from, spokeProvider);
10140
10556
  const calls = Array.from(
10141
10557
  decodeAbiParameters(
@@ -10200,11 +10616,11 @@ var SonicSpokeService = class _SonicSpokeService {
10200
10616
  inputToken = hubProvider.chainConfig.nativeToken;
10201
10617
  }
10202
10618
  const outputToken = getHubAssetInfo(createIntentParams.dstChain, createIntentParams.outputToken)?.asset;
10203
- invariant11(
10619
+ invariant12(
10204
10620
  inputToken,
10205
10621
  `hub asset not found for spoke chain token (intent.inputToken): ${createIntentParams.inputToken}`
10206
10622
  );
10207
- invariant11(
10623
+ invariant12(
10208
10624
  outputToken,
10209
10625
  `hub asset not found for spoke chain token (intent.outputToken): ${createIntentParams.outputToken}`
10210
10626
  );
@@ -10267,7 +10683,7 @@ var SonicSpokeService = class _SonicSpokeService {
10267
10683
  * @returns {PromiseEvmTxReturnType<R>} A promise that resolves to the transaction hash
10268
10684
  */
10269
10685
  static async callWallet(payload, spokeProvider, raw) {
10270
- invariant11(spokeProvider instanceof SonicSpokeProvider, "[SonicSpokeService] invalid spoke provider");
10686
+ invariant12(spokeProvider instanceof SonicSpokeProvider, "[SonicSpokeService] invalid spoke provider");
10271
10687
  const calls = decodeAbiParameters(
10272
10688
  [
10273
10689
  {
@@ -10756,11 +11172,8 @@ var SpokeService = class _SpokeService {
10756
11172
  */
10757
11173
  static async deposit(params, spokeProvider, hubProvider, raw, skipSimulation = false) {
10758
11174
  if (spokeProvider instanceof SonicSpokeProvider) {
10759
- return SonicSpokeService.deposit(
10760
- params,
10761
- spokeProvider,
10762
- raw
10763
- );
11175
+ const _params = params;
11176
+ return SonicSpokeService.deposit(_params, spokeProvider, raw);
10764
11177
  }
10765
11178
  if (spokeProvider instanceof EvmSpokeProvider) {
10766
11179
  await _SpokeService.verifyDepositSimulation(params, spokeProvider, hubProvider, skipSimulation);
@@ -10785,7 +11198,6 @@ var SpokeService = class _SpokeService {
10785
11198
  );
10786
11199
  }
10787
11200
  if (spokeProvider instanceof SuiSpokeProvider) {
10788
- await _SpokeService.verifyDepositSimulation(params, spokeProvider, hubProvider, skipSimulation);
10789
11201
  return SuiSpokeService.deposit(
10790
11202
  params,
10791
11203
  spokeProvider,
@@ -10913,18 +11325,32 @@ var SpokeService = class _SpokeService {
10913
11325
  raw
10914
11326
  );
10915
11327
  }
10916
- if (isEvmSpokeProvider(spokeProvider)) {
10917
- await _SpokeService.verifySimulation(from, payload, spokeProvider, hubProvider, skipSimulation);
10918
- return await EvmSpokeService.callWallet(from, payload, spokeProvider, hubProvider);
10919
- }
10920
- if (isInjectiveSpokeProvider(spokeProvider)) {
10921
- await _SpokeService.verifySimulation(from, payload, spokeProvider, hubProvider, skipSimulation);
10922
- return await InjectiveSpokeService.callWallet(
10923
- from,
10924
- payload,
10925
- spokeProvider,
10926
- hubProvider,
10927
- raw
11328
+ if (!skipSimulation) {
11329
+ const result = await _SpokeService.simulateRecvMessage(
11330
+ {
11331
+ target: from,
11332
+ srcChainId: getIntentRelayChainId(spokeProvider.chainConfig.chain.id),
11333
+ srcAddress: await spokeProvider.walletProvider.getWalletAddressBytes(),
11334
+ payload
11335
+ },
11336
+ hubProvider
11337
+ );
11338
+ if (!result.success) {
11339
+ throw new Error("Simulation failed", { cause: result });
11340
+ }
11341
+ }
11342
+ if (isEvmSpokeProvider(spokeProvider)) {
11343
+ await _SpokeService.verifySimulation(from, payload, spokeProvider, hubProvider, skipSimulation);
11344
+ return await EvmSpokeService.callWallet(from, payload, spokeProvider, hubProvider);
11345
+ }
11346
+ if (isInjectiveSpokeProvider(spokeProvider)) {
11347
+ await _SpokeService.verifySimulation(from, payload, spokeProvider, hubProvider, skipSimulation);
11348
+ return await InjectiveSpokeService.callWallet(
11349
+ from,
11350
+ payload,
11351
+ spokeProvider,
11352
+ hubProvider,
11353
+ raw
10928
11354
  );
10929
11355
  }
10930
11356
  if (isIconSpokeProvider(spokeProvider)) {
@@ -10981,19 +11407,19 @@ async function postRequest(payload, apiUrl) {
10981
11407
  return response.json();
10982
11408
  }
10983
11409
  async function submitTransaction(payload, apiUrl) {
10984
- invariant11(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
10985
- invariant11(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
11410
+ invariant12(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
11411
+ invariant12(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
10986
11412
  return postRequest(payload, apiUrl);
10987
11413
  }
10988
11414
  async function getTransactionPackets(payload, apiUrl) {
10989
- invariant11(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
10990
- invariant11(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
11415
+ invariant12(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
11416
+ invariant12(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
10991
11417
  return postRequest(payload, apiUrl);
10992
11418
  }
10993
11419
  async function getPacket(payload, apiUrl) {
10994
- invariant11(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
10995
- invariant11(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
10996
- invariant11(payload.params.conn_sn.length > 0, "Invalid input parameters. conn_sn empty");
11420
+ invariant12(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
11421
+ invariant12(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
11422
+ invariant12(payload.params.conn_sn.length > 0, "Invalid input parameters. conn_sn empty");
10997
11423
  return postRequest(payload, apiUrl);
10998
11424
  }
10999
11425
  async function waitUntilIntentExecuted(payload) {
@@ -11124,11 +11550,11 @@ var EvmSolverService = class _EvmSolverService {
11124
11550
  inputToken = hubProvider.chainConfig.wrappedNativeToken;
11125
11551
  }
11126
11552
  const outputToken = getHubAssetInfo(createIntentParams.dstChain, createIntentParams.outputToken)?.asset;
11127
- invariant11(
11553
+ invariant12(
11128
11554
  inputToken,
11129
11555
  `hub asset not found for spoke chain token (intent.inputToken): ${createIntentParams.inputToken}`
11130
11556
  );
11131
- invariant11(
11557
+ invariant12(
11132
11558
  outputToken,
11133
11559
  `hub asset not found for spoke chain token (intent.outputToken): ${createIntentParams.outputToken}`
11134
11560
  );
@@ -11160,7 +11586,7 @@ var EvmSolverService = class _EvmSolverService {
11160
11586
  * @returns A tuple containing [encoded fee data, fee amount]. Fee amount will be 0n if no fee.
11161
11587
  */
11162
11588
  static createIntentFeeData(fee, inputAmount) {
11163
- invariant11(inputAmount > 0n, "Input amount must be greater than 0");
11589
+ invariant12(inputAmount > 0n, "Input amount must be greater than 0");
11164
11590
  if (!fee) {
11165
11591
  return ["0x", 0n];
11166
11592
  }
@@ -11168,7 +11594,7 @@ var EvmSolverService = class _EvmSolverService {
11168
11594
  if (isPartnerFeeAmount(fee)) {
11169
11595
  feeAmount = fee.amount;
11170
11596
  } else if (isPartnerFeePercentage(fee)) {
11171
- invariant11(
11597
+ invariant12(
11172
11598
  fee.percentage >= 0 && fee.percentage <= FEE_PERCENTAGE_SCALE,
11173
11599
  `Fee percentage must be between 0 and ${FEE_PERCENTAGE_SCALE}}`
11174
11600
  );
@@ -11295,23 +11721,23 @@ var SolverApiService = class {
11295
11721
  * }
11296
11722
  */
11297
11723
  static async getQuote(payload, config) {
11298
- invariant11(payload.token_src.length > 0, "Empty token_src");
11299
- invariant11(payload.token_src_blockchain_id.length > 0, "Empty token_src_blockchain_id");
11300
- invariant11(payload.token_dst.length > 0, "Empty token_dst");
11301
- invariant11(payload.token_dst_blockchain_id.length > 0, "Empty token_dst_blockchain_id");
11302
- invariant11(payload.amount > 0n, "amount must be greater than 0");
11303
- invariant11(
11724
+ invariant12(payload.token_src.length > 0, "Empty token_src");
11725
+ invariant12(payload.token_src_blockchain_id.length > 0, "Empty token_src_blockchain_id");
11726
+ invariant12(payload.token_dst.length > 0, "Empty token_dst");
11727
+ invariant12(payload.token_dst_blockchain_id.length > 0, "Empty token_dst_blockchain_id");
11728
+ invariant12(payload.amount > 0n, "amount must be greater than 0");
11729
+ invariant12(
11304
11730
  isValidOriginalAssetAddress(payload.token_src_blockchain_id, payload.token_src),
11305
11731
  "unsupported token_src for src chain"
11306
11732
  );
11307
- invariant11(
11733
+ invariant12(
11308
11734
  isValidOriginalAssetAddress(payload.token_dst_blockchain_id, payload.token_dst),
11309
11735
  "unsupported token_dst for dst chain"
11310
11736
  );
11311
11737
  const tokenSrc = getHubAssetInfo(payload.token_src_blockchain_id, payload.token_src)?.asset;
11312
11738
  const tokenDst = getHubAssetInfo(payload.token_dst_blockchain_id, payload.token_dst)?.asset;
11313
- invariant11(tokenSrc, "hub asset not found for token_src");
11314
- invariant11(tokenDst, "hub asset not found for token_dst");
11739
+ invariant12(tokenSrc, "hub asset not found for token_src");
11740
+ invariant12(tokenDst, "hub asset not found for token_dst");
11315
11741
  try {
11316
11742
  const response = await fetch(`${config.solverApiEndpoint}/quote`, {
11317
11743
  method: "POST",
@@ -11406,7 +11832,7 @@ var SolverApiService = class {
11406
11832
  }
11407
11833
  }
11408
11834
  static async getStatus(request, config) {
11409
- invariant11(request.intent_tx_hash.length > 0, "Empty intent_tx_hash");
11835
+ invariant12(request.intent_tx_hash.length > 0, "Empty intent_tx_hash");
11410
11836
  try {
11411
11837
  const response = await fetch(`${config.solverApiEndpoint}/status`, {
11412
11838
  method: "POST",
@@ -12038,19 +12464,19 @@ var SolverService = class {
12038
12464
  fee = this.config.partnerFee,
12039
12465
  raw
12040
12466
  }) {
12041
- invariant11(
12467
+ invariant12(
12042
12468
  isValidOriginalAssetAddress(params.srcChain, params.inputToken),
12043
12469
  `Unsupported spoke chain token (params.srcChain): ${params.srcChain}, params.inputToken): ${params.inputToken}`
12044
12470
  );
12045
- invariant11(
12471
+ invariant12(
12046
12472
  isValidOriginalAssetAddress(params.dstChain, params.outputToken),
12047
12473
  `Unsupported spoke chain token (params.dstChain): ${params.dstChain}, params.outputToken): ${params.outputToken}`
12048
12474
  );
12049
- invariant11(isValidSpokeChainId(params.srcChain), `Invalid spoke chain (params.srcChain): ${params.srcChain}`);
12050
- invariant11(isValidSpokeChainId(params.dstChain), `Invalid spoke chain (params.dstChain): ${params.dstChain}`);
12475
+ invariant12(isValidSpokeChainId(params.srcChain), `Invalid spoke chain (params.srcChain): ${params.srcChain}`);
12476
+ invariant12(isValidSpokeChainId(params.dstChain), `Invalid spoke chain (params.dstChain): ${params.dstChain}`);
12051
12477
  try {
12052
12478
  const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
12053
- invariant11(
12479
+ invariant12(
12054
12480
  params.srcAddress.toLowerCase() === walletAddress.toLowerCase(),
12055
12481
  "srcAddress must be the same as wallet address"
12056
12482
  );
@@ -12124,8 +12550,8 @@ var SolverService = class {
12124
12550
  */
12125
12551
  async cancelIntent(intent, spokeProvider, raw) {
12126
12552
  try {
12127
- invariant11(isValidIntentRelayChainId(intent.srcChain), `Invalid intent.srcChain: ${intent.srcChain}`);
12128
- invariant11(isValidIntentRelayChainId(intent.dstChain), `Invalid intent.dstChain: ${intent.dstChain}`);
12553
+ invariant12(isValidIntentRelayChainId(intent.srcChain), `Invalid intent.srcChain: ${intent.srcChain}`);
12554
+ invariant12(isValidIntentRelayChainId(intent.dstChain), `Invalid intent.dstChain: ${intent.dstChain}`);
12129
12555
  const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
12130
12556
  const creatorHubWalletAddress = await deriveUserWalletAddress(spokeProvider, this.hubProvider, walletAddress);
12131
12557
  const calls = [];
@@ -12172,7 +12598,7 @@ var SolverService = class {
12172
12598
  * @returns {bigint} The deadline for the swap as a sum of hub chain block timestamp and deadline offset
12173
12599
  */
12174
12600
  async getSwapDeadline(deadline = DEFAULT_DEADLINE_OFFSET) {
12175
- invariant11(deadline > 0n, "Deadline must be greater than 0");
12601
+ invariant12(deadline > 0n, "Deadline must be greater than 0");
12176
12602
  const block = await this.hubProvider.publicClient.getBlock({
12177
12603
  includeTransactions: false,
12178
12604
  blockTag: "latest"
@@ -12650,7 +13076,7 @@ var IcxMigrationService = class {
12650
13076
  migrateData(params) {
12651
13077
  const calls = [];
12652
13078
  const assetConfig = getHubAssetInfo(ICON_MAINNET_CHAIN_ID, params.address);
12653
- invariant11(assetConfig, `hub asset not found for spoke chain token (token): ${params.address}`);
13079
+ invariant12(assetConfig, `hub asset not found for spoke chain token (token): ${params.address}`);
12654
13080
  calls.push(
12655
13081
  Erc20Service.encodeApprove(assetConfig.asset, this.hubProvider.chainConfig.addresses.icxMigration, params.amount)
12656
13082
  );
@@ -12666,7 +13092,7 @@ var IcxMigrationService = class {
12666
13092
  revertMigration(params) {
12667
13093
  const calls = [];
12668
13094
  const assetConfig = getHubAssetInfo(ICON_MAINNET_CHAIN_ID, params.wICX);
12669
- invariant11(assetConfig, `hub asset not found for spoke chain token (token): ${params.wICX}`);
13095
+ invariant12(assetConfig, `hub asset not found for spoke chain token (token): ${params.wICX}`);
12670
13096
  calls.push(
12671
13097
  Erc20Service.encodeApprove(
12672
13098
  this.hubProvider.chainConfig.addresses.sodaToken,
@@ -12762,9 +13188,9 @@ var MigrationService = class {
12762
13188
  async isAllowanceValid(params, action, spokeProvider) {
12763
13189
  try {
12764
13190
  if (action === "migrate") {
12765
- invariant11(params.amount > 0n, "Amount must be greater than 0");
12766
- invariant11(isAddress(params.to) || isIconAddress(params.to), "To address is required");
12767
- invariant11(
13191
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
13192
+ invariant12(isAddress(params.to) || isIconAddress(params.to), "To address is required");
13193
+ invariant12(
12768
13194
  isIcxMigrateParams(params) || isBalnMigrateParams(params) || isUnifiedBnUSDMigrateParams(params),
12769
13195
  "Invalid params"
12770
13196
  );
@@ -12790,9 +13216,9 @@ var MigrationService = class {
12790
13216
  };
12791
13217
  }
12792
13218
  if (action === "revert") {
12793
- invariant11(params.amount > 0n, "Amount must be greater than 0");
12794
- invariant11(params.to.length > 0, "To address is required");
12795
- invariant11(isIcxCreateRevertMigrationParams(params) || isUnifiedBnUSDMigrateParams(params), "Invalid params");
13219
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
13220
+ invariant12(params.to.length > 0, "To address is required");
13221
+ invariant12(isIcxCreateRevertMigrationParams(params) || isUnifiedBnUSDMigrateParams(params), "Invalid params");
12796
13222
  if (spokeProvider instanceof SonicSpokeProvider && isIcxCreateRevertMigrationParams(params)) {
12797
13223
  const wallet = await spokeProvider.walletProvider.getWalletAddress();
12798
13224
  const userRouter = await SonicSpokeService.getUserRouter(wallet, spokeProvider);
@@ -12848,9 +13274,9 @@ var MigrationService = class {
12848
13274
  async approve(params, action, spokeProvider, raw) {
12849
13275
  try {
12850
13276
  if (action === "migrate") {
12851
- invariant11(params.amount > 0n, "Amount must be greater than 0");
12852
- invariant11(params.to.length > 0, "To address is required");
12853
- invariant11(isUnifiedBnUSDMigrateParams(params), "Invalid params");
13277
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
13278
+ invariant12(params.to.length > 0, "To address is required");
13279
+ invariant12(isUnifiedBnUSDMigrateParams(params), "Invalid params");
12854
13280
  if (isUnifiedBnUSDMigrateParams(params) && spokeProvider.chainConfig.chain.type === "EVM") {
12855
13281
  const evmSpokeProvider = spokeProvider;
12856
13282
  const result = await Erc20Service.approve(
@@ -12871,9 +13297,9 @@ var MigrationService = class {
12871
13297
  };
12872
13298
  }
12873
13299
  if (action === "revert") {
12874
- invariant11(params.amount > 0n, "Amount must be greater than 0");
12875
- invariant11(params.to.length > 0, "To address is required");
12876
- invariant11(isIcxCreateRevertMigrationParams(params) || isUnifiedBnUSDMigrateParams(params), "Invalid params");
13300
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
13301
+ invariant12(params.to.length > 0, "To address is required");
13302
+ invariant12(isIcxCreateRevertMigrationParams(params) || isUnifiedBnUSDMigrateParams(params), "Invalid params");
12877
13303
  if (spokeProvider instanceof SonicSpokeProvider && isIcxCreateRevertMigrationParams(params)) {
12878
13304
  const wallet = await spokeProvider.walletProvider.getWalletAddress();
12879
13305
  const userRouter = await SonicSpokeService.getUserRouter(wallet, spokeProvider);
@@ -13285,13 +13711,13 @@ var MigrationService = class {
13285
13711
  async createMigratebnUSDIntent(params, spokeProvider, unchecked = false, raw) {
13286
13712
  try {
13287
13713
  if (!unchecked) {
13288
- invariant11(isValidSpokeChainId(params.srcChainId), "Invalid spoke source chain ID");
13289
- invariant11(isValidSpokeChainId(params.dstChainId), "Invalid spoke destination chain ID");
13290
- invariant11(params.srcbnUSD.length > 0, "Legacy bnUSD token address is required");
13291
- invariant11(params.dstbnUSD.length > 0, "New bnUSD token address is required");
13292
- invariant11(params.amount > 0, "Amount must be greater than 0");
13293
- invariant11(params.to.length > 0, "Recipient address is required");
13294
- invariant11(
13714
+ invariant12(isValidSpokeChainId(params.srcChainId), "Invalid spoke source chain ID");
13715
+ invariant12(isValidSpokeChainId(params.dstChainId), "Invalid spoke destination chain ID");
13716
+ invariant12(params.srcbnUSD.length > 0, "Legacy bnUSD token address is required");
13717
+ invariant12(params.dstbnUSD.length > 0, "New bnUSD token address is required");
13718
+ invariant12(params.amount > 0, "Amount must be greater than 0");
13719
+ invariant12(params.to.length > 0, "Recipient address is required");
13720
+ invariant12(
13295
13721
  !(isLegacybnUSDToken(params.srcbnUSD) && isLegacybnUSDToken(params.dstbnUSD)),
13296
13722
  "srcbnUSD and dstbnUSD cannot both be legacy bnUSD tokens"
13297
13723
  );
@@ -13299,11 +13725,11 @@ var MigrationService = class {
13299
13725
  let migrationData;
13300
13726
  if (isLegacybnUSDToken(params.srcbnUSD)) {
13301
13727
  if (!unchecked) {
13302
- invariant11(
13728
+ invariant12(
13303
13729
  isLegacybnUSDChainId(params.srcChainId),
13304
13730
  "srcChainId must be a legacy bnUSD chain (icon, sui, stellar) if srcbnUSD is a legacy bnUSD token"
13305
13731
  );
13306
- invariant11(
13732
+ invariant12(
13307
13733
  isNewbnUSDChainId(params.dstChainId),
13308
13734
  "dstChainId must be a new bnUSD chain (all spoke chains besides Icon) if dstbnUSD is a legacy bnUSD token"
13309
13735
  );
@@ -13318,15 +13744,15 @@ var MigrationService = class {
13318
13744
  });
13319
13745
  } else if (isLegacybnUSDToken(params.dstbnUSD)) {
13320
13746
  if (!unchecked) {
13321
- invariant11(
13747
+ invariant12(
13322
13748
  isLegacybnUSDChainId(params.dstChainId),
13323
13749
  "dstChainId must be a legacy bnUSD chain (sui, stellar, icon) if dstbnUSD is a legacy bnUSD token"
13324
13750
  );
13325
- invariant11(
13751
+ invariant12(
13326
13752
  isNewbnUSDToken(params.srcbnUSD),
13327
13753
  "srcbnUSD must be a new bnUSD token if dstbnUSD is a legacy bnUSD token"
13328
13754
  );
13329
- invariant11(
13755
+ invariant12(
13330
13756
  isNewbnUSDChainId(params.srcChainId),
13331
13757
  "srcChainId must be a new bnUSD chain (all spoke chains besides Icon) if srcbnUSD is a new bnUSD token"
13332
13758
  );
@@ -13399,13 +13825,13 @@ var MigrationService = class {
13399
13825
  */
13400
13826
  async createMigrateIcxToSodaIntent(params, spokeProvider, raw) {
13401
13827
  try {
13402
- invariant11(params.amount > 0, "Amount must be greater than 0");
13403
- invariant11(isAddress(params.to), "Recipient address is required");
13404
- invariant11(
13828
+ invariant12(params.amount > 0, "Amount must be greater than 0");
13829
+ invariant12(isAddress(params.to), "Recipient address is required");
13830
+ invariant12(
13405
13831
  params.address.toLowerCase() === spokeProvider.chainConfig.addresses.wICX.toLowerCase() || params.address.toLowerCase() === spokeProvider.chainConfig.nativeToken.toLowerCase(),
13406
13832
  "Token must be wICX or native ICX token"
13407
13833
  );
13408
- invariant11(spokeProvider instanceof IconSpokeProvider, "Spoke provider must be an instance of IconSpokeProvider");
13834
+ invariant12(spokeProvider instanceof IconSpokeProvider, "Spoke provider must be an instance of IconSpokeProvider");
13409
13835
  const availableAmount = await this.icxMigration.getAvailableAmount();
13410
13836
  if (availableAmount < params.amount) {
13411
13837
  throw new Error(
@@ -13517,7 +13943,7 @@ var BnUSDMigrationService = class {
13517
13943
  migrateData(params) {
13518
13944
  const calls = [];
13519
13945
  const assetConfig = getHubAssetInfo(params.srcChainId, params.legacybnUSD);
13520
- invariant11(assetConfig, `hub asset not found for legacy bnUSD token: ${params.legacybnUSD}`);
13946
+ invariant12(assetConfig, `hub asset not found for legacy bnUSD token: ${params.legacybnUSD}`);
13521
13947
  const bnUSDVault = getMoneyMarketConfig(SONIC_MAINNET_CHAIN_ID).bnUSDVault;
13522
13948
  calls.push(Erc20Service.encodeApprove(assetConfig.asset, assetConfig.vault, params.amount));
13523
13949
  calls.push(EvmVaultTokenService.encodeDeposit(assetConfig.vault, assetConfig.asset, params.amount));
@@ -13529,7 +13955,7 @@ var BnUSDMigrationService = class {
13529
13955
  return encodeContractCalls(calls);
13530
13956
  }
13531
13957
  const dstAssetConfig = getHubAssetInfo(params.dstChainId, params.newbnUSD);
13532
- invariant11(dstAssetConfig, `hub asset not found for new bnUSD token: ${params.newbnUSD}`);
13958
+ invariant12(dstAssetConfig, `hub asset not found for new bnUSD token: ${params.newbnUSD}`);
13533
13959
  calls.push(EvmVaultTokenService.encodeWithdraw(bnUSDVault, dstAssetConfig.asset, translatedAmount));
13534
13960
  const translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(
13535
13961
  dstAssetConfig.decimal,
@@ -13562,14 +13988,14 @@ var BnUSDMigrationService = class {
13562
13988
  let decimals = 18;
13563
13989
  if (params.newbnUSD.toLowerCase() !== bnUSDVault.toLowerCase()) {
13564
13990
  const assetConfig = getHubAssetInfo(params.srcChainId, params.newbnUSD);
13565
- invariant11(assetConfig, `hub asset not found for new bnUSD token: ${params.newbnUSD}`);
13991
+ invariant12(assetConfig, `hub asset not found for new bnUSD token: ${params.newbnUSD}`);
13566
13992
  decimals = assetConfig.decimal;
13567
13993
  calls.push(Erc20Service.encodeApprove(assetConfig.asset, bnUSDVault, params.amount));
13568
13994
  calls.push(EvmVaultTokenService.encodeDeposit(bnUSDVault, assetConfig.asset, params.amount));
13569
13995
  }
13570
13996
  const translatedAmount = EvmVaultTokenService.translateIncomingDecimals(decimals, params.amount);
13571
13997
  const dstAssetConfig = getHubAssetInfo(params.dstChainId, params.legacybnUSD);
13572
- invariant11(dstAssetConfig, `hub asset not found for new bnUSD token: ${params.legacybnUSD}`);
13998
+ invariant12(dstAssetConfig, `hub asset not found for new bnUSD token: ${params.legacybnUSD}`);
13573
13999
  calls.push(EvmVaultTokenService.encodeWithdraw(bnUSDVault, dstAssetConfig.vault, translatedAmount));
13574
14000
  calls.push(EvmVaultTokenService.encodeWithdraw(dstAssetConfig.vault, dstAssetConfig.asset, translatedAmount));
13575
14001
  const translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(
@@ -13652,7 +14078,7 @@ var BalnSwapService = class {
13652
14078
  */
13653
14079
  async swapData(balnToken, params) {
13654
14080
  const assetConfig = getHubAssetInfo(ICON_MAINNET_CHAIN_ID, balnToken);
13655
- invariant11(assetConfig, `hub asset not found for baln token: ${balnToken}`);
14081
+ invariant12(assetConfig, `hub asset not found for baln token: ${balnToken}`);
13656
14082
  const calls = [];
13657
14083
  calls.push(
13658
14084
  Erc20Service.encodeApprove(assetConfig.asset, this.hubProvider.chainConfig.addresses.balnSwap, params.amount)
@@ -13831,6 +14257,659 @@ var BalnSwapService = class {
13831
14257
  }
13832
14258
  };
13833
14259
 
14260
+ // src/services/backend/BackendApiService.ts
14261
+ var BackendApiService = class {
14262
+ baseURL;
14263
+ defaultHeaders;
14264
+ timeout;
14265
+ constructor(config) {
14266
+ this.baseURL = config?.baseURL ?? DEFAULT_BACKEND_API_ENDPOINT;
14267
+ this.timeout = config?.timeout ?? DEFAULT_BACKEND_API_TIMEOUT;
14268
+ this.defaultHeaders = config?.headers ?? DEFAULT_BACKEND_API_HEADERS;
14269
+ }
14270
+ /**
14271
+ * Make HTTP request using fetch API
14272
+ * @param endpoint - API endpoint path
14273
+ * @param config - Request configuration
14274
+ * @returns Promise<T>
14275
+ */
14276
+ async makeRequest(endpoint, config) {
14277
+ const url = `${this.baseURL}${endpoint}`;
14278
+ const headers = { ...this.defaultHeaders, ...config.headers };
14279
+ const controller = new AbortController();
14280
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
14281
+ try {
14282
+ const response = await fetch(url, {
14283
+ method: config.method,
14284
+ headers,
14285
+ body: config.body,
14286
+ signal: controller.signal
14287
+ });
14288
+ clearTimeout(timeoutId);
14289
+ if (!response.ok) {
14290
+ const errorText = await response.text();
14291
+ throw new Error(`HTTP ${response.status}: ${errorText}`);
14292
+ }
14293
+ const data = await response.json();
14294
+ return data;
14295
+ } catch (error) {
14296
+ clearTimeout(timeoutId);
14297
+ if (error instanceof Error) {
14298
+ if (error.name === "AbortError") {
14299
+ throw new Error(`Request timeout after ${this.timeout}ms`);
14300
+ }
14301
+ console.error("[BackendApiService] Request error:", error.message);
14302
+ throw error;
14303
+ }
14304
+ console.error("[BackendApiService] Unknown error:", error);
14305
+ throw new Error("Unknown error occurred");
14306
+ }
14307
+ }
14308
+ // Intent endpoints
14309
+ /**
14310
+ * Get intent details by transaction hash
14311
+ * @param txHash - Transaction hash
14312
+ * @returns Promise<IntentResponse>
14313
+ */
14314
+ async getIntentByTxHash(txHash) {
14315
+ return this.makeRequest(`/intent/tx/${txHash}`, { method: "GET" });
14316
+ }
14317
+ /**
14318
+ * Get intent details by intent hash
14319
+ * @param intentHash - Intent hash
14320
+ * @returns Promise<IntentResponse>
14321
+ */
14322
+ async getIntentByHash(intentHash) {
14323
+ return this.makeRequest(`/intent/${intentHash}`, { method: "GET" });
14324
+ }
14325
+ // Solver endpoints
14326
+ /**
14327
+ * Get the solver orderbook
14328
+ * @param params - Object containing offset and limit parameters for pagination
14329
+ * @returns Promise<OrderbookResponse>
14330
+ */
14331
+ async getOrderbook(params) {
14332
+ const queryParams = new URLSearchParams();
14333
+ queryParams.append("offset", params.offset);
14334
+ queryParams.append("limit", params.limit);
14335
+ const queryString = queryParams.toString();
14336
+ const endpoint = `/solver/orderbook?${queryString}`;
14337
+ return this.makeRequest(endpoint, { method: "GET" });
14338
+ }
14339
+ // Money Market endpoints
14340
+ /**
14341
+ * Get money market position for a specific user
14342
+ * @param userAddress - User's wallet address
14343
+ * @returns Promise<MoneyMarketPosition>
14344
+ */
14345
+ async getMoneyMarketPosition(userAddress) {
14346
+ return this.makeRequest(`/moneymarket/position/${userAddress}`, { method: "GET" });
14347
+ }
14348
+ /**
14349
+ * Get all money market assets
14350
+ * @returns Promise<MoneyMarketAsset[]>
14351
+ */
14352
+ async getAllMoneyMarketAssets() {
14353
+ return this.makeRequest("/moneymarket/asset/all", { method: "GET" });
14354
+ }
14355
+ /**
14356
+ * Get specific money market asset details
14357
+ * @param reserveAddress - Reserve contract address
14358
+ * @returns Promise<MoneyMarketAsset>
14359
+ */
14360
+ async getMoneyMarketAsset(reserveAddress) {
14361
+ return this.makeRequest(`/moneymarket/asset/${reserveAddress}`, { method: "GET" });
14362
+ }
14363
+ /**
14364
+ * Get borrowers for a specific money market asset
14365
+ * @param reserveAddress - Reserve contract address
14366
+ * @param params - Object containing offset and limit parameters for pagination
14367
+ * @returns Promise<MoneyMarketAssetBorrowers>
14368
+ */
14369
+ async getMoneyMarketAssetBorrowers(reserveAddress, params) {
14370
+ const queryParams = new URLSearchParams();
14371
+ queryParams.append("offset", params.offset);
14372
+ queryParams.append("limit", params.limit);
14373
+ const queryString = queryParams.toString();
14374
+ const endpoint = `/moneymarket/asset/${reserveAddress}/borrowers?${queryString}`;
14375
+ return this.makeRequest(endpoint, { method: "GET" });
14376
+ }
14377
+ /**
14378
+ * Get suppliers for a specific money market asset
14379
+ * @param reserveAddress - Reserve contract address
14380
+ * @param params - Object containing offset and limit parameters for pagination
14381
+ * @returns Promise<MoneyMarketAssetSuppliers>
14382
+ */
14383
+ async getMoneyMarketAssetSuppliers(reserveAddress, params) {
14384
+ const queryParams = new URLSearchParams();
14385
+ queryParams.append("offset", params.offset);
14386
+ queryParams.append("limit", params.limit);
14387
+ const queryString = queryParams.toString();
14388
+ const endpoint = `/moneymarket/asset/${reserveAddress}/suppliers?${queryString}`;
14389
+ return this.makeRequest(endpoint, { method: "GET" });
14390
+ }
14391
+ /**
14392
+ * Get all money market borrowers
14393
+ * @param params - Object containing offset and limit parameters for pagination
14394
+ * @returns Promise<MoneyMarketBorrowers>
14395
+ */
14396
+ async getAllMoneyMarketBorrowers(params) {
14397
+ const queryParams = new URLSearchParams();
14398
+ queryParams.append("offset", params.offset);
14399
+ queryParams.append("limit", params.limit);
14400
+ const queryString = queryParams.toString();
14401
+ const endpoint = `/moneymarket/borrowers?${queryString}`;
14402
+ return this.makeRequest(endpoint, { method: "GET" });
14403
+ }
14404
+ /**
14405
+ * Set custom headers for API requests
14406
+ * @param headers - Object containing header key-value pairs
14407
+ */
14408
+ setHeaders(headers) {
14409
+ Object.entries(headers).forEach(([key, value]) => {
14410
+ this.defaultHeaders[key] = value;
14411
+ });
14412
+ }
14413
+ /**
14414
+ * Get the current base URL
14415
+ * @returns string
14416
+ */
14417
+ getBaseURL() {
14418
+ return this.baseURL;
14419
+ }
14420
+ };
14421
+ var BridgeService = class {
14422
+ hubProvider;
14423
+ relayerApiEndpoint;
14424
+ config;
14425
+ constructor(hubProvider, relayerApiEndpoint, config = void 0) {
14426
+ this.config = config ? config : { partnerFee: void 0 };
14427
+ this.hubProvider = hubProvider;
14428
+ this.relayerApiEndpoint = relayerApiEndpoint;
14429
+ }
14430
+ /**
14431
+ * Get the fee for a given input amount
14432
+ * @param {bigint} inputAmount - The amount of input tokens
14433
+ * @returns {Promise<bigint>} The fee amount (denominated in input tokens)
14434
+ *
14435
+ * @example
14436
+ * const fee: bigint = await sodax.bridge.getFee(1000000000000000n);
14437
+ * console.log('Fee:', fee);
14438
+ */
14439
+ getFee(inputAmount) {
14440
+ if (!this.config.partnerFee) {
14441
+ return 0n;
14442
+ }
14443
+ return calculateFeeAmount(inputAmount, this.config.partnerFee);
14444
+ }
14445
+ /**
14446
+ * Check if allowance is valid for the bridge transaction
14447
+ * @param params - The bridge parameters
14448
+ * @param spokeProvider - The spoke provider
14449
+ * @returns {Promise<Result<boolean, BridgeError<'ALLOWANCE_CHECK_FAILED'>>>}
14450
+ */
14451
+ async isAllowanceValid({
14452
+ params,
14453
+ spokeProvider
14454
+ }) {
14455
+ try {
14456
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
14457
+ invariant12(params.srcAsset.length > 0, "Source asset is required");
14458
+ const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
14459
+ if (spokeProvider instanceof EvmSpokeProvider) {
14460
+ invariant12(isAddress(params.srcAsset), "Invalid source asset address for EVM chain");
14461
+ const allowanceResult = await Erc20Service.isAllowanceValid(
14462
+ params.srcAsset,
14463
+ params.amount,
14464
+ walletAddress,
14465
+ spokeProvider.chainConfig.addresses.assetManager,
14466
+ spokeProvider
14467
+ );
14468
+ if (!allowanceResult.ok) {
14469
+ return {
14470
+ ok: false,
14471
+ error: {
14472
+ code: "ALLOWANCE_CHECK_FAILED",
14473
+ error: allowanceResult.error
14474
+ }
14475
+ };
14476
+ }
14477
+ return {
14478
+ ok: true,
14479
+ value: allowanceResult.value
14480
+ };
14481
+ }
14482
+ if (spokeProvider instanceof SonicSpokeProvider) {
14483
+ invariant12(isAddress(params.srcAsset), "Invalid source asset address for Sonic chain");
14484
+ const userRouter = await SonicSpokeService.getUserRouter(walletAddress, spokeProvider);
14485
+ const allowanceResult = await Erc20Service.isAllowanceValid(
14486
+ params.srcAsset,
14487
+ params.amount,
14488
+ walletAddress,
14489
+ userRouter,
14490
+ spokeProvider
14491
+ );
14492
+ if (!allowanceResult.ok) {
14493
+ return {
14494
+ ok: false,
14495
+ error: {
14496
+ code: "ALLOWANCE_CHECK_FAILED",
14497
+ error: allowanceResult.error
14498
+ }
14499
+ };
14500
+ }
14501
+ return {
14502
+ ok: true,
14503
+ value: allowanceResult.value
14504
+ };
14505
+ }
14506
+ return {
14507
+ ok: true,
14508
+ value: true
14509
+ };
14510
+ } catch (error) {
14511
+ return {
14512
+ ok: false,
14513
+ error: {
14514
+ code: "ALLOWANCE_CHECK_FAILED",
14515
+ error
14516
+ }
14517
+ };
14518
+ }
14519
+ }
14520
+ /**
14521
+ * Approve token spending for the bridge transaction
14522
+ * @param params - The bridge parameters
14523
+ * @param spokeProvider - The spoke provider
14524
+ * @param raw - Whether to return raw transaction data
14525
+ * @returns Promise<Result<TxReturnType<S, R>, BridgeError<'APPROVAL_FAILED'>>>
14526
+ */
14527
+ async approve({
14528
+ params,
14529
+ spokeProvider,
14530
+ raw
14531
+ }) {
14532
+ try {
14533
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
14534
+ invariant12(params.srcAsset.length > 0, "Source asset is required");
14535
+ const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
14536
+ if (spokeProvider instanceof EvmSpokeProvider) {
14537
+ invariant12(isAddress(params.srcAsset), "Invalid source asset address for EVM chain");
14538
+ const result = await Erc20Service.approve(
14539
+ params.srcAsset,
14540
+ params.amount,
14541
+ spokeProvider.chainConfig.addresses.assetManager,
14542
+ spokeProvider,
14543
+ raw
14544
+ );
14545
+ return {
14546
+ ok: true,
14547
+ value: result
14548
+ };
14549
+ }
14550
+ if (spokeProvider instanceof SonicSpokeProvider) {
14551
+ invariant12(isAddress(params.srcAsset), "Invalid source asset address for Sonic chain");
14552
+ const userRouter = await SonicSpokeService.getUserRouter(
14553
+ walletAddress,
14554
+ spokeProvider
14555
+ );
14556
+ const result = await Erc20Service.approve(params.srcAsset, params.amount, userRouter, spokeProvider, raw);
14557
+ return {
14558
+ ok: true,
14559
+ value: result
14560
+ };
14561
+ }
14562
+ return {
14563
+ ok: false,
14564
+ error: {
14565
+ code: "APPROVAL_FAILED",
14566
+ error: new Error("Approval only supported for EVM spoke chains")
14567
+ }
14568
+ };
14569
+ } catch (error) {
14570
+ console.error(error);
14571
+ return {
14572
+ ok: false,
14573
+ error: {
14574
+ code: "APPROVAL_FAILED",
14575
+ error
14576
+ }
14577
+ };
14578
+ }
14579
+ }
14580
+ /**
14581
+ * Execute a bridge transaction to transfer tokens from one chain to another
14582
+ * @param params - The bridge parameters including source/destination chains, assets, and recipient
14583
+ * @param spokeProvider - The spoke provider for the source chain
14584
+ * @param timeout - The timeout in milliseconds for the transaction. Default is 60 seconds.
14585
+ * @returns {Promise<Result<[SpokeTxHash, HubTxHash], BridgeError<BridgeErrorCode>>>} - Returns the transaction hashes for both spoke and hub chains or error
14586
+ *
14587
+ * @example
14588
+ * const result = await sodax.bridge.bridge(
14589
+ * {
14590
+ * srcChainId: '0x2105.base',
14591
+ * srcAsset: '0x...', // Address of the source token
14592
+ * amount: 1000n, // Amount to bridge (in token decimals)
14593
+ * dstChainId: '0x89.polygon',
14594
+ * dstAsset: '0x...', // Address of the destination token
14595
+ * recipient: '0x...', // Recipient address on destination chain
14596
+ * partnerFee: { address: '0x...', percentage: 0.1 } // Optional partner fee. Partner fees and denominated in vault token decimals (18)
14597
+ * },
14598
+ * spokeProvider,
14599
+ * 30000 // Optional timeout in milliseconds (default: 60000, i.e. 60 seconds)
14600
+ * );
14601
+ *
14602
+ * if (!result.ok) {
14603
+ * // Handle error
14604
+ * }
14605
+ *
14606
+ * const [
14607
+ * spokeTxHash, // transaction hash on the source chain
14608
+ * hubTxHash, // transaction hash on the hub chain
14609
+ * ] = result.value;
14610
+ * console.log('Bridge transaction hashes:', { spokeTxHash, hubTxHash });
14611
+ */
14612
+ async bridge({
14613
+ params,
14614
+ spokeProvider,
14615
+ fee = this.config.partnerFee,
14616
+ timeout = DEFAULT_RELAY_TX_TIMEOUT
14617
+ }) {
14618
+ try {
14619
+ const txResult = await this.createBridgeIntent({ params, spokeProvider, fee, raw: false });
14620
+ if (!txResult.ok) {
14621
+ return txResult;
14622
+ }
14623
+ const packetResult = await relayTxAndWaitPacket(
14624
+ txResult.value,
14625
+ spokeProvider instanceof SolanaSpokeProvider ? txResult.data : void 0,
14626
+ spokeProvider,
14627
+ this.relayerApiEndpoint,
14628
+ timeout
14629
+ );
14630
+ if (!packetResult.ok) {
14631
+ return {
14632
+ ok: false,
14633
+ error: {
14634
+ code: packetResult.error.code,
14635
+ error: packetResult.error
14636
+ }
14637
+ };
14638
+ }
14639
+ return { ok: true, value: [txResult.value, packetResult.value.dst_tx_hash] };
14640
+ } catch (error) {
14641
+ return {
14642
+ ok: false,
14643
+ error: {
14644
+ code: "BRIDGE_FAILED",
14645
+ error
14646
+ }
14647
+ };
14648
+ }
14649
+ }
14650
+ /**
14651
+ * Create bridge intent only (without relaying to hub)
14652
+ * NOTE: This method only executes the transaction on the spoke chain and creates the bridge intent
14653
+ * In order to successfully bridge tokens, you need to:
14654
+ * 1. Check if the allowance is sufficient using isAllowanceValid
14655
+ * 2. Approve the appropriate contract to spend the tokens using approve
14656
+ * 3. Create the bridge intent using this method
14657
+ * 4. Relay the transaction to the hub and await completion using the bridge method
14658
+ *
14659
+ * @param params - The bridge parameters including source/destination chains, assets, and recipient
14660
+ * @param spokeProvider - The spoke provider for the source chain
14661
+ * @param raw - Whether to return the raw transaction data
14662
+ * @returns {Promise<Result<TxReturnType<S, R>, BridgeError<BridgeErrorCode>>>} - Returns the transaction result
14663
+ *
14664
+ * @example
14665
+ * const bridgeService = new BridgeService(hubProvider, relayerApiEndpoint);
14666
+ * const result = await sodax.bridge.createBridgeIntent(
14667
+ * {
14668
+ * srcChainId: 'ethereum',
14669
+ * srcAsset: "0x123...", // source token address
14670
+ * amount: 1000000000000000000n, // 1 token in wei
14671
+ * dstChainId: 'polygon',
14672
+ * dstAsset: "0x456...", // destination token address
14673
+ * recipient: "0x789..." // recipient address
14674
+ * },
14675
+ * spokeProvider,
14676
+ * raw // Optional: true = return the raw transaction data, false = execute and return the transaction hash (default: false)
14677
+ * );
14678
+ *
14679
+ * if (result.ok) {
14680
+ * const txHash = result.value;
14681
+ * console.log('Bridge intent transaction hash:', txHash);
14682
+ * } else {
14683
+ * console.error('Bridge intent creation failed:', result.error);
14684
+ * }
14685
+ */
14686
+ async createBridgeIntent({
14687
+ params,
14688
+ spokeProvider,
14689
+ fee = this.config.partnerFee,
14690
+ raw
14691
+ }) {
14692
+ try {
14693
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
14694
+ const srcAssetInfo = getHubAssetInfo(params.srcChainId, params.srcAsset);
14695
+ const dstAssetInfo = getHubAssetInfo(params.dstChainId, params.dstAsset);
14696
+ invariant12(srcAssetInfo, `Unsupported spoke chain (${params.srcChainId}) token: ${params.srcAsset}`);
14697
+ invariant12(dstAssetInfo, `Unsupported spoke chain (${params.dstChainId}) token: ${params.dstAsset}`);
14698
+ const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
14699
+ const hubWallet = await WalletAbstractionService.getUserAbstractedWalletAddress(
14700
+ walletAddress,
14701
+ spokeProvider,
14702
+ this.hubProvider
14703
+ );
14704
+ const data = this.buildBridgeData(params, srcAssetInfo, dstAssetInfo, fee);
14705
+ const txResult = await SpokeService.deposit(
14706
+ {
14707
+ from: walletAddress,
14708
+ to: hubWallet,
14709
+ token: params.srcAsset,
14710
+ amount: params.amount,
14711
+ data
14712
+ },
14713
+ spokeProvider,
14714
+ this.hubProvider,
14715
+ raw
14716
+ );
14717
+ return {
14718
+ ok: true,
14719
+ value: txResult,
14720
+ data: {
14721
+ address: hubWallet,
14722
+ payload: data
14723
+ }
14724
+ };
14725
+ } catch (error) {
14726
+ console.error(error);
14727
+ return {
14728
+ ok: false,
14729
+ error: {
14730
+ code: "CREATE_BRIDGE_INTENT_FAILED",
14731
+ error
14732
+ }
14733
+ };
14734
+ }
14735
+ }
14736
+ /**
14737
+ * Build the bridge transaction data for executing the bridge operation on the hub
14738
+ * @param params - The create bridge intent parameters
14739
+ * @param srcAssetInfo - The source asset information
14740
+ * @param dstAssetInfo - The destination asset information
14741
+ * @returns Hex - The encoded contract calls for the bridge operation
14742
+ */
14743
+ buildBridgeData(params, srcAssetInfo, dstAssetInfo, partnerFee) {
14744
+ const calls = [];
14745
+ let translatedAmount = params.amount;
14746
+ let srcVault = params.srcAsset;
14747
+ if (!isValidVault(srcAssetInfo.asset)) {
14748
+ calls.push(Erc20Service.encodeApprove(srcAssetInfo.asset, srcAssetInfo.vault, params.amount));
14749
+ calls.push(EvmVaultTokenService.encodeDeposit(srcAssetInfo.vault, srcAssetInfo.asset, params.amount));
14750
+ translatedAmount = EvmVaultTokenService.translateIncomingDecimals(srcAssetInfo.decimal, params.amount);
14751
+ srcVault = srcAssetInfo.vault;
14752
+ }
14753
+ const feeAmount = calculateFeeAmount(translatedAmount, partnerFee);
14754
+ if (partnerFee && feeAmount > 0n) {
14755
+ calls.push(Erc20Service.encodeTransfer(srcVault, partnerFee.address, feeAmount));
14756
+ }
14757
+ const withdrawAmount = translatedAmount - feeAmount;
14758
+ let translatedWithdrawAmount = withdrawAmount;
14759
+ if (!isValidVault(dstAssetInfo.asset)) {
14760
+ calls.push(EvmVaultTokenService.encodeWithdraw(dstAssetInfo.vault, dstAssetInfo.asset, withdrawAmount));
14761
+ translatedWithdrawAmount = EvmVaultTokenService.translateOutgoingDecimals(dstAssetInfo.decimal, withdrawAmount);
14762
+ }
14763
+ const encodedRecipientAddress = encodeAddress(params.dstChainId, params.recipient);
14764
+ if (params.dstChainId === this.hubProvider.chainConfig.chain.id) {
14765
+ calls.push(Erc20Service.encodeTransfer(dstAssetInfo.asset, encodedRecipientAddress, translatedWithdrawAmount));
14766
+ } else {
14767
+ invariant12(dstAssetInfo, `Unsupported hub chain (${params.dstChainId}) token: ${params.dstAsset}`);
14768
+ calls.push(
14769
+ EvmAssetManagerService.encodeTransfer(
14770
+ dstAssetInfo.asset,
14771
+ encodedRecipientAddress,
14772
+ translatedWithdrawAmount,
14773
+ this.hubProvider.chainConfig.addresses.assetManager
14774
+ )
14775
+ );
14776
+ }
14777
+ return encodeContractCalls(calls);
14778
+ }
14779
+ /**
14780
+ * Retrieves the deposited token balance held by the asset manager on a spoke chain.
14781
+ * This balance represents the available liquidity for bridging operations and is used to verify
14782
+ * that the target chain has sufficient funds to complete a bridge transaction.
14783
+ *
14784
+ * @param spokeProvider - The spoke provider instance
14785
+ * @param token - The token address to query the balance for
14786
+ * @returns {Promise<bigint>} - The token balance as a bigint value
14787
+ */
14788
+ async getBridgeableAmount(from, to) {
14789
+ try {
14790
+ const fromHubAsset = getHubAssetInfo(from.xChainId, from.address);
14791
+ const toHubAsset = getHubAssetInfo(to.xChainId, to.address);
14792
+ invariant12(fromHubAsset, `Hub asset not found for token ${from.address} on chain ${from.xChainId}`);
14793
+ invariant12(toHubAsset, `Hub asset not found for token ${to.address} on chain ${to.xChainId}`);
14794
+ const [depositTokenInfo, reserves] = await Promise.all([
14795
+ EvmVaultTokenService.getTokenInfo(fromHubAsset.vault, fromHubAsset.asset, this.hubProvider.publicClient),
14796
+ EvmVaultTokenService.getVaultReserves(toHubAsset.vault, this.hubProvider.publicClient)
14797
+ ]);
14798
+ if (!isValidVault(fromHubAsset.asset) && isValidVault(toHubAsset.asset)) {
14799
+ const fromTokenIndex2 = reserves.tokens.findIndex((t) => t.toLowerCase() === fromHubAsset.asset.toLowerCase());
14800
+ invariant12(
14801
+ fromTokenIndex2 !== -1,
14802
+ `Token ${fromHubAsset.asset} not found in the vault reserves for chain ${from.xChainId}`
14803
+ );
14804
+ const fromTokenDepositedAmount2 = reserves.balances[fromTokenIndex2] ?? 0n;
14805
+ const availableDeposit2 = depositTokenInfo.maxDeposit - fromTokenDepositedAmount2;
14806
+ return {
14807
+ ok: true,
14808
+ value: availableDeposit2
14809
+ };
14810
+ }
14811
+ if (isValidVault(fromHubAsset.asset)) {
14812
+ const tokenIndex2 = reserves.tokens.findIndex((t) => t.toLowerCase() === toHubAsset.asset.toLowerCase());
14813
+ invariant12(
14814
+ tokenIndex2 !== -1,
14815
+ `Token ${toHubAsset.asset} not found in the vault reserves for chain ${to.xChainId}`
14816
+ );
14817
+ const assetManagerBalance2 = reserves.balances[tokenIndex2] ?? 0n;
14818
+ return {
14819
+ ok: true,
14820
+ value: assetManagerBalance2
14821
+ };
14822
+ }
14823
+ const fromTokenIndex = reserves.tokens.findIndex((t) => t.toLowerCase() === fromHubAsset.asset.toLowerCase());
14824
+ invariant12(
14825
+ fromTokenIndex !== -1,
14826
+ `Token ${fromHubAsset.asset} not found in the vault reserves for chain ${from.xChainId}`
14827
+ );
14828
+ const fromTokenDepositedAmount = reserves.balances[fromTokenIndex] ?? 0n;
14829
+ const availableDeposit = depositTokenInfo.maxDeposit - fromTokenDepositedAmount;
14830
+ const tokenIndex = reserves.tokens.findIndex((t) => t.toLowerCase() === toHubAsset.asset.toLowerCase());
14831
+ invariant12(
14832
+ tokenIndex !== -1,
14833
+ `Token ${toHubAsset.asset} not found in the vault reserves for chain ${to.xChainId}`
14834
+ );
14835
+ const assetManagerBalance = reserves.balances[tokenIndex] ?? 0n;
14836
+ return {
14837
+ ok: true,
14838
+ value: availableDeposit < assetManagerBalance ? availableDeposit : assetManagerBalance
14839
+ };
14840
+ } catch (error) {
14841
+ console.error(error);
14842
+ return {
14843
+ ok: false,
14844
+ error
14845
+ };
14846
+ }
14847
+ }
14848
+ /**
14849
+ * Check if two assets on different chains are bridgeable
14850
+ * Two assets are bridgeable if they share the same vault on the hub chain
14851
+ * @param from - The source X token
14852
+ * @param to - The destination X token
14853
+ * @param unchecked - Whether to skip the chain ID validation
14854
+ * @returns boolean - true if assets are bridgeable, false otherwise
14855
+ */
14856
+ isBridgeable({
14857
+ from,
14858
+ to,
14859
+ unchecked = false
14860
+ }) {
14861
+ try {
14862
+ if (!unchecked) {
14863
+ invariant12(isValidSpokeChainId(from.xChainId), `Invalid spoke chain (${from.xChainId})`);
14864
+ invariant12(isValidSpokeChainId(to.xChainId), `Invalid spoke chain (${to.xChainId})`);
14865
+ }
14866
+ const srcAssetInfo = getHubAssetInfo(from.xChainId, from.address);
14867
+ const dstAssetInfo = getHubAssetInfo(to.xChainId, to.address);
14868
+ invariant12(srcAssetInfo, `Hub asset not found for token ${from.address} on chain ${from.xChainId}`);
14869
+ invariant12(dstAssetInfo, `Hub asset not found for token ${to.address} on chain ${to.xChainId}`);
14870
+ return srcAssetInfo.vault.toLowerCase() === dstAssetInfo.vault.toLowerCase();
14871
+ } catch (error) {
14872
+ console.error(error);
14873
+ return false;
14874
+ }
14875
+ }
14876
+ /**
14877
+ * Get all bridgeable tokens from a source token to a destination chain
14878
+ * @param from - The source chain ID
14879
+ * @param to - The destination chain ID
14880
+ * @param token - The source token address
14881
+ * @returns XToken[] - Array of bridgeable tokens on the destination chain
14882
+ */
14883
+ getBridgeableTokens(from, to, token) {
14884
+ try {
14885
+ const srcAssetInfo = getHubAssetInfo(from, token);
14886
+ invariant12(srcAssetInfo, `Hub asset not found for token ${token} on chain ${from}`);
14887
+ return {
14888
+ ok: true,
14889
+ value: this.filterTokensWithSameVault(spokeChainConfig[to].supportedTokens, to, srcAssetInfo)
14890
+ };
14891
+ } catch (error) {
14892
+ return {
14893
+ ok: false,
14894
+ error
14895
+ };
14896
+ }
14897
+ }
14898
+ filterTokensWithSameVault(tokens, to, srcAssetInfo) {
14899
+ const bridgeableTokens = [];
14900
+ for (const token of Object.values(tokens)) {
14901
+ const dstAssetInfo = getHubAssetInfo(to, token.address);
14902
+ if (dstAssetInfo && srcAssetInfo && dstAssetInfo.vault.toLowerCase() === srcAssetInfo.vault.toLowerCase()) {
14903
+ bridgeableTokens.push({
14904
+ ...token,
14905
+ xChainId: to
14906
+ });
14907
+ }
14908
+ }
14909
+ return bridgeableTokens;
14910
+ }
14911
+ };
14912
+
13834
14913
  // src/entities/Sodax.ts
13835
14914
  var Sodax = class {
13836
14915
  config;
@@ -13840,6 +14919,10 @@ var Sodax = class {
13840
14919
  // Money Market service enabling cross-chain lending and borrowing
13841
14920
  migration;
13842
14921
  // ICX migration service enabling ICX migration to SODA
14922
+ backendApiService;
14923
+ // backend API service enabling backend API endpoints
14924
+ bridge;
14925
+ // Bridge service enabling cross-chain transfers
13843
14926
  hubProvider;
13844
14927
  // hub provider for the hub chain (e.g. Sonic mainnet)
13845
14928
  relayerApiEndpoint;
@@ -13851,6 +14934,8 @@ var Sodax = class {
13851
14934
  this.solver = config && config.solver ? new SolverService(config.solver, this.hubProvider, this.relayerApiEndpoint) : new SolverService(void 0, this.hubProvider, this.relayerApiEndpoint);
13852
14935
  this.moneyMarket = config && config.moneyMarket ? new MoneyMarketService(config.moneyMarket, this.hubProvider, this.relayerApiEndpoint) : new MoneyMarketService(void 0, this.hubProvider, this.relayerApiEndpoint);
13853
14936
  this.migration = config && config.migration ? new MigrationService(this.hubProvider, config.migration) : new MigrationService(this.hubProvider);
14937
+ this.bridge = config && config.bridge ? new BridgeService(this.hubProvider, this.relayerApiEndpoint, config.bridge) : new BridgeService(this.hubProvider, this.relayerApiEndpoint);
14938
+ this.backendApiService = new BackendApiService(config?.backendApiConfig);
13854
14939
  }
13855
14940
  };
13856
14941
 
@@ -13917,16 +15002,16 @@ function calculateFeeAmount(inputAmount, fee) {
13917
15002
  if (!fee) {
13918
15003
  return 0n;
13919
15004
  }
13920
- invariant11(inputAmount > 0n, "Input amount must be greater than 0");
15005
+ invariant12(inputAmount > 0n, "Input amount must be greater than 0");
13921
15006
  let feeAmount = 0n;
13922
15007
  if (isPartnerFeeAmount(fee)) {
13923
- invariant11(
15008
+ invariant12(
13924
15009
  fee.amount >= 0 && fee.amount <= inputAmount,
13925
15010
  `Fee amount must be greater than 0 and less than or equal to the input amount: ${fee.amount}`
13926
15011
  );
13927
15012
  feeAmount = fee.amount;
13928
15013
  } else if (isPartnerFeePercentage(fee)) {
13929
- invariant11(
15014
+ invariant12(
13930
15015
  fee.percentage >= 0 && fee.percentage <= FEE_PERCENTAGE_SCALE,
13931
15016
  `Fee percentage must be between 0 and ${FEE_PERCENTAGE_SCALE}}`
13932
15017
  );
@@ -13935,8 +15020,8 @@ function calculateFeeAmount(inputAmount, fee) {
13935
15020
  return feeAmount;
13936
15021
  }
13937
15022
  function adjustAmountByFee(amount, fee, quoteType) {
13938
- invariant11(amount > 0n, "Amount must be greater than 0");
13939
- invariant11(quoteType === "exact_input" || quoteType === "exact_output", "Invalid quote type");
15023
+ invariant12(amount > 0n, "Amount must be greater than 0");
15024
+ invariant12(quoteType === "exact_input" || quoteType === "exact_output", "Invalid quote type");
13940
15025
  if (quoteType === "exact_input") {
13941
15026
  return amount - calculateFeeAmount(amount, fee);
13942
15027
  }
@@ -15511,9 +16596,9 @@ var MoneyMarketService = class _MoneyMarketService {
15511
16596
  */
15512
16597
  async isAllowanceValid(params, spokeProvider) {
15513
16598
  try {
15514
- invariant11(params.amount > 0n, "Amount must be greater than 0");
15515
- invariant11(params.token.length > 0, "Token is required");
15516
- invariant11(
16599
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
16600
+ invariant12(params.token.length > 0, "Token is required");
16601
+ invariant12(
15517
16602
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
15518
16603
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
15519
16604
  );
@@ -15608,19 +16693,19 @@ var MoneyMarketService = class _MoneyMarketService {
15608
16693
  */
15609
16694
  async approve(params, spokeProvider, raw) {
15610
16695
  try {
15611
- invariant11(params.amount > 0n, "Amount must be greater than 0");
15612
- invariant11(params.token.length > 0, "Token is required");
15613
- invariant11(
16696
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
16697
+ invariant12(params.token.length > 0, "Token is required");
16698
+ invariant12(
15614
16699
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
15615
16700
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
15616
16701
  );
15617
16702
  const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
15618
16703
  if (spokeProvider instanceof EvmSpokeProvider) {
15619
- invariant11(
16704
+ invariant12(
15620
16705
  params.action === "supply" || params.action === "repay",
15621
16706
  "Invalid action (only supply and repay are supported on evm)"
15622
16707
  );
15623
- invariant11(isAddress(params.token), "Invalid token address");
16708
+ invariant12(isAddress(params.token), "Invalid token address");
15624
16709
  const result = await Erc20Service.approve(
15625
16710
  params.token,
15626
16711
  params.amount,
@@ -15634,11 +16719,11 @@ var MoneyMarketService = class _MoneyMarketService {
15634
16719
  };
15635
16720
  }
15636
16721
  if (spokeProvider instanceof SonicSpokeProvider && spokeProvider.chainConfig.chain.id === this.hubProvider.chainConfig.chain.id) {
15637
- invariant11(
16722
+ invariant12(
15638
16723
  params.action === "withdraw" || params.action === "borrow" || params.action === "supply" || params.action === "repay",
15639
16724
  "Invalid action (only withdraw, borrow, supply and repay are supported on sonic)"
15640
16725
  );
15641
- invariant11(isAddress(params.token), "Invalid token address");
16726
+ invariant12(isAddress(params.token), "Invalid token address");
15642
16727
  if (params.action === "withdraw") {
15643
16728
  const withdrawInfo = await SonicSpokeService.getWithdrawInfo(
15644
16729
  params.token,
@@ -15810,10 +16895,10 @@ var MoneyMarketService = class _MoneyMarketService {
15810
16895
  */
15811
16896
  async createSupplyIntent(params, spokeProvider, raw) {
15812
16897
  try {
15813
- invariant11(params.action === "supply", "Invalid action");
15814
- invariant11(params.token.length > 0, "Token is required");
15815
- invariant11(params.amount > 0n, "Amount must be greater than 0");
15816
- invariant11(
16898
+ invariant12(params.action === "supply", "Invalid action");
16899
+ invariant12(params.token.length > 0, "Token is required");
16900
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
16901
+ invariant12(
15817
16902
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
15818
16903
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
15819
16904
  );
@@ -15975,10 +17060,10 @@ var MoneyMarketService = class _MoneyMarketService {
15975
17060
  * }
15976
17061
  */
15977
17062
  async createBorrowIntent(params, spokeProvider, raw) {
15978
- invariant11(params.action === "borrow", "Invalid action");
15979
- invariant11(params.token.length > 0, "Token is required");
15980
- invariant11(params.amount > 0n, "Amount must be greater than 0");
15981
- invariant11(
17063
+ invariant12(params.action === "borrow", "Invalid action");
17064
+ invariant12(params.token.length > 0, "Token is required");
17065
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
17066
+ invariant12(
15982
17067
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
15983
17068
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
15984
17069
  );
@@ -16111,10 +17196,10 @@ var MoneyMarketService = class _MoneyMarketService {
16111
17196
  * }
16112
17197
  */
16113
17198
  async createWithdrawIntent(params, spokeProvider, raw) {
16114
- invariant11(params.action === "withdraw", "Invalid action");
16115
- invariant11(params.token.length > 0, "Token is required");
16116
- invariant11(params.amount > 0n, "Amount must be greater than 0");
16117
- invariant11(
17199
+ invariant12(params.action === "withdraw", "Invalid action");
17200
+ invariant12(params.token.length > 0, "Token is required");
17201
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
17202
+ invariant12(
16118
17203
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
16119
17204
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
16120
17205
  );
@@ -16262,10 +17347,10 @@ var MoneyMarketService = class _MoneyMarketService {
16262
17347
  * }
16263
17348
  */
16264
17349
  async createRepayIntent(params, spokeProvider, raw) {
16265
- invariant11(params.action === "repay", "Invalid action");
16266
- invariant11(params.token.length > 0, "Token is required");
16267
- invariant11(params.amount > 0n, "Amount must be greater than 0");
16268
- invariant11(
17350
+ invariant12(params.action === "repay", "Invalid action");
17351
+ invariant12(params.token.length > 0, "Token is required");
17352
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
17353
+ invariant12(
16269
17354
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
16270
17355
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
16271
17356
  );
@@ -16318,7 +17403,7 @@ var MoneyMarketService = class _MoneyMarketService {
16318
17403
  buildSupplyData(token, to, amount, spokeChainId) {
16319
17404
  const calls = [];
16320
17405
  const assetConfig = getHubAssetInfo(spokeChainId, token);
16321
- invariant11(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);
17406
+ invariant12(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);
16322
17407
  let assetAddress = assetConfig.asset;
16323
17408
  const vaultAddress = assetConfig.vault;
16324
17409
  const lendingPool = this.config.lendingPool;
@@ -16349,13 +17434,13 @@ var MoneyMarketService = class _MoneyMarketService {
16349
17434
  * @returns {Hex} The transaction data.
16350
17435
  */
16351
17436
  buildBorrowData(from, to, token, amount, spokeChainId) {
16352
- invariant11(isValidSpokeChainId(spokeChainId), `Invalid spokeChainId: ${spokeChainId}`);
16353
- invariant11(
17437
+ invariant12(isValidSpokeChainId(spokeChainId), `Invalid spokeChainId: ${spokeChainId}`);
17438
+ invariant12(
16354
17439
  isValidOriginalAssetAddress(spokeChainId, token),
16355
17440
  `Unsupported spoke chain (${spokeChainId}) token: ${token}`
16356
17441
  );
16357
17442
  const assetConfig = getHubAssetInfo(spokeChainId, token);
16358
- invariant11(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);
17443
+ invariant12(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);
16359
17444
  let assetAddress = assetConfig.asset;
16360
17445
  const vaultAddress = assetConfig.vault;
16361
17446
  const bnUSDVault = this.config.bnUSDVault;
@@ -16679,6 +17764,6 @@ var SolverIntentErrorCode = /* @__PURE__ */ ((SolverIntentErrorCode2) => {
16679
17764
  return SolverIntentErrorCode2;
16680
17765
  })(SolverIntentErrorCode || {});
16681
17766
 
16682
- export { BalnSwapService, BigIntToHex, BigNumberZeroDecimal, BnUSDMigrationService, ChainIdToIntentRelayChainId, DEFAULT_DEADLINE_OFFSET, DEFAULT_MAX_RETRY, DEFAULT_RELAYER_API_ENDPOINT, DEFAULT_RELAY_TX_TIMEOUT, DEFAULT_RETRY_DELAY_MS, EVM_CHAIN_IDS, EVM_SPOKE_CHAIN_IDS, Erc20Service, EvmAssetManagerService, EvmHubProvider, EvmSolverService, EvmSpokeProvider, EvmSpokeService, EvmVaultTokenService, EvmWalletAbstraction, FEE_PERCENTAGE_SCALE, HALF_RAY, HALF_WAD, HubVaultSymbols, ICON_TX_RESULT_WAIT_MAX_RETRY, INTENT_RELAY_CHAIN_IDS, IconSpokeProvider, IcxMigrationService, InjectiveSpokeProvider, IntentCreatedEventAbi, IntentDataType, IntentsAbi, LTV_PRECISION, LendingPoolService, LockupMultiplier, LockupPeriod, MAX_UINT256, MigrationService, MoneyMarketDataService, MoneyMarketService, RAY, RAY_DECIMALS, SECONDS_PER_YEAR, STELLAR_DEFAULT_TX_TIMEOUT_SECONDS, STELLAR_PRIORITY_FEE, Sodax, SolanaSpokeProvider, SolverIntentErrorCode, SolverIntentStatusCode, SolverService, SonicSpokeProvider, SonicSpokeService, SpokeService, StellarSpokeProvider, SuiSpokeProvider, SuiSpokeService, SupportedMigrationTokens, USD_DECIMALS, UiPoolDataProviderService, VAULT_TOKEN_DECIMALS, WAD, WAD_RAY_RATIO, WEI_DECIMALS, WalletAbstractionService, adjustAmountByFee, assetManagerAbi, balnSwapAbi, binomialApproximatedRayPow, bnUSDLegacySpokeChainIds, bnUSDLegacyTokens, bnUSDNewTokens, calculateAllReserveIncentives, calculateAllUserIncentives, calculateAvailableBorrowsMarketReferenceCurrency, calculateCompoundedInterest, calculateCompoundedRate, calculateFeeAmount, calculateHealthFactorFromBalances, calculateHealthFactorFromBalancesBigUnits, calculateLinearInterest, calculatePercentageFeeAmount, chainIdToHubAssetsMap, connectionAbi, deriveUserWalletAddress, encodeAddress, encodeContractCalls, erc20Abi, formatBasisPoints, formatEModeCategory, formatEModes, formatPercentage, formatReserve, formatReserveUSD, formatReserves, formatReservesAndIncentives, formatUserSummary, formatUserSummaryAndIncentives, getAllLegacybnUSDTokens, getAndFormatReserveEModes, getCompoundedBalance, getEvmViemChain, getHubAssetInfo, getHubChainConfig, getIconAddressBytes, getIntentRelayChainId, getLinearBalance, getMarketReferenceCurrencyAndUsdBalance, getMoneyMarketConfig, getOriginalAssetAddress, getPacket, getRandomBytes, getReserveNormalizedIncome, getReservesEModes, getSolanaAddressBytes, getSolverConfig, getSpokeChainIdFromIntentRelayChainId, getSupportedMoneyMarketTokens, getSupportedSolverTokens, getTransactionPackets, hexToBigInt, hubAssetToOriginalAssetMap, hubAssets, hubVaults, hubVaultsAddressSet, intentRelayChainIdToSpokeChainIdMap, isBalnMigrateParams, isConfiguredMoneyMarketConfig, isConfiguredSolverConfig, isEvmHubChainConfig, isEvmInitializedConfig, isEvmSpokeChainConfig, isEvmSpokeProvider, isEvmUninitializedBrowserConfig, isEvmUninitializedConfig, isEvmUninitializedPrivateKeyConfig, isIconAddress, isIconSpokeProvider, isIcxCreateRevertMigrationParams, isIcxMigrateParams, isInjectiveSpokeProvider, isIntentCreationFailedError, isIntentCreationUnknownError, isIntentPostExecutionFailedError, isIntentRelayChainId, isIntentSubmitTxFailedError, isJsonRpcPayloadResponse, isLegacybnUSDChainId, isLegacybnUSDToken, isMoneyMarketBorrowUnknownError, isMoneyMarketCreateBorrowIntentFailedError, isMoneyMarketCreateRepayIntentFailedError, isMoneyMarketCreateSupplyIntentFailedError, isMoneyMarketCreateWithdrawIntentFailedError, isMoneyMarketRelayTimeoutError, isMoneyMarketRepayUnknownError, isMoneyMarketReserveAsset, isMoneyMarketReserveHubAsset, isMoneyMarketSubmitTxFailedError, isMoneyMarketSupplyUnknownError, isMoneyMarketSupportedToken, isMoneyMarketWithdrawUnknownError, isNativeToken, isNewbnUSDChainId, isNewbnUSDToken, isPartnerFeeAmount, isPartnerFeePercentage, isResponseAddressType, isResponseSigningType, isSolanaSpokeProvider, isSolverSupportedToken, isSonicSpokeProvider, isStellarSpokeProvider, isSuiSpokeProvider, isUnifiedBnUSDMigrateParams, isValidChainHubAsset, isValidHubAsset, isValidIntentRelayChainId, isValidOriginalAssetAddress, isValidSpokeChainId, isWaitUntilIntentExecutedFailed, moneyMarketReserveAssets, moneyMarketReserveHubAssetsSet, moneyMarketSupportedTokens, nativeToUSD, newbnUSDSpokeChainIds, normalize, normalizeBN, normalizedToUsd, originalAssetTohubAssetMap, poolAbi, randomUint256, rayDiv, rayMul, rayPow, rayToWad, relayTxAndWaitPacket, requestAddress, requestJsonRpc, requestSigning, retry, sonicWalletFactoryAbi, spokeAssetManagerAbi, spokeChainConfig, spokeChainIdsSet, submitTransaction, supportedHubAssets, supportedHubChains, supportedSpokeChains, supportedTokensPerChain, uiPoolDataAbi, valueToBigNumber, valueToZDBigNumber, variableDebtTokenAbi, vaultTokenAbi, wadToRay, waitForTransactionReceipt, waitUntilIntentExecuted, walletFactoryAbi, wrappedSonicAbi };
17767
+ export { BackendApiService, BalnSwapService, BigIntToHex, BigNumberZeroDecimal, BnUSDMigrationService, BridgeService, ChainIdToIntentRelayChainId, DEFAULT_BACKEND_API_ENDPOINT, DEFAULT_BACKEND_API_HEADERS, DEFAULT_BACKEND_API_TIMEOUT, DEFAULT_DEADLINE_OFFSET, DEFAULT_MAX_RETRY, DEFAULT_RELAYER_API_ENDPOINT, DEFAULT_RELAY_TX_TIMEOUT, DEFAULT_RETRY_DELAY_MS, EVM_CHAIN_IDS, EVM_SPOKE_CHAIN_IDS, Erc20Service, EvmAssetManagerService, EvmHubProvider, EvmSolverService, EvmSpokeProvider, EvmSpokeService, EvmVaultTokenService, EvmWalletAbstraction, FEE_PERCENTAGE_SCALE, HALF_RAY, HALF_WAD, HubVaultSymbols, ICON_TX_RESULT_WAIT_MAX_RETRY, INTENT_RELAY_CHAIN_IDS, IconSpokeProvider, IcxMigrationService, InjectiveSpokeProvider, IntentCreatedEventAbi, IntentDataType, IntentsAbi, LTV_PRECISION, LendingPoolService, LockupMultiplier, LockupPeriod, MAX_UINT256, MigrationService, MoneyMarketDataService, MoneyMarketService, RAY, RAY_DECIMALS, SECONDS_PER_YEAR, STELLAR_DEFAULT_TX_TIMEOUT_SECONDS, STELLAR_PRIORITY_FEE, SodaTokens, SodaTokensAsHubAssets, SodaVaultTokensSet, Sodax, SolanaSpokeProvider, SolverIntentErrorCode, SolverIntentStatusCode, SolverService, SonicSpokeProvider, SonicSpokeService, SpokeService, StellarSpokeProvider, SuiSpokeProvider, SuiSpokeService, SupportedMigrationTokens, USD_DECIMALS, UiPoolDataProviderService, VAULT_TOKEN_DECIMALS, WAD, WAD_RAY_RATIO, WEI_DECIMALS, WalletAbstractionService, adjustAmountByFee, assetManagerAbi, balnSwapAbi, binomialApproximatedRayPow, bnUSDLegacySpokeChainIds, bnUSDLegacyTokens, bnUSDNewTokens, calculateAllReserveIncentives, calculateAllUserIncentives, calculateAvailableBorrowsMarketReferenceCurrency, calculateCompoundedInterest, calculateCompoundedRate, calculateFeeAmount, calculateHealthFactorFromBalances, calculateHealthFactorFromBalancesBigUnits, calculateLinearInterest, calculatePercentageFeeAmount, chainIdToHubAssetsMap, connectionAbi, deriveUserWalletAddress, encodeAddress, encodeContractCalls, erc20Abi, formatBasisPoints, formatEModeCategory, formatEModes, formatPercentage, formatReserve, formatReserveUSD, formatReserves, formatReservesAndIncentives, formatUserSummary, formatUserSummaryAndIncentives, getAllLegacybnUSDTokens, getAndFormatReserveEModes, getCompoundedBalance, getEvmViemChain, getHubAssetInfo, getHubChainConfig, getHubVaultTokenByAddress, getIconAddressBytes, getIntentRelayChainId, getLinearBalance, getMarketReferenceCurrencyAndUsdBalance, getMoneyMarketConfig, getOriginalAssetAddress, getOriginalAssetInfoFromVault, getOriginalTokenFromOriginalAssetAddress, getPacket, getRandomBytes, getReserveNormalizedIncome, getReservesEModes, getSolanaAddressBytes, getSolverConfig, getSpokeChainIdFromIntentRelayChainId, getSupportedMoneyMarketTokens, getSupportedSolverTokens, getTransactionPackets, hexToBigInt, hubAssetToOriginalAssetMap, hubAssets, hubVaultTokensMap, hubVaults, hubVaultsAddressSet, intentRelayChainIdToSpokeChainIdMap, isBalnMigrateParams, isConfiguredMoneyMarketConfig, isConfiguredSolverConfig, isEvmHubChainConfig, isEvmInitializedConfig, isEvmSpokeChainConfig, isEvmSpokeProvider, isEvmUninitializedBrowserConfig, isEvmUninitializedConfig, isEvmUninitializedPrivateKeyConfig, isIconAddress, isIconSpokeProvider, isIcxCreateRevertMigrationParams, isIcxMigrateParams, isInjectiveSpokeProvider, isIntentCreationFailedError, isIntentCreationUnknownError, isIntentPostExecutionFailedError, isIntentRelayChainId, isIntentSubmitTxFailedError, isJsonRpcPayloadResponse, isLegacybnUSDChainId, isLegacybnUSDToken, isMoneyMarketBorrowUnknownError, isMoneyMarketCreateBorrowIntentFailedError, isMoneyMarketCreateRepayIntentFailedError, isMoneyMarketCreateSupplyIntentFailedError, isMoneyMarketCreateWithdrawIntentFailedError, isMoneyMarketRelayTimeoutError, isMoneyMarketRepayUnknownError, isMoneyMarketReserveAsset, isMoneyMarketReserveHubAsset, isMoneyMarketSubmitTxFailedError, isMoneyMarketSupplyUnknownError, isMoneyMarketSupportedToken, isMoneyMarketWithdrawUnknownError, isNativeToken, isNewbnUSDChainId, isNewbnUSDToken, isPartnerFeeAmount, isPartnerFeePercentage, isResponseAddressType, isResponseSigningType, isSodaVaultToken, isSolanaSpokeProvider, isSolverSupportedToken, isSonicSpokeProvider, isStellarSpokeProvider, isSuiSpokeProvider, isUnifiedBnUSDMigrateParams, isValidChainHubAsset, isValidHubAsset, isValidIntentRelayChainId, isValidOriginalAssetAddress, isValidSpokeChainId, isValidVault, isWaitUntilIntentExecutedFailed, moneyMarketReserveAssets, moneyMarketReserveHubAssetsSet, moneyMarketSupportedTokens, nativeToUSD, newbnUSDSpokeChainIds, normalize, normalizeBN, normalizedToUsd, originalAssetTohubAssetMap, poolAbi, randomUint256, rayDiv, rayMul, rayPow, rayToWad, relayTxAndWaitPacket, requestAddress, requestJsonRpc, requestSigning, retry, sonicWalletFactoryAbi, spokeAssetManagerAbi, spokeChainConfig, spokeChainIdsSet, submitTransaction, supportedHubAssets, supportedHubChains, supportedSodaAssets, supportedSpokeChains, supportedTokensPerChain, uiPoolDataAbi, valueToBigNumber, valueToZDBigNumber, variableDebtTokenAbi, vaultTokenAbi, wadToRay, waitForTransactionReceipt, waitUntilIntentExecuted, walletFactoryAbi, wrappedSonicAbi };
16683
17768
  //# sourceMappingURL=index.mjs.map
16684
17769
  //# sourceMappingURL=index.mjs.map