# 管理通证

本指南提供使用 OCAP Client 管理同质化通证的分步说明。您将学习如何设置通证工厂（它作为您通证的蓝图），然后用它来铸造（创建新通证）和销毁（销毁现有通证）。这些操作是在您的应用程序中创建和管理自定义经济体系的基础。

铸造通证后，您可以在账户之间转移它们。有关该过程的更多详细信息，请参阅[转移通证和 NFT](./how-to-guides-transfer-tokens-and-nfts.md) 指南。


## 创建通证工厂

通证工厂是一个智能合约，它定义了同质化通证的属性和规则，例如其名称、符号和供应机制。它还管理铸造和销毁的过程。创建工厂是任何新通证进入流通前的第一步。

`createTokenFactory` 方法将一个新的通证工厂部署到区块链上。

### 参数

<x-field-group>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="工厂所有者的钱包对象，用于签署交易。"></x-field>
  <x-field data-name="token" data-type="object" data-required="true" data-desc="一个定义待创建通证属性的对象。">
    <x-field data-name="name" data-type="string" data-required="true" data-desc="通证的全名（例如，'My Awesome Token'）。"></x-field>
    <x-field data-name="symbol" data-type="string" data-required="true" data-desc="通证的股票代码符号（例如，'MAT'）。"></x-field>
    <x-field data-name="decimal" data-type="number" data-required="true" data-desc="通证支持的小数位数。"></x-field>
    <x-field data-name="description" data-type="string" data-required="false" data-desc="通证的简要描述。"></x-field>
    <x-field data-name="icon" data-type="string" data-required="false" data-desc="通证图标的 URL。"></x-field>
    <x-field data-name="maxTotalSupply" data-type="number" data-required="false" data-desc="可铸造的最大总供应量。"></x-field>
  </x-field>
  <x-field data-name="curve" data-type="object" data-required="false" data-desc="联合曲线的配置，它以编程方式控制通证的价格。如果省略，铸造/销毁将不与储备通证挂钩。">
    <x-field data-name="basePrice" data-type="number" data-required="false" data-desc="通证以储备货币计价的基础价格。"></x-field>
    <x-field data-name="fixedPrice" data-type="number" data-required="false" data-desc="通证的固定价格，如果不使用动态曲线。"></x-field>
    <x-field data-name="slope" data-type="number" data-required="false" data-desc="联合曲线的斜率，决定其陡峭程度。"></x-field>
  </x-field>
  <x-field data-name="feeRate" data-type="number" data-default="0" data-required="false" data-desc="铸造和销毁操作的费率（以基点为单位）。"></x-field>
  <x-field data-name="data" data-type="object" data-required="false" data-desc="附加到通证工厂的可选自定义数据。"></x-field>
</x-field-group>

### 返回值

返回一个 promise，该 promise 会解析为一个数组，其中包含交易哈希和新创建的通证工厂地址。

<x-field-group>
  <x-field data-name="[0]" data-type="string" data-desc="工厂创建的交易哈希。"></x-field>
  <x-field data-name="[1]" data-type="string" data-desc="新通证工厂的地址。"></x-field>
</x-field-group>

### 示例

```javascript 创建通证工厂 icon=logos:javascript
import Client from '@ocap/client';
import Wallet from '@ocap/wallet';

const endpoint = 'https://beta.abtnetwork.io/api';
const client = new Client(endpoint);
const wallet = Wallet.fromRandom();

// 首先，确保钱包中有资金。您可以从水龙头获取测试通证：
// https://faucet.abtnetwork.io/

async function createFactory() {
  try {
    const [hash, factoryAddress] = await client.createTokenFactory({
      wallet,
      token: {
        name: 'My Game Coin',
        symbol: 'MGC',
        decimal: 18,
        description: 'The official currency for My Awesome Game.',
        maxTotalSupply: 1000000,
      },
      feeRate: 100, // 1% 手续费
    });

    console.log('Token factory created successfully!');
    console.log('Transaction Hash:', hash);
    console.log('Factory Address:', factoryAddress);
    return factoryAddress;
  } catch (error) {
    console.error('Error creating token factory:', error);
  }
}

createFactory();
```


## 铸造通证

铸造是创建新通证并将其添加到总供应量的过程。这是通过通证工厂完成的。如果工厂配置了联合曲线，铸造将需要使用储备通证进行支付。

`mintToken` 方法会启动一个交易，从工厂铸造指定数量的通证。

### 参数

<x-field-group>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="为铸造操作提供资金并签署交易的钱包。"></x-field>
  <x-field data-name="tokenFactory" data-type="string" data-required="true" data-desc="要从中铸造通证的通证工厂地址。"></x-field>
  <x-field data-name="amount" data-type="number" data-required="true" data-desc="要铸造的通证数量。"></x-field>
  <x-field data-name="receiver" data-type="string" data-required="true" data-desc="将接收新铸造通证的地址。"></x-field>
  <x-field data-name="maxReserve" data-type="number" data-required="true" data-desc="钱包愿意花费的储备通证的最大数量。这可作为一种滑点保护机制。"></x-field>
  <x-field data-name="data" data-type="object" data-required="false" data-desc="附加到铸造交易的可选自定义数据。"></x-field>
</x-field-group>

### 返回值

返回一个 promise，该 promise 会解析为交易哈希。

<x-field data-name="hash" data-type="string" data-desc="铸造操作的交易哈希。"></x-field>

### 示例

```javascript 从工厂铸造通证 icon=logos:javascript
async function mintNewTokens(factoryAddress) {
  try {
    const hash = await client.mintToken({
      wallet,
      tokenFactory: factoryAddress,
      amount: 5000,
      receiver: wallet.address, // 将通证铸造到我们自己的钱包
      maxReserve: 10, // 支付的最大储备通证。根据联合曲线价格进行调整。
    });

    console.log('Tokens minted successfully!');
    console.log('Transaction Hash:', hash);
  } catch (error) {
    console.error('Error minting tokens:', error);
  }
}

// 假设 `factoryAddress` 可从 createFactory 示例中获取
// const factoryAddress = '...'; 
// mintNewTokens(factoryAddress);
```


## 销毁通证

销毁与铸造相反；它会永久地将通证从流通中移除。如果通证工厂使用联合曲线，销毁通证将按比例向用户返还储备货币。

`burnToken` 方法启动此过程。

### 参数

<x-field-group>
  <x-field data-name="wallet" data-type="WalletObject" data-required="true" data-desc="持有待销毁通证并将签署交易的钱包。"></x-field>
  <x-field data-name="tokenFactory" data-type="string" data-required="true" data-desc="通证工厂的地址。"></x-field>
  <x-field data-name="amount" data-type="number" data-required="true" data-desc="要销毁的通证数量。"></x-field>
  <x-field data-name="receiver" data-type="string" data-required="true" data-desc="将接收返还的储备通证的地址。"></x-field>
  <x-field data-name="minReserve" data-type="number" data-required="true" data-desc="钱包期望收到的储备通证的最低数量。这可以防止价格滑点。"></x-field>
  <x-field data-name="data" data-type="object" data-required="false" data-desc="附加到销毁交易的可选自定义数据。"></x-field>
</x-field-group>

### 返回值

返回一个 promise，该 promise 会解析为交易哈希。

<x-field data-name="hash" data-type="string" data-desc="销毁操作的交易哈希。"></x-field>

### 示例

```javascript 销毁通证 icon=logos:javascript
async function burnExistingTokens(factoryAddress) {
  try {
    const hash = await client.burnToken({
      wallet,
      tokenFactory: factoryAddress,
      amount: 1000,
      receiver: wallet.address, // 将储备通证接收回我们自己的钱包
      minReserve: 1, // 接收的最小储备通证。根据联合曲线价格进行调整。
    });

    console.log('Tokens burned successfully!');
    console.log('Transaction Hash:', hash);
  } catch (error) {
    console.error('Error burning tokens:', error);
  }
}

// 假设 `factoryAddress` 可从 createFactory 示例中获取
// const factoryAddress = '...'; 
// burnExistingTokens(factoryAddress);
```


## 总结

在本指南中，您学习了管理同质化通证的完整生命周期：创建工厂、铸造新通证以及销毁它们以减少供应。这些强大的原语使您能够在 OCAP 平台上构建复杂的经济系统。

既然您知道了如何创建通证，下一个合乎逻辑的步骤就是学习如何转移它们。请前往[转移通证和 NFT](./how-to-guides-transfer-tokens-and-nfts.md) 指南，了解具体操作方法。
