Cette page cible
@alephium/powfi-sdk@1.0.2. Figez les versions exactes en production et lisez les notes de version avant de mettre à jour.Installation
- Node.js 20+ ou Bun 1.0+ (déclarés dans
engines). - TypeScript 5.x. Le package fournit du CommonJS (
lib/index.js), de l’ESM (lib/index.mjs) et les déclarations de types (lib/index.d.ts). - Support natif de
bigint. Tous les montants on-chain sont desbigint.
@alephium/web3 est une dépendance pair (^3.0.3) : installez-la vous-même, comme dans la commande ci-dessus, pour que le SDK et votre application partagent une seule copie. Installées automatiquement : @alephium/token-list, bignumber.js, decimal.js.
Initialisation
Powfi.load est synchrone. Il :
- Résout le réseau dans la liste intégrée (
mainnet,testnet,devnet) et appliquenetworkOverrides. - Crée un
NodeProvideret unExplorerProviderpour ce réseau. - Instancie chaque module et charge ses identifiants de contrats depuis les fichiers de déploiement inclus dans le package.
- Enregistre ses providers comme providers globaux par défaut de
@alephium/web3(setCurrentProviders()), pour que les helpers de contrats générés fonctionnent immédiatement.
Les façades de modules
ModuleBase, qui lui donne accès à l’instance Powfi parente (scope : providers, signataire, réseau) et à un logger nommé. Voir Journalisation pour activer la sortie de débogage.
Résultats de transaction
Les méthodes d’écriture signent et soumettent la transaction viapowfi.signer. Elles renvoient le type de résultat @alephium/web3 de l’appel sous-jacent :
powfi.nodeProvider.transactions.getTransactionsStatus({ txId }) jusqu’à obtenir type === 'Confirmed' (voir l’étape 5 du Démarrage rapide).
La plupart des méthodes n’ont pas de mode « construire sans envoyer ». L’exception est l’ajout de liquidité CLMM :
getAddLiquidityParams renvoie les paramètres d’appel préparés, et addLiquidityFromParams les exécute. Pour le reste, si vous avez besoin d’une transaction non signée, appelez directement .execute / .transact du script ou du contrat sous-jacent avec un SignerProvider personnalisé qui capture la requête au lieu de la soumettre.Pièges courants
1. Réseau incohérent
1. Réseau incohérent
Les identifiants de contrats proviennent du fichier de déploiement de
networkId. Un signataire mainnet avec networkId: 'testnet' (ou l’inverse) construit des transactions vers des contrats qui n’existent pas sur le réseau du signataire. Dérivez toujours networkId de la même source que le réseau du wallet.2. Ordre des jetons
2. Ordre des jetons
Les pools sont indexés par la paire triée lexicographiquement (
token0 < token1). Les fonctions comme getPoolId(tokenA, tokenB) trient pour vous. Les réserves, les prix et sqrtPriceX96 sont toujours exprimés dans l’ordre trié (prix = token1 par token0). Utilisez sortTokens(a, b) chaque fois que vous associez la paire « base/cotation » de l’interface aux champs du pool.3. Le swap CLMM utilise token0/token1 pour la direction, pas l'ordre du pool
3. Le swap CLMM utilise token0/token1 pour la direction, pas l'ordre du pool
Dans
ClmmSwapRequest, token0 est le jeton d’entrée et token1 le jeton de sortie. Dans ClmmSimulateSwapParams, la direction est donnée par zeroForOne. Voir Swapper sur CLMM.4. État périmé
4. État périmé
Une cotation calculée à partir d’un
CpmmPoolContractState ou d’un ClmmSimulateSwapQuote devient obsolète dès qu’un autre trade est exécuté. cpmm.swap recharge l’état avant l’envoi. Pour le CLMM, relancez simulateSwap juste avant de soumettre et fixez toujours un slippage non nul.5. Le slippage est en points de base et s'applique différemment selon le type de pool
5. Le slippage est en points de base et s'applique différemment selon le type de pool
slippageBps: 50n signifie 0,5 %. Le CPMM l’applique aux montants (minimalAmount / maximalAmount). Le CLMM l’applique au prix (une borne sqrtPriceLimitX96). Voir Montants et slippage.6. Adresses sans groupe
6. Adresses sans groupe
Les adresses Alephium sans groupe (sans suffixe
:group) sont normalisées en interne vers le groupe du protocole pour les arguments owner/recipient. Si vous dérivez vous-même des identifiants (par exemple clmm.getPositionId), passez la forme normalisée : normalizeAddress(address, powfi.clmm.getClmmConfig().groupIndex).7. Plafond d'impact de prix CPMM
7. Plafond d'impact de prix CPMM
cpmm.swap lève PriceImpactTooHighError lorsque l’impact de prix de la cotation est ≥ 5 % (MAX_PRICE_IMPACT). Découpez le trade, ou utilisez swapTo (qui ignore ce contrôle) si c’est vraiment voulu.Politique de versions
- Les versions stables sont publiées sur npm sous le nom
@alephium/powfi-sdkavec le taglatest. Les release candidates utilisent le tagrc. - Les bindings de contrats (
clmm/,cpmm/,staking/) sont régénérés depuis le dépôt des contrats et inclus dans le package. Une mise à niveau de contrat qui change des adresses ou des ABI est publiée dans une nouvelle version du SDK. - Figez les versions exactes et lisez les notes de version avant de mettre à jour.
Mise à jour
- Lisez les notes de version sur GitHub.
- Mettez à jour
@alephium/powfi-sdket vérifiez que votre@alephium/web3satisfait la dépendance pair du SDK (^3.0.3aujourd’hui) et qu’une seule copie est installée (npm ls @alephium/web3). Plusieurs copies de@alephium/web3provoquent des bugs deinstanceofet d’enregistrement des providers. - Lancez
tsc --noEmit. La plupart des changements incompatibles apparaissent comme des erreurs de type. - Relancez vos tests de cotation sur le testnet avant de basculer le trafic mainnet.
Obtenir de l’aide
- Bugs et demandes de fonctionnalités : issues GitHub.
- Problèmes de sécurité : n’ouvrez pas d’issue publique. Contactez l’équipe Powfi en privé.
Liens utiles
- Référence des modules : CPMM · CLMM · Staking · Jetons
- Artefacts de contrats et déploiements
- CLI développeur
- Code source : github.com/alephium/powfi-sdk