1.0.1版 - 2021年2月9日-2021年3月1日修订
Full Nodes(完整节点)
系统的核心由完整的节点组成。完整节点具有以下职责:
维护区块链的副本
验证区块链
使用对等协议通过网络传播新的区块,交易和证明
(可选)通过钱包协议为轻量级客户端(钱包)服务
(可选)农民和时空领主进行通讯
完整节点不赚取任何报酬或费用,但是它们对于维护共识规则和系统安全性很重要。运行完整的节点可使用户对区块链的完整状态充满信心。
完整节点需要保持连接到网络中另一组随机的完整节点。
Farmers(农民)
Chia的农民(Farmers)类似于比特币的矿工。他们通过尝试在其他矿工之前创建有效的区块来赚取区块奖励和费用。农民(Farmers)不维护区块链的副本,他们需要连接完整的节点(Full Nodes)来保持更新。
农民通过收割机(harvesters)协议与收割机(实际存储P盘文件的主机)进行通信。
完整节点(Full Nodes)和农民(Farmers)通过farmer协议进行通信。
想要SOLO挖矿的用户可以在同一台计算机上运行农民(Farmers),收割机(harvesters)和完整节点(Full Nodes)。
农场主的操作方式是等待全节点的更新,全节点每次创建新区块时都会给他们新的challenge_hash。然后,农夫向所有收割机索要空间品质的证明。这些品质,基于迭代公式,得出一个预期的爆块时间。对于那些预计很快就会完成的证明,农场主可以选择从收割机中获取完整的空间证明,然后完整的证明可以被传播到完整的节点,或者作为部分发送到区块缓冲池中。
Harvesters(收割机)
收割机是由农民控制的单个机器。在一个大型农业作业中,一个农民可能连接到许多收割机。
收割机通过从磁盘中的plots文件进行检索挖矿。每个plots文件对应一个地块,对于随机的32字节进行校验,来寻找符合爆块的预期值(有可能没有或多于1个)。在标准的HDD驱动器上,获取一个challenges将需要大约8次随机磁盘搜索,或高达50ms,而获取一个证明(proof)将需要大约64次磁盘搜索,或高达500ms。对于大多数的challenges,质量会非常低,所以不需要获取整个证明(proof)。因为检索需要一定时间,所以为了保证检索时间不至于太长,每个驱动器的plots数量通常都有上限。然而,由于算法公式中有一个恒定的因素(每个块的证明时间必须至少在30秒左右),磁盘IO时间应该不是问题。
最后,收割机还为每个plot维护了一个私钥。这个私钥是实际签署区块的东西,来保证Farmers(农民)与Harvesters(收割机)实际数据一致。
Timelords(时间领主)
时间领主通过在未完成的区块之上创建顺序的时间证明(使用可验证延迟函数)来支持网络。由于这种计算是顺序的,所以与计算可并行的工作证明系统相比,消耗的电力非常少。时间领主也是需要连接到完整节点(Full Nodes)的。虽然时间领主不赚取任何奖励,但只需要有一个诚实的时间领主在线,区块链就能前进。
一个拥有更快的时间领主的人也可以从他们的空间中获得更多的奖励,因为他们的区块会比其他农民的区块完成得更快一些。
此外,一个拥有更快的时间领主的攻击者有可能用不到51%的空间来攻击网络,这就是为什么VDF硬件的开放设计对区块链的安全性非常重要。
Pools(矿池模块)
矿池模块允许农民通过基于空间容量的证明,而不是赢得区块的证明来平滑其奖励。plots文件必须包含池子的公钥,所以除非重新创建整个plots文件,否则不能改变矿池。
矿池模块会打包用户下一个区块的coinbase数据。在Chia的矿池协议中,它们实际上并不选择区块的内容。这给了农民更多的权力,从而降低了中心化矿池的影响力。
农民定期向矿池模块发送分片数据,其中包含空间证明和池签名。
钱包(Wallets)
钱包模块可以通过钱包协议与全节点通信。这类似于比特币的SPV协议,可以验证交易和区块权重,而没有全节点的带宽和CPU要求。钱包节点与全节点类似,它们是与网络中其他对等节点通信的服务器。一个常见的用例是在本地与全节点一起运行一个钱包,钱包只连接到全节点。
钱包还负责管理私钥,生成、存储和发送交易。钱包开放了一个RPC HTTP websocket JSON API,用户界面可以用它来执行命令。
可视化GUI
一个可视化电子图形用户界面,它连接到钱包和全节点RPC。在这个用户界面上,用户可以执行交易、查看余额和查看历史记录。未来还将增加各种智能合约功能。