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。
举例说明:
- 生成文件
> 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的文件
- 添加到ipfs
> ipfs add test
added QmbZHydHNsDVdQJ5hYbCGAJCUPLF8vLdQDgSdxgHNjVKNY test
- 查看
> 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 格式的数据
网友评论