IPFS CID详解
CID当前有两版v0和v1
CID v0
扩展性没v1好,但目前还是在使用中,v0特点有:
以Qm开头
使用base58btc编码
数据默认使用dag-pb编码
可以转化成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/