> ## Documentation Index
> Fetch the complete documentation index at: https://docs.powfi.alephium.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Powfi

> Le point d'entrée du SDK : réseau, providers, signataire et instances des modules.

export const VersionBanner = ({network = 'mainnet', products = [], lang = 'en'}) => {
  const SDK_VERSION = '1.0.2';
  const ADDRESSES = {
    mainnet: {
      cpmm: {
        Router: 'ze15rnAwTyVCPnDhN7J8An3SvNeWBsZHAVMeBx1ehXeP',
        TokenPairFactory: '24CXRLvj1QiDH6riwr1EPERG7BcduHKZtktygbq97MfYb'
      },
      clmm: {
        PoolFactory: '24gqd4DMQXVzjm5QDAGxUtYupx3WM2PSu3vZUseuBCV9h',
        PositionManager: 'vFyKSqnJHS9MicrojBcLgztyRFqhS4hB349Ci3LJCELw'
      },
      staking: {
        XAlphToken: '225WevmFp5ZgzPsyVJTvyp2v2uyKrvp329HfrVmzffnWj',
        RewardFeeCollector: '22CE7vG6u64zjjsLZLxeJqQuPDydjPvbP9iG1d861j2G7'
      }
    },
    testnet: {
      cpmm: {
        Router: 'xaueT8kPMvpnaFJEfHv6CJLgqsSPpoNmHjF1QgTxoF9R',
        TokenPairFactory: '29hdd9b9Gp7oXuamwHKfUqBaRXP487HoeTcutS3RhZJEj'
      },
      clmm: {
        PoolFactory: 'z2QFT7qBQrfm8UwAYG3VHWoHs7B56ZDFNdSCcDu5j53m',
        PositionManager: '21p6egW8d6FEyVVuH17WqvHCARsCsD61GcBmeCr75XdGT'
      },
      staking: {
        XAlphToken: '23psDicimC5VdpM56wrgqgCzQzcyXWGCkQGSYWbtZAPRq',
        RewardFeeCollector: '29qQ1LPJ5uqawRviXLVDMeo19JUygRrNNTQy5RUBh817D'
      }
    }
  };
  const EXPLORERS = {
    mainnet: 'https://explorer.alephium.org/addresses/',
    testnet: 'https://testnet.alephium.org/addresses/'
  };
  const LABELS = {
    en: {
      sdk: 'SDK',
      network: 'Network',
      contracts: 'Contracts',
      all: 'All addresses',
      allNetworks: 'mainnet · testnet · devnet',
      devnet: 'Local deployment (addresses vary per devnet)'
    },
    zh: {
      sdk: 'SDK 版本',
      network: '网络',
      contracts: '合约',
      all: '全部地址',
      allNetworks: 'mainnet · testnet · devnet',
      devnet: '本地部署（每个 devnet 的地址不同）'
    },
    fr: {
      sdk: 'SDK',
      network: 'Réseau',
      contracts: 'Contrats',
      all: 'Toutes les adresses',
      allNetworks: 'mainnet · testnet · devnet',
      devnet: 'Déploiement local (adresses propres à chaque devnet)'
    }
  };
  const t = LABELS[lang] ?? LABELS.en;
  const contractsPage = lang === 'en' ? '/reference/contracts' : `/${lang}/reference/contracts`;
  const short = a => `${a.slice(0, 6)}…${a.slice(-4)}`;
  const entries = [];
  const addrs = ADDRESSES[network];
  if (addrs) {
    for (const p of products) {
      for (const [name, address] of Object.entries(addrs[p] ?? ({}))) entries.push({
        name,
        address
      });
    }
  }
  let contractsCell;
  if (network === 'devnet' && products.length > 0) {
    contractsCell = <span>{t.devnet}</span>;
  } else if (entries.length > 0) {
    contractsCell = entries.map(({name, address}, i) => <span key={name}>
        {i > 0 && <span className="mx-1 opacity-50">·</span>}
        {name}{' '}
        <a href={EXPLORERS[network] + address} target="_blank" rel="noreferrer" title={address}>
          <code>{short(address)}</code>
        </a>
      </span>);
  }
  const row = (label, value) => <div className="flex flex-wrap gap-x-2">
      <span className="font-semibold min-w-[5.5rem]">{label}</span>
      <span className="flex-1 min-w-0 break-words">{value}</span>
    </div>;
  return <div className="not-prose mb-6 rounded-xl border border-zinc-950/10 dark:border-white/10 bg-zinc-50 dark:bg-white/5 px-4 py-3 text-sm leading-6 text-zinc-700 dark:text-zinc-300">
      {row(t.sdk, <code>@alephium/powfi-sdk@{SDK_VERSION}</code>)}
      {row(t.network, network === 'all' ? t.allNetworks : network)}
      {contractsCell && row(t.contracts, <span>
            {contractsCell}
            <span className="mx-1 opacity-50">·</span>
            <a href={contractsPage}>{t.all} →</a>
          </span>)}
    </div>;
};

<VersionBanner network="mainnet" products={[]} lang="fr" />

```ts theme={null}
import { Powfi } from '@alephium/powfi-sdk'
```

`Powfi` contient la configuration réseau, les providers du nœud et de l'explorateur, le signataire optionnel et une instance de chaque module du protocole.

## `Powfi.load(params)`

```ts theme={null}
static load(config: PowfiLoadParams): Powfi
```

Équivalent à `new Powfi(params)`. Synchrone, sans appel réseau. Enregistre les providers de l'instance comme providers globaux par défaut de `@alephium/web3` (voir [`setCurrentProviders()`](#setcurrentproviders)).

<ParamField path="networkId" type="'mainnet' | 'testnet' | 'devnet'" required>
  Sélectionne les endpoints intégrés et les déploiements de contrats inclus.
</ParamField>

<ParamField path="signer" type="SignerProvider">
  N'importe quel signataire `@alephium/web3` (`PrivateKeyWallet`, `NodeWallet`, connecteur de wallet navigateur). Requis pour les méthodes d'écriture.
</ParamField>

<ParamField path="networkOverrides" type="Partial<Omit<Network, 'id'>>">
  Surcharge `nodeUrl`, `nodeApiKey`, `explorerApiUrl`, `explorerUrl`, `tokenListUrl` ou `name`. Voir [Réseaux](/fr/concepts/networks).
</ParamField>

## Modules

<ResponseField name="cpmm" type="CpmmModule">Pools à produit constant. [Référence](/fr/modules/cpmm)</ResponseField>
<ResponseField name="clmm" type="ClmmModule">Pools à liquidité concentrée. [Référence](/fr/modules/clmm)</ResponseField>
<ResponseField name="staking" type="StakingModule">Staking xALPH. [Référence](/fr/modules/staking)</ResponseField>
<ResponseField name="token" type="TokenModule">Métadonnées des jetons. [Référence](/fr/modules/token)</ResponseField>

## Propriétés

| Propriété | Type | Remarques |
| - | - | - |
| `nodeProvider` | `NodeProvider` | Lecture seule. Construit à partir de `nodeUrl` + `nodeApiKey`. |
| `explorerProvider` | `ExplorerProvider` | Lecture seule. Construit à partir de `explorerApiUrl`. |
| `network` | `Network` | La configuration résolue après surcharges. |
| `tokenListUrl` | `string` | Raccourci pour `network.tokenListUrl`. |
| `signer` | `SignerProvider` | Le getter **lève** `Signer not set` s'il est absent. Modifiable : `powfi.signer = wallet`. |
| `account` | `Account` | Compte mis en cache, optionnel. Le getter lève `Account not set` s'il est absent. Modifiable. |

## Méthodes

### `setCurrentProviders()`

Enregistre le `nodeProvider` et l'`explorerProvider` de cette instance comme providers globaux de `@alephium/web3` (`web3.setCurrentNodeProvider`, `web3.setCurrentExplorerProvider`). `Powfi.load` l'appelle déjà : vous n'en avez besoin que si vous utilisez plusieurs instances du SDK et voulez choisir laquelle utilisent les [artefacts de contrats](/fr/reference/contracts) bruts et les autres bibliothèques qui dépendent du provider global.

### `clearSigner()` / `clearAccount()`

Supprime le signataire ou le compte, par exemple lors de la déconnexion du wallet. Les méthodes d'écriture lèvent ensuite une erreur jusqu'à ce qu'un nouveau signataire soit défini.

## Changer de wallet

Le signataire peut changer à l'exécution sans recharger le SDK :

```ts theme={null}
const powfi = Powfi.load({ networkId: 'mainnet' })

// user connects
powfi.signer = walletSigner

// user switches account or disconnects
powfi.clearSigner()
```

Les modules lisent `powfi.signer` à chaque appel, il n'y a donc aucun autre état à réinitialiser. Le module CLMM met en cache les configurations des paliers de frais, et le module de jetons met en cache la liste de jetons. Ces deux caches dépendent du réseau, pas du wallet.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.