# CAT20铸造手把手教程-从零开始新手指南

By [青澈君](https://paragraph.com/@chuana) · 2024-09-14

---

本人主要分享撸毛｜打新｜套利相关项目信息，欢迎关注我的推特[@qingchejun](https://twitter.com/qingchejun)

[https://twitter.com/qingchejun](https://twitter.com/qingchejun)

UNISAT上的FBCAT-20 MINT结束了，我重新梳理了一个教程，本文主要内容如下:

• 服务器部署与环境配置

• CAT Protocol 安装与编译

• Docker 容器运行

• 钱包创建与管理

• 节点同步状态监控

• 手动铸造操作

• 自动化铸造工具使用

适合: 初学者到中级用户，预计1～2小时可完成。

* * *

0.准备工作
------

1.  部署服务器：我用的是阿里云的 Ubuntu 服务器。选择适当的配置,确保有足够的存储空间（2CPU+4G+至少 50GB硬盘），按量付费会比较灵活，服务器购买入口（未夹带私货）：[https://ecs-buy.aliyun.com/ecs?spm=5176.8789780.J\_4267641240.2.7c4e39fbB77NYx#/custom/postpay/ap-northeast-1，按下图选择即可，未注明的按默认处理](https://ecs-buy.aliyun.com/ecs?spm=5176.8789780.J_4267641240.2.7c4e39fbB77NYx#/custom/postpay/ap-northeast-1%EF%BC%8C%E6%8C%89%E4%B8%8B%E5%9B%BE%E9%80%89%E6%8B%A9%E5%8D%B3%E5%8F%AF%EF%BC%8C%E6%9C%AA%E6%B3%A8%E6%98%8E%E7%9A%84%E6%8C%89%E9%BB%98%E8%AE%A4%E5%A4%84%E7%90%86)
    

![](https://storage.googleapis.com/papyrus_images/16e0aa81c6dbecf590db283555251a0d2290e06dc6819490b9d0b642d4085946.png)

![](https://storage.googleapis.com/papyrus_images/1cd11a744bd41d78df364a2162dc8dbcb6744f46cfc6426575582156647392e1.png)

![](https://storage.googleapis.com/papyrus_images/7d648ec680a5682755c985bda28ebd05bdf20eabe47f05e42c53686cc3cb1e2d.png)

2\. 连接到服务器：使用 SSH 客户端（如 PuTTY 或终端）连接到您的服务器。

**以通过终端（Terminal）使用SSH命令连接到服务器为例：**

基本格式为: ssh 用户名@服务器IP地址，例如: ssh [root@123.456.789.10](mailto:root@123.456.789.10)

如果是首次连接到该服务器,你可能会看到类似这样的提示: The authenticity of host '123.456.789.10 (123.456.789.10)' can't be established. ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Are you sure you want to continue connecting (yes/no/\[fingerprint\])? 输入 yes 并按回车键。 输入服务器密码 系统会提示你输入密码。输入时,屏幕上不会显示任何字符,这是正常的安全措施。 输入完成后按回车键，即可登录。

**3\. 更新系统（必做）：**

    sudo apt-get update && sudo apt-get upgrade -y
    

说明：这个命令会更新系统软件包列表并升级已安装的软件包。

1\. 环境配置
========

安装 Docker、docker-compose 和 Node.js 环境。

    sudo apt-get install docker.io -y
    
    VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*\d')
    DESTINATION=/usr/local/bin/docker-compose
    sudo curl -L https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m) -o $DESTINATION
    sudo chmod 755 $DESTINATION
    
    sudo apt-get install npm -y
    sudo npm install n -g
    sudo n stable
    sudo npm i -g yarn
    

说明：这些命令会依次安装 Docker、docker-compose、npm、Node.js 和 Yarn。每个命令可能需要一些时间来完成,请耐心等待。

验证安装：

    docker --version
    docker-compose --version
    node --version
    npm --version
    yarn --version
    

说明：这些命令会显示各个工具的版本号。如果正确安装,应该能看到版本信息而不是错误消息。

* * *

2\. 拉取 Git 仓库和编译
================

    git clone https://github.com/CATProtocol/cat-token-box
    cd cat-token-box
    yarn install
    yarn build
    

说明：

*   git clone 会下载 CAT Protocol 的源代码到当前目录。
    
*   cd cat-token-box 进入下载的目录。
    
*   yarn install 安装项目依赖,这可能需要几分钟。
    
*   yarn build 编译项目,也可能需要一些时间。
    

* * *

3.运行 Docker 容器
==============

3.1 运行 Fractal 节点：

    cd ./packages/tracker/
    sudo chmod 777 docker/data
    sudo chmod 777 docker/pgdata
    sudo docker-compose up -d
    

说明：

*   cd ./packages/tracker/ 进入 tracker 目录。
    
*   chmod 命令更改目录权限,确保 Docker 可以访问这些目录。
    
*   docker-compose up -d 启动 Fractal 节点。-d 参数使容器在后台运行。
    

3.2 运行 CAT Protocol 索引器：

    cd ../../
    sudo docker build -t tracker:latest .
    sudo docker run -d \
        --name tracker \
        --add-host="host.docker.internal:host-gateway" \
        -e DATABASE_HOST="host.docker.internal" \
        -e RPC_HOST="host.docker.internal" \
        -p 3000:3000 \
        tracker:latest
    

说明：

*   cd ../../ 返回到项目根目录。
    
*   docker build 构建 Docker 镜像。
    
*   docker run 运行 CAT Protocol 索引器。确保 3000 端口未被占用。
    

* * *

4\. 创建钱包
========

创建配置文件：

    cd packages/cli
    nano config.json
    

说明：nano config.json会打开 nano 文本编辑器。

在 config.json 中添加以下内容：

    {
      "network": "fractal-mainnet",
      "tracker": "http://127.0.0.1:3000",
      "dataDir": ".",
      "maxFeeRate": 30,
      "rpc": {
          "url": "http://127.0.0.1:8332",
          "username": "bitcoin",
          "password": "opcatAwesome"
      }
    }
    

保存并退出：在 nano 中,按 Ctrl+X,然后按 Y 确认保存,最后按 Enter 确认文件名。

创建钱包：

    yarn cli wallet create
    

![](https://storage.googleapis.com/papyrus_images/cf9a9a0b4ebba6eaa3198cc7a151fe73262303518c9b132157e0339be18795c9.png)

**说明：这将创建一个新的钱包。执行后,会看到上图所示的一串助记词，请务必安全地保存好。**

* * *

5\. 查看节点同步状态
------------

输入以下命令，可以随时查看全节点同步情况

    sudo docker exec tracker-bitcoind-1 /usr/local/bin/bitcoin-cli -rpcuser=bitcoin -rpcpassword=opcatAwesome getblockchaininfo
    

![](https://storage.googleapis.com/papyrus_images/812efa1dded5b9b466c3339b0b7596fad2e8b47a863094dc3ccbde94a3176c1a.png)

* * *

6\. 进行铸造（Mint）操作
----------------

确保节点已完全同步后,可以使用以下命令进行铸造：

    sudo yarn cli mint -i 45ee725c2c5993b3e4d308842d87e973bf1951f5f7a804b21e4dd964ecd12d6b_0 5
    

说明：

*   请确保使用正确的输入（UTXO）。
    
*   5 表示铸造 5 个 CAT 代币,您可以根据需要调整这个数字。
    
*   执行此命令可能需要一些时间，取决于网络状况。
    
*   可以在最后加上“--fee-rate 数字”，自定义GAS，以500GAS为例就是这样
    

    sudo yarn cli mint -i 45ee725c2c5993b3e4d308842d87e973bf1951f5f7a804b21e4dd964ecd12d6b_0 5 --fee-rate 500
    

* * *

7\. 自动化 Mint 工具
===============

使用说明

为了简化 Mint 过程，我编写了一个可自动匹配实时GAS的全自动化MINT工具，实现了自动循环MINT CAT 代币。

主要组件：

*   get\_fee\_rate.py：获取当前 GAS 费率的 Python 脚本
    
*   [script.sh](http://script.sh)：执行 Mint 操作的 主脚本
    

使用方法

1.  确保 get\_fee\_rate.py 和 [script.sh](http://script.sh) 在同一目录下。
    
2.  安装依赖： pip install playwright playwright install chromium 说明：这会安装必要的 Python 库和浏览器。
    
3.  给予 [script.sh](http://script.sh) 执行权限： chmod +x [script.sh](http://script.sh) 说明：这使得脚本可以被执行。
    
4.  运行脚本： ./script.sh 说明：这会启动自动化 Mint 过程。脚本会持续运行,自动处理 Mint 操作。
    

### get\_fee\_rate.py

    cd cat-token-box
    

进入cat-token-box目录。

复制以下内容到文件中：

    from playwright.sync_api import sync_playwright
    import sys
    
    def get_fractal_fee_rate():
        with sync_playwright() as p:
            browser = p.chromium.launch(headless=True)
            page = browser.new_page()
            try:
                page.goto('https://explorer.unisat.io/fractal-mainnet/block')
                page.wait_for_load_state('networkidle')
                xpath = '//*[@id="__next"]/div[1]/div[2]/div[2]/div/div/span[1]'
                fee_element = page.wait_for_selector(xpath, state="attached", timeout=30000)
                
                if fee_element:
                    text = fee_element.inner_text().strip()
                    if text.isdigit():
                        fee = int(text)
                        adjusted_fee = int(fee * 1.03)  # 将费率提高 3%
                        print(f"{fee},{adjusted_fee}")
                        return
                    else:
                        print(f"提取的文本不是数字: {text}", file=sys.stderr)
                else:
                    print("未找到匹配的GAS费率元素", file=sys.stderr)
            except Exception as e:
                print(f"获取Fractal网络GAS费率时出错: {e}", file=sys.stderr)
            finally:
                browser.close()
        print("error")
    
    if __name__ == "__main__":
        get_fractal_fee_rate()
    

保存并退出：按 Ctrl+X,然后 Y,最后 Enter。

### script.sh

创建文件：

    nano script.sh
    

复制以下内容到文件中：

    #!/bin/bash
    
    last_used_index=-1
    
    get_next_input() {
        local base_txid="45ee725c2c5993b3e4d308842d87e973bf1951f5f7a804b21e4dd964ecd12d6b"
        last_used_index=$((last_used_index + 1))
        echo "${base_txid}_${last_used_index}"
    }
    
    get_gas_fee() {
        local result=$(python3 get_fee_rate.py 2>/dev/null)
        if [[ $result == *","* ]]; then
            IFS=',' read -ra FEES <<< "$result"
            echo "${FEES[1]}"
        else
            echo ""
        fi
    }
    
    while true; do
        current_fee=$(get_gas_fee)
        if [[ $current_fee =~ ^[0-9]+$ ]]; then
            echo "当前GAS费用: $current_fee sats/vB"
            
            new_input=$(get_next_input)
            echo "尝试使用输入: $new_input"
            
            command="sudo yarn cli mint -i $new_input 5 --fee-rate $current_fee"
            output=$($command 2>&1)
            
            if echo "$output" | grep -q "No token found for tokenId"; then
                echo "无可用UTXO，尝试下一个输入"
                continue
            elif echo "$output" | grep -q "Start merging your \[CAT\] tokens"; then
                echo "Mint操作开始..."
                if echo "$output" | grep -q "mint failed"; then
                    echo "Mint操作失败，等待60秒后重试"
                    sleep 60
                else
                    echo "Mint操作成功"
                fi
            else
                echo "未知错误，等待60秒后重试"
                sleep 60
            fi
        else
            echo "无法获取有效的GAS费用，等待10秒后重试"
            sleep 10
        fi
    
        sleep 1
    done
    

保存并退出：按 Ctrl+X,然后 Y,最后 Enter。

至此，在终端中运行 ./script.sh，回车即可。

本教程完。

* * *

本文参考教程：

[https://mirror.xyz/3p-labs.eth/0IWdR6toFMACCRZTwTAF3XFAv2TiEAPEAHqzVF707g8](https://mirror.xyz/3p-labs.eth/0IWdR6toFMACCRZTwTAF3XFAv2TiEAPEAHqzVF707g8)

---

*Originally published on [青澈君](https://paragraph.com/@chuana/cat20)*
