kademlia-dhtl/index.js

53 lines
1.6 KiB
JavaScript

import { createLibp2p } from 'libp2p'
import { generateKeyPairFromSeed } from '@libp2p/crypto/keys'
import { webSockets } from '@libp2p/websockets'
import { circuitRelayServer, circuitRelayTransport } from '@libp2p/circuit-relay-v2'
import { noise } from '@chainsafe/libp2p-noise'
import { yamux } from '@chainsafe/libp2p-yamux'
import { identify } from '@libp2p/identify'
import { createHash } from 'crypto';
const publicMultiaddr = process.env.PUBLIC_MULTIADDR;
const seed = process.env.SEED;
if (typeof publicMultiaddr !== 'string' || !publicMultiaddr.length) {
console.log('no PUBLIC_MULTIADDR or invalid PUBLIC_MULTIADDR specified');
process.exit(1);
}
if (typeof seed !== 'string' || !seed.length) {
console.log('no SEED or invalid SEED specified');
process.exit(1);
}
const seedHash = createHash('sha512').update(seed).digest('base64');
const key = await generateKeyPairFromSeed('Ed25519', new TextEncoder().encode(seedHash).slice(0, 32));
const relay = await createLibp2p({
privateKey: key,
transports: [
webSockets(),
circuitRelayTransport(),
],
addresses: {
listen: [`/ip4/0.0.0.0/tcp/4000/ws`],
announce: [publicMultiaddr],
},
connectionEncrypters: [noise()],
streamMuxers: [yamux()],
services: {
identify: identify(),
relay: circuitRelayServer({
reservations: 1024,
reservationTTL: 15 * 60 * 1000, // 15 minutes
}),
}
})
await relay.start()
console.log('Relay listening on:')
relay.getMultiaddrs().forEach(ma => console.log(ma.toString()))