Skip to content

Commit 5cf2ec5

Browse files
authored
fix: added multiaddr dial box + UI fixes (#49) (#52)
* fix: added multiaddr dial box + UI fixes (#49) * fix: updated UI + increased outbound streams (#49) * fix: remove relay server + restored rust relay config (#49)
1 parent 2d8c971 commit 5cf2ec5

File tree

5 files changed

+237
-20
lines changed

5 files changed

+237
-20
lines changed

go-peer/main.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import (
2222
discovery "github.com/libp2p/go-libp2p/p2p/discovery/util"
2323
quicTransport "github.com/libp2p/go-libp2p/p2p/transport/quic"
2424
tcpTransport "github.com/libp2p/go-libp2p/p2p/transport/tcp"
25-
webtransport "github.com/libp2p/go-libp2p/p2p/transport/webtransport"
2625
ws "github.com/libp2p/go-libp2p/p2p/transport/websocket"
26+
webtransport "github.com/libp2p/go-libp2p/p2p/transport/webtransport"
2727
"github.com/multiformats/go-multiaddr"
2828
)
2929

@@ -188,7 +188,6 @@ func main() {
188188
libp2p.Transport(tcpTransport.NewTCPTransport),
189189
libp2p.Transport(webtransport.New),
190190
libp2p.ListenAddrStrings("/ip4/0.0.0.0/udp/9091/quic-v1", "/ip4/0.0.0.0/udp/9092/quic-v1/webtransport", "/ip4/0.0.0.0/tcp/9090"),
191-
),
192191
)
193192

194193
// create a new libp2p Host with lots of options
+139
Loading

packages/frontend/src/components/chat.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ export default function ChatContainer() {
132132
alt="username"
133133
/>
134134
<span className="absolute w-3 h-3 bg-green-600 rounded-full left-10 top-3"></span> */}
135-
<span className="text-3xl">💁‍♀️💁</span>
135+
<span className="text-3xl">💁🏽‍♀️💁🏿‍♂️</span>
136136
<span className="block ml-2 font-bold text-gray-600">
137137
Public Chat
138138
</span>

packages/frontend/src/lib/libp2p.ts

+22-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createLibp2p } from 'libp2p'
1+
import { createLibp2p, Libp2p } from 'libp2p'
22
import { noise } from '@chainsafe/libp2p-noise'
33
import { yamux } from '@chainsafe/libp2p-yamux'
44
import { bootstrap } from '@libp2p/bootstrap'
@@ -17,7 +17,7 @@ import { BOOTSTRAP_NODE, CHAT_TOPIC, CIRCUIT_RELAY_CODE } from './constants'
1717
import * as filters from "@libp2p/websockets/filters"
1818

1919
// @ts-ignore
20-
import { circuitRelayTransport } from 'libp2p/circuit-relay'
20+
import { circuitRelayTransport, circuitRelayServer } from 'libp2p/circuit-relay'
2121

2222

2323
export async function startLibp2p() {
@@ -45,14 +45,16 @@ export async function startLibp2p() {
4545
}),],
4646
connectionEncryption: [noise()],
4747
connectionManager: {
48-
maxConnections: 100,
48+
maxConnections: 200,
4949
minConnections: 1,
5050
},
5151
streamMuxers: [yamux()],
5252
peerDiscovery: [
5353
bootstrap({
5454
list: [
55-
BOOTSTRAP_NODE,
55+
// BOOTSTRAP_NODE,
56+
// Local Rust Peer Bootstrap node
57+
"/ip4/127.0.0.1/udp/9090/webrtc-direct/certhash/uEiA2twAWww-g6fXsJe6JPlROwCHbRj6fNgr_WHxiQGEK3g/p2p/12D3KooWLTB1SrjyF8R5Z1MKErcV8abs26eo4LpadQKWsxMUcDBJ"
5658
],
5759
}),
5860
],
@@ -62,7 +64,9 @@ export async function startLibp2p() {
6264
ignoreDuplicatePublishError: true,
6365
}),
6466
identify: {
65-
maxPushOutgoingStreams: 2,
67+
maxPushOutgoingStreams: 100,
68+
maxInboundStreams: 100,
69+
maxOutboundStreams: 100,
6670
},
6771
autonat: {
6872
startupDelay: 60 * 60 *24 * 1000,
@@ -103,3 +107,16 @@ export const setWebRTCRelayAddress = (maddrs: Multiaddr[], peerId: string) => {
103107
})
104108
}
105109

110+
export const connectToMultiaddr =
111+
(libp2p: Libp2p) => async (multiaddr: Multiaddr) => {
112+
console.log(`dialling: ${multiaddr.toString()}`)
113+
try {
114+
const conn = await libp2p.dial(multiaddr)
115+
console.info('connected to', conn.remotePeer, 'on', conn.remoteAddr)
116+
return conn
117+
} catch (e) {
118+
console.error(e)
119+
throw e
120+
}
121+
}
122+

packages/frontend/src/pages/index.tsx

+74-12
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@ import Head from 'next/head'
22
import { CheckCircleIcon, XCircleIcon } from '@heroicons/react/20/solid'
33
import Nav from '@/components/nav'
44
import { useLibp2pContext } from '@/context/ctx'
5-
import { useInterval } from 'usehooks-ts'
6-
import type { PeerId } from '@libp2p/interface-peer-id'
75
import type { Connection } from '@libp2p/interface-connection'
86
import { usePeerContext } from '../context/peer-ctx'
9-
import { useEffect } from 'react'
7+
import { useCallback, useEffect, useState } from 'react'
8+
import Image from 'next/image'
9+
import { multiaddr } from '@multiformats/multiaddr'
10+
import { connectToMultiaddr } from '../lib/libp2p'
1011

1112

1213
export default function Home() {
1314
const { libp2p } = useLibp2pContext()
1415
const { peerStats, setPeerStats } = usePeerContext()
16+
const [maddr, setMultiaddr] = useState('')
1517

1618
useEffect(() => {
1719
const peerConnectedCB = (evt: CustomEvent<Connection>) => {
@@ -36,14 +38,15 @@ export default function Home() {
3638

3739
connections.forEach((conn) => {
3840
const exists = protoNames.get(conn.remotePeer.toString())
41+
const dedupedProtonames = [...new Set(conn.remoteAddr.protoNames())]
3942

40-
if (exists) {
41-
const namesToAdd = exists.filter(
42-
(name) => !conn.remoteAddr.protoNames().includes(name),
43-
)
43+
if (exists?.length) {
44+
const namesToAdd = dedupedProtonames.filter((name) => !exists.includes(name))
45+
console.log('namesToAdd: ', namesToAdd)
4446
protoNames.set(conn.remotePeer.toString(), [...exists, ...namesToAdd])
47+
4548
} else {
46-
protoNames.set(conn.remotePeer.toString(), conn.remoteAddr.protoNames())
49+
protoNames.set(conn.remotePeer.toString(), dedupedProtonames)
4750
}
4851
})
4952

@@ -54,12 +57,38 @@ export default function Home() {
5457

5558
}
5659

60+
const handleConnectToMultiaddr = useCallback(
61+
async (e: React.MouseEvent<HTMLButtonElement>) => {
62+
if (!maddr) {
63+
return
64+
}
65+
66+
try {
67+
const connection = await connectToMultiaddr(libp2p)(multiaddr(maddr))
68+
console.log('connection: ', connection)
69+
70+
return connection
71+
} catch (e) {
72+
console.error(e)
73+
}
74+
},
75+
[libp2p, maddr],
76+
)
77+
78+
// handleConnectToMultiaddr
79+
80+
const handleMultiaddrChange = useCallback(
81+
(e: React.ChangeEvent<HTMLInputElement>) => {
82+
setMultiaddr(e.target.value)
83+
},
84+
[setMultiaddr],
85+
)
5786

5887
return (
5988
<>
6089
<Head>
61-
<title>js-libp2p-nextjs-example</title>
62-
<meta name="description" content="js-libp2p-nextjs-example" />
90+
<title>Universal Connectivity</title>
91+
<meta name="description" content="universal connectivity" />
6392
<meta name="viewport" content="width=device-width, initial-scale=1" />
6493
<link rel="icon" href="/favicon.ico" />
6594
</Head>
@@ -68,8 +97,14 @@ export default function Home() {
6897
<div className="py-10">
6998
<header>
7099
<div className="mx-auto max-w-7xl px-2 sm:px-6 lg:px-8">
71-
<h1 className="text-3xl font-bold leading-tight tracking-tight text-gray-900">
72-
Libp2p WebTransport Example
100+
<h1 className="text-3xl font-bold leading-tight tracking-tight text-gray-900 flex flex-row">
101+
<p className="mr-4">Universal Connectivity</p>
102+
<Image
103+
src="/libp2p-hero.svg"
104+
alt="libp2p logo"
105+
height="46"
106+
width="46"
107+
/>
73108
</h1>
74109
</div>
75110
</header>
@@ -78,6 +113,33 @@ export default function Home() {
78113
<ul className="my-2 space-y-2 break-all">
79114
<li className="">This PeerID: {libp2p.peerId.toString()}</li>
80115
</ul>
116+
<div className="my-6 w-1/2">
117+
<label
118+
htmlFor="peer-id"
119+
className="block text-sm font-medium leading-6 text-gray-900"
120+
>
121+
multiaddr to connect to
122+
</label>
123+
<div className="mt-2">
124+
<input
125+
value={maddr}
126+
type="text"
127+
name="peer-id"
128+
id="peer-id"
129+
className="block w-full rounded-md border-0 py-1.5 px-3 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6"
130+
placeholder="12D3Koo..."
131+
aria-describedby="multiaddr-id-description"
132+
onChange={handleMultiaddrChange}
133+
/>
134+
</div>
135+
<button
136+
type="button"
137+
className="rounded-md bg-indigo-600 my-2 py-2 px-3 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
138+
onClick={handleConnectToMultiaddr}
139+
>
140+
Connect to multiaddr
141+
</button>
142+
</div>
81143

82144

83145
<div className="my-4 inline-flex items-center text-xl">

0 commit comments

Comments
 (0)