ipfs区块链技术研究

了解IPFS,读这篇文章就够了

2018-04-07  本文已影响363人  建怀

IPFS

ipf是一个协议也是一个网络,将很多种技术(P2P网络技术,bt传输技术,Git版本控制,自证明文件系统的数据传输协议等)加以结合,在这些技术上改进创新,集成了ipf网络。

IPFS本质上是一种内容可寻址、版本化、点对点超媒体的分布式存储、传输协议,目标是补充甚至取代过去使用的超文本媒体传输协议(HTTP)。

想象拥有ipf协议的互联网世界

ipf网络里的文件,会被赋予一个哈希值,是独一无二的,根据文件内容被计算出来的。这样做为了文件不会被重复存储,大大降低存储成本,减少存储资源浪费。

ipf网络可以防止自然灾害对文件的损坏,分布全球不同地方的备份,紧急恢复功能。ipf可以抵挡DDoS攻击,甚至能抵挡量子计算的攻击。

如果你存储的文件是不想别人看到的文件,在存入ipf之前对文件进行加密即可,这样即使别人拥有此文件的哈希值,还需要私钥才能查看数据。

ipf的加密性,永久性存储,会滋生一些灰色产业进来,例如发布各种无法管制的言论,盗版猖獗等问题。

ipf能做些什么

ipf在目前项目上的小试牛刀

IPFS工作原理

IPFS技术细节

IPFS设计

IPFS是一个分布式文件系统,它综合了以前的对等系统的成功想法,包括DHT,BitTorrent,Git和SFS。 IPFS的贡献是简化,发展和将成熟的技术连接成一个单一的内聚系统,大于其部分的总和。 IPFS提供了编写和部署应用程序的新平台,以及一个新的分发系统版本化大数据。 IPFS甚至可以演进网络本身。
IPFS是点对点的;没有节点是特权的。 IPFS节点将IPFS对象存储在本地存储中。节点彼此连接并传输对象。这些对象表示文件和其他数据结构。 IPFS协议分为一组负责不同功能的子协议:

身份

节点由NodeId标识,这是使用S / Kademlia的静态加密难题[1]创建的公钥的密码散列。节点存储其公私钥(用密码加密)。用户可以在每次启动时自由地设置一个“新”节点身份,尽管这会损失积累的网络利益。激励节点保持不变。

首次连接时,对等体交换公钥,并检查:hash(other.PublicKey)等于other.NodeId。如果没有,则连接被终止

网络

IPFS节点与数百个其他节点进行定期通信网络中的节点,可能跨越广域网络。IPFS网络堆栈功能:

路由

IPFS节点需要一个路由系统, 这个路由系统可用于查找:

IPFS使用基于S / Kademlia和Coral的DSHT。在对象大小和使用模式方面, IPFS 类似于Coral 和Mainline, 因此,IPFS DHT根据其大小对存储的值进行区分。小的值(等于或小于1KB)直接存储在DHT上。对于更大的值,DHT只存储值索引,这个索引就是一个对等节点的NodeId, 该对等节点可以提供對该类型的值的具体服务。
DSHT的接口如下:

type IPFSRouting interface {
   FindPeer(node NodeId) // 获取特定NodeId的网络地址。
   SetValue(key []bytes, value []bytes) // 往DHT存储一个小的元数据。
   GetValue(key []bytes) // 从DHT获取元数据。
   ProvideValue(key Multihash) // 声明这个节点可一个提供一个大的数据。
   FindValuePeers(key Multihash, min int) // 获取服务于该大数据的节点。
}
块交换 - BitSwap协议

IPFS 中的BitSwap协议受到BitTorrent 的启发,通过对等节点间交换数据块来分发数据的。像BT一样, 每个对等节点在下载的同时不断向其他对等节点上传已下载的数据。和BT协议不同的是, BitSwap 不局限于一个torrent文件中的数据块。BitSwap 协议中存在一个永久的市场。 这个市场包括各个节点想要获取的所有块数据。而不管这些块是哪些如.torrent文件中的一部分。这些快数据可能来自文件系统中完全不相关的文件。 这个市场是由所有的节点组成的。虽然易货系统的概念意味着可以创建虚拟货币,但这将需要一个全局分类账本来跟踪货币的所有权和转移。这可以实施为BitSwap策略。

在基本情况下,BitSwap节点必须以块的形式彼此提供直接的值。只有当跨节点的块的分布是互补的时候,各取所需的时候,这才会工作的很好。 通常情况并非如此,在某些情况下,节点必须为自己的块而工作。 在节点没有其对等节点所需的(或根本没有的)情况下,它会更低的优先级去寻找对等节点想要的块。这会激励节点去缓存和传播稀有片段, 即使节点对这些片段不感兴趣。

BitSwap信用

这个协议必须带有激励机制, 去激励节点去seed 其他节点所需要的块,而它们本身是不需要这些块的。 因此, BitSwap的节点很积极去给对端节点发送块,期待获得报酬。但必须防止水蛭攻击(空负载节点从不共享块),一个简单的类似信用的系统解决了这些问题:

BitSwap的策略

BitSwap 对等节点采用很多不同的策略,这些策略对整个数据块的交换执行力产生了不同的巨大影响。BitSwap 对等体可以类似地实现一系列的策略(良好和恶意)。对于功能的选择,应该瞄准:

当节点负债比例超过节点已建立信贷的两倍,发送到负债节点的概率就会急速下降。负债比是信任的衡量标准:对于之前成功的互换过很多数据的节点会宽容债务,而对不信任不了解的节点会严格很多。

BitSwap账本

BitSwap节点保存了一个记录与所有其他节点之间交易的账本。这个可以让节点追踪历史记录以及避免被篡改。当激活了一个链接,BitSwap节点就会互换它们账本信息。如果这些账本信息并不完全相同,分类账本将会重新初始化, 那些应计信贷和债务会丢失。 恶意节点会有意去失去“这些“账本, 从而期望清除自己的债务。节点是不太可能在失去了应计信托的情况下还能累积足够的债务去授权认证。伙伴节点可以自由的将其视为不当行为, 拒绝交易。

Merkle DAG

DHT和BitSwap允许IPFS构造一个庞大的点对点系统用来快速稳定的分发和存储。最主要的是,IPFS建造了一个Merkle DAG,一个无回路有向图,对象之间的links都是hash加密嵌入在源目标中。这是Git数据结构的一种推广。

Merkle DAG拥有如下功能:

IPFS通过Merkle DAG让应用完全控制对象的数据结构,应用可以随意定义自己的data类型和结构,甚至可以是一些IPFS系统无法理解的数据结构,灵活度非常的大。

文件

IPFS在Merkle DAG上还为模型化版本文件系统定义了一组对象。这个对象模型与Git比较相似:

文件对象:BLOB

blob对象代表一个文件且包含一个可寻址的数据单元,IPFS的blobs就像Git的blobs或者文件系统数据块。它们存储用户的数据。需要留意的是IPFS文件可以使用lists或者blobs来表示。Blobs没有links。

文件对象: LIST

List对象代表着由几个IPFS的blobs连接成的大文件或者重复数据删除文件。Lists包含着有序的blob序列或list对象。从某种程度上而言,IPFS的list函数就像一个间接块的文件系统。

文件对象:TREE

IPFS中的tree对象与Git中相似,它代表着一个目录,一个名字到哈希值的映射。

文件对象:COMMIT

IPFS中的commit对象代表任何对象在版本历史记录中的一个快照。与Git中类似,但是它能够表示任何类型的对象。它同样link着发起对象。

IPNS:命名以及易变状态

目前为止,IPFS桟形成了一个对等块交换组成一个内容可寻址的DAG对象。这提供了发布和获取不可改变的对象。这甚至可以跟踪这些对象的版本历史记录。但是,这里有一个关键成分遗漏了:易变的命名。没有这个,发送IPFS的links,所有新内容的通信肯定都会有所偏差。现在所需就是能有某些方法可以获取相同路径的的易变状态。

自我认证认文件系统-SFS

使用SFS中的命名方案,给我们提供了一个种可以构建自我认证名称的方法,
在一个加密指定的全局命名空间中,这是可变的。IPFS的方案如下:

提出了两个引人注目的实现:分布式信任链,和平等共享的全局命名空间。SFS引入了一种自我建构技术—注册文件:寻址远程文件系统使用以下格式:

/sfs/<Location>:<HostID>
Location:代表的是服务网络地方
HostID = hash(public_key || Location)

因此SFS文件系统的名字认证了它的服务,用户可以通过服务提供的公钥来验证,协商一个共享的私钥,保证所有的通信。所有的SFS实例都共享了一个全局的命名空间,这个命名空间的名称分配是加密的,不被任何中心化的body控制。

人类友好名称

IPNS的确是一个分配和在分配名称的好方法,但是对用户却不是十分友好的,因为它使用很长的哈希值作为名称,众所周知这样的名称很难被记住。IPNS足够应付URLs,但对于很多线下的传输工作就没有这么好用了。因此,IPFS使用下面的技术来增加IPNS的用户友好度。

对等节点Links被SFS所鼓舞,用户可以直接将其他用户的对象link到自己的对象上(命令空间,家目录等等)。这有一个好处就是创建了一个可信任的Web(也支持老的真实性认证模型):

# Alice links 到Bob上
ipfs link /<alice-pk-hash>/friends/bob /<bob-pk-hash>
# Eve links 到Alice上
ipfs link /<eve-pk-hash/friends/alice /<alice-pk-hash>
# Eve 也可以访问Bob
/<eve-pk-hash/friends/alice/friends/bob
# 访问Verisign 认证域
/<verisign-pk-hash>/foo.com

DNS TXT IPNS 记录

如果/ipns/是一个有效的域名称,IPFS会在DNS TXT记录中查找关键的ipns。IPFS会将查找到的值翻译为一个对象的哈希值或者另一个ipns的路径:

# DNS TXT 记录
ipfs.benet.ai. TXT "ipfs=XLF2ipQ4jD3U ..."
# 表现为符号链接
ln -s /ipns/XLF2ipQ4jD3U /ipns/fs.benet.ai

Filecoin协议是如何运行的?

分布式哈希表(DHT)

分布式哈希表被广泛用于协调和维护关于对等系统的元数据。比如,MainlineDHT是一个去中心化哈希表,他可追踪查找所有的对等节点。

Kademlia DHT
Coral DSHT

虽然一些对等文件系统直接在DHT中存储数据块,这种“数据存储在不需要的节点会乱费存储和贷款”。Coral DSHT扩展了Kademlia三个特别重要的方式:

S/Kademlia DHT

S/Kademlia扩展了Kademlia,用于防止恶意的攻击,有如下两方面的方法:

块交换 - BitTorrent

BitTorrent是一个广泛成功应用的点对点共享文件系统,它可以在存在不信任的对等节点(群集)的协作网络中分发各自的文件数据片。从BitTorrent和它的生态系统的关键特征, IPFS得到启示如下:

版本控制系统-Git

版本控制系统提供了对随时间变化的文件进行建模的设施,并有效地分发不同的版本。流行版本控制系统Git提供了强大的Merkle DAG对象模型,以分布式友好的方式捕获对文件系统树的更改。

Filecoin协议里有两个概念:

普通用户在ipf网络存储数据也可能是免费的,只是这些费用转嫁到那些基于ipf协议的应用开发商上,他们会用另外一种方式薅你身上的羊的毛。

Filecoin的共识机制(存储证明PoSt)

Filecoin的共识机制相对环保,淘宝店主(矿工)发完货(完成存储),买家是要确认收货(确认矿工完成存储),这里的“确认矿工完成存储”,就是Filecoin的共识机制(存储证明,PoSt),这个“确认矿工完成存储”会一直存在于Filecoin网络中,用户可以随时查看。

Filecoin把矿工在网络中的当前存储数据相对于整个网络的存储比例转化为矿工投票权,利用存储证明(PoSt)来产生共识,不用像比特币那样浪费计算资源和能源,并且能激励矿工投入更多的硬盘为网络做贡献。

挖矿

网络:没有特别的要求,普通家庭网络就可以满足,但不排除官方修改filecoin协议。

硬盘:硬盘是最重要的,存储是长期开着,24小时状态下,所以需要一个能够长时间稳定运行存储的硬盘,监控硬盘的性价比会更高。

矿机:后续filecoin会推出挖矿软件,矿机只要能流畅运行挖矿软件即可。并不需要特殊的cpu、特殊的硬件。普通家用机的配置就能运行。

网络:需要高网速、低延迟。重要的是搞到大型流量上传渠道,比如网吧,或者政府的流量渠道。

硬盘:没有要求。

矿机:后续filecoin会推出挖矿软件,矿机只要能流畅运行挖矿软件即可。并不需要特殊的cpu、特殊的硬件。普通家用机的配置就能运行。

上一篇 下一篇

猜你喜欢

热点阅读