Filecoin节点的概念。尽管在Filecoin的Lotus实现中不同的节点类型没有在其他区块链网络中严格定义,但是不同类型的节点应实现不同的属性和功能。简而言之,基于节点提供的服务集对其进行定义。
在本节中,我们还将讨论与在Filecoin节点中存储系统文件有关的问题。请注意,在本节中,通过存储,我们不是指节点为在网络中进行挖掘而提交的存储,而是指它需要可用于密钥和IPLD数据的本地存储库。
在本节中,我们还将讨论网络接口以及节点之间如何查找和连接,如何使用libp2p交互和传播消息以及如何设置节点的时钟。
节点类型
Filecoin网络中的节点主要根据其提供的服务进行标识。因此,节点的类型取决于节点提供的服务。Filecoin网络中的一组基本服务包括:
- 链验证
- 仓储市场客户
- 存储市场提供商
- 检索市场客户
- 检索市场提供者
- 仓储采矿
参与Filecoin网络的任何节点都应至少提供链验证服务。根据节点在链验证之上提供的额外服务,它会获得相应的功能和节点类型“标签”。
可以使用主机中的存储库(目录)以一对一关系实现节点-即,一个存储库属于单个节点。也就是说,一台主机可以通过具有相应的存储库来实现多个Filecoin节点。
Filecoin实现可以支持以下子系统或节点类型:
- 链验证器节点:这是节点加入Filecoin网络所需的最低功能。除非实现以下所述的客户端节点功能,否则这种类型的节点无法在网络中发挥积极作用。链验证器节点首次加入网络时必须同步链(ChainSync),以达成当前共识。从那时起,该节点必须不断获取链中的任何附加内容(即,接收最新的块)并验证它们是否达到共识状态。
- 客户端节点:这种类型的节点建立在Chain Verifier节点之上,并且必须由Filecoin网络上构建的任何应用程序来实现。可以将其视为基于Filecoin的应用程序(例如交易所或分散存储应用程序)的主要基础结构节点(至少就与区块链的交互而言)。该节点应实现存储市场和检索市场客户服务。客户端节点应与存储和检索市场进行交互,并能够通过数据传输模块进行数据传输。
- Retrieval Miner Node(检索矿工节点):此节点类型扩展了Chain Verifier节点以添加检索矿工功能,即参与了检索市场。这样,此节点类型需要实现检索市场提供者服务,并能够通过数据传输模块进行数据传输。
- Storage Miner Node:这种类型的节点必须实现验证,创建和添加块以扩展区块链所需的所有必需功能。它应实施链验证,存储挖掘和存储市场提供商服务,并能够通过数据传输模块进行数据传输。
可以在此处找到Node接口的Lotus实现 。
type ChainVerifierNode interface {
FilecoinNode
systems.Blockchain
}
可以在此处找到Chain Verifier Node的Lotus实现 。
type ClientNode struct {
FilecoinNode
systems.Blockchain
markets.StorageMarketClient
markets.RetrievalMarketClient
markets.DataTransfers
}
客户端节点的Lotus实现可以在这里找到 。
type StorageMinerNode interface {
FilecoinNode
systems.Blockchain
systems.Mining
markets.StorageMarketProvider
markets.DataTransfers
}
可以在此处找到Storage Miner Node的Lotus实现 。
type RetrievalMinerNode interface {
FilecoinNode
blockchain.Blockchain
markets.RetrievalMarketProvider
markets.DataTransfers
}
type RelayerNode interface {
FilecoinNode
blockchain.MessagePool
}
可以在此处找到Filecoin Node配置值的Lotus实现 。
节点存储库
Filecoin节点存储库只是系统和链数据的本地存储。它是任何功能性Filecoin节点需要在本地存储以便正确运行的数据的抽象。
该存储库可供节点的系统和子系统访问,并且可以从节点的存储区分开FileStore
。
该存储库存储节点的密钥,有状态对象的IPLD数据结构以及节点配置设置。
FileStore存储库的Lotus实现可以在这里找到 。
这Key Store
是任何完整Filecoin节点中的基本抽象,用于存储与给定矿工的地址(请参阅下面的实际定义)和不同的工作程序(矿工应该选择运行多个工作程序)关联的密钥对。
节点安全性在很大程度上取决于保持这些密钥的安全性。为此,我们强烈建议:1)将密钥与所有子系统分开,2)根据其他子系统的要求使用单独的密钥存储来签署请求,以及3)保留未用作冷库中挖掘的那些密钥。
Filecoin存储矿工依赖三个主要组成部分:
- 在调用
registerMiner()
Storage Power Consensus子系统后,将存储矿工参与者地址唯一地分配给给定的存储矿工参与者地址。实际上,存储矿工本身没有地址,而是由与其绑定的参与者的地址来标识的。这是给定存储矿工的唯一标识符,其电源和其他密钥将与之关联。该actor value
指定一个已经创建的矿工演员的地址。 - 所有者密钥对由矿工在注册之前提供,并且其公钥与矿工地址相关。所有者密钥对可用于管理矿工和提取资金。
- 工人密钥对是与存储矿工参与者地址关联的公共密钥。可由矿工选择和更改。辅助密钥对用于签名块,也可以用于签名其他消息。鉴于它是可验证随机函数的一部分,它必须是BLS密钥对 。
多个存储矿工参与者可以共享一个所有者公共密钥,也可以共享一个工人公共密钥。
在Storage Miner Actor中指定了更改链上工作程序密钥对(即与存储矿工actor关联的工作人员Key)的过程 。请注意,这是一个两步过程。首先,矿工通过向链发送消息来进行更改。然后,矿工在随机回溯时间之后确认密钥更改。最后,在额外的随机回溯时间之后,矿工将开始使用新密钥对块进行签名。存在此延迟是为了防止自适应密钥选择攻击。
密钥安全在Filecoin中至关重要,每个区块链中的密钥也是如此。无法安全地存储和使用密钥或将私钥暴露给对手可能会导致对手有权使用矿工的资金。