鸵鸟区块链编译
哈鲁资本支持
资料来源:康森斯
“有了IPFs,您可以开始以某种方式查看其他所有内容,然后您意识到可以替换所有这些内容。”
–Juan benet,IPFs的创始人
01了解IPF
这一部分试图为Christian lundkwist博士的以下深入技术摘要提供高层次的见解。
IPFs最初是由juanbenet提出的,目的是建立一个快速移动的科学数据系统。版本控制允许您随时间跟踪软件状态(类似于GIT)。从那时起,IPFs就被认为是一个分布式、持久化的web。”IPFs是一个分布式文件系统,旨在将所有计算设备连接到同一个文件系统。在某些方面,它类似于web的原始地址,但实际上更像是交换git对象的一组比特流。IPFs可能成为未来互联网的一个新的主要子系统。如果构建成功,它将补充或取代HTTP,甚至更多。听起来很疯狂。太疯狂了。”
IPFs的核心是一个版本控制的文件系统,它可以检索和管理文件,将它们存储在一个地址中,并随时间跟踪版本。IPFs还考虑这些文件如何在网络上移动,因此它也是一个分布式文件系统。
IPFs对数据和内容在网络中的移动有类似BitTorrent的规则。文件系统层提供了非常有趣的属性,例如:
-全分布式网站
-没有原始服务器的站点
-完全可以在客户端浏览器上运行的网站
-没有可与之通信的服务器站点
内容寻址;
IPFs不通过存储对象的服务器引用对象(图片、文章、视频),而是通过对文件的哈希来引用所有内容。其原理是,如果你想在浏览器中访问一个特定的页面,IPFs会询问整个网络,“有人拥有这个哈希对应的文件吗?”IPFs上的节点可以返回文件,以便您可以访问它。
IPFs在HTTP层使用内容寻址。这是一个约定,我们将创建内容本身的一些表示,而不是按位置定位的标识符。这意味着内容将决定地址。该机制是将一个文件进行哈希加密,这样您就可以获得该文件的非常小且安全的表示形式,从而确保某人不能只获取具有相同哈希值的另一个文件并将其用作地址。IPFs中文件的地址通常以标识根对象的哈希开头,后跟向下移动的路径。您正在与特定对象(而不是服务器)对话以查看该对象内的路径。
HTTP vs IPFs查找和检索文件
HTTP有一个很好的属性,其中标识符是位置,因此很容易找到并与托管该文件的计算机通信。这是有用的,通常工作良好,但它不能用于离线或大分布式解决方案中,以最小化整个网络的负载。
在IPFs中,步骤可以分为两个部分:用内容寻址标识文件并找到它——当你有一个哈希值时,你会问连接的网络,“谁拥有这个内容?然后连接到相应的节点并下载。结果是点对点覆盖,这为您提供了非常快速的路由选择。
要了解更多,请观看alpha视频。
02 IPFs示例
技术检查和IPFs(星际文件系统)是经过测试的Internet技术的组合,如DHTs、GIT版本系统和BitTorrent。它创建了一个可以交换IPFs对象的P2P组。IPFs对象的总数形成了一个加密并经过验证的数据结构,称为Merkle DAG,它可以用来为许多其他数据结构建模。在本文中,我们将介绍IPFs对象和Merkle DAG,并提供可以使用IPFs建模的结构示例。
IPFs对象
IPFs本质上是一个用于检索和共享IPFs对象的P2P系统。IPFs对象是包含两个字段的数据结构:
数据-大小小于256KB的非结构化二进制数据点。
Links——链接到其他IPFs对象的链接结构数组。
链接结构有三个数据字段:
名称-链接的名称。
Hash—链接的IPFs对象的哈希。
大小——链接的IPFs对象的累积大小,包括它们跟随链接的位置。
这个大小域主要用于优化P2P网络,这里我们基本上忽略它,因为从概念上讲,逻辑结构不需要它。
IPFs对象通常由base58编码的哈希引用。例如,让我们使用IPFs命令行工具查看带有散列qmarhsr9asnapsr6g9kfpulv9aeqjftk1y9b8pdwqk4rq的IPFs对象(在家中尝试):
读者可能会注意到所有散列都以“QM”开头。这是因为hash实际上是一个multihash,这意味着hash本身在multihash的前两个字节中指定了hash函数和hash长度。在上面的例子中,十六进制的前两个字节是1220,其中12是sha256散列函数,20是散列的长度(以字节为单位),即32个字节。
数据和命名链接为IPFs对象集合提供了Merkle-DAG的结构——DAG表示有向无环图,Merkle表示这是一个经过加密和认证的数据结构,加密哈希用于处理内容。这是一个让读者思考为什么这个图中没有循环的练习。
为了可视化图形结构,我们将通过一个包含节点中数据的图形来可视化IPFs对象,并将链接指向其他IPFs对象的图形边缘,其中链接的名称是图形边缘上的标签。上例如下:
现在我们将说明可以由IPFs对象表示的各种数据结构。
文件系统
IPFs可以很容易地表示由文件和目录组成的文件系统。
小文件;
小文件(lt;256 KB)由IPFs对象表示。数据是文件的内容(加上小的页眉和页脚)。没有链接,即链接数组为空。请注意,文件名不是IPFs对象的一部分,因此具有不同名称和相同内容的两个文件将具有相同的IPFs对象表示形式,因此具有相同的哈希值。
我们可以使用命令IPFs向IPFs添加一个小文件
我们可以使用IPFs cat查看上述IPFs对象的文件内容:
使用IPFs对象查看基础架构的好处:
我们将文件可视化如下:
大文件
大文件(大于256 KB)由小于256 KB的文件块的链接列表表示,只有最小的数据指定此对象表示大文件。指向文件块的链接的名称是空字符串。
目录结构
目录由一个指向IPFs对象的链接列表表示,这些对象表示文件或其他目录。链接的名称是文件和目录的名称。例如,考虑dir的以下目录结构test_u:
文件你好.txt还有我的文件.txt所有包含字符串的Hello world!/n.文件测试.txt包含字符串testing 123/n。
将此目录结构表示为IPFs对象时,如下所示:
请注意,右侧包含Hello world!/此文件中的数据仅存储在IPFs中的逻辑位置(通过其哈希地址寻址)。
IPFs命令行工具无缝地跟随目录链接名称来遍历文件系统:
版本文件系统
IPFs可以表示git用于文件系统版本控制的数据结构。Git提交对象在Git书中有描述。在编写本报告时,IPFs提交对象的结构尚未完全明确,讨论仍在进行中。
提交的对象的主要属性是,它有一个或多个指向上一次提交的链接,名为parent0、parent1等,并且有一个指向命名对象(GIT中称为tree)的链接,该链接指向对象引用的文件系统结构。
让我们以前面的文件系统目录结构和两个提交为例:第一次提交是原始结构,在第二次提交中,我们更新了文件myu文件.txt这意味着另一个世界,而不是原来的“你好世界!”
另外请注意,我们有自动重复数据消除功能,因此第二次提交的新对象仅为主目录、新目录myDir和更新后的文件myu文件.txt。
03区块链
这是IPFs最令人兴奋的用例之一。区块链具有自然的DAG结构,因为过去的区块总是通过其后续区块的哈希值进行链接。更**别的区块链(如以太坊区块链)也有关联的状态数据库,该数据库具有Merkle Patricia树结构,也可以使用IPFs对象进行模拟。
假设一个简单的区块链模,其中每个区块包含以下数据:
贸易伙伴名单;
链接到上一个块;
状态树/数据库的哈希。
然后,区块链可以在IPFs中建模,如下所示:
当我们将状态数据库放在IPFs上时,我们看到了重复数据消除的好处—在两个块之间,只需要显式地存储更改的状态项。
这里有趣的是在区块链上存储数据和在区块链上存储数据哈希之间的区别。在以太坊平台上,您需要支付相当可观的费用才能将数据存储在关联的状态数据库中,以最小化状态数据库的扩展(区块链膨胀)。因此,这是一种常见的设计模式,即较大的数据不存储数据本身,而是将数据的IPFs哈希存储在状态数据库中。
如果一个带有相关状态数据库的区块链已经在IPFs中表示,那么在区块链上存储哈希值和在区块链上存储数据之间的区别就会变得有点模糊,因为在任何情况下,所有东西都存储在IPFs中,只需要块的哈希值来哈希状态数据库。在这种情况下,如果有人在区块链中存储IPFs链接,我们可以无缝地跟踪该链接访问数据,就像数据存储在区块链中一样。
然而,我们仍然可以区分链上和链外数据存储。我们通过观察矿工在创建新区块时需要处理的问题来做到这一点。在目前的以太坊网络中,矿工需要处理将更新状态数据库的事务,因此他们需要访问完整的状态数据库,以便在更改后的任何地方更新它。
因此,在以IPFs为代表的区块链状态数据库中,我们仍然需要将数据标记为“链上”或“链下”对矿业公司而言,“链上”数据对当地挖矿至关重要,并将直接受到交易的影响。”“链外”数据必须由用户更新,而矿工则不必暴露于此。
更多IPFs信息,请将代码扫描到组中!!
文章标题:深入了解IPF
文章链接:https://www.btchangqing.cn/122223.html
更新时间:2020年10月16日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。