-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1-relayer.js
133 lines (118 loc) · 3.92 KB
/
1-relayer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import {createLibp2p} from "libp2p";
import {WebSockets} from "@libp2p/websockets";
import {TCP} from "@libp2p/tcp";
import { Noise } from "@chainsafe/libp2p-noise";
import {Mplex} from "@libp2p/mplex";
import {KadDHT} from "@libp2p/kad-dht";
import {Bootstrap} from "@libp2p/bootstrap";
// import {PubSubPeerDiscovery} from "@libp2p/pubsub-peer-discovery";
// import {GossipSub} from "@chainsafe/libp2p-gossipsub";
import {createRSAPeerId, createEd25519PeerId, createSecp256k1PeerId, createFromJSON, exportToProtobuf} from "@libp2p/peer-id-factory";
import fs from "fs";
import { EventEmitter, CustomEvent } from '@libp2p/interfaces/events';
import disc from "./disc.js";
import variables from "./misc/variables.js";
// VARIABLES
var node = {};
var test = "test"
// FUNCTIONS
const replacerFunc = () => {
const visited = new WeakSet();
return (key, value) => {
if (typeof value === "object" && value !== null) {
if (visited.has(value)) {
return;
}
visited.add(value);
}
return value;
};
};
setInterval(async () => {
var mypeerstore = await node.peerStore.all();
console.log("Peers: " + variables.connectedPeers.length);
for(var i=0; i<mypeerstore.length; i++) {
for(var j=0; j<mypeerstore[i].addresses.length; j++) {
console.log(mypeerstore[i].id.toString() + ": " + mypeerstore[i].addresses[j].multiaddr);
}
}
//console.log(mypeerstore);
}, 5000);
async function init() {
// Read the peerId.json file
var mypeerId = JSON.parse(fs.readFileSync("./relayerId.json", 'utf8'));
var id = await createFromJSON(mypeerId);
node = await createLibp2p( {
peerId: id,
transports: [
new WebSockets(),
new TCP()
],
connectionEncryption: [new Noise()],
streamMuxers: [new Mplex()],
dht: new KadDHT(),
//pubsub: new GossipSub(),
addresses: {
listen: [
//'/ip4/89.58.0.139/tcp/15002',
"/ip4/0.0.0.0/tcp/15002"
],
//announce: ['/dns4/auto-relay.libp2p.io/tcp/443/wss/p2p/QmWDn2LY8nannvSWJzruUYoLZ4vV83vfCBwd8DipvdgQc3']
//announce: ['/ip4/89.58.0.139/tcp/15002/p2p/QmSaT2NnWddF4e2WVWSPz22mp2dYXFnESF4vRqGuBB4SFU']
},
// peerDiscovery: [
// // new Bootstrap({
// // list: bootstrapers
// // })
// new PubSubPeerDiscovery({
// interval: 1000
// })
// ],
connectionManager: {
//dialTimeout: 1000000,
autoDial: true
},
relay: {
enabled: true,
hop: {
enabled: true,
maxListeners: 10
},
autoRelay: {
enabled: true,
maxListeners: 10
},
advertise: {
enabled: true,
},
}
}) // END libp2p.create
// Start the node
await node.start();
// Add event listener
node.addEventListener("peer:discovery", (evt) => {
const peer = evt.detail
console.log("Discovered: " + peer.id);
});
node.connectionManager.addEventListener("peer:connect", (evt) => {
const peer = evt.detail
console.log("Connected: " + peer.remotePeer.toString());
if(!variables.connectedPeers.includes(peer.remotePeer.toString())) {
variables.connectedPeers.push(peer.remotePeer.toString());
}
//node.peerStore.dispatchEvent(new CustomEvent<PeerInfo>('peer', { detail: peer.remotePeer.toString() }))
//node.onDiscoveryPeer(evt);
});
node.connectionManager.addEventListener("peer:disconnect", (evt) => {
const peer = evt.detail
console.log("Disconnected: " + peer.remotePeer.toString())
var index = variables.connectedPeers.indexOf(peer.remotePeer.toString());
variables.connectedPeers.splice(index, 1);
});
// Add protocol handler
await node.handle("/disc", async ({connection, stream, protocol}) => {disc.handler({connection, stream, protocol}, node)});
console.log(`Node started with id ${node.peerId.toString()}`)
console.log('Listening on:')
//node.multiaddrs.forEach((ma) => console.log(`${ma.toString()}/p2p/${node.peerId.toString()}`))
}
init();