大数跨境

IPFS进阶 | Filecoin 规范文档(三)

IPFS进阶 | Filecoin 规范文档(三) 星际视界IPFSNEWS
2019-09-19
1
导读:星际视界将持续翻译和整理官方正在编写的Filecoin网络协议的详细说明,并通过连载的方式,提供给中国研究者交流参考。
星际视界将持续翻译和整理官方正在编写的Filecoin网络协议的详细说明,并通过连载的方式,提供给中国研究者交流参考。


Filecoin网络(二)
 2.1  Filecoin数据传播
Filecoin网络需要向网络中的所有对等体广播块和消息。本文档详述了该过程的工作原理。
使用gossipsub libp2p pubsub路由器传播消息引用旁边的消息和块头。每个完整节点都必须实现并运行该协议。所有pubsub消息都经过身份验证,必须在进一步传播之前进行语法验证。
此外,每个完整节点必须实现并提供bitswap协议,并通过它提供所知的所有Cid Referenced对象。这允许任何节点Message从其连接的任何节点获取缺失的部分(例如)。但是,节点应该将这些请求扇出到多个节点,而不是一次轰炸任何请求太多的单个节点。节点可以实施限制和DDoS保护以防止这种轰击。


比特交换
运行bitswap以从其他filecoin节点获取和提供数据(例如块数据和消息)。这用于在块传播期间填充丢失的位,并且还用于在同步期间获取数据。
目前还没有针对bitswap的官方规范,但是protobufs应该在过渡期间提供帮助。

块传播
 块通过libp2p pubsub通道传播/fil/blocks。使用适当的信息填写以下结构,序列化(使用CBOR-RPC),并通过网络发送:
Messages 当用于构造sharray时,消息cid数组必须与块中的字段匹配。
每次BlockMsg收到的都必须通过语法检查进行验证,然后再次传播。如果验证失败,则不得传播。


消息传递
消息通过libp2p pubsub通道传播/fil/messages。在这个频道上,每个序列化Message都会公布。
收到邮件后,必须检查其有效性:签名必须有效,并且相关帐户必须有足够的资金来支付指定的操作。如果消息无效,则应将其删除,不得转发。
“讨论检查签名和账户余额,一些需要考虑的棘手问题。基金检查会导致不当下降吗?例如,我有一条消息发送资金,然后使用新建的帐户发送资金,只要前一次没有执行,第二次将被视为“无效”......虽然它不会在执行时。


2.2  Filecoin特定网络协议
所有filecoin网络协议都实现为libp2p协议。本文档假设所有数据都在libp2p流上的对等体之间进行通信,如网络中所述


Ipld dag-cbor RPC
Filecoin使用来自ipfs和libp2p的许多预先存在的协议,并且还实现了它自己的几个新协议。对于这些Filecoin特定协议,我们将使用下面定义的Ipld dag-cbor RPC协议格式。
此格式由一系列IPLD对象组成,使用序列化dag-cbor。每当filecoin协议出现“发送X”时,它意味着“IPLD使用对象X序列化dag-cbor,然后写入序列化字节”。
“注意:实现应限制从线路读取IPLD对象时的最大字节数。我们建议1MB作为一个理智的限制。

链接
  • Ipld:https://github.com/ipld/specs
  • dag-cbor:https://github.com/ipld/specs/blob/master/block-layer/codecs/DAG-CBOR.md

Hello Handshake
  • Name: Hello
  • Protocol ID: /fil/hello/1.0.0
“当两个filecoin节点最初相互连接以确定有关另一个节点的信息时,使用Hello协议。
每当一个节点获得一个新连接时,它就会在该连接上打开一个新的流并“says hello”。这是通过制作a HelloMessage,使用CBOR RPC将其发送给另一个对等体并最终关闭流来完成的。
从另一个节点收到“hello”流后,您应该读取CBOR RPC消息,然后检查genesis散列是否与您的genesis散列匹配。如果没有,该节点不是您的网络的一部分,并且可能应该断开连接。接下来,应该将其他节点的HeaviestTipSet声明HeaviestTipSetWeight和peerID传递给链同步子系统。

存储交易制作
  • 名称:存储交易制作
  • 协议ID:/fil/storage/mk/1.0.0
“任何客户端都使用存储交易协议来存储与矿床的数据。”
协议从存储客户端(在这种情况下可能是普通存储客户端或代理)开始。假设客户端piece在执行该协议之前已将其数据准备好。对于初始数据处理的详细信息,请参阅客户端数据。
首先,客户端向SignedStorageDealProposal存储矿工发送一个:
“TODO:这里可能还包括起始块高度,以指示何时可以开始此交易(暗示您可以在将来选择一个值)。在第一次回复之后,双方将签署同意该交易在此时开始。这可能用于在失速时挑战任何一方。这个起始区块的高度也使矿工有时间密封并在链上发布承诺。否则会出现一种奇怪的情况,即客户可以立即削减矿工没有存储数据。


处理
[客户]发送SignedStorageDealProposal
[Miner]发送SignedStorageDealResponse,接受或拒绝交易。
[客户]如果response.state是,Accepted那么转移有问题的数据。
[矿工]一旦矿工收到他们验证的所有数据。成功后,他们设置DealStateStaged(内部)。
[Miner]当扇区被封闭时,状态被设置为Sealing
[Miner]当承诺发布在链上时,状态设置为Complete
[客户]一旦交易进入Sealing状态,他们就能够查询并获得PieceInclusionProof他们需要验证矿工确实存储他们的数据。
在任何时间点,客户端都可以查询(使用查询协议)矿工以获得交易的当前状态。
“注意:数据传输操作在此协议的带外进行,最初可以是简单的位交换传输。支持其他更“异国情调”的协议,如邮寄硬盘驱动器是一个明确的目标。


存储交易查询
名称:存储交易查询
协议ID:/fil/storage/qry/1.0.0
这是查询给定存储协议当前状态的基本协议。在任何时候,该流程中的客户端可以向矿工询问给定提议的状态。要查询,他们发送StorageDealQuery
如下所示:
如果baseStateUnset或终止状态(Complete,RejectedFailed),则返回有关交易的当前状态。如果该baseState交易的当前状态不同,则交易的当前状态也会立即返回。在baseState匹配当前交易状态的情况下,流保持打开直到状态改变,此时返回交易的新状态。
“注意:将来我们可能想要一些更复杂的东西,它能够同时在一条流上多路等待有关大量交易的通知。升级到这个应该相对简单,所以现在我们做的很简单。

Retrieve Piece for Free
  • 名称:Retrieve Piece for Free
  • 协议ID:/fil/retrieval/free/0.0.0
Retrieve Piece for Free协议用于协调从矿工到客户的工件的转移,无需客户端。
客户端通过向矿工打开libp2p流来启动协议。要查找并连接到矿工,应使用地址查找服务。连接后,客户端必须向矿工发送RetrievePieceRequest消息。
当矿工收到请求时,它会回复一条RetrievePieceResponse消息,表明它已接受或拒绝了该请求。
如果矿工不接受请求,则发送一个RetrievePieceResponseFailure,其中message字段设置为指示请求被拒绝的原因。
如果矿工接受请求,它会发送一个RetrievePieceResponseSuccess。然后矿工发送客户订购的RetrievePieceChunk消息,直到所有件的数据都已传输,此时矿工关闭流。
注意:客户端必须能够通过按Data接收顺序连接-bytes 来重建一个部分。
注意:256 << 8由于我们的软件限制了CBOR编码消息的大小(以256 << 10字节为单位),因此矿工将该块分成包含最多字节的块。

BlockSync
名称:阻止同步
协议ID:/fil/sync/blk/0.0.1
blocksync协议是一种小型协议,允许Filecoin节点相互请求块的范围。这是一个简单的请求/响应协议。
该请求通过其最高块的散列请求给定长度的链。所述Options允许请求者指定是否被包括块和消息。
响应包含反向迭代顺序中的请求链。Chain如果Blocks设置了请求中的选项位,则数组中的每个项都包含该tipset的块,如果设置了该Messages位,则该tipset中所有块的消息。该MsgIncludes数组包含数组中每个块的一个整数Blocks数组。每个数组都MsgIncludes包含一个来自Messages数组的消息索引列表,这些索引Block位于块数组中的每个数组中。
TipSetBundle
对应于:


原文链接:
Filecoin网络数据传播:https://filecoin-project.github.io/specs/docs/data-propagation/
Filecoin网络具体议定书:https://filecoin-project.github.io/specs/docs/network-protocols/

《Filecoin规范文档》
IPFS进阶 | Filecoin 规范文档(一)
IPFS进阶 | Filecoin 规范文档(二)



《Filecoin规范文档》是系星际视界IPFSNEWS旗下【IPFS入门】板块泛IPFS领域知识普及栏目,未来将持续翻译整理Filecoin网络协议的详细说明,并通过连载的方式,提供给中国研究者交流参考。


【声明】内容源于网络
0
0
星际视界IPFSNEWS
IPFS认知新高地
内容 482
粉丝 0
星际视界IPFSNEWS IPFS认知新高地
总阅读149
粉丝0
内容482