美文网首页IPFS教程
IPFS基础篇之dags、objects、blocks

IPFS基础篇之dags、objects、blocks

作者: 程序员大叔日记 | 来源:发表于2018-02-21 16:54 被阅读156次

    A peer-to-peer hypermedia protocol
    to make the web faster, safer, and more open.

    文章参照官网例子

    Blocks理解

    观察ipfs add 命令会看到这样一个描述

    Adds contents of <path> to ipfs. Use -r to add directories.
    Note that directories are added recursively, to form the ipfs
    MerkleDAG.

    add 命令将文件或者目录加入到ipfs中,形成了一个Merke DAG(directed acyclic graph),它遵循unixfs 的数据格式(protobuf),格式内容如下:

    message Data {
        enum DataType {
            Raw = 0;
            Directory = 1;
            File = 2;
            Metadata = 3;
            Symlink = 4;
            HAMTShard = 5;
        }
    
        required DataType Type = 1;
        optional bytes Data = 2;
        optional uint64 filesize = 3;
        repeated uint64 blocksizes = 4;
    
        optional uint64 hashType = 5;
        optional uint64 fanout = 6;
    }
    

    当文件的内容超过256k或者add的是一个目录时,文件将会被拆分成block存储,并使用link nodes重排列成类似tree的一种结构。add命令返回的hash值其实是形成的DAG的root的hash值。当使用ipfs ls命令查看该hash值时,可以看到它包含的block。

    举例说明:

    1. 生成文件
    > dd if=/dev/zero of=test bs=258k count=1
    1+0 records in
    1+0 records out
    264192 bytes transferred in 0.000474 secs (557395152 bytes/sec)
    

    这将会生成一个名称为test,大小为258k的文件

    1. 添加到ipfs
    > ipfs add test
    added QmbZHydHNsDVdQJ5hYbCGAJCUPLF8vLdQDgSdxgHNjVKNY test
    
    1. 查看
    > ipfs ls QmbZHydHNsDVdQJ5hYbCGAJCUPLF8vLdQDgSdxgHNjVKNY
    QmRk1rduJvo5DfEYAaLobS2za9tDszk35hzaNSDCJ74DA7 262158
    Qmcpc1Kk8Hhj3rVSnZGSrxzP4Fcp48cEARxMXxkHryUNJw 2059
    

    可以看到,该文件被拆分成两个block,并且给出了两个块分别的大小

    Block如何操作

    最好是别使用ipfs cat查看block对应的hash值 (:oops),因为这会在你的控制台打印出一堆二进制数据。。
    可以使用stat查看每个hash值对应block的大小,该大小不会包含子块的

    > ipfs block stat QmbZHydHNsDVdQJ5hYbCGAJCUPLF8vLdQDgSdxgHNjVKNY
    Key: QmbZHydHNsDVdQJ5hYbCGAJCUPLF8vLdQDgSdxgHNjVKNY
    Size: 102
    

    Blocks 与 Objects

    在IPFS中,所谓的block指的是一块单独的数据单元,通过hash值引用。block可以是任何数据的排序,数据的组成顺序与其无关。而对于object来说,它指的是遵循了Merke DAG protobuf 数据格式的block,它是可以通过ipfs object 命令反序列化以及重组成的。任何给定的hash代表的是一个object或者block

    创建一个block

    创建自己的block非常简单,使用命令

    > echo "block test " | ipfs block put 
    QmWJiHNL2Lu1nMQW61cwhweBaEpCoiETbL53CjxEyZsHov
    > ipfs block get QmWJiHNL2Lu1nMQW61cwhweBaEpCoiETbL53CjxEyZsHov
    block test
    

    要注意的是,自己创建block不能用ipfs cat命令查看,因为ipfs cat查看的是基于unixfs data 格式的数据

    相关文章

      网友评论

      • 陳影_:请原谅,都是数据看不懂哇

      本文标题:IPFS基础篇之dags、objects、blocks

      本文链接:https://www.haomeiwen.com/subject/lcgqaxtx.html