53 lines
1.6 KiB
JavaScript
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()))
|