Bittensor 挖矿指南

Bittensor 挖矿指南

选择子网(Choosing a subnet)

Bittensor 的所有挖矿活动都发生在某个子网内。每个子网都会独立生产其目标数字商品。
每个子网的创建者会定义一套激励机制,供验证者(validators)用来评判矿工(miners)的工作表现。
验证者根据子网激励机制为矿工评分,这些评分决定了每个矿工从子网发行(emissions)中获得的份额。
参见 Emissions

Bittensor 挖矿与比特币或其他区块链挖矿有显著不同。它是 主动的、创造性的、具有竞争性的
准备成为一个子网矿工需要研究并选择适合你专业知识与硬件资源的子网。

你可以在 TAO.app 子网列表 浏览子网,并访问它们的代码仓库链接。


典型计算要求(Typical compute requirements)

每个子网可能有不同的硬件要求,但以下模板可作为典型子网节点矿工的最低内存、带宽和存储需求参考。

挖矿不支持 Windows 系统。


矿工注册(Miner registration)

要作为矿工参与,你必须先在子网中注册一个热钱包(hotkey),以便获得该子网的 UID。

你不需要创建子网即可挖矿。
大多数矿工在已建立的子网上工作。

注册会消耗 TAO,费用根据上次注册后的时间动态波动。
一旦你在主链的子网中获得 UID 槽位,这笔 TAO 为沉没成本,不可退回

一个子网最多可以有 64 个验证者 UID192 个矿工 UID(总计 256 个,Subnet 1 除外)。

注册后,你的钱包中的热钱包将持有该 UID 槽位。


所有权属于热钱包(Ownership belongs to a hotkey)

当你将 TAO 委托给子网验证者时,你的委托 TAO 会附加到该验证者的热钱包上。
参见 Delegation

一个热钱包可以同时持有多个子网的 UID。
然而,在同一个子网内,每个 UID 必须有唯一的热钱包。

注册命令格式:

1
btcli subnet register --netuid <子网ID> --wallet.name <冷钱包名称> --wallet.hotkey <热钱包名称>

例如注册到 Subnet 1:

1
btcli subnet register --netuid 1 --wallet.name test-coldkey --wallet.hotkey test-hotkey

矿工注销(Miner deregistration)

如果矿工因获得验证者的权重(rating)较低而导致排放收益(emissions)较低,则可能会被注销。
典型子网有 256 个 UID 槽位,其中最多 64 个为验证者。
每个节奏(tempo)周期,得分最低的 UID 会被注销并分配给新的注册者。

每个子网有一个 immunity_period 超参数(以区块数表示)。
参见 immunity_period

immunity_period 到期后,如果矿工或验证者表现最差且子网有新注册发生,就可能被注销。
免疫期从注册时开始计算。验证者与矿工均可因低排放被注销。

如果子网未满(未达到 256 UID),则不会发生注销。


注销基于排放(Deregistration is based on emissions)

子网在注销时不区分矿工与验证者,只考虑排放(emissions,即“pruning score”)。
每当子网发生新注册时,排放最低且不在免疫期内的节点会被移除


免疫期(Immunity period)

每个子网有一个以区块为单位的免疫期超参数。
免疫期计算公式:

1
is_immune = (当前区块 - 注册区块) < immunity_period

默认值:4096 区块 ≈ 13.7 小时。

特殊情况:

  • 如果所有节点均在免疫期,则分数最低的节点将在下一次注册时被注销。
  • 如果有多个节点并列最低分,则较早注册的节点优先被注销。
  • 子网所有者的热钱包具有永久免疫。

注册流程示意图(Registration flow diagram)

  1. 每 12 秒处理一个区块
  2. 矿工注册热钱包并获得 UID,免疫期开始
  3. 矿工发布其 Axon 的 IP:PORT
  4. 验证者刷新元图(metagraph)并发现新节点
  5. 验证者向节点发送请求并评估其响应
  6. 矿工在免疫期内从 0 开始积累排放
  7. 若免疫期过后排放过低,新注册者可替代其 UID

矿工排放(Subnet miner emission)

排放(emission)并不总是平滑曲线。

  • 有些子网在 tempo 周期末才更新排放
  • 有些验证者可能更频繁刷新,例如每 100 区块更新

迁移矿机(Moving a subnet miner to a different machine)

可以将矿机迁移至另一台机器,但需谨慎:

  1. 先在新机器启动矿工
  2. 等待旧矿机停止接收请求
  3. 停止旧矿机
  4. 等待验证者刷新 IP

查看 UID(Inspecting UIDs)

注册后可使用以下命令查看:

1
btcli wallet overview --netuid <子网ID>

输出参数示例与详解:

参数 示例值 说明
COLDKEY my_coldkey 与 UID 关联的冷钱包名称
HOTKEY my_first_hotkey 与 UID 关联的热钱包名称
UID 5 矿工在该子网的唯一标识
ACTIVE True 矿工是否处于活跃状态
STAKE(τ) 71.296 冷钱包质押的 TAO 数量
RANK 0.0629 矿工排名,基于验证者评分
TRUST 0.2629 矿工信任度,占所有验证者的比例
CONSENSUS 0.89 矿工在网络共识中的得分
INCENTIVE 0.029 激励得分,衡量矿工的价值贡献
DIVIDENDS 0.001 验证者分红(若为验证者角色)
EMISSION 29,340,153 (RAO) 矿工获得的发放奖励(单位 RAO)
VTRUST 0.96936 验证者信任得分(若该节点为验证者)
VPERMIT * 是否允许作为验证者参与该子网
UPDATED 43 矿工上次提交权重更新后的区块数
AXON 131.186.56.85:8091 矿机节点对外提供的 IP:PORT
HOTKEY_SS58 5F4tQyWr... 热钱包的 SS58 编码地址

📦 迁移矿工

如果你的矿工已经在运行,你可以将其迁移到另一台机器上,但请务必谨慎操作。

迁移步骤:

  1. 新机器上启动矿工程序。
  2. 等待一段时间,确保旧机器上的矿工不再接收来自验证者的请求。
  3. 停止旧机器上的矿工程序。

提示: 验证者需要一些时间来更新矿工 Axon 的 IP 地址,所以这一过程可能不会立即完成。

🔍 编程检查注册状态

你也可以使用 Python 脚本来检查矿工的注册状态。

方法一:使用 SS58 热钱包地址

Python

1
2
3
4
5
6
7
import bittensor as bt

hotkey = "你的_SS58_热钱包地址"
network = "finney"
sub = bt.subtensor(network)

print(f"热钱包 {hotkey} 的注册状态:{sub.is_hotkey_registered(hotkey)}")

方法二:使用 SS58 和 netuid

Python

1
2
3
4
5
6
7
8
9
10
11
12
import bittensor as bt

hotkey = "你的_SS58_热钱包地址"
network = "finney"
netuid = 1 # 子网 UID
sub = bt.subtensor(network)
mg = sub.metagraph(netuid)

if hotkey not in mg.hotkeys:
print(f"热钱包 {hotkey} 已注销")
else:
print(f"热钱包 {hotkey} 已注册")

希望这篇指南能帮助你顺利踏上 Bittensor 的挖矿之旅