星际联盟提供对Filecoin Spec 的全文翻译,便于Filecoin项目广大中国参与者理解Filecoin的深层原理。文章将定期更新章节,请持续关注"IPFS星际联盟"&"星际联盟Filecoin"公众号。
1.5 更改日志 - 版本历史
1.5.1 v1.1 - 2019-10-30 - c3f6a6dd -
链上交易
存储交易
完整的存储市场Actor逻辑:
客户和矿工的收支:押金,锁定,费用和取款
质押削减
完整的StorageMinerActor逻辑:
sector状态,状态转换,状态核算,算力核算
故障声明 + 修复Sectors流程
提交扇区流程
提交选举或SubmitSurprisePoSt流
扇区验证,故障,恢复和到期
OnMissedSurprisePost流
故障扇区,掉电,到期等等
StoragePowerActor
算力核算基于StoragePowerActor状态的更改
抵押品:存款,锁定,提款
削减质押
Interactive-Post
StorageMinerActor: 预提交扇区 和 提交扇区
Surprise-Post
挑战流程为 CronActor -> StoragePowerActor -> StorageMiner -
虚拟机
从区块链中提取VM系统
地址
Actors
代码和状态的分离
消息
方法调用表示
运行时间
缩小的界面
安全状态获取,释放,提交流程
退出码 - 完整的调用流程
更安全的递归上下文构造
错误级别和处理
检测和处理gas错误
解释程序
申请消息
{扣除,存款} -> 转移 - 更安全
gas核算
VM系统参与者
InitActor基本流程,插入运行时
CronActor全流程,静态注册表
AccountActor基本流程
数据传输
完整的数据传输流程
push, pull, 1-RTT pull
协议,数据结构,接口
图表
区块链/链同步
链同步协议描述的第一个版本
包括协议状态机描述
网络引导程序–连接性和状态
渐进区块验证 - 渐进区块传播
其他
细则部分状态指示灯
变更日志
1.5.2 v1.0 - 2019-10-07 - 583b1d06
全面细则重组
工具
添加了构建系统以编译工具
添加了绘图工具(dot, mermaid等)
添加了附属图安装
添加了Orient以计算协议参数
内容
filecoin节点
类型 - 不同FileCoin节点类型的概述
存储库 - 本地数据结构存储
网络接口 - 连接到libp2p
时钟 - 挂钟
文件和数据
file - 数据的基本表示
piece - 表示存储在filecoin中的数据
区块链
blocks - 基本的区块链数据结构(blocks, tipset, chain等)
存储算力共识 - SPC的基本算法和加密工件
StoragePowerActor 基础
代币
骨架部分
存储挖矿
存储矿工:控制和协调存储挖矿的模块
扇区:存储单位,密封,加密工件等
扇区索引:描述扇区数量和元数据
储存证明:印章,posts等
市场
交易:存储市场交易基础
存储市场:StorageMarketActor基础
Orient
确定模型和区块大小的orient模型
图书馆
filcrypto-密封,PoRep,PoSt算法
ipld - cids, ipldstores
libp2p - 主机/节点表示
ipfs - graphsync 和 bitswap - 多种格式
multihash,multiaddr
图表
系统总览
完整的协议美人鱼流
1.5.3 pre v1.0
文件共享协议的扩展写入 - 可见 详情
查看所有更改日志:github.com/filecoin-pr…
1.6 系统分解
1.6.1 什么是系统? 它们如何工作?
Filecoin将其功能解构并模块化为松散连接的系统。每个查看重要的功能,通常用来实现一系列重要且紧密相关的目标。
例如,区块链系统提供了诸如区块,区块集合、链之类的结构,并提供了诸如区块同步,区块广播,区块验证,链选择和链访问之类的功能。 这与文件,片段,片段准备和数据传输分开。 这些系统都是与市场分开,提供订单,交易,市场可见性和交易结算。
1.6.1.1 为什么系统解耦是有用的?
这种解耦对于以下方面很有用:
实现边界:可以只用一部分子系统来构建实现Filecoin。这对于实现多样性特别有用:我们需要安全性关键系统(例如,区块链)的许多实现,但不需要可以解构的系统的许多实现。
运行解耦:系统耦使后,构建和运行将系统隔离到单独程序甚至单独物理计算机中的Filecoin节点变得更加容易。
安全隔离:一些系统比其他系统需要更高的操作安全性。系统解耦使实现能够满足其安全性和功能性需求。一个很好的例子是将区块链处理与数据传输分开。
可伸缩性:系统和各种用例可能会为不同的操作者带来不同的性能要求。系统解耦使得操作者更容易根据系统边界来衡量他们的部署。
1.6.1.2 Filecoin节点不需要所有系统
Filecoin节点差异很大,并且不需要所有系统。大多数系统仅在部分用例中才需要。
例如,需要区块链系统来同步链,参与安全共识,存储挖掘和链验证。 许多Filecoin节点不需要链,只需从其信任的节点中从最新StateTree中获取内容即可执行其工作。 当然,这样的节点:
注意:Filecoin不使用在比特币和其他区块链网络中广泛使用的“完整节点”或“轻客户端”术语。 在Filecoin中,这些术语定义不明确。 最好根据节点的功能来定义节点,因此也要根据它们所运行的系统来定义节点。 例如:
链验证节点:运行区块链系统。可以同步和验证链;无法挖掘或生产区块。
客户端节点:运行区块链。市场和数据传输系统;可以同步和验证链;无法挖掘或生产区块。
检索矿工节点:运行市场和数据传输系统;不需要链; 可以进行检索交易(检索提供方);可以发送客户端的数据并得到报酬。
存储矿工节点:运行区块链,存储市场,存储挖掘系统。 可以同步和验证链。 可以进行存储交易(存储提供方)。 可以将存储的数据密封到扇区中。 可以获得存储共识算力。 能够挖掘和生产区块。
1.6.1.3 分离系统
我们如何确定一个功能是属于哪个子系统?
在系统之间划定界限是将紧密相关的功能与无关部分分开的艺术。 从某种意义上说,我们试图将紧密集成的组件保持在同一系统中,并远离其他无关的组件。 有时这很简单,界限来自数据的结构或功能。 例如,我们可以很容易观察到,客户和矿工彼此协商交易与虚拟机执行无关。
有时这很难,并且需要整理,添加或删除抽象概念。 例如,StoragePowerActor和StorageMarketActor以前是单个Actor。 这导致整个StorageDeal制造,StorageMarket,整个市场与存储采矿,扇区密封,PoSt生成等之间的功能耦合。 理顺这两组相关功能需要将一个参与者分成两个。
1.6.1.4 在系统内分解
系统本身分解为较小的子单元。 这些有时称为“子系统”,以避免与更大的一流系统混淆。 子系统本身可以进一步分解。 此处的命名没有严格执行,这些细分与协议和实现工程方面的问题更多地相关,而不是与用户功能有关。
1.6.2 实施系统
1.6.2.1 系统要求
为了使将功能与系统解耦更加容易,Filecoin协议假定了一组可用于所有系统的功能。此功能可以通过实现以多种方式来实现,并应将此处的指南作为建议(应当)。
所有的系统,如本文档中定义,要求如下:
资料库
本地IpldStore。用于数据结构(小型结构化对象)的一定数量的持久本地存储。系统期望使用IpldStore进行初始化,其中的存储数据结构在崩溃中也会持续存在。
用户配置值。少量用户可编辑的配置值。这些应该使终端用户易于访问,查看和编辑。
本地安全密钥库。用于生成和使用加密密钥的工具,必须对Filecoin节点保密。 系统不能直接访问密钥,必须通过抽象(即KeyStore)来实现,该抽象提供了加密,解密,签名,签名验证等功能。
本地文件存储。某些文件的持久的本地存储(大字节数组)。 系统期望使用能存储大文件的FileStore进行初始化。某些系统(例如Markets)可能需要存储和删除大量较小的文件(1MB-10GB)。其他系统(如存储挖矿)可能需要存储和删除大量的大型文件(1GB - 1TB)。
网络。大多数系统需要访问网络,才能连接到他们对应的Filecoin节点。 系统会使用libp2p.Node进行初始化,并可以在其上安装自己的协议。
时钟。有些系统需要访问当前的网络时间,而有些系统对浮动的容差较低。系统初始化会使用一个时钟来得知网络时间。一些系统(如区块链)需要很少的时钟浮动,并且需要安全的时间。 为此,我们使用FilecoinNode数据结构,该数据结构会在初始化时传递给所有系统:
import repo "github.com/filecoin-project/specs/systems/filecoin_nodes/repository"
import filestore "github.com/filecoin-project/specs/systems/filecoin_files/file"
import clock "github.com/filecoin-project/specs/systems/filecoin_nodes/clock"
import libp2p "github.com/filecoin-project/specs/libraries/libp2p"
import message_pool "github.com/filecoin-project/specs/systems/filecoin_blockchain/message_pool"
type FilecoinNode struct {
Node libp2p.Node
Repository repo.Repository
FileStore filestore.FileStore
Clock clock.UTCClock
MessagePool message_pool.MessagePoolSubsystem
}
import ipld "github.com/filecoin-project/specs/libraries/ipld"
import key_store "github.com/filecoin-project/specs/systems/filecoin_nodes/repository/key_store" import config "github.com/filecoin-project/specs/systems/filecoin_nodes/repository/config"
type Repository struct {
Config config.Config
KeyStore key_store.KeyStore
ChainStore ipld.GraphStore
StateStore ipld.GraphStore
}
1.6.2.2 系统限制
此外,系统必须遵守以下限制:
随机崩溃。一个Filecoin节点可能随时崩溃。 当崩溃时,系统必须是安全且一致的。这主要是通过限制持久状态的使用,通过Ipld数据结构持久化这种状态,以及通过使用检查状态的初始化例程,以及纠正可能错误来实现的。
隔离。系统必须通过定义明确的独立接口进行通信。 他们不得在共享内存空间上构建关键功能。(注意:为了提高性能,共享内存抽象化可用于为IpldStore,FileStore和libp2p提供算力,但是系统本身不应该需要它)。这不仅仅是操作上的问题;它还显着的简化了协议,并使之更易于理解,分析,调试和更改。
无直接访问主机操作文件系统或磁盘。系统无法直接访问磁盘,而是通过FileStore和IpldStore抽象来进行。这将为最终端用户提供高度的移动性和灵活性,尤其针对于存储矿工和需存储大量数据的客户,这需要能够简单替换其Filecoin节点访问本地存储的方式。
无直接访问主机操作系统的网络堆栈或TCP / IP。系统无法直接访问网络-它们通过libp2p库进行访问。不得有任何其他种类的网络接入。这为跨平台和网络协议提供了高度的移动性,使Filecoin节点(及其所有关键系统)在多种设置下可以使用各种协议(例如,蓝牙,LAN等)运行。
[ID:ipfsunion6]
扫描二维码
关注官方公众号