Skip to main content
Ce sont des portages sans état des calculs on-chain, avec l’arrondi d’Alephium (MathUtil.alphDiv) : les résultats correspondent aux contrats à l’unité près.

ClmmLiquidityUtils

Conventions : sqrtRatioX96 est le prix actuel. sqrtRatioAX96 et sqrtRatioBX96 sont les bornes de la plage (getSqrtRatioAtTick(tickLower/Upper)). Les montants suivent l’ordre trié token0/token1.

getLiquidityFromAmounts(sqrtRatioX96, sqrtRatioAX96, sqrtRatioBX96, amount0, amount1)

La liquidité maximale mintable avec les montants donnés :
  • prix égal ou inférieur à la borne basse → seul amount0 compte
  • prix dans la plage → min(L issue de amount0, L issue de amount1)
  • prix au-dessus de la plage → seul amount1 compte

getAmountsForLiquidity(sqrtRatioX96, sqrtRatioAX96, sqrtRatioBX96, liquidity)

[amount0, amount1] pour une variation de liquidité signée. Convention des contrats : passez -liquidity pour obtenir les montants (négatifs) nécessaires pour ajouter de la liquidité, et +liquidity pour les montants reçus lors d’un retrait.

getAmountsAndLiquidityAtSqrtPrice(sqrtRatioX96, sqrtRatioAX96, sqrtRatioBX96, amount0, amount1)

Renvoie [amount0Used, amount1Used, liquidity] : les montants équilibrés réellement déposés pour les amount0 et amount1 souhaités. C’est l’appel habituel pour un aperçu « vous allez déposer ».

getAmountsAndLiquidityAtPrice(price, token0, token1, lowerTick, upperTick, amount0, amount1)

Identique, avec un prix lisible et des TokenInfo.

getPositionAmountsFromPrice(props)

Variante orientée interface qui raisonne en base/cotation et accepte les ticks dans n’importe quel ordre :
Renvoie des zéros si l’un des montants d’entrée vaut 0n. Pour dimensionner une position à partir d’un seul côté, passez UNLIMITED_AMOUNT (2^128 − 1) pour l’autre.

Bas niveau

PoolUtils

getPositionId(poolAddress, owner, tickLower, tickUpper)

Dérive l’identifiant du contrat de position à partir de l’adresse du pool. Contrairement à clmm.getPositionId, il normalise pour vous les adresses owner sans groupe.

offlineSwap

Rejoue localement un swap sur la courbe de liquidité renvoyée par clmm.simulateSwap, et renvoie le montant de l’autre côté sous forme de valeur signée :
  • entrée exacte (amountSpecified > 0) : renvoie la sortie sous forme de nombre négatif (vous recevez -offlineSwap(...))
  • sortie exacte (amountSpecified < 0) : renvoie l’entrée nécessaire (prenez la valeur absolue)
Les tests d’intégration vérifient que le résultat correspond exactement à la valeur renvoyée par simulateSwap on-chain.

computeSwapStep(sqrtPriceX96, sqrtPriceTargetX96, liquidity, amount, feePips)

Une étape de swap dans une plage de liquidité. Renvoie [sqrtPriceNextX96, amountIn, amountOut, feeAmount]. offlineSwap l’appelle une fois par ligne.