BYTECODES

IPFS CID详解

CID当前有两版v0和v1

CID v0

扩展性没v1好,但目前还是在使用中,v0特点有:

  1. 以Qm开头

  2. 使用base58btc编码

  3. 数据默认使用dag-pb编码

  4. 可以转化成v1版格式

CID v1版

加了很多meta,就是加了很多前缀,兼容性和扩展性更强,它的格式如下

CID v1 = Multibase + Multicodec + Multihash

换成我们可以理解的形式就是

<base><codec><hash-function><hash-length><hash-digest>

参考multihash的数据结构如下:

type DecodedMultihash struct {
	Code   uint64
	Name   string
	Length int    // Length is just int as it is type of len() opearator
	Digest []byte // Digest holds the raw multihash bytes
}

通过其中的Code,可以知道数据是如何编码的,比如

  • 0x70: dag-pb,即MerkleDAG protobuf

  • 0x71:CBOR对象

  • 0x78:Git对象

  • 0x90:以太坊块数据

  • 0x93: 以太坊交易数据

刚提到v0使用了base58btc,但是v1就支持更多的编码格式,比如:

b: base32
z: base58
f: base16

注意我们提到了两处编码,base58, base32, base16这种是指CID的编码,而dag-pb这种是对数据本身的编码

示例

QmRBkKi1PnthqaBaiZnXML6fH6PNqCFdpcBxGYXoUQfp6z

  • CID v0

  • 使用了base58btc编码

bafybeibkjmxftowv4lki46nad4arescoqc7kdzfnjkqux257i4jonk44w4

  • CID v1

  • 使用了base32编码

大家可以[在这里][1]看到完整的拆解


[1]: https://cid.ipfs.io/