From 72bf368104c2e41be6a0447b3d3922ad28f147bc Mon Sep 17 00:00:00 2001 From: Richard Schneider Date: Sun, 24 Jun 2018 13:27:55 +1200 Subject: [PATCH 1/5] fix(put): pass CID options to resolver --- README.md | 3 ++- src/index.js | 6 +----- test/ipld-dag-cbor.js | 30 +++++++++++++++++++++++++----- test/ipld-dag-pb.js | 31 +++++++++++++++++++++++++------ 4 files changed, 53 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 020e586..2ee5d01 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,8 @@ const Resolver = new Resolver() `options` is an object that must contain one of the following combinations: - `cid` - the CID of the node -- `hashAlg` and `format` - the hashAlg and the format that should be used to create the CID of the node +- `[hashAlg]`, `[version]` and `format` - the hashAlg, version and the format that should be used to create the CID of the node. The +`hashAlg` and `version` defaults to the default values for the `format`. `callback` is a function that should have the signature as following: `function (err, cid) {}`, where `err` is an Error object in case of error and `cid` is the cid of the stored object. diff --git a/src/index.js b/src/index.js index ea02f48..95b863c 100644 --- a/src/index.js +++ b/src/index.js @@ -228,15 +228,11 @@ class IPLDResolver { return this._put(options.cid, node, callback) } - options.hashAlg = options.hashAlg || 'sha2-256' const r = this.resolvers[options.format] if (!r) { return callback(new Error('No resolver found for codec "' + options.format + '"')) } - // TODO add support for different hash funcs in the utils of - // each format (just really needed for CBOR for now, really - // r.util.cid(node1, hashAlg, (err, cid) => { - r.util.cid(node, (err, cid) => { + r.util.cid(node, options, (err, cid) => { if (err) { return callback(err) } diff --git a/test/ipld-dag-cbor.js b/test/ipld-dag-cbor.js index 4b488fd..f30be71 100644 --- a/test/ipld-dag-cbor.js +++ b/test/ipld-dag-cbor.js @@ -10,6 +10,7 @@ const dagCBOR = require('ipld-dag-cbor') const series = require('async/series') const each = require('async/each') const pull = require('pull-stream') +const multihash = require('multihashes') const IPLDResolver = require('../src') @@ -107,11 +108,30 @@ module.exports = (repo) => { resolver.put(node1, { cid: cid1 }, done) }) - it('resolver.put with hashAlg + format', (done) => { - resolver.put(node1, { - format: 'dag-cbor', - hashAlg: 'sha2-256' - }, done) + it('resolver.put with format', (done) => { + resolver.put(node1, { format: 'dag-cbor' }, (err, cid) => { + expect(err).to.not.exist() + expect(cid).to.exist() + expect(cid.version).to.equal(1) + expect(cid.codec).to.equal('dag-cbor') + expect(cid.multihash).to.exist() + const mh = multihash.decode(cid.multihash) + expect(mh.name).to.equal('sha2-256') + done() + }) + }) + + it('resolver.put with format + hashAlg', (done) => { + resolver.put(node1, { format: 'dag-cbor', hashAlg: 'sha2-512' }, (err, cid) => { + expect(err).to.not.exist() + expect(cid).to.exist() + expect(cid.version).to.equal(1) + expect(cid.codec).to.equal('dag-cbor') + expect(cid.multihash).to.exist() + const mh = multihash.decode(cid.multihash) + expect(mh.name).to.equal('sha2-512') + done() + }) }) it('resolver.get just CID', (done) => { diff --git a/test/ipld-dag-pb.js b/test/ipld-dag-pb.js index 763ead1..2dacec6 100644 --- a/test/ipld-dag-pb.js +++ b/test/ipld-dag-pb.js @@ -10,7 +10,7 @@ const dagPB = require('ipld-dag-pb') const series = require('async/series') const each = require('async/each') const pull = require('pull-stream') - +const multihash = require('multihashes') const IPLDResolver = require('../src') module.exports = (repo) => { @@ -151,11 +151,30 @@ module.exports = (repo) => { resolver.put(node1, { cid: cid1 }, done) }) - it('resolver.put with hashAlg + format', (done) => { - resolver.put(node1, { - format: 'dag-pb', - hashAlg: 'sha2-256' - }, done) + it('resolver.put with format', (done) => { + resolver.put(node1, { format: 'dag-pb' }, (err, cid) => { + expect(err).to.not.exist() + expect(cid).to.exist() + expect(cid.version).to.equal(0) + expect(cid.codec).to.equal('dag-pb') + expect(cid.multihash).to.exist() + const mh = multihash.decode(cid.multihash) + expect(mh.name).to.equal('sha2-256') + done() + }) + }) + + it('resolver.put with format + hashAlg', (done) => { + resolver.put(node1, { format: 'dag-pb', hashAlg: 'sha2-512' }, (err, cid) => { + expect(err).to.not.exist() + expect(cid).to.exist() + expect(cid.version).to.equal(1) + expect(cid.codec).to.equal('dag-pb') + expect(cid.multihash).to.exist() + const mh = multihash.decode(cid.multihash) + expect(mh.name).to.equal('sha2-512') + done() + }) }) it('resolver.get just CID', (done) => { From 0a5c55a5828b47c09b48030f762033701401321c Mon Sep 17 00:00:00 2001 From: Richard Schneider Date: Sat, 30 Jun 2018 11:22:23 +1200 Subject: [PATCH 2/5] test: better tests and update dependencies --- package.json | 20 ++++++++++---------- test/ipld-bitcoin.js | 26 ++++++++++++++++++++++++++ test/ipld-dag-cbor.js | 4 ++-- test/ipld-dag-pb.js | 4 ++-- test/ipld-git.js | 27 +++++++++++++++++++++++++++ test/ipld-zcash.js | 26 ++++++++++++++++++++++++++ 6 files changed, 93 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index bdc86f0..d1c6120 100644 --- a/package.json +++ b/package.json @@ -33,15 +33,15 @@ "homepage": "https://github.com/ipld/js-ipld#readme", "license": "MIT", "devDependencies": { - "aegir": "^13.1.0", + "aegir": "^14.0.0", "chai": "^4.1.2", "dirty-chai": "^2.0.1", "eth-hash-to-cid": "~0.1.1", - "ethereumjs-block": "^1.7.1", + "ethereumjs-block": "^2.0.0", "lodash": "^4.17.10", "ncp": "^2.0.0", "rimraf": "^2.6.2", - "rlp": "^2.0.0" + "rlp": "^2.1.0" }, "dependencies": { "async": "^2.6.1", @@ -49,14 +49,14 @@ "interface-datastore": "~0.4.2", "ipfs-block": "~0.7.1", "ipfs-block-service": "~0.14.0", - "ipfs-repo": "~0.22.0", - "ipld-bitcoin": "~0.1.5", - "ipld-dag-cbor": "~0.12.0", - "ipld-dag-pb": "~0.14.4", + "ipfs-repo": "~0.22.1", + "ipld-bitcoin": "~0.1.6", + "ipld-dag-cbor": "~0.12.1", + "ipld-dag-pb": "~0.14.5", "ipld-ethereum": "^2.0.0", - "ipld-git": "~0.2.0", - "ipld-raw": "^2.0.0", - "ipld-zcash": "~0.1.3", + "ipld-git": "~0.2.1", + "ipld-raw": "^2.0.1", + "ipld-zcash": "~0.1.4", "is-ipfs": "~0.3.2", "lodash.flatten": "^4.4.0", "lodash.includes": "^4.3.0", diff --git a/test/ipld-bitcoin.js b/test/ipld-bitcoin.js index d382cb0..1ecd3ed 100644 --- a/test/ipld-bitcoin.js +++ b/test/ipld-bitcoin.js @@ -121,6 +121,32 @@ module.exports = (repo) => { resolver.put(node1, { cid: cid1 }, done) }) + it('resolver.put with format', (done) => { + resolver.put(node1, { format: 'bitcoin-block' }, (err, cid) => { + expect(err).to.not.exist() + expect(cid).to.exist() + expect(cid.version).to.equal(1) + expect(cid.codec).to.equal('bitcoin-block') + expect(cid.multihash).to.exist() + const mh = multihash.decode(cid.multihash) + expect(mh.name).to.equal('dbl-sha2-256') + done() + }) + }) + + it('resolver.put with format + hashAlg', (done) => { + resolver.put(node1, { format: 'bitcoin-block', hashAlg: 'sha3-512' }, (err, cid) => { + expect(err).to.not.exist() + expect(cid).to.exist() + expect(cid.version).to.equal(1) + expect(cid.codec).to.equal('bitcoin-block') + expect(cid.multihash).to.exist() + const mh = multihash.decode(cid.multihash) + expect(mh.name).to.equal('sha3-512') + done() + }) + }) + it('root path (same as get)', (done) => { resolver.get(cid1, '/', (err, result) => { expect(err).to.not.exist() diff --git a/test/ipld-dag-cbor.js b/test/ipld-dag-cbor.js index f30be71..f9bd65a 100644 --- a/test/ipld-dag-cbor.js +++ b/test/ipld-dag-cbor.js @@ -122,14 +122,14 @@ module.exports = (repo) => { }) it('resolver.put with format + hashAlg', (done) => { - resolver.put(node1, { format: 'dag-cbor', hashAlg: 'sha2-512' }, (err, cid) => { + resolver.put(node1, { format: 'dag-cbor', hashAlg: 'sha3-512' }, (err, cid) => { expect(err).to.not.exist() expect(cid).to.exist() expect(cid.version).to.equal(1) expect(cid.codec).to.equal('dag-cbor') expect(cid.multihash).to.exist() const mh = multihash.decode(cid.multihash) - expect(mh.name).to.equal('sha2-512') + expect(mh.name).to.equal('sha3-512') done() }) }) diff --git a/test/ipld-dag-pb.js b/test/ipld-dag-pb.js index 2dacec6..69935e4 100644 --- a/test/ipld-dag-pb.js +++ b/test/ipld-dag-pb.js @@ -165,14 +165,14 @@ module.exports = (repo) => { }) it('resolver.put with format + hashAlg', (done) => { - resolver.put(node1, { format: 'dag-pb', hashAlg: 'sha2-512' }, (err, cid) => { + resolver.put(node1, { format: 'dag-pb', hashAlg: 'sha3-512' }, (err, cid) => { expect(err).to.not.exist() expect(cid).to.exist() expect(cid.version).to.equal(1) expect(cid.codec).to.equal('dag-pb') expect(cid.multihash).to.exist() const mh = multihash.decode(cid.multihash) - expect(mh.name).to.equal('sha2-512') + expect(mh.name).to.equal('sha3-512') done() }) }) diff --git a/test/ipld-git.js b/test/ipld-git.js index 47df288..dd21305 100644 --- a/test/ipld-git.js +++ b/test/ipld-git.js @@ -7,6 +7,7 @@ const expect = chai.expect chai.use(dirtyChai) const BlockService = require('ipfs-block-service') const ipldGit = require('ipld-git') +const multihash = require('multihashes') const series = require('async/series') const each = require('async/each') const pull = require('pull-stream') @@ -175,6 +176,32 @@ module.exports = (repo) => { resolver.put(blobNode, { cid: blobCid }, done) }) + it('resolver.put with format', (done) => { + resolver.put(blobNode, { format: 'git-raw' }, (err, cid) => { + expect(err).to.not.exist() + expect(cid).to.exist() + expect(cid.version).to.equal(1) + expect(cid.codec).to.equal('git-raw') + expect(cid.multihash).to.exist() + const mh = multihash.decode(cid.multihash) + expect(mh.name).to.equal('sha1') + done() + }) + }) + + it('resolver.put with format + hashAlg', (done) => { + resolver.put(blobNode, { format: 'git-raw', hashAlg: 'sha3-512' }, (err, cid) => { + expect(err).to.not.exist() + expect(cid).to.exist() + expect(cid.version).to.equal(1) + expect(cid.codec).to.equal('git-raw') + expect(cid.multihash).to.exist() + const mh = multihash.decode(cid.multihash) + expect(mh.name).to.equal('sha3-512') + done() + }) + }) + it('resolver.get root path', (done) => { resolver.get(blobCid, '/', (err, result) => { expect(err).to.not.exist() diff --git a/test/ipld-zcash.js b/test/ipld-zcash.js index d33c9d5..83774b9 100644 --- a/test/ipld-zcash.js +++ b/test/ipld-zcash.js @@ -126,6 +126,32 @@ module.exports = (repo) => { resolver.put(node1, { cid: cid1 }, done) }) + it('resolver.put with format', (done) => { + resolver.put(node1, { format: 'zcash-block' }, (err, cid) => { + expect(err).to.not.exist() + expect(cid).to.exist() + expect(cid.version).to.equal(1) + expect(cid.codec).to.equal('zcash-block') + expect(cid.multihash).to.exist() + const mh = multihash.decode(cid.multihash) + expect(mh.name).to.equal('dbl-sha2-256') + done() + }) + }) + + it('resolver.put with format + hashAlg', (done) => { + resolver.put(node1, { format: 'zcash-block', hashAlg: 'sha3-512' }, (err, cid) => { + expect(err).to.not.exist() + expect(cid).to.exist() + expect(cid.version).to.equal(1) + expect(cid.codec).to.equal('zcash-block') + expect(cid.multihash).to.exist() + const mh = multihash.decode(cid.multihash) + expect(mh.name).to.equal('sha3-512') + done() + }) + }) + it('root path (same as get)', (done) => { resolver.get(cid1, '/', (err, result) => { expect(err).to.not.exist() From 121282467aa968bfd28ae22a180379574bc02675 Mon Sep 17 00:00:00 2001 From: Richard Schneider Date: Sat, 30 Jun 2018 11:28:49 +1200 Subject: [PATCH 3/5] chore: linting --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d1c6120..7e52bbb 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "lodash.includes": "^4.3.0", "memdown": "^3.0.0", "multihashes": "~0.4.13", - "pull-defer": "^0.2.2", + "pull-defer": "~0.2.2", "pull-sort": "^1.0.1", "pull-stream": "^3.6.8", "pull-traverse": "^1.0.3" From 2f041a63c1adde5a7b8cc5b558fb213d4e112550 Mon Sep 17 00:00:00 2001 From: Richard Schneider Date: Fri, 13 Jul 2018 21:49:41 +1200 Subject: [PATCH 4/5] chore: update dependency on ipld-ethereum --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7e52bbb..740cc17 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "ipld-bitcoin": "~0.1.6", "ipld-dag-cbor": "~0.12.1", "ipld-dag-pb": "~0.14.5", - "ipld-ethereum": "^2.0.0", + "ipld-ethereum": "^2.0.1", "ipld-git": "~0.2.1", "ipld-raw": "^2.0.1", "ipld-zcash": "~0.1.4", From 39b79d4f144284ef29c6e5403395ab56ede9fd07 Mon Sep 17 00:00:00 2001 From: Volker Mische Date: Tue, 17 Jul 2018 12:02:34 +0200 Subject: [PATCH 5/5] test: add additional eth-block put() tests Add tests for passing in `format` and `hashAlg` options into `put()` to the eth-block format. --- test/ipld-eth-block.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/test/ipld-eth-block.js b/test/ipld-eth-block.js index 16f9f2f..3873790 100644 --- a/test/ipld-eth-block.js +++ b/test/ipld-eth-block.js @@ -8,6 +8,7 @@ chai.use(dirtyChai) const BlockService = require('ipfs-block-service') const ipldEthBlock = require('ipld-ethereum').ethBlock const EthBlockHeader = require('ethereumjs-block/header') +const multihash = require('multihashes') const series = require('async/series') const each = require('async/each') const pull = require('pull-stream') @@ -110,6 +111,32 @@ module.exports = (repo) => { resolver.put(node1, { cid: cid1 }, done) }) + it('resolver.put with format', (done) => { + resolver.put(node1, { format: 'eth-block' }, (err, cid) => { + expect(err).to.not.exist() + expect(cid).to.exist() + expect(cid.version).to.equal(1) + expect(cid.codec).to.equal('eth-block') + expect(cid.multihash).to.exist() + const mh = multihash.decode(cid.multihash) + expect(mh.name).to.equal('keccak-256') + done() + }) + }) + + it('resolver.put with format + hashAlg', (done) => { + resolver.put(node1, { format: 'eth-block', hashAlg: 'keccak-512' }, (err, cid) => { + expect(err).to.not.exist() + expect(cid).to.exist() + expect(cid.version).to.equal(1) + expect(cid.codec).to.equal('eth-block') + expect(cid.multihash).to.exist() + const mh = multihash.decode(cid.multihash) + expect(mh.name).to.equal('keccak-512') + done() + }) + }) + it('root path (same as get)', (done) => { resolver.get(cid1, '/', (err, result) => { expect(err).to.not.exist()