科普丨一文深入了解IPFS( 二 )


链接——链接结构的数组 , 这些是到其他IPFS对象的链接 。
链接结构具有三个数据字段:
名称——链接的名称 。
哈希——链接的IPFS对象的哈希 。
大小——链接的IPFS对象的累积大小 , 包括跟随其链接的位置 。
该尺寸领域主要用于优化P2P网络 , 这里我们将基本忽略它 , 因为从概念上讲 , 逻辑结构不需要它 。
IPFS对象通常由其Base58编码的哈希引用 。 例如 , 让我们使用IPFS命令行工具查看带有哈希QmarHSr9aSNaPSR6G9KFPbuLV9aEqJfTk1y9B8pdwqK4Rq的IPFS对象(请在家尝试):
科普丨一文深入了解IPFS文章插图
读者可能会注意到 , 所有哈希均以“ Qm”开头 。 这是因为哈希实际上是multihash , 这意味着哈希本身在multihash的前两个字节中指定了哈希函数和哈希长度 。 在上面的示例中 , 十六进制的前两个字节为1220 , 其中12表示这是SHA256哈希函数 , 而20表示哈希的长度(以字节为单位) , 即32个字节 。
数据和命名链接为IPFS对象集合提供了Merkle DAG的结构——DAG表示有向无环图 , Merkle表示这是一个经过加密认证的数据结构 , 使用加密哈希来处理内容 。 这是留给读者的一个练习来思考为什么在这个图表中不可能有循环 。
为了可视化图形结构 , 我们将通过一个图形来可视化IPFS对象 , 该图中包含节点中的数据 , 链接被定向到其他IPFS对象的图边 , 其中链接的名称是图边上的一个标签 。 上面的示例如下所示:
科普丨一文深入了解IPFS文章插图
现在我们将举例说明可以由IPFS对象表示的各种数据结构 。
文件系统
IPFS可以轻松表示由文件和目录组成的文件系统 。
小文件
一个小文件(<256 kB)由IPFS对象表示 , 数据是文件内容(加上小页眉和页脚) , 没有链接 , 即链接数组为空 。 请注意 , 文件名不是IPFS对象的一部分 , 因此两个名称不同且内容相同的文件将具有相同的IPFS对象表示形式 , 因此具有相同的哈希值 。
我们可以使用命令ipfs向IPFS添加一个小文件:
我们可以使用ipfs cat查看上述IPFS对象的文件内容:
使用ipfs对象查看基础结构可获得收益:
科普丨一文深入了解IPFS文章插图
我们将该文件可视化如下:
科普丨一文深入了解IPFS文章插图
大文件
大型文件(> 256 kB)由小于256 kB的文件块的链接列表表示 , 并且只有最小数据指定此对象表示大文件 。 指向文件块的链接的名称为空字符串 。
科普丨一文深入了解IPFS文章插图
科普丨一文深入了解IPFS文章插图
科普丨一文深入了解IPFS文章插图
目录结构
目录由指向代表文件或其他目录的IPFS对象的链接列表表示 。 链接的名称是文件和目录的名称 。 例如 , 考虑目录test_dir的以下目录结构:
文件hello.txt和my_file.txt都包含字符串Hello World!\ n 。 文件testing.txt包含字符串Testing 123 \ n 。
当将此目录结构表示为IPFS对象时 , 它看起来像这样:
科普丨一文深入了解IPFS文章插图
注意 , 对包含Hello World!\ n的文件进行了自动重复数据删除 , \ n , 该文件中的数据仅存储在IPFS中的一个逻辑位置(由其哈希地址寻址) 。