From 6903ecdad4deb313f8da8ed89fddc45431e3abaf Mon Sep 17 00:00:00 2001 From: prathamesh0 Date: Wed, 4 Jan 2023 17:18:24 +0530 Subject: [PATCH] Update peer config to use webRTC browsert-server transport with autorelay --- packages/peer-test-app/.env | 3 +- packages/peer-test-app/README.md | 13 ++----- packages/peer-test-app/src/App.tsx | 2 +- packages/peer/package.json | 1 + packages/peer/src/index.ts | 59 ++++++++--------------------- yarn.lock | 60 ++++++++++++++++++++++++++++-- 6 files changed, 78 insertions(+), 60 deletions(-) diff --git a/packages/peer-test-app/.env b/packages/peer-test-app/.env index 3c8478ec..d550812e 100644 --- a/packages/peer-test-app/.env +++ b/packages/peer-test-app/.env @@ -1,2 +1 @@ -REACT_APP_SIGNAL_SERVER=/ip4/127.0.0.1/tcp/13579/ws/p2p-webrtc-star/ -REACT_APP_RELAY_NODE= +REACT_APP_RELAY_NODE= \ No newline at end of file diff --git a/packages/peer-test-app/README.md b/packages/peer-test-app/README.md index 9755498f..952bf27d 100644 --- a/packages/peer-test-app/README.md +++ b/packages/peer-test-app/README.md @@ -19,13 +19,6 @@ This project was bootstrapped with [Create React App](https://github.com/faceboo yarn build ``` -* (Optional) Run a local signalling server: - - ```bash - # In packages/peer - yarn signal-server - ``` - * (Optional) Run a local relay node: ```bash @@ -35,11 +28,11 @@ This project was bootstrapped with [Create React App](https://github.com/faceboo * `signal-server`: multiaddr of a signalling server (default: local signalling server multiaddr) -* Set the signalling server and relay node multiaddrs in the [env](./.env) file: +* Set the relay node multiaddr in the [env](./.env) file: ``` - REACT_APP_SIGNAL_SERVER=/ip4/127.0.0.1/tcp/13579/ws/p2p-webrtc-star/ - REACT_APP_RELAY_NODE=/ip4/127.0.0.1/tcp/13579/wss/p2p-webrtc-star/p2p/12D3KooWRzH3ZRFP6RDbs2EKA8jSrD4Y6VYtLnCRMj3mYCiMHCJP + REACT_APP_RELAY_NODE=/ip4/0.0.0.0/udp/56352/webrtc/certhash/uEiDc_lNCEKrl3Jm_jhlqNlBc6y5xMKwjIvWxeIPqluHppg/p2p/12D3KooWHSZqWZ5vtKVooz2XCU6v2FjVQnQxhA2hANFN4VYyDfp3 + ``` * Start the react app in development mode: diff --git a/packages/peer-test-app/src/App.tsx b/packages/peer-test-app/src/App.tsx index 6a3c5732..2328f716 100644 --- a/packages/peer-test-app/src/App.tsx +++ b/packages/peer-test-app/src/App.tsx @@ -14,7 +14,7 @@ function App() { useEffect(() => { (async () => { if (peer) { - await peer.init(process.env.REACT_APP_SIGNAL_SERVER, process.env.REACT_APP_RELAY_NODE) + await peer.init(process.env.REACT_APP_RELAY_NODE) console.log(`Peer ID is ${peer.peerId!.toString()}`); peer.subscribeMessage((peerId, message) => { diff --git a/packages/peer/package.json b/packages/peer/package.json index 596a3e93..b4a9d6e4 100644 --- a/packages/peer/package.json +++ b/packages/peer/package.json @@ -31,6 +31,7 @@ "@libp2p/floodsub": "^5.0.0", "@libp2p/mplex": "^7.1.1", "@libp2p/pubsub-peer-discovery": "^7.0.1", + "@libp2p/webrtc": "^1.0.1", "@libp2p/webrtc-star": "^5.0.3", "@libp2p/websockets": "^5.0.2", "@multiformats/multiaddr": "^11.1.4", diff --git a/packages/peer/src/index.ts b/packages/peer/src/index.ts index 71bf7dff..a0a44587 100644 --- a/packages/peer/src/index.ts +++ b/packages/peer/src/index.ts @@ -4,7 +4,6 @@ import { createLibp2p, Libp2p } from 'libp2p'; // For nodejs. -import wrtc from 'wrtc'; import assert from 'assert'; import { pipe } from 'it-pipe'; import * as lp from 'it-length-prefixed'; @@ -13,7 +12,7 @@ import { pushable, Pushable } from 'it-pushable'; import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'; import { toString as uint8ArrayToString } from 'uint8arrays/to-string'; -import { webRTCStar, WebRTCStarTuple } from '@libp2p/webrtc-star'; +import { webRTC } from '@libp2p/webrtc'; import { noise } from '@chainsafe/libp2p-noise'; import { mplex } from '@libp2p/mplex'; import type { Stream as P2PStream, Connection } from '@libp2p/interface-connection'; @@ -21,69 +20,43 @@ import type { PeerInfo } from '@libp2p/interface-peer-info'; import { PeerId } from '@libp2p/interface-peer-id'; import { multiaddr, Multiaddr } from '@multiformats/multiaddr'; import { bootstrap } from '@libp2p/bootstrap'; -import { floodsub } from '@libp2p/floodsub'; -import { pubsubPeerDiscovery } from '@libp2p/pubsub-peer-discovery'; +// import { floodsub } from '@libp2p/floodsub'; +// import { pubsubPeerDiscovery } from '@libp2p/pubsub-peer-discovery'; export const PROTOCOL = '/chat/1.0.0'; export const DEFAULT_SIGNAL_SERVER_URL = '/ip4/127.0.0.1/tcp/13579/wss/p2p-webrtc-star'; export class Peer { _node?: Libp2p - _wrtcStar: WebRTCStarTuple _relayNodeMultiaddr?: Multiaddr _remotePeerIds: PeerId[] = [] _peerStreamMap: Map> = new Map() _messageHandlers: Array<(peerId: PeerId, message: string) => void> = [] - constructor (nodejs?: boolean) { - // Instantiation in nodejs. - if (nodejs) { - this._wrtcStar = webRTCStar({ wrtc }); - } else { - this._wrtcStar = webRTCStar(); - } - } - get peerId (): PeerId | undefined { return this._node?.peerId; } - async init (signalServerURL = DEFAULT_SIGNAL_SERVER_URL, relayNodeURL?: string): Promise { - let peerDiscovery: any; - if (relayNodeURL) { - console.log('Bootstrapping relay node'); - this._relayNodeMultiaddr = multiaddr(relayNodeURL); - peerDiscovery = [ - bootstrap({ - list: [this._relayNodeMultiaddr.toString()] - }), - pubsubPeerDiscovery({ - interval: 1000 - }) - ]; - } else { - peerDiscovery = [this._wrtcStar.discovery]; - } + async init (relayNodeURL?: string): Promise { + console.log('Bootstrapping relay node'); + this._relayNodeMultiaddr = multiaddr(relayNodeURL); + const peerDiscovery = [ + bootstrap({ + list: [this._relayNodeMultiaddr.toString()] + }) + // pubsubPeerDiscovery({ + // interval: 1000 + // }) + ]; this._node = await createLibp2p({ - addresses: { - // Add the signaling server address, along with our PeerId to our multiaddrs list - // libp2p will automatically attempt to dial to the signaling server so that it can - // receive inbound connections from other peers - listen: [ - // Public signal servers - // '/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star', - // '/dns4/wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star' - signalServerURL - ] - }, transports: [ - this._wrtcStar.transport + webRTC() ], connectionEncryption: [noise()], streamMuxers: [mplex()], - pubsub: floodsub(), + // pubsub: floodsub(), peerDiscovery, relay: { enabled: true, diff --git a/yarn.lock b/yarn.lock index 86807845..0bf7d399 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1367,7 +1367,7 @@ resolved "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.1.tgz" integrity sha512-nqSJ8u2a1Rv9FYbyI8qpDhTYujaKEyLknNrTejLYoSWmdeg+2WB7R6BZqPZYfrJzDxVi3rl6ZQuoaEvpKRZWgQ== -"@chainsafe/libp2p-noise@^10.2.0": +"@chainsafe/libp2p-noise@^10.0.0", "@chainsafe/libp2p-noise@^10.2.0": version "10.2.0" resolved "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-10.2.0.tgz" integrity sha512-nXw09UwSE5JCiB5Dte6j0b0Qe+KbtepJvaPz/f5JyxcoyUfLE/t7XWRZAZmcuWBeVWWpOItnK5WmW8uocoiwCQ== @@ -4450,6 +4450,32 @@ socket.io-client "^4.1.2" uint8arrays "^4.0.2" +"@libp2p/webrtc@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@libp2p/webrtc/-/webrtc-1.0.1.tgz#fb5c4ab87ae49f257cc0632d14b42c751a6a1618" + integrity sha512-T3YKdDhAmIdoJnsOCSPG0mnfoqtX3pQ/g7VNin3c0S4c069wxBxYA20MUgOtATB3MDlxyjYQ4U6cZrWNyMB9lA== + dependencies: + "@chainsafe/libp2p-noise" "^10.0.0" + "@libp2p/interface-connection" "^3.0.2" + "@libp2p/interface-peer-id" "^1.0.5" + "@libp2p/interface-stream-muxer" "^3.0.0" + "@libp2p/interface-transport" "^2.0.0" + "@libp2p/logger" "^2.0.0" + "@libp2p/peer-id" "^1.1.15" + "@multiformats/multiaddr" "^11.0.3" + "@protobuf-ts/runtime" "^2.8.0" + err-code "^3.0.1" + it-length-prefixed "^8.0.3" + it-merge "^2.0.0" + it-pipe "^2.0.4" + it-pushable "^3.1.0" + it-stream-types "^1.0.4" + multiformats "^10.0.0" + multihashes "^4.0.3" + p-defer "^4.0.0" + uint8arraylist "^2.3.3" + uint8arrays "^4.0.2" + "@libp2p/websockets@^5.0.2": version "5.0.2" resolved "https://registry.npmjs.org/@libp2p/websockets/-/websockets-5.0.2.tgz" @@ -4481,6 +4507,11 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" +"@multiformats/base-x@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121" + integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw== + "@multiformats/mafmt@^11.0.2", "@multiformats/mafmt@^11.0.3": version "11.0.3" resolved "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-11.0.3.tgz" @@ -4495,7 +4526,7 @@ dependencies: "@multiformats/multiaddr" "^11.0.0" -"@multiformats/multiaddr@^11.0.0", "@multiformats/multiaddr@^11.0.5", "@multiformats/multiaddr@^11.1.4": +"@multiformats/multiaddr@^11.0.0", "@multiformats/multiaddr@^11.0.3", "@multiformats/multiaddr@^11.0.5", "@multiformats/multiaddr@^11.1.4": version "11.1.4" resolved "https://registry.yarnpkg.com/@multiformats/multiaddr/-/multiaddr-11.1.4.tgz#55be2da1d82973af1f9f38415143b894ec2d095c" integrity sha512-eaFX7Pp5DNVoSk5xlWbmKwHmo1+ab90VT0xzWSocoXj9IkShx+lYm7Zo4tmfX8RnwTNGzBSZqY5G4jmqvYFoPg== @@ -4766,6 +4797,11 @@ glob-promise "^3.4.0" path "^0.12.7" +"@protobuf-ts/runtime@^2.8.0": + version "2.8.2" + resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime/-/runtime-2.8.2.tgz#5d5424a6ae7fb846c3f4d0f2dd6448db65bb69d6" + integrity sha512-PVxsH81y9kEbHldxxG/8Y3z2mTXWQytRl8zNS0mTPUjkEC+8GUX6gj6LsA8EFp25fAs9V0ruh+aNWmPccEI9MA== + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz" @@ -17173,6 +17209,13 @@ multibase@^0.7.0: base-x "^3.0.8" buffer "^5.5.0" +multibase@^4.0.1: + version "4.0.6" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-4.0.6.tgz#6e624341483d6123ca1ede956208cb821b440559" + integrity sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ== + dependencies: + "@multiformats/base-x" "^4.0.1" + multibase@~0.6.0: version "0.6.1" resolved "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz" @@ -17233,6 +17276,15 @@ multihashes@^0.4.15, multihashes@~0.4.15: multibase "^0.7.0" varint "^5.0.0" +multihashes@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-4.0.3.tgz#426610539cd2551edbf533adeac4c06b3b90fb05" + integrity sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA== + dependencies: + multibase "^4.0.1" + uint8arrays "^3.0.0" + varint "^5.0.2" + multimatch@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" @@ -22790,7 +22842,7 @@ uint8-varint@^1.0.1, uint8-varint@^1.0.2: uint8arraylist "^2.0.0" uint8arrays "^4.0.2" -uint8arraylist@^2.0.0, uint8arraylist@^2.1.0, uint8arraylist@^2.1.1, uint8arraylist@^2.1.2, uint8arraylist@^2.3.1, uint8arraylist@^2.3.2, uint8arraylist@^2.4.1: +uint8arraylist@^2.0.0, uint8arraylist@^2.1.0, uint8arraylist@^2.1.1, uint8arraylist@^2.1.2, uint8arraylist@^2.3.1, uint8arraylist@^2.3.2, uint8arraylist@^2.3.3, uint8arraylist@^2.4.1: version "2.4.3" resolved "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.3.tgz" integrity sha512-oEVZr4/GrH87K0kjNce6z8pSCzLEPqHNLNR5sj8cJOySrTP8Vb/pMIbZKLJGhQKxm1TiZ31atNrpn820Pyqpow== @@ -23226,7 +23278,7 @@ value-or-promise@1.0.11: resolved "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz" integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== -varint@^5.0.0: +varint@^5.0.0, varint@^5.0.2: version "5.0.2" resolved "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==