Notes for downstream developers who are upgrading their modules to new, breaking versions of Hypercore.
sparse
is no longer an option when creating aHypercore
instance. All hypercores are sparse.encryptionKey
will deprecated in favor of theencryption
option when creating aHypercore
instance.- Storage is now auto migrated to
hypercore-storage
if a pathstorage
argument was used.
If you are getting aTypeError: db.columnFamily is not a function
error, you are likely trying to use a legacyrandom-access-storage
instance such asrandom-access-memory
orrandom-access-file
. core.indexedLength
is nowcore.signedLength
- All number encodings are now LE
- Introduces an "oplog" to atomically track changes locally
- Updated merkle format that only requires a single signature (stored in the oplog)
- The format of signatures has been changed. This is backwards-compatible (v9 can read v8 signatures), but forward-incompatible (v8 cannot read v9 signatures). If a v8 peer replicates with a v9 peer, it will emit a "REMOTE SIGNATURE INVALID" error on the replication stream.
- The encryption (NOISE) handshake has been changed in an backwards- and forwards-incompatible way. v8 peers can not handshake with v9 peers, and vice-versa. A NOISE-related error is emitted on the replication stream.
- There is no way (yet) to detect whether a peer is running an incompatible version of hypercore at the replication level. One workaround for downstream developers is to include their own application-level handshake before piping to the replication stream, to communicate a "app protocol version" (maybe "v8" and "v9") and abort the connection if the peer is running an incompatible version.