hypercore 10.0.0-alpha.15 → 10.0.0-alpha.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -14,7 +14,7 @@ const Replicator = require('./lib/replicator')
14
14
  const Extensions = require('./lib/extensions')
15
15
  const Core = require('./lib/core')
16
16
  const BlockEncryption = require('./lib/block-encryption')
17
- const { ReadStream } = require('./lib/streams')
17
+ const { ReadStream, WriteStream } = require('./lib/streams')
18
18
 
19
19
  const promises = Symbol.for('hypercore.promises')
20
20
  const inspect = Symbol.for('nodejs.util.inspect.custom')
@@ -428,6 +428,10 @@ module.exports = class Hypercore extends EventEmitter {
428
428
  return new ReadStream(this, opts)
429
429
  }
430
430
 
431
+ createWriteStream (opts) {
432
+ return new WriteStream(this, opts)
433
+ }
434
+
431
435
  download (range) {
432
436
  const linear = !!(range && range.linear)
433
437
 
package/lib/core.js CHANGED
@@ -1,4 +1,5 @@
1
1
  const hypercoreCrypto = require('hypercore-crypto')
2
+ const b4a = require('b4a')
2
3
  const Oplog = require('./oplog')
3
4
  const Mutex = require('./mutex')
4
5
  const MerkleTree = require('./merkle-tree')
@@ -90,7 +91,7 @@ module.exports = class Core {
90
91
  await oplog.flush(header)
91
92
  }
92
93
 
93
- if (opts.keyPair && !header.signer.publicKey.equals(opts.keyPair.publicKey)) {
94
+ if (opts.keyPair && !b4a.equals(header.signer.publicKey, opts.keyPair.publicKey)) {
94
95
  throw new Error('Another hypercore is stored here')
95
96
  }
96
97
 
@@ -176,7 +177,7 @@ module.exports = class Core {
176
177
 
177
178
  for (const u of this.header.userData) {
178
179
  if (u.key !== key) continue
179
- if (value && u.value.equals(value)) return
180
+ if (value && b4a.equals(u.value, value)) return
180
181
  empty = false
181
182
  break
182
183
  }
@@ -215,7 +215,7 @@ class ReorgBatch extends MerkleTreeBatch {
215
215
  const nodes = []
216
216
  const root = verifyBlock(proof, this.tree.crypto, nodes)
217
217
 
218
- if (root === null || !root.hash.equals(this.diff.hash)) return false
218
+ if (root === null || !b4a.equals(root.hash, this.diff.hash)) return false
219
219
 
220
220
  this.nodes.push(...nodes)
221
221
  return this._update(nodes)
@@ -233,7 +233,7 @@ class ReorgBatch extends MerkleTreeBatch {
233
233
  if (!left) break
234
234
 
235
235
  const existing = await this.tree.get(left.index, false)
236
- if (!existing || !existing.hash.equals(left.hash)) {
236
+ if (!existing || !b4a.equals(existing.hash, left.hash)) {
237
237
  diff = left
238
238
  } else {
239
239
  diff = n.get(ite.sibling())
@@ -355,7 +355,7 @@ module.exports = class MerkleTree {
355
355
  }
356
356
 
357
357
  addNode (node) {
358
- if (node.size === 0 && node.hash.equals(BLANK_HASH)) node = blankNode(node.index)
358
+ if (node.size === 0 && b4a.equals(node.hash, BLANK_HASH)) node = blankNode(node.index)
359
359
  this.unflushed.set(node.index, node)
360
360
  }
361
361
 
@@ -379,6 +379,17 @@ module.exports = class MerkleTree {
379
379
  return this.signature !== null && this.crypto.verify(this.signable(), this.signature, key)
380
380
  }
381
381
 
382
+ getRoots (length) {
383
+ const indexes = flat.fullRoots(2 * length)
384
+ const roots = new Array(indexes.length)
385
+
386
+ for (let i = 0; i < indexes.length; i++) {
387
+ roots[i] = this.get(indexes[i], true)
388
+ }
389
+
390
+ return Promise.all(roots)
391
+ }
392
+
382
393
  get (index, error = true) {
383
394
  let node = this.unflushed.get(index)
384
395
 
@@ -534,7 +545,7 @@ module.exports = class MerkleTree {
534
545
 
535
546
  for (const root of batch.roots) {
536
547
  const existing = await this.get(root.index, false)
537
- if (existing && existing.hash.equals(root.hash)) continue
548
+ if (existing && b4a.equals(existing.hash, root.hash)) continue
538
549
  batch._updateDiffRoot(root)
539
550
  break
540
551
  }
@@ -562,7 +573,7 @@ module.exports = class MerkleTree {
562
573
 
563
574
  if (unverified) {
564
575
  const verified = await this.get(unverified.index)
565
- if (!verified.hash.equals(unverified.hash)) {
576
+ if (!b4a.equals(verified.hash, unverified.hash)) {
566
577
  throw new Error('Invalid checksum at node ' + unverified.index)
567
578
  }
568
579
  }
@@ -707,7 +718,7 @@ module.exports = class MerkleTree {
707
718
  await new Promise((resolve, reject) => {
708
719
  storage.read(0, OLD_TREE.length, (err, buf) => {
709
720
  if (err) return resolve()
710
- if (buf.equals(OLD_TREE)) return reject(new Error('Storage contains an incompatible merkle tree'))
721
+ if (b4a.equals(buf, OLD_TREE)) return reject(new Error('Storage contains an incompatible merkle tree'))
711
722
  resolve()
712
723
  })
713
724
  })
package/lib/streams.js CHANGED
@@ -1,4 +1,4 @@
1
- const { Readable } = require('streamx')
1
+ const { Writable, Readable } = require('streamx')
2
2
 
3
3
  class ReadStream extends Readable {
4
4
  constructor (core, opts = {}) {
@@ -37,3 +37,20 @@ class ReadStream extends Readable {
37
37
  }
38
38
 
39
39
  exports.ReadStream = ReadStream
40
+
41
+ class WriteStream extends Writable {
42
+ constructor (core) {
43
+ super()
44
+ this.core = core
45
+ }
46
+
47
+ _writev (batch, cb) {
48
+ this._writevP(batch).then(cb, cb)
49
+ }
50
+
51
+ async _writevP (batch) {
52
+ await this.core.append(batch)
53
+ }
54
+ }
55
+
56
+ exports.WriteStream = WriteStream
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hypercore",
3
- "version": "10.0.0-alpha.15",
3
+ "version": "10.0.0-alpha.16",
4
4
  "description": "Hypercore 10",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -35,7 +35,7 @@
35
35
  "@hyperswarm/secret-stream": "^5.0.0",
36
36
  "b4a": "^1.1.0",
37
37
  "big-sparse-array": "^1.0.2",
38
- "codecs": "^2.2.0",
38
+ "codecs": "^3.0.0",
39
39
  "compact-encoding": "^2.5.0",
40
40
  "crc32-universal": "^1.0.1",
41
41
  "events": "^3.3.0",