> ## 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

> SDK 入口：网络、provider、签名器和模块实例。

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="zh" />

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

`Powfi` 持有网络配置、节点和浏览器 provider、可选的签名器，以及每个协议模块的一个实例。

## `Powfi.load(params)`

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

等价于 `new Powfi(params)`。同步执行，不发起网络请求。会把实例的 provider 注册为全局 `@alephium/web3` 默认值（见 [`setCurrentProviders()`](#setcurrentproviders)）。

<ParamField path="networkId" type="'mainnet' | 'testnet' | 'devnet'" required>
  选择内置端点和打包的合约部署。
</ParamField>

<ParamField path="signer" type="SignerProvider">
  任意 `@alephium/web3` 签名器（`PrivateKeyWallet`、`NodeWallet`、浏览器钱包连接器）。写入方法必需。
</ParamField>

<ParamField path="networkOverrides" type="Partial<Omit<Network, 'id'>>">
  覆盖 `nodeUrl`、`nodeApiKey`、`explorerApiUrl`、`explorerUrl`、`tokenListUrl` 或 `name`。见[网络](/zh/concepts/networks)。
</ParamField>

## 模块

<ResponseField name="cpmm" type="CpmmModule">恒定乘积池。[参考](/zh/modules/cpmm)</ResponseField>
<ResponseField name="clmm" type="ClmmModule">集中流动性池。[参考](/zh/modules/clmm)</ResponseField>
<ResponseField name="staking" type="StakingModule">xALPH 质押。[参考](/zh/modules/staking)</ResponseField>
<ResponseField name="token" type="TokenModule">代币元数据。[参考](/zh/modules/token)</ResponseField>

## 属性

| 属性 | 类型 | 说明 |
| - | - | - |
| `nodeProvider` | `NodeProvider` | 只读。由 `nodeUrl` + `nodeApiKey` 构建。 |
| `explorerProvider` | `ExplorerProvider` | 只读。由 `explorerApiUrl` 构建。 |
| `network` | `Network` | 应用覆盖值后的最终配置。 |
| `tokenListUrl` | `string` | `network.tokenListUrl` 的快捷方式。 |
| `signer` | `SignerProvider` | 未设置时 getter 会**抛出** `Signer not set`。可赋值：`powfi.signer = wallet`。 |
| `account` | `Account` | 可选的缓存账户。未设置时 getter 抛出 `Account not set`。可赋值。 |

## 方法

### `setCurrentProviders()`

把当前实例的 `nodeProvider` 和 `explorerProvider` 注册为全局 `@alephium/web3` provider（`web3.setCurrentNodeProvider`、`web3.setCurrentExplorerProvider`）。`Powfi.load` 已经调用过它，所以只有在同时运行多个 SDK 实例、需要切换原始[合约产物](/zh/reference/contracts)和其他依赖全局 provider 的库所用的实例时，才需要调用。

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

移除签名器或账户，例如在钱包断开连接时。之后写入方法会抛出错误，直到设置新的签名器。

## 切换钱包

签名器可以在运行时更换，无需重新加载 SDK：

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

// user connects
powfi.signer = walletSigner

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

模块在每次调用时读取 `powfi.signer`，所以不需要重置其他状态。CLMM 模块会缓存费率档位配置，代币模块会缓存代币列表。这两个缓存都与网络相关，与钱包无关。


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