# 管理代幣

本指南提供了使用 OCAP 用戶端管理同質化代幣的逐步說明。您將學習如何設定一個代幣工廠，它作為您代幣的藍圖，然後用它來鑄造（創建新代幣）和銷毀（摧毀現有代幣）。這些操作是在您的應用程式中創建和管理自訂經濟體系的基礎。

一旦您鑄造了代幣，就可以在帳戶之間轉移它們。有關該過程的更多詳細資訊，請參閱 [轉移代幣與 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，其會解析為一個包含交易雜湊和新創建代幣工廠地址的陣列。

<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，其會解析為交易雜湊。

<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，其會解析為交易雜湊。

<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) 指南查看如何操作。
