原文链接:filecoin-project.github.io/specs/#intr…
本文由星际联盟Boni Liu翻译,转载请注明出处。
星际联盟提供对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
- 图表
- 系统总览
- 完整的协议美人鱼流
- filecoin节点
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等)运行。
今天的文章Filecoin Spec 翻译 —— 【1】概述(下)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/16637.html