XCHPool · 加入矿池 · NanoFarmer · Chia 区块链浏览器 · My Farm · News · FAQ

NanoFarmer 的工作原理

NanoFarmer 如何工作

XCHPool NanoFarmer · 技术细节

您的电脑上运行什么,XCHPool 运行什么,二者之间传递哪些消息,以及是什么在保护您的密钥和奖励。本页写给想了解细节的农民。

Chia 2.7.4 farmer 和 harvester

全节点做什么,NanoFarmer 改变了什么

耕种 Chia 需要三个协同工作的程序。Chia 官方应用在您的电脑上运行全部三个。NanoFarmer 在您的电脑上保留其中两个,第三个交给 XCHPool 运行。

Harvester

读取您的 plot。对每个信号点,它都会应用 plot 过滤器,只让一小部分 plot 通过(主网目前为 256 个中的 1 个),并在通过的 plot 中查找空间证明。

Farmer

把每个信号点发给 harvester,并接收它找到的证明。达到您矿池难度的证明会成为发给矿池的部分证明;足以赢得区块的证明则交给全节点。它与 harvester 一起为部分证明和区块签名。

全节点

保存整个区块链的副本(远超 100 GB),并与网络保持同步。它大约每 9.4 秒提供一个新的信号点,并在您的证明获胜时构建并广播区块。

NanoFarmer 在您的电脑上原样运行 Chia 自己的 farmer 和 harvester,并用一个到 XCHPool 的连接取代全节点。XCHPool 的全节点提供信号点,并在您获胜时构建区块。无需下载或同步任何东西,您的密钥始终在您手中。

不包含:把您的助记词导入 Sage 或 Chia 钱包即可查看奖励

组件

每个部分做什么、在哪里运行、用什么构建。

NanoFarmer 应用

它可以在您登录时启动:在 Windows 上是按用户的启动项,在 macOS 上是 LaunchAgent,在 Linux 上是 systemd 用户服务。无需管理员权限。在 Windows 上,通知区域中的图标可在窗口关闭后重新打开它,也可以退出 NanoFarmer。

每个系统一个程序。它作为后台代理运行,负责监管引擎、运行 uplink、提供本地界面并安装更新。

窗口在 macOS 上是原生窗口,在 Windows 和 Linux 上是 Edge 或 Chrome(或您的默认浏览器)的应用窗口。关闭窗口不会停止耕种。

命令行提供相同的功能,因此 NanoFarmer 也可以在没有屏幕的情况下通过 SSH 运行,例如在 Raspberry Pi 上。

Uplink

连接中断时,它会自动重连,等待间隔从 1 秒逐渐增加到 30 秒。

一个位于 127.0.0.1 的替身全节点。Chia 的 farmer 连接它的方式与连接真正的全节点完全相同,通过 TLS 1.3 并使用引擎自己的证书。

它把 Chia 的消息逐字节复制到一个通往 gateway 的 WebSocket 中。额外的只有 gateway 自己的少量文本消息(问候、警告、统计);它们从不会到达 farmer,警告会显示在应用中。

它的签名防护会检查与您的奖励相关的少数几条消息(参见“密钥与信任”)。

Gateway

只转发耕种到 XCHPool 的 Plot NFT 的证明。它限制每个互联网地址的连接数和总连接数,拒绝连接时会告诉应用原因。

NanoFarmer 服务器的一部分,基于 Chia 2.7.4 自己的网络代码构建。对您的 farmer 来说它是全节点;对 XCHPool 的全节点来说它是 farmer。

把每个新信号点向每个已连接的 NanoFarmer 发送一次,并在您连接后立即发送最新的一个。

在全节点看到之前,精确检查每个声明的证明:真实的信号点、Plot NFT plot、确实获胜的有效证明、匹配的签名、没有重复。

NanoFarmer 服务器

位于 https://pool.xchpool.org 的 REST 服务,专为应用而设。浏览器只读取其中公开的发布文件和更新清单,就像 NanoFarmer 页面为下载所做的那样。

查找您的 Plot NFT,准备由矿池付费的创建和加入,并提供发布版本和已签名的更新清单。

用它自己的出资钱包支付新 Plot NFT 和加入手续费,该钱包与矿池自己的钱包分开。

矿池

就是每位成员都在其中耕种的那个 XCHPool,使用标准的矿池协议 v1。

您的 farmer 自行注册,并把部分证明直接发送到矿池,而不是经过 gateway。积分和付款与其他所有成员相同。

Chain API

XCHPool 的公共区块链 API,是独立于 NanoFarmer 服务器的服务。

在信任一个 Plot NFT 之前,应用用它在区块链上找到该 Plot NFT 的币;从 self-pooling 加入之前,还用它检查 Plot NFT 上是否还有待领取的奖励。

矿池浏览器与 My Farm

应用中的“打开 My Farm”会用您 Plot NFT 的矿池登录链接为您登录。

每个 NanoFarmer 安装在 My Farm 上都是一个独立的 harvester。矿池接受其第一个部分证明后不久,应用会按设备为它命名(品牌、型号和系统;绝不使用您的电脑名称或用户名)。您可以在应用中或在 My Farm 上重命名它。

部分证明响应时间卡片显示每个 harvester 的响应速度。

从信号点到部分证明或区块

大约每 9.4 秒发生一次的过程,附上 Chia 使用的消息名称。

新的信号点

XCHPool 的全节点把每个信号点发送给 gateway,gateway 再把它向每个已连接的 NanoFarmer 转发一次。

检查并转交

Uplink 检查信号点的哈希是否与随附的数据相符,然后把它交给 farmer。

Plot 过滤与查找

Harvester 应用 plot 过滤器,在通过的 plot 中查找证明,并返回找到的每个证明。

部分证明发往矿池

达到您矿池难度的证明会成为部分证明。Harvester 用 plot 密钥为它签名,farmer 加上自己的签名,并通过 HTTPS 直接发送到矿池。矿池检查它、给予积分并记录响应时间。

声明

足以赢得区块的证明会被声明。Uplink 要求其中包含您自己的奖励地址,并索取之后要它签名的那些哈希背后的数据。Gateway 检查该证明以及它是否确实获胜,然后把它交给全节点。不能获胜的证明会让全节点断开与 gateway 的连接,这就是 gateway 检查如此严格的原因。

签名

全节点构建区块并请求区块签名。只有当区块把 farmer 奖励支付到您的地址时,uplink 才会放行该请求。Harvester 签名,签名沿原路返回。

广播

全节点完成区块并广播它。Farmer 奖励(0.125 XCH 加上区块的手续费)进入您的奖励地址;矿池的份额进入您 Plot NFT 的矿池地址,由 XCHPool 领取。

密钥与信任

您的密钥始终留在您的电脑上。这里说明这在实际中意味着什么,NanoFarmer 会签什么、不会签什么,以及 XCHPool 一方能做什么、不能做什么。

您的密钥存放在哪里

在设置中可以再次显示助记词,以便您抄写在纸上:只有在您确认之后才显示,设置了密码短语时还需输入它,没有复制按钮,并且一分钟后会再次隐藏。

NanoFarmer 创建一个新的 24 词密钥或导入您的密钥,并把它保存在自己的 Chia 密钥库中,位于自己的数据文件夹里,绝不放在 Chia 官方应用的密钥文件夹中。

Farmer 从该密钥库读取它的 farmer 密钥、矿池登录密钥和 Plot NFT 所有者密钥。这些助记词从不离开您的电脑,也从不写入日志。

可选的密码短语(至少 8 个字符)会加密密钥库。NanoFarmer 把它保存在系统的凭据存储中,让耕种能自动开始;如果系统没有凭据存储,每次启动后都会询问密码短语。

NanoFarmer 签什么,拒绝什么

矿池参数:矿池 URL、矿池目标地址、锁定高度和延迟时间都内置在应用中。只要有任何不同,无论服务器怎么说,应用都拒绝创建、加入或签名。

Plot NFT 花费:辅助程序会用 Chia 自己的 puzzle 代码重建服务器提议的每一笔花费,将其与应用内置的矿池参数核对,然后才签名。它从不签署无法重建的哈希。

区块:Chia 的 farmer 签署区块哈希时看不到它们代表什么,而全节点从一个未签名的字段中获取 farmer 奖励地址。因此,只有当签名请求附带区块数据、该数据与哈希相符,并且把 farmer 奖励支付到 NanoFarmer 设置的地址时,uplink 的签名防护才会放行该请求。

信号点:为信号点签名的 plot 密钥也为区块签名。防护只放行那些哈希正是其自身源数据哈希的信号点,这些源数据绝不可能是区块数据,而且频率不超过链本身速率的几倍。

XCHPool 一方能做什么、不能做什么

Chia 的共识规则会把每个区块中矿池的份额发送到您 Plot NFT 的矿池地址,与任何矿池一样。

Gateway 和 XCHPool 的全节点可能扣下或破坏您赢得的区块,任何您所依赖的全节点都可能这样做。但它们无法让 NanoFarmer 签署一个把您的 farmer 奖励支付给别人的区块。

伪造的信号点(Chia 的 farmer 协议不携带时间证明)只会让您的 harvester 多做一些查找,而防护会限制查找次数,并且永远不会产生适用于区块的签名。

应用发送什么

发往矿池浏览器:您的 harvester 名称,由设备的品牌、型号和系统组成。

发往 gateway:Chia 的 farmer 消息(您的证明和签名),以及应用和引擎版本、您的系统类型和一个随机安装 ID。

发往矿池:您的部分证明和农场注册信息,与每个 Chia farmer 一样。

发往 NanoFarmer 服务器:用于查找和创建您 Plot NFT 的公钥,以及您加入的 Plot NFT。绝不发送私钥,也绝不发送您的助记词。

本地界面

窗口和命令行只通过 127.0.0.1 与应用通信,使用每次启动都会重新生成的随机令牌、严格的主机和来源检查以及严格的内容安全策略,因此网页无法利用它。

Plot NFT:创建与加入

NanoFarmer 使用矿池协议 v1 耕种 Plot NFT plot。在应用的第 2 步中,它会在您密钥的前 20 个所有者密钥下查找 Plot NFT,然后使用、加入或创建一个。

应用在区块链上确认它属于您的密钥后,直接按原样使用。

处于 self-pooling 的 Plot NFT

一笔加入花费。仍在 Plot NFT 上等待的奖励会先领取给您。

两笔花费:现在离开,并在另一矿池的锁定高度过后加入。您一次签署两笔;第二笔由服务器在到期时发送。

为您创建一个新的 Plot NFT。3 次确认后即可就绪,通常在几分钟内。

矿池的币向您自己的地址支付 1 mojo,您的密钥在同一笔交易中把这个 mojo 变成 Plot NFT 的 launcher。因此 Plot NFT 从一开始就属于您:Chia 钱包能找到它,您也可以用标准工具离开 XCHPool。

免费创建限制为每个互联网地址每 24 小时一次,且每个密钥一次。

应用把 Plot NFT 写入引擎的矿池设置;随后 farmer 会自行向矿池注册。

服务器准备花费;辅助程序用 Chia 自己的代码重建每一笔,只有当它最终加入 XCHPool 且使用您自己的所有者密钥时才签名。

只有区块链显示加入完成后,应用才认为加入已完成,无论服务器报告什么。

如果加入最早只能在大约一天以后完成(旧矿池的锁定高度很长),会在签署任何内容之前被拒绝。由矿池支付的加入手续费有其自身的限制;超出限制时,加入仍会进行,只是不带矿池支付的手续费。

100 个区块,约半小时:Plot NFT 离开 XCHPool 时的等待时间

7 天(604,800 秒):矿池在这段时间内未领取的奖励可以领回到您的地址

更新与发布安全

应用和引擎分别更新。新引擎在您耕种时下载,并在没有 Plot NFT 任务运行时切换;如果它无法启动,会恢复到之前的引擎。新版应用从下次启动应用时开始使用,若您在应用内更新则立即生效。

应用在启动时以及每 6 小时检查一次更新,依据是一份用 Ed25519 密钥签名的清单。应用内置了两个公钥,因此签名密钥可以更换。

清单列出每个文件及其大小和 SHA-256,一段时间后过期,可以设定最低版本,并且绝不会把应用或引擎回退到更旧的版本。

两个渠道:稳定版和测试版。新版本可以先推送给一部分安装,按随机安装 ID 的哈希选择。

签名密钥离线保存在一台机器上,绝不放在服务器或构建流水线中。

每个发布版本的校验和文件也经过签名,供首次下载使用;NanoFarmer 页面还显示每个文件的 SHA-256。

这些程序尚未使用 Apple 或 Microsoft 证书进行代码签名,因此您的系统会要求您确认首次启动。

引擎保存着您的密钥库,并且无需点击即可更新,因此不能只凭一台构建机器就发布引擎。每个引擎版本都从带标签的提交构建两次,分别在两个独立的干净构建环境中进行。构建是可复现的,除非两次构建产生逐字节相同的包,否则签名工具拒绝签名。

平台与要求

Linux x86-64,glibc 2.28 或更新

Linux ARM64,glibc 2.28 或更新(使用 64 位系统的 Raspberry Pi 4 和 5)

tar.gz,含安装脚本和 systemd 用户服务

磁盘

约 1 GB 可用空间,用于应用、引擎、两者的上一个版本以及日志。无需区块链。

网络

本地端口

引擎使用自己的端口,与 Chia 的默认端口并存:守护进程 55410、farmer 8457、uplink 8454、farmer RPC 8569、harvester RPC 8570。如果其中一个被占用,整组端口都会上移 100。

时间与响应时间

Chia 耕种按时钟运行。以下是关键数字。

部分证明不经过 gateway。只有信号点从 XCHPool 的全节点经 gateway 传到您这里;farmer 把部分证明直接发送到矿池。

每个 10 分钟的子时隙中有 64 个信号点

查找一个 plot 超过此时间时,Chia 的 harvester 会发出警告

从信号点到区块注入:证明、区块及其签名必须在此之前就绪

gateway 留给您的 farmer 返回区块签名的时间

矿池测量每个部分证明的响应时间:从信号点到达矿池的那一刻,到您的部分证明到达的那一刻。超过矿池时限才到达的部分证明会因太迟而被拒绝,没有任何收益。

My Farm 按 harvester 显示您的响应时间:中位数、第 95 百分位以及距离时限的余量,时限用红色虚线标出。对于 NanoFarmer 农场,时间包括经由 gateway 的中转;响应慢的常见原因是硬盘慢或处于休眠、plot 存放在网络存储上,以及电脑负载过高。

NanoFarmer 不做什么

没有钱包:要查看或发送您的奖励,请把助记词导入 Sage 或 Chia 钱包。

不支持 OG plot:使用矿池公钥 (-p) 制作的 plot 会被跳过,应用会列出它们,让您知道是哪些。

不制作 plot:应用会介绍绘图器并填好命令,但自己不制作 plot。

暂不支持其他矿池:它只在 XCHPool 耕种 Plot NFT。

不支持高于 C7 的 plot,也不支持 Gigahorse 压缩 plot、NoSSD 或 DrPlotter plot:Chia 2.7.4 无法耕种它们。

暂不支持 Proof of Space 2 plot:它们需要 Chia 3.0,引擎可以通过自己的更新升级到该版本。

设计选择

用 WebSocket 代替 Chia 的对等端口

没有新的耕种协议

WebSocket 逐字节承载 Chia 自己的 farmer 协议消息。Farmer 就是原版 Chia,无法分辨自己并不是在与真正的全节点通信。

密钥运算只在 Chia 的代码中进行

Chia 以自己的方式派生密钥,其他库可能会算错而没人察觉。因此每一次 Chia 密钥派生和签名都由引擎中 Chia 自己的代码完成;Go 应用不做任何这类运算。

应用与引擎分离

Go 应用保持小巧,引擎则可以按自己的节奏升级到新的 Chia 版本,例如在 Proof of Space 2 分叉之前升级到 Chia 3.0。

常见问题

XCHPool 能转走我的区块奖励吗?

Farmer 奖励不能:NanoFarmer 只签署把它支付到您地址的区块。矿池的份额按 Chia 的规则进入您 Plot NFT 的矿池地址,与任何矿池一样。XCHPool 一方能做的是扣下您赢得的区块,任何您所依赖的全节点都可能这样做。

网络连接中断会怎样?

Uplink 会自动重连,等待间隔从 1 秒逐渐增加到 30 秒,Chia 的 farmer 也会重新连接到 uplink。如果连接在获胜证明和签名请求之间中断,gateway 会把请求发送到您的新连接。

我可以用同一个密钥在多台电脑上运行 NanoFarmer 吗?

可以。每个安装都会生成自己的 harvester 证书,因此每台电脑在 My Farm 上都显示为一个独立的 harvester,并有自己的名称。

我可以离开 XCHPool 吗?

可以。Plot NFT 属于您,Chia 钱包可以把它转到另一个矿池或 self-pooling。XCHPool 的锁定高度是 100 个区块,约半小时。

为什么应用不通过 gateway 发送部分证明?

没有必要。部分证明使用基于 HTTPS 的标准矿池协议,与使用全节点的 farmer 完全相同。只有全节点的那部分工作转移到了 XCHPool。