reserve0 × reserve1 = k. Chaque swap verse des frais de 0,3 % aux fournisseurs de liquidité. La liquidité est représentée par un jeton LP fongible dont l’identifiant est celui du pool.
Guide : swapper sur CPMM
Guide : fournir de la liquidité CPMM
Recherche de pools
getPoolId(tokenA, tokenB)
getPoolAddress(tokenA, tokenB)
Renvoie l’adresse du contrat de la paire (addressFromContractId(getPoolId(...))).
poolExists(tokenA, tokenB)
getPoolState(tokenA, tokenB)
PoolNotFoundError si la paire n’existe pas. Les deux jetons doivent figurer dans la liste de jetons.
object
getPoolProtocolFees(poolAddress)
Cotations (statiques, hors ligne)
Toutes les fonctions de cotation sont statiques et pures. Passez unCpmmPoolContractState déjà récupéré.
CpmmModule.computeSwapAmount(params)
CpmmPoolContractState
requis
string
requis
string
requis
bigint
À renseigner pour une cotation en entrée exacte.
bigint
À renseigner pour une cotation en sortie exacte (utilisé seulement si
amountIn est indéfini).bigint
requis
Tolérance de slippage en points de base.
object
InsufficientLiquidityError si amountOut >= reserveOut.
CpmmModule.getAmountOut(state, tokenInId, amountIn) / getAmountIn(state, tokenOutId, amountOut)
Les formules x·y=k brutes avec les frais de 0,3 % :
CpmmModule.calcPriceImpact(reserve0, reserve1, tokenInId, token0Id, amountIn, amountOut)
Renvoie l’impact de prix en pourcentage.
CpmmModule.computeLiquidityAmounts(params)
- Pool existant (
poolStaterenseigné) : indiquez le montant d’un côté (inputType: 'TokenA'utiliseamountA,'TokenB'utiliseamountB). La fonction en déduit l’autre côté à partir des réserves, ainsi que les jetons LP que vous recevrez. - Nouveau pool (
poolStateindéfini) :amountAetamountBsont tous deux requis. LP mintés =sqrt(amountA × amountB) − MINIMUM_LIQUIDITY(1000 unités sont verrouillées pour toujours). LèveInsufficientLiquidityErrorsisqrt(amountA × amountB) <= 1000.
{ tokenAId, tokenBId, amountA, amountB, shareAmount, sharePercentage, state? }, où sharePercentage est votre part du pool après le dépôt, en pourcentage.
CpmmModule.computeRemoveLiquidityAmounts(state, totalLiquidity, liquidityToRemove)
Montants de jetons rendus pour la destruction de liquidityToRemove jetons LP, plus votre part restante. totalLiquidity est votre solde de LP. Lève une erreur si liquidityToRemove > totalLiquidity.
CpmmModule.computeClaimableAmounts(state, liquidityBalance)
La valeur sous-jacente complète d’un solde de LP : { token0, amount0, token1, amount1, ... }.
CpmmModule.minimalAmount(amount, slippage) / maximalAmount(amount, slippage)
Helpers de slippage. Voir Montants et slippage.
Swaps
swap(params, balances?)
SwapMinOut (entrée exacte) ou SwapMaxIn (sortie exacte) via le routeur. Nécessite un signataire.
string
requis
string
requis
bigint
Montant en entrée exacte.
bigint
Montant en sortie exacte (utilisé si
amountIn est indéfini).bigint
requis
Points de base.
string
requis
Adresse qui paie et reçoit, généralement celle du signataire.
number
défaut:"60"
Échéance.
bigint
Frais d’intégrateur optionnels, dans le jeton d’entrée.
string
Requis avec
fee.Map<tokenId, bigint>
Vérification préalable optionnelle : si elle est fournie et que
balances.get(tokenIn) < entrée + frais, lève InsufficientBalanceError avant la signature. Pour l’ALPH, utilisez ALPH_TOKEN_ID comme clé.PriceImpactTooHighError si priceImpact >= 5.
simSwap(params)
swap utiliserait, sans rien envoyer. slippageBps vaut 100n par défaut s’il est nul.
swapTo(params)
targetPrice, puis l’exécute. La direction est déduite automatiquement. Ignore le contrôle d’impact de prix. Lève une erreur si la cible est égale au prix actuel. Utile pour l’arbitrage et pour recaler le prix de pools de test.
Liquidité
addLiquidity(params, balances?)
CpmmPoolContractState
requis
État frais issu de
getPoolState.string
requis
Doivent tous deux être des jetons du pool (dans n’importe quel ordre).
bigint
requis
Montants souhaités, tous deux supérieurs à 0. Utilisez
computeLiquidityAmounts pour obtenir une paire équilibrée.bigint
requis
Appliqué aux deux montants comme minimums. Ignoré si le pool est vide.
string
requis
number
défaut:"60"
sender.
removeLiquidity(params)
CpmmPoolContractState
requis
bigint
requis
Jetons LP à détruire.
bigint
Votre solde de LP (utilisé pour le calcul de la part). Par défaut
poolState.totalSupply.bigint
requis
Appliqué aux deux montants de sortie comme minimums.
string
requis
number
défaut:"60"
computeClaimableAmounts(tokenAId, tokenBId, liquidityBalance)
Version d’instance : récupère l’état du pool puis renvoie { token0, amount0, token1, amount1 } pour un solde de LP.
Création de pool
createPool(params)
string
requis
string
requis
Paie le dépôt de contrat de 1 ALPH.
{ tokenAAmount: bigint; tokenBAmount: bigint }
Si renseigné, crée la paire et dépose la liquidité initiale en une seule transaction (
CreatePairAndAddLiquidity). Le ratio fixe le prix de départ. S’il est omis, seule la paire est créée (CreatePair, qui joint 1 unité de base de chaque jeton).Configuration
getConfig() renvoie la CpmmConfig active (groupIndex, factoryId, routerId). setConfig(config) la surcharge. getCpmmConfig() relit le déploiement inclus.