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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import { getAbiItem, encodeAbiParameters, parseAbiParameters, fromHex, createPublicClient, http, toHex, erc20Abi as erc20Abi$1, encodeFunctionData, decodeAbiParameters, encodePacked, parseEventLogs, keccak256, isAddress } from 'viem';
2
2
  import { nibiru, polygon, bsc, optimism, base, arbitrum, avalanche, sonic } from 'viem/chains';
3
- import { SPOKE_CHAIN_IDS, ICON_MAINNET_CHAIN_ID, SUI_MAINNET_CHAIN_ID, STELLAR_MAINNET_CHAIN_ID, INJECTIVE_MAINNET_CHAIN_ID, POLYGON_MAINNET_CHAIN_ID, BSC_MAINNET_CHAIN_ID, OPTIMISM_MAINNET_CHAIN_ID, BASE_MAINNET_CHAIN_ID, ARBITRUM_MAINNET_CHAIN_ID, NIBIRU_MAINNET_CHAIN_ID, AVALANCHE_MAINNET_CHAIN_ID, SOLANA_MAINNET_CHAIN_ID, SONIC_MAINNET_CHAIN_ID } from '@sodax/types';
3
+ import { SONIC_MAINNET_CHAIN_ID, SPOKE_CHAIN_IDS, ICON_MAINNET_CHAIN_ID, SUI_MAINNET_CHAIN_ID, STELLAR_MAINNET_CHAIN_ID, INJECTIVE_MAINNET_CHAIN_ID, POLYGON_MAINNET_CHAIN_ID, BSC_MAINNET_CHAIN_ID, OPTIMISM_MAINNET_CHAIN_ID, BASE_MAINNET_CHAIN_ID, ARBITRUM_MAINNET_CHAIN_ID, NIBIRU_MAINNET_CHAIN_ID, AVALANCHE_MAINNET_CHAIN_ID, SOLANA_MAINNET_CHAIN_ID } from '@sodax/types';
4
4
  export * from '@sodax/types';
5
- import { ChainGrpcWasmApi, TxGrpcApi, toBase64 } from '@injectivelabs/sdk-ts';
5
+ import { ChainGrpcWasmApi, TxGrpcApi, toBase64, fromBase64 } from '@injectivelabs/sdk-ts';
6
6
  import { getNetworkEndpoints, Network } from '@injectivelabs/networks';
7
7
  import * as IconSdkRaw from 'icon-sdk-js';
8
8
  import { SorobanRpc, Horizon, Contract, TransactionBuilder, BASE_FEE, nativeToScVal, TimeoutInfinite, rpc, scValToBigInt, Operation, Address, Account, FeeBumpTransaction } from '@stellar/stellar-sdk';
@@ -15,7 +15,7 @@ import * as rlp from 'rlp';
15
15
  import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
16
16
  import * as anchor from '@coral-xyz/anchor';
17
17
  import BN from 'bn.js';
18
- import invariant11 from 'tiny-invariant';
18
+ import invariant12 from 'tiny-invariant';
19
19
  import BigNumber4, { BigNumber } from 'bignumber.js';
20
20
 
21
21
  // src/abis/asset-manager.abi.ts
@@ -6105,7 +6105,7 @@ async function waitForTransactionReceipt(hash, provider) {
6105
6105
  return provider.waitForTransactionReceipt(hash);
6106
6106
  }
6107
6107
  var DEFAULT_MAX_RETRY = 3;
6108
- var DEFAULT_RELAY_TX_TIMEOUT = 6e4;
6108
+ var DEFAULT_RELAY_TX_TIMEOUT = 12e4;
6109
6109
  var DEFAULT_RETRY_DELAY_MS = 2e3;
6110
6110
  var ICON_TX_RESULT_WAIT_MAX_RETRY = 10;
6111
6111
  var MAX_UINT256 = (1n << 256n) - 1n;
@@ -6187,6 +6187,155 @@ function getEvmViemChain(id) {
6187
6187
  throw new Error(`Unsupported EVM chain ID: ${id}`);
6188
6188
  }
6189
6189
  }
6190
+ var HubVaultSymbols = [
6191
+ "sodaAVAX",
6192
+ "sodaBNB",
6193
+ "sodaETH",
6194
+ "sodaBTC",
6195
+ "sodaSUI",
6196
+ "sodaINJ",
6197
+ "sodaXLM",
6198
+ "sodaSOL",
6199
+ "sodaSODA",
6200
+ "sodaUSDT",
6201
+ "sodaUSDC",
6202
+ "bnUSD",
6203
+ "sodaPOL",
6204
+ "sodaNIBI",
6205
+ "sodaS",
6206
+ "IbnUSD"
6207
+ ];
6208
+ var SodaTokens = {
6209
+ sodaBNB: {
6210
+ symbol: "sodaBNB",
6211
+ name: "Soda BNB",
6212
+ decimals: 18,
6213
+ address: "0x40Cd41b35DB9e5109ae7E54b44De8625dB320E6b",
6214
+ xChainId: SONIC_MAINNET_CHAIN_ID
6215
+ },
6216
+ sodaAVAX: {
6217
+ symbol: "sodaAVAX",
6218
+ name: "Soda AVAX",
6219
+ decimals: 18,
6220
+ address: "0x14238D267557E9d799016ad635B53CD15935d290",
6221
+ xChainId: SONIC_MAINNET_CHAIN_ID
6222
+ },
6223
+ sodaETH: {
6224
+ symbol: "sodaETH",
6225
+ name: "Soda ETH",
6226
+ decimals: 18,
6227
+ address: "0x4effB5813271699683C25c734F4daBc45B363709",
6228
+ xChainId: SONIC_MAINNET_CHAIN_ID
6229
+ },
6230
+ sodaBTC: {
6231
+ symbol: "sodaBTC",
6232
+ name: "Soda BTC",
6233
+ decimals: 18,
6234
+ address: "0x7A1A5555842Ad2D0eD274d09b5c4406a95799D5d",
6235
+ xChainId: SONIC_MAINNET_CHAIN_ID
6236
+ },
6237
+ sodaSOL: {
6238
+ symbol: "sodaSOL",
6239
+ name: "Soda SOL",
6240
+ decimals: 18,
6241
+ address: "0xdEa692287E2cE8Cb08FA52917Be0F16b1DACDC87",
6242
+ xChainId: SONIC_MAINNET_CHAIN_ID
6243
+ },
6244
+ sodaXLM: {
6245
+ symbol: "sodaXLM",
6246
+ name: "Soda XLM",
6247
+ decimals: 18,
6248
+ address: "0x6BC8C37cba91F76E68C9e6d689A9C21E4d32079B",
6249
+ xChainId: SONIC_MAINNET_CHAIN_ID
6250
+ },
6251
+ sodaINJ: {
6252
+ symbol: "sodaINJ",
6253
+ name: "Soda INJ",
6254
+ decimals: 18,
6255
+ address: "0x1f22279C89B213944b7Ea41daCB0a868DdCDFd13",
6256
+ xChainId: SONIC_MAINNET_CHAIN_ID
6257
+ },
6258
+ sodaNIBI: {
6259
+ symbol: "sodaNIBI",
6260
+ name: "Soda NIBI",
6261
+ decimals: 18,
6262
+ address: "0xc6c85287a8b173A509C2F198bB719A8a5a2d0C68",
6263
+ xChainId: SONIC_MAINNET_CHAIN_ID
6264
+ },
6265
+ sodaSUI: {
6266
+ symbol: "sodaSUI",
6267
+ name: "Soda SUI",
6268
+ decimals: 18,
6269
+ address: "0xdc5B4b00F98347E95b9F94911213DAB4C687e1e3",
6270
+ xChainId: SONIC_MAINNET_CHAIN_ID
6271
+ },
6272
+ bnUSD: {
6273
+ symbol: "bnUSD",
6274
+ name: "Balanced Dollar",
6275
+ decimals: 18,
6276
+ address: "0xE801CA34E19aBCbFeA12025378D19c4FBE250131",
6277
+ xChainId: SONIC_MAINNET_CHAIN_ID
6278
+ },
6279
+ sodaUSDC: {
6280
+ symbol: "sodaUSDC",
6281
+ name: "Soda USDC",
6282
+ decimals: 18,
6283
+ address: "0xAbbb91c0617090F0028BDC27597Cd0D038F3A833",
6284
+ xChainId: SONIC_MAINNET_CHAIN_ID
6285
+ },
6286
+ sodaUSDT: {
6287
+ symbol: "sodaUSDT",
6288
+ name: "Soda USDT",
6289
+ decimals: 18,
6290
+ address: "0xbDf1F453FCB61424011BBDDCB96cFDB30f3Fe876",
6291
+ xChainId: SONIC_MAINNET_CHAIN_ID
6292
+ },
6293
+ IbnUSD: {
6294
+ symbol: "IbnUSD",
6295
+ name: "ICON bnUSD (Migration)",
6296
+ decimals: 18,
6297
+ address: "0x9D4b663Eb075d2a1C7B8eaEFB9eCCC0510388B51",
6298
+ xChainId: SONIC_MAINNET_CHAIN_ID
6299
+ },
6300
+ sodaS: {
6301
+ symbol: "sodaS",
6302
+ name: "Soda S",
6303
+ decimals: 18,
6304
+ address: "0x62ecc3Eeb80a162c57624B3fF80313FE69f5203e",
6305
+ xChainId: SONIC_MAINNET_CHAIN_ID
6306
+ },
6307
+ sodaPOL: {
6308
+ symbol: "sodaPOL",
6309
+ name: "Soda POL",
6310
+ decimals: 18,
6311
+ address: "0x208ED38f4783328aA9eBFeC360D32e7520A9B779",
6312
+ xChainId: SONIC_MAINNET_CHAIN_ID
6313
+ },
6314
+ sodaSODA: {
6315
+ symbol: "sodaSODA",
6316
+ name: "Soda SODA",
6317
+ decimals: 18,
6318
+ address: "0x21685E341DE7844135329914Be6Bd8D16982d834",
6319
+ xChainId: SONIC_MAINNET_CHAIN_ID
6320
+ }
6321
+ };
6322
+ var SodaTokensAsHubAssets = Object.values(SodaTokens).reduce(
6323
+ (acc, token) => {
6324
+ acc[token.address] = {
6325
+ asset: token.address,
6326
+ decimal: token.decimals,
6327
+ symbol: token.symbol,
6328
+ name: token.name,
6329
+ vault: token.address
6330
+ };
6331
+ return acc;
6332
+ },
6333
+ {}
6334
+ );
6335
+ var SodaVaultTokensSet = new Set(Object.values(SodaTokens).map((token) => token.address.toLowerCase()));
6336
+ var isSodaVaultToken = (address) => {
6337
+ return SodaVaultTokensSet.has(address.toLowerCase());
6338
+ };
6190
6339
  var hubChainConfig = {
6191
6340
  [SONIC_MAINNET_CHAIN_ID]: {
6192
6341
  chain: {
@@ -6226,44 +6375,45 @@ var spokeChainConfig = {
6226
6375
  symbol: "S",
6227
6376
  name: "Sonic",
6228
6377
  decimals: 18,
6229
- address: "0x0000000000000000000000000000000000000000"
6230
- },
6231
- bnUSD: {
6232
- symbol: "bnUSD",
6233
- name: "bnUSD",
6234
- decimals: 18,
6235
- address: "0xE801CA34E19aBCbFeA12025378D19c4FBE250131"
6378
+ address: "0x0000000000000000000000000000000000000000",
6379
+ xChainId: SONIC_MAINNET_CHAIN_ID
6236
6380
  },
6237
6381
  WETH: {
6238
6382
  symbol: "WETH",
6239
6383
  name: "Wrapped Ether",
6240
6384
  decimals: 18,
6241
- address: "0x50c42dEAcD8Fc9773493ED674b675bE577f2634b"
6385
+ address: "0x50c42dEAcD8Fc9773493ED674b675bE577f2634b",
6386
+ xChainId: SONIC_MAINNET_CHAIN_ID
6242
6387
  },
6243
6388
  USDC: {
6244
6389
  symbol: "USDC",
6245
6390
  name: "USD Coin",
6246
6391
  decimals: 6,
6247
- address: "0x29219dd400f2Bf60E5a23d13Be72B486D4038894"
6392
+ address: "0x29219dd400f2Bf60E5a23d13Be72B486D4038894",
6393
+ xChainId: SONIC_MAINNET_CHAIN_ID
6248
6394
  },
6249
6395
  USDT: {
6250
6396
  symbol: "USDT",
6251
6397
  name: "Tether USD",
6252
6398
  decimals: 6,
6253
- address: "0x6047828dc181963ba44974801FF68e538dA5eaF9"
6399
+ address: "0x6047828dc181963ba44974801FF68e538dA5eaF9",
6400
+ xChainId: SONIC_MAINNET_CHAIN_ID
6254
6401
  },
6255
6402
  wS: {
6256
6403
  symbol: "wS",
6257
6404
  name: "Wrapped Sonic",
6258
6405
  decimals: 18,
6259
- address: "0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38"
6406
+ address: "0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38",
6407
+ xChainId: SONIC_MAINNET_CHAIN_ID
6260
6408
  },
6261
6409
  SODA: {
6262
6410
  symbol: "SODA",
6263
6411
  name: "SODAX",
6264
6412
  decimals: 18,
6265
- address: "0x7c7d53EEcda37a87ce0D5bf8E0b24512A48dC963"
6266
- }
6413
+ address: "0x7c7d53EEcda37a87ce0D5bf8E0b24512A48dC963",
6414
+ xChainId: SONIC_MAINNET_CHAIN_ID
6415
+ },
6416
+ ...SodaTokens
6267
6417
  }
6268
6418
  },
6269
6419
  [SOLANA_MAINNET_CHAIN_ID]: {
@@ -6282,19 +6432,22 @@ var spokeChainConfig = {
6282
6432
  symbol: "SOL",
6283
6433
  name: "Solana",
6284
6434
  decimals: 9,
6285
- address: "11111111111111111111111111111111"
6435
+ address: "11111111111111111111111111111111",
6436
+ xChainId: SOLANA_MAINNET_CHAIN_ID
6286
6437
  },
6287
6438
  bnUSD: {
6288
6439
  symbol: "bnUSD",
6289
6440
  name: "bnUSD",
6290
6441
  decimals: 9,
6291
- address: "3rSPCLNEF7Quw4wX8S1NyKivELoyij8eYA2gJwBgt4V5"
6442
+ address: "3rSPCLNEF7Quw4wX8S1NyKivELoyij8eYA2gJwBgt4V5",
6443
+ xChainId: SOLANA_MAINNET_CHAIN_ID
6292
6444
  },
6293
6445
  USDC: {
6294
6446
  symbol: "USDC",
6295
6447
  name: "USD Coin",
6296
6448
  decimals: 6,
6297
- address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
6449
+ address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
6450
+ xChainId: SOLANA_MAINNET_CHAIN_ID
6298
6451
  }
6299
6452
  },
6300
6453
  gasPrice: "500000",
@@ -6318,25 +6471,29 @@ var spokeChainConfig = {
6318
6471
  symbol: "AVAX",
6319
6472
  name: "Avalanche",
6320
6473
  decimals: 18,
6321
- address: "0x0000000000000000000000000000000000000000"
6474
+ address: "0x0000000000000000000000000000000000000000",
6475
+ xChainId: AVALANCHE_MAINNET_CHAIN_ID
6322
6476
  },
6323
6477
  bnUSD: {
6324
6478
  symbol: "bnUSD",
6325
6479
  name: "bnUSD",
6326
6480
  decimals: 18,
6327
- address: "0x6958a4CBFe11406E2a1c1d3a71A1971aD8B3b92F"
6481
+ address: "0x6958a4CBFe11406E2a1c1d3a71A1971aD8B3b92F",
6482
+ xChainId: AVALANCHE_MAINNET_CHAIN_ID
6328
6483
  },
6329
6484
  USDT: {
6330
6485
  symbol: "USDT",
6331
6486
  name: "Tether USD",
6332
6487
  decimals: 6,
6333
- address: "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7"
6488
+ address: "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7",
6489
+ xChainId: AVALANCHE_MAINNET_CHAIN_ID
6334
6490
  },
6335
6491
  USDC: {
6336
6492
  symbol: "USDC",
6337
6493
  name: "USD Coin",
6338
6494
  decimals: 6,
6339
- address: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"
6495
+ address: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
6496
+ xChainId: AVALANCHE_MAINNET_CHAIN_ID
6340
6497
  }
6341
6498
  }
6342
6499
  },
@@ -6357,13 +6514,15 @@ var spokeChainConfig = {
6357
6514
  symbol: "NIBI",
6358
6515
  name: "Nibiru",
6359
6516
  decimals: 6,
6360
- address: "0x0000000000000000000000000000000000000000"
6517
+ address: "0x0000000000000000000000000000000000000000",
6518
+ xChainId: NIBIRU_MAINNET_CHAIN_ID
6361
6519
  },
6362
6520
  bnUSD: {
6363
6521
  symbol: "bnUSD",
6364
6522
  name: "bnUSD",
6365
6523
  decimals: 18,
6366
- address: "0x043fb7e23350Dd5b77dE5E228B528763DEcb9131"
6524
+ address: "0x043fb7e23350Dd5b77dE5E228B528763DEcb9131",
6525
+ xChainId: NIBIRU_MAINNET_CHAIN_ID
6367
6526
  }
6368
6527
  }
6369
6528
  },
@@ -6384,49 +6543,57 @@ var spokeChainConfig = {
6384
6543
  symbol: "ETH",
6385
6544
  name: "Ethereum",
6386
6545
  decimals: 18,
6387
- address: "0x0000000000000000000000000000000000000000"
6546
+ address: "0x0000000000000000000000000000000000000000",
6547
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6388
6548
  },
6389
6549
  bnUSD: {
6390
6550
  symbol: "bnUSD",
6391
6551
  name: "bnUSD",
6392
6552
  decimals: 18,
6393
- address: "0xA256dd181C3f6E5eC68C6869f5D50a712d47212e"
6553
+ address: "0xA256dd181C3f6E5eC68C6869f5D50a712d47212e",
6554
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6394
6555
  },
6395
6556
  wstETH: {
6396
6557
  symbol: "wstETH",
6397
6558
  name: "Wrapped stETH",
6398
6559
  decimals: 18,
6399
- address: "0x5979D7b546E38E414F7E9822514be443A4800529"
6560
+ address: "0x5979D7b546E38E414F7E9822514be443A4800529",
6561
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6400
6562
  },
6401
6563
  weETH: {
6402
6564
  symbol: "weETH",
6403
6565
  name: "Wrapped eETH",
6404
6566
  decimals: 18,
6405
- address: "0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe"
6567
+ address: "0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe",
6568
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6406
6569
  },
6407
6570
  tBTC: {
6408
6571
  symbol: "tBTC",
6409
6572
  name: "Arbitrum tBTC v2",
6410
6573
  decimals: 18,
6411
- address: "0x6c84a8f1c29108F47a79964b5Fe888D4f4D0dE40"
6574
+ address: "0x6c84a8f1c29108F47a79964b5Fe888D4f4D0dE40",
6575
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6412
6576
  },
6413
6577
  WBTC: {
6414
6578
  symbol: "WBTC",
6415
6579
  name: "Wrapped BTC",
6416
6580
  decimals: 8,
6417
- address: "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f"
6581
+ address: "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f",
6582
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6418
6583
  },
6419
6584
  USDC: {
6420
6585
  symbol: "USDC",
6421
6586
  name: "USD Coin (USDC)",
6422
6587
  decimals: 6,
6423
- address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
6588
+ address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
6589
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6424
6590
  },
6425
6591
  USDT: {
6426
6592
  symbol: "USDT",
6427
6593
  name: "TetherToken",
6428
6594
  decimals: 6,
6429
- address: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9"
6595
+ address: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
6596
+ xChainId: ARBITRUM_MAINNET_CHAIN_ID
6430
6597
  }
6431
6598
  }
6432
6599
  },
@@ -6447,37 +6614,43 @@ var spokeChainConfig = {
6447
6614
  symbol: "ETH",
6448
6615
  name: "Ethereum",
6449
6616
  decimals: 18,
6450
- address: "0x0000000000000000000000000000000000000000"
6617
+ address: "0x0000000000000000000000000000000000000000",
6618
+ xChainId: BASE_MAINNET_CHAIN_ID
6451
6619
  },
6452
6620
  bnUSD: {
6453
6621
  symbol: "bnUSD",
6454
6622
  name: "bnUSD",
6455
6623
  decimals: 18,
6456
- address: "0xAcfab3F31C0a18559D78556BBf297EC29c6cf8aa"
6624
+ address: "0xAcfab3F31C0a18559D78556BBf297EC29c6cf8aa",
6625
+ xChainId: BASE_MAINNET_CHAIN_ID
6457
6626
  },
6458
6627
  weETH: {
6459
6628
  symbol: "weETH",
6460
6629
  name: "Wrapped eETH",
6461
6630
  decimals: 18,
6462
- address: "0x04c0599ae5a44757c0af6f9ec3b93da8976c150a"
6631
+ address: "0x04c0599ae5a44757c0af6f9ec3b93da8976c150a",
6632
+ xChainId: BASE_MAINNET_CHAIN_ID
6463
6633
  },
6464
6634
  USDC: {
6465
6635
  symbol: "USDC",
6466
6636
  name: "USD Coin",
6467
6637
  decimals: 6,
6468
- address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
6638
+ address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
6639
+ xChainId: BASE_MAINNET_CHAIN_ID
6469
6640
  },
6470
6641
  wstETH: {
6471
6642
  symbol: "wstETH",
6472
6643
  name: "Wrapped stETH",
6473
6644
  decimals: 18,
6474
- address: "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452"
6645
+ address: "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452",
6646
+ xChainId: BASE_MAINNET_CHAIN_ID
6475
6647
  },
6476
6648
  cbBTC: {
6477
6649
  symbol: "cbBTC",
6478
6650
  name: "Coinbase Wrapped BTC",
6479
6651
  decimals: 8,
6480
- address: "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf"
6652
+ address: "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf",
6653
+ xChainId: BASE_MAINNET_CHAIN_ID
6481
6654
  }
6482
6655
  }
6483
6656
  },
@@ -6498,37 +6671,43 @@ var spokeChainConfig = {
6498
6671
  symbol: "ETH",
6499
6672
  name: "Ethereum",
6500
6673
  decimals: 18,
6501
- address: "0x0000000000000000000000000000000000000000"
6674
+ address: "0x0000000000000000000000000000000000000000",
6675
+ xChainId: OPTIMISM_MAINNET_CHAIN_ID
6502
6676
  },
6503
6677
  bnUSD: {
6504
6678
  symbol: "bnUSD",
6505
6679
  name: "bnUSD",
6506
6680
  decimals: 18,
6507
- address: "0xF4f7dC27c17470a26d0de9039Cf0EA5045F100E8"
6681
+ address: "0xF4f7dC27c17470a26d0de9039Cf0EA5045F100E8",
6682
+ xChainId: OPTIMISM_MAINNET_CHAIN_ID
6508
6683
  },
6509
6684
  USDC: {
6510
6685
  symbol: "USDC",
6511
6686
  name: "USD Coin",
6512
6687
  decimals: 6,
6513
- address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"
6688
+ address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
6689
+ xChainId: OPTIMISM_MAINNET_CHAIN_ID
6514
6690
  },
6515
6691
  wstETH: {
6516
6692
  symbol: "wstETH",
6517
6693
  name: "Wrapped stETH",
6518
6694
  decimals: 18,
6519
- address: "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb"
6695
+ address: "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb",
6696
+ xChainId: OPTIMISM_MAINNET_CHAIN_ID
6520
6697
  },
6521
6698
  weETH: {
6522
6699
  symbol: "weETH",
6523
6700
  name: "Wrapped eETH",
6524
6701
  decimals: 18,
6525
- address: "0x5A7fACB970D094B6C7FF1df0eA68D99E6e73CBFF"
6702
+ address: "0x5A7fACB970D094B6C7FF1df0eA68D99E6e73CBFF",
6703
+ xChainId: OPTIMISM_MAINNET_CHAIN_ID
6526
6704
  },
6527
6705
  USDT: {
6528
6706
  symbol: "USDT",
6529
6707
  name: "Tether USD",
6530
6708
  decimals: 6,
6531
- address: "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58"
6709
+ address: "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58",
6710
+ xChainId: OPTIMISM_MAINNET_CHAIN_ID
6532
6711
  }
6533
6712
  }
6534
6713
  },
@@ -6549,31 +6728,36 @@ var spokeChainConfig = {
6549
6728
  symbol: "BNB",
6550
6729
  name: "BNB",
6551
6730
  decimals: 18,
6552
- address: "0x0000000000000000000000000000000000000000"
6731
+ address: "0x0000000000000000000000000000000000000000",
6732
+ xChainId: BSC_MAINNET_CHAIN_ID
6553
6733
  },
6554
6734
  bnUSD: {
6555
6735
  symbol: "bnUSD",
6556
6736
  name: "bnUSD",
6557
6737
  decimals: 18,
6558
- address: "0x8428FedC020737a5A2291F46cB1B80613eD71638"
6738
+ address: "0x8428FedC020737a5A2291F46cB1B80613eD71638",
6739
+ xChainId: BSC_MAINNET_CHAIN_ID
6559
6740
  },
6560
6741
  ETHB: {
6561
6742
  symbol: "ETHB",
6562
6743
  name: "Ethereum BSC",
6563
6744
  decimals: 18,
6564
- address: "0x2170Ed0880ac9A755fd29B2688956BD959F933F8"
6745
+ address: "0x2170Ed0880ac9A755fd29B2688956BD959F933F8",
6746
+ xChainId: BSC_MAINNET_CHAIN_ID
6565
6747
  },
6566
6748
  BTCB: {
6567
6749
  symbol: "BTCB",
6568
6750
  name: "Bitcoin BSC",
6569
6751
  decimals: 18,
6570
- address: "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c"
6752
+ address: "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c",
6753
+ xChainId: BSC_MAINNET_CHAIN_ID
6571
6754
  },
6572
6755
  USDC: {
6573
6756
  symbol: "USDC",
6574
6757
  name: "USD Coin",
6575
6758
  decimals: 18,
6576
- address: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"
6759
+ address: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
6760
+ xChainId: BSC_MAINNET_CHAIN_ID
6577
6761
  }
6578
6762
  }
6579
6763
  },
@@ -6594,19 +6778,22 @@ var spokeChainConfig = {
6594
6778
  symbol: "POL",
6595
6779
  name: "Polygon",
6596
6780
  decimals: 18,
6597
- address: "0x0000000000000000000000000000000000000000"
6781
+ address: "0x0000000000000000000000000000000000000000",
6782
+ xChainId: POLYGON_MAINNET_CHAIN_ID
6598
6783
  },
6599
6784
  bnUSD: {
6600
6785
  symbol: "bnUSD",
6601
6786
  name: "bnUSD",
6602
6787
  decimals: 18,
6603
- address: "0x39E77f86C1B1f3fbAb362A82b49D2E86C09659B4"
6788
+ address: "0x39E77f86C1B1f3fbAb362A82b49D2E86C09659B4",
6789
+ xChainId: POLYGON_MAINNET_CHAIN_ID
6604
6790
  },
6605
6791
  USDC: {
6606
6792
  symbol: "USDC",
6607
6793
  name: "USD Coin",
6608
6794
  decimals: 6,
6609
- address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
6795
+ address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
6796
+ xChainId: POLYGON_MAINNET_CHAIN_ID
6610
6797
  }
6611
6798
  }
6612
6799
  },
@@ -6631,19 +6818,22 @@ var spokeChainConfig = {
6631
6818
  symbol: "INJ",
6632
6819
  name: "Injective",
6633
6820
  decimals: 18,
6634
- address: "inj"
6821
+ address: "inj",
6822
+ xChainId: INJECTIVE_MAINNET_CHAIN_ID
6635
6823
  },
6636
6824
  bnUSD: {
6637
6825
  symbol: "bnUSD",
6638
6826
  name: "bnUSD",
6639
6827
  decimals: 18,
6640
- address: "factory/inj1d036ftaatxpkqsu9hja8r24rv3v33chz3appxp/bnUSD"
6828
+ address: "factory/inj1d036ftaatxpkqsu9hja8r24rv3v33chz3appxp/bnUSD",
6829
+ xChainId: INJECTIVE_MAINNET_CHAIN_ID
6641
6830
  },
6642
6831
  USDC: {
6643
6832
  symbol: "USDC",
6644
6833
  name: "USD Coin",
6645
6834
  decimals: 6,
6646
- address: "ibc/2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E"
6835
+ address: "ibc/2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E",
6836
+ xChainId: INJECTIVE_MAINNET_CHAIN_ID
6647
6837
  }
6648
6838
  },
6649
6839
  gasPrice: "500000000inj",
@@ -6666,25 +6856,29 @@ var spokeChainConfig = {
6666
6856
  symbol: "bnUSD",
6667
6857
  name: "bnUSD",
6668
6858
  decimals: 7,
6669
- address: "CD6YBFFWMU2UJHX2NGRJ7RN76IJVTCC7MRA46DUBXNB7E6W7H7JRJ2CX"
6859
+ address: "CD6YBFFWMU2UJHX2NGRJ7RN76IJVTCC7MRA46DUBXNB7E6W7H7JRJ2CX",
6860
+ xChainId: STELLAR_MAINNET_CHAIN_ID
6670
6861
  },
6671
6862
  XLM: {
6672
6863
  symbol: "XLM",
6673
6864
  name: "Stellar Lumens",
6674
6865
  decimals: 7,
6675
- address: "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA"
6866
+ address: "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA",
6867
+ xChainId: STELLAR_MAINNET_CHAIN_ID
6676
6868
  },
6677
6869
  USDC: {
6678
6870
  symbol: "USDC",
6679
6871
  name: "USD Coin",
6680
6872
  decimals: 7,
6681
- address: "CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"
6873
+ address: "CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75",
6874
+ xChainId: STELLAR_MAINNET_CHAIN_ID
6682
6875
  },
6683
6876
  legacybnUSD: {
6684
- symbol: "bnUSD",
6877
+ symbol: "bnUSD (legacy)",
6685
6878
  name: "legacybnUSD",
6686
6879
  decimals: 18,
6687
- address: "CCT4ZYIYZ3TUO2AWQFEOFGBZ6HQP3GW5TA37CK7CRZVFRDXYTHTYX7KP"
6880
+ address: "CCT4ZYIYZ3TUO2AWQFEOFGBZ6HQP3GW5TA37CK7CRZVFRDXYTHTYX7KP",
6881
+ xChainId: STELLAR_MAINNET_CHAIN_ID
6688
6882
  }
6689
6883
  },
6690
6884
  nativeToken: "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA",
@@ -6711,61 +6905,71 @@ var spokeChainConfig = {
6711
6905
  symbol: "SUI",
6712
6906
  name: "SUI",
6713
6907
  decimals: 9,
6714
- address: "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI"
6908
+ address: "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
6909
+ xChainId: SUI_MAINNET_CHAIN_ID
6715
6910
  },
6716
6911
  bnUSD: {
6717
6912
  symbol: "bnUSD",
6718
6913
  name: "bnUSD",
6719
6914
  decimals: 9,
6720
- address: "0xff4de2b2b57dd7611d2812d231a467d007b702a101fd5c7ad3b278257cddb507::bnusd::BNUSD"
6915
+ address: "0xff4de2b2b57dd7611d2812d231a467d007b702a101fd5c7ad3b278257cddb507::bnusd::BNUSD",
6916
+ xChainId: SUI_MAINNET_CHAIN_ID
6721
6917
  },
6722
6918
  USDC: {
6723
6919
  symbol: "USDC",
6724
6920
  name: "USD Coin",
6725
6921
  decimals: 6,
6726
- address: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC"
6922
+ address: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
6923
+ xChainId: SUI_MAINNET_CHAIN_ID
6727
6924
  },
6728
6925
  legacybnUSD: {
6729
- symbol: "bnUSD",
6926
+ symbol: "bnUSD (legacy)",
6730
6927
  name: "legacybnUSD",
6731
6928
  decimals: 9,
6732
- address: "0x03917a812fe4a6d6bc779c5ab53f8a80ba741f8af04121193fc44e0f662e2ceb::balanced_dollar::BALANCED_DOLLAR"
6929
+ address: "0x03917a812fe4a6d6bc779c5ab53f8a80ba741f8af04121193fc44e0f662e2ceb::balanced_dollar::BALANCED_DOLLAR",
6930
+ xChainId: SUI_MAINNET_CHAIN_ID
6733
6931
  },
6734
6932
  afSUI: {
6735
6933
  symbol: "afSUI",
6736
6934
  name: "Aftermath Staked Sui",
6737
6935
  decimals: 9,
6738
- address: "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI"
6936
+ address: "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI",
6937
+ xChainId: SUI_MAINNET_CHAIN_ID
6739
6938
  },
6740
6939
  mSUI: {
6741
6940
  symbol: "mSUI",
6742
6941
  name: "Mirai Staked SUI",
6743
6942
  decimals: 9,
6744
- address: "0x922d15d7f55c13fd790f6e54397470ec592caa2b508df292a2e8553f3d3b274f::msui::MSUI"
6943
+ address: "0x922d15d7f55c13fd790f6e54397470ec592caa2b508df292a2e8553f3d3b274f::msui::MSUI",
6944
+ xChainId: SUI_MAINNET_CHAIN_ID
6745
6945
  },
6746
6946
  haSUI: {
6747
6947
  symbol: "haSUI",
6748
6948
  name: "haSUI",
6749
6949
  decimals: 9,
6750
- address: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI"
6950
+ address: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",
6951
+ xChainId: SUI_MAINNET_CHAIN_ID
6751
6952
  },
6752
6953
  vSUI: {
6753
6954
  symbol: "vSUI",
6754
6955
  name: "Volo Staked SUI",
6755
6956
  decimals: 9,
6756
- address: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT"
6957
+ address: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",
6958
+ xChainId: SUI_MAINNET_CHAIN_ID
6757
6959
  },
6758
6960
  yapSUI: {
6759
6961
  symbol: "yapSUI",
6760
6962
  name: "Yap Staked SUI",
6761
6963
  decimals: 9,
6762
- address: "0x83f1bb8c91ecd1fd313344058b0eed94d63c54e41d8d1ae5bff1353443517d65::yap_sui::YAP_SUI"
6964
+ address: "0x83f1bb8c91ecd1fd313344058b0eed94d63c54e41d8d1ae5bff1353443517d65::yap_sui::YAP_SUI",
6965
+ xChainId: SUI_MAINNET_CHAIN_ID
6763
6966
  },
6764
6967
  trevinSUI: {
6765
6968
  symbol: "trevinSUI",
6766
6969
  name: "Trevin Staked SUI",
6767
6970
  decimals: 9,
6768
- address: "0x502867b177303bf1bf226245fcdd3403c177e78d175a55a56c0602c7ff51c7fa::trevin_sui::TREVIN_SUI"
6971
+ address: "0x502867b177303bf1bf226245fcdd3403c177e78d175a55a56c0602c7ff51c7fa::trevin_sui::TREVIN_SUI",
6972
+ xChainId: SUI_MAINNET_CHAIN_ID
6769
6973
  }
6770
6974
  },
6771
6975
  nativeToken: "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
@@ -6786,7 +6990,7 @@ var spokeChainConfig = {
6786
6990
  },
6787
6991
  chain: {
6788
6992
  id: ICON_MAINNET_CHAIN_ID,
6789
- name: "ICON Mainnet",
6993
+ name: "ICON",
6790
6994
  type: "ICON"
6791
6995
  },
6792
6996
  supportedTokens: {
@@ -6794,33 +6998,38 @@ var spokeChainConfig = {
6794
6998
  symbol: "ICX",
6795
6999
  name: "ICON",
6796
7000
  decimals: 18,
6797
- address: "cx0000000000000000000000000000000000000000"
7001
+ address: "cx0000000000000000000000000000000000000000",
7002
+ xChainId: ICON_MAINNET_CHAIN_ID
6798
7003
  },
6799
7004
  wICX: {
6800
7005
  symbol: "wICX",
6801
7006
  name: "Wrapped ICX",
6802
7007
  decimals: 18,
6803
- address: "cx3975b43d260fb8ec802cef6e60c2f4d07486f11d"
7008
+ address: "cx3975b43d260fb8ec802cef6e60c2f4d07486f11d",
7009
+ xChainId: ICON_MAINNET_CHAIN_ID
6804
7010
  },
6805
7011
  bnUSD: {
6806
7012
  // same as legacy
6807
- symbol: "bnUSD",
7013
+ symbol: "bnUSD (legacy)",
6808
7014
  name: "bnUSD",
6809
7015
  decimals: 18,
6810
- address: "cx88fd7df7ddff82f7cc735c871dc519838cb235bb"
7016
+ address: "cx88fd7df7ddff82f7cc735c871dc519838cb235bb",
7017
+ xChainId: ICON_MAINNET_CHAIN_ID
6811
7018
  },
6812
7019
  legacybnUSD: {
6813
7020
  // duplicate of bnUSD purely for consistency with other legacy tokens chains (sui, stellar)
6814
- symbol: "bnUSD",
7021
+ symbol: "bnUSD (legacy)",
6815
7022
  name: "bnUSD",
6816
7023
  decimals: 18,
6817
- address: "cx88fd7df7ddff82f7cc735c871dc519838cb235bb"
7024
+ address: "cx88fd7df7ddff82f7cc735c871dc519838cb235bb",
7025
+ xChainId: ICON_MAINNET_CHAIN_ID
6818
7026
  },
6819
7027
  BALN: {
6820
7028
  symbol: "BALN",
6821
7029
  name: "BALN",
6822
7030
  decimals: 18,
6823
- address: "cxf61cd5a45dc9f91c15aa65831a30a90d59a09619"
7031
+ address: "cxf61cd5a45dc9f91c15aa65831a30a90d59a09619",
7032
+ xChainId: ICON_MAINNET_CHAIN_ID
6824
7033
  }
6825
7034
  },
6826
7035
  nativeToken: "cx0000000000000000000000000000000000000000",
@@ -6828,26 +7037,8 @@ var spokeChainConfig = {
6828
7037
  nid: "0x1"
6829
7038
  }
6830
7039
  };
6831
- var HubVaultSymbols = [
6832
- "sodaAVAX",
6833
- "sodaBNB",
6834
- "sodaETH",
6835
- "sodaBTC",
6836
- "sodaSUI",
6837
- "sodaINJ",
6838
- "sodaXLM",
6839
- "sodaSOL",
6840
- "sodaSODA",
6841
- "sodaUSDT",
6842
- "sodaUSDC",
6843
- "bnUSD",
6844
- "sodaPOL",
6845
- "sodaNIBI",
6846
- "sodaS",
6847
- "IbnUSD"
6848
- ];
6849
7040
  var hubVaults = {
6850
- IbnUSD: {
7041
+ [SodaTokens.IbnUSD.symbol]: {
6851
7042
  // ICON bnUSD (Migration) vault on Sonic contains legacy bnUSD tokens (stellar, sui, icon)
6852
7043
  address: "0x9D4b663Eb075d2a1C7B8eaEFB9eCCC0510388B51",
6853
7044
  reserves: [
@@ -6857,28 +7048,28 @@ var hubVaults = {
6857
7048
  "0x1559B52d2e165da1505a542EA37C543c9137f52a"
6858
7049
  ]
6859
7050
  },
6860
- sodaS: {
7051
+ [SodaTokens.sodaS.symbol]: {
6861
7052
  address: "0x62ecc3eeb80a162c57624b3ff80313fe69f5203e",
6862
7053
  reserves: [
6863
7054
  // hub asset addresses contained in the vault
6864
7055
  "0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38"
6865
7056
  ]
6866
7057
  },
6867
- sodaNIBI: {
7058
+ [SodaTokens.sodaNIBI.symbol]: {
6868
7059
  address: "0xc6c85287a8b173a509c2f198bb719a8a5a2d0c68",
6869
7060
  reserves: [
6870
7061
  // hub asset addresses contained in the vault
6871
7062
  "0xe0064414c2c1a636a9424c7a17d86fbf7fd3f190"
6872
7063
  ]
6873
7064
  },
6874
- sodaPOL: {
7065
+ [SodaTokens.sodaPOL.symbol]: {
6875
7066
  address: "0x208ed38f4783328aa9ebfec360d32e7520a9b779",
6876
7067
  reserves: [
6877
7068
  // hub asset addresses contained in the vault
6878
7069
  "0x9ee17486571917837210824b0d4cadfe3b324d12"
6879
7070
  ]
6880
7071
  },
6881
- bnUSD: {
7072
+ [SodaTokens.bnUSD.symbol]: {
6882
7073
  // new bnUSD vault on Sonic (also contains IbnUSD vault token as part of it)
6883
7074
  address: "0xe801ca34e19abcbfea12025378d19c4fbe250131",
6884
7075
  reserves: [
@@ -6897,19 +7088,33 @@ var hubVaults = {
6897
7088
  "0xdf23097b9aeb917bf8fb70e99b6c528fffa35364",
6898
7089
  "0x11b93c162aabffd026539bb3b9f9ec22c8b7ef8a",
6899
7090
  "0x69425ffb14704124a58d6f69d510f74a59d9a5bc",
6900
- "0x9d4b663eb075d2a1c7b8eaefb9eccc0510388b51"
7091
+ "0x9d4b663eb075d2a1c7b8eaefb9eccc0510388b51",
7092
+ "0xD1d14BF3324C901855A1f7d0d5CA4c8458D2a780"
6901
7093
  ]
6902
7094
  },
6903
- sodaSODA: {
7095
+ [SodaTokens.sodaSODA.symbol]: {
6904
7096
  // SODA SODA vault
6905
7097
  address: "0x21685e341de7844135329914be6bd8d16982d834",
6906
7098
  reserves: [
6907
7099
  // hub asset addresses contained in the vault
6908
- "0x7c7d53eecda37a87ce0d5bf8e0b24512a48dc963"
7100
+ "0x7c7d53eecda37a87ce0d5bf8e0b24512a48dc963",
6909
7101
  // SODA SODA hub asset
7102
+ "0xf51d7082375cdca8C19C74e1A0c77dA482aFDa4e",
7103
+ "0x93a367E5B37a1B9E8D04ef25a6Af40d181a3DfFF",
7104
+ "0x17fF8Ad5EBe6CA8B15751067cD0c89f0E580CD17",
7105
+ "0x4d12c72A8633588097D10e57b559ed642588e4C6",
7106
+ "0x26cd76cB5622Dc8638670A16E0Da5a51394A8DB1",
7107
+ "0x0eD0d274dC77ef460DC96b9fBaFF3EDB074e0471",
7108
+ "0x8D78A620E009Ba751Eb40d77A5e9Db48A3F2016b",
7109
+ "0x4Cf5Ce9594AEDdc5D3efe9d4Cdf0b944b4e73A53",
7110
+ "0xD749B5FfFED7cEDaa3239abDd16D677179C29AEc",
7111
+ "0x07Db7b1a96ebE474B20F52fF487cEE415adee79e",
7112
+ "0x20Ce75CdcEe44B1308365447b91B9c26e2b71Ffd",
7113
+ "0x5Db9CEc919f40C50809D9490DC3BbA4F05b0a1D7",
7114
+ "0x655730024B673B3378CD6031B1Cd01eaE9afb138"
6910
7115
  ]
6911
7116
  },
6912
- sodaAVAX: {
7117
+ [SodaTokens.sodaAVAX.symbol]: {
6913
7118
  // SODA AVAX vault
6914
7119
  address: "0x14238d267557e9d799016ad635b53cd15935d290",
6915
7120
  reserves: [
@@ -6918,7 +7123,7 @@ var hubVaults = {
6918
7123
  // AvalancheAVAX hub asset
6919
7124
  ]
6920
7125
  },
6921
- sodaBNB: {
7126
+ [SodaTokens.sodaBNB.symbol]: {
6922
7127
  // SODA BNB vault
6923
7128
  address: "0x40cd41b35db9e5109ae7e54b44de8625db320e6b",
6924
7129
  reserves: [
@@ -6927,7 +7132,7 @@ var hubVaults = {
6927
7132
  // BSC BNB hub asset
6928
7133
  ]
6929
7134
  },
6930
- sodaETH: {
7135
+ [SodaTokens.sodaETH.symbol]: {
6931
7136
  // SODA ETH vault
6932
7137
  address: "0x4effb5813271699683c25c734f4dabc45b363709",
6933
7138
  reserves: [
@@ -6944,7 +7149,7 @@ var hubVaults = {
6944
7149
  // Sonic WETH hub asset
6945
7150
  ]
6946
7151
  },
6947
- sodaBTC: {
7152
+ [SodaTokens.sodaBTC.symbol]: {
6948
7153
  // SODA BTC vault
6949
7154
  address: "0x7a1a5555842ad2d0ed274d09b5c4406a95799d5d",
6950
7155
  reserves: [
@@ -6955,11 +7160,12 @@ var hubVaults = {
6955
7160
  // Arbitrum wBTC hub asset
6956
7161
  "0x96fc8540736f1598b7e235e6de8814062b3b5d3b",
6957
7162
  // Arbitrum tBTC hub asset,
6958
- "0xd8a24c71fea5bb81c66c01e532de7d9b11e13905"
7163
+ "0xd8a24c71fea5bb81c66c01e532de7d9b11e13905",
6959
7164
  // BSC BTCB hub asset
7165
+ "0x03E99853C6376b13a4c6e4d0A115F1639c9FA14e"
6960
7166
  ]
6961
7167
  },
6962
- sodaSUI: {
7168
+ [SodaTokens.sodaSUI.symbol]: {
6963
7169
  // SODA SUI vault
6964
7170
  address: "0xdc5b4b00f98347e95b9f94911213dab4c687e1e3",
6965
7171
  reserves: [
@@ -6968,7 +7174,7 @@ var hubVaults = {
6968
7174
  // SUI SUI hub asset
6969
7175
  ]
6970
7176
  },
6971
- sodaINJ: {
7177
+ [SodaTokens.sodaINJ.symbol]: {
6972
7178
  // SODA INJ vault
6973
7179
  address: "0x1f22279c89b213944b7ea41dacb0a868ddcdfd13",
6974
7180
  reserves: [
@@ -6977,7 +7183,7 @@ var hubVaults = {
6977
7183
  // Injective INJ hub asset
6978
7184
  ]
6979
7185
  },
6980
- sodaXLM: {
7186
+ [SodaTokens.sodaXLM.symbol]: {
6981
7187
  // SODA XLM vault
6982
7188
  address: "0x6bc8c37cba91f76e68c9e6d689a9c21e4d32079b",
6983
7189
  reserves: [
@@ -6986,7 +7192,7 @@ var hubVaults = {
6986
7192
  // Stellar XLM hub asset
6987
7193
  ]
6988
7194
  },
6989
- sodaSOL: {
7195
+ [SodaTokens.sodaSOL.symbol]: {
6990
7196
  // SODA SOL vault
6991
7197
  address: "0xdea692287e2ce8cb08fa52917be0f16b1dacdc87",
6992
7198
  reserves: [
@@ -6995,7 +7201,7 @@ var hubVaults = {
6995
7201
  // Solana SOL hub asset
6996
7202
  ]
6997
7203
  },
6998
- sodaUSDT: {
7204
+ [SodaTokens.sodaUSDT.symbol]: {
6999
7205
  // SODA USDT vault
7000
7206
  address: "0xbdf1f453fcb61424011bbddcb96cfdb30f3fe876",
7001
7207
  reserves: [
@@ -7007,7 +7213,7 @@ var hubVaults = {
7007
7213
  // Sonic USDT
7008
7214
  ]
7009
7215
  },
7010
- sodaUSDC: {
7216
+ [SodaTokens.sodaUSDC.symbol]: {
7011
7217
  address: "0xabbb91c0617090f0028bdc27597cd0d038f3a833",
7012
7218
  reserves: [
7013
7219
  "0x41abf4b1559ff709ef8150079bcb26db1fffd117",
@@ -7021,10 +7227,25 @@ var hubVaults = {
7021
7227
  "0x4bc1211faa06fb50ff61a70331f56167ae511057",
7022
7228
  "0x348007b53f25a9a857ab8ea81ec9e3ccbcf440f2",
7023
7229
  "0xc3f020057510ffe10ceb882e1b48238b43d78a5e",
7024
- "0x9d58508ad10d34048a11640735ca5075bba07b35"
7230
+ "0x9d58508ad10d34048a11640735ca5075bba07b35",
7231
+ "0xC1df02fb7b1b06bE886592C89F6955387998B2f7"
7025
7232
  ]
7026
7233
  }
7027
7234
  };
7235
+ var hubVaultTokensMap = new Map(
7236
+ Object.entries(hubVaults).map(([symbol, vault]) => [
7237
+ vault.address.toLowerCase(),
7238
+ {
7239
+ address: vault.address.toLowerCase(),
7240
+ symbol,
7241
+ name: symbol,
7242
+ decimals: 18
7243
+ }
7244
+ ])
7245
+ );
7246
+ var getHubVaultTokenByAddress = (address) => {
7247
+ return hubVaultTokensMap.get(address.toLowerCase());
7248
+ };
7028
7249
  var bnUSDLegacySpokeChainIds = [
7029
7250
  ICON_MAINNET_CHAIN_ID,
7030
7251
  SUI_MAINNET_CHAIN_ID,
@@ -7070,6 +7291,13 @@ var hubAssets = {
7070
7291
  name: "Sonic",
7071
7292
  vault: hubVaults.sodaS.address
7072
7293
  },
7294
+ [spokeChainConfig[SONIC_MAINNET_CHAIN_ID].bnUSD]: {
7295
+ asset: "0x289cDa1043b4Ce26BDCa3c12E534f56b24308A5B",
7296
+ decimal: 18,
7297
+ symbol: "bnUSD",
7298
+ name: "bnUSD",
7299
+ vault: hubVaults.bnUSD.address
7300
+ },
7073
7301
  [spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.wS.address]: {
7074
7302
  asset: spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.wS.address,
7075
7303
  decimal: 18,
@@ -7104,7 +7332,8 @@ var hubAssets = {
7104
7332
  symbol: "SODA",
7105
7333
  name: "SODA",
7106
7334
  vault: hubVaults.sodaSODA.address
7107
- }
7335
+ },
7336
+ ...SodaTokensAsHubAssets
7108
7337
  },
7109
7338
  [AVALANCHE_MAINNET_CHAIN_ID]: {
7110
7339
  [spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].nativeToken]: {
@@ -7565,17 +7794,18 @@ var solverSupportedTokens = {
7565
7794
  spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.WETH,
7566
7795
  spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.USDC,
7567
7796
  spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.USDT,
7568
- spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.wS
7797
+ spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.wS,
7798
+ spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.bnUSD
7569
7799
  ],
7570
7800
  [AVALANCHE_MAINNET_CHAIN_ID]: [
7571
7801
  spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.AVAX,
7572
7802
  spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDT,
7573
- spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDC
7574
- // spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7803
+ spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDC,
7804
+ spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.bnUSD
7575
7805
  ],
7576
7806
  [ARBITRUM_MAINNET_CHAIN_ID]: [
7577
7807
  spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.ETH,
7578
- // spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7808
+ spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7579
7809
  spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.WBTC,
7580
7810
  spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.weETH,
7581
7811
  spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.wstETH,
@@ -7585,7 +7815,7 @@ var solverSupportedTokens = {
7585
7815
  ],
7586
7816
  [BASE_MAINNET_CHAIN_ID]: [
7587
7817
  spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.ETH,
7588
- // spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7818
+ spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7589
7819
  spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.weETH,
7590
7820
  spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.USDC,
7591
7821
  spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.wstETH,
@@ -7593,7 +7823,7 @@ var solverSupportedTokens = {
7593
7823
  ],
7594
7824
  [OPTIMISM_MAINNET_CHAIN_ID]: [
7595
7825
  spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.ETH,
7596
- // spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7826
+ spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7597
7827
  spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.USDC,
7598
7828
  spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.wstETH,
7599
7829
  // spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.weETH, // NOTE: Not Implemented
@@ -7601,19 +7831,20 @@ var solverSupportedTokens = {
7601
7831
  ],
7602
7832
  [POLYGON_MAINNET_CHAIN_ID]: [
7603
7833
  spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.POL,
7604
- // spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7834
+ spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7605
7835
  spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.USDC
7606
7836
  ],
7607
7837
  [BSC_MAINNET_CHAIN_ID]: [
7608
7838
  spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.BNB,
7609
7839
  spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.ETHB,
7610
7840
  spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.BTCB,
7611
- // spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7841
+ spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7612
7842
  spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.USDC
7613
7843
  ],
7614
7844
  [SOLANA_MAINNET_CHAIN_ID]: [
7615
7845
  spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.SOL,
7616
- // spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7846
+ spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7847
+ // NOTE: Not Implemented
7617
7848
  spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.USDC
7618
7849
  ],
7619
7850
  [ICON_MAINNET_CHAIN_ID]: [
@@ -7625,12 +7856,14 @@ var solverSupportedTokens = {
7625
7856
  ],
7626
7857
  [STELLAR_MAINNET_CHAIN_ID]: [
7627
7858
  spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.XLM,
7628
- // spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7859
+ spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7860
+ // NOTE: Not Implemented
7629
7861
  spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.USDC
7630
7862
  ],
7631
7863
  [SUI_MAINNET_CHAIN_ID]: [
7632
7864
  spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.SUI,
7633
- // spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7865
+ spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
7866
+ // NOTE: Not Implemented
7634
7867
  spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.USDC,
7635
7868
  spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.afSUI,
7636
7869
  spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.mSUI,
@@ -7640,9 +7873,9 @@ var solverSupportedTokens = {
7640
7873
  spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.trevinSUI
7641
7874
  ],
7642
7875
  [INJECTIVE_MAINNET_CHAIN_ID]: [
7643
- spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.INJ,
7876
+ // spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.INJ,
7644
7877
  // spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.bnUSD, // NOTE: Not Implemented
7645
- spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.USDC
7878
+ // spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.USDC,
7646
7879
  ],
7647
7880
  [NIBIRU_MAINNET_CHAIN_ID]: [
7648
7881
  // spokeChainConfig[NIBIRU_MAINNET_CHAIN_ID].supportedTokens.NIBI, // NOTE: Not Implemented
@@ -7774,11 +8007,30 @@ var chainIdToHubAssetsMap = new Map(
7774
8007
  var supportedHubAssets = new Set(
7775
8008
  Object.values(hubAssets).flatMap((assets) => Object.values(assets).map((info) => info.asset.toLowerCase()))
7776
8009
  );
8010
+ var supportedSodaAssets = new Set(
8011
+ Object.values(hubAssets).flatMap((assets) => Object.values(assets).map((info) => info.vault.toLowerCase()))
8012
+ );
7777
8013
  var spokeChainIdsSet = new Set(SPOKE_CHAIN_IDS);
8014
+ var getOriginalAssetInfoFromVault = (chainId, vault) => {
8015
+ const assets = hubAssets[chainId];
8016
+ if (!assets) {
8017
+ return [];
8018
+ }
8019
+ const vaultAddress = vault.toLowerCase();
8020
+ const result = [];
8021
+ for (const [spokeToken, info] of Object.entries(assets)) {
8022
+ if (info.vault.toLowerCase() === vaultAddress) {
8023
+ result.push(spokeToken);
8024
+ }
8025
+ }
8026
+ return result;
8027
+ };
7778
8028
  var getHubAssetInfo = (chainId, asset) => originalAssetTohubAssetMap.get(chainId)?.get(asset.toLowerCase());
7779
8029
  var isValidOriginalAssetAddress = (chainId, asset) => originalAssetTohubAssetMap.get(chainId)?.has(asset.toLowerCase()) ?? false;
7780
8030
  var getOriginalAssetAddress = (chainId, hubAsset) => hubAssetToOriginalAssetMap.get(chainId)?.get(hubAsset.toLowerCase());
8031
+ var getOriginalTokenFromOriginalAssetAddress = (chainId, asset) => Object.values(spokeChainConfig[chainId].supportedTokens).find((t) => t.address.toLowerCase() === asset.toLowerCase()) ?? void 0;
7781
8032
  var isValidHubAsset = (hubAsset) => supportedHubAssets.has(hubAsset.toLowerCase());
8033
+ var isValidVault = (vault) => supportedSodaAssets.has(vault.toLowerCase());
7782
8034
  var isValidChainHubAsset = (chainId, hubAsset) => chainIdToHubAssetsMap.get(chainId)?.has(hubAsset.toLowerCase()) ?? false;
7783
8035
  var isValidSpokeChainId = (chainId) => spokeChainIdsSet.has(chainId);
7784
8036
  var isValidIntentRelayChainId = (chainId) => Object.values(INTENT_RELAY_CHAIN_IDS).some((id) => id === chainId);
@@ -7831,12 +8083,13 @@ var InjectiveSpokeProvider = class {
7831
8083
  );
7832
8084
  }
7833
8085
  async getBalance(token) {
7834
- return this.chainGrpcWasmApi.fetchSmartContractState(
8086
+ const response = await this.chainGrpcWasmApi.fetchSmartContractState(
7835
8087
  this.chainConfig.addresses.assetManager,
7836
8088
  toBase64({
7837
8089
  get_balance: { denom: token }
7838
8090
  })
7839
8091
  );
8092
+ return fromBase64(response.data);
7840
8093
  }
7841
8094
  // Execute Methods (requires SigningCosmWasmClient)
7842
8095
  /**
@@ -9287,7 +9540,7 @@ var EvmSpokeService = class _EvmSpokeService {
9287
9540
  address: token,
9288
9541
  abi: erc20Abi,
9289
9542
  functionName: "balanceOf",
9290
- args: [token]
9543
+ args: [spokeProvider.chainConfig.addresses.assetManager]
9291
9544
  });
9292
9545
  }
9293
9546
  /**
@@ -9800,18 +10053,14 @@ var SolanaSpokeService = class _SolanaSpokeService {
9800
10053
  );
9801
10054
  }
9802
10055
  static async getDeposit(token, spokeProvider) {
9803
- const assetManagerProgram = await getAssetManagerProgram(
9804
- spokeProvider.walletProvider.getWalletBase58PublicKey(),
9805
- spokeProvider.chainConfig.rpcUrl,
9806
- spokeProvider.chainConfig.addresses.assetManager
9807
- );
9808
- const solToken = new PublicKey(Buffer.from(token, "hex"));
10056
+ const assetManagerProgramId = new PublicKey(spokeProvider.chainConfig.addresses.assetManager);
10057
+ const solToken = new PublicKey(token);
9809
10058
  if (isNative(new PublicKey(solToken))) {
9810
- const vaultNative = AssetManagerPDA.vault_native(assetManagerProgram.programId);
10059
+ const vaultNative = AssetManagerPDA.vault_native(assetManagerProgramId);
9811
10060
  const balance = await spokeProvider.walletProvider.getBalance(vaultNative.pda.toBase58());
9812
10061
  return BigInt(balance);
9813
10062
  }
9814
- const vaultToken = AssetManagerPDA.vault_token(assetManagerProgram.programId, new PublicKey(solToken));
10063
+ const vaultToken = AssetManagerPDA.vault_token(assetManagerProgramId, new PublicKey(solToken));
9815
10064
  const tokenAccount = await spokeProvider.walletProvider.getTokenAccountBalance(vaultToken.pda.toBase58());
9816
10065
  return BigInt(tokenAccount.value.amount);
9817
10066
  }
@@ -10019,6 +10268,12 @@ var StellarSpokeService = class _StellarSpokeService {
10019
10268
  raw
10020
10269
  );
10021
10270
  }
10271
+ /**
10272
+ * Get the balance of the token in the spoke chain asset manager.
10273
+ * @param token - The address of the token to get the balance of.
10274
+ * @param spokeProvider - The spoke provider.
10275
+ * @returns The balance of the token.
10276
+ */
10022
10277
  static async getDeposit(token, spokeProvider) {
10023
10278
  return BigInt(await spokeProvider.getBalance(token));
10024
10279
  }
@@ -10135,7 +10390,7 @@ var SonicSpokeService = class _SonicSpokeService {
10135
10390
  * @returns {PromiseEvmTxReturnType<R>} A promise that resolves to the transaction hash
10136
10391
  */
10137
10392
  static async deposit(params, spokeProvider, raw) {
10138
- invariant11(spokeProvider instanceof SonicSpokeProvider, "[SonicSpokeService] invalid spoke provider");
10393
+ invariant12(spokeProvider instanceof SonicSpokeProvider, "[SonicSpokeService] invalid spoke provider");
10139
10394
  const userHubAddress = params.to ?? await _SonicSpokeService.getUserRouter(params.from, spokeProvider);
10140
10395
  const calls = Array.from(
10141
10396
  decodeAbiParameters(
@@ -10200,11 +10455,11 @@ var SonicSpokeService = class _SonicSpokeService {
10200
10455
  inputToken = hubProvider.chainConfig.nativeToken;
10201
10456
  }
10202
10457
  const outputToken = getHubAssetInfo(createIntentParams.dstChain, createIntentParams.outputToken)?.asset;
10203
- invariant11(
10458
+ invariant12(
10204
10459
  inputToken,
10205
10460
  `hub asset not found for spoke chain token (intent.inputToken): ${createIntentParams.inputToken}`
10206
10461
  );
10207
- invariant11(
10462
+ invariant12(
10208
10463
  outputToken,
10209
10464
  `hub asset not found for spoke chain token (intent.outputToken): ${createIntentParams.outputToken}`
10210
10465
  );
@@ -10267,7 +10522,7 @@ var SonicSpokeService = class _SonicSpokeService {
10267
10522
  * @returns {PromiseEvmTxReturnType<R>} A promise that resolves to the transaction hash
10268
10523
  */
10269
10524
  static async callWallet(payload, spokeProvider, raw) {
10270
- invariant11(spokeProvider instanceof SonicSpokeProvider, "[SonicSpokeService] invalid spoke provider");
10525
+ invariant12(spokeProvider instanceof SonicSpokeProvider, "[SonicSpokeService] invalid spoke provider");
10271
10526
  const calls = decodeAbiParameters(
10272
10527
  [
10273
10528
  {
@@ -10756,11 +11011,8 @@ var SpokeService = class _SpokeService {
10756
11011
  */
10757
11012
  static async deposit(params, spokeProvider, hubProvider, raw, skipSimulation = false) {
10758
11013
  if (spokeProvider instanceof SonicSpokeProvider) {
10759
- return SonicSpokeService.deposit(
10760
- params,
10761
- spokeProvider,
10762
- raw
10763
- );
11014
+ const _params = params;
11015
+ return SonicSpokeService.deposit(_params, spokeProvider, raw);
10764
11016
  }
10765
11017
  if (spokeProvider instanceof EvmSpokeProvider) {
10766
11018
  await _SpokeService.verifyDepositSimulation(params, spokeProvider, hubProvider, skipSimulation);
@@ -10785,7 +11037,6 @@ var SpokeService = class _SpokeService {
10785
11037
  );
10786
11038
  }
10787
11039
  if (spokeProvider instanceof SuiSpokeProvider) {
10788
- await _SpokeService.verifyDepositSimulation(params, spokeProvider, hubProvider, skipSimulation);
10789
11040
  return SuiSpokeService.deposit(
10790
11041
  params,
10791
11042
  spokeProvider,
@@ -10913,6 +11164,20 @@ var SpokeService = class _SpokeService {
10913
11164
  raw
10914
11165
  );
10915
11166
  }
11167
+ if (!skipSimulation) {
11168
+ const result = await _SpokeService.simulateRecvMessage(
11169
+ {
11170
+ target: from,
11171
+ srcChainId: getIntentRelayChainId(spokeProvider.chainConfig.chain.id),
11172
+ srcAddress: await spokeProvider.walletProvider.getWalletAddressBytes(),
11173
+ payload
11174
+ },
11175
+ hubProvider
11176
+ );
11177
+ if (!result.success) {
11178
+ throw new Error("Simulation failed", { cause: result });
11179
+ }
11180
+ }
10916
11181
  if (isEvmSpokeProvider(spokeProvider)) {
10917
11182
  await _SpokeService.verifySimulation(from, payload, spokeProvider, hubProvider, skipSimulation);
10918
11183
  return await EvmSpokeService.callWallet(from, payload, spokeProvider, hubProvider);
@@ -10981,19 +11246,19 @@ async function postRequest(payload, apiUrl) {
10981
11246
  return response.json();
10982
11247
  }
10983
11248
  async function submitTransaction(payload, apiUrl) {
10984
- invariant11(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
10985
- invariant11(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
11249
+ invariant12(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
11250
+ invariant12(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
10986
11251
  return postRequest(payload, apiUrl);
10987
11252
  }
10988
11253
  async function getTransactionPackets(payload, apiUrl) {
10989
- invariant11(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
10990
- invariant11(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
11254
+ invariant12(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
11255
+ invariant12(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
10991
11256
  return postRequest(payload, apiUrl);
10992
11257
  }
10993
11258
  async function getPacket(payload, apiUrl) {
10994
- invariant11(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
10995
- invariant11(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
10996
- invariant11(payload.params.conn_sn.length > 0, "Invalid input parameters. conn_sn empty");
11259
+ invariant12(payload.params.chain_id.length > 0, "Invalid input parameters. source_chain_id empty");
11260
+ invariant12(payload.params.tx_hash.length > 0, "Invalid input parameters. tx_hash empty");
11261
+ invariant12(payload.params.conn_sn.length > 0, "Invalid input parameters. conn_sn empty");
10997
11262
  return postRequest(payload, apiUrl);
10998
11263
  }
10999
11264
  async function waitUntilIntentExecuted(payload) {
@@ -11124,11 +11389,11 @@ var EvmSolverService = class _EvmSolverService {
11124
11389
  inputToken = hubProvider.chainConfig.wrappedNativeToken;
11125
11390
  }
11126
11391
  const outputToken = getHubAssetInfo(createIntentParams.dstChain, createIntentParams.outputToken)?.asset;
11127
- invariant11(
11392
+ invariant12(
11128
11393
  inputToken,
11129
11394
  `hub asset not found for spoke chain token (intent.inputToken): ${createIntentParams.inputToken}`
11130
11395
  );
11131
- invariant11(
11396
+ invariant12(
11132
11397
  outputToken,
11133
11398
  `hub asset not found for spoke chain token (intent.outputToken): ${createIntentParams.outputToken}`
11134
11399
  );
@@ -11160,7 +11425,7 @@ var EvmSolverService = class _EvmSolverService {
11160
11425
  * @returns A tuple containing [encoded fee data, fee amount]. Fee amount will be 0n if no fee.
11161
11426
  */
11162
11427
  static createIntentFeeData(fee, inputAmount) {
11163
- invariant11(inputAmount > 0n, "Input amount must be greater than 0");
11428
+ invariant12(inputAmount > 0n, "Input amount must be greater than 0");
11164
11429
  if (!fee) {
11165
11430
  return ["0x", 0n];
11166
11431
  }
@@ -11168,7 +11433,7 @@ var EvmSolverService = class _EvmSolverService {
11168
11433
  if (isPartnerFeeAmount(fee)) {
11169
11434
  feeAmount = fee.amount;
11170
11435
  } else if (isPartnerFeePercentage(fee)) {
11171
- invariant11(
11436
+ invariant12(
11172
11437
  fee.percentage >= 0 && fee.percentage <= FEE_PERCENTAGE_SCALE,
11173
11438
  `Fee percentage must be between 0 and ${FEE_PERCENTAGE_SCALE}}`
11174
11439
  );
@@ -11295,23 +11560,23 @@ var SolverApiService = class {
11295
11560
  * }
11296
11561
  */
11297
11562
  static async getQuote(payload, config) {
11298
- invariant11(payload.token_src.length > 0, "Empty token_src");
11299
- invariant11(payload.token_src_blockchain_id.length > 0, "Empty token_src_blockchain_id");
11300
- invariant11(payload.token_dst.length > 0, "Empty token_dst");
11301
- invariant11(payload.token_dst_blockchain_id.length > 0, "Empty token_dst_blockchain_id");
11302
- invariant11(payload.amount > 0n, "amount must be greater than 0");
11303
- invariant11(
11563
+ invariant12(payload.token_src.length > 0, "Empty token_src");
11564
+ invariant12(payload.token_src_blockchain_id.length > 0, "Empty token_src_blockchain_id");
11565
+ invariant12(payload.token_dst.length > 0, "Empty token_dst");
11566
+ invariant12(payload.token_dst_blockchain_id.length > 0, "Empty token_dst_blockchain_id");
11567
+ invariant12(payload.amount > 0n, "amount must be greater than 0");
11568
+ invariant12(
11304
11569
  isValidOriginalAssetAddress(payload.token_src_blockchain_id, payload.token_src),
11305
11570
  "unsupported token_src for src chain"
11306
11571
  );
11307
- invariant11(
11572
+ invariant12(
11308
11573
  isValidOriginalAssetAddress(payload.token_dst_blockchain_id, payload.token_dst),
11309
11574
  "unsupported token_dst for dst chain"
11310
11575
  );
11311
11576
  const tokenSrc = getHubAssetInfo(payload.token_src_blockchain_id, payload.token_src)?.asset;
11312
11577
  const tokenDst = getHubAssetInfo(payload.token_dst_blockchain_id, payload.token_dst)?.asset;
11313
- invariant11(tokenSrc, "hub asset not found for token_src");
11314
- invariant11(tokenDst, "hub asset not found for token_dst");
11578
+ invariant12(tokenSrc, "hub asset not found for token_src");
11579
+ invariant12(tokenDst, "hub asset not found for token_dst");
11315
11580
  try {
11316
11581
  const response = await fetch(`${config.solverApiEndpoint}/quote`, {
11317
11582
  method: "POST",
@@ -11406,7 +11671,7 @@ var SolverApiService = class {
11406
11671
  }
11407
11672
  }
11408
11673
  static async getStatus(request, config) {
11409
- invariant11(request.intent_tx_hash.length > 0, "Empty intent_tx_hash");
11674
+ invariant12(request.intent_tx_hash.length > 0, "Empty intent_tx_hash");
11410
11675
  try {
11411
11676
  const response = await fetch(`${config.solverApiEndpoint}/status`, {
11412
11677
  method: "POST",
@@ -12038,19 +12303,19 @@ var SolverService = class {
12038
12303
  fee = this.config.partnerFee,
12039
12304
  raw
12040
12305
  }) {
12041
- invariant11(
12306
+ invariant12(
12042
12307
  isValidOriginalAssetAddress(params.srcChain, params.inputToken),
12043
12308
  `Unsupported spoke chain token (params.srcChain): ${params.srcChain}, params.inputToken): ${params.inputToken}`
12044
12309
  );
12045
- invariant11(
12310
+ invariant12(
12046
12311
  isValidOriginalAssetAddress(params.dstChain, params.outputToken),
12047
12312
  `Unsupported spoke chain token (params.dstChain): ${params.dstChain}, params.outputToken): ${params.outputToken}`
12048
12313
  );
12049
- invariant11(isValidSpokeChainId(params.srcChain), `Invalid spoke chain (params.srcChain): ${params.srcChain}`);
12050
- invariant11(isValidSpokeChainId(params.dstChain), `Invalid spoke chain (params.dstChain): ${params.dstChain}`);
12314
+ invariant12(isValidSpokeChainId(params.srcChain), `Invalid spoke chain (params.srcChain): ${params.srcChain}`);
12315
+ invariant12(isValidSpokeChainId(params.dstChain), `Invalid spoke chain (params.dstChain): ${params.dstChain}`);
12051
12316
  try {
12052
12317
  const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
12053
- invariant11(
12318
+ invariant12(
12054
12319
  params.srcAddress.toLowerCase() === walletAddress.toLowerCase(),
12055
12320
  "srcAddress must be the same as wallet address"
12056
12321
  );
@@ -12124,8 +12389,8 @@ var SolverService = class {
12124
12389
  */
12125
12390
  async cancelIntent(intent, spokeProvider, raw) {
12126
12391
  try {
12127
- invariant11(isValidIntentRelayChainId(intent.srcChain), `Invalid intent.srcChain: ${intent.srcChain}`);
12128
- invariant11(isValidIntentRelayChainId(intent.dstChain), `Invalid intent.dstChain: ${intent.dstChain}`);
12392
+ invariant12(isValidIntentRelayChainId(intent.srcChain), `Invalid intent.srcChain: ${intent.srcChain}`);
12393
+ invariant12(isValidIntentRelayChainId(intent.dstChain), `Invalid intent.dstChain: ${intent.dstChain}`);
12129
12394
  const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
12130
12395
  const creatorHubWalletAddress = await deriveUserWalletAddress(spokeProvider, this.hubProvider, walletAddress);
12131
12396
  const calls = [];
@@ -12172,7 +12437,7 @@ var SolverService = class {
12172
12437
  * @returns {bigint} The deadline for the swap as a sum of hub chain block timestamp and deadline offset
12173
12438
  */
12174
12439
  async getSwapDeadline(deadline = DEFAULT_DEADLINE_OFFSET) {
12175
- invariant11(deadline > 0n, "Deadline must be greater than 0");
12440
+ invariant12(deadline > 0n, "Deadline must be greater than 0");
12176
12441
  const block = await this.hubProvider.publicClient.getBlock({
12177
12442
  includeTransactions: false,
12178
12443
  blockTag: "latest"
@@ -12650,7 +12915,7 @@ var IcxMigrationService = class {
12650
12915
  migrateData(params) {
12651
12916
  const calls = [];
12652
12917
  const assetConfig = getHubAssetInfo(ICON_MAINNET_CHAIN_ID, params.address);
12653
- invariant11(assetConfig, `hub asset not found for spoke chain token (token): ${params.address}`);
12918
+ invariant12(assetConfig, `hub asset not found for spoke chain token (token): ${params.address}`);
12654
12919
  calls.push(
12655
12920
  Erc20Service.encodeApprove(assetConfig.asset, this.hubProvider.chainConfig.addresses.icxMigration, params.amount)
12656
12921
  );
@@ -12666,7 +12931,7 @@ var IcxMigrationService = class {
12666
12931
  revertMigration(params) {
12667
12932
  const calls = [];
12668
12933
  const assetConfig = getHubAssetInfo(ICON_MAINNET_CHAIN_ID, params.wICX);
12669
- invariant11(assetConfig, `hub asset not found for spoke chain token (token): ${params.wICX}`);
12934
+ invariant12(assetConfig, `hub asset not found for spoke chain token (token): ${params.wICX}`);
12670
12935
  calls.push(
12671
12936
  Erc20Service.encodeApprove(
12672
12937
  this.hubProvider.chainConfig.addresses.sodaToken,
@@ -12762,9 +13027,9 @@ var MigrationService = class {
12762
13027
  async isAllowanceValid(params, action, spokeProvider) {
12763
13028
  try {
12764
13029
  if (action === "migrate") {
12765
- invariant11(params.amount > 0n, "Amount must be greater than 0");
12766
- invariant11(isAddress(params.to) || isIconAddress(params.to), "To address is required");
12767
- invariant11(
13030
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
13031
+ invariant12(isAddress(params.to) || isIconAddress(params.to), "To address is required");
13032
+ invariant12(
12768
13033
  isIcxMigrateParams(params) || isBalnMigrateParams(params) || isUnifiedBnUSDMigrateParams(params),
12769
13034
  "Invalid params"
12770
13035
  );
@@ -12790,9 +13055,9 @@ var MigrationService = class {
12790
13055
  };
12791
13056
  }
12792
13057
  if (action === "revert") {
12793
- invariant11(params.amount > 0n, "Amount must be greater than 0");
12794
- invariant11(params.to.length > 0, "To address is required");
12795
- invariant11(isIcxCreateRevertMigrationParams(params) || isUnifiedBnUSDMigrateParams(params), "Invalid params");
13058
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
13059
+ invariant12(params.to.length > 0, "To address is required");
13060
+ invariant12(isIcxCreateRevertMigrationParams(params) || isUnifiedBnUSDMigrateParams(params), "Invalid params");
12796
13061
  if (spokeProvider instanceof SonicSpokeProvider && isIcxCreateRevertMigrationParams(params)) {
12797
13062
  const wallet = await spokeProvider.walletProvider.getWalletAddress();
12798
13063
  const userRouter = await SonicSpokeService.getUserRouter(wallet, spokeProvider);
@@ -12848,9 +13113,9 @@ var MigrationService = class {
12848
13113
  async approve(params, action, spokeProvider, raw) {
12849
13114
  try {
12850
13115
  if (action === "migrate") {
12851
- invariant11(params.amount > 0n, "Amount must be greater than 0");
12852
- invariant11(params.to.length > 0, "To address is required");
12853
- invariant11(isUnifiedBnUSDMigrateParams(params), "Invalid params");
13116
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
13117
+ invariant12(params.to.length > 0, "To address is required");
13118
+ invariant12(isUnifiedBnUSDMigrateParams(params), "Invalid params");
12854
13119
  if (isUnifiedBnUSDMigrateParams(params) && spokeProvider.chainConfig.chain.type === "EVM") {
12855
13120
  const evmSpokeProvider = spokeProvider;
12856
13121
  const result = await Erc20Service.approve(
@@ -12871,9 +13136,9 @@ var MigrationService = class {
12871
13136
  };
12872
13137
  }
12873
13138
  if (action === "revert") {
12874
- invariant11(params.amount > 0n, "Amount must be greater than 0");
12875
- invariant11(params.to.length > 0, "To address is required");
12876
- invariant11(isIcxCreateRevertMigrationParams(params) || isUnifiedBnUSDMigrateParams(params), "Invalid params");
13139
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
13140
+ invariant12(params.to.length > 0, "To address is required");
13141
+ invariant12(isIcxCreateRevertMigrationParams(params) || isUnifiedBnUSDMigrateParams(params), "Invalid params");
12877
13142
  if (spokeProvider instanceof SonicSpokeProvider && isIcxCreateRevertMigrationParams(params)) {
12878
13143
  const wallet = await spokeProvider.walletProvider.getWalletAddress();
12879
13144
  const userRouter = await SonicSpokeService.getUserRouter(wallet, spokeProvider);
@@ -13285,13 +13550,13 @@ var MigrationService = class {
13285
13550
  async createMigratebnUSDIntent(params, spokeProvider, unchecked = false, raw) {
13286
13551
  try {
13287
13552
  if (!unchecked) {
13288
- invariant11(isValidSpokeChainId(params.srcChainId), "Invalid spoke source chain ID");
13289
- invariant11(isValidSpokeChainId(params.dstChainId), "Invalid spoke destination chain ID");
13290
- invariant11(params.srcbnUSD.length > 0, "Legacy bnUSD token address is required");
13291
- invariant11(params.dstbnUSD.length > 0, "New bnUSD token address is required");
13292
- invariant11(params.amount > 0, "Amount must be greater than 0");
13293
- invariant11(params.to.length > 0, "Recipient address is required");
13294
- invariant11(
13553
+ invariant12(isValidSpokeChainId(params.srcChainId), "Invalid spoke source chain ID");
13554
+ invariant12(isValidSpokeChainId(params.dstChainId), "Invalid spoke destination chain ID");
13555
+ invariant12(params.srcbnUSD.length > 0, "Legacy bnUSD token address is required");
13556
+ invariant12(params.dstbnUSD.length > 0, "New bnUSD token address is required");
13557
+ invariant12(params.amount > 0, "Amount must be greater than 0");
13558
+ invariant12(params.to.length > 0, "Recipient address is required");
13559
+ invariant12(
13295
13560
  !(isLegacybnUSDToken(params.srcbnUSD) && isLegacybnUSDToken(params.dstbnUSD)),
13296
13561
  "srcbnUSD and dstbnUSD cannot both be legacy bnUSD tokens"
13297
13562
  );
@@ -13299,11 +13564,11 @@ var MigrationService = class {
13299
13564
  let migrationData;
13300
13565
  if (isLegacybnUSDToken(params.srcbnUSD)) {
13301
13566
  if (!unchecked) {
13302
- invariant11(
13567
+ invariant12(
13303
13568
  isLegacybnUSDChainId(params.srcChainId),
13304
13569
  "srcChainId must be a legacy bnUSD chain (icon, sui, stellar) if srcbnUSD is a legacy bnUSD token"
13305
13570
  );
13306
- invariant11(
13571
+ invariant12(
13307
13572
  isNewbnUSDChainId(params.dstChainId),
13308
13573
  "dstChainId must be a new bnUSD chain (all spoke chains besides Icon) if dstbnUSD is a legacy bnUSD token"
13309
13574
  );
@@ -13318,15 +13583,15 @@ var MigrationService = class {
13318
13583
  });
13319
13584
  } else if (isLegacybnUSDToken(params.dstbnUSD)) {
13320
13585
  if (!unchecked) {
13321
- invariant11(
13586
+ invariant12(
13322
13587
  isLegacybnUSDChainId(params.dstChainId),
13323
13588
  "dstChainId must be a legacy bnUSD chain (sui, stellar, icon) if dstbnUSD is a legacy bnUSD token"
13324
13589
  );
13325
- invariant11(
13590
+ invariant12(
13326
13591
  isNewbnUSDToken(params.srcbnUSD),
13327
13592
  "srcbnUSD must be a new bnUSD token if dstbnUSD is a legacy bnUSD token"
13328
13593
  );
13329
- invariant11(
13594
+ invariant12(
13330
13595
  isNewbnUSDChainId(params.srcChainId),
13331
13596
  "srcChainId must be a new bnUSD chain (all spoke chains besides Icon) if srcbnUSD is a new bnUSD token"
13332
13597
  );
@@ -13399,13 +13664,13 @@ var MigrationService = class {
13399
13664
  */
13400
13665
  async createMigrateIcxToSodaIntent(params, spokeProvider, raw) {
13401
13666
  try {
13402
- invariant11(params.amount > 0, "Amount must be greater than 0");
13403
- invariant11(isAddress(params.to), "Recipient address is required");
13404
- invariant11(
13667
+ invariant12(params.amount > 0, "Amount must be greater than 0");
13668
+ invariant12(isAddress(params.to), "Recipient address is required");
13669
+ invariant12(
13405
13670
  params.address.toLowerCase() === spokeProvider.chainConfig.addresses.wICX.toLowerCase() || params.address.toLowerCase() === spokeProvider.chainConfig.nativeToken.toLowerCase(),
13406
13671
  "Token must be wICX or native ICX token"
13407
13672
  );
13408
- invariant11(spokeProvider instanceof IconSpokeProvider, "Spoke provider must be an instance of IconSpokeProvider");
13673
+ invariant12(spokeProvider instanceof IconSpokeProvider, "Spoke provider must be an instance of IconSpokeProvider");
13409
13674
  const availableAmount = await this.icxMigration.getAvailableAmount();
13410
13675
  if (availableAmount < params.amount) {
13411
13676
  throw new Error(
@@ -13517,7 +13782,7 @@ var BnUSDMigrationService = class {
13517
13782
  migrateData(params) {
13518
13783
  const calls = [];
13519
13784
  const assetConfig = getHubAssetInfo(params.srcChainId, params.legacybnUSD);
13520
- invariant11(assetConfig, `hub asset not found for legacy bnUSD token: ${params.legacybnUSD}`);
13785
+ invariant12(assetConfig, `hub asset not found for legacy bnUSD token: ${params.legacybnUSD}`);
13521
13786
  const bnUSDVault = getMoneyMarketConfig(SONIC_MAINNET_CHAIN_ID).bnUSDVault;
13522
13787
  calls.push(Erc20Service.encodeApprove(assetConfig.asset, assetConfig.vault, params.amount));
13523
13788
  calls.push(EvmVaultTokenService.encodeDeposit(assetConfig.vault, assetConfig.asset, params.amount));
@@ -13529,7 +13794,7 @@ var BnUSDMigrationService = class {
13529
13794
  return encodeContractCalls(calls);
13530
13795
  }
13531
13796
  const dstAssetConfig = getHubAssetInfo(params.dstChainId, params.newbnUSD);
13532
- invariant11(dstAssetConfig, `hub asset not found for new bnUSD token: ${params.newbnUSD}`);
13797
+ invariant12(dstAssetConfig, `hub asset not found for new bnUSD token: ${params.newbnUSD}`);
13533
13798
  calls.push(EvmVaultTokenService.encodeWithdraw(bnUSDVault, dstAssetConfig.asset, translatedAmount));
13534
13799
  const translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(
13535
13800
  dstAssetConfig.decimal,
@@ -13562,14 +13827,14 @@ var BnUSDMigrationService = class {
13562
13827
  let decimals = 18;
13563
13828
  if (params.newbnUSD.toLowerCase() !== bnUSDVault.toLowerCase()) {
13564
13829
  const assetConfig = getHubAssetInfo(params.srcChainId, params.newbnUSD);
13565
- invariant11(assetConfig, `hub asset not found for new bnUSD token: ${params.newbnUSD}`);
13830
+ invariant12(assetConfig, `hub asset not found for new bnUSD token: ${params.newbnUSD}`);
13566
13831
  decimals = assetConfig.decimal;
13567
13832
  calls.push(Erc20Service.encodeApprove(assetConfig.asset, bnUSDVault, params.amount));
13568
13833
  calls.push(EvmVaultTokenService.encodeDeposit(bnUSDVault, assetConfig.asset, params.amount));
13569
13834
  }
13570
13835
  const translatedAmount = EvmVaultTokenService.translateIncomingDecimals(decimals, params.amount);
13571
13836
  const dstAssetConfig = getHubAssetInfo(params.dstChainId, params.legacybnUSD);
13572
- invariant11(dstAssetConfig, `hub asset not found for new bnUSD token: ${params.legacybnUSD}`);
13837
+ invariant12(dstAssetConfig, `hub asset not found for new bnUSD token: ${params.legacybnUSD}`);
13573
13838
  calls.push(EvmVaultTokenService.encodeWithdraw(bnUSDVault, dstAssetConfig.vault, translatedAmount));
13574
13839
  calls.push(EvmVaultTokenService.encodeWithdraw(dstAssetConfig.vault, dstAssetConfig.asset, translatedAmount));
13575
13840
  const translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(
@@ -13652,7 +13917,7 @@ var BalnSwapService = class {
13652
13917
  */
13653
13918
  async swapData(balnToken, params) {
13654
13919
  const assetConfig = getHubAssetInfo(ICON_MAINNET_CHAIN_ID, balnToken);
13655
- invariant11(assetConfig, `hub asset not found for baln token: ${balnToken}`);
13920
+ invariant12(assetConfig, `hub asset not found for baln token: ${balnToken}`);
13656
13921
  const calls = [];
13657
13922
  calls.push(
13658
13923
  Erc20Service.encodeApprove(assetConfig.asset, this.hubProvider.chainConfig.addresses.balnSwap, params.amount)
@@ -13830,6 +14095,497 @@ var BalnSwapService = class {
13830
14095
  return spokeProvider.walletProvider.sendTransaction(tx);
13831
14096
  }
13832
14097
  };
14098
+ var BridgeService = class {
14099
+ hubProvider;
14100
+ relayerApiEndpoint;
14101
+ config;
14102
+ constructor(hubProvider, relayerApiEndpoint, config = void 0) {
14103
+ this.config = config ? config : { partnerFee: void 0 };
14104
+ this.hubProvider = hubProvider;
14105
+ this.relayerApiEndpoint = relayerApiEndpoint;
14106
+ }
14107
+ /**
14108
+ * Get the fee for a given input amount
14109
+ * @param {bigint} inputAmount - The amount of input tokens
14110
+ * @returns {Promise<bigint>} The fee amount (denominated in input tokens)
14111
+ *
14112
+ * @example
14113
+ * const fee: bigint = await sodax.bridge.getFee(1000000000000000n);
14114
+ * console.log('Fee:', fee);
14115
+ */
14116
+ getFee(inputAmount) {
14117
+ if (!this.config.partnerFee) {
14118
+ return 0n;
14119
+ }
14120
+ return calculateFeeAmount(inputAmount, this.config.partnerFee);
14121
+ }
14122
+ /**
14123
+ * Check if allowance is valid for the bridge transaction
14124
+ * @param params - The bridge parameters
14125
+ * @param spokeProvider - The spoke provider
14126
+ * @returns {Promise<Result<boolean, BridgeError<'ALLOWANCE_CHECK_FAILED'>>>}
14127
+ */
14128
+ async isAllowanceValid({
14129
+ params,
14130
+ spokeProvider
14131
+ }) {
14132
+ try {
14133
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
14134
+ invariant12(params.srcAsset.length > 0, "Source asset is required");
14135
+ const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
14136
+ if (spokeProvider instanceof EvmSpokeProvider) {
14137
+ invariant12(isAddress(params.srcAsset), "Invalid source asset address for EVM chain");
14138
+ const allowanceResult = await Erc20Service.isAllowanceValid(
14139
+ params.srcAsset,
14140
+ params.amount,
14141
+ walletAddress,
14142
+ spokeProvider.chainConfig.addresses.assetManager,
14143
+ spokeProvider
14144
+ );
14145
+ if (!allowanceResult.ok) {
14146
+ return {
14147
+ ok: false,
14148
+ error: {
14149
+ code: "ALLOWANCE_CHECK_FAILED",
14150
+ error: allowanceResult.error
14151
+ }
14152
+ };
14153
+ }
14154
+ return {
14155
+ ok: true,
14156
+ value: allowanceResult.value
14157
+ };
14158
+ }
14159
+ if (spokeProvider instanceof SonicSpokeProvider) {
14160
+ invariant12(isAddress(params.srcAsset), "Invalid source asset address for Sonic chain");
14161
+ const userRouter = await SonicSpokeService.getUserRouter(walletAddress, spokeProvider);
14162
+ const allowanceResult = await Erc20Service.isAllowanceValid(
14163
+ params.srcAsset,
14164
+ params.amount,
14165
+ walletAddress,
14166
+ userRouter,
14167
+ spokeProvider
14168
+ );
14169
+ if (!allowanceResult.ok) {
14170
+ return {
14171
+ ok: false,
14172
+ error: {
14173
+ code: "ALLOWANCE_CHECK_FAILED",
14174
+ error: allowanceResult.error
14175
+ }
14176
+ };
14177
+ }
14178
+ return {
14179
+ ok: true,
14180
+ value: allowanceResult.value
14181
+ };
14182
+ }
14183
+ return {
14184
+ ok: true,
14185
+ value: true
14186
+ };
14187
+ } catch (error) {
14188
+ return {
14189
+ ok: false,
14190
+ error: {
14191
+ code: "ALLOWANCE_CHECK_FAILED",
14192
+ error
14193
+ }
14194
+ };
14195
+ }
14196
+ }
14197
+ /**
14198
+ * Approve token spending for the bridge transaction
14199
+ * @param params - The bridge parameters
14200
+ * @param spokeProvider - The spoke provider
14201
+ * @param raw - Whether to return raw transaction data
14202
+ * @returns Promise<Result<TxReturnType<S, R>, BridgeError<'APPROVAL_FAILED'>>>
14203
+ */
14204
+ async approve({
14205
+ params,
14206
+ spokeProvider,
14207
+ raw
14208
+ }) {
14209
+ try {
14210
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
14211
+ invariant12(params.srcAsset.length > 0, "Source asset is required");
14212
+ const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
14213
+ if (spokeProvider instanceof EvmSpokeProvider) {
14214
+ invariant12(isAddress(params.srcAsset), "Invalid source asset address for EVM chain");
14215
+ const result = await Erc20Service.approve(
14216
+ params.srcAsset,
14217
+ params.amount,
14218
+ spokeProvider.chainConfig.addresses.assetManager,
14219
+ spokeProvider,
14220
+ raw
14221
+ );
14222
+ return {
14223
+ ok: true,
14224
+ value: result
14225
+ };
14226
+ }
14227
+ if (spokeProvider instanceof SonicSpokeProvider) {
14228
+ invariant12(isAddress(params.srcAsset), "Invalid source asset address for Sonic chain");
14229
+ const userRouter = await SonicSpokeService.getUserRouter(
14230
+ walletAddress,
14231
+ spokeProvider
14232
+ );
14233
+ const result = await Erc20Service.approve(params.srcAsset, params.amount, userRouter, spokeProvider, raw);
14234
+ return {
14235
+ ok: true,
14236
+ value: result
14237
+ };
14238
+ }
14239
+ return {
14240
+ ok: false,
14241
+ error: {
14242
+ code: "APPROVAL_FAILED",
14243
+ error: new Error("Approval only supported for EVM spoke chains")
14244
+ }
14245
+ };
14246
+ } catch (error) {
14247
+ console.error(error);
14248
+ return {
14249
+ ok: false,
14250
+ error: {
14251
+ code: "APPROVAL_FAILED",
14252
+ error
14253
+ }
14254
+ };
14255
+ }
14256
+ }
14257
+ /**
14258
+ * Execute a bridge transaction to transfer tokens from one chain to another
14259
+ * @param params - The bridge parameters including source/destination chains, assets, and recipient
14260
+ * @param spokeProvider - The spoke provider for the source chain
14261
+ * @param timeout - The timeout in milliseconds for the transaction. Default is 60 seconds.
14262
+ * @returns {Promise<Result<[SpokeTxHash, HubTxHash], BridgeError<BridgeErrorCode>>>} - Returns the transaction hashes for both spoke and hub chains or error
14263
+ *
14264
+ * @example
14265
+ * const result = await sodax.bridge.bridge(
14266
+ * {
14267
+ * srcChainId: '0x2105.base',
14268
+ * srcAsset: '0x...', // Address of the source token
14269
+ * amount: 1000n, // Amount to bridge (in token decimals)
14270
+ * dstChainId: '0x89.polygon',
14271
+ * dstAsset: '0x...', // Address of the destination token
14272
+ * recipient: '0x...', // Recipient address on destination chain
14273
+ * partnerFee: { address: '0x...', percentage: 0.1 } // Optional partner fee. Partner fees and denominated in vault token decimals (18)
14274
+ * },
14275
+ * spokeProvider,
14276
+ * 30000 // Optional timeout in milliseconds (default: 60000, i.e. 60 seconds)
14277
+ * );
14278
+ *
14279
+ * if (!result.ok) {
14280
+ * // Handle error
14281
+ * }
14282
+ *
14283
+ * const [
14284
+ * spokeTxHash, // transaction hash on the source chain
14285
+ * hubTxHash, // transaction hash on the hub chain
14286
+ * ] = result.value;
14287
+ * console.log('Bridge transaction hashes:', { spokeTxHash, hubTxHash });
14288
+ */
14289
+ async bridge({
14290
+ params,
14291
+ spokeProvider,
14292
+ fee = this.config.partnerFee,
14293
+ timeout = DEFAULT_RELAY_TX_TIMEOUT
14294
+ }) {
14295
+ try {
14296
+ const txResult = await this.createBridgeIntent({ params, spokeProvider, fee, raw: false });
14297
+ if (!txResult.ok) {
14298
+ return txResult;
14299
+ }
14300
+ const packetResult = await relayTxAndWaitPacket(
14301
+ txResult.value,
14302
+ spokeProvider instanceof SolanaSpokeProvider ? txResult.data : void 0,
14303
+ spokeProvider,
14304
+ this.relayerApiEndpoint,
14305
+ timeout
14306
+ );
14307
+ if (!packetResult.ok) {
14308
+ return {
14309
+ ok: false,
14310
+ error: {
14311
+ code: packetResult.error.code,
14312
+ error: packetResult.error
14313
+ }
14314
+ };
14315
+ }
14316
+ return { ok: true, value: [txResult.value, packetResult.value.dst_tx_hash] };
14317
+ } catch (error) {
14318
+ return {
14319
+ ok: false,
14320
+ error: {
14321
+ code: "BRIDGE_FAILED",
14322
+ error
14323
+ }
14324
+ };
14325
+ }
14326
+ }
14327
+ /**
14328
+ * Create bridge intent only (without relaying to hub)
14329
+ * NOTE: This method only executes the transaction on the spoke chain and creates the bridge intent
14330
+ * In order to successfully bridge tokens, you need to:
14331
+ * 1. Check if the allowance is sufficient using isAllowanceValid
14332
+ * 2. Approve the appropriate contract to spend the tokens using approve
14333
+ * 3. Create the bridge intent using this method
14334
+ * 4. Relay the transaction to the hub and await completion using the bridge method
14335
+ *
14336
+ * @param params - The bridge parameters including source/destination chains, assets, and recipient
14337
+ * @param spokeProvider - The spoke provider for the source chain
14338
+ * @param raw - Whether to return the raw transaction data
14339
+ * @returns {Promise<Result<TxReturnType<S, R>, BridgeError<BridgeErrorCode>>>} - Returns the transaction result
14340
+ *
14341
+ * @example
14342
+ * const bridgeService = new BridgeService(hubProvider, relayerApiEndpoint);
14343
+ * const result = await sodax.bridge.createBridgeIntent(
14344
+ * {
14345
+ * srcChainId: 'ethereum',
14346
+ * srcAsset: "0x123...", // source token address
14347
+ * amount: 1000000000000000000n, // 1 token in wei
14348
+ * dstChainId: 'polygon',
14349
+ * dstAsset: "0x456...", // destination token address
14350
+ * recipient: "0x789..." // recipient address
14351
+ * },
14352
+ * spokeProvider,
14353
+ * raw // Optional: true = return the raw transaction data, false = execute and return the transaction hash (default: false)
14354
+ * );
14355
+ *
14356
+ * if (result.ok) {
14357
+ * const txHash = result.value;
14358
+ * console.log('Bridge intent transaction hash:', txHash);
14359
+ * } else {
14360
+ * console.error('Bridge intent creation failed:', result.error);
14361
+ * }
14362
+ */
14363
+ async createBridgeIntent({
14364
+ params,
14365
+ spokeProvider,
14366
+ fee = this.config.partnerFee,
14367
+ raw
14368
+ }) {
14369
+ try {
14370
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
14371
+ const srcAssetInfo = getHubAssetInfo(params.srcChainId, params.srcAsset);
14372
+ const dstAssetInfo = getHubAssetInfo(params.dstChainId, params.dstAsset);
14373
+ invariant12(srcAssetInfo, `Unsupported spoke chain (${params.srcChainId}) token: ${params.srcAsset}`);
14374
+ invariant12(dstAssetInfo, `Unsupported spoke chain (${params.dstChainId}) token: ${params.dstAsset}`);
14375
+ const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
14376
+ const hubWallet = await WalletAbstractionService.getUserAbstractedWalletAddress(
14377
+ walletAddress,
14378
+ spokeProvider,
14379
+ this.hubProvider
14380
+ );
14381
+ const data = this.buildBridgeData(params, srcAssetInfo, dstAssetInfo, fee);
14382
+ const txResult = await SpokeService.deposit(
14383
+ {
14384
+ from: walletAddress,
14385
+ to: hubWallet,
14386
+ token: params.srcAsset,
14387
+ amount: params.amount,
14388
+ data
14389
+ },
14390
+ spokeProvider,
14391
+ this.hubProvider,
14392
+ raw
14393
+ );
14394
+ return {
14395
+ ok: true,
14396
+ value: txResult,
14397
+ data: {
14398
+ address: hubWallet,
14399
+ payload: data
14400
+ }
14401
+ };
14402
+ } catch (error) {
14403
+ console.error(error);
14404
+ return {
14405
+ ok: false,
14406
+ error: {
14407
+ code: "CREATE_BRIDGE_INTENT_FAILED",
14408
+ error
14409
+ }
14410
+ };
14411
+ }
14412
+ }
14413
+ /**
14414
+ * Build the bridge transaction data for executing the bridge operation on the hub
14415
+ * @param params - The create bridge intent parameters
14416
+ * @param srcAssetInfo - The source asset information
14417
+ * @param dstAssetInfo - The destination asset information
14418
+ * @returns Hex - The encoded contract calls for the bridge operation
14419
+ */
14420
+ buildBridgeData(params, srcAssetInfo, dstAssetInfo, partnerFee) {
14421
+ const calls = [];
14422
+ let translatedAmount = params.amount;
14423
+ let srcVault = params.srcAsset;
14424
+ if (!isValidVault(srcAssetInfo.asset)) {
14425
+ calls.push(Erc20Service.encodeApprove(srcAssetInfo.asset, srcAssetInfo.vault, params.amount));
14426
+ calls.push(EvmVaultTokenService.encodeDeposit(srcAssetInfo.vault, srcAssetInfo.asset, params.amount));
14427
+ translatedAmount = EvmVaultTokenService.translateIncomingDecimals(srcAssetInfo.decimal, params.amount);
14428
+ srcVault = srcAssetInfo.vault;
14429
+ }
14430
+ const feeAmount = calculateFeeAmount(translatedAmount, partnerFee);
14431
+ if (partnerFee && feeAmount > 0n) {
14432
+ calls.push(Erc20Service.encodeTransfer(srcVault, partnerFee.address, feeAmount));
14433
+ }
14434
+ const withdrawAmount = translatedAmount - feeAmount;
14435
+ let translatedWithdrawAmount = withdrawAmount;
14436
+ if (!isValidVault(dstAssetInfo.asset)) {
14437
+ calls.push(EvmVaultTokenService.encodeWithdraw(dstAssetInfo.vault, dstAssetInfo.asset, withdrawAmount));
14438
+ translatedWithdrawAmount = EvmVaultTokenService.translateOutgoingDecimals(dstAssetInfo.decimal, withdrawAmount);
14439
+ }
14440
+ const encodedRecipientAddress = encodeAddress(params.dstChainId, params.recipient);
14441
+ if (params.dstChainId === this.hubProvider.chainConfig.chain.id) {
14442
+ calls.push(Erc20Service.encodeTransfer(dstAssetInfo.asset, encodedRecipientAddress, translatedWithdrawAmount));
14443
+ } else {
14444
+ invariant12(dstAssetInfo, `Unsupported hub chain (${params.dstChainId}) token: ${params.dstAsset}`);
14445
+ calls.push(
14446
+ EvmAssetManagerService.encodeTransfer(
14447
+ dstAssetInfo.asset,
14448
+ encodedRecipientAddress,
14449
+ translatedWithdrawAmount,
14450
+ this.hubProvider.chainConfig.addresses.assetManager
14451
+ )
14452
+ );
14453
+ }
14454
+ return encodeContractCalls(calls);
14455
+ }
14456
+ /**
14457
+ * Retrieves the deposited token balance held by the asset manager on a spoke chain.
14458
+ * This balance represents the available liquidity for bridging operations and is used to verify
14459
+ * that the target chain has sufficient funds to complete a bridge transaction.
14460
+ *
14461
+ * @param spokeProvider - The spoke provider instance
14462
+ * @param token - The token address to query the balance for
14463
+ * @returns {Promise<bigint>} - The token balance as a bigint value
14464
+ */
14465
+ async getBridgeableAmount(from, to) {
14466
+ try {
14467
+ const fromHubAsset = getHubAssetInfo(from.xChainId, from.address);
14468
+ const toHubAsset = getHubAssetInfo(to.xChainId, to.address);
14469
+ invariant12(fromHubAsset, `Hub asset not found for token ${from.address} on chain ${from.xChainId}`);
14470
+ invariant12(toHubAsset, `Hub asset not found for token ${to.address} on chain ${to.xChainId}`);
14471
+ const [depositTokenInfo, reserves] = await Promise.all([
14472
+ EvmVaultTokenService.getTokenInfo(fromHubAsset.vault, fromHubAsset.asset, this.hubProvider.publicClient),
14473
+ EvmVaultTokenService.getVaultReserves(toHubAsset.vault, this.hubProvider.publicClient)
14474
+ ]);
14475
+ if (!isValidVault(fromHubAsset.asset) && isValidVault(toHubAsset.asset)) {
14476
+ const fromTokenIndex2 = reserves.tokens.findIndex((t) => t.toLowerCase() === fromHubAsset.asset.toLowerCase());
14477
+ invariant12(
14478
+ fromTokenIndex2 !== -1,
14479
+ `Token ${fromHubAsset.asset} not found in the vault reserves for chain ${from.xChainId}`
14480
+ );
14481
+ const fromTokenDepositedAmount2 = reserves.balances[fromTokenIndex2] ?? 0n;
14482
+ const availableDeposit2 = depositTokenInfo.maxDeposit - fromTokenDepositedAmount2;
14483
+ return {
14484
+ ok: true,
14485
+ value: availableDeposit2
14486
+ };
14487
+ }
14488
+ if (isValidVault(fromHubAsset.asset)) {
14489
+ const tokenIndex2 = reserves.tokens.findIndex((t) => t.toLowerCase() === toHubAsset.asset.toLowerCase());
14490
+ invariant12(
14491
+ tokenIndex2 !== -1,
14492
+ `Token ${toHubAsset.asset} not found in the vault reserves for chain ${to.xChainId}`
14493
+ );
14494
+ const assetManagerBalance2 = reserves.balances[tokenIndex2] ?? 0n;
14495
+ return {
14496
+ ok: true,
14497
+ value: assetManagerBalance2
14498
+ };
14499
+ }
14500
+ const fromTokenIndex = reserves.tokens.findIndex((t) => t.toLowerCase() === fromHubAsset.asset.toLowerCase());
14501
+ invariant12(
14502
+ fromTokenIndex !== -1,
14503
+ `Token ${fromHubAsset.asset} not found in the vault reserves for chain ${from.xChainId}`
14504
+ );
14505
+ const fromTokenDepositedAmount = reserves.balances[fromTokenIndex] ?? 0n;
14506
+ const availableDeposit = depositTokenInfo.maxDeposit - fromTokenDepositedAmount;
14507
+ const tokenIndex = reserves.tokens.findIndex((t) => t.toLowerCase() === toHubAsset.asset.toLowerCase());
14508
+ invariant12(
14509
+ tokenIndex !== -1,
14510
+ `Token ${toHubAsset.asset} not found in the vault reserves for chain ${to.xChainId}`
14511
+ );
14512
+ const assetManagerBalance = reserves.balances[tokenIndex] ?? 0n;
14513
+ return {
14514
+ ok: true,
14515
+ value: availableDeposit < assetManagerBalance ? availableDeposit : assetManagerBalance
14516
+ };
14517
+ } catch (error) {
14518
+ console.error(error);
14519
+ return {
14520
+ ok: false,
14521
+ error
14522
+ };
14523
+ }
14524
+ }
14525
+ /**
14526
+ * Check if two assets on different chains are bridgeable
14527
+ * Two assets are bridgeable if they share the same vault on the hub chain
14528
+ * @param from - The source X token
14529
+ * @param to - The destination X token
14530
+ * @param unchecked - Whether to skip the chain ID validation
14531
+ * @returns boolean - true if assets are bridgeable, false otherwise
14532
+ */
14533
+ isBridgeable({
14534
+ from,
14535
+ to,
14536
+ unchecked = false
14537
+ }) {
14538
+ try {
14539
+ if (!unchecked) {
14540
+ invariant12(isValidSpokeChainId(from.xChainId), `Invalid spoke chain (${from.xChainId})`);
14541
+ invariant12(isValidSpokeChainId(to.xChainId), `Invalid spoke chain (${to.xChainId})`);
14542
+ }
14543
+ const srcAssetInfo = getHubAssetInfo(from.xChainId, from.address);
14544
+ const dstAssetInfo = getHubAssetInfo(to.xChainId, to.address);
14545
+ invariant12(srcAssetInfo, `Hub asset not found for token ${from.address} on chain ${from.xChainId}`);
14546
+ invariant12(dstAssetInfo, `Hub asset not found for token ${to.address} on chain ${to.xChainId}`);
14547
+ return srcAssetInfo.vault.toLowerCase() === dstAssetInfo.vault.toLowerCase();
14548
+ } catch (error) {
14549
+ console.error(error);
14550
+ return false;
14551
+ }
14552
+ }
14553
+ /**
14554
+ * Get all bridgeable tokens from a source token to a destination chain
14555
+ * @param from - The source chain ID
14556
+ * @param to - The destination chain ID
14557
+ * @param token - The source token address
14558
+ * @returns XToken[] - Array of bridgeable tokens on the destination chain
14559
+ */
14560
+ getBridgeableTokens(from, to, token) {
14561
+ try {
14562
+ const srcAssetInfo = getHubAssetInfo(from, token);
14563
+ invariant12(srcAssetInfo, `Hub asset not found for token ${token} on chain ${from}`);
14564
+ return {
14565
+ ok: true,
14566
+ value: this.filterTokensWithSameVault(spokeChainConfig[to].supportedTokens, to, srcAssetInfo)
14567
+ };
14568
+ } catch (error) {
14569
+ return {
14570
+ ok: false,
14571
+ error
14572
+ };
14573
+ }
14574
+ }
14575
+ filterTokensWithSameVault(tokens, to, srcAssetInfo) {
14576
+ const bridgeableTokens = [];
14577
+ for (const token of Object.values(tokens)) {
14578
+ const dstAssetInfo = getHubAssetInfo(to, token.address);
14579
+ if (dstAssetInfo && srcAssetInfo && dstAssetInfo.vault.toLowerCase() === srcAssetInfo.vault.toLowerCase()) {
14580
+ bridgeableTokens.push({
14581
+ ...token,
14582
+ xChainId: to
14583
+ });
14584
+ }
14585
+ }
14586
+ return bridgeableTokens;
14587
+ }
14588
+ };
13833
14589
 
13834
14590
  // src/entities/Sodax.ts
13835
14591
  var Sodax = class {
@@ -13840,6 +14596,8 @@ var Sodax = class {
13840
14596
  // Money Market service enabling cross-chain lending and borrowing
13841
14597
  migration;
13842
14598
  // ICX migration service enabling ICX migration to SODA
14599
+ bridge;
14600
+ // Bridge service enabling cross-chain transfers
13843
14601
  hubProvider;
13844
14602
  // hub provider for the hub chain (e.g. Sonic mainnet)
13845
14603
  relayerApiEndpoint;
@@ -13851,6 +14609,7 @@ var Sodax = class {
13851
14609
  this.solver = config && config.solver ? new SolverService(config.solver, this.hubProvider, this.relayerApiEndpoint) : new SolverService(void 0, this.hubProvider, this.relayerApiEndpoint);
13852
14610
  this.moneyMarket = config && config.moneyMarket ? new MoneyMarketService(config.moneyMarket, this.hubProvider, this.relayerApiEndpoint) : new MoneyMarketService(void 0, this.hubProvider, this.relayerApiEndpoint);
13853
14611
  this.migration = config && config.migration ? new MigrationService(this.hubProvider, config.migration) : new MigrationService(this.hubProvider);
14612
+ this.bridge = config && config.bridge ? new BridgeService(this.hubProvider, this.relayerApiEndpoint, config.bridge) : new BridgeService(this.hubProvider, this.relayerApiEndpoint);
13854
14613
  }
13855
14614
  };
13856
14615
 
@@ -13917,16 +14676,16 @@ function calculateFeeAmount(inputAmount, fee) {
13917
14676
  if (!fee) {
13918
14677
  return 0n;
13919
14678
  }
13920
- invariant11(inputAmount > 0n, "Input amount must be greater than 0");
14679
+ invariant12(inputAmount > 0n, "Input amount must be greater than 0");
13921
14680
  let feeAmount = 0n;
13922
14681
  if (isPartnerFeeAmount(fee)) {
13923
- invariant11(
14682
+ invariant12(
13924
14683
  fee.amount >= 0 && fee.amount <= inputAmount,
13925
14684
  `Fee amount must be greater than 0 and less than or equal to the input amount: ${fee.amount}`
13926
14685
  );
13927
14686
  feeAmount = fee.amount;
13928
14687
  } else if (isPartnerFeePercentage(fee)) {
13929
- invariant11(
14688
+ invariant12(
13930
14689
  fee.percentage >= 0 && fee.percentage <= FEE_PERCENTAGE_SCALE,
13931
14690
  `Fee percentage must be between 0 and ${FEE_PERCENTAGE_SCALE}}`
13932
14691
  );
@@ -13935,8 +14694,8 @@ function calculateFeeAmount(inputAmount, fee) {
13935
14694
  return feeAmount;
13936
14695
  }
13937
14696
  function adjustAmountByFee(amount, fee, quoteType) {
13938
- invariant11(amount > 0n, "Amount must be greater than 0");
13939
- invariant11(quoteType === "exact_input" || quoteType === "exact_output", "Invalid quote type");
14697
+ invariant12(amount > 0n, "Amount must be greater than 0");
14698
+ invariant12(quoteType === "exact_input" || quoteType === "exact_output", "Invalid quote type");
13940
14699
  if (quoteType === "exact_input") {
13941
14700
  return amount - calculateFeeAmount(amount, fee);
13942
14701
  }
@@ -15511,9 +16270,9 @@ var MoneyMarketService = class _MoneyMarketService {
15511
16270
  */
15512
16271
  async isAllowanceValid(params, spokeProvider) {
15513
16272
  try {
15514
- invariant11(params.amount > 0n, "Amount must be greater than 0");
15515
- invariant11(params.token.length > 0, "Token is required");
15516
- invariant11(
16273
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
16274
+ invariant12(params.token.length > 0, "Token is required");
16275
+ invariant12(
15517
16276
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
15518
16277
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
15519
16278
  );
@@ -15608,19 +16367,19 @@ var MoneyMarketService = class _MoneyMarketService {
15608
16367
  */
15609
16368
  async approve(params, spokeProvider, raw) {
15610
16369
  try {
15611
- invariant11(params.amount > 0n, "Amount must be greater than 0");
15612
- invariant11(params.token.length > 0, "Token is required");
15613
- invariant11(
16370
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
16371
+ invariant12(params.token.length > 0, "Token is required");
16372
+ invariant12(
15614
16373
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
15615
16374
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
15616
16375
  );
15617
16376
  const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
15618
16377
  if (spokeProvider instanceof EvmSpokeProvider) {
15619
- invariant11(
16378
+ invariant12(
15620
16379
  params.action === "supply" || params.action === "repay",
15621
16380
  "Invalid action (only supply and repay are supported on evm)"
15622
16381
  );
15623
- invariant11(isAddress(params.token), "Invalid token address");
16382
+ invariant12(isAddress(params.token), "Invalid token address");
15624
16383
  const result = await Erc20Service.approve(
15625
16384
  params.token,
15626
16385
  params.amount,
@@ -15634,11 +16393,11 @@ var MoneyMarketService = class _MoneyMarketService {
15634
16393
  };
15635
16394
  }
15636
16395
  if (spokeProvider instanceof SonicSpokeProvider && spokeProvider.chainConfig.chain.id === this.hubProvider.chainConfig.chain.id) {
15637
- invariant11(
16396
+ invariant12(
15638
16397
  params.action === "withdraw" || params.action === "borrow" || params.action === "supply" || params.action === "repay",
15639
16398
  "Invalid action (only withdraw, borrow, supply and repay are supported on sonic)"
15640
16399
  );
15641
- invariant11(isAddress(params.token), "Invalid token address");
16400
+ invariant12(isAddress(params.token), "Invalid token address");
15642
16401
  if (params.action === "withdraw") {
15643
16402
  const withdrawInfo = await SonicSpokeService.getWithdrawInfo(
15644
16403
  params.token,
@@ -15810,10 +16569,10 @@ var MoneyMarketService = class _MoneyMarketService {
15810
16569
  */
15811
16570
  async createSupplyIntent(params, spokeProvider, raw) {
15812
16571
  try {
15813
- invariant11(params.action === "supply", "Invalid action");
15814
- invariant11(params.token.length > 0, "Token is required");
15815
- invariant11(params.amount > 0n, "Amount must be greater than 0");
15816
- invariant11(
16572
+ invariant12(params.action === "supply", "Invalid action");
16573
+ invariant12(params.token.length > 0, "Token is required");
16574
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
16575
+ invariant12(
15817
16576
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
15818
16577
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
15819
16578
  );
@@ -15975,10 +16734,10 @@ var MoneyMarketService = class _MoneyMarketService {
15975
16734
  * }
15976
16735
  */
15977
16736
  async createBorrowIntent(params, spokeProvider, raw) {
15978
- invariant11(params.action === "borrow", "Invalid action");
15979
- invariant11(params.token.length > 0, "Token is required");
15980
- invariant11(params.amount > 0n, "Amount must be greater than 0");
15981
- invariant11(
16737
+ invariant12(params.action === "borrow", "Invalid action");
16738
+ invariant12(params.token.length > 0, "Token is required");
16739
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
16740
+ invariant12(
15982
16741
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
15983
16742
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
15984
16743
  );
@@ -16111,10 +16870,10 @@ var MoneyMarketService = class _MoneyMarketService {
16111
16870
  * }
16112
16871
  */
16113
16872
  async createWithdrawIntent(params, spokeProvider, raw) {
16114
- invariant11(params.action === "withdraw", "Invalid action");
16115
- invariant11(params.token.length > 0, "Token is required");
16116
- invariant11(params.amount > 0n, "Amount must be greater than 0");
16117
- invariant11(
16873
+ invariant12(params.action === "withdraw", "Invalid action");
16874
+ invariant12(params.token.length > 0, "Token is required");
16875
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
16876
+ invariant12(
16118
16877
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
16119
16878
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
16120
16879
  );
@@ -16262,10 +17021,10 @@ var MoneyMarketService = class _MoneyMarketService {
16262
17021
  * }
16263
17022
  */
16264
17023
  async createRepayIntent(params, spokeProvider, raw) {
16265
- invariant11(params.action === "repay", "Invalid action");
16266
- invariant11(params.token.length > 0, "Token is required");
16267
- invariant11(params.amount > 0n, "Amount must be greater than 0");
16268
- invariant11(
17024
+ invariant12(params.action === "repay", "Invalid action");
17025
+ invariant12(params.token.length > 0, "Token is required");
17026
+ invariant12(params.amount > 0n, "Amount must be greater than 0");
17027
+ invariant12(
16269
17028
  isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
16270
17029
  `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
16271
17030
  );
@@ -16318,7 +17077,7 @@ var MoneyMarketService = class _MoneyMarketService {
16318
17077
  buildSupplyData(token, to, amount, spokeChainId) {
16319
17078
  const calls = [];
16320
17079
  const assetConfig = getHubAssetInfo(spokeChainId, token);
16321
- invariant11(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);
17080
+ invariant12(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);
16322
17081
  let assetAddress = assetConfig.asset;
16323
17082
  const vaultAddress = assetConfig.vault;
16324
17083
  const lendingPool = this.config.lendingPool;
@@ -16349,13 +17108,13 @@ var MoneyMarketService = class _MoneyMarketService {
16349
17108
  * @returns {Hex} The transaction data.
16350
17109
  */
16351
17110
  buildBorrowData(from, to, token, amount, spokeChainId) {
16352
- invariant11(isValidSpokeChainId(spokeChainId), `Invalid spokeChainId: ${spokeChainId}`);
16353
- invariant11(
17111
+ invariant12(isValidSpokeChainId(spokeChainId), `Invalid spokeChainId: ${spokeChainId}`);
17112
+ invariant12(
16354
17113
  isValidOriginalAssetAddress(spokeChainId, token),
16355
17114
  `Unsupported spoke chain (${spokeChainId}) token: ${token}`
16356
17115
  );
16357
17116
  const assetConfig = getHubAssetInfo(spokeChainId, token);
16358
- invariant11(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);
17117
+ invariant12(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);
16359
17118
  let assetAddress = assetConfig.asset;
16360
17119
  const vaultAddress = assetConfig.vault;
16361
17120
  const bnUSDVault = this.config.bnUSDVault;
@@ -16679,6 +17438,6 @@ var SolverIntentErrorCode = /* @__PURE__ */ ((SolverIntentErrorCode2) => {
16679
17438
  return SolverIntentErrorCode2;
16680
17439
  })(SolverIntentErrorCode || {});
16681
17440
 
16682
- export { BalnSwapService, BigIntToHex, BigNumberZeroDecimal, BnUSDMigrationService, ChainIdToIntentRelayChainId, DEFAULT_DEADLINE_OFFSET, DEFAULT_MAX_RETRY, DEFAULT_RELAYER_API_ENDPOINT, DEFAULT_RELAY_TX_TIMEOUT, DEFAULT_RETRY_DELAY_MS, EVM_CHAIN_IDS, EVM_SPOKE_CHAIN_IDS, Erc20Service, EvmAssetManagerService, EvmHubProvider, EvmSolverService, EvmSpokeProvider, EvmSpokeService, EvmVaultTokenService, EvmWalletAbstraction, FEE_PERCENTAGE_SCALE, HALF_RAY, HALF_WAD, HubVaultSymbols, ICON_TX_RESULT_WAIT_MAX_RETRY, INTENT_RELAY_CHAIN_IDS, IconSpokeProvider, IcxMigrationService, InjectiveSpokeProvider, IntentCreatedEventAbi, IntentDataType, IntentsAbi, LTV_PRECISION, LendingPoolService, LockupMultiplier, LockupPeriod, MAX_UINT256, MigrationService, MoneyMarketDataService, MoneyMarketService, RAY, RAY_DECIMALS, SECONDS_PER_YEAR, STELLAR_DEFAULT_TX_TIMEOUT_SECONDS, STELLAR_PRIORITY_FEE, Sodax, SolanaSpokeProvider, SolverIntentErrorCode, SolverIntentStatusCode, SolverService, SonicSpokeProvider, SonicSpokeService, SpokeService, StellarSpokeProvider, SuiSpokeProvider, SuiSpokeService, SupportedMigrationTokens, USD_DECIMALS, UiPoolDataProviderService, VAULT_TOKEN_DECIMALS, WAD, WAD_RAY_RATIO, WEI_DECIMALS, WalletAbstractionService, adjustAmountByFee, assetManagerAbi, balnSwapAbi, binomialApproximatedRayPow, bnUSDLegacySpokeChainIds, bnUSDLegacyTokens, bnUSDNewTokens, calculateAllReserveIncentives, calculateAllUserIncentives, calculateAvailableBorrowsMarketReferenceCurrency, calculateCompoundedInterest, calculateCompoundedRate, calculateFeeAmount, calculateHealthFactorFromBalances, calculateHealthFactorFromBalancesBigUnits, calculateLinearInterest, calculatePercentageFeeAmount, chainIdToHubAssetsMap, connectionAbi, deriveUserWalletAddress, encodeAddress, encodeContractCalls, erc20Abi, formatBasisPoints, formatEModeCategory, formatEModes, formatPercentage, formatReserve, formatReserveUSD, formatReserves, formatReservesAndIncentives, formatUserSummary, formatUserSummaryAndIncentives, getAllLegacybnUSDTokens, getAndFormatReserveEModes, getCompoundedBalance, getEvmViemChain, getHubAssetInfo, getHubChainConfig, getIconAddressBytes, getIntentRelayChainId, getLinearBalance, getMarketReferenceCurrencyAndUsdBalance, getMoneyMarketConfig, getOriginalAssetAddress, getPacket, getRandomBytes, getReserveNormalizedIncome, getReservesEModes, getSolanaAddressBytes, getSolverConfig, getSpokeChainIdFromIntentRelayChainId, getSupportedMoneyMarketTokens, getSupportedSolverTokens, getTransactionPackets, hexToBigInt, hubAssetToOriginalAssetMap, hubAssets, hubVaults, hubVaultsAddressSet, intentRelayChainIdToSpokeChainIdMap, isBalnMigrateParams, isConfiguredMoneyMarketConfig, isConfiguredSolverConfig, isEvmHubChainConfig, isEvmInitializedConfig, isEvmSpokeChainConfig, isEvmSpokeProvider, isEvmUninitializedBrowserConfig, isEvmUninitializedConfig, isEvmUninitializedPrivateKeyConfig, isIconAddress, isIconSpokeProvider, isIcxCreateRevertMigrationParams, isIcxMigrateParams, isInjectiveSpokeProvider, isIntentCreationFailedError, isIntentCreationUnknownError, isIntentPostExecutionFailedError, isIntentRelayChainId, isIntentSubmitTxFailedError, isJsonRpcPayloadResponse, isLegacybnUSDChainId, isLegacybnUSDToken, isMoneyMarketBorrowUnknownError, isMoneyMarketCreateBorrowIntentFailedError, isMoneyMarketCreateRepayIntentFailedError, isMoneyMarketCreateSupplyIntentFailedError, isMoneyMarketCreateWithdrawIntentFailedError, isMoneyMarketRelayTimeoutError, isMoneyMarketRepayUnknownError, isMoneyMarketReserveAsset, isMoneyMarketReserveHubAsset, isMoneyMarketSubmitTxFailedError, isMoneyMarketSupplyUnknownError, isMoneyMarketSupportedToken, isMoneyMarketWithdrawUnknownError, isNativeToken, isNewbnUSDChainId, isNewbnUSDToken, isPartnerFeeAmount, isPartnerFeePercentage, isResponseAddressType, isResponseSigningType, isSolanaSpokeProvider, isSolverSupportedToken, isSonicSpokeProvider, isStellarSpokeProvider, isSuiSpokeProvider, isUnifiedBnUSDMigrateParams, isValidChainHubAsset, isValidHubAsset, isValidIntentRelayChainId, isValidOriginalAssetAddress, isValidSpokeChainId, isWaitUntilIntentExecutedFailed, moneyMarketReserveAssets, moneyMarketReserveHubAssetsSet, moneyMarketSupportedTokens, nativeToUSD, newbnUSDSpokeChainIds, normalize, normalizeBN, normalizedToUsd, originalAssetTohubAssetMap, poolAbi, randomUint256, rayDiv, rayMul, rayPow, rayToWad, relayTxAndWaitPacket, requestAddress, requestJsonRpc, requestSigning, retry, sonicWalletFactoryAbi, spokeAssetManagerAbi, spokeChainConfig, spokeChainIdsSet, submitTransaction, supportedHubAssets, supportedHubChains, supportedSpokeChains, supportedTokensPerChain, uiPoolDataAbi, valueToBigNumber, valueToZDBigNumber, variableDebtTokenAbi, vaultTokenAbi, wadToRay, waitForTransactionReceipt, waitUntilIntentExecuted, walletFactoryAbi, wrappedSonicAbi };
17441
+ export { BalnSwapService, BigIntToHex, BigNumberZeroDecimal, BnUSDMigrationService, BridgeService, ChainIdToIntentRelayChainId, DEFAULT_DEADLINE_OFFSET, DEFAULT_MAX_RETRY, DEFAULT_RELAYER_API_ENDPOINT, DEFAULT_RELAY_TX_TIMEOUT, DEFAULT_RETRY_DELAY_MS, EVM_CHAIN_IDS, EVM_SPOKE_CHAIN_IDS, Erc20Service, EvmAssetManagerService, EvmHubProvider, EvmSolverService, EvmSpokeProvider, EvmSpokeService, EvmVaultTokenService, EvmWalletAbstraction, FEE_PERCENTAGE_SCALE, HALF_RAY, HALF_WAD, HubVaultSymbols, ICON_TX_RESULT_WAIT_MAX_RETRY, INTENT_RELAY_CHAIN_IDS, IconSpokeProvider, IcxMigrationService, InjectiveSpokeProvider, IntentCreatedEventAbi, IntentDataType, IntentsAbi, LTV_PRECISION, LendingPoolService, LockupMultiplier, LockupPeriod, MAX_UINT256, MigrationService, MoneyMarketDataService, MoneyMarketService, RAY, RAY_DECIMALS, SECONDS_PER_YEAR, STELLAR_DEFAULT_TX_TIMEOUT_SECONDS, STELLAR_PRIORITY_FEE, SodaTokens, SodaTokensAsHubAssets, SodaVaultTokensSet, Sodax, SolanaSpokeProvider, SolverIntentErrorCode, SolverIntentStatusCode, SolverService, SonicSpokeProvider, SonicSpokeService, SpokeService, StellarSpokeProvider, SuiSpokeProvider, SuiSpokeService, SupportedMigrationTokens, USD_DECIMALS, UiPoolDataProviderService, VAULT_TOKEN_DECIMALS, WAD, WAD_RAY_RATIO, WEI_DECIMALS, WalletAbstractionService, adjustAmountByFee, assetManagerAbi, balnSwapAbi, binomialApproximatedRayPow, bnUSDLegacySpokeChainIds, bnUSDLegacyTokens, bnUSDNewTokens, calculateAllReserveIncentives, calculateAllUserIncentives, calculateAvailableBorrowsMarketReferenceCurrency, calculateCompoundedInterest, calculateCompoundedRate, calculateFeeAmount, calculateHealthFactorFromBalances, calculateHealthFactorFromBalancesBigUnits, calculateLinearInterest, calculatePercentageFeeAmount, chainIdToHubAssetsMap, connectionAbi, deriveUserWalletAddress, encodeAddress, encodeContractCalls, erc20Abi, formatBasisPoints, formatEModeCategory, formatEModes, formatPercentage, formatReserve, formatReserveUSD, formatReserves, formatReservesAndIncentives, formatUserSummary, formatUserSummaryAndIncentives, getAllLegacybnUSDTokens, getAndFormatReserveEModes, getCompoundedBalance, getEvmViemChain, getHubAssetInfo, getHubChainConfig, getHubVaultTokenByAddress, getIconAddressBytes, getIntentRelayChainId, getLinearBalance, getMarketReferenceCurrencyAndUsdBalance, getMoneyMarketConfig, getOriginalAssetAddress, getOriginalAssetInfoFromVault, getOriginalTokenFromOriginalAssetAddress, getPacket, getRandomBytes, getReserveNormalizedIncome, getReservesEModes, getSolanaAddressBytes, getSolverConfig, getSpokeChainIdFromIntentRelayChainId, getSupportedMoneyMarketTokens, getSupportedSolverTokens, getTransactionPackets, hexToBigInt, hubAssetToOriginalAssetMap, hubAssets, hubVaultTokensMap, hubVaults, hubVaultsAddressSet, intentRelayChainIdToSpokeChainIdMap, isBalnMigrateParams, isConfiguredMoneyMarketConfig, isConfiguredSolverConfig, isEvmHubChainConfig, isEvmInitializedConfig, isEvmSpokeChainConfig, isEvmSpokeProvider, isEvmUninitializedBrowserConfig, isEvmUninitializedConfig, isEvmUninitializedPrivateKeyConfig, isIconAddress, isIconSpokeProvider, isIcxCreateRevertMigrationParams, isIcxMigrateParams, isInjectiveSpokeProvider, isIntentCreationFailedError, isIntentCreationUnknownError, isIntentPostExecutionFailedError, isIntentRelayChainId, isIntentSubmitTxFailedError, isJsonRpcPayloadResponse, isLegacybnUSDChainId, isLegacybnUSDToken, isMoneyMarketBorrowUnknownError, isMoneyMarketCreateBorrowIntentFailedError, isMoneyMarketCreateRepayIntentFailedError, isMoneyMarketCreateSupplyIntentFailedError, isMoneyMarketCreateWithdrawIntentFailedError, isMoneyMarketRelayTimeoutError, isMoneyMarketRepayUnknownError, isMoneyMarketReserveAsset, isMoneyMarketReserveHubAsset, isMoneyMarketSubmitTxFailedError, isMoneyMarketSupplyUnknownError, isMoneyMarketSupportedToken, isMoneyMarketWithdrawUnknownError, isNativeToken, isNewbnUSDChainId, isNewbnUSDToken, isPartnerFeeAmount, isPartnerFeePercentage, isResponseAddressType, isResponseSigningType, isSodaVaultToken, isSolanaSpokeProvider, isSolverSupportedToken, isSonicSpokeProvider, isStellarSpokeProvider, isSuiSpokeProvider, isUnifiedBnUSDMigrateParams, isValidChainHubAsset, isValidHubAsset, isValidIntentRelayChainId, isValidOriginalAssetAddress, isValidSpokeChainId, isValidVault, isWaitUntilIntentExecutedFailed, moneyMarketReserveAssets, moneyMarketReserveHubAssetsSet, moneyMarketSupportedTokens, nativeToUSD, newbnUSDSpokeChainIds, normalize, normalizeBN, normalizedToUsd, originalAssetTohubAssetMap, poolAbi, randomUint256, rayDiv, rayMul, rayPow, rayToWad, relayTxAndWaitPacket, requestAddress, requestJsonRpc, requestSigning, retry, sonicWalletFactoryAbi, spokeAssetManagerAbi, spokeChainConfig, spokeChainIdsSet, submitTransaction, supportedHubAssets, supportedHubChains, supportedSodaAssets, supportedSpokeChains, supportedTokensPerChain, uiPoolDataAbi, valueToBigNumber, valueToZDBigNumber, variableDebtTokenAbi, vaultTokenAbi, wadToRay, waitForTransactionReceipt, waitUntilIntentExecuted, walletFactoryAbi, wrappedSonicAbi };
16683
17442
  //# sourceMappingURL=index.mjs.map
16684
17443
  //# sourceMappingURL=index.mjs.map