@sodax/sdk 1.0.1-beta-rc3 → 1.0.1-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -6933,6 +6933,11 @@ var ConfigService = class {
6933
6933
  getMoneyMarketTokens() {
6934
6934
  return this.sodaxConfig.supportedMoneyMarketTokens;
6935
6935
  }
6936
+ getMoneyMarketToken(chainId, token) {
6937
+ return this.sodaxConfig.supportedMoneyMarketTokens[chainId].find(
6938
+ (t) => t.address.toLowerCase() === token.toLowerCase()
6939
+ );
6940
+ }
6936
6941
  getMoneyMarketReserveAssets() {
6937
6942
  return this.sodaxConfig.supportedMoneyMarketReserveAssets;
6938
6943
  }
@@ -6952,7 +6957,10 @@ var ConfigService = class {
6952
6957
  return this.supportedSodaVaultAssetsSet.has(vault.toLowerCase());
6953
6958
  }
6954
6959
  isValidVault(vault) {
6955
- return this.isValidSodaVaultAsset(vault);
6960
+ if (typeof vault === "string") {
6961
+ return this.isValidSodaVaultAsset(vault);
6962
+ }
6963
+ return this.isValidSodaVaultAsset(vault.address);
6956
6964
  }
6957
6965
  isValidChainHubAsset(chainId, hubAsset) {
6958
6966
  return this.chainIdToHubAssetsMap.get(chainId)?.has(hubAsset.toLowerCase()) ?? false;
@@ -13374,7 +13382,7 @@ var SonicSpokeService = class _SonicSpokeService {
13374
13382
  const aTokenAddress = (await dataService.getReserveData(vaultAddress)).aTokenAddress;
13375
13383
  return {
13376
13384
  aTokenAddress,
13377
- aTokenAmount: amount,
13385
+ aTokenAmount: EvmVaultTokenService.translateIncomingDecimals(assetConfig.decimal, amount),
13378
13386
  token
13379
13387
  };
13380
13388
  }
@@ -13387,12 +13395,15 @@ var SonicSpokeService = class _SonicSpokeService {
13387
13395
  * @param configService - The config service
13388
13396
  * @returns BorrowInfo containing variable debt token address and vault address
13389
13397
  */
13390
- static async getBorrowInfo(token, amount, chainId, dataService, configService) {
13398
+ static async getBorrowInfo(token, amount, chainId, dataService, configService, moneyMarketConfig) {
13391
13399
  const assetConfig = configService.getHubAssetInfo(chainId, token);
13392
13400
  if (!assetConfig) {
13393
13401
  throw new Error("[SonicSpokeService.getBorrowInfo] Hub asset not found");
13394
13402
  }
13395
- const vaultAddress = assetConfig.vault;
13403
+ let vaultAddress = assetConfig.vault;
13404
+ if (moneyMarketConfig.bnUSDVault.toLowerCase() === vaultAddress.toLowerCase()) {
13405
+ vaultAddress = moneyMarketConfig.bnUSD;
13406
+ }
13396
13407
  const reserveData = await dataService.getReserveData(vaultAddress);
13397
13408
  const variableDebtTokenAddress = reserveData.variableDebtTokenAddress;
13398
13409
  return {
@@ -13604,10 +13615,18 @@ var MoneyMarketService = class _MoneyMarketService {
13604
13615
  try {
13605
13616
  invariant6__default.default(params.amount > 0n, "Amount must be greater than 0");
13606
13617
  invariant6__default.default(params.token.length > 0, "Token is required");
13607
- invariant6__default.default(
13608
- this.configService.isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
13609
- `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
13610
- );
13618
+ if (params.action === "withdraw" || params.action === "borrow") {
13619
+ const toChainId = params.toChainId ?? spokeProvider.chainConfig.chain.id;
13620
+ invariant6__default.default(
13621
+ this.configService.isMoneyMarketSupportedToken(toChainId, params.token),
13622
+ `Unsupported spoke chain (${toChainId}) token: ${params.token}`
13623
+ );
13624
+ } else {
13625
+ invariant6__default.default(
13626
+ this.configService.isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
13627
+ `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
13628
+ );
13629
+ }
13611
13630
  const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
13612
13631
  if (spokeProvider instanceof StellarSpokeProvider && (params.action === "supply" || params.action === "repay")) {
13613
13632
  return {
@@ -13645,7 +13664,8 @@ var MoneyMarketService = class _MoneyMarketService {
13645
13664
  params.amount,
13646
13665
  params.toChainId ?? spokeProvider.chainConfig.chain.id,
13647
13666
  this.data,
13648
- this.configService
13667
+ this.configService,
13668
+ this.config
13649
13669
  );
13650
13670
  return await SonicSpokeService.isBorrowApproved(
13651
13671
  walletAddress,
@@ -13709,10 +13729,18 @@ var MoneyMarketService = class _MoneyMarketService {
13709
13729
  try {
13710
13730
  invariant6__default.default(params.amount > 0n, "Amount must be greater than 0");
13711
13731
  invariant6__default.default(params.token.length > 0, "Token is required");
13712
- invariant6__default.default(
13713
- this.configService.isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
13714
- `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
13715
- );
13732
+ if (params.action === "withdraw" || params.action === "borrow") {
13733
+ const toChainId = params.toChainId ?? spokeProvider.chainConfig.chain.id;
13734
+ invariant6__default.default(
13735
+ this.configService.isMoneyMarketSupportedToken(toChainId, params.token),
13736
+ `Unsupported spoke chain (${toChainId}) token: ${params.token}`
13737
+ );
13738
+ } else {
13739
+ invariant6__default.default(
13740
+ this.configService.isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),
13741
+ `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`
13742
+ );
13743
+ }
13716
13744
  const walletAddress = await spokeProvider.walletProvider.getWalletAddress();
13717
13745
  if (spokeProvider instanceof StellarSpokeProvider) {
13718
13746
  invariant6__default.default(
@@ -13774,7 +13802,8 @@ var MoneyMarketService = class _MoneyMarketService {
13774
13802
  params.amount,
13775
13803
  params?.toChainId ?? spokeProvider.chainConfig.chain.id,
13776
13804
  this.data,
13777
- this.configService
13805
+ this.configService,
13806
+ this.config
13778
13807
  );
13779
13808
  const result = await SonicSpokeService.approveBorrow(
13780
13809
  walletAddress,
@@ -13863,7 +13892,7 @@ var MoneyMarketService = class _MoneyMarketService {
13863
13892
  };
13864
13893
  }
13865
13894
  let intentTxHash = null;
13866
- if (spokeProvider.chainConfig.chain.id !== types.SONIC_MAINNET_CHAIN_ID) {
13895
+ if (spokeProvider.chainConfig.chain.id !== this.hubProvider.chainConfig.chain.id) {
13867
13896
  const packetResult = await relayTxAndWaitPacket(
13868
13897
  txResult.value,
13869
13898
  spokeProvider instanceof SolanaSpokeProvider ? txResult.data : void 0,
@@ -14028,10 +14057,8 @@ var MoneyMarketService = class _MoneyMarketService {
14028
14057
  }
14029
14058
  };
14030
14059
  }
14031
- const fromChainId = spokeProvider.chainConfig.chain.id;
14032
- const toChainId = params.toChainId ?? fromChainId;
14033
14060
  let intentTxHash = null;
14034
- if (toChainId !== types.SONIC_MAINNET_CHAIN_ID) {
14061
+ if (spokeProvider.chainConfig.chain.id !== this.hubProvider.chainConfig.chain.id || params.toChainId && params.toAddress && params.toChainId !== this.hubProvider.chainConfig.chain.id) {
14035
14062
  const packetResult = await relayTxAndWaitPacket(
14036
14063
  txResult.value,
14037
14064
  spokeProvider instanceof SolanaSpokeProvider ? txResult.data : void 0,
@@ -14107,13 +14134,11 @@ var MoneyMarketService = class _MoneyMarketService {
14107
14134
  const fromAddress = await spokeProvider.walletProvider.getWalletAddress();
14108
14135
  const toChainId = params.toChainId ?? fromChainId;
14109
14136
  const toAddress = params.toAddress ?? fromAddress;
14110
- invariant6__default.default(
14111
- this.configService.isMoneyMarketSupportedToken(toChainId, params.token),
14112
- `Unsupported spoke chain (${toChainId}) token: ${params.token}`
14113
- );
14137
+ const dstToken = this.configService.getMoneyMarketToken(toChainId, params.token);
14138
+ invariant6__default.default(dstToken, `Money market token not found for spoke chain (${toChainId}) token: ${params.token}`);
14114
14139
  const encodedToAddress = encodeAddress(toChainId, toAddress);
14115
14140
  const fromHubWallet = await deriveUserWalletAddress(this.hubProvider, fromChainId, fromAddress);
14116
- const data = this.buildBorrowData(fromHubWallet, encodedToAddress, params.token, params.amount, toChainId);
14141
+ const data = this.buildBorrowData(fromHubWallet, encodedToAddress, dstToken.address, params.amount, toChainId);
14117
14142
  let txResult;
14118
14143
  if (fromChainId === this.hubProvider.chainConfig.chain.id && isSonicSpokeProviderType(spokeProvider)) {
14119
14144
  txResult = await SonicSpokeService.callWallet(data, spokeProvider, raw);
@@ -14176,10 +14201,8 @@ var MoneyMarketService = class _MoneyMarketService {
14176
14201
  }
14177
14202
  };
14178
14203
  }
14179
- const fromChainId = spokeProvider.chainConfig.chain.id;
14180
- const toChainId = params.toChainId ?? fromChainId;
14181
14204
  let intentTxHash = null;
14182
- if (toChainId !== types.SONIC_MAINNET_CHAIN_ID) {
14205
+ if (spokeProvider.chainConfig.chain.id !== this.hubProvider.chainConfig.chain.id || params.toChainId && params.toAddress && params.toChainId !== this.hubProvider.chainConfig.chain.id && params.toAddress !== this.hubProvider.chainConfig.addresses.walletRouter) {
14183
14206
  const packetResult = await relayTxAndWaitPacket(
14184
14207
  txResult.value,
14185
14208
  spokeProvider instanceof SolanaSpokeProvider ? txResult.data : void 0,
@@ -14340,7 +14363,7 @@ var MoneyMarketService = class _MoneyMarketService {
14340
14363
  };
14341
14364
  }
14342
14365
  let intentTxHash = null;
14343
- if (spokeProvider.chainConfig.chain.id !== types.SONIC_MAINNET_CHAIN_ID) {
14366
+ if (spokeProvider.chainConfig.chain.id !== this.hubProvider.chainConfig.chain.id) {
14344
14367
  const packetResult = await relayTxAndWaitPacket(
14345
14368
  txResult.value,
14346
14369
  spokeProvider instanceof SolanaSpokeProvider ? txResult.data : void 0,
@@ -14459,8 +14482,10 @@ var MoneyMarketService = class _MoneyMarketService {
14459
14482
  const fromHubAsset = this.configService.getHubAssetInfo(fromChainId, fromToken);
14460
14483
  invariant6__default.default(fromHubAsset, `hub asset not found for source chain token (token): ${fromToken}`);
14461
14484
  const lendingPool = this.config.lendingPool;
14462
- calls.push(Erc20Service.encodeApprove(fromHubAsset.asset, fromHubAsset.vault, amount));
14463
- calls.push(EvmVaultTokenService.encodeDeposit(fromHubAsset.vault, fromHubAsset.asset, amount));
14485
+ if (!this.configService.isValidVault(fromHubAsset.asset)) {
14486
+ calls.push(Erc20Service.encodeApprove(fromHubAsset.asset, fromHubAsset.vault, amount));
14487
+ calls.push(EvmVaultTokenService.encodeDeposit(fromHubAsset.vault, fromHubAsset.asset, amount));
14488
+ }
14464
14489
  const translatedAmount = EvmVaultTokenService.translateIncomingDecimals(fromHubAsset.decimal, amount);
14465
14490
  calls.push(Erc20Service.encodeApprove(fromHubAsset.vault, lendingPool, translatedAmount));
14466
14491
  calls.push(
@@ -14482,29 +14507,44 @@ var MoneyMarketService = class _MoneyMarketService {
14482
14507
  */
14483
14508
  buildBorrowData(fromHubAddress, toAddress, toToken, amount, toChainId) {
14484
14509
  const toHubAsset = this.configService.getHubAssetInfo(toChainId, toToken);
14510
+ const dstToken = this.configService.getMoneyMarketToken(toChainId, toToken);
14485
14511
  invariant6__default.default(toHubAsset, `hub asset not found for target chain token (toToken): ${toToken}`);
14512
+ invariant6__default.default(dstToken, `Money market token not found for spoke chain (${toChainId}) token: ${toToken}`);
14486
14513
  const assetAddress = toHubAsset.asset;
14487
14514
  const vaultAddress = toHubAsset.vault;
14488
14515
  const bnUSDVault = this.config.bnUSDVault;
14489
14516
  const bnUSD = this.config.bnUSD;
14490
- const feeAmount = calculateFeeAmount(amount, this.config.partnerFee);
14517
+ const translatedInAmount = EvmVaultTokenService.translateIncomingDecimals(toHubAsset.decimal, amount);
14518
+ const feeAmount = calculateFeeAmount(translatedInAmount, this.config.partnerFee);
14491
14519
  const calls = [];
14492
- if (bnUSDVault && bnUSD && bnUSDVault.toLowerCase() === vaultAddress.toLowerCase()) {
14520
+ if (bnUSDVault.toLowerCase() === vaultAddress.toLowerCase()) {
14493
14521
  calls.push(
14494
14522
  _MoneyMarketService.encodeBorrow(
14495
- { asset: bnUSD, amount, interestRateMode: 2n, referralCode: 0, onBehalfOf: fromHubAddress },
14523
+ {
14524
+ asset: bnUSD,
14525
+ amount: translatedInAmount,
14526
+ interestRateMode: 2n,
14527
+ referralCode: 0,
14528
+ onBehalfOf: fromHubAddress
14529
+ },
14496
14530
  this.config.lendingPool
14497
14531
  )
14498
14532
  );
14499
- calls.push(Erc20Service.encodeApprove(bnUSD, bnUSDVault, amount));
14500
- calls.push(EvmVaultTokenService.encodeDeposit(bnUSDVault, bnUSD, amount));
14533
+ calls.push(Erc20Service.encodeApprove(bnUSD, bnUSDVault, translatedInAmount));
14534
+ calls.push(EvmVaultTokenService.encodeDeposit(bnUSDVault, bnUSD, translatedInAmount));
14501
14535
  if (this.config.partnerFee && feeAmount) {
14502
14536
  calls.push(Erc20Service.encodeTransfer(bnUSDVault, this.config.partnerFee.address, feeAmount));
14503
14537
  }
14504
14538
  } else {
14505
14539
  calls.push(
14506
14540
  _MoneyMarketService.encodeBorrow(
14507
- { asset: vaultAddress, amount, interestRateMode: 2n, referralCode: 0, onBehalfOf: fromHubAddress },
14541
+ {
14542
+ asset: vaultAddress,
14543
+ amount: translatedInAmount,
14544
+ interestRateMode: 2n,
14545
+ referralCode: 0,
14546
+ onBehalfOf: fromHubAddress
14547
+ },
14508
14548
  this.config.lendingPool
14509
14549
  )
14510
14550
  );
@@ -14512,8 +14552,21 @@ var MoneyMarketService = class _MoneyMarketService {
14512
14552
  calls.push(Erc20Service.encodeTransfer(vaultAddress, this.config.partnerFee.address, feeAmount));
14513
14553
  }
14514
14554
  }
14515
- calls.push(EvmVaultTokenService.encodeWithdraw(vaultAddress, assetAddress, amount - feeAmount));
14516
- const translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(toHubAsset.decimal, amount - feeAmount);
14555
+ if (toToken.toLowerCase() !== vaultAddress.toLowerCase()) {
14556
+ calls.push(EvmVaultTokenService.encodeWithdraw(vaultAddress, assetAddress, translatedInAmount - feeAmount));
14557
+ }
14558
+ let translatedAmountOut;
14559
+ if (this.configService.isValidVault(toToken)) {
14560
+ translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(
14561
+ toHubAsset.decimal,
14562
+ translatedInAmount - feeAmount
14563
+ );
14564
+ } else {
14565
+ translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(
14566
+ dstToken.decimals,
14567
+ translatedInAmount - feeAmount
14568
+ );
14569
+ }
14517
14570
  if (toChainId === this.hubProvider.chainConfig.chain.id) {
14518
14571
  if (assetAddress.toLowerCase() === this.configService.spokeChainConfig[toChainId].addresses.wrappedSonic.toLowerCase()) {
14519
14572
  const withdrawToCall = {
@@ -14553,17 +14606,27 @@ var MoneyMarketService = class _MoneyMarketService {
14553
14606
  buildWithdrawData(fromHubAddress, toAddress, toToken, amount, toChainId) {
14554
14607
  const calls = [];
14555
14608
  const toHubAsset = this.configService.getHubAssetInfo(toChainId, toToken);
14609
+ const dstToken = this.configService.getMoneyMarketToken(toChainId, toToken);
14556
14610
  invariant6__default.default(toHubAsset, `hub asset not found for target chain token (toToken): ${toToken}`);
14611
+ invariant6__default.default(dstToken, `Money market token not found for spoke chain (${toChainId}) token: ${toToken}`);
14557
14612
  const assetAddress = toHubAsset.asset;
14558
14613
  const vaultAddress = toHubAsset.vault;
14614
+ const translatedInAmount = EvmVaultTokenService.translateIncomingDecimals(toHubAsset.decimal, amount);
14559
14615
  calls.push(
14560
14616
  _MoneyMarketService.encodeWithdraw(
14561
- { asset: vaultAddress, amount, to: fromHubAddress },
14617
+ { asset: vaultAddress, amount: translatedInAmount, to: fromHubAddress },
14562
14618
  this.config.lendingPool
14563
14619
  )
14564
14620
  );
14565
- calls.push(EvmVaultTokenService.encodeWithdraw(vaultAddress, assetAddress, amount));
14566
- const translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(toHubAsset.decimal, amount);
14621
+ if (!this.configService.isValidVault(toToken)) {
14622
+ calls.push(EvmVaultTokenService.encodeWithdraw(vaultAddress, assetAddress, translatedInAmount));
14623
+ }
14624
+ let translatedAmountOut;
14625
+ if (this.configService.isValidVault(toToken)) {
14626
+ translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(toHubAsset.decimal, translatedInAmount);
14627
+ } else {
14628
+ translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(dstToken.decimals, translatedInAmount);
14629
+ }
14567
14630
  if (toChainId === this.hubProvider.chainConfig.chain.id) {
14568
14631
  if (assetAddress.toLowerCase() === this.configService.spokeChainConfig[toChainId].addresses.wrappedSonic.toLowerCase()) {
14569
14632
  const withdrawToCall = {
@@ -14607,18 +14670,23 @@ var MoneyMarketService = class _MoneyMarketService {
14607
14670
  const vaultAddress = fromHubAsset.vault;
14608
14671
  const bnUSDVault = this.config.bnUSDVault;
14609
14672
  const bnUSD = this.config.bnUSD;
14610
- calls.push(Erc20Service.encodeApprove(assetAddress, vaultAddress, amount));
14611
- calls.push(EvmVaultTokenService.encodeDeposit(vaultAddress, assetAddress, amount));
14612
- const translatedAmount = EvmVaultTokenService.translateIncomingDecimals(fromHubAsset.decimal, amount);
14673
+ const translatedAmountIn = EvmVaultTokenService.translateIncomingDecimals(fromHubAsset.decimal, amount);
14613
14674
  let repayToken = vaultAddress;
14614
- if (bnUSDVault && bnUSD && bnUSDVault.toLowerCase() === vaultAddress.toLowerCase()) {
14675
+ if (bnUSDVault.toLowerCase() === vaultAddress.toLowerCase()) {
14615
14676
  repayToken = bnUSD;
14616
- calls.push(EvmVaultTokenService.encodeWithdraw(bnUSDVault, bnUSD, translatedAmount));
14677
+ if (assetAddress.toLowerCase() !== bnUSDVault.toLowerCase()) {
14678
+ calls.push(Erc20Service.encodeApprove(assetAddress, vaultAddress, translatedAmountIn));
14679
+ calls.push(EvmVaultTokenService.encodeDeposit(vaultAddress, assetAddress, translatedAmountIn));
14680
+ }
14681
+ calls.push(EvmVaultTokenService.encodeWithdraw(bnUSDVault, bnUSD, translatedAmountIn));
14682
+ } else {
14683
+ calls.push(Erc20Service.encodeApprove(assetAddress, vaultAddress, amount));
14684
+ calls.push(EvmVaultTokenService.encodeDeposit(vaultAddress, assetAddress, amount));
14617
14685
  }
14618
- calls.push(Erc20Service.encodeApprove(repayToken, this.config.lendingPool, translatedAmount));
14686
+ calls.push(Erc20Service.encodeApprove(repayToken, this.config.lendingPool, translatedAmountIn));
14619
14687
  calls.push(
14620
14688
  _MoneyMarketService.encodeRepay(
14621
- { asset: repayToken, amount: translatedAmount, interestRateMode: 2n, onBehalfOf: toHubAddress },
14689
+ { asset: repayToken, amount: translatedAmountIn, interestRateMode: 2n, onBehalfOf: toHubAddress },
14622
14690
  this.config.lendingPool
14623
14691
  )
14624
14692
  );