diff --git a/batch_test.go b/batch_test.go index 28db71d..34c52ae 100644 --- a/batch_test.go +++ b/batch_test.go @@ -26,7 +26,7 @@ func (d *testDag) Get(ctx context.Context, cid cid.Cid) (Node, error) { if n, ok := d.nodes[cid.KeyString()]; ok { return n, nil } - return nil, ErrNotFound{cid} + return nil, ErrNotFound{Key: cid.KeyString()} } func (d *testDag) GetMany(ctx context.Context, cids []cid.Cid) <-chan *NodeOption { @@ -37,7 +37,7 @@ func (d *testDag) GetMany(ctx context.Context, cids []cid.Cid) <-chan *NodeOptio if n, ok := d.nodes[c.KeyString()]; ok { out <- &NodeOption{Node: n} } else { - out <- &NodeOption{Err: ErrNotFound{c}} + out <- &NodeOption{Err: ErrNotFound{Key: c.KeyString()}} } } close(out) diff --git a/coding_test.go b/coding_test.go index dad8498..135efdf 100644 --- a/coding_test.go +++ b/coding_test.go @@ -23,7 +23,7 @@ func TestDecode(t *testing.T) { id, err := cid.Prefix{ Version: 1, Codec: cid.Raw, - MhType: mh.ID, + MhType: mh.IDENTITY, MhLength: 0, }.Sum(nil) diff --git a/format_test.go b/format_test.go index a6f7df9..732d660 100644 --- a/format_test.go +++ b/format_test.go @@ -32,7 +32,7 @@ func (n *EmptyNode) Cid() cid.Cid { id, err := cid.Prefix{ Version: 1, Codec: cid.Raw, - MhType: mh.ID, + MhType: mh.IDENTITY, MhLength: 0, }.Sum(nil) diff --git a/go.mod b/go.mod index e131c85..a562229 100644 --- a/go.mod +++ b/go.mod @@ -2,21 +2,24 @@ module github.com/ipfs/go-ipld-format require ( github.com/ipfs/go-block-format v0.0.2 - github.com/ipfs/go-cid v0.0.2 - github.com/multiformats/go-multihash v0.0.1 + github.com/ipfs/go-cid v0.4.0 + github.com/ipld/go-ipld-prime v0.20.1-0.20230328042852-d5ef532e7f32 + github.com/multiformats/go-multihash v0.2.1 ) require ( - github.com/gxed/hashland/keccakpg v0.0.1 // indirect - github.com/gxed/hashland/murmur3 v0.0.1 // indirect github.com/ipfs/go-ipfs-util v0.0.1 // indirect - github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect - github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16 // indirect - github.com/mr-tron/base58 v1.1.0 // indirect + github.com/klauspost/cpuid/v2 v2.0.9 // indirect + github.com/minio/sha256-simd v1.0.0 // indirect + github.com/mr-tron/base58 v1.2.0 // indirect github.com/multiformats/go-base32 v0.0.3 // indirect - github.com/multiformats/go-multibase v0.0.1 // indirect - golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67 // indirect - golang.org/x/sys v0.0.0-20190219092855-153ac476189d // indirect + github.com/multiformats/go-base36 v0.1.0 // indirect + github.com/multiformats/go-multibase v0.0.3 // indirect + github.com/multiformats/go-varint v0.0.6 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + golang.org/x/crypto v0.1.0 // indirect + golang.org/x/sys v0.1.0 // indirect + lukechampine.com/blake3 v1.1.6 // indirect ) go 1.19 diff --git a/go.sum b/go.sum index 5d23940..9ded213 100644 --- a/go.sum +++ b/go.sum @@ -1,27 +1,43 @@ -github.com/gxed/hashland/keccakpg v0.0.1 h1:wrk3uMNaMxbXiHibbPO4S0ymqJMm41WiudyFSs7UnsU= github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1 h1:SheiaIt0sda5K+8FLz952/1iWS9zrnKsEJaOJu4ZbSc= github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= github.com/ipfs/go-block-format v0.0.2 h1:qPDvcP19izTjU8rgo6p7gTXZlkMkF5bz5G3fqIsSCPE= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.2 h1:tuuKaZPU1M6HcejsO3AcYWW8sZ8MTvyxfc4uqB4eFE8= -github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/ipfs/go-cid v0.4.0 h1:a4pdZq0sx6ZSxbCizebnKiMCx/xI/aBBFlB73IgH4rA= +github.com/ipfs/go-cid v0.4.0/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= github.com/ipfs/go-ipfs-util v0.0.1 h1:Wz9bL2wB2YBJqggkA4dD7oSmqB4cAnpNbGrlHJulv50= github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= +github.com/ipld/go-ipld-prime v0.20.1-0.20230328042852-d5ef532e7f32 h1:G27WaHJCyVFnCicciPXIIjBr2O92IphfnZLrsqWFZ20= +github.com/ipld/go-ipld-prime v0.20.1-0.20230328042852-d5ef532e7f32/go.mod h1:wmOtdy70ajP48iZITH8uLsGJVMqA4EJM61/bSfYYGhs= +github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16 h1:5W7KhL8HVF3XCFOweFD3BNESdnO8ewyYTFT2R+/b8FQ= github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/mr-tron/base58 v1.1.0 h1:Y51FGVJ91WBqCEabAi5OPUz38eAx8DakuAm5svLcsfQ= +github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= +github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-multibase v0.0.1 h1:PN9/v21eLywrFWdFNsFKaU04kLJzuYzmrJR+ubhT9qA= +github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= +github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multihash v0.0.1 h1:HHwN1K12I+XllBCrqKnhX949Orn4oawPkegHMu2vDqQ= +github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= +github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67 h1:ng3VDlRp5/DHpSWl02R4rM9I+8M2rhmsuLwAMmkLQWE= +github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108= +github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc= +github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= +github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d h1:Z0Ahzd7HltpJtjAHHxX8QFP3j1yYgiuvjbjRzDj/KH0= +golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +lukechampine.com/blake3 v1.1.6 h1:H3cROdztr7RCfoaTpGZFQsrqvweFLrqS73j7L7cmR5c= +lukechampine.com/blake3 v1.1.6/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= diff --git a/merkledag.go b/merkledag.go index 5b1a429..928c10c 100644 --- a/merkledag.go +++ b/merkledag.go @@ -4,53 +4,31 @@ import ( "context" cid "github.com/ipfs/go-cid" + "github.com/ipld/go-ipld-prime/storage" ) // ErrNotFound is used to signal when a Node could not be found. The specific // meaning will depend on the DAGService implementation, which may be trying // to read nodes locally but also, trying to find them remotely. // -// The Cid field can be filled in to provide additional context. -type ErrNotFound struct { - Cid cid.Cid -} - -// Error implements the error interface and returns a human-readable -// message for this error. -func (e ErrNotFound) Error() string { - if e.Cid == cid.Undef { - return "ipld: could not find node" - } - - return "ipld: could not find " + e.Cid.String() -} - -// Is allows to check whether any error is of this ErrNotFound type. -// Do not use this directly, but rather errors.Is(yourError, ErrNotFound). -// For maximum compatibility you should prefer IsNotFound() instead as it will -// also match other compatible NotFound error types. -func (e ErrNotFound) Is(err error) bool { - switch err.(type) { - case ErrNotFound: - return true - default: - return false - } -} - -// NotFound returns true. -func (e ErrNotFound) NotFound() bool { - return true -} +// Deprecated: use github.com/ipld/go-ipld-prime/storage#ErrNotFound instead. +type ErrNotFound = storage.ErrNotFound // IsNotFound returns true if the error is a ErrNotFound. As it uses a // feature-test, it is also compatible with other NotFound error types, // including github.com/ipld/go-ipld-prime/storage#ErrNotFound. +// +// errors.Is() should be preferred as the standard Go way to test for errors; +// however due to the move of the legacy ErrNotFound to +// github.com/ipld/go-ipld-prime/storage, it may not report correctly where +// older block storage packages emit the legacy ErrNotFound. The IsNotFound() +// function provides a maximally compatible matching function that should be +// able to determine whether an ErrNotFound, either new or legacy, exists within +// a wrapped error chain. +// +// Deprecated: use github.com/ipld/go-ipld-prime/storage#IsNotFound instead. func IsNotFound(err error) bool { - if nf, ok := err.(interface{ NotFound() bool }); ok { - return nf.NotFound() - } - return false + return storage.IsNotFound(err) } // Either a node or an error.