Skip to content

Commit 06f31ea

Browse files
committed
devp2p -> connection reliability: fixed an error in DPT not properly banning old peers and replacing with a new peer on KBucket ping
1 parent 88e5f03 commit 06f31ea

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

packages/devp2p/src/dpt/dpt.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export class DPT extends EventEmitter {
6868
this._kbucket = new KBucket(this._id)
6969
this._kbucket.on('added', (peer: PeerInfo) => this.emit('peer:added', peer))
7070
this._kbucket.on('removed', (peer: PeerInfo) => this.emit('peer:removed', peer))
71-
this._kbucket.on('ping', this._onKBucketPing)
71+
this._kbucket.on('ping', this._onKBucketPing.bind(this))
7272

7373
this._server = new DPTServer(this, this.privateKey, {
7474
timeout: options.timeout,
@@ -77,7 +77,7 @@ export class DPT extends EventEmitter {
7777
})
7878
this._server.once('listening', () => this.emit('listening'))
7979
this._server.once('close', () => this.emit('close'))
80-
this._server.on('peers', (peers) => this._onServerPeers(peers))
80+
this._server.on('peers', (peers, remote) => this._onServerPeers(peers))
8181
this._server.on('error', (err) => this.emit('error', err))
8282

8383
const refreshIntervalSubdivided = Math.floor((options.refreshInterval ?? ms('60s')) / 10)
@@ -108,15 +108,19 @@ export class DPT extends EventEmitter {
108108
})
109109
.then(() => {
110110
if (++count < oldPeers.length) return
111-
112111
if (err === null) this.banlist.add(newPeer, ms('5m'))
113112
else this._kbucket.add(newPeer)
114113
})
115114
}
116115
}
117116

118-
_onServerPeers(peers: any[]): void {
119-
for (const peer of peers) this.addPeer(peer).catch(() => {})
117+
_onServerPeers(peers: PeerInfo[]): void {
118+
const ms = 0
119+
for (const peer of peers) {
120+
this.addPeer(peer).catch((error) => {
121+
this.emit('error', error )
122+
})
123+
}
120124
}
121125

122126
async bootstrap(peer: PeerInfo): Promise<void> {

packages/devp2p/src/dpt/kbucket.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ export class KBucket extends EventEmitter {
3232
this.emit('removed', peer)
3333
})
3434

35-
this._kbucket.on('ping', (oldPeers: PeerInfo[], newPeer: PeerInfo) => {
36-
this.emit('ping', { oldPeers, newPeer })
35+
this._kbucket.on('ping', (oldPeers: PeerInfo[], newPeer: PeerInfo | undefined) => {
36+
this.emit('ping', oldPeers, newPeer)
3737
})
3838
}
3939

0 commit comments

Comments
 (0)