From cd6d2d24f475dfac5001b46cde23c52cd15a8175 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Tue, 29 Nov 2016 10:15:40 -0800 Subject: [PATCH] merkledag: retain cid types when roundtripping through a ProtoNode License: MIT Signed-off-by: Jeromy --- merkledag/coding.go | 15 +++++++++++++-- merkledag/merkledag.go | 1 + merkledag/node.go | 3 +++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/merkledag/coding.go b/merkledag/coding.go index 3b43e4c95..2bd88265b 100644 --- a/merkledag/coding.go +++ b/merkledag/coding.go @@ -7,7 +7,7 @@ import ( pb "github.com/ipfs/go-ipfs/merkledag/pb" node "gx/ipfs/QmRSU5EqqWVZSNdbU51yXmVoF1uNw3JgTNB6RaiL7DZM16/go-ipld-node" - u "gx/ipfs/Qmb912gdngC1UWwTkhuW8knyRbcWeu5kqkxBpveLmW8bSr/go-ipfs-util" + mh "gx/ipfs/QmYDds3421prZgqKbLpEK7T9Aa2eVdQ7o3YarX1LVLdP2J/go-multihash" cid "gx/ipfs/QmcTcsTvfaeEBRFo1TkFgT8sRmgi1n1LTZpecfVP8fzpGD/go-cid" ) @@ -84,7 +84,18 @@ func (n *ProtoNode) EncodeProtobuf(force bool) ([]byte, error) { } if n.cached == nil { - n.cached = cid.NewCidV0(u.Hash(n.encoded)) + if n.prefix.MhType == 0 { // unset + n.prefix.Codec = cid.DagProtobuf + n.prefix.MhLength = -1 + n.prefix.MhType = mh.SHA2_256 + n.prefix.Version = 0 + } + c, err := n.prefix.Sum(n.encoded) + if err != nil { + return nil, err + } + + n.cached = c } return n.encoded, nil diff --git a/merkledag/merkledag.go b/merkledag/merkledag.go index 10ff5fb58..67169ed05 100644 --- a/merkledag/merkledag.go +++ b/merkledag/merkledag.go @@ -103,6 +103,7 @@ func decodeBlock(b blocks.Block) (node.Node, error) { } decnd.cached = b.Cid() + decnd.prefix = b.Cid().Prefix() return decnd, nil case cid.Raw: return NewRawNode(b.RawData()), nil diff --git a/merkledag/node.go b/merkledag/node.go index 16d6941a2..6c89947ab 100644 --- a/merkledag/node.go +++ b/merkledag/node.go @@ -22,6 +22,9 @@ type ProtoNode struct { encoded []byte cached *cid.Cid + + // prefix specifies cid version and hashing function + prefix cid.Prefix } type LinkSlice []*node.Link