@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.cjs CHANGED
@@ -16,7 +16,7 @@ var rlp = require('rlp');
16
16
  var splToken = require('@solana/spl-token');
17
17
  var anchor = require('@coral-xyz/anchor');
18
18
  var BN = require('bn.js');
19
- var invariant11 = require('tiny-invariant');
19
+ var invariant12 = require('tiny-invariant');
20
20
  var BigNumber4 = require('bignumber.js');
21
21
 
22
22
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -43,7 +43,7 @@ var IconSdkRaw__namespace = /*#__PURE__*/_interopNamespace(IconSdkRaw);
43
43
  var rlp__namespace = /*#__PURE__*/_interopNamespace(rlp);
44
44
  var anchor__namespace = /*#__PURE__*/_interopNamespace(anchor);
45
45
  var BN__default = /*#__PURE__*/_interopDefault(BN);
46
- var invariant11__default = /*#__PURE__*/_interopDefault(invariant11);
46
+ var invariant12__default = /*#__PURE__*/_interopDefault(invariant12);
47
47
  var BigNumber4__default = /*#__PURE__*/_interopDefault(BigNumber4);
48
48
 
49
49
  // src/abis/asset-manager.abi.ts
@@ -6133,7 +6133,7 @@ async function waitForTransactionReceipt(hash, provider) {
6133
6133
  return provider.waitForTransactionReceipt(hash);
6134
6134
  }
6135
6135
  var DEFAULT_MAX_RETRY = 3;
6136
- var DEFAULT_RELAY_TX_TIMEOUT = 6e4;
6136
+ var DEFAULT_RELAY_TX_TIMEOUT = 12e4;
6137
6137
  var DEFAULT_RETRY_DELAY_MS = 2e3;
6138
6138
  var ICON_TX_RESULT_WAIT_MAX_RETRY = 10;
6139
6139
  var MAX_UINT256 = (1n << 256n) - 1n;
@@ -6141,6 +6141,12 @@ var FEE_PERCENTAGE_SCALE = 10000n;
6141
6141
  var STELLAR_PRIORITY_FEE = "10000";
6142
6142
  var STELLAR_DEFAULT_TX_TIMEOUT_SECONDS = 100;
6143
6143
  var DEFAULT_DEADLINE_OFFSET = 300n;
6144
+ var DEFAULT_BACKEND_API_ENDPOINT = "https://apiv1.coolify.iconblockchain.xyz";
6145
+ var DEFAULT_BACKEND_API_TIMEOUT = 3e4;
6146
+ var DEFAULT_BACKEND_API_HEADERS = {
6147
+ "Content-Type": "application/json",
6148
+ Accept: "application/json"
6149
+ };
6144
6150
  var VAULT_TOKEN_DECIMALS = 18;
6145
6151
  var INTENT_RELAY_CHAIN_IDS = {
6146
6152
  AVAX: 6n,
@@ -6215,6 +6221,155 @@ function getEvmViemChain(id) {
6215
6221
  throw new Error(`Unsupported EVM chain ID: ${id}`);
6216
6222
  }
6217
6223
  }
6224
+ var HubVaultSymbols = [
6225
+ "sodaAVAX",
6226
+ "sodaBNB",
6227
+ "sodaETH",
6228
+ "sodaBTC",
6229
+ "sodaSUI",
6230
+ "sodaINJ",
6231
+ "sodaXLM",
6232
+ "sodaSOL",
6233
+ "sodaSODA",
6234
+ "sodaUSDT",
6235
+ "sodaUSDC",
6236
+ "bnUSD",
6237
+ "sodaPOL",
6238
+ "sodaNIBI",
6239
+ "sodaS",
6240
+ "IbnUSD"
6241
+ ];
6242
+ var SodaTokens = {
6243
+ sodaBNB: {
6244
+ symbol: "sodaBNB",
6245
+ name: "Soda BNB",
6246
+ decimals: 18,
6247
+ address: "0x40Cd41b35DB9e5109ae7E54b44De8625dB320E6b",
6248
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6249
+ },
6250
+ sodaAVAX: {
6251
+ symbol: "sodaAVAX",
6252
+ name: "Soda AVAX",
6253
+ decimals: 18,
6254
+ address: "0x14238D267557E9d799016ad635B53CD15935d290",
6255
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6256
+ },
6257
+ sodaETH: {
6258
+ symbol: "sodaETH",
6259
+ name: "Soda ETH",
6260
+ decimals: 18,
6261
+ address: "0x4effB5813271699683C25c734F4daBc45B363709",
6262
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6263
+ },
6264
+ sodaBTC: {
6265
+ symbol: "sodaBTC",
6266
+ name: "Soda BTC",
6267
+ decimals: 18,
6268
+ address: "0x7A1A5555842Ad2D0eD274d09b5c4406a95799D5d",
6269
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6270
+ },
6271
+ sodaSOL: {
6272
+ symbol: "sodaSOL",
6273
+ name: "Soda SOL",
6274
+ decimals: 18,
6275
+ address: "0xdEa692287E2cE8Cb08FA52917Be0F16b1DACDC87",
6276
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6277
+ },
6278
+ sodaXLM: {
6279
+ symbol: "sodaXLM",
6280
+ name: "Soda XLM",
6281
+ decimals: 18,
6282
+ address: "0x6BC8C37cba91F76E68C9e6d689A9C21E4d32079B",
6283
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6284
+ },
6285
+ sodaINJ: {
6286
+ symbol: "sodaINJ",
6287
+ name: "Soda INJ",
6288
+ decimals: 18,
6289
+ address: "0x1f22279C89B213944b7Ea41daCB0a868DdCDFd13",
6290
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6291
+ },
6292
+ sodaNIBI: {
6293
+ symbol: "sodaNIBI",
6294
+ name: "Soda NIBI",
6295
+ decimals: 18,
6296
+ address: "0xc6c85287a8b173A509C2F198bB719A8a5a2d0C68",
6297
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6298
+ },
6299
+ sodaSUI: {
6300
+ symbol: "sodaSUI",
6301
+ name: "Soda SUI",
6302
+ decimals: 18,
6303
+ address: "0xdc5B4b00F98347E95b9F94911213DAB4C687e1e3",
6304
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6305
+ },
6306
+ bnUSD: {
6307
+ symbol: "bnUSD",
6308
+ name: "Balanced Dollar",
6309
+ decimals: 18,
6310
+ address: "0xE801CA34E19aBCbFeA12025378D19c4FBE250131",
6311
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6312
+ },
6313
+ sodaUSDC: {
6314
+ symbol: "sodaUSDC",
6315
+ name: "Soda USDC",
6316
+ decimals: 18,
6317
+ address: "0xAbbb91c0617090F0028BDC27597Cd0D038F3A833",
6318
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6319
+ },
6320
+ sodaUSDT: {
6321
+ symbol: "sodaUSDT",
6322
+ name: "Soda USDT",
6323
+ decimals: 18,
6324
+ address: "0xbDf1F453FCB61424011BBDDCB96cFDB30f3Fe876",
6325
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6326
+ },
6327
+ IbnUSD: {
6328
+ symbol: "IbnUSD",
6329
+ name: "ICON bnUSD (Migration)",
6330
+ decimals: 18,
6331
+ address: "0x9D4b663Eb075d2a1C7B8eaEFB9eCCC0510388B51",
6332
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6333
+ },
6334
+ sodaS: {
6335
+ symbol: "sodaS",
6336
+ name: "Soda S",
6337
+ decimals: 18,
6338
+ address: "0x62ecc3Eeb80a162c57624B3fF80313FE69f5203e",
6339
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6340
+ },
6341
+ sodaPOL: {
6342
+ symbol: "sodaPOL",
6343
+ name: "Soda POL",
6344
+ decimals: 18,
6345
+ address: "0x208ED38f4783328aA9eBFeC360D32e7520A9B779",
6346
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6347
+ },
6348
+ sodaSODA: {
6349
+ symbol: "sodaSODA",
6350
+ name: "Soda SODA",
6351
+ decimals: 18,
6352
+ address: "0x21685E341DE7844135329914Be6Bd8D16982d834",
6353
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6354
+ }
6355
+ };
6356
+ var SodaTokensAsHubAssets = Object.values(SodaTokens).reduce(
6357
+ (acc, token) => {
6358
+ acc[token.address] = {
6359
+ asset: token.address,
6360
+ decimal: token.decimals,
6361
+ symbol: token.symbol,
6362
+ name: token.name,
6363
+ vault: token.address
6364
+ };
6365
+ return acc;
6366
+ },
6367
+ {}
6368
+ );
6369
+ var SodaVaultTokensSet = new Set(Object.values(SodaTokens).map((token) => token.address.toLowerCase()));
6370
+ var isSodaVaultToken = (address) => {
6371
+ return SodaVaultTokensSet.has(address.toLowerCase());
6372
+ };
6218
6373
  var hubChainConfig = {
6219
6374
  [types.SONIC_MAINNET_CHAIN_ID]: {
6220
6375
  chain: {
@@ -6229,6 +6384,7 @@ var hubChainConfig = {
6229
6384
  icxMigration: "0x8294DE9fc60F5ABCc19245E5857071d7C42B9875",
6230
6385
  balnSwap: "0x610a90B61b89a98b954d5750E94834Aa45d08d10",
6231
6386
  sodaToken: "0x7c7d53eecda37a87ce0d5bf8e0b24512a48dc963"
6387
+ // SODA token on Sonic
6232
6388
  },
6233
6389
  nativeToken: "0x0000000000000000000000000000000000000000",
6234
6390
  wrappedNativeToken: "0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38",
@@ -6254,44 +6410,45 @@ var spokeChainConfig = {
6254
6410
  symbol: "S",
6255
6411
  name: "Sonic",
6256
6412
  decimals: 18,
6257
- address: "0x0000000000000000000000000000000000000000"
6258
- },
6259
- bnUSD: {
6260
- symbol: "bnUSD",
6261
- name: "bnUSD",
6262
- decimals: 18,
6263
- address: "0xE801CA34E19aBCbFeA12025378D19c4FBE250131"
6413
+ address: "0x0000000000000000000000000000000000000000",
6414
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6264
6415
  },
6265
6416
  WETH: {
6266
6417
  symbol: "WETH",
6267
6418
  name: "Wrapped Ether",
6268
6419
  decimals: 18,
6269
- address: "0x50c42dEAcD8Fc9773493ED674b675bE577f2634b"
6420
+ address: "0x50c42dEAcD8Fc9773493ED674b675bE577f2634b",
6421
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6270
6422
  },
6271
6423
  USDC: {
6272
6424
  symbol: "USDC",
6273
6425
  name: "USD Coin",
6274
6426
  decimals: 6,
6275
- address: "0x29219dd400f2Bf60E5a23d13Be72B486D4038894"
6427
+ address: "0x29219dd400f2Bf60E5a23d13Be72B486D4038894",
6428
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6276
6429
  },
6277
6430
  USDT: {
6278
6431
  symbol: "USDT",
6279
6432
  name: "Tether USD",
6280
6433
  decimals: 6,
6281
- address: "0x6047828dc181963ba44974801FF68e538dA5eaF9"
6434
+ address: "0x6047828dc181963ba44974801FF68e538dA5eaF9",
6435
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6282
6436
  },
6283
6437
  wS: {
6284
6438
  symbol: "wS",
6285
6439
  name: "Wrapped Sonic",
6286
6440
  decimals: 18,
6287
- address: "0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38"
6441
+ address: "0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38",
6442
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6288
6443
  },
6289
6444
  SODA: {
6290
6445
  symbol: "SODA",
6291
6446
  name: "SODAX",
6292
6447
  decimals: 18,
6293
- address: "0x7c7d53EEcda37a87ce0D5bf8E0b24512A48dC963"
6294
- }
6448
+ address: "0x7c7d53EEcda37a87ce0D5bf8E0b24512A48dC963",
6449
+ xChainId: types.SONIC_MAINNET_CHAIN_ID
6450
+ },
6451
+ ...SodaTokens
6295
6452
  }
6296
6453
  },
6297
6454
  [types.SOLANA_MAINNET_CHAIN_ID]: {
@@ -6310,19 +6467,29 @@ var spokeChainConfig = {
6310
6467
  symbol: "SOL",
6311
6468
  name: "Solana",
6312
6469
  decimals: 9,
6313
- address: "11111111111111111111111111111111"
6470
+ address: "11111111111111111111111111111111",
6471
+ xChainId: types.SOLANA_MAINNET_CHAIN_ID
6314
6472
  },
6315
6473
  bnUSD: {
6316
6474
  symbol: "bnUSD",
6317
6475
  name: "bnUSD",
6318
6476
  decimals: 9,
6319
- address: "3rSPCLNEF7Quw4wX8S1NyKivELoyij8eYA2gJwBgt4V5"
6477
+ address: "3rSPCLNEF7Quw4wX8S1NyKivELoyij8eYA2gJwBgt4V5",
6478
+ xChainId: types.SOLANA_MAINNET_CHAIN_ID
6320
6479
  },
6321
6480
  USDC: {
6322
6481
  symbol: "USDC",
6323
6482
  name: "USD Coin",
6324
6483
  decimals: 6,
6325
- address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
6484
+ address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
6485
+ xChainId: types.SOLANA_MAINNET_CHAIN_ID
6486
+ },
6487
+ SODA: {
6488
+ symbol: "SODA",
6489
+ name: "SODAX",
6490
+ decimals: 9,
6491
+ address: "8Bj8gSbga8My8qRkT1RrvgxFBExiGFgdRNHFaR9o2T3Q",
6492
+ xChainId: types.SOLANA_MAINNET_CHAIN_ID
6326
6493
  }
6327
6494
  },
6328
6495
  gasPrice: "500000",
@@ -6346,25 +6513,36 @@ var spokeChainConfig = {
6346
6513
  symbol: "AVAX",
6347
6514
  name: "Avalanche",
6348
6515
  decimals: 18,
6349
- address: "0x0000000000000000000000000000000000000000"
6516
+ address: "0x0000000000000000000000000000000000000000",
6517
+ xChainId: types.AVALANCHE_MAINNET_CHAIN_ID
6350
6518
  },
6351
6519
  bnUSD: {
6352
6520
  symbol: "bnUSD",
6353
6521
  name: "bnUSD",
6354
6522
  decimals: 18,
6355
- address: "0x6958a4CBFe11406E2a1c1d3a71A1971aD8B3b92F"
6523
+ address: "0x6958a4CBFe11406E2a1c1d3a71A1971aD8B3b92F",
6524
+ xChainId: types.AVALANCHE_MAINNET_CHAIN_ID
6356
6525
  },
6357
6526
  USDT: {
6358
6527
  symbol: "USDT",
6359
6528
  name: "Tether USD",
6360
6529
  decimals: 6,
6361
- address: "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7"
6530
+ address: "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7",
6531
+ xChainId: types.AVALANCHE_MAINNET_CHAIN_ID
6362
6532
  },
6363
6533
  USDC: {
6364
6534
  symbol: "USDC",
6365
6535
  name: "USD Coin",
6366
6536
  decimals: 6,
6367
- address: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"
6537
+ address: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
6538
+ xChainId: types.AVALANCHE_MAINNET_CHAIN_ID
6539
+ },
6540
+ SODA: {
6541
+ symbol: "SODA",
6542
+ name: "SODAX",
6543
+ decimals: 18,
6544
+ address: "0x390ceed555905ec225Da330A188EA04e85570f00",
6545
+ xChainId: types.AVALANCHE_MAINNET_CHAIN_ID
6368
6546
  }
6369
6547
  }
6370
6548
  },
@@ -6385,13 +6563,22 @@ var spokeChainConfig = {
6385
6563
  symbol: "NIBI",
6386
6564
  name: "Nibiru",
6387
6565
  decimals: 6,
6388
- address: "0x0000000000000000000000000000000000000000"
6566
+ address: "0x0000000000000000000000000000000000000000",
6567
+ xChainId: types.NIBIRU_MAINNET_CHAIN_ID
6389
6568
  },
6390
6569
  bnUSD: {
6391
6570
  symbol: "bnUSD",
6392
6571
  name: "bnUSD",
6393
6572
  decimals: 18,
6394
- address: "0x043fb7e23350Dd5b77dE5E228B528763DEcb9131"
6573
+ address: "0x043fb7e23350Dd5b77dE5E228B528763DEcb9131",
6574
+ xChainId: types.NIBIRU_MAINNET_CHAIN_ID
6575
+ },
6576
+ SODA: {
6577
+ symbol: "SODA",
6578
+ name: "SODAX",
6579
+ decimals: 18,
6580
+ address: "0x5bda87f18109CA85fa7ADDf1D48B97734e9dc6F5",
6581
+ xChainId: types.NIBIRU_MAINNET_CHAIN_ID
6395
6582
  }
6396
6583
  }
6397
6584
  },
@@ -6412,49 +6599,64 @@ var spokeChainConfig = {
6412
6599
  symbol: "ETH",
6413
6600
  name: "Ethereum",
6414
6601
  decimals: 18,
6415
- address: "0x0000000000000000000000000000000000000000"
6602
+ address: "0x0000000000000000000000000000000000000000",
6603
+ xChainId: types.ARBITRUM_MAINNET_CHAIN_ID
6416
6604
  },
6417
6605
  bnUSD: {
6418
6606
  symbol: "bnUSD",
6419
6607
  name: "bnUSD",
6420
6608
  decimals: 18,
6421
- address: "0xA256dd181C3f6E5eC68C6869f5D50a712d47212e"
6609
+ address: "0xA256dd181C3f6E5eC68C6869f5D50a712d47212e",
6610
+ xChainId: types.ARBITRUM_MAINNET_CHAIN_ID
6422
6611
  },
6423
6612
  wstETH: {
6424
6613
  symbol: "wstETH",
6425
6614
  name: "Wrapped stETH",
6426
6615
  decimals: 18,
6427
- address: "0x5979D7b546E38E414F7E9822514be443A4800529"
6616
+ address: "0x5979D7b546E38E414F7E9822514be443A4800529",
6617
+ xChainId: types.ARBITRUM_MAINNET_CHAIN_ID
6428
6618
  },
6429
6619
  weETH: {
6430
6620
  symbol: "weETH",
6431
6621
  name: "Wrapped eETH",
6432
6622
  decimals: 18,
6433
- address: "0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe"
6623
+ address: "0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe",
6624
+ xChainId: types.ARBITRUM_MAINNET_CHAIN_ID
6434
6625
  },
6435
6626
  tBTC: {
6436
6627
  symbol: "tBTC",
6437
6628
  name: "Arbitrum tBTC v2",
6438
6629
  decimals: 18,
6439
- address: "0x6c84a8f1c29108F47a79964b5Fe888D4f4D0dE40"
6630
+ address: "0x6c84a8f1c29108F47a79964b5Fe888D4f4D0dE40",
6631
+ xChainId: types.ARBITRUM_MAINNET_CHAIN_ID
6440
6632
  },
6441
6633
  WBTC: {
6442
6634
  symbol: "WBTC",
6443
6635
  name: "Wrapped BTC",
6444
6636
  decimals: 8,
6445
- address: "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f"
6637
+ address: "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f",
6638
+ xChainId: types.ARBITRUM_MAINNET_CHAIN_ID
6446
6639
  },
6447
6640
  USDC: {
6448
6641
  symbol: "USDC",
6449
6642
  name: "USD Coin (USDC)",
6450
6643
  decimals: 6,
6451
- address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
6644
+ address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
6645
+ xChainId: types.ARBITRUM_MAINNET_CHAIN_ID
6452
6646
  },
6453
6647
  USDT: {
6454
6648
  symbol: "USDT",
6455
6649
  name: "TetherToken",
6456
6650
  decimals: 6,
6457
- address: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9"
6651
+ address: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
6652
+ xChainId: types.ARBITRUM_MAINNET_CHAIN_ID
6653
+ },
6654
+ SODA: {
6655
+ symbol: "SODA",
6656
+ name: "SODAX",
6657
+ decimals: 18,
6658
+ address: "0x6958a4CBFe11406E2a1c1d3a71A1971aD8B3b92F",
6659
+ xChainId: types.ARBITRUM_MAINNET_CHAIN_ID
6458
6660
  }
6459
6661
  }
6460
6662
  },
@@ -6475,37 +6677,50 @@ var spokeChainConfig = {
6475
6677
  symbol: "ETH",
6476
6678
  name: "Ethereum",
6477
6679
  decimals: 18,
6478
- address: "0x0000000000000000000000000000000000000000"
6680
+ address: "0x0000000000000000000000000000000000000000",
6681
+ xChainId: types.BASE_MAINNET_CHAIN_ID
6479
6682
  },
6480
6683
  bnUSD: {
6481
6684
  symbol: "bnUSD",
6482
6685
  name: "bnUSD",
6483
6686
  decimals: 18,
6484
- address: "0xAcfab3F31C0a18559D78556BBf297EC29c6cf8aa"
6687
+ address: "0xAcfab3F31C0a18559D78556BBf297EC29c6cf8aa",
6688
+ xChainId: types.BASE_MAINNET_CHAIN_ID
6485
6689
  },
6486
6690
  weETH: {
6487
6691
  symbol: "weETH",
6488
6692
  name: "Wrapped eETH",
6489
6693
  decimals: 18,
6490
- address: "0x04c0599ae5a44757c0af6f9ec3b93da8976c150a"
6694
+ address: "0x04c0599ae5a44757c0af6f9ec3b93da8976c150a",
6695
+ xChainId: types.BASE_MAINNET_CHAIN_ID
6491
6696
  },
6492
6697
  USDC: {
6493
6698
  symbol: "USDC",
6494
6699
  name: "USD Coin",
6495
6700
  decimals: 6,
6496
- address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
6701
+ address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
6702
+ xChainId: types.BASE_MAINNET_CHAIN_ID
6497
6703
  },
6498
6704
  wstETH: {
6499
6705
  symbol: "wstETH",
6500
6706
  name: "Wrapped stETH",
6501
6707
  decimals: 18,
6502
- address: "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452"
6708
+ address: "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452",
6709
+ xChainId: types.BASE_MAINNET_CHAIN_ID
6503
6710
  },
6504
6711
  cbBTC: {
6505
6712
  symbol: "cbBTC",
6506
6713
  name: "Coinbase Wrapped BTC",
6507
6714
  decimals: 8,
6508
- address: "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf"
6715
+ address: "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf",
6716
+ xChainId: types.BASE_MAINNET_CHAIN_ID
6717
+ },
6718
+ SODA: {
6719
+ symbol: "SODA",
6720
+ name: "SODAX",
6721
+ decimals: 18,
6722
+ address: "0xdc5B4b00F98347E95b9F94911213DAB4C687e1e3",
6723
+ xChainId: types.BASE_MAINNET_CHAIN_ID
6509
6724
  }
6510
6725
  }
6511
6726
  },
@@ -6526,37 +6741,50 @@ var spokeChainConfig = {
6526
6741
  symbol: "ETH",
6527
6742
  name: "Ethereum",
6528
6743
  decimals: 18,
6529
- address: "0x0000000000000000000000000000000000000000"
6744
+ address: "0x0000000000000000000000000000000000000000",
6745
+ xChainId: types.OPTIMISM_MAINNET_CHAIN_ID
6530
6746
  },
6531
6747
  bnUSD: {
6532
6748
  symbol: "bnUSD",
6533
6749
  name: "bnUSD",
6534
6750
  decimals: 18,
6535
- address: "0xF4f7dC27c17470a26d0de9039Cf0EA5045F100E8"
6751
+ address: "0xF4f7dC27c17470a26d0de9039Cf0EA5045F100E8",
6752
+ xChainId: types.OPTIMISM_MAINNET_CHAIN_ID
6536
6753
  },
6537
6754
  USDC: {
6538
6755
  symbol: "USDC",
6539
6756
  name: "USD Coin",
6540
6757
  decimals: 6,
6541
- address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"
6758
+ address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
6759
+ xChainId: types.OPTIMISM_MAINNET_CHAIN_ID
6542
6760
  },
6543
6761
  wstETH: {
6544
6762
  symbol: "wstETH",
6545
6763
  name: "Wrapped stETH",
6546
6764
  decimals: 18,
6547
- address: "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb"
6765
+ address: "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb",
6766
+ xChainId: types.OPTIMISM_MAINNET_CHAIN_ID
6548
6767
  },
6549
6768
  weETH: {
6550
6769
  symbol: "weETH",
6551
6770
  name: "Wrapped eETH",
6552
6771
  decimals: 18,
6553
- address: "0x5A7fACB970D094B6C7FF1df0eA68D99E6e73CBFF"
6772
+ address: "0x5A7fACB970D094B6C7FF1df0eA68D99E6e73CBFF",
6773
+ xChainId: types.OPTIMISM_MAINNET_CHAIN_ID
6554
6774
  },
6555
6775
  USDT: {
6556
6776
  symbol: "USDT",
6557
6777
  name: "Tether USD",
6558
6778
  decimals: 6,
6559
- address: "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58"
6779
+ address: "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58",
6780
+ xChainId: types.OPTIMISM_MAINNET_CHAIN_ID
6781
+ },
6782
+ SODA: {
6783
+ symbol: "SODA",
6784
+ name: "SODAX",
6785
+ decimals: 18,
6786
+ address: "0x1f22279C89B213944b7Ea41daCB0a868DdCDFd13",
6787
+ xChainId: types.OPTIMISM_MAINNET_CHAIN_ID
6560
6788
  }
6561
6789
  }
6562
6790
  },
@@ -6577,31 +6805,43 @@ var spokeChainConfig = {
6577
6805
  symbol: "BNB",
6578
6806
  name: "BNB",
6579
6807
  decimals: 18,
6580
- address: "0x0000000000000000000000000000000000000000"
6808
+ address: "0x0000000000000000000000000000000000000000",
6809
+ xChainId: types.BSC_MAINNET_CHAIN_ID
6581
6810
  },
6582
6811
  bnUSD: {
6583
6812
  symbol: "bnUSD",
6584
6813
  name: "bnUSD",
6585
6814
  decimals: 18,
6586
- address: "0x8428FedC020737a5A2291F46cB1B80613eD71638"
6815
+ address: "0x8428FedC020737a5A2291F46cB1B80613eD71638",
6816
+ xChainId: types.BSC_MAINNET_CHAIN_ID
6587
6817
  },
6588
6818
  ETHB: {
6589
6819
  symbol: "ETHB",
6590
6820
  name: "Ethereum BSC",
6591
6821
  decimals: 18,
6592
- address: "0x2170Ed0880ac9A755fd29B2688956BD959F933F8"
6822
+ address: "0x2170Ed0880ac9A755fd29B2688956BD959F933F8",
6823
+ xChainId: types.BSC_MAINNET_CHAIN_ID
6593
6824
  },
6594
6825
  BTCB: {
6595
6826
  symbol: "BTCB",
6596
6827
  name: "Bitcoin BSC",
6597
6828
  decimals: 18,
6598
- address: "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c"
6829
+ address: "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c",
6830
+ xChainId: types.BSC_MAINNET_CHAIN_ID
6599
6831
  },
6600
6832
  USDC: {
6601
6833
  symbol: "USDC",
6602
6834
  name: "USD Coin",
6603
6835
  decimals: 18,
6604
- address: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"
6836
+ address: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
6837
+ xChainId: types.BSC_MAINNET_CHAIN_ID
6838
+ },
6839
+ SODA: {
6840
+ symbol: "SODA",
6841
+ name: "SODAX",
6842
+ decimals: 18,
6843
+ address: "0xdc5B4b00F98347E95b9F94911213DAB4C687e1e3",
6844
+ xChainId: types.BSC_MAINNET_CHAIN_ID
6605
6845
  }
6606
6846
  }
6607
6847
  },
@@ -6622,19 +6862,29 @@ var spokeChainConfig = {
6622
6862
  symbol: "POL",
6623
6863
  name: "Polygon",
6624
6864
  decimals: 18,
6625
- address: "0x0000000000000000000000000000000000000000"
6865
+ address: "0x0000000000000000000000000000000000000000",
6866
+ xChainId: types.POLYGON_MAINNET_CHAIN_ID
6626
6867
  },
6627
6868
  bnUSD: {
6628
6869
  symbol: "bnUSD",
6629
6870
  name: "bnUSD",
6630
6871
  decimals: 18,
6631
- address: "0x39E77f86C1B1f3fbAb362A82b49D2E86C09659B4"
6872
+ address: "0x39E77f86C1B1f3fbAb362A82b49D2E86C09659B4",
6873
+ xChainId: types.POLYGON_MAINNET_CHAIN_ID
6632
6874
  },
6633
6875
  USDC: {
6634
6876
  symbol: "USDC",
6635
6877
  name: "USD Coin",
6636
6878
  decimals: 6,
6637
- address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
6879
+ address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
6880
+ xChainId: types.POLYGON_MAINNET_CHAIN_ID
6881
+ },
6882
+ SODA: {
6883
+ symbol: "SODA",
6884
+ name: "SODAX",
6885
+ decimals: 18,
6886
+ address: "0xDDF645F33eDAD18fC23E01416eD0267A1bF59D45",
6887
+ xChainId: types.POLYGON_MAINNET_CHAIN_ID
6638
6888
  }
6639
6889
  }
6640
6890
  },
@@ -6659,19 +6909,29 @@ var spokeChainConfig = {
6659
6909
  symbol: "INJ",
6660
6910
  name: "Injective",
6661
6911
  decimals: 18,
6662
- address: "inj"
6912
+ address: "inj",
6913
+ xChainId: types.INJECTIVE_MAINNET_CHAIN_ID
6663
6914
  },
6664
6915
  bnUSD: {
6665
6916
  symbol: "bnUSD",
6666
6917
  name: "bnUSD",
6667
6918
  decimals: 18,
6668
- address: "factory/inj1d036ftaatxpkqsu9hja8r24rv3v33chz3appxp/bnUSD"
6919
+ address: "factory/inj1d036ftaatxpkqsu9hja8r24rv3v33chz3appxp/bnUSD",
6920
+ xChainId: types.INJECTIVE_MAINNET_CHAIN_ID
6669
6921
  },
6670
6922
  USDC: {
6671
6923
  symbol: "USDC",
6672
6924
  name: "USD Coin",
6673
6925
  decimals: 6,
6674
- address: "ibc/2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E"
6926
+ address: "ibc/2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E",
6927
+ xChainId: types.INJECTIVE_MAINNET_CHAIN_ID
6928
+ },
6929
+ SODA: {
6930
+ symbol: "SODA",
6931
+ name: "SODAX",
6932
+ decimals: 18,
6933
+ address: "factory/inj1d036ftaatxpkqsu9hja8r24rv3v33chz3appxp/soda",
6934
+ xChainId: types.INJECTIVE_MAINNET_CHAIN_ID
6675
6935
  }
6676
6936
  },
6677
6937
  gasPrice: "500000000inj",
@@ -6694,25 +6954,36 @@ var spokeChainConfig = {
6694
6954
  symbol: "bnUSD",
6695
6955
  name: "bnUSD",
6696
6956
  decimals: 7,
6697
- address: "CD6YBFFWMU2UJHX2NGRJ7RN76IJVTCC7MRA46DUBXNB7E6W7H7JRJ2CX"
6957
+ address: "CD6YBFFWMU2UJHX2NGRJ7RN76IJVTCC7MRA46DUBXNB7E6W7H7JRJ2CX",
6958
+ xChainId: types.STELLAR_MAINNET_CHAIN_ID
6698
6959
  },
6699
6960
  XLM: {
6700
6961
  symbol: "XLM",
6701
6962
  name: "Stellar Lumens",
6702
6963
  decimals: 7,
6703
- address: "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA"
6964
+ address: "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA",
6965
+ xChainId: types.STELLAR_MAINNET_CHAIN_ID
6704
6966
  },
6705
6967
  USDC: {
6706
6968
  symbol: "USDC",
6707
6969
  name: "USD Coin",
6708
6970
  decimals: 7,
6709
- address: "CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"
6971
+ address: "CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75",
6972
+ xChainId: types.STELLAR_MAINNET_CHAIN_ID
6710
6973
  },
6711
6974
  legacybnUSD: {
6712
- symbol: "bnUSD",
6975
+ symbol: "bnUSD (legacy)",
6713
6976
  name: "legacybnUSD",
6714
6977
  decimals: 18,
6715
- address: "CCT4ZYIYZ3TUO2AWQFEOFGBZ6HQP3GW5TA37CK7CRZVFRDXYTHTYX7KP"
6978
+ address: "CCT4ZYIYZ3TUO2AWQFEOFGBZ6HQP3GW5TA37CK7CRZVFRDXYTHTYX7KP",
6979
+ xChainId: types.STELLAR_MAINNET_CHAIN_ID
6980
+ },
6981
+ SODA: {
6982
+ symbol: "SODA",
6983
+ name: "SODAX",
6984
+ decimals: 7,
6985
+ address: "CAH5LKJC2ZB4RVUVEVL2QWJWNJLHQE2UF767ILLQ5EQ4O3OURR2XIUGM",
6986
+ xChainId: types.STELLAR_MAINNET_CHAIN_ID
6716
6987
  }
6717
6988
  },
6718
6989
  nativeToken: "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA",
@@ -6739,61 +7010,78 @@ var spokeChainConfig = {
6739
7010
  symbol: "SUI",
6740
7011
  name: "SUI",
6741
7012
  decimals: 9,
6742
- address: "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI"
7013
+ address: "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
7014
+ xChainId: types.SUI_MAINNET_CHAIN_ID
6743
7015
  },
6744
7016
  bnUSD: {
6745
7017
  symbol: "bnUSD",
6746
7018
  name: "bnUSD",
6747
7019
  decimals: 9,
6748
- address: "0xff4de2b2b57dd7611d2812d231a467d007b702a101fd5c7ad3b278257cddb507::bnusd::BNUSD"
7020
+ address: "0xff4de2b2b57dd7611d2812d231a467d007b702a101fd5c7ad3b278257cddb507::bnusd::BNUSD",
7021
+ xChainId: types.SUI_MAINNET_CHAIN_ID
6749
7022
  },
6750
7023
  USDC: {
6751
7024
  symbol: "USDC",
6752
7025
  name: "USD Coin",
6753
7026
  decimals: 6,
6754
- address: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC"
7027
+ address: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
7028
+ xChainId: types.SUI_MAINNET_CHAIN_ID
6755
7029
  },
6756
7030
  legacybnUSD: {
6757
- symbol: "bnUSD",
7031
+ symbol: "bnUSD (legacy)",
6758
7032
  name: "legacybnUSD",
6759
7033
  decimals: 9,
6760
- address: "0x03917a812fe4a6d6bc779c5ab53f8a80ba741f8af04121193fc44e0f662e2ceb::balanced_dollar::BALANCED_DOLLAR"
7034
+ address: "0x03917a812fe4a6d6bc779c5ab53f8a80ba741f8af04121193fc44e0f662e2ceb::balanced_dollar::BALANCED_DOLLAR",
7035
+ xChainId: types.SUI_MAINNET_CHAIN_ID
6761
7036
  },
6762
7037
  afSUI: {
6763
7038
  symbol: "afSUI",
6764
7039
  name: "Aftermath Staked Sui",
6765
7040
  decimals: 9,
6766
- address: "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI"
7041
+ address: "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI",
7042
+ xChainId: types.SUI_MAINNET_CHAIN_ID
6767
7043
  },
6768
7044
  mSUI: {
6769
7045
  symbol: "mSUI",
6770
7046
  name: "Mirai Staked SUI",
6771
7047
  decimals: 9,
6772
- address: "0x922d15d7f55c13fd790f6e54397470ec592caa2b508df292a2e8553f3d3b274f::msui::MSUI"
7048
+ address: "0x922d15d7f55c13fd790f6e54397470ec592caa2b508df292a2e8553f3d3b274f::msui::MSUI",
7049
+ xChainId: types.SUI_MAINNET_CHAIN_ID
6773
7050
  },
6774
7051
  haSUI: {
6775
7052
  symbol: "haSUI",
6776
7053
  name: "haSUI",
6777
7054
  decimals: 9,
6778
- address: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI"
7055
+ address: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",
7056
+ xChainId: types.SUI_MAINNET_CHAIN_ID
6779
7057
  },
6780
7058
  vSUI: {
6781
7059
  symbol: "vSUI",
6782
7060
  name: "Volo Staked SUI",
6783
7061
  decimals: 9,
6784
- address: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT"
7062
+ address: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",
7063
+ xChainId: types.SUI_MAINNET_CHAIN_ID
6785
7064
  },
6786
7065
  yapSUI: {
6787
7066
  symbol: "yapSUI",
6788
7067
  name: "Yap Staked SUI",
6789
7068
  decimals: 9,
6790
- address: "0x83f1bb8c91ecd1fd313344058b0eed94d63c54e41d8d1ae5bff1353443517d65::yap_sui::YAP_SUI"
7069
+ address: "0x83f1bb8c91ecd1fd313344058b0eed94d63c54e41d8d1ae5bff1353443517d65::yap_sui::YAP_SUI",
7070
+ xChainId: types.SUI_MAINNET_CHAIN_ID
6791
7071
  },
6792
7072
  trevinSUI: {
6793
7073
  symbol: "trevinSUI",
6794
7074
  name: "Trevin Staked SUI",
6795
7075
  decimals: 9,
6796
- address: "0x502867b177303bf1bf226245fcdd3403c177e78d175a55a56c0602c7ff51c7fa::trevin_sui::TREVIN_SUI"
7076
+ address: "0x502867b177303bf1bf226245fcdd3403c177e78d175a55a56c0602c7ff51c7fa::trevin_sui::TREVIN_SUI",
7077
+ xChainId: types.SUI_MAINNET_CHAIN_ID
7078
+ },
7079
+ SODA: {
7080
+ symbol: "SODA",
7081
+ name: "SODAX",
7082
+ decimals: 9,
7083
+ address: "0x0a0393721732617a2a771535e83c0a46f04aeef7d03239bbbb1249bc0981b952::soda::SODA",
7084
+ xChainId: types.SUI_MAINNET_CHAIN_ID
6797
7085
  }
6798
7086
  },
6799
7087
  nativeToken: "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
@@ -6814,7 +7102,7 @@ var spokeChainConfig = {
6814
7102
  },
6815
7103
  chain: {
6816
7104
  id: types.ICON_MAINNET_CHAIN_ID,
6817
- name: "ICON Mainnet",
7105
+ name: "ICON",
6818
7106
  type: "ICON"
6819
7107
  },
6820
7108
  supportedTokens: {
@@ -6822,33 +7110,38 @@ var spokeChainConfig = {
6822
7110
  symbol: "ICX",
6823
7111
  name: "ICON",
6824
7112
  decimals: 18,
6825
- address: "cx0000000000000000000000000000000000000000"
7113
+ address: "cx0000000000000000000000000000000000000000",
7114
+ xChainId: types.ICON_MAINNET_CHAIN_ID
6826
7115
  },
6827
7116
  wICX: {
6828
7117
  symbol: "wICX",
6829
7118
  name: "Wrapped ICX",
6830
7119
  decimals: 18,
6831
- address: "cx3975b43d260fb8ec802cef6e60c2f4d07486f11d"
7120
+ address: "cx3975b43d260fb8ec802cef6e60c2f4d07486f11d",
7121
+ xChainId: types.ICON_MAINNET_CHAIN_ID
6832
7122
  },
6833
7123
  bnUSD: {
6834
7124
  // same as legacy
6835
- symbol: "bnUSD",
7125
+ symbol: "bnUSD (legacy)",
6836
7126
  name: "bnUSD",
6837
7127
  decimals: 18,
6838
- address: "cx88fd7df7ddff82f7cc735c871dc519838cb235bb"
7128
+ address: "cx88fd7df7ddff82f7cc735c871dc519838cb235bb",
7129
+ xChainId: types.ICON_MAINNET_CHAIN_ID
6839
7130
  },
6840
7131
  legacybnUSD: {
6841
7132
  // duplicate of bnUSD purely for consistency with other legacy tokens chains (sui, stellar)
6842
- symbol: "bnUSD",
7133
+ symbol: "bnUSD (legacy)",
6843
7134
  name: "bnUSD",
6844
7135
  decimals: 18,
6845
- address: "cx88fd7df7ddff82f7cc735c871dc519838cb235bb"
7136
+ address: "cx88fd7df7ddff82f7cc735c871dc519838cb235bb",
7137
+ xChainId: types.ICON_MAINNET_CHAIN_ID
6846
7138
  },
6847
7139
  BALN: {
6848
7140
  symbol: "BALN",
6849
7141
  name: "BALN",
6850
7142
  decimals: 18,
6851
- address: "cxf61cd5a45dc9f91c15aa65831a30a90d59a09619"
7143
+ address: "cxf61cd5a45dc9f91c15aa65831a30a90d59a09619",
7144
+ xChainId: types.ICON_MAINNET_CHAIN_ID
6852
7145
  }
6853
7146
  },
6854
7147
  nativeToken: "cx0000000000000000000000000000000000000000",
@@ -6856,26 +7149,8 @@ var spokeChainConfig = {
6856
7149
  nid: "0x1"
6857
7150
  }
6858
7151
  };
6859
- var HubVaultSymbols = [
6860
- "sodaAVAX",
6861
- "sodaBNB",
6862
- "sodaETH",
6863
- "sodaBTC",
6864
- "sodaSUI",
6865
- "sodaINJ",
6866
- "sodaXLM",
6867
- "sodaSOL",
6868
- "sodaSODA",
6869
- "sodaUSDT",
6870
- "sodaUSDC",
6871
- "bnUSD",
6872
- "sodaPOL",
6873
- "sodaNIBI",
6874
- "sodaS",
6875
- "IbnUSD"
6876
- ];
6877
7152
  var hubVaults = {
6878
- IbnUSD: {
7153
+ [SodaTokens.IbnUSD.symbol]: {
6879
7154
  // ICON bnUSD (Migration) vault on Sonic contains legacy bnUSD tokens (stellar, sui, icon)
6880
7155
  address: "0x9D4b663Eb075d2a1C7B8eaEFB9eCCC0510388B51",
6881
7156
  reserves: [
@@ -6885,28 +7160,28 @@ var hubVaults = {
6885
7160
  "0x1559B52d2e165da1505a542EA37C543c9137f52a"
6886
7161
  ]
6887
7162
  },
6888
- sodaS: {
7163
+ [SodaTokens.sodaS.symbol]: {
6889
7164
  address: "0x62ecc3eeb80a162c57624b3ff80313fe69f5203e",
6890
7165
  reserves: [
6891
7166
  // hub asset addresses contained in the vault
6892
7167
  "0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38"
6893
7168
  ]
6894
7169
  },
6895
- sodaNIBI: {
7170
+ [SodaTokens.sodaNIBI.symbol]: {
6896
7171
  address: "0xc6c85287a8b173a509c2f198bb719a8a5a2d0c68",
6897
7172
  reserves: [
6898
7173
  // hub asset addresses contained in the vault
6899
7174
  "0xe0064414c2c1a636a9424c7a17d86fbf7fd3f190"
6900
7175
  ]
6901
7176
  },
6902
- sodaPOL: {
7177
+ [SodaTokens.sodaPOL.symbol]: {
6903
7178
  address: "0x208ed38f4783328aa9ebfec360d32e7520a9b779",
6904
7179
  reserves: [
6905
7180
  // hub asset addresses contained in the vault
6906
7181
  "0x9ee17486571917837210824b0d4cadfe3b324d12"
6907
7182
  ]
6908
7183
  },
6909
- bnUSD: {
7184
+ [SodaTokens.bnUSD.symbol]: {
6910
7185
  // new bnUSD vault on Sonic (also contains IbnUSD vault token as part of it)
6911
7186
  address: "0xe801ca34e19abcbfea12025378d19c4fbe250131",
6912
7187
  reserves: [
@@ -6925,19 +7200,33 @@ var hubVaults = {
6925
7200
  "0xdf23097b9aeb917bf8fb70e99b6c528fffa35364",
6926
7201
  "0x11b93c162aabffd026539bb3b9f9ec22c8b7ef8a",
6927
7202
  "0x69425ffb14704124a58d6f69d510f74a59d9a5bc",
6928
- "0x9d4b663eb075d2a1c7b8eaefb9eccc0510388b51"
7203
+ "0x9d4b663eb075d2a1c7b8eaefb9eccc0510388b51",
7204
+ "0xD1d14BF3324C901855A1f7d0d5CA4c8458D2a780"
6929
7205
  ]
6930
7206
  },
6931
- sodaSODA: {
7207
+ [SodaTokens.sodaSODA.symbol]: {
6932
7208
  // SODA SODA vault
6933
7209
  address: "0x21685e341de7844135329914be6bd8d16982d834",
6934
7210
  reserves: [
6935
7211
  // hub asset addresses contained in the vault
6936
- "0x7c7d53eecda37a87ce0d5bf8e0b24512a48dc963"
7212
+ "0x7c7d53eecda37a87ce0d5bf8e0b24512a48dc963",
6937
7213
  // SODA SODA hub asset
7214
+ "0xf51d7082375cdca8C19C74e1A0c77dA482aFDa4e",
7215
+ "0x93a367E5B37a1B9E8D04ef25a6Af40d181a3DfFF",
7216
+ "0x17fF8Ad5EBe6CA8B15751067cD0c89f0E580CD17",
7217
+ "0x4d12c72A8633588097D10e57b559ed642588e4C6",
7218
+ "0x26cd76cB5622Dc8638670A16E0Da5a51394A8DB1",
7219
+ "0x0eD0d274dC77ef460DC96b9fBaFF3EDB074e0471",
7220
+ "0x8D78A620E009Ba751Eb40d77A5e9Db48A3F2016b",
7221
+ "0x4Cf5Ce9594AEDdc5D3efe9d4Cdf0b944b4e73A53",
7222
+ "0xD749B5FfFED7cEDaa3239abDd16D677179C29AEc",
7223
+ "0x07Db7b1a96ebE474B20F52fF487cEE415adee79e",
7224
+ "0x20Ce75CdcEe44B1308365447b91B9c26e2b71Ffd",
7225
+ "0x5Db9CEc919f40C50809D9490DC3BbA4F05b0a1D7",
7226
+ "0x655730024B673B3378CD6031B1Cd01eaE9afb138"
6938
7227
  ]
6939
7228
  },
6940
- sodaAVAX: {
7229
+ [SodaTokens.sodaAVAX.symbol]: {
6941
7230
  // SODA AVAX vault
6942
7231
  address: "0x14238d267557e9d799016ad635b53cd15935d290",
6943
7232
  reserves: [
@@ -6946,7 +7235,7 @@ var hubVaults = {
6946
7235
  // AvalancheAVAX hub asset
6947
7236
  ]
6948
7237
  },
6949
- sodaBNB: {
7238
+ [SodaTokens.sodaBNB.symbol]: {
6950
7239
  // SODA BNB vault
6951
7240
  address: "0x40cd41b35db9e5109ae7e54b44de8625db320e6b",
6952
7241
  reserves: [
@@ -6955,7 +7244,7 @@ var hubVaults = {
6955
7244
  // BSC BNB hub asset
6956
7245
  ]
6957
7246
  },
6958
- sodaETH: {
7247
+ [SodaTokens.sodaETH.symbol]: {
6959
7248
  // SODA ETH vault
6960
7249
  address: "0x4effb5813271699683c25c734f4dabc45b363709",
6961
7250
  reserves: [
@@ -6972,7 +7261,7 @@ var hubVaults = {
6972
7261
  // Sonic WETH hub asset
6973
7262
  ]
6974
7263
  },
6975
- sodaBTC: {
7264
+ [SodaTokens.sodaBTC.symbol]: {
6976
7265
  // SODA BTC vault
6977
7266
  address: "0x7a1a5555842ad2d0ed274d09b5c4406a95799d5d",
6978
7267
  reserves: [
@@ -6983,11 +7272,12 @@ var hubVaults = {
6983
7272
  // Arbitrum wBTC hub asset
6984
7273
  "0x96fc8540736f1598b7e235e6de8814062b3b5d3b",
6985
7274
  // Arbitrum tBTC hub asset,
6986
- "0xd8a24c71fea5bb81c66c01e532de7d9b11e13905"
7275
+ "0xd8a24c71fea5bb81c66c01e532de7d9b11e13905",
6987
7276
  // BSC BTCB hub asset
7277
+ "0x03E99853C6376b13a4c6e4d0A115F1639c9FA14e"
6988
7278
  ]
6989
7279
  },
6990
- sodaSUI: {
7280
+ [SodaTokens.sodaSUI.symbol]: {
6991
7281
  // SODA SUI vault
6992
7282
  address: "0xdc5b4b00f98347e95b9f94911213dab4c687e1e3",
6993
7283
  reserves: [
@@ -6996,7 +7286,7 @@ var hubVaults = {
6996
7286
  // SUI SUI hub asset
6997
7287
  ]
6998
7288
  },
6999
- sodaINJ: {
7289
+ [SodaTokens.sodaINJ.symbol]: {
7000
7290
  // SODA INJ vault
7001
7291
  address: "0x1f22279c89b213944b7ea41dacb0a868ddcdfd13",
7002
7292
  reserves: [
@@ -7005,7 +7295,7 @@ var hubVaults = {
7005
7295
  // Injective INJ hub asset
7006
7296
  ]
7007
7297
  },
7008
- sodaXLM: {
7298
+ [SodaTokens.sodaXLM.symbol]: {
7009
7299
  // SODA XLM vault
7010
7300
  address: "0x6bc8c37cba91f76e68c9e6d689a9c21e4d32079b",
7011
7301
  reserves: [
@@ -7014,7 +7304,7 @@ var hubVaults = {
7014
7304
  // Stellar XLM hub asset
7015
7305
  ]
7016
7306
  },
7017
- sodaSOL: {
7307
+ [SodaTokens.sodaSOL.symbol]: {
7018
7308
  // SODA SOL vault
7019
7309
  address: "0xdea692287e2ce8cb08fa52917be0f16b1dacdc87",
7020
7310
  reserves: [
@@ -7023,7 +7313,7 @@ var hubVaults = {
7023
7313
  // Solana SOL hub asset
7024
7314
  ]
7025
7315
  },
7026
- sodaUSDT: {
7316
+ [SodaTokens.sodaUSDT.symbol]: {
7027
7317
  // SODA USDT vault
7028
7318
  address: "0xbdf1f453fcb61424011bbddcb96cfdb30f3fe876",
7029
7319
  reserves: [
@@ -7035,7 +7325,7 @@ var hubVaults = {
7035
7325
  // Sonic USDT
7036
7326
  ]
7037
7327
  },
7038
- sodaUSDC: {
7328
+ [SodaTokens.sodaUSDC.symbol]: {
7039
7329
  address: "0xabbb91c0617090f0028bdc27597cd0d038f3a833",
7040
7330
  reserves: [
7041
7331
  "0x41abf4b1559ff709ef8150079bcb26db1fffd117",
@@ -7049,10 +7339,25 @@ var hubVaults = {
7049
7339
  "0x4bc1211faa06fb50ff61a70331f56167ae511057",
7050
7340
  "0x348007b53f25a9a857ab8ea81ec9e3ccbcf440f2",
7051
7341
  "0xc3f020057510ffe10ceb882e1b48238b43d78a5e",
7052
- "0x9d58508ad10d34048a11640735ca5075bba07b35"
7342
+ "0x9d58508ad10d34048a11640735ca5075bba07b35",
7343
+ "0xC1df02fb7b1b06bE886592C89F6955387998B2f7"
7053
7344
  ]
7054
7345
  }
7055
7346
  };
7347
+ var hubVaultTokensMap = new Map(
7348
+ Object.entries(hubVaults).map(([symbol, vault]) => [
7349
+ vault.address.toLowerCase(),
7350
+ {
7351
+ address: vault.address.toLowerCase(),
7352
+ symbol,
7353
+ name: symbol,
7354
+ decimals: 18
7355
+ }
7356
+ ])
7357
+ );
7358
+ var getHubVaultTokenByAddress = (address) => {
7359
+ return hubVaultTokensMap.get(address.toLowerCase());
7360
+ };
7056
7361
  var bnUSDLegacySpokeChainIds = [
7057
7362
  types.ICON_MAINNET_CHAIN_ID,
7058
7363
  types.SUI_MAINNET_CHAIN_ID,
@@ -7098,6 +7403,13 @@ var hubAssets = {
7098
7403
  name: "Sonic",
7099
7404
  vault: hubVaults.sodaS.address
7100
7405
  },
7406
+ [spokeChainConfig[types.SONIC_MAINNET_CHAIN_ID].bnUSD]: {
7407
+ asset: "0x289cDa1043b4Ce26BDCa3c12E534f56b24308A5B",
7408
+ decimal: 18,
7409
+ symbol: "bnUSD",
7410
+ name: "bnUSD",
7411
+ vault: hubVaults.bnUSD.address
7412
+ },
7101
7413
  [spokeChainConfig[types.SONIC_MAINNET_CHAIN_ID].supportedTokens.wS.address]: {
7102
7414
  asset: spokeChainConfig[types.SONIC_MAINNET_CHAIN_ID].supportedTokens.wS.address,
7103
7415
  decimal: 18,
@@ -7132,7 +7444,8 @@ var hubAssets = {
7132
7444
  symbol: "SODA",
7133
7445
  name: "SODA",
7134
7446
  vault: hubVaults.sodaSODA.address
7135
- }
7447
+ },
7448
+ ...SodaTokensAsHubAssets
7136
7449
  },
7137
7450
  [types.AVALANCHE_MAINNET_CHAIN_ID]: {
7138
7451
  [spokeChainConfig[types.AVALANCHE_MAINNET_CHAIN_ID].nativeToken]: {
@@ -7162,6 +7475,13 @@ var hubAssets = {
7162
7475
  symbol: "bnUSD",
7163
7476
  name: "bnUSD",
7164
7477
  vault: hubVaults.bnUSD.address
7478
+ },
7479
+ [spokeChainConfig[types.AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7480
+ asset: "0xf51d7082375cdca8C19C74e1A0c77dA482aFDa4e",
7481
+ decimal: 18,
7482
+ symbol: "SODA",
7483
+ name: "SODAX",
7484
+ vault: hubVaults.sodaSODA.address
7165
7485
  }
7166
7486
  },
7167
7487
  [types.ARBITRUM_MAINNET_CHAIN_ID]: {
@@ -7222,6 +7542,13 @@ var hubAssets = {
7222
7542
  symbol: "bnUSD",
7223
7543
  name: "bnUSD",
7224
7544
  vault: hubVaults.bnUSD.address
7545
+ },
7546
+ [spokeChainConfig[types.ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7547
+ asset: "0x93a367E5B37a1B9E8D04ef25a6Af40d181a3DfFF",
7548
+ decimal: 18,
7549
+ symbol: "SODA",
7550
+ name: "SODAX",
7551
+ vault: hubVaults.sodaSODA.address
7225
7552
  }
7226
7553
  },
7227
7554
  [types.BASE_MAINNET_CHAIN_ID]: {
@@ -7268,6 +7595,13 @@ var hubAssets = {
7268
7595
  name: "Wrapped Staked Ethereum",
7269
7596
  vault: "0x"
7270
7597
  // no vault yet
7598
+ },
7599
+ [spokeChainConfig[types.BASE_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7600
+ asset: "0x17fF8Ad5EBe6CA8B15751067cD0c89f0E580CD17",
7601
+ decimal: 18,
7602
+ symbol: "SODA",
7603
+ name: "SODAX",
7604
+ vault: hubVaults.sodaSODA.address
7271
7605
  }
7272
7606
  },
7273
7607
  [types.OPTIMISM_MAINNET_CHAIN_ID]: {
@@ -7314,6 +7648,13 @@ var hubAssets = {
7314
7648
  symbol: "USDT",
7315
7649
  name: "Tether USD",
7316
7650
  vault: hubVaults.sodaUSDT.address
7651
+ },
7652
+ [spokeChainConfig[types.OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7653
+ asset: "0x0eD0d274dC77ef460DC96b9fBaFF3EDB074e0471",
7654
+ decimal: 18,
7655
+ symbol: "SODA",
7656
+ name: "SODAX",
7657
+ vault: hubVaults.sodaSODA.address
7317
7658
  }
7318
7659
  },
7319
7660
  [types.NIBIRU_MAINNET_CHAIN_ID]: {
@@ -7330,6 +7671,13 @@ var hubAssets = {
7330
7671
  symbol: "bnUSD",
7331
7672
  name: "bnUSD",
7332
7673
  vault: hubVaults.bnUSD.address
7674
+ },
7675
+ [spokeChainConfig[types.NIBIRU_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7676
+ asset: "0x26cd76cB5622Dc8638670A16E0Da5a51394A8DB1",
7677
+ decimal: 18,
7678
+ symbol: "SODA",
7679
+ name: "SODAX",
7680
+ vault: hubVaults.sodaSODA.address
7333
7681
  }
7334
7682
  },
7335
7683
  [types.BSC_MAINNET_CHAIN_ID]: {
@@ -7367,6 +7715,13 @@ var hubAssets = {
7367
7715
  symbol: "USDC",
7368
7716
  name: "USD Coin",
7369
7717
  vault: hubVaults.sodaUSDC.address
7718
+ },
7719
+ [spokeChainConfig[types.BSC_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7720
+ asset: "0x4d12c72A8633588097D10e57b559ed642588e4C6",
7721
+ decimal: 18,
7722
+ symbol: "SODA",
7723
+ name: "SODAX",
7724
+ vault: hubVaults.sodaSODA.address
7370
7725
  }
7371
7726
  },
7372
7727
  [types.POLYGON_MAINNET_CHAIN_ID]: {
@@ -7390,6 +7745,13 @@ var hubAssets = {
7390
7745
  symbol: "USDC",
7391
7746
  name: "USD Coin",
7392
7747
  vault: hubVaults.sodaUSDC.address
7748
+ },
7749
+ [spokeChainConfig[types.POLYGON_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7750
+ asset: "0x8D78A620E009Ba751Eb40d77A5e9Db48A3F2016b",
7751
+ decimal: 18,
7752
+ symbol: "SODA",
7753
+ name: "SODAX",
7754
+ vault: hubVaults.sodaSODA.address
7393
7755
  }
7394
7756
  },
7395
7757
  [types.INJECTIVE_MAINNET_CHAIN_ID]: {
@@ -7413,6 +7775,13 @@ var hubAssets = {
7413
7775
  symbol: "USDC",
7414
7776
  name: "USD Coin",
7415
7777
  vault: hubVaults.sodaUSDC.address
7778
+ },
7779
+ [spokeChainConfig[types.INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7780
+ asset: "0x20Ce75CdcEe44B1308365447b91B9c26e2b71Ffd",
7781
+ decimal: 18,
7782
+ symbol: "SODA",
7783
+ name: "SODAX",
7784
+ vault: hubVaults.sodaSODA.address
7416
7785
  }
7417
7786
  },
7418
7787
  [types.STELLAR_MAINNET_CHAIN_ID]: {
@@ -7443,6 +7812,13 @@ var hubAssets = {
7443
7812
  symbol: "legacybnUSD",
7444
7813
  name: "legacybnUSD",
7445
7814
  vault: hubVaults.IbnUSD.address
7815
+ },
7816
+ [spokeChainConfig[types.STELLAR_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7817
+ asset: "0xD749B5FfFED7cEDaa3239abDd16D677179C29AEc",
7818
+ decimal: 7,
7819
+ symbol: "SODA",
7820
+ name: "SODAX",
7821
+ vault: hubVaults.sodaSODA.address
7446
7822
  }
7447
7823
  },
7448
7824
  [types.SUI_MAINNET_CHAIN_ID]: {
@@ -7521,6 +7897,13 @@ var hubAssets = {
7521
7897
  symbol: "bnUSD",
7522
7898
  name: "legacybnUSD",
7523
7899
  vault: hubVaults.IbnUSD.address
7900
+ },
7901
+ [spokeChainConfig[types.SUI_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7902
+ asset: "0x5Db9CEc919f40C50809D9490DC3BbA4F05b0a1D7",
7903
+ decimal: 9,
7904
+ symbol: "SODA",
7905
+ name: "SODAX",
7906
+ vault: hubVaults.sodaSODA.address
7524
7907
  }
7525
7908
  },
7526
7909
  [types.SOLANA_MAINNET_CHAIN_ID]: {
@@ -7544,6 +7927,13 @@ var hubAssets = {
7544
7927
  symbol: "USDC",
7545
7928
  name: "USD Coin",
7546
7929
  vault: hubVaults.sodaUSDC.address
7930
+ },
7931
+ [spokeChainConfig[types.SOLANA_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
7932
+ asset: "0x07Db7b1a96ebE474B20F52fF487cEE415adee79e",
7933
+ decimal: 9,
7934
+ symbol: "SODA",
7935
+ name: "SODAX",
7936
+ vault: hubVaults.sodaSODA.address
7547
7937
  }
7548
7938
  },
7549
7939
  [types.ICON_MAINNET_CHAIN_ID]: {
@@ -7593,17 +7983,18 @@ var solverSupportedTokens = {
7593
7983
  spokeChainConfig[types.SONIC_MAINNET_CHAIN_ID].supportedTokens.WETH,
7594
7984
  spokeChainConfig[types.SONIC_MAINNET_CHAIN_ID].supportedTokens.USDC,
7595
7985
  spokeChainConfig[types.SONIC_MAINNET_CHAIN_ID].supportedTokens.USDT,
7596
- spokeChainConfig[types.SONIC_MAINNET_CHAIN_ID].supportedTokens.wS
7986
+ spokeChainConfig[types.SONIC_MAINNET_CHAIN_ID].supportedTokens.wS,
7987
+ spokeChainConfig[types.SONIC_MAINNET_CHAIN_ID].supportedTokens.bnUSD
7597
7988
  ],
7598
7989
  [types.AVALANCHE_MAINNET_CHAIN_ID]: [
7599
7990
  spokeChainConfig[types.AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.AVAX,
7600
7991
  spokeChainConfig[types.AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDT,
7601
- spokeChainConfig[types.AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDC
7602
- // spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7992
+ spokeChainConfig[types.AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDC,
7993
+ spokeChainConfig[types.AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.bnUSD
7603
7994
  ],
7604
7995
  [types.ARBITRUM_MAINNET_CHAIN_ID]: [
7605
7996
  spokeChainConfig[types.ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.ETH,
7606
- // spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7997
+ spokeChainConfig[types.ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7607
7998
  spokeChainConfig[types.ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.WBTC,
7608
7999
  spokeChainConfig[types.ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.weETH,
7609
8000
  spokeChainConfig[types.ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.wstETH,
@@ -7613,7 +8004,7 @@ var solverSupportedTokens = {
7613
8004
  ],
7614
8005
  [types.BASE_MAINNET_CHAIN_ID]: [
7615
8006
  spokeChainConfig[types.BASE_MAINNET_CHAIN_ID].supportedTokens.ETH,
7616
- // spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
8007
+ spokeChainConfig[types.BASE_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7617
8008
  spokeChainConfig[types.BASE_MAINNET_CHAIN_ID].supportedTokens.weETH,
7618
8009
  spokeChainConfig[types.BASE_MAINNET_CHAIN_ID].supportedTokens.USDC,
7619
8010
  spokeChainConfig[types.BASE_MAINNET_CHAIN_ID].supportedTokens.wstETH,
@@ -7621,7 +8012,7 @@ var solverSupportedTokens = {
7621
8012
  ],
7622
8013
  [types.OPTIMISM_MAINNET_CHAIN_ID]: [
7623
8014
  spokeChainConfig[types.OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.ETH,
7624
- // spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
8015
+ spokeChainConfig[types.OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7625
8016
  spokeChainConfig[types.OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.USDC,
7626
8017
  spokeChainConfig[types.OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.wstETH,
7627
8018
  // spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.weETH, // NOTE: Not Implemented
@@ -7629,19 +8020,20 @@ var solverSupportedTokens = {
7629
8020
  ],
7630
8021
  [types.POLYGON_MAINNET_CHAIN_ID]: [
7631
8022
  spokeChainConfig[types.POLYGON_MAINNET_CHAIN_ID].supportedTokens.POL,
7632
- // spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
8023
+ spokeChainConfig[types.POLYGON_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7633
8024
  spokeChainConfig[types.POLYGON_MAINNET_CHAIN_ID].supportedTokens.USDC
7634
8025
  ],
7635
8026
  [types.BSC_MAINNET_CHAIN_ID]: [
7636
8027
  spokeChainConfig[types.BSC_MAINNET_CHAIN_ID].supportedTokens.BNB,
7637
8028
  spokeChainConfig[types.BSC_MAINNET_CHAIN_ID].supportedTokens.ETHB,
7638
8029
  spokeChainConfig[types.BSC_MAINNET_CHAIN_ID].supportedTokens.BTCB,
7639
- // spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
8030
+ spokeChainConfig[types.BSC_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7640
8031
  spokeChainConfig[types.BSC_MAINNET_CHAIN_ID].supportedTokens.USDC
7641
8032
  ],
7642
8033
  [types.SOLANA_MAINNET_CHAIN_ID]: [
7643
8034
  spokeChainConfig[types.SOLANA_MAINNET_CHAIN_ID].supportedTokens.SOL,
7644
- // spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
8035
+ spokeChainConfig[types.SOLANA_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
8036
+ // NOTE: Not Implemented
7645
8037
  spokeChainConfig[types.SOLANA_MAINNET_CHAIN_ID].supportedTokens.USDC
7646
8038
  ],
7647
8039
  [types.ICON_MAINNET_CHAIN_ID]: [
@@ -7653,12 +8045,14 @@ var solverSupportedTokens = {
7653
8045
  ],
7654
8046
  [types.STELLAR_MAINNET_CHAIN_ID]: [
7655
8047
  spokeChainConfig[types.STELLAR_MAINNET_CHAIN_ID].supportedTokens.XLM,
7656
- // spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
8048
+ spokeChainConfig[types.STELLAR_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
8049
+ // NOTE: Not Implemented
7657
8050
  spokeChainConfig[types.STELLAR_MAINNET_CHAIN_ID].supportedTokens.USDC
7658
8051
  ],
7659
8052
  [types.SUI_MAINNET_CHAIN_ID]: [
7660
8053
  spokeChainConfig[types.SUI_MAINNET_CHAIN_ID].supportedTokens.SUI,
7661
- // spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
8054
+ spokeChainConfig[types.SUI_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
8055
+ // NOTE: Not Implemented
7662
8056
  spokeChainConfig[types.SUI_MAINNET_CHAIN_ID].supportedTokens.USDC,
7663
8057
  spokeChainConfig[types.SUI_MAINNET_CHAIN_ID].supportedTokens.afSUI,
7664
8058
  spokeChainConfig[types.SUI_MAINNET_CHAIN_ID].supportedTokens.mSUI,
@@ -7668,9 +8062,9 @@ var solverSupportedTokens = {
7668
8062
  spokeChainConfig[types.SUI_MAINNET_CHAIN_ID].supportedTokens.trevinSUI
7669
8063
  ],
7670
8064
  [types.INJECTIVE_MAINNET_CHAIN_ID]: [
7671
- spokeChainConfig[types.INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.INJ,
8065
+ // spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.INJ,
7672
8066
  // spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7673
- spokeChainConfig[types.INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.USDC
8067
+ // spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.USDC,
7674
8068
  ],
7675
8069
  [types.NIBIRU_MAINNET_CHAIN_ID]: [
7676
8070
  // spokeChainConfig[NIBIRU_MAINNET_CHAIN_ID].supportedTokens.NIBI, // NOTE: Not Implemented
@@ -7802,11 +8196,30 @@ var chainIdToHubAssetsMap = new Map(
7802
8196
  var supportedHubAssets = new Set(
7803
8197
  Object.values(hubAssets).flatMap((assets) => Object.values(assets).map((info) => info.asset.toLowerCase()))
7804
8198
  );
8199
+ var supportedSodaAssets = new Set(
8200
+ Object.values(hubAssets).flatMap((assets) => Object.values(assets).map((info) => info.vault.toLowerCase()))
8201
+ );
7805
8202
  var spokeChainIdsSet = new Set(types.SPOKE_CHAIN_IDS);
8203
+ var getOriginalAssetInfoFromVault = (chainId, vault) => {
8204
+ const assets = hubAssets[chainId];
8205
+ if (!assets) {
8206
+ return [];
8207
+ }
8208
+ const vaultAddress = vault.toLowerCase();
8209
+ const result = [];
8210
+ for (const [spokeToken, info] of Object.entries(assets)) {
8211
+ if (info.vault.toLowerCase() === vaultAddress) {
8212
+ result.push(spokeToken);
8213
+ }
8214
+ }
8215
+ return result;
8216
+ };
7806
8217
  var getHubAssetInfo = (chainId, asset) => originalAssetTohubAssetMap.get(chainId)?.get(asset.toLowerCase());
7807
8218
  var isValidOriginalAssetAddress = (chainId, asset) => originalAssetTohubAssetMap.get(chainId)?.has(asset.toLowerCase()) ?? false;
7808
8219
  var getOriginalAssetAddress = (chainId, hubAsset) => hubAssetToOriginalAssetMap.get(chainId)?.get(hubAsset.toLowerCase());
8220
+ var getOriginalTokenFromOriginalAssetAddress = (chainId, asset) => Object.values(spokeChainConfig[chainId].supportedTokens).find((t) => t.address.toLowerCase() === asset.toLowerCase()) ?? void 0;
7809
8221
  var isValidHubAsset = (hubAsset) => supportedHubAssets.has(hubAsset.toLowerCase());
8222
+ var isValidVault = (vault) => supportedSodaAssets.has(vault.toLowerCase());
7810
8223
  var isValidChainHubAsset = (chainId, hubAsset) => chainIdToHubAssetsMap.get(chainId)?.has(hubAsset.toLowerCase()) ?? false;
7811
8224
  var isValidSpokeChainId = (chainId) => spokeChainIdsSet.has(chainId);
7812
8225
  var isValidIntentRelayChainId = (chainId) => Object.values(INTENT_RELAY_CHAIN_IDS).some((id) => id === chainId);
@@ -7859,12 +8272,13 @@ var InjectiveSpokeProvider = class {
7859
8272
  );
7860
8273
  }
7861
8274
  async getBalance(token) {
7862
- return this.chainGrpcWasmApi.fetchSmartContractState(
8275
+ const response = await this.chainGrpcWasmApi.fetchSmartContractState(
7863
8276
  this.chainConfig.addresses.assetManager,
7864
8277
  sdkTs.toBase64({
7865
8278
  get_balance: { denom: token }
7866
8279
  })
7867
8280
  );
8281
+ return sdkTs.fromBase64(response.data);
7868
8282
  }
7869
8283
  // Execute Methods (requires SigningCosmWasmClient)
7870
8284
  /**
@@ -9315,7 +9729,7 @@ var EvmSpokeService = class _EvmSpokeService {
9315
9729
  address: token,
9316
9730
  abi: erc20Abi,
9317
9731
  functionName: "balanceOf",
9318
- args: [token]
9732
+ args: [spokeProvider.chainConfig.addresses.assetManager]
9319
9733
  });
9320
9734
  }
9321
9735
  /**
@@ -9828,18 +10242,14 @@ var SolanaSpokeService = class _SolanaSpokeService {
9828
10242
  );
9829
10243
  }
9830
10244
  static async getDeposit(token, spokeProvider) {
9831
- const assetManagerProgram = await getAssetManagerProgram(
9832
- spokeProvider.walletProvider.getWalletBase58PublicKey(),
9833
- spokeProvider.chainConfig.rpcUrl,
9834
- spokeProvider.chainConfig.addresses.assetManager
9835
- );
9836
- const solToken = new web3_js.PublicKey(Buffer.from(token, "hex"));
10245
+ const assetManagerProgramId = new web3_js.PublicKey(spokeProvider.chainConfig.addresses.assetManager);
10246
+ const solToken = new web3_js.PublicKey(token);
9837
10247
  if (isNative(new web3_js.PublicKey(solToken))) {
9838
- const vaultNative = AssetManagerPDA.vault_native(assetManagerProgram.programId);
10248
+ const vaultNative = AssetManagerPDA.vault_native(assetManagerProgramId);
9839
10249
  const balance = await spokeProvider.walletProvider.getBalance(vaultNative.pda.toBase58());
9840
10250
  return BigInt(balance);
9841
10251
  }
9842
- const vaultToken = AssetManagerPDA.vault_token(assetManagerProgram.programId, new web3_js.PublicKey(solToken));
10252
+ const vaultToken = AssetManagerPDA.vault_token(assetManagerProgramId, new web3_js.PublicKey(solToken));
9843
10253
  const tokenAccount = await spokeProvider.walletProvider.getTokenAccountBalance(vaultToken.pda.toBase58());
9844
10254
  return BigInt(tokenAccount.value.amount);
9845
10255
  }
@@ -10047,6 +10457,12 @@ var StellarSpokeService = class _StellarSpokeService {
10047
10457
  raw
10048
10458
  );
10049
10459
  }
10460
+ /**
10461
+ * Get the balance of the token in the spoke chain asset manager.
10462
+ * @param token - The address of the token to get the balance of.
10463
+ * @param spokeProvider - The spoke provider.
10464
+ * @returns The balance of the token.
10465
+ */
10050
10466
  static async getDeposit(token, spokeProvider) {
10051
10467
  return BigInt(await spokeProvider.getBalance(token));
10052
10468
  }
@@ -10163,7 +10579,7 @@ var SonicSpokeService = class _SonicSpokeService {
10163
10579
  * @returns {PromiseEvmTxReturnType<R>} A promise that resolves to the transaction hash
10164
10580
  */
10165
10581
  static async deposit(params, spokeProvider, raw) {
10166
- invariant11__default.default(spokeProvider instanceof SonicSpokeProvider, "[SonicSpokeService] invalid spoke provider");
10582
+ invariant12__default.default(spokeProvider instanceof SonicSpokeProvider, "[SonicSpokeService] invalid spoke provider");
10167
10583
  const userHubAddress = params.to ?? await _SonicSpokeService.getUserRouter(params.from, spokeProvider);
10168
10584
  const calls = Array.from(
10169
10585
  viem.decodeAbiParameters(
@@ -10228,11 +10644,11 @@ var SonicSpokeService = class _SonicSpokeService {
10228
10644
  inputToken = hubProvider.chainConfig.nativeToken;
10229
10645
  }
10230
10646
  const outputToken = getHubAssetInfo(createIntentParams.dstChain, createIntentParams.outputToken)?.asset;
10231
- invariant11__default.default(
10647
+ invariant12__default.default(
10232
10648
  inputToken,
10233
10649
  `hub asset not found for spoke chain token (intent.inputToken): ${createIntentParams.inputToken}`
10234
10650
  );
10235
- invariant11__default.default(
10651
+ invariant12__default.default(
10236
10652
  outputToken,
10237
10653
  `hub asset not found for spoke chain token (intent.outputToken): ${createIntentParams.outputToken}`
10238
10654
  );
@@ -10295,7 +10711,7 @@ var SonicSpokeService = class _SonicSpokeService {
10295
10711
  * @returns {PromiseEvmTxReturnType<R>} A promise that resolves to the transaction hash
10296
10712
  */
10297
10713
  static async callWallet(payload, spokeProvider, raw) {
10298
- invariant11__default.default(spokeProvider instanceof SonicSpokeProvider, "[SonicSpokeService] invalid spoke provider");
10714
+ invariant12__default.default(spokeProvider instanceof SonicSpokeProvider, "[SonicSpokeService] invalid spoke provider");
10299
10715
  const calls = viem.decodeAbiParameters(
10300
10716
  [
10301
10717
  {
@@ -10784,11 +11200,8 @@ var SpokeService = class _SpokeService {
10784
11200
  */
10785
11201
  static async deposit(params, spokeProvider, hubProvider, raw, skipSimulation = false) {
10786
11202
  if (spokeProvider instanceof SonicSpokeProvider) {
10787
- return SonicSpokeService.deposit(
10788
- params,
10789
- spokeProvider,
10790
- raw
10791
- );
11203
+ const _params = params;
11204
+ return SonicSpokeService.deposit(_params, spokeProvider, raw);
10792
11205
  }
10793
11206
  if (spokeProvider instanceof EvmSpokeProvider) {
10794
11207
  await _SpokeService.verifyDepositSimulation(params, spokeProvider, hubProvider, skipSimulation);
@@ -10813,7 +11226,6 @@ var SpokeService = class _SpokeService {
10813
11226
  );
10814
11227
  }
10815
11228
  if (spokeProvider instanceof SuiSpokeProvider) {
10816
- await _SpokeService.verifyDepositSimulation(params, spokeProvider, hubProvider, skipSimulation);
10817
11229
  return SuiSpokeService.deposit(
10818
11230
  params,
10819
11231
  spokeProvider,
@@ -10941,18 +11353,32 @@ var SpokeService = class _SpokeService {
10941
11353
  raw
10942
11354
  );
10943
11355
  }
10944
- if (isEvmSpokeProvider(spokeProvider)) {
10945
- await _SpokeService.verifySimulation(from, payload, spokeProvider, hubProvider, skipSimulation);
10946
- return await EvmSpokeService.callWallet(from, payload, spokeProvider, hubProvider);
10947
- }
10948
- if (isInjectiveSpokeProvider(spokeProvider)) {
10949
- await _SpokeService.verifySimulation(from, payload, spokeProvider, hubProvider, skipSimulation);
10950
- return await InjectiveSpokeService.callWallet(
10951
- from,
10952
- payload,
10953
- spokeProvider,
10954
- hubProvider,
10955
- raw
11356
+ if (!skipSimulation) {
11357
+ const result = await _SpokeService.simulateRecvMessage(
11358
+ {
11359
+ target: from,
11360
+ srcChainId: getIntentRelayChainId(spokeProvider.chainConfig.chain.id),
11361
+ srcAddress: await spokeProvider.walletProvider.getWalletAddressBytes(),
11362
+ payload
11363
+ },
11364
+ hubProvider
11365
+ );
11366
+ if (!result.success) {
11367
+ throw new Error("Simulation failed", { cause: result });
11368
+ }
11369
+ }
11370
+ if (isEvmSpokeProvider(spokeProvider)) {
11371
+ await _SpokeService.verifySimulation(from, payload, spokeProvider, hubProvider, skipSimulation);
11372
+ return await EvmSpokeService.callWallet(from, payload, spokeProvider, hubProvider);
11373
+ }
11374
+ if (isInjectiveSpokeProvider(spokeProvider)) {
11375
+ await _SpokeService.verifySimulation(from, payload, spokeProvider, hubProvider, skipSimulation);
11376
+ return await InjectiveSpokeService.callWallet(
11377
+ from,
11378
+ payload,
11379
+ spokeProvider,
11380
+ hubProvider,
11381
+ raw
10956
11382
  );
10957
11383
  }
10958
11384
  if (isIconSpokeProvider(spokeProvider)) {
@@ -11009,19 +11435,19 @@ async function postRequest(payload, apiUrl) {
11009
11435
  return response.json();
11010
11436
  }
11011
11437
  async function submitTransaction(payload, apiUrl) {
11012
- invariant11__default.default(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
11013
- invariant11__default.default(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
11438
+ invariant12__default.default(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
11439
+ invariant12__default.default(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
11014
11440
  return postRequest(payload, apiUrl);
11015
11441
  }
11016
11442
  async function getTransactionPackets(payload, apiUrl) {
11017
- invariant11__default.default(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
11018
- invariant11__default.default(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
11443
+ invariant12__default.default(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
11444
+ invariant12__default.default(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
11019
11445
  return postRequest(payload, apiUrl);
11020
11446
  }
11021
11447
  async function getPacket(payload, apiUrl) {
11022
- invariant11__default.default(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
11023
- invariant11__default.default(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
11024
- invariant11__default.default(payload.params.conn_sn.length > 0, "Invalid input parameters. conn_sn empty");
11448
+ invariant12__default.default(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
11449
+ invariant12__default.default(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
11450
+ invariant12__default.default(payload.params.conn_sn.length > 0, "Invalid input parameters. conn_sn empty");
11025
11451
  return postRequest(payload, apiUrl);
11026
11452
  }
11027
11453
  async function waitUntilIntentExecuted(payload) {
@@ -11152,11 +11578,11 @@ var EvmSolverService = class _EvmSolverService {
11152
11578
  inputToken = hubProvider.chainConfig.wrappedNativeToken;
11153
11579
  }
11154
11580
  const outputToken = getHubAssetInfo(createIntentParams.dstChain, createIntentParams.outputToken)?.asset;
11155
- invariant11__default.default(
11581
+ invariant12__default.default(
11156
11582
  inputToken,
11157
11583
  `hub asset not found for spoke chain token (intent.inputToken): ${createIntentParams.inputToken}`
11158
11584
  );
11159
- invariant11__default.default(
11585
+ invariant12__default.default(
11160
11586
  outputToken,
11161
11587
  `hub asset not found for spoke chain token (intent.outputToken): ${createIntentParams.outputToken}`
11162
11588
  );
@@ -11188,7 +11614,7 @@ var EvmSolverService = class _EvmSolverService {
11188
11614
  * @returns A tuple containing [encoded fee data, fee amount]. Fee amount will be 0n if no fee.
11189
11615
  */
11190
11616
  static createIntentFeeData(fee, inputAmount) {
11191
- invariant11__default.default(inputAmount > 0n, "Input amount must be greater than 0");
11617
+ invariant12__default.default(inputAmount > 0n, "Input amount must be greater than 0");
11192
11618
  if (!fee) {
11193
11619
  return ["0x", 0n];
11194
11620
  }
@@ -11196,7 +11622,7 @@ var EvmSolverService = class _EvmSolverService {
11196
11622
  if (isPartnerFeeAmount(fee)) {
11197
11623
  feeAmount = fee.amount;
11198
11624
  } else if (isPartnerFeePercentage(fee)) {
11199
- invariant11__default.default(
11625
+ invariant12__default.default(
11200
11626
  fee.percentage >= 0 && fee.percentage <= FEE_PERCENTAGE_SCALE,
11201
11627
  `Fee percentage must be between 0 and ${FEE_PERCENTAGE_SCALE}}`
11202
11628
  );
@@ -11323,23 +11749,23 @@ var SolverApiService = class {
11323
11749
  * }
11324
11750
  */
11325
11751
  static async getQuote(payload, config) {
11326
- invariant11__default.default(payload.token_src.length > 0, "Empty token_src");
11327
- invariant11__default.default(payload.token_src_blockchain_id.length > 0, "Empty token_src_blockchain_id");
11328
- invariant11__default.default(payload.token_dst.length > 0, "Empty token_dst");
11329
- invariant11__default.default(payload.token_dst_blockchain_id.length > 0, "Empty token_dst_blockchain_id");
11330
- invariant11__default.default(payload.amount > 0n, "amount must be greater than 0");
11331
- invariant11__default.default(
11752
+ invariant12__default.default(payload.token_src.length > 0, "Empty token_src");
11753
+ invariant12__default.default(payload.token_src_blockchain_id.length > 0, "Empty token_src_blockchain_id");
11754
+ invariant12__default.default(payload.token_dst.length > 0, "Empty token_dst");
11755
+ invariant12__default.default(payload.token_dst_blockchain_id.length > 0, "Empty token_dst_blockchain_id");
11756
+ invariant12__default.default(payload.amount > 0n, "amount must be greater than 0");
11757
+ invariant12__default.default(
11332
11758
  isValidOriginalAssetAddress(payload.token_src_blockchain_id, payload.token_src),
11333
11759
  "unsupported token_src for src chain"
11334
11760
  );
11335
- invariant11__default.default(
11761
+ invariant12__default.default(
11336
11762
  isValidOriginalAssetAddress(payload.token_dst_blockchain_id, payload.token_dst),
11337
11763
  "unsupported token_dst for dst chain"
11338
11764
  );
11339
11765
  const tokenSrc = getHubAssetInfo(payload.token_src_blockchain_id, payload.token_src)?.asset;
11340
11766
  const tokenDst = getHubAssetInfo(payload.token_dst_blockchain_id, payload.token_dst)?.asset;
11341
- invariant11__default.default(tokenSrc, "hub asset not found for token_src");
11342
- invariant11__default.default(tokenDst, "hub asset not found for token_dst");
11767
+ invariant12__default.default(tokenSrc, "hub asset not found for token_src");
11768
+ invariant12__default.default(tokenDst, "hub asset not found for token_dst");
11343
11769
  try {
11344
11770
  const response = await fetch(`${config.solverApiEndpoint}/quote`, {
11345
11771
  method: "POST",
@@ -11434,7 +11860,7 @@ var SolverApiService = class {
11434
11860
  }
11435
11861
  }
11436
11862
  static async getStatus(request, config) {
11437
- invariant11__default.default(request.intent_tx_hash.length > 0, "Empty intent_tx_hash");
11863
+ invariant12__default.default(request.intent_tx_hash.length > 0, "Empty intent_tx_hash");
11438
11864
  try {
11439
11865
  const response = await fetch(`${config.solverApiEndpoint}/status`, {
11440
11866
  method: "POST",
@@ -12066,19 +12492,19 @@ var SolverService = class {
12066
12492
  fee = this.config.partnerFee,
12067
12493
  raw
12068
12494
  }) {
12069
- invariant11__default.default(
12495
+ invariant12__default.default(
12070
12496
  isValidOriginalAssetAddress(params.srcChain, params.inputToken),
12071
12497
  `Unsupported spoke chain token (params.srcChain): ${params.srcChain}, params.inputToken): ${params.inputToken}`
12072
12498
  );
12073
- invariant11__default.default(
12499
+ invariant12__default.default(
12074
12500
  isValidOriginalAssetAddress(params.dstChain, params.outputToken),
12075
12501
  `Unsupported spoke chain token (params.dstChain): ${params.dstChain}, params.outputToken): ${params.outputToken}`
12076
12502
  );
12077
- invariant11__default.default(isValidSpokeChainId(params.srcChain), `Invalid spoke chain (params.srcChain): ${params.srcChain}`);
12078
- invariant11__default.default(isValidSpokeChainId(params.dstChain), `Invalid spoke chain (params.dstChain): ${params.dstChain}`);
12503
+ invariant12__default.default(isValidSpokeChainId(params.srcChain), `Invalid spoke chain (params.srcChain): ${params.srcChain}`);
12504
+ invariant12__default.default(isValidSpokeChainId(params.dstChain), `Invalid spoke chain (params.dstChain): ${params.dstChain}`);
12079
12505
  try {
12080
12506
  const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
12081
- invariant11__default.default(
12507
+ invariant12__default.default(
12082
12508
  params.srcAddress.toLowerCase() === walletAddress.toLowerCase(),
12083
12509
  "srcAddress must be the same as wallet address"
12084
12510
  );
@@ -12152,8 +12578,8 @@ var SolverService = class {
12152
12578
  */
12153
12579
  async cancelIntent(intent, spokeProvider, raw) {
12154
12580
  try {
12155
- invariant11__default.default(isValidIntentRelayChainId(intent.srcChain), `Invalid intent.srcChain: ${intent.srcChain}`);
12156
- invariant11__default.default(isValidIntentRelayChainId(intent.dstChain), `Invalid intent.dstChain: ${intent.dstChain}`);
12581
+ invariant12__default.default(isValidIntentRelayChainId(intent.srcChain), `Invalid intent.srcChain: ${intent.srcChain}`);
12582
+ invariant12__default.default(isValidIntentRelayChainId(intent.dstChain), `Invalid intent.dstChain: ${intent.dstChain}`);
12157
12583
  const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
12158
12584
  const creatorHubWalletAddress = await deriveUserWalletAddress(spokeProvider, this.hubProvider, walletAddress);
12159
12585
  const calls = [];
@@ -12200,7 +12626,7 @@ var SolverService = class {
12200
12626
  * @returns {bigint} The deadline for the swap as a sum of hub chain block timestamp and deadline offset
12201
12627
  */
12202
12628
  async getSwapDeadline(deadline = DEFAULT_DEADLINE_OFFSET) {
12203
- invariant11__default.default(deadline > 0n, "Deadline must be greater than 0");
12629
+ invariant12__default.default(deadline > 0n, "Deadline must be greater than 0");
12204
12630
  const block = await this.hubProvider.publicClient.getBlock({
12205
12631
  includeTransactions: false,
12206
12632
  blockTag: "latest"
@@ -12678,7 +13104,7 @@ var IcxMigrationService = class {
12678
13104
  migrateData(params) {
12679
13105
  const calls = [];
12680
13106
  const assetConfig = getHubAssetInfo(types.ICON_MAINNET_CHAIN_ID, params.address);
12681
- invariant11__default.default(assetConfig, `hub asset not found for spoke chain token (token): ${params.address}`);
13107
+ invariant12__default.default(assetConfig, `hub asset not found for spoke chain token (token): ${params.address}`);
12682
13108
  calls.push(
12683
13109
  Erc20Service.encodeApprove(assetConfig.asset, this.hubProvider.chainConfig.addresses.icxMigration, params.amount)
12684
13110
  );
@@ -12694,7 +13120,7 @@ var IcxMigrationService = class {
12694
13120
  revertMigration(params) {
12695
13121
  const calls = [];
12696
13122
  const assetConfig = getHubAssetInfo(types.ICON_MAINNET_CHAIN_ID, params.wICX);
12697
- invariant11__default.default(assetConfig, `hub asset not found for spoke chain token (token): ${params.wICX}`);
13123
+ invariant12__default.default(assetConfig, `hub asset not found for spoke chain token (token): ${params.wICX}`);
12698
13124
  calls.push(
12699
13125
  Erc20Service.encodeApprove(
12700
13126
  this.hubProvider.chainConfig.addresses.sodaToken,
@@ -12790,9 +13216,9 @@ var MigrationService = class {
12790
13216
  async isAllowanceValid(params, action, spokeProvider) {
12791
13217
  try {
12792
13218
  if (action === "migrate") {
12793
- invariant11__default.default(params.amount > 0n, "Amount must be greater than 0");
12794
- invariant11__default.default(viem.isAddress(params.to) || isIconAddress(params.to), "To address is required");
12795
- invariant11__default.default(
13219
+ invariant12__default.default(params.amount > 0n, "Amount must be greater than 0");
13220
+ invariant12__default.default(viem.isAddress(params.to) || isIconAddress(params.to), "To address is required");
13221
+ invariant12__default.default(
12796
13222
  isIcxMigrateParams(params) || isBalnMigrateParams(params) || isUnifiedBnUSDMigrateParams(params),
12797
13223
  "Invalid params"
12798
13224
  );
@@ -12818,9 +13244,9 @@ var MigrationService = class {
12818
13244
  };
12819
13245
  }
12820
13246
  if (action === "revert") {
12821
- invariant11__default.default(params.amount > 0n, "Amount must be greater than 0");
12822
- invariant11__default.default(params.to.length > 0, "To address is required");
12823
- invariant11__default.default(isIcxCreateRevertMigrationParams(params) || isUnifiedBnUSDMigrateParams(params), "Invalid params");
13247
+ invariant12__default.default(params.amount > 0n, "Amount must be greater than 0");
13248
+ invariant12__default.default(params.to.length > 0, "To address is required");
13249
+ invariant12__default.default(isIcxCreateRevertMigrationParams(params) || isUnifiedBnUSDMigrateParams(params), "Invalid params");
12824
13250
  if (spokeProvider instanceof SonicSpokeProvider && isIcxCreateRevertMigrationParams(params)) {
12825
13251
  const wallet = await spokeProvider.walletProvider.getWalletAddress();
12826
13252
  const userRouter = await SonicSpokeService.getUserRouter(wallet, spokeProvider);
@@ -12876,9 +13302,9 @@ var MigrationService = class {
12876
13302
  async approve(params, action, spokeProvider, raw) {
12877
13303
  try {
12878
13304
  if (action === "migrate") {
12879
- invariant11__default.default(params.amount > 0n, "Amount must be greater than 0");
12880
- invariant11__default.default(params.to.length > 0, "To address is required");
12881
- invariant11__default.default(isUnifiedBnUSDMigrateParams(params), "Invalid params");
13305
+ invariant12__default.default(params.amount > 0n, "Amount must be greater than 0");
13306
+ invariant12__default.default(params.to.length > 0, "To address is required");
13307
+ invariant12__default.default(isUnifiedBnUSDMigrateParams(params), "Invalid params");
12882
13308
  if (isUnifiedBnUSDMigrateParams(params) && spokeProvider.chainConfig.chain.type === "EVM") {
12883
13309
  const evmSpokeProvider = spokeProvider;
12884
13310
  const result = await Erc20Service.approve(
@@ -12899,9 +13325,9 @@ var MigrationService = class {
12899
13325
  };
12900
13326
  }
12901
13327
  if (action === "revert") {
12902
- invariant11__default.default(params.amount > 0n, "Amount must be greater than 0");
12903
- invariant11__default.default(params.to.length > 0, "To address is required");
12904
- invariant11__default.default(isIcxCreateRevertMigrationParams(params) || isUnifiedBnUSDMigrateParams(params), "Invalid params");
13328
+ invariant12__default.default(params.amount > 0n, "Amount must be greater than 0");
13329
+ invariant12__default.default(params.to.length > 0, "To address is required");
13330
+ invariant12__default.default(isIcxCreateRevertMigrationParams(params) || isUnifiedBnUSDMigrateParams(params), "Invalid params");
12905
13331
  if (spokeProvider instanceof SonicSpokeProvider && isIcxCreateRevertMigrationParams(params)) {
12906
13332
  const wallet = await spokeProvider.walletProvider.getWalletAddress();
12907
13333
  const userRouter = await SonicSpokeService.getUserRouter(wallet, spokeProvider);
@@ -13313,13 +13739,13 @@ var MigrationService = class {
13313
13739
  async createMigratebnUSDIntent(params, spokeProvider, unchecked = false, raw) {
13314
13740
  try {
13315
13741
  if (!unchecked) {
13316
- invariant11__default.default(isValidSpokeChainId(params.srcChainId), "Invalid spoke source chain ID");
13317
- invariant11__default.default(isValidSpokeChainId(params.dstChainId), "Invalid spoke destination chain ID");
13318
- invariant11__default.default(params.srcbnUSD.length > 0, "Legacy bnUSD token address is required");
13319
- invariant11__default.default(params.dstbnUSD.length > 0, "New bnUSD token address is required");
13320
- invariant11__default.default(params.amount > 0, "Amount must be greater than 0");
13321
- invariant11__default.default(params.to.length > 0, "Recipient address is required");
13322
- invariant11__default.default(
13742
+ invariant12__default.default(isValidSpokeChainId(params.srcChainId), "Invalid spoke source chain ID");
13743
+ invariant12__default.default(isValidSpokeChainId(params.dstChainId), "Invalid spoke destination chain ID");
13744
+ invariant12__default.default(params.srcbnUSD.length > 0, "Legacy bnUSD token address is required");
13745
+ invariant12__default.default(params.dstbnUSD.length > 0, "New bnUSD token address is required");
13746
+ invariant12__default.default(params.amount > 0, "Amount must be greater than 0");
13747
+ invariant12__default.default(params.to.length > 0, "Recipient address is required");
13748
+ invariant12__default.default(
13323
13749
  !(isLegacybnUSDToken(params.srcbnUSD) && isLegacybnUSDToken(params.dstbnUSD)),
13324
13750
  "srcbnUSD and dstbnUSD cannot both be legacy bnUSD tokens"
13325
13751
  );
@@ -13327,11 +13753,11 @@ var MigrationService = class {
13327
13753
  let migrationData;
13328
13754
  if (isLegacybnUSDToken(params.srcbnUSD)) {
13329
13755
  if (!unchecked) {
13330
- invariant11__default.default(
13756
+ invariant12__default.default(
13331
13757
  isLegacybnUSDChainId(params.srcChainId),
13332
13758
  "srcChainId must be a legacy bnUSD chain (icon, sui, stellar) if srcbnUSD is a legacy bnUSD token"
13333
13759
  );
13334
- invariant11__default.default(
13760
+ invariant12__default.default(
13335
13761
  isNewbnUSDChainId(params.dstChainId),
13336
13762
  "dstChainId must be a new bnUSD chain (all spoke chains besides Icon) if dstbnUSD is a legacy bnUSD token"
13337
13763
  );
@@ -13346,15 +13772,15 @@ var MigrationService = class {
13346
13772
  });
13347
13773
  } else if (isLegacybnUSDToken(params.dstbnUSD)) {
13348
13774
  if (!unchecked) {
13349
- invariant11__default.default(
13775
+ invariant12__default.default(
13350
13776
  isLegacybnUSDChainId(params.dstChainId),
13351
13777
  "dstChainId must be a legacy bnUSD chain (sui, stellar, icon) if dstbnUSD is a legacy bnUSD token"
13352
13778
  );
13353
- invariant11__default.default(
13779
+ invariant12__default.default(
13354
13780
  isNewbnUSDToken(params.srcbnUSD),
13355
13781
  "srcbnUSD must be a new bnUSD token if dstbnUSD is a legacy bnUSD token"
13356
13782
  );
13357
- invariant11__default.default(
13783
+ invariant12__default.default(
13358
13784
  isNewbnUSDChainId(params.srcChainId),
13359
13785
  "srcChainId must be a new bnUSD chain (all spoke chains besides Icon) if srcbnUSD is a new bnUSD token"
13360
13786
  );
@@ -13427,13 +13853,13 @@ var MigrationService = class {
13427
13853
  */
13428
13854
  async createMigrateIcxToSodaIntent(params, spokeProvider, raw) {
13429
13855
  try {
13430
- invariant11__default.default(params.amount > 0, "Amount must be greater than 0");
13431
- invariant11__default.default(viem.isAddress(params.to), "Recipient address is required");
13432
- invariant11__default.default(
13856
+ invariant12__default.default(params.amount > 0, "Amount must be greater than 0");
13857
+ invariant12__default.default(viem.isAddress(params.to), "Recipient address is required");
13858
+ invariant12__default.default(
13433
13859
  params.address.toLowerCase() === spokeProvider.chainConfig.addresses.wICX.toLowerCase() || params.address.toLowerCase() === spokeProvider.chainConfig.nativeToken.toLowerCase(),
13434
13860
  "Token must be wICX or native ICX token"
13435
13861
  );
13436
- invariant11__default.default(spokeProvider instanceof IconSpokeProvider, "Spoke provider must be an instance of IconSpokeProvider");
13862
+ invariant12__default.default(spokeProvider instanceof IconSpokeProvider, "Spoke provider must be an instance of IconSpokeProvider");
13437
13863
  const availableAmount = await this.icxMigration.getAvailableAmount();
13438
13864
  if (availableAmount < params.amount) {
13439
13865
  throw new Error(
@@ -13545,7 +13971,7 @@ var BnUSDMigrationService = class {
13545
13971
  migrateData(params) {
13546
13972
  const calls = [];
13547
13973
  const assetConfig = getHubAssetInfo(params.srcChainId, params.legacybnUSD);
13548
- invariant11__default.default(assetConfig, `hub asset not found for legacy bnUSD token: ${params.legacybnUSD}`);
13974
+ invariant12__default.default(assetConfig, `hub asset not found for legacy bnUSD token: ${params.legacybnUSD}`);
13549
13975
  const bnUSDVault = getMoneyMarketConfig(types.SONIC_MAINNET_CHAIN_ID).bnUSDVault;
13550
13976
  calls.push(Erc20Service.encodeApprove(assetConfig.asset, assetConfig.vault, params.amount));
13551
13977
  calls.push(EvmVaultTokenService.encodeDeposit(assetConfig.vault, assetConfig.asset, params.amount));
@@ -13557,7 +13983,7 @@ var BnUSDMigrationService = class {
13557
13983
  return encodeContractCalls(calls);
13558
13984
  }
13559
13985
  const dstAssetConfig = getHubAssetInfo(params.dstChainId, params.newbnUSD);
13560
- invariant11__default.default(dstAssetConfig, `hub asset not found for new bnUSD token: ${params.newbnUSD}`);
13986
+ invariant12__default.default(dstAssetConfig, `hub asset not found for new bnUSD token: ${params.newbnUSD}`);
13561
13987
  calls.push(EvmVaultTokenService.encodeWithdraw(bnUSDVault, dstAssetConfig.asset, translatedAmount));
13562
13988
  const translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(
13563
13989
  dstAssetConfig.decimal,
@@ -13590,14 +14016,14 @@ var BnUSDMigrationService = class {
13590
14016
  let decimals = 18;
13591
14017
  if (params.newbnUSD.toLowerCase() !== bnUSDVault.toLowerCase()) {
13592
14018
  const assetConfig = getHubAssetInfo(params.srcChainId, params.newbnUSD);
13593
- invariant11__default.default(assetConfig, `hub asset not found for new bnUSD token: ${params.newbnUSD}`);
14019
+ invariant12__default.default(assetConfig, `hub asset not found for new bnUSD token: ${params.newbnUSD}`);
13594
14020
  decimals = assetConfig.decimal;
13595
14021
  calls.push(Erc20Service.encodeApprove(assetConfig.asset, bnUSDVault, params.amount));
13596
14022
  calls.push(EvmVaultTokenService.encodeDeposit(bnUSDVault, assetConfig.asset, params.amount));
13597
14023
  }
13598
14024
  const translatedAmount = EvmVaultTokenService.translateIncomingDecimals(decimals, params.amount);
13599
14025
  const dstAssetConfig = getHubAssetInfo(params.dstChainId, params.legacybnUSD);
13600
- invariant11__default.default(dstAssetConfig, `hub asset not found for new bnUSD token: ${params.legacybnUSD}`);
14026
+ invariant12__default.default(dstAssetConfig, `hub asset not found for new bnUSD token: ${params.legacybnUSD}`);
13601
14027
  calls.push(EvmVaultTokenService.encodeWithdraw(bnUSDVault, dstAssetConfig.vault, translatedAmount));
13602
14028
  calls.push(EvmVaultTokenService.encodeWithdraw(dstAssetConfig.vault, dstAssetConfig.asset, translatedAmount));
13603
14029
  const translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(
@@ -13680,7 +14106,7 @@ var BalnSwapService = class {
13680
14106
  */
13681
14107
  async swapData(balnToken, params) {
13682
14108
  const assetConfig = getHubAssetInfo(types.ICON_MAINNET_CHAIN_ID, balnToken);
13683
- invariant11__default.default(assetConfig, `hub asset not found for baln token: ${balnToken}`);
14109
+ invariant12__default.default(assetConfig, `hub asset not found for baln token: ${balnToken}`);
13684
14110
  const calls = [];
13685
14111
  calls.push(
13686
14112
  Erc20Service.encodeApprove(assetConfig.asset, this.hubProvider.chainConfig.addresses.balnSwap, params.amount)
@@ -13859,6 +14285,659 @@ var BalnSwapService = class {
13859
14285
  }
13860
14286
  };
13861
14287
 
14288
+ // src/services/backend/BackendApiService.ts
14289
+ var BackendApiService = class {
14290
+ baseURL;
14291
+ defaultHeaders;
14292
+ timeout;
14293
+ constructor(config) {
14294
+ this.baseURL = config?.baseURL ?? DEFAULT_BACKEND_API_ENDPOINT;
14295
+ this.timeout = config?.timeout ?? DEFAULT_BACKEND_API_TIMEOUT;
14296
+ this.defaultHeaders = config?.headers ?? DEFAULT_BACKEND_API_HEADERS;
14297
+ }
14298
+ /**
14299
+ * Make HTTP request using fetch API
14300
+ * @param endpoint - API endpoint path
14301
+ * @param config - Request configuration
14302
+ * @returns Promise<T>
14303
+ */
14304
+ async makeRequest(endpoint, config) {
14305
+ const url = `${this.baseURL}${endpoint}`;
14306
+ const headers = { ...this.defaultHeaders, ...config.headers };
14307
+ const controller = new AbortController();
14308
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
14309
+ try {
14310
+ const response = await fetch(url, {
14311
+ method: config.method,
14312
+ headers,
14313
+ body: config.body,
14314
+ signal: controller.signal
14315
+ });
14316
+ clearTimeout(timeoutId);
14317
+ if (!response.ok) {
14318
+ const errorText = await response.text();
14319
+ throw new Error(`HTTP ${response.status}: ${errorText}`);
14320
+ }
14321
+ const data = await response.json();
14322
+ return data;
14323
+ } catch (error) {
14324
+ clearTimeout(timeoutId);
14325
+ if (error instanceof Error) {
14326
+ if (error.name === "AbortError") {
14327
+ throw new Error(`Request timeout after ${this.timeout}ms`);
14328
+ }
14329
+ console.error("[BackendApiService] Request error:", error.message);
14330
+ throw error;
14331
+ }
14332
+ console.error("[BackendApiService] Unknown error:", error);
14333
+ throw new Error("Unknown error occurred");
14334
+ }
14335
+ }
14336
+ // Intent endpoints
14337
+ /**
14338
+ * Get intent details by transaction hash
14339
+ * @param txHash - Transaction hash
14340
+ * @returns Promise<IntentResponse>
14341
+ */
14342
+ async getIntentByTxHash(txHash) {
14343
+ return this.makeRequest(`/intent/tx/${txHash}`, { method: "GET" });
14344
+ }
14345
+ /**
14346
+ * Get intent details by intent hash
14347
+ * @param intentHash - Intent hash
14348
+ * @returns Promise<IntentResponse>
14349
+ */
14350
+ async getIntentByHash(intentHash) {
14351
+ return this.makeRequest(`/intent/${intentHash}`, { method: "GET" });
14352
+ }
14353
+ // Solver endpoints
14354
+ /**
14355
+ * Get the solver orderbook
14356
+ * @param params - Object containing offset and limit parameters for pagination
14357
+ * @returns Promise<OrderbookResponse>
14358
+ */
14359
+ async getOrderbook(params) {
14360
+ const queryParams = new URLSearchParams();
14361
+ queryParams.append("offset", params.offset);
14362
+ queryParams.append("limit", params.limit);
14363
+ const queryString = queryParams.toString();
14364
+ const endpoint = `/solver/orderbook?${queryString}`;
14365
+ return this.makeRequest(endpoint, { method: "GET" });
14366
+ }
14367
+ // Money Market endpoints
14368
+ /**
14369
+ * Get money market position for a specific user
14370
+ * @param userAddress - User's wallet address
14371
+ * @returns Promise<MoneyMarketPosition>
14372
+ */
14373
+ async getMoneyMarketPosition(userAddress) {
14374
+ return this.makeRequest(`/moneymarket/position/${userAddress}`, { method: "GET" });
14375
+ }
14376
+ /**
14377
+ * Get all money market assets
14378
+ * @returns Promise<MoneyMarketAsset[]>
14379
+ */
14380
+ async getAllMoneyMarketAssets() {
14381
+ return this.makeRequest("/moneymarket/asset/all", { method: "GET" });
14382
+ }
14383
+ /**
14384
+ * Get specific money market asset details
14385
+ * @param reserveAddress - Reserve contract address
14386
+ * @returns Promise<MoneyMarketAsset>
14387
+ */
14388
+ async getMoneyMarketAsset(reserveAddress) {
14389
+ return this.makeRequest(`/moneymarket/asset/${reserveAddress}`, { method: "GET" });
14390
+ }
14391
+ /**
14392
+ * Get borrowers for a specific money market asset
14393
+ * @param reserveAddress - Reserve contract address
14394
+ * @param params - Object containing offset and limit parameters for pagination
14395
+ * @returns Promise<MoneyMarketAssetBorrowers>
14396
+ */
14397
+ async getMoneyMarketAssetBorrowers(reserveAddress, params) {
14398
+ const queryParams = new URLSearchParams();
14399
+ queryParams.append("offset", params.offset);
14400
+ queryParams.append("limit", params.limit);
14401
+ const queryString = queryParams.toString();
14402
+ const endpoint = `/moneymarket/asset/${reserveAddress}/borrowers?${queryString}`;
14403
+ return this.makeRequest(endpoint, { method: "GET" });
14404
+ }
14405
+ /**
14406
+ * Get suppliers for a specific money market asset
14407
+ * @param reserveAddress - Reserve contract address
14408
+ * @param params - Object containing offset and limit parameters for pagination
14409
+ * @returns Promise<MoneyMarketAssetSuppliers>
14410
+ */
14411
+ async getMoneyMarketAssetSuppliers(reserveAddress, params) {
14412
+ const queryParams = new URLSearchParams();
14413
+ queryParams.append("offset", params.offset);
14414
+ queryParams.append("limit", params.limit);
14415
+ const queryString = queryParams.toString();
14416
+ const endpoint = `/moneymarket/asset/${reserveAddress}/suppliers?${queryString}`;
14417
+ return this.makeRequest(endpoint, { method: "GET" });
14418
+ }
14419
+ /**
14420
+ * Get all money market borrowers
14421
+ * @param params - Object containing offset and limit parameters for pagination
14422
+ * @returns Promise<MoneyMarketBorrowers>
14423
+ */
14424
+ async getAllMoneyMarketBorrowers(params) {
14425
+ const queryParams = new URLSearchParams();
14426
+ queryParams.append("offset", params.offset);
14427
+ queryParams.append("limit", params.limit);
14428
+ const queryString = queryParams.toString();
14429
+ const endpoint = `/moneymarket/borrowers?${queryString}`;
14430
+ return this.makeRequest(endpoint, { method: "GET" });
14431
+ }
14432
+ /**
14433
+ * Set custom headers for API requests
14434
+ * @param headers - Object containing header key-value pairs
14435
+ */
14436
+ setHeaders(headers) {
14437
+ Object.entries(headers).forEach(([key, value]) => {
14438
+ this.defaultHeaders[key] = value;
14439
+ });
14440
+ }
14441
+ /**
14442
+ * Get the current base URL
14443
+ * @returns string
14444
+ */
14445
+ getBaseURL() {
14446
+ return this.baseURL;
14447
+ }
14448
+ };
14449
+ var BridgeService = class {
14450
+ hubProvider;
14451
+ relayerApiEndpoint;
14452
+ config;
14453
+ constructor(hubProvider, relayerApiEndpoint, config = void 0) {
14454
+ this.config = config ? config : { partnerFee: void 0 };
14455
+ this.hubProvider = hubProvider;
14456
+ this.relayerApiEndpoint = relayerApiEndpoint;
14457
+ }
14458
+ /**
14459
+ * Get the fee for a given input amount
14460
+ * @param {bigint} inputAmount - The amount of input tokens
14461
+ * @returns {Promise<bigint>} The fee amount (denominated in input tokens)
14462
+ *
14463
+ * @example
14464
+ * const fee: bigint = await sodax.bridge.getFee(1000000000000000n);
14465
+ * console.log('Fee:', fee);
14466
+ */
14467
+ getFee(inputAmount) {
14468
+ if (!this.config.partnerFee) {
14469
+ return 0n;
14470
+ }
14471
+ return calculateFeeAmount(inputAmount, this.config.partnerFee);
14472
+ }
14473
+ /**
14474
+ * Check if allowance is valid for the bridge transaction
14475
+ * @param params - The bridge parameters
14476
+ * @param spokeProvider - The spoke provider
14477
+ * @returns {Promise<Result<boolean, BridgeError<'ALLOWANCE_CHECK_FAILED'>>>}
14478
+ */
14479
+ async isAllowanceValid({
14480
+ params,
14481
+ spokeProvider
14482
+ }) {
14483
+ try {
14484
+ invariant12__default.default(params.amount > 0n, "Amount must be greater than 0");
14485
+ invariant12__default.default(params.srcAsset.length > 0, "Source asset is required");
14486
+ const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
14487
+ if (spokeProvider instanceof EvmSpokeProvider) {
14488
+ invariant12__default.default(viem.isAddress(params.srcAsset), "Invalid source asset address for EVM chain");
14489
+ const allowanceResult = await Erc20Service.isAllowanceValid(
14490
+ params.srcAsset,
14491
+ params.amount,
14492
+ walletAddress,
14493
+ spokeProvider.chainConfig.addresses.assetManager,
14494
+ spokeProvider
14495
+ );
14496
+ if (!allowanceResult.ok) {
14497
+ return {
14498
+ ok: false,
14499
+ error: {
14500
+ code: "ALLOWANCE_CHECK_FAILED",
14501
+ error: allowanceResult.error
14502
+ }
14503
+ };
14504
+ }
14505
+ return {
14506
+ ok: true,
14507
+ value: allowanceResult.value
14508
+ };
14509
+ }
14510
+ if (spokeProvider instanceof SonicSpokeProvider) {
14511
+ invariant12__default.default(viem.isAddress(params.srcAsset), "Invalid source asset address for Sonic chain");
14512
+ const userRouter = await SonicSpokeService.getUserRouter(walletAddress, spokeProvider);
14513
+ const allowanceResult = await Erc20Service.isAllowanceValid(
14514
+ params.srcAsset,
14515
+ params.amount,
14516
+ walletAddress,
14517
+ userRouter,
14518
+ spokeProvider
14519
+ );
14520
+ if (!allowanceResult.ok) {
14521
+ return {
14522
+ ok: false,
14523
+ error: {
14524
+ code: "ALLOWANCE_CHECK_FAILED",
14525
+ error: allowanceResult.error
14526
+ }
14527
+ };
14528
+ }
14529
+ return {
14530
+ ok: true,
14531
+ value: allowanceResult.value
14532
+ };
14533
+ }
14534
+ return {
14535
+ ok: true,
14536
+ value: true
14537
+ };
14538
+ } catch (error) {
14539
+ return {
14540
+ ok: false,
14541
+ error: {
14542
+ code: "ALLOWANCE_CHECK_FAILED",
14543
+ error
14544
+ }
14545
+ };
14546
+ }
14547
+ }
14548
+ /**
14549
+ * Approve token spending for the bridge transaction
14550
+ * @param params - The bridge parameters
14551
+ * @param spokeProvider - The spoke provider
14552
+ * @param raw - Whether to return raw transaction data
14553
+ * @returns Promise<Result<TxReturnType<S, R>, BridgeError<'APPROVAL_FAILED'>>>
14554
+ */
14555
+ async approve({
14556
+ params,
14557
+ spokeProvider,
14558
+ raw
14559
+ }) {
14560
+ try {
14561
+ invariant12__default.default(params.amount > 0n, "Amount must be greater than 0");
14562
+ invariant12__default.default(params.srcAsset.length > 0, "Source asset is required");
14563
+ const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
14564
+ if (spokeProvider instanceof EvmSpokeProvider) {
14565
+ invariant12__default.default(viem.isAddress(params.srcAsset), "Invalid source asset address for EVM chain");
14566
+ const result = await Erc20Service.approve(
14567
+ params.srcAsset,
14568
+ params.amount,
14569
+ spokeProvider.chainConfig.addresses.assetManager,
14570
+ spokeProvider,
14571
+ raw
14572
+ );
14573
+ return {
14574
+ ok: true,
14575
+ value: result
14576
+ };
14577
+ }
14578
+ if (spokeProvider instanceof SonicSpokeProvider) {
14579
+ invariant12__default.default(viem.isAddress(params.srcAsset), "Invalid source asset address for Sonic chain");
14580
+ const userRouter = await SonicSpokeService.getUserRouter(
14581
+ walletAddress,
14582
+ spokeProvider
14583
+ );
14584
+ const result = await Erc20Service.approve(params.srcAsset, params.amount, userRouter, spokeProvider, raw);
14585
+ return {
14586
+ ok: true,
14587
+ value: result
14588
+ };
14589
+ }
14590
+ return {
14591
+ ok: false,
14592
+ error: {
14593
+ code: "APPROVAL_FAILED",
14594
+ error: new Error("Approval only supported for EVM spoke chains")
14595
+ }
14596
+ };
14597
+ } catch (error) {
14598
+ console.error(error);
14599
+ return {
14600
+ ok: false,
14601
+ error: {
14602
+ code: "APPROVAL_FAILED",
14603
+ error
14604
+ }
14605
+ };
14606
+ }
14607
+ }
14608
+ /**
14609
+ * Execute a bridge transaction to transfer tokens from one chain to another
14610
+ * @param params - The bridge parameters including source/destination chains, assets, and recipient
14611
+ * @param spokeProvider - The spoke provider for the source chain
14612
+ * @param timeout - The timeout in milliseconds for the transaction. Default is 60 seconds.
14613
+ * @returns {Promise<Result<[SpokeTxHash, HubTxHash], BridgeError<BridgeErrorCode>>>} - Returns the transaction hashes for both spoke and hub chains or error
14614
+ *
14615
+ * @example
14616
+ * const result = await sodax.bridge.bridge(
14617
+ * {
14618
+ * srcChainId: '0x2105.base',
14619
+ * srcAsset: '0x...', // Address of the source token
14620
+ * amount: 1000n, // Amount to bridge (in token decimals)
14621
+ * dstChainId: '0x89.polygon',
14622
+ * dstAsset: '0x...', // Address of the destination token
14623
+ * recipient: '0x...', // Recipient address on destination chain
14624
+ * partnerFee: { address: '0x...', percentage: 0.1 } // Optional partner fee. Partner fees and denominated in vault token decimals (18)
14625
+ * },
14626
+ * spokeProvider,
14627
+ * 30000 // Optional timeout in milliseconds (default: 60000, i.e. 60 seconds)
14628
+ * );
14629
+ *
14630
+ * if (!result.ok) {
14631
+ * // Handle error
14632
+ * }
14633
+ *
14634
+ * const [
14635
+ * spokeTxHash, // transaction hash on the source chain
14636
+ * hubTxHash, // transaction hash on the hub chain
14637
+ * ] = result.value;
14638
+ * console.log('Bridge transaction hashes:', { spokeTxHash, hubTxHash });
14639
+ */
14640
+ async bridge({
14641
+ params,
14642
+ spokeProvider,
14643
+ fee = this.config.partnerFee,
14644
+ timeout = DEFAULT_RELAY_TX_TIMEOUT
14645
+ }) {
14646
+ try {
14647
+ const txResult = await this.createBridgeIntent({ params, spokeProvider, fee, raw: false });
14648
+ if (!txResult.ok) {
14649
+ return txResult;
14650
+ }
14651
+ const packetResult = await relayTxAndWaitPacket(
14652
+ txResult.value,
14653
+ spokeProvider instanceof SolanaSpokeProvider ? txResult.data : void 0,
14654
+ spokeProvider,
14655
+ this.relayerApiEndpoint,
14656
+ timeout
14657
+ );
14658
+ if (!packetResult.ok) {
14659
+ return {
14660
+ ok: false,
14661
+ error: {
14662
+ code: packetResult.error.code,
14663
+ error: packetResult.error
14664
+ }
14665
+ };
14666
+ }
14667
+ return { ok: true, value: [txResult.value, packetResult.value.dst_tx_hash] };
14668
+ } catch (error) {
14669
+ return {
14670
+ ok: false,
14671
+ error: {
14672
+ code: "BRIDGE_FAILED",
14673
+ error
14674
+ }
14675
+ };
14676
+ }
14677
+ }
14678
+ /**
14679
+ * Create bridge intent only (without relaying to hub)
14680
+ * NOTE: This method only executes the transaction on the spoke chain and creates the bridge intent
14681
+ * In order to successfully bridge tokens, you need to:
14682
+ * 1. Check if the allowance is sufficient using isAllowanceValid
14683
+ * 2. Approve the appropriate contract to spend the tokens using approve
14684
+ * 3. Create the bridge intent using this method
14685
+ * 4. Relay the transaction to the hub and await completion using the bridge method
14686
+ *
14687
+ * @param params - The bridge parameters including source/destination chains, assets, and recipient
14688
+ * @param spokeProvider - The spoke provider for the source chain
14689
+ * @param raw - Whether to return the raw transaction data
14690
+ * @returns {Promise<Result<TxReturnType<S, R>, BridgeError<BridgeErrorCode>>>} - Returns the transaction result
14691
+ *
14692
+ * @example
14693
+ * const bridgeService = new BridgeService(hubProvider, relayerApiEndpoint);
14694
+ * const result = await sodax.bridge.createBridgeIntent(
14695
+ * {
14696
+ * srcChainId: 'ethereum',
14697
+ * srcAsset: "0x123...", // source token address
14698
+ * amount: 1000000000000000000n, // 1 token in wei
14699
+ * dstChainId: 'polygon',
14700
+ * dstAsset: "0x456...", // destination token address
14701
+ * recipient: "0x789..." // recipient address
14702
+ * },
14703
+ * spokeProvider,
14704
+ * raw // Optional: true = return the raw transaction data, false = execute and return the transaction hash (default: false)
14705
+ * );
14706
+ *
14707
+ * if (result.ok) {
14708
+ * const txHash = result.value;
14709
+ * console.log('Bridge intent transaction hash:', txHash);
14710
+ * } else {
14711
+ * console.error('Bridge intent creation failed:', result.error);
14712
+ * }
14713
+ */
14714
+ async createBridgeIntent({
14715
+ params,
14716
+ spokeProvider,
14717
+ fee = this.config.partnerFee,
14718
+ raw
14719
+ }) {
14720
+ try {
14721
+ invariant12__default.default(params.amount > 0n, "Amount must be greater than 0");
14722
+ const srcAssetInfo = getHubAssetInfo(params.srcChainId, params.srcAsset);
14723
+ const dstAssetInfo = getHubAssetInfo(params.dstChainId, params.dstAsset);
14724
+ invariant12__default.default(srcAssetInfo, `Unsupported spoke chain (${params.srcChainId}) token: ${params.srcAsset}`);
14725
+ invariant12__default.default(dstAssetInfo, `Unsupported spoke chain (${params.dstChainId}) token: ${params.dstAsset}`);
14726
+ const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
14727
+ const hubWallet = await WalletAbstractionService.getUserAbstractedWalletAddress(
14728
+ walletAddress,
14729
+ spokeProvider,
14730
+ this.hubProvider
14731
+ );
14732
+ const data = this.buildBridgeData(params, srcAssetInfo, dstAssetInfo, fee);
14733
+ const txResult = await SpokeService.deposit(
14734
+ {
14735
+ from: walletAddress,
14736
+ to: hubWallet,
14737
+ token: params.srcAsset,
14738
+ amount: params.amount,
14739
+ data
14740
+ },
14741
+ spokeProvider,
14742
+ this.hubProvider,
14743
+ raw
14744
+ );
14745
+ return {
14746
+ ok: true,
14747
+ value: txResult,
14748
+ data: {
14749
+ address: hubWallet,
14750
+ payload: data
14751
+ }
14752
+ };
14753
+ } catch (error) {
14754
+ console.error(error);
14755
+ return {
14756
+ ok: false,
14757
+ error: {
14758
+ code: "CREATE_BRIDGE_INTENT_FAILED",
14759
+ error
14760
+ }
14761
+ };
14762
+ }
14763
+ }
14764
+ /**
14765
+ * Build the bridge transaction data for executing the bridge operation on the hub
14766
+ * @param params - The create bridge intent parameters
14767
+ * @param srcAssetInfo - The source asset information
14768
+ * @param dstAssetInfo - The destination asset information
14769
+ * @returns Hex - The encoded contract calls for the bridge operation
14770
+ */
14771
+ buildBridgeData(params, srcAssetInfo, dstAssetInfo, partnerFee) {
14772
+ const calls = [];
14773
+ let translatedAmount = params.amount;
14774
+ let srcVault = params.srcAsset;
14775
+ if (!isValidVault(srcAssetInfo.asset)) {
14776
+ calls.push(Erc20Service.encodeApprove(srcAssetInfo.asset, srcAssetInfo.vault, params.amount));
14777
+ calls.push(EvmVaultTokenService.encodeDeposit(srcAssetInfo.vault, srcAssetInfo.asset, params.amount));
14778
+ translatedAmount = EvmVaultTokenService.translateIncomingDecimals(srcAssetInfo.decimal, params.amount);
14779
+ srcVault = srcAssetInfo.vault;
14780
+ }
14781
+ const feeAmount = calculateFeeAmount(translatedAmount, partnerFee);
14782
+ if (partnerFee && feeAmount > 0n) {
14783
+ calls.push(Erc20Service.encodeTransfer(srcVault, partnerFee.address, feeAmount));
14784
+ }
14785
+ const withdrawAmount = translatedAmount - feeAmount;
14786
+ let translatedWithdrawAmount = withdrawAmount;
14787
+ if (!isValidVault(dstAssetInfo.asset)) {
14788
+ calls.push(EvmVaultTokenService.encodeWithdraw(dstAssetInfo.vault, dstAssetInfo.asset, withdrawAmount));
14789
+ translatedWithdrawAmount = EvmVaultTokenService.translateOutgoingDecimals(dstAssetInfo.decimal, withdrawAmount);
14790
+ }
14791
+ const encodedRecipientAddress = encodeAddress(params.dstChainId, params.recipient);
14792
+ if (params.dstChainId === this.hubProvider.chainConfig.chain.id) {
14793
+ calls.push(Erc20Service.encodeTransfer(dstAssetInfo.asset, encodedRecipientAddress, translatedWithdrawAmount));
14794
+ } else {
14795
+ invariant12__default.default(dstAssetInfo, `Unsupported hub chain (${params.dstChainId}) token: ${params.dstAsset}`);
14796
+ calls.push(
14797
+ EvmAssetManagerService.encodeTransfer(
14798
+ dstAssetInfo.asset,
14799
+ encodedRecipientAddress,
14800
+ translatedWithdrawAmount,
14801
+ this.hubProvider.chainConfig.addresses.assetManager
14802
+ )
14803
+ );
14804
+ }
14805
+ return encodeContractCalls(calls);
14806
+ }
14807
+ /**
14808
+ * Retrieves the deposited token balance held by the asset manager on a spoke chain.
14809
+ * This balance represents the available liquidity for bridging operations and is used to verify
14810
+ * that the target chain has sufficient funds to complete a bridge transaction.
14811
+ *
14812
+ * @param spokeProvider - The spoke provider instance
14813
+ * @param token - The token address to query the balance for
14814
+ * @returns {Promise<bigint>} - The token balance as a bigint value
14815
+ */
14816
+ async getBridgeableAmount(from, to) {
14817
+ try {
14818
+ const fromHubAsset = getHubAssetInfo(from.xChainId, from.address);
14819
+ const toHubAsset = getHubAssetInfo(to.xChainId, to.address);
14820
+ invariant12__default.default(fromHubAsset, `Hub asset not found for token ${from.address} on chain ${from.xChainId}`);
14821
+ invariant12__default.default(toHubAsset, `Hub asset not found for token ${to.address} on chain ${to.xChainId}`);
14822
+ const [depositTokenInfo, reserves] = await Promise.all([
14823
+ EvmVaultTokenService.getTokenInfo(fromHubAsset.vault, fromHubAsset.asset, this.hubProvider.publicClient),
14824
+ EvmVaultTokenService.getVaultReserves(toHubAsset.vault, this.hubProvider.publicClient)
14825
+ ]);
14826
+ if (!isValidVault(fromHubAsset.asset) && isValidVault(toHubAsset.asset)) {
14827
+ const fromTokenIndex2 = reserves.tokens.findIndex((t) => t.toLowerCase() === fromHubAsset.asset.toLowerCase());
14828
+ invariant12__default.default(
14829
+ fromTokenIndex2 !== -1,
14830
+ `Token ${fromHubAsset.asset} not found in the vault reserves for chain ${from.xChainId}`
14831
+ );
14832
+ const fromTokenDepositedAmount2 = reserves.balances[fromTokenIndex2] ?? 0n;
14833
+ const availableDeposit2 = depositTokenInfo.maxDeposit - fromTokenDepositedAmount2;
14834
+ return {
14835
+ ok: true,
14836
+ value: availableDeposit2
14837
+ };
14838
+ }
14839
+ if (isValidVault(fromHubAsset.asset)) {
14840
+ const tokenIndex2 = reserves.tokens.findIndex((t) => t.toLowerCase() === toHubAsset.asset.toLowerCase());
14841
+ invariant12__default.default(
14842
+ tokenIndex2 !== -1,
14843
+ `Token ${toHubAsset.asset} not found in the vault reserves for chain ${to.xChainId}`
14844
+ );
14845
+ const assetManagerBalance2 = reserves.balances[tokenIndex2] ?? 0n;
14846
+ return {
14847
+ ok: true,
14848
+ value: assetManagerBalance2
14849
+ };
14850
+ }
14851
+ const fromTokenIndex = reserves.tokens.findIndex((t) => t.toLowerCase() === fromHubAsset.asset.toLowerCase());
14852
+ invariant12__default.default(
14853
+ fromTokenIndex !== -1,
14854
+ `Token ${fromHubAsset.asset} not found in the vault reserves for chain ${from.xChainId}`
14855
+ );
14856
+ const fromTokenDepositedAmount = reserves.balances[fromTokenIndex] ?? 0n;
14857
+ const availableDeposit = depositTokenInfo.maxDeposit - fromTokenDepositedAmount;
14858
+ const tokenIndex = reserves.tokens.findIndex((t) => t.toLowerCase() === toHubAsset.asset.toLowerCase());
14859
+ invariant12__default.default(
14860
+ tokenIndex !== -1,
14861
+ `Token ${toHubAsset.asset} not found in the vault reserves for chain ${to.xChainId}`
14862
+ );
14863
+ const assetManagerBalance = reserves.balances[tokenIndex] ?? 0n;
14864
+ return {
14865
+ ok: true,
14866
+ value: availableDeposit < assetManagerBalance ? availableDeposit : assetManagerBalance
14867
+ };
14868
+ } catch (error) {
14869
+ console.error(error);
14870
+ return {
14871
+ ok: false,
14872
+ error
14873
+ };
14874
+ }
14875
+ }
14876
+ /**
14877
+ * Check if two assets on different chains are bridgeable
14878
+ * Two assets are bridgeable if they share the same vault on the hub chain
14879
+ * @param from - The source X token
14880
+ * @param to - The destination X token
14881
+ * @param unchecked - Whether to skip the chain ID validation
14882
+ * @returns boolean - true if assets are bridgeable, false otherwise
14883
+ */
14884
+ isBridgeable({
14885
+ from,
14886
+ to,
14887
+ unchecked = false
14888
+ }) {
14889
+ try {
14890
+ if (!unchecked) {
14891
+ invariant12__default.default(isValidSpokeChainId(from.xChainId), `Invalid spoke chain (${from.xChainId})`);
14892
+ invariant12__default.default(isValidSpokeChainId(to.xChainId), `Invalid spoke chain (${to.xChainId})`);
14893
+ }
14894
+ const srcAssetInfo = getHubAssetInfo(from.xChainId, from.address);
14895
+ const dstAssetInfo = getHubAssetInfo(to.xChainId, to.address);
14896
+ invariant12__default.default(srcAssetInfo, `Hub asset not found for token ${from.address} on chain ${from.xChainId}`);
14897
+ invariant12__default.default(dstAssetInfo, `Hub asset not found for token ${to.address} on chain ${to.xChainId}`);
14898
+ return srcAssetInfo.vault.toLowerCase() === dstAssetInfo.vault.toLowerCase();
14899
+ } catch (error) {
14900
+ console.error(error);
14901
+ return false;
14902
+ }
14903
+ }
14904
+ /**
14905
+ * Get all bridgeable tokens from a source token to a destination chain
14906
+ * @param from - The source chain ID
14907
+ * @param to - The destination chain ID
14908
+ * @param token - The source token address
14909
+ * @returns XToken[] - Array of bridgeable tokens on the destination chain
14910
+ */
14911
+ getBridgeableTokens(from, to, token) {
14912
+ try {
14913
+ const srcAssetInfo = getHubAssetInfo(from, token);
14914
+ invariant12__default.default(srcAssetInfo, `Hub asset not found for token ${token} on chain ${from}`);
14915
+ return {
14916
+ ok: true,
14917
+ value: this.filterTokensWithSameVault(spokeChainConfig[to].supportedTokens, to, srcAssetInfo)
14918
+ };
14919
+ } catch (error) {
14920
+ return {
14921
+ ok: false,
14922
+ error
14923
+ };
14924
+ }
14925
+ }
14926
+ filterTokensWithSameVault(tokens, to, srcAssetInfo) {
14927
+ const bridgeableTokens = [];
14928
+ for (const token of Object.values(tokens)) {
14929
+ const dstAssetInfo = getHubAssetInfo(to, token.address);
14930
+ if (dstAssetInfo && srcAssetInfo && dstAssetInfo.vault.toLowerCase() === srcAssetInfo.vault.toLowerCase()) {
14931
+ bridgeableTokens.push({
14932
+ ...token,
14933
+ xChainId: to
14934
+ });
14935
+ }
14936
+ }
14937
+ return bridgeableTokens;
14938
+ }
14939
+ };
14940
+
13862
14941
  // src/entities/Sodax.ts
13863
14942
  var Sodax = class {
13864
14943
  config;
@@ -13868,6 +14947,10 @@ var Sodax = class {
13868
14947
  // Money Market service enabling cross-chain lending and borrowing
13869
14948
  migration;
13870
14949
  // ICX migration service enabling ICX migration to SODA
14950
+ backendApiService;
14951
+ // backend API service enabling backend API endpoints
14952
+ bridge;
14953
+ // Bridge service enabling cross-chain transfers
13871
14954
  hubProvider;
13872
14955
  // hub provider for the hub chain (e.g. Sonic mainnet)
13873
14956
  relayerApiEndpoint;
@@ -13879,6 +14962,8 @@ var Sodax = class {
13879
14962
  this.solver = config && config.solver ? new SolverService(config.solver, this.hubProvider, this.relayerApiEndpoint) : new SolverService(void 0, this.hubProvider, this.relayerApiEndpoint);
13880
14963
  this.moneyMarket = config && config.moneyMarket ? new MoneyMarketService(config.moneyMarket, this.hubProvider, this.relayerApiEndpoint) : new MoneyMarketService(void 0, this.hubProvider, this.relayerApiEndpoint);
13881
14964
  this.migration = config && config.migration ? new MigrationService(this.hubProvider, config.migration) : new MigrationService(this.hubProvider);
14965
+ this.bridge = config && config.bridge ? new BridgeService(this.hubProvider, this.relayerApiEndpoint, config.bridge) : new BridgeService(this.hubProvider, this.relayerApiEndpoint);
14966
+ this.backendApiService = new BackendApiService(config?.backendApiConfig);
13882
14967
  }
13883
14968
  };
13884
14969
 
@@ -13945,16 +15030,16 @@ function calculateFeeAmount(inputAmount, fee) {
13945
15030
  if (!fee) {
13946
15031
  return 0n;
13947
15032
  }
13948
- invariant11__default.default(inputAmount > 0n, "Input amount must be greater than 0");
15033
+ invariant12__default.default(inputAmount > 0n, "Input amount must be greater than 0");
13949
15034
  let feeAmount = 0n;
13950
15035
  if (isPartnerFeeAmount(fee)) {
13951
- invariant11__default.default(
15036
+ invariant12__default.default(
13952
15037
  fee.amount >= 0 && fee.amount <= inputAmount,
13953
15038
  `Fee amount must be greater than 0 and less than or equal to the input amount: ${fee.amount}`
13954
15039
  );
13955
15040
  feeAmount = fee.amount;
13956
15041
  } else if (isPartnerFeePercentage(fee)) {
13957
- invariant11__default.default(
15042
+ invariant12__default.default(
13958
15043
  fee.percentage >= 0 && fee.percentage <= FEE_PERCENTAGE_SCALE,
13959
15044
  `Fee percentage must be between 0 and ${FEE_PERCENTAGE_SCALE}}`
13960
15045
  );
@@ -13963,8 +15048,8 @@ function calculateFeeAmount(inputAmount, fee) {
13963
15048
  return feeAmount;
13964
15049
  }
13965
15050
  function adjustAmountByFee(amount, fee, quoteType) {
13966
- invariant11__default.default(amount > 0n, "Amount must be greater than 0");
13967
- invariant11__default.default(quoteType === "exact_input" || quoteType === "exact_output", "Invalid quote type");
15051
+ invariant12__default.default(amount > 0n, "Amount must be greater than 0");
15052
+ invariant12__default.default(quoteType === "exact_input" || quoteType === "exact_output", "Invalid quote type");
13968
15053
  if (quoteType === "exact_input") {
13969
15054
  return amount - calculateFeeAmount(amount, fee);
13970
15055
  }
@@ -15539,9 +16624,9 @@ var MoneyMarketService = class _MoneyMarketService {
15539
16624
  */
15540
16625
  async isAllowanceValid(params, spokeProvider) {
15541
16626
  try {
15542
- invariant11__default.default(params.amount > 0n, "Amount must be greater than 0");
15543
- invariant11__default.default(params.token.length > 0, "Token is required");
15544
- invariant11__default.default(
16627
+ invariant12__default.default(params.amount > 0n, "Amount must be greater than 0");
16628
+ invariant12__default.default(params.token.length > 0, "Token is required");
16629
+ invariant12__default.default(
15545
16630
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
15546
16631
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
15547
16632
  );
@@ -15636,19 +16721,19 @@ var MoneyMarketService = class _MoneyMarketService {
15636
16721
  */
15637
16722
  async approve(params, spokeProvider, raw) {
15638
16723
  try {
15639
- invariant11__default.default(params.amount > 0n, "Amount must be greater than 0");
15640
- invariant11__default.default(params.token.length > 0, "Token is required");
15641
- invariant11__default.default(
16724
+ invariant12__default.default(params.amount > 0n, "Amount must be greater than 0");
16725
+ invariant12__default.default(params.token.length > 0, "Token is required");
16726
+ invariant12__default.default(
15642
16727
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
15643
16728
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
15644
16729
  );
15645
16730
  const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
15646
16731
  if (spokeProvider instanceof EvmSpokeProvider) {
15647
- invariant11__default.default(
16732
+ invariant12__default.default(
15648
16733
  params.action === "supply" || params.action === "repay",
15649
16734
  "Invalid action (only supply and repay are supported on evm)"
15650
16735
  );
15651
- invariant11__default.default(viem.isAddress(params.token), "Invalid token address");
16736
+ invariant12__default.default(viem.isAddress(params.token), "Invalid token address");
15652
16737
  const result = await Erc20Service.approve(
15653
16738
  params.token,
15654
16739
  params.amount,
@@ -15662,11 +16747,11 @@ var MoneyMarketService = class _MoneyMarketService {
15662
16747
  };
15663
16748
  }
15664
16749
  if (spokeProvider instanceof SonicSpokeProvider && spokeProvider.chainConfig.chain.id === this.hubProvider.chainConfig.chain.id) {
15665
- invariant11__default.default(
16750
+ invariant12__default.default(
15666
16751
  params.action === "withdraw" || params.action === "borrow" || params.action === "supply" || params.action === "repay",
15667
16752
  "Invalid action (only withdraw, borrow, supply and repay are supported on sonic)"
15668
16753
  );
15669
- invariant11__default.default(viem.isAddress(params.token), "Invalid token address");
16754
+ invariant12__default.default(viem.isAddress(params.token), "Invalid token address");
15670
16755
  if (params.action === "withdraw") {
15671
16756
  const withdrawInfo = await SonicSpokeService.getWithdrawInfo(
15672
16757
  params.token,
@@ -15838,10 +16923,10 @@ var MoneyMarketService = class _MoneyMarketService {
15838
16923
  */
15839
16924
  async createSupplyIntent(params, spokeProvider, raw) {
15840
16925
  try {
15841
- invariant11__default.default(params.action === "supply", "Invalid action");
15842
- invariant11__default.default(params.token.length > 0, "Token is required");
15843
- invariant11__default.default(params.amount > 0n, "Amount must be greater than 0");
15844
- invariant11__default.default(
16926
+ invariant12__default.default(params.action === "supply", "Invalid action");
16927
+ invariant12__default.default(params.token.length > 0, "Token is required");
16928
+ invariant12__default.default(params.amount > 0n, "Amount must be greater than 0");
16929
+ invariant12__default.default(
15845
16930
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
15846
16931
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
15847
16932
  );
@@ -16003,10 +17088,10 @@ var MoneyMarketService = class _MoneyMarketService {
16003
17088
  * }
16004
17089
  */
16005
17090
  async createBorrowIntent(params, spokeProvider, raw) {
16006
- invariant11__default.default(params.action === "borrow", "Invalid action");
16007
- invariant11__default.default(params.token.length > 0, "Token is required");
16008
- invariant11__default.default(params.amount > 0n, "Amount must be greater than 0");
16009
- invariant11__default.default(
17091
+ invariant12__default.default(params.action === "borrow", "Invalid action");
17092
+ invariant12__default.default(params.token.length > 0, "Token is required");
17093
+ invariant12__default.default(params.amount > 0n, "Amount must be greater than 0");
17094
+ invariant12__default.default(
16010
17095
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
16011
17096
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
16012
17097
  );
@@ -16139,10 +17224,10 @@ var MoneyMarketService = class _MoneyMarketService {
16139
17224
  * }
16140
17225
  */
16141
17226
  async createWithdrawIntent(params, spokeProvider, raw) {
16142
- invariant11__default.default(params.action === "withdraw", "Invalid action");
16143
- invariant11__default.default(params.token.length > 0, "Token is required");
16144
- invariant11__default.default(params.amount > 0n, "Amount must be greater than 0");
16145
- invariant11__default.default(
17227
+ invariant12__default.default(params.action === "withdraw", "Invalid action");
17228
+ invariant12__default.default(params.token.length > 0, "Token is required");
17229
+ invariant12__default.default(params.amount > 0n, "Amount must be greater than 0");
17230
+ invariant12__default.default(
16146
17231
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
16147
17232
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
16148
17233
  );
@@ -16290,10 +17375,10 @@ var MoneyMarketService = class _MoneyMarketService {
16290
17375
  * }
16291
17376
  */
16292
17377
  async createRepayIntent(params, spokeProvider, raw) {
16293
- invariant11__default.default(params.action === "repay", "Invalid action");
16294
- invariant11__default.default(params.token.length > 0, "Token is required");
16295
- invariant11__default.default(params.amount > 0n, "Amount must be greater than 0");
16296
- invariant11__default.default(
17378
+ invariant12__default.default(params.action === "repay", "Invalid action");
17379
+ invariant12__default.default(params.token.length > 0, "Token is required");
17380
+ invariant12__default.default(params.amount > 0n, "Amount must be greater than 0");
17381
+ invariant12__default.default(
16297
17382
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
16298
17383
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
16299
17384
  );
@@ -16346,7 +17431,7 @@ var MoneyMarketService = class _MoneyMarketService {
16346
17431
  buildSupplyData(token, to, amount, spokeChainId) {
16347
17432
  const calls = [];
16348
17433
  const assetConfig = getHubAssetInfo(spokeChainId, token);
16349
- invariant11__default.default(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);
17434
+ invariant12__default.default(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);
16350
17435
  let assetAddress = assetConfig.asset;
16351
17436
  const vaultAddress = assetConfig.vault;
16352
17437
  const lendingPool = this.config.lendingPool;
@@ -16377,13 +17462,13 @@ var MoneyMarketService = class _MoneyMarketService {
16377
17462
  * @returns {Hex} The transaction data.
16378
17463
  */
16379
17464
  buildBorrowData(from, to, token, amount, spokeChainId) {
16380
- invariant11__default.default(isValidSpokeChainId(spokeChainId), `Invalid spokeChainId: ${spokeChainId}`);
16381
- invariant11__default.default(
17465
+ invariant12__default.default(isValidSpokeChainId(spokeChainId), `Invalid spokeChainId: ${spokeChainId}`);
17466
+ invariant12__default.default(
16382
17467
  isValidOriginalAssetAddress(spokeChainId, token),
16383
17468
  `Unsupported spoke chain (${spokeChainId}) token: ${token}`
16384
17469
  );
16385
17470
  const assetConfig = getHubAssetInfo(spokeChainId, token);
16386
- invariant11__default.default(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);
17471
+ invariant12__default.default(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);
16387
17472
  let assetAddress = assetConfig.asset;
16388
17473
  const vaultAddress = assetConfig.vault;
16389
17474
  const bnUSDVault = this.config.bnUSDVault;
@@ -16707,11 +17792,16 @@ var SolverIntentErrorCode = /* @__PURE__ */ ((SolverIntentErrorCode2) => {
16707
17792
  return SolverIntentErrorCode2;
16708
17793
  })(SolverIntentErrorCode || {});
16709
17794
 
17795
+ exports.BackendApiService = BackendApiService;
16710
17796
  exports.BalnSwapService = BalnSwapService;
16711
17797
  exports.BigIntToHex = BigIntToHex;
16712
17798
  exports.BigNumberZeroDecimal = BigNumberZeroDecimal;
16713
17799
  exports.BnUSDMigrationService = BnUSDMigrationService;
17800
+ exports.BridgeService = BridgeService;
16714
17801
  exports.ChainIdToIntentRelayChainId = ChainIdToIntentRelayChainId;
17802
+ exports.DEFAULT_BACKEND_API_ENDPOINT = DEFAULT_BACKEND_API_ENDPOINT;
17803
+ exports.DEFAULT_BACKEND_API_HEADERS = DEFAULT_BACKEND_API_HEADERS;
17804
+ exports.DEFAULT_BACKEND_API_TIMEOUT = DEFAULT_BACKEND_API_TIMEOUT;
16715
17805
  exports.DEFAULT_DEADLINE_OFFSET = DEFAULT_DEADLINE_OFFSET;
16716
17806
  exports.DEFAULT_MAX_RETRY = DEFAULT_MAX_RETRY;
16717
17807
  exports.DEFAULT_RELAYER_API_ENDPOINT = DEFAULT_RELAYER_API_ENDPOINT;
@@ -16752,6 +17842,9 @@ exports.RAY_DECIMALS = RAY_DECIMALS;
16752
17842
  exports.SECONDS_PER_YEAR = SECONDS_PER_YEAR;
16753
17843
  exports.STELLAR_DEFAULT_TX_TIMEOUT_SECONDS = STELLAR_DEFAULT_TX_TIMEOUT_SECONDS;
16754
17844
  exports.STELLAR_PRIORITY_FEE = STELLAR_PRIORITY_FEE;
17845
+ exports.SodaTokens = SodaTokens;
17846
+ exports.SodaTokensAsHubAssets = SodaTokensAsHubAssets;
17847
+ exports.SodaVaultTokensSet = SodaVaultTokensSet;
16755
17848
  exports.Sodax = Sodax;
16756
17849
  exports.SolanaSpokeProvider = SolanaSpokeProvider;
16757
17850
  exports.SolverIntentErrorCode = SolverIntentErrorCode;
@@ -16810,12 +17903,15 @@ exports.getCompoundedBalance = getCompoundedBalance;
16810
17903
  exports.getEvmViemChain = getEvmViemChain;
16811
17904
  exports.getHubAssetInfo = getHubAssetInfo;
16812
17905
  exports.getHubChainConfig = getHubChainConfig;
17906
+ exports.getHubVaultTokenByAddress = getHubVaultTokenByAddress;
16813
17907
  exports.getIconAddressBytes = getIconAddressBytes;
16814
17908
  exports.getIntentRelayChainId = getIntentRelayChainId;
16815
17909
  exports.getLinearBalance = getLinearBalance;
16816
17910
  exports.getMarketReferenceCurrencyAndUsdBalance = getMarketReferenceCurrencyAndUsdBalance;
16817
17911
  exports.getMoneyMarketConfig = getMoneyMarketConfig;
16818
17912
  exports.getOriginalAssetAddress = getOriginalAssetAddress;
17913
+ exports.getOriginalAssetInfoFromVault = getOriginalAssetInfoFromVault;
17914
+ exports.getOriginalTokenFromOriginalAssetAddress = getOriginalTokenFromOriginalAssetAddress;
16819
17915
  exports.getPacket = getPacket;
16820
17916
  exports.getRandomBytes = getRandomBytes;
16821
17917
  exports.getReserveNormalizedIncome = getReserveNormalizedIncome;
@@ -16829,6 +17925,7 @@ exports.getTransactionPackets = getTransactionPackets;
16829
17925
  exports.hexToBigInt = hexToBigInt;
16830
17926
  exports.hubAssetToOriginalAssetMap = hubAssetToOriginalAssetMap;
16831
17927
  exports.hubAssets = hubAssets;
17928
+ exports.hubVaultTokensMap = hubVaultTokensMap;
16832
17929
  exports.hubVaults = hubVaults;
16833
17930
  exports.hubVaultsAddressSet = hubVaultsAddressSet;
16834
17931
  exports.intentRelayChainIdToSpokeChainIdMap = intentRelayChainIdToSpokeChainIdMap;
@@ -16875,6 +17972,7 @@ exports.isPartnerFeeAmount = isPartnerFeeAmount;
16875
17972
  exports.isPartnerFeePercentage = isPartnerFeePercentage;
16876
17973
  exports.isResponseAddressType = isResponseAddressType;
16877
17974
  exports.isResponseSigningType = isResponseSigningType;
17975
+ exports.isSodaVaultToken = isSodaVaultToken;
16878
17976
  exports.isSolanaSpokeProvider = isSolanaSpokeProvider;
16879
17977
  exports.isSolverSupportedToken = isSolverSupportedToken;
16880
17978
  exports.isSonicSpokeProvider = isSonicSpokeProvider;
@@ -16886,6 +17984,7 @@ exports.isValidHubAsset = isValidHubAsset;
16886
17984
  exports.isValidIntentRelayChainId = isValidIntentRelayChainId;
16887
17985
  exports.isValidOriginalAssetAddress = isValidOriginalAssetAddress;
16888
17986
  exports.isValidSpokeChainId = isValidSpokeChainId;
17987
+ exports.isValidVault = isValidVault;
16889
17988
  exports.isWaitUntilIntentExecutedFailed = isWaitUntilIntentExecutedFailed;
16890
17989
  exports.moneyMarketReserveAssets = moneyMarketReserveAssets;
16891
17990
  exports.moneyMarketReserveHubAssetsSet = moneyMarketReserveHubAssetsSet;
@@ -16914,6 +18013,7 @@ exports.spokeChainIdsSet = spokeChainIdsSet;
16914
18013
  exports.submitTransaction = submitTransaction;
16915
18014
  exports.supportedHubAssets = supportedHubAssets;
16916
18015
  exports.supportedHubChains = supportedHubChains;
18016
+ exports.supportedSodaAssets = supportedSodaAssets;
16917
18017
  exports.supportedSpokeChains = supportedSpokeChains;
16918
18018
  exports.supportedTokensPerChain = supportedTokensPerChain;
16919
18019
  exports.uiPoolDataAbi = uiPoolDataAbi;