30

科普 | 在MOAC子链上实现的IPFS存储平台

 4 years ago
source link: https://learnblockchain.cn/article/1099
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

IPFS(InterPlanetary File System)是一个面向全球的、点对点的分布式版本文件系统,是一个去中心化多节点存储的重要协议。这个协议的目标是取代传统的互联网协议HTTP,让我们的互联网速度更快、更安全、更开放。但IPFS还需要通过基于区块链实现的奖励机制,来鼓励节点参与IPFS的网络存储,提供服务并获取回报。

谈到IPFS就不得不提到FileCoin。大家会经常把IPFS和FileCoin混为一谈,实际上这是两个不同的概念。虽然都是Juan Benet和他领导的Protocal Lab开发的。但是IPFS只是一个协议,它还不足以建立一个分布式存储平台。

FileCoin是建立在这个协议上的一个文件存储交易市场, 它的实现方式是一条区块链。通过区块链,和这条链上发行的代币,FileCoin相当于在IPFS协议上增加了一个文件存储的奖励机制。有了这个机制,有存储需求的用户使用代币,提供存储空间的矿工通过竞争来存储文件获取代币。这样大家才会愿意把富余的硬盘拿出来存储别人的文件,才能搭建一个可商用的全球化的存储空间,将来IPFS才有可能取代HTTP协议,打造一个全新的互联网。

FileStorm

基于IPFS协议搭建的存储平台需要以下步骤:

  • 确保文件被复制到多个节点上;

  • 查找并修复缺损文件;

  • 文件存储提供方可以得到奖励;

  • 文件存储可以被证明。

证明可分成两种:


  • 复制证明(proof-of-replication )- 存储提供节点必须能证明文件确实被存储在了它的物理硬盘上。

  • 时空证明(proof-of-spacetime)- 存储提供节点必须能证明文件在一个确定的时间里被存储了。

墨客是一个为去中心化应用而生的多层次区块链,每一个子链都将会用来支持一个应用,而大部分的应用都有存储需求,这是区块链应用不可或缺的一部分。FileStorm就是这样一条子链。用户可以通过调用智能合约把文件写入和读出IPFS网络。

FileStorm子链定期做文件验证确保文件都被存储,然后给存储节点支付收益。因为底层协议一致,通FileStorm存储的文件跟IPFS主网是相连的,所以实现了IPFS存储的墨客,将成为一个完美的去中心化应用开发平台。

而基于IPFS协议搭建的存储平台需要的所有条件,都可以通过墨客子链来轻松实现:

  • 建立一条由多个可以提供存储功能的节点组成的子链;

  • 通过子链自带的节点更新,备份,和刷新功能实现文件修复;

  • 子链节点通过出块得到奖励;

  • FileStorm共识机制从时间和空间上证明了文件被复制。

FileStorm共识

FileStorm共识和ProcBlizzard共识类似。子链节点按顺序轮流出块,每n秒钟一个块,n可设置,现在设置为10。

FileStorm的不同之处在于,每个FileStorm子链的区块头上多了两个参数,一个是随机数,一个是哈希值。这两个参数是用来做文件验证的。证明每个节点上都存了该存的文件。在第一版的FileStorm子链上,所有的文件在每个节点上都必须存一份。每m个区块进行一次文件验证。m可设置,现在设置为10。

验证的方法是,出块节点拿到上一个区块上的随机数,然后通过这个随机数进行计算,找到它在自己的IPFS中对应的文件,并找到文件所有子节中对应的起始位置,然后往后面拿256个字节(字节数不够就拿到文件最后一个字节),形成一个哈希值。然后把哈希值写到区块头上。同时生成一个新的随机数写到区块头上,给下一个区块用。其他节点收到新区块后,也要用同样的方法对本地IPFS节点里的对应文件进行验证,验证结果一致,就将区块写进本地区块链上。如果不一致,就等待下一个区块。这样,FileStorm共识就确保子链上每个节点都保存了该保存的文件。

FileStorm子链节点

运行FileStorm子链需要安装下面四个模块:

  • SCSServer - 墨客子链节点程序;

  • redis - 本地数据库,用于存储文件公共哈希和私密哈希的对应;

  • IPFS Monkey - 文件管理助手,用于文件从IPFS Daemon里的读、写、删除和验证;

  • IPFS Daemon - 文件以IPFS的方式存储的主要平台。

IPFS Daemon由IPFS源代码生成,没有改动。所以FileStorm子链是一种开放式架构,可以和其他基于IPFS的存储设备兼容。

FileStorm子链节点的安全性

为了确保墨客子链节点的安全性,子链节点是不会暴露IP,所有的信息传递都是通过VNODE。但是,IPFS能够根据文件哈希值定位具体节点的ip地址。所以,我们会把文件的哈希加密。但是,如果是公开文件,子链上会确保有一个节点把文件用原始哈希来存储。

IPFS合约

IPFS合约必须提供四个基本函数:

function write (string fileHash, bool publicFile):

调用这个函数可以把本地文件写到FileStorm子链节点上。如果输入的publicFile参数是true,文件将是公开的,通过同样的fileHash也可以从子链上读出来。如果输入的publicFile参数是false,文件将是不公开公开的,用fileHash不可以从子链上读出来。只能调用合约的读文件函数;

function read (string fileHash) :

调用这个函数可以把FileStorm子链节点上的文件读到本地IPFS Daemon中来;

function remove (string fileHash) :

调用这个函数可以把文件从FileStorm子链上删除;

function verify (string fileHash):

调用这个函数可以验证节点上文件是否存在。

Github: https://github.com/MOACChain


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK