Filecoin原理与实现
上QQ阅读APP看书,第一时间看更新

1.3 Filecoin网络基础和基本概念

Filecoin网络是一个分布式的、点对点的网络,由以不同方式参与的Filecoin节点组成。由于所有Filecoin节点地位对等,所以它们在Filecoin网络中又称为对等节点。

对等节点通过安全的通道进行通信,使用这些通道将信息分发到网络(Gossip PubSub模式),在它们自己之间传输数据。对等节点通过发现其他对等节点来维护一个连接良好的集群,在这个集群中,即使有成千上万个对等节点参与,信息块和消息也会迅速流动。

本节对一些基本概念进行介绍,读者了解这些基本概念,有利于阅读和理解后续章节。关于区块链本身的一些概念,本节不再赘述,请读者查阅相关书籍。

1.Filecoin节点/客户端

Filecoin节点(也称为Filecoin客户端)是构建Filecoin网络的基本单元,用于同步Filecoin区块链并在每个块中验证消息,为其他服务提供全局状态。节点可以管理Filecoin钱包并在其上接收奖励。

Filecoin节点可以通过广播向网络发布不同类型的消息。例如,客户端可以发布一条消息,从一个地址发送文件到另一个地址。客户端也可以向Filecoin存储服务节点提议存储和检索交易,并在执行时为此支付费用。

运行Filecoin节点是一项基本任务,通常意味着让程序全天候运行。目前有几种Filecoin节点实现,其中Lotus是使用得最广泛的,Venus节点可以提供集群式服务。相关实现的详细介绍请参见第13章。

2.Filecoin存储服务提供者

Filecoin存储服务提供者通过执行不同类型的交易和(每30秒)向链中添加新区块来为网络提供服务,并以此获得FIL奖励。关于服务者的类型、奖励和交易执行的更多细节将在第7章介绍,这里不再赘述。

运行Filecoin服务是一项技术性很强的任务,硬件要求比较高,需要完成必要的证明。

3.交易

Filecoin中主要有两种交易类型:存储交易和检索交易。

在存储交易中,客户端和存储服务提供者之间需要就存储数据进行沟通,这就要用到存储协议。一旦交易开始,存储服务提供者收到要存储的数据,需要反复向链证明自己在存储协议好的数据,以便可以收集奖励。否则,这家存储服务提供者将被大幅削减资产。

检索交易中则会用到检索协议。检索协议是客户端和检索服务商(也可能同时是存储服务提供者)之间的协议,用于提取存储在网络中的数据(希望是以快速和可靠的方式进行)。与存储交易不同,检索交易是在链下完成的,客户端使用支付渠道对接收到的数据进行增量支付。

4.扇区

扇区是Filecoin上的基本存储单位,具有标准大小以及明确定义的承诺保存的时间区间。扇区的大小设计需要在安全问题与可用性之间取得平衡。存储市场决定扇区的生命周期,并设置扇区的承诺持续时间。

最大扇区寿命由证明算法确定。扇区在其生命周期结束时会自然过期。由于扇区用于存放用户数据,因此,存储服务提供者履行其承诺时,需要进行承诺抵押。在扇区有效生命期内,如果发生数据丢失或损坏,存储服务提供者会损失抵押物;反之,如果内容保存完好,存储服务提供者可以获得奖励。在扇区自然到期时,存储服务提供者收回抵押物。

5.证明

如上所述,存储服务提供者必须证明自己按照交易条款存储数据。这意味着:

存储服务提供者必须存储客户端提交的所有数据。

存储服务提供者必须在交易的整个生命周期内保存数据。

存储服务提供者必须向网络表明实现了上述两个承诺。Filecoin证明系统采用加密证明来达到这些目的。

使用复制证明(PoRep),存储服务提供者可以证明其收到的所有数据经过编码后是独一无二的。任何存储服务提供者使用的物理存储方式是不能被其他存储服务提供者所复制的,即使是相同的数据,在同一个服务提供者那里也不能复用。当交易达成,密封操作完成时,服务提供者要提供存储证明。

如果交易在其整个生命周期内处于活跃状态,存储服务提供者将使用时空证明(PoSt)来证明自己仍在存储与交易相关的数据。

Filecoin客户端和其他存储服务提供者不断验证每个区块中包含的证明是有效的,提供必要的安全性,并惩罚不遵守交易规则的存储服务提供者,从而保障网络的健康生态。

6.Gas费用

执行消息,例如在链中包含交易或证明,会消耗网络上的计算和存储资源。Gas是对信息所消耗资源的度量。消息消耗的Gas直接决定了发送方为将消息打包到Filecoin区块链的新区块中而支付的成本。

在历史上的其他区块链中,存储服务以本地货币单位指定Gas费,然后根据消息消耗的Gas费向区块生产者支付优先打包费用。Filecoin的工作方式与此类似,只是需要“燃烧”一定数量的费用(发送到一个不可恢复的地址)来补偿网络资源的支出,因为所有节点都需要验证消息。这个做法借鉴了以太坊EIP1559提案的思想。

7.角色

角色(actor)是用于管理状态的软件设计模式。账户、多签(multisig)、存储服务提供者和任何具有状态的东西,比如账户余额,都被实现为一个角色。

角色之于Filecoin,相当于以太坊虚拟机中的智能合约。角色是系统的核心组成部分,对Filecoin区块链当前状态的任何更改都必须通过参与者触发。

8.地址

在Filecoin中,地址用于标识参与者。有4种地址类型:

0——ID地址,例如f02438。Filecoin中的每一个地址都会有一个唯一的ID与之对应。ID地址和其他地址是一一对应的,因此在实际使用场景中是等价的,往往可以互换使用。

1——Secp256k1公钥地址,例如f1ujohbnsf4ops4f4xp4l4k3uhigbw3aidn3em2fq。Secp256k1是目前区块链界常见的签名算法,采用这种签名主要是为了与当前的钱包和其他生态应用兼容。普通用户通常采用这种地址。

2——角色地址,例如f247wa6jquoea2lpvc2eqguxljw3zzhb2g7vkvzay。用于无签名权的对象,比如存储服务提供者节点地址、多签地址,以及将来的用户可编程的智能合约地址等。

3——BLS公钥地址,例如f3we5gfqkccamxg3cwnyayyinz7mztlvkybrlmwmtcg7nosex 3cw7h2f lpyxxyozlskvqas7xuri6rd7t4n4aa。BLS签名具有确定性,可以用于随机数的产生和验证。因此,在Filecoin网络中,BLS公钥地址(f3地址)使用存储节点的Worker地址。BLS公钥地址也可以用作普通地址。