IPFS文件长什么样?我们该如何构建?

admin
admin
admin
1247
文章
1
评论
2020年9月27日20:11:30 评论

IPFS的核心是一个分布式系统,用于存储和访问文件,网站,应用程序和数据。它与传输层无关,这意味着它可以在各种传输层上进行通信,包括传输控制协议(TCP),uTP,UDT,QUIC,TOR甚至是蓝牙。

相比于HTTP,IPFS的传输速度之所以更快,在于IPFS是通过哈希标识的方式查找文件的,当你拥有哈希后,你会询问并连接到的网络“谁拥有此内容(哈希)”。然后连接到相应的节点并下载,也就是说,这能形成点对点覆盖,从而实现非常快速并且广泛和即可使用的路由。

IPFS文件长什么样?我们该如何构建?

IPFS 节点
IPFS文件长什么样?我们该如何构建?

IPFS本质上是一个用于检索和共享IPFS对象的P2P系统。IPFS节点是具有两个字段的数据结构。

数据 :大小小于256 kB的非结构化二进制数据的容量

链接 :可以链接到其他IPFS节点

链接结构具有三个数据字段:

名称:链接的名称

哈希:链接IPFS对象的哈希

大小:链接的IPFS节点的累积大小,包括跟随其链接的位置

IPFS节点通常由其Base58编码的哈希引用。例如,让我们使用IPFS命令行工具查看带有哈希QmarHSr9aSNaPSR6G9KFPbuLV9aEqJfTk1y9B8pdwqK4Rq的IPFS对象:

IPFS文件长什么样?我们该如何构建?

你可能会注意到,所有哈希都以“ Qm”开头。因为散列实际上是一个多散列,这意味着散列本身在多散列的前两个字节中指定了散列函数和散列的长度。在上面的示例中,十六进制的前两个字节为1220,其中12表示这是SHA256哈希函数,而20表示哈希的长度(以字节为单位),即32个字节。

数据和命名的链接给IPFS对象的集合A的结构梅克尔DAG - DAG意味着向无环图,并梅克尔表示这个是使用密码散列到地址内容的加密认证的数据结构。

为了可视化图形结构,我们将通过节点中带有Data的图形可视化IPFS对象,并且将Links指向图形边缘指向其他IPFS对象,其中Link的名称是图形边缘上的标签。

IPFS文件长什么样?我们该如何构建?

现在,我们将给出可以由IPFS对象表示的各种数据结构的示例。

IPFS文件长什么样?我们该如何构建?

文件系统

IPFS可以轻松表示一个由文件和目录组成的文件系统。我们可以通过以下案例来分解文件的表达方式。

小档案

一个小文件(<256 kB)由IPFS对象表示,数据为文件内容(加上小页眉和页脚),没有链接,即,链接数组为空。请注意,文件名不是IPFS对象的一部分,因此两个具有不同名称和相同内容的文件将具有相同的IPFS对象表示形式,因此具有相同的哈希值。我们可以使用ipfs add命令向IPFS添加一个小文件:

IPFS文件长什么样?我们该如何构建?

我们可以使用ipfs cat查看上述IPFS对象的文件内容:

IPFS文件长什么样?我们该如何构建?

使用ipfs对象查看基础结构可获得收益:

IPFS文件长什么样?我们该如何构建?

我们将该文件可视化如下:

IPFS文件长什么样?我们该如何构建?

大文件

大型文件(> 256 kB)由指向<256 kB的文件块的链接列表表示,并且只有最小的Data指定此对象表示大型文件,文件块的链接具有空字符串作为名称。
IPFS文件长什么样?我们该如何构建?

IPFS文件长什么样?我们该如何构建?

IPFS文件长什么样?我们该如何构建?

目录结构

目录由指向代表文件或其他目录的IPFS对象的链接列表表示。链接的名称是文件和目录的名称。例如,考虑目录test_dir的以下目录结构:

IPFS文件长什么样?我们该如何构建?

文件hello.txt和my_file.txt都包含字符串Hello World!\ n。文件testing.txt包含字符串Testing 123 \ n。

当将此目录结构表示为IPFS对象时,它看起来像这样:

IPFS文件长什么样?我们该如何构建?

请注意,对包含Hello World!\ n的文件进行了自动重复数据删除,\ n该文件中的数据仅存储在IPFS中的一个逻辑位置(由其哈希地址寻址)。

IPFS命令行工具可以无缝地跟随目录链接名称来遍历文件系统:

IPFS文件长什么样?我们该如何构建?

版本文件系统
IPFS文件长什么样?我们该如何构建?

IPFS可以表示Git用于版本化文件系统的数据结构。Git提交对象在Git Book中进行了描述。Commit对象的主要属性是它具有一个或多个链接,其名称为parent0,parent1等,指向先前的提交,以及一个名称对象的链接(Git中的树),该链接指向该提交所引用的文件系统结构。

让我们用同样的例子,我们以前的文件系统的目录结构有两个一起提交:第一次提交是原来的结构,并在第二次提交,我们已经更新了文件my_file.txt到了另一个世界,而不是原始的Hello World。

IPFS文件长什么样?我们该如何构建?

在此还要注意,我们具有自动重复数据删除功能,因此第二个提交中的新对象只是主目录,新目录my_dir和更新的文件my_file.txt。

IPFS文件长什么样?我们该如何构建?

区块链

区块链具有自然的DAG结构,因为过去的区块始终通过其后继区块的哈希值进行链接。以太坊区块链等更高级的区块链也有一个关联的状态数据库,该数据库具有Merkle-Patricia树结构,也可以使用IPFS对象进行仿真。

我们假设一个简单的区块链模型,其中每个块包含以下数据:

交易对象清单

到上一个块的链接

状态树/数据库的哈希

然后可以在IPFS中按以下方式对该区块链进行建模:

IPFS文件长什么样?我们该如何构建?

我们看到将状态数据库放在IPFS上时获得的重复数据删除,在两个块之间,只需要显式地存储已更改的状态条目,而不是整个状态(这将大大增加数据负担)。

这里有趣的一点是,将数据存储在区块链上与将数据哈希存储在区块链上之间的区别。在以太坊平台上,我们需要支付高昂的费用才能将数据存储在关联的状态数据库中,以最大程度地减少状态数据库的膨胀。因此,这是一种常见的设计模式,即较大的数据不存储数据本身,而是存储状态数据库中数据的IPFS哈希。

通常,区块链将每个矿工复制的全球分类帐中的内容(也就是链本身中存储的数据)与链中可能引用但未在所有节点之间复制的数据进行区分。

如果在IPFS中已经表示了具有相关状态数据库的区块链,那么将哈希存储在区块链上和将数据存储在区块链上之间的区别就变得模糊了,因为无论如何所有内容都存储在IPFS中,并且仅区块的哈希需要状态数据库的哈希值。在这种情况下,如果有人在区块链中存储了IPFS链接,我们可以无缝地跟随该链接来访问数据,就好像数据存储在区块链本身中一样。

但是,通过查看矿工在创建新区块时需要处理的内容,我们仍然可以区分链上和链下数据存储。在当前的以太坊网络中,矿工需要处理将更新状态数据库的交易。为此,他们需要访问完整状态数据库以便能够在更改后的任何地方对其进行更新。

因此,在以IPFS表示的区块链状态数据库中,我们仍然需要将数据标记为“链上”或“链外”。对于矿工来说,“链上”数据对于本地采矿是必不可少的,并且该数据将直接受到交易的影响。“链外”数据将必须由用户更新,而无需由矿工接触。

admin
  • 本文由 发表于 2020年9月27日20:11:30
  • 转载请务必保留本文链接:https://www.biyungu.com/news/2674.html
DeFi并不是以太坊才有,比特币的更香 资讯

DeFi并不是以太坊才有,比特币的更香

CoinDesk几个星期前的一篇文章《为什么比特币持有者们也关注DeFi?我注意到|CoinDesk专栏。很明显,这个标题是用来吸引眼球的。看起来,所有DeFi上的东西都会受到比特币用户的抵制:垃圾软...
PayPal是否会影响这次行情的波动 资讯

PayPal是否会影响这次行情的波动

昨天晚上,比特币和以太坊市场开始了一轮更为猛烈的上涨。比特币价格最高达到13000美元,以太坊价格上涨稳定在390美元左右。在最近几个月里,比特币出现了最高的涨势。 业内许多人都将比特币开启的这轮上涨...
为什么说Vdex永不崩盘?VDEX永不关网的理由? 资讯

为什么说Vdex永不崩盘?VDEX永不关网的理由?

很多人到现在都没有弄明白VDEX为什么始终没不了,看到一些负面信息就没了精神支柱,恐慌畏惧,生怕自己倾家荡产,总结一下花VDEX永不崩盘的四个理由: 1、资金去中心化,都没有资金池,不分配后来者本金,...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: