Filecoin Spec 翻译 —— 【1】概述(下)

1,614

原文链接: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
    • 图表
      • 系统总览
      • 完整的协议美人鱼流

1.5.3 pre v1.0


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等)运行。