@sodax/sdk 1.5.5-beta → 1.5.7-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
@@ -8744,7 +8744,7 @@ var universalRouterAbi = [
8744
8744
  ];
8745
8745
 
8746
8746
  // ../types/dist/constants/index.js
8747
- var CONFIG_VERSION = 40;
8747
+ var CONFIG_VERSION = 41;
8748
8748
  var AVALANCHE_MAINNET_CHAIN_ID = "0xa86a.avax";
8749
8749
  var ARBITRUM_MAINNET_CHAIN_ID = "0xa4b1.arbitrum";
8750
8750
  var BASE_MAINNET_CHAIN_ID = "0x2105.base";
@@ -8971,7 +8971,8 @@ var HubVaultSymbols = [
8971
8971
  "sodaNEAR",
8972
8972
  "sodaKAIA",
8973
8973
  "sodaSTX",
8974
- "sodaUSDS"
8974
+ "sodaUSDS",
8975
+ "sodaUSDat"
8975
8976
  ];
8976
8977
  var SodaTokens = {
8977
8978
  sodaBNB: {
@@ -9141,6 +9142,13 @@ var SodaTokens = {
9141
9142
  decimals: 18,
9142
9143
  address: "0x243b0c26c8b38793908d7C64e8510f21B19B4613",
9143
9144
  xChainId: SONIC_MAINNET_CHAIN_ID
9145
+ },
9146
+ sodaUSDat: {
9147
+ symbol: "sodaUSDat",
9148
+ name: "Soda USDat",
9149
+ decimals: 18,
9150
+ address: "0x67f45e9815c17ec690950d0fd7f6a7cdcceb46d0",
9151
+ xChainId: SONIC_MAINNET_CHAIN_ID
9144
9152
  }
9145
9153
  };
9146
9154
  var SodaTokensAsHubAssets = Object.values(SodaTokens).reduce((acc, token) => {
@@ -10277,6 +10285,13 @@ var spokeChainConfig = {
10277
10285
  decimals: 8,
10278
10286
  address: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
10279
10287
  xChainId: ETHEREUM_MAINNET_CHAIN_ID
10288
+ },
10289
+ sUSDat: {
10290
+ symbol: "sUSDat",
10291
+ name: "Staked USDat",
10292
+ decimals: 18,
10293
+ address: "0xD166337499E176bbC38a1FBd113Ab144e5bd2Df7",
10294
+ xChainId: ETHEREUM_MAINNET_CHAIN_ID
10280
10295
  }
10281
10296
  }
10282
10297
  },
@@ -11368,6 +11383,13 @@ var hubAssets = {
11368
11383
  symbol: "WBTC",
11369
11384
  name: "Wrapped Bitcoin",
11370
11385
  vault: SodaTokens.sodaBTC.address
11386
+ },
11387
+ [spokeChainConfig[ETHEREUM_MAINNET_CHAIN_ID].supportedTokens.sUSDat.address]: {
11388
+ asset: "0x67f45e9815c17ec690950d0fd7f6a7cdcceb46d0",
11389
+ decimal: 18,
11390
+ symbol: "sUSDat",
11391
+ name: "Staked USDat",
11392
+ vault: SodaTokens.sodaUSDat.address
11371
11393
  }
11372
11394
  },
11373
11395
  [KAIA_MAINNET_CHAIN_ID]: {
@@ -11713,7 +11735,8 @@ var swapSupportedTokens = {
11713
11735
  spokeChainConfig[ETHEREUM_MAINNET_CHAIN_ID].supportedTokens.USDC,
11714
11736
  spokeChainConfig[ETHEREUM_MAINNET_CHAIN_ID].supportedTokens.USDT,
11715
11737
  spokeChainConfig[ETHEREUM_MAINNET_CHAIN_ID].supportedTokens.SODA,
11716
- spokeChainConfig[ETHEREUM_MAINNET_CHAIN_ID].supportedTokens.LL
11738
+ spokeChainConfig[ETHEREUM_MAINNET_CHAIN_ID].supportedTokens.LL,
11739
+ spokeChainConfig[ETHEREUM_MAINNET_CHAIN_ID].supportedTokens.sUSDat
11717
11740
  ],
11718
11741
  [REDBELLY_MAINNET_CHAIN_ID]: [
11719
11742
  spokeChainConfig[REDBELLY_MAINNET_CHAIN_ID].supportedTokens.RBNT,
@@ -35085,7 +35108,7 @@ var AssetService = class {
35085
35108
  });
35086
35109
  }
35087
35110
  };
35088
- var ClService = class {
35111
+ var ClService = class _ClService {
35089
35112
  config;
35090
35113
  relayerApiEndpoint;
35091
35114
  hubProvider;
@@ -36049,13 +36072,12 @@ var ClService = class {
36049
36072
  * @param currentTick - Current pool tick
36050
36073
  * @returns The required amount of token1
36051
36074
  */
36052
- static calculateAmount1FromAmount0(amount0, tickLower, tickUpper, currentTick) {
36075
+ static calculateAmount1FromAmount0(amount0, tickLower, tickUpper, currentTick, sqrtPriceX96) {
36053
36076
  if (amount0 === 0n) return 0n;
36054
36077
  const sqrtRatioX96Lower = v3Sdk.TickMath.getSqrtRatioAtTick(Number(tickLower));
36055
36078
  const sqrtRatioX96Upper = v3Sdk.TickMath.getSqrtRatioAtTick(Number(tickUpper));
36056
- const sqrtRatioX96Current = v3Sdk.TickMath.getSqrtRatioAtTick(Number(currentTick));
36057
36079
  const liquidity = v3Sdk.maxLiquidityForAmounts(
36058
- sqrtRatioX96Current,
36080
+ sqrtPriceX96,
36059
36081
  sqrtRatioX96Lower,
36060
36082
  sqrtRatioX96Upper,
36061
36083
  amount0,
@@ -36067,7 +36089,7 @@ var ClService = class {
36067
36089
  Number(currentTick),
36068
36090
  Number(tickLower),
36069
36091
  Number(tickUpper),
36070
- sqrtRatioX96Current,
36092
+ sqrtPriceX96,
36071
36093
  liquidity
36072
36094
  );
36073
36095
  return amount1;
@@ -36080,13 +36102,12 @@ var ClService = class {
36080
36102
  * @param currentTick - Current pool tick
36081
36103
  * @returns The required amount of token0
36082
36104
  */
36083
- static calculateAmount0FromAmount1(amount1, tickLower, tickUpper, currentTick) {
36105
+ static calculateAmount0FromAmount1(amount1, tickLower, tickUpper, currentTick, sqrtPriceX96) {
36084
36106
  if (amount1 === 0n) return 0n;
36085
36107
  const sqrtRatioX96Lower = v3Sdk.TickMath.getSqrtRatioAtTick(Number(tickLower));
36086
36108
  const sqrtRatioX96Upper = v3Sdk.TickMath.getSqrtRatioAtTick(Number(tickUpper));
36087
- const sqrtRatioX96Current = v3Sdk.TickMath.getSqrtRatioAtTick(Number(currentTick));
36088
36109
  const liquidity = v3Sdk.maxLiquidityForAmounts(
36089
- sqrtRatioX96Current,
36110
+ sqrtPriceX96,
36090
36111
  sqrtRatioX96Lower,
36091
36112
  sqrtRatioX96Upper,
36092
36113
  BigInt("0xffffffffffffffffffffffffffffffff"),
@@ -36098,11 +36119,73 @@ var ClService = class {
36098
36119
  Number(currentTick),
36099
36120
  Number(tickLower),
36100
36121
  Number(tickUpper),
36101
- sqrtRatioX96Current,
36122
+ sqrtPriceX96,
36102
36123
  liquidity
36103
36124
  );
36104
36125
  return amount0;
36105
36126
  }
36127
+ /**
36128
+ * Calculate amount0Max and amount1Max for a given liquidity and slippage tolerance.
36129
+ * For concentrated liquidity, a price drop increases the amount0 needed and a price rise increases the amount1 needed.
36130
+ * This calculates the worst-case amounts for each token independently.
36131
+ */
36132
+ static calculateMaxAmountsForSlippage(liquidity, tickLower, tickUpper, currentTick, sqrtPriceX96, slippagePercent) {
36133
+ const amount0AtCurrent = v3Sdk.PositionMath.getToken0Amount(
36134
+ Number(currentTick),
36135
+ Number(tickLower),
36136
+ Number(tickUpper),
36137
+ sqrtPriceX96,
36138
+ liquidity
36139
+ );
36140
+ const amount1AtCurrent = v3Sdk.PositionMath.getToken1Amount(
36141
+ Number(currentTick),
36142
+ Number(tickLower),
36143
+ Number(tickUpper),
36144
+ sqrtPriceX96,
36145
+ liquidity
36146
+ );
36147
+ const SLIPPAGE_SCALE = 1000000000n;
36148
+ const slippageScaled = BigInt(Math.round(slippagePercent * Number(SLIPPAGE_SCALE) / 100));
36149
+ const sqrtPriceX96Squared = sqrtPriceX96 * sqrtPriceX96;
36150
+ const sqrtPriceX96Down = _ClService.sqrtBigInt(
36151
+ sqrtPriceX96Squared * (SLIPPAGE_SCALE - slippageScaled) / SLIPPAGE_SCALE
36152
+ );
36153
+ const sqrtPriceX96Up = _ClService.sqrtBigInt(
36154
+ sqrtPriceX96Squared * (SLIPPAGE_SCALE + slippageScaled) / SLIPPAGE_SCALE
36155
+ );
36156
+ const tickDown = v3Sdk.TickMath.getTickAtSqrtRatio(sqrtPriceX96Down);
36157
+ const tickUp = v3Sdk.TickMath.getTickAtSqrtRatio(sqrtPriceX96Up);
36158
+ const amount0AtPriceDrop = v3Sdk.PositionMath.getToken0Amount(
36159
+ tickDown,
36160
+ Number(tickLower),
36161
+ Number(tickUpper),
36162
+ sqrtPriceX96Down,
36163
+ liquidity
36164
+ );
36165
+ const amount1AtPriceRise = v3Sdk.PositionMath.getToken1Amount(
36166
+ tickUp,
36167
+ Number(tickLower),
36168
+ Number(tickUpper),
36169
+ sqrtPriceX96Up,
36170
+ liquidity
36171
+ );
36172
+ const amount0Max = amount0AtPriceDrop > amount0AtCurrent ? amount0AtPriceDrop : amount0AtCurrent;
36173
+ const amount1Max = amount1AtPriceRise > amount1AtCurrent ? amount1AtPriceRise : amount1AtCurrent;
36174
+ return { amount0Max, amount1Max };
36175
+ }
36176
+ /**
36177
+ * Integer square root via Newton's method. Returns floor(sqrt(n)).
36178
+ */
36179
+ static sqrtBigInt(n) {
36180
+ if (n < 0n) throw new Error("sqrtBigInt: negative input");
36181
+ if (n < 2n) return n;
36182
+ let x = 1n << (BigInt(n.toString(2).length) + 1n) / 2n;
36183
+ while (true) {
36184
+ const next = (x + n / x) / 2n;
36185
+ if (next >= x) return x;
36186
+ x = next;
36187
+ }
36188
+ }
36106
36189
  /**
36107
36190
  * Helper: Convert price to nearest valid tick
36108
36191
  * @param price - The price as a number