【发布时间】:2019-01-10 07:51:43
【问题描述】:
假设我像这样向 IPFS 添加数据:
$ echo Hello World | ipfs add
这将给我QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u - 一个 CID,它是 Base58 编码的 Multihash。
将其转换为 Base16,告诉我 IPFS 添加的哈希摘要是 SHA2-256 哈希:
12 - 20 - 74410577111096cd817a3faed78630f2245636beded412d3b212a2e09ba593ca
<hash-type> - <hash-length> - <hash-digest>
我知道 IPFS 不仅对数据进行哈希处理,而且实际上首先将其序列化为 Unixfs protobuf,然后将其放入 dag 中。
我想揭开神秘面纱,如何到达74410577111096cd817a3faed78630f2245636beded412d3b212a2e09ba593ca,但我不确定如何获取保存带有数据的 Unixfs protobuf 的已创建 dag。
例如,我可以将序列化的原始数据写入磁盘并使用 protobuf 解码器对其进行检查:
$ ipfs block get QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u > /tmp/block.raw
$ protoc --decode_raw < /tmp/block.raw
这将为我提供可读格式的序列化数据:
1 {
1: 2
2: "Hello World\n"
3: 12
}
但是,通过 SHA-256 的管道仍然会给我一个不同的哈希值,这是有道理的,因为 IPFS 将 protobuf 放在一个 dag 中并对其进行多重哈希处理。
$ protoc --decode_raw < /tmp/block.raw | shasum -a 256
所以我决定弄清楚如何获取该 dag 节点,自己对其进行哈希处理以获得我正在寻找的哈希值。
我希望使用 ipfs dag get QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u 会给我一个多重哈希,然后可以对其进行解码,但结果它返回了一些我不知道如何检查的其他数据哈希:
$ ipfs dag get QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u
$ {"data":"CAISDEhlbGxvIFdvcmxkChgM","links":[]}
关于如何从这里解码data 的任何想法?
更新
data是原始数据的Base64表示:https://github.com/ipfs/go-ipfs/issues/4115
【问题讨论】:
标签: ipfs