我正在尝试创建一个兼容IPFS的mutihash,但它不匹配.我在这里问,因为我还没有找到一个从散列到最终结果的例子.
echo -n multihash > multihash.txt
ipfs add multihash.txt
added QmZLXzjiZU39eN8QirMZ2CGXjMLiuEkQriRu7a7FeSB4fg multihash.txt
sha256sum multihash.txt
9cbc07c3f991725836a3aa2a581ca2029198aa420b9d99bc0e131d9f3e2cbe47 multihash.txt
node
> var bs58=require('bs58')
bs58.encode(new Buffer('9cbc07c3f991725836a3aa2a581ca2029198aa420b9d99bc0e131d9f3e2cbe47','hex'))
'BYptxaTgpcBrqZx9tghNCWFfUuYBcGfLydEvDjXqBV7k'
> var mh=require('multihashes')
mh.toB58String(mh.encode(new Buffer('9cbc07c3f991725836a3aa2a581ca2029198aa420b9d99bc0e131d9f3e2cbe47','hex'), 'sha2-256'))
'QmYtUc4iTCbbfVSDNKvtQqrfyezPPnFvE33wFmutw9PBBk'
Run Code Online (Sandbox Code Playgroud)
目的是QmZLXzjiZU39eN8QirMZ2CGXjMLiuEkQriRu7a7FeSB4fg使用multihashes包重新创建IPFS路径.
我可以创建相同的哈希QmYtUc...9PBBk,如下例所示:https: //github.com/multiformats/multihash#example
假设我要像这样向IPFS添加数据:
$ echo Hello World | ipfs add
Run Code Online (Sandbox Code Playgroud)
这将给我QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u-一个CID,它是Base58编码的Multihash。
将其转换为Base16,告诉我IPFS添加的哈希摘要是SHA2-256哈希:
12 - 20 - 74410577111096cd817a3faed78630f2245636beded412d3b212a2e09ba593ca
<hash-type> - <hash-length> - <hash-digest>
Run Code Online (Sandbox Code Playgroud)
我知道IPFS不仅会散列数据,而且实际上会先将其序列化为Unixfs protobuf,然后再将其放入dag中。
我想揭开神秘的面纱,但该如何解决这个问题,74410577111096cd817a3faed78630f2245636beded412d3b212a2e09ba593ca但我不太确定如何掌握已创建的数据,该数据将Unixfs protobuf与数据一起保存。
例如,我可以将序列化的原始数据写入磁盘并使用protobuf解码器进行检查:
$ ipfs block get QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u > /tmp/block.raw
$ protoc --decode_raw < /tmp/block.raw
Run Code Online (Sandbox Code Playgroud)
这将使我获得可读格式的序列化数据:
1 {
1: 2
2: "Hello World\n"
3: 12
}
Run Code Online (Sandbox Code Playgroud)
但是,通过SHA-256进行管道传递仍然会给我带来不同的哈希值,这是有道理的,因为IPFS会将protobuf置于dag中并对其进行多次哈希处理。
$ protoc --decode_raw < /tmp/block.raw | shasum -a 256
Run Code Online (Sandbox Code Playgroud)
因此,我决定弄清楚如何掌握该dag节点,自己对其进行哈希处理,以获取所需的哈希值。
我希望使用它ipfs dag get QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u可以给我提供一个多哈希,然后可以对其进行解码,但是事实证明,它会返回一些我不知道如何检查的其他数据哈希:
$ ipfs dag get QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u
$ {"data":"CAISDEhlbGxvIFdvcmxkChgM","links":[]}
Run Code Online (Sandbox Code Playgroud)
关于如何data从此处解码的任何想法?
更新 …
ipfs ×2