Last active
July 20, 2022 18:52
-
-
Save HDegroote/cf6d3c09a1f07e8dd7b56a8f00168bde to your computer and use it in GitHub Desktop.
Illustration of a hyperbee-encoding bug in the browser
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// See https://github.com/hypercore-protocol/hyperbee/issues/59 | |
// The server code creates a dht-relay and shares a hyperbee | |
// The client code loads a hyperbee through the relay | |
// The client code can be executed both from the browser and form Node | |
// SERVER (see below for CLIENT code) | |
const DHT = require("@hyperswarm/dht"); | |
const { relay } = require("@hyperswarm/dht-relay"); | |
const { WebSocketServer } = require("ws"); | |
const Hyperswarm = require("hyperswarm"); | |
const Hypercore = require("hypercore"); | |
const Hyperbee = require("hyperbee"); | |
const Stream = require("@hyperswarm/dht-relay/ws"); | |
async function runServer() { | |
const port = 8080; | |
const server = new WebSocketServer({ port: port }); | |
const dht = new DHT(); | |
const swarm = new Hyperswarm(dht); | |
server.on("connection", (socket) => { | |
console.log("Received connection -- relaying"); | |
relay(dht, new Stream(false, socket)); | |
socket.send("Hello from the server over a ws, you are relayed"); | |
}); | |
console.log(`Running websocket server at ${server.address()}`); | |
const core = new Hypercore("./myBee"); | |
const bee = new Hyperbee(core, { | |
keyEncoding: "utf-8", | |
valueEncoding: "json", | |
}); | |
await core.ready(); | |
while (core.length < 100) { | |
await bee.put("block #" + core.length, "value " + core.length); | |
} | |
swarm.on("connection", (socket) => core.replicate(socket)); | |
swarm.join(core.discoveryKey, { server: true, client: false }); | |
console.log("Key: ", core.key.toString("hex")); | |
console.log(`Websocket server listening at port ${port}`); | |
} | |
runServer(); | |
// CLIENT (don't forget to fill in the key hosted by your server) | |
const DHT = require("@hyperswarm/dht-relay"); | |
const Stream = require("@hyperswarm/dht-relay/ws"); | |
const Hypercore = require("hypercore"); | |
const ram = require("random-access-memory"); | |
const Hyperbee = require("hyperbee"); | |
const Hyperswarm = require("hyperswarm"); | |
// Comment out the Websocket import to run from the browser, | |
// which has built-in websocket support) | |
const { WebSocket } = require("ws"); | |
const key = // TODO: fill in your key | |
async function runClient() { | |
const socket = new WebSocket("ws://localhost:8080"); | |
const stream = new Stream(true, socket); | |
const dht = new DHT(stream); | |
const core = new Hypercore(ram, key); | |
await core.ready(); | |
const bee = new Hyperbee(core, { | |
keyEncoding: "utf-8", | |
valueEncoding: "json", | |
}); | |
const swarm = new Hyperswarm({ dht: dht }); | |
swarm.on("connection", (socket) => core.replicate(socket)); | |
console.log(`Created swarm--joining on key ${key}`); | |
swarm.join(core.discoveryKey, { server: false, client: true }); | |
await swarm.flush(); | |
console.log("joined swarm -- requesting block (can take up to ~30s)"); | |
const block0 = await bee.get("block #0"); | |
console.log("block 0: ", block0); | |
} | |
runClient(); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment