Skip to main content
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

Prérequis :
  • 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 des bigint.
@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 :
  1. Résout le réseau dans la liste intégrée (mainnet, testnet, devnet) et applique networkOverrides.
  2. Crée un NodeProvider et un ExplorerProvider pour ce réseau.
  3. Instancie chaque module et charge ses identifiants de contrats depuis les fichiers de déploiement inclus dans le package.
  4. 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.
Il n’effectue aucun appel réseau. La liste de jetons est récupérée au premier usage et mise en cache pendant un jour.
De nombreux helpers de contrats générés par @alephium/web3 utilisent le node provider global. Powfi.load le définit pour vous, et le dernier load l’emporte. Si vous utilisez plusieurs instances du SDK, appelez powfi.setCurrentProviders() pour rendre à nouveau globaux les providers d’une instance donnée.
Voir Réseaux et configuration pour les endpoints par défaut et l’utilisation de votre propre nœud.

Les façades de modules

Des helpers sans état sont exportés à côté des modules :
Chaque module hérite de 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 via powfi.signer. Elles renvoient le type de résultat @alephium/web3 de l’appel sous-jacent :
Le SDK n’attend pas la confirmation. Interrogez 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

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.
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.
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.
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.
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.
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).
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-sdk avec le tag latest. Les release candidates utilisent le tag rc.
  • 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

  1. Lisez les notes de version sur GitHub.
  2. Mettez à jour @alephium/powfi-sdk et vérifiez que votre @alephium/web3 satisfait la dépendance pair du SDK (^3.0.3 aujourd’hui) et qu’une seule copie est installée (npm ls @alephium/web3). Plusieurs copies de @alephium/web3 provoquent des bugs de instanceof et d’enregistrement des providers.
  3. Lancez tsc --noEmit. La plupart des changements incompatibles apparaissent comme des erreurs de type.
  4. 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