Этот вопрос похож на на , то есть о том, как вычисляется дайджест ha sh в формате MerkleDag (dag-pb
) на основе ProtoBuf. Так как ipfs dag
заменит ipfs object
, и CBOR будет поддерживаться, здесь я хочу спросить подобное о dag-cbor
. Я попытался найти ответ в документации IPFS, но не получил много информации.
Поэтому я сделал следующее.
$ echo '[0,1,2,3]' | ipfs dag put
Это дает CID bafyreidiu4acrauzpzhefghkkom6pbbsvw34o7kc2trpnqd7l62yrxrv2q
. В веб-интерфейсе IPFS CID разрешается как
bafyreidiu4acrauzpzhefghkkom6pbbsvw34o7kc2trpnqd7l62yrxrv2q
base32 - cidv1 - dag-cbor - sha2-256-256-68a7002882997e4e4298ea5399e78432adb7c77d42d4e2f6c07f5fb588de35d4
BASE - VERSION - CODEC - MULTIHASH
MULTIHASH
0x122068a7002882997e4e4298ea5399e78432
adb7c77d42d4e2f6c07f5fb588de35d4
HASH DIGEST
0x12 = sha2-256
0x20 = 256 bits
Я ожидаю, что [0,1,2,3]
сначала сериализуется CBOR как массив CBOR, а затем переваривается sha256. Поэтому я хочу воспроизвести дайджест ха sh (68a700288299...
). Поэтому я сделал следующее в ответе Python:
>>> from cbor2 import dumps
>>> from hashlib import sha256
>>> from binascii import hexlify
>>> hexlify(sha256(dumps([0,1,2,3])).digest())
b'e3fbd65c4c3f7fdba7b8ae0709da781c3637b13f4a4b920db90d2f9b23d412ff'
Так что ha sh не может сравниться. Но если я сделаю то же самое для простого строкового объекта, например,
$ echo '"Hello World"' | ipfs dag put
bafyreidfq7gnjnpi7hllpwowrphojoy6hgdgrsgitbnbpty6f2yirqhkom
, дайджест ha sh, в этом случае, может быть успешно воспроизведен.
Так почему это не так? не работает для объекта массива (объекты карты также не работают)? Что еще скрывается?