Skip to content

Instantly share code, notes, and snippets.

@HDegroote
Last active November 20, 2022 20:54
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HDegroote/8124a44e6b5f30c769231a68d1d4168d to your computer and use it in GitHub Desktop.
Save HDegroote/8124a44e6b5f30c769231a68d1d4168d to your computer and use it in GitHub Desktop.
Replicating hyperbees over hyperswarm
// Uses hypercore-next and hyperswarm V4
// Server
const Hyperswarm = require('hyperswarm')
const Hypercore = require("hypercore")
const Hyperbee = require("hyperbee")
const ram = require("random-access-memory")
async function runServer(){
const core = new Hypercore(ram)
const bee = new Hyperbee(core, {keyEncoding: "utf-8", valueEncoding: "json"})
await core.ready()
while (core.length < 25) {
await bee.put('block #' + core.length, "value " + core.length)
}
const swarm = new Hyperswarm()
swarm.on('connection', socket => core.replicate(socket))
swarm.join(core.discoveryKey, { server: true, client: false })
await swarm.flush()
console.log('Serving core:', core.key.toString('hex'))
}
runServer()
// Client
const Hyperswarm = require('hyperswarm')
const Hypercore = require("hypercore")
const Hyperbee = require("hyperbee")
const ram = require("random-access-memory")
const { once } = require("events");
const KEY = // Insert the key served by your server here (as string)
async function runClient(){
const core = new Hypercore(ram, Buffer.from(KEY, "hex"))
const bee = new Hyperbee(core, {keyEncoding: "utf-8", valueEncoding: "json"})
await core.ready()
const swarm = new Hyperswarm()
swarm.on('connection', socket => core.replicate(socket))
swarm.join(core.discoveryKey, { server: false, client: true })
console.log('Requesting core:', core.key.toString('hex'))
await swarm.flush()
// Ensure we are connected to at least 1 peer (else getting simply returns null)
if (bee.feed.writable || bee.feed.peers.length) {
console.log("Writable or already found peers for core");
} else {
console.log("Waiting for peers to connect");
const [peer] = await once(bee.feed, "peer-add");
console.log("Connected to peer", peer.remotePublicKey);
}
console.log((await bee.get("block #10")))
const readStream = await bee.createReadStream()
for await (const entry of readStream){
console.log(entry)
}
console.log("finished")
}
runClient()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment