Skip to content

Commit c110b70

Browse files
committed
devp2p -> connection reliability: distribute network traffic on DPT additions of new neighbour peers
1 parent 06f31ea commit c110b70

File tree

4 files changed

+21
-14
lines changed

4 files changed

+21
-14
lines changed

packages/devp2p/src/dpt/dpt.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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, remote) => this._onServerPeers(peers))
80+
this._server.on('peers', (peers) => this._onServerPeers(peers))
8181
this._server.on('error', (err) => this.emit('error', err))
8282

8383
const refreshIntervalSubdivided = Math.floor((options.refreshInterval ?? ms('60s')) / 10)
@@ -115,12 +115,16 @@ export class DPT extends EventEmitter {
115115
}
116116

117117
_onServerPeers(peers: PeerInfo[]): void {
118-
const ms = 0
118+
const DIFF_TIME_MS = 200
119+
let ms = 0
119120
for (const peer of peers) {
120-
this.addPeer(peer).catch((error) => {
121-
this.emit('error', error )
122-
})
123-
}
121+
setTimeout(() => {
122+
this.addPeer(peer).catch((error) => {
123+
this.emit('error', error)
124+
})
125+
}, ms)
126+
ms += DIFF_TIME_MS
127+
}
124128
}
125129

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

packages/devp2p/src/dpt/kbucket.ts

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

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

packages/devp2p/test/integration/dpt-simulator.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ test('DPT: remove node', async (t) => {
3232
async.series(
3333
[
3434
function (cb) {
35-
dpts[0].on('peer:added', function (peer: any) {
35+
dpts[0].on('peer:added', function (peer) {
3636
dpts[0].removePeer(peer)
3737
cb(null)
3838
})
@@ -64,13 +64,13 @@ test('DPT: ban node', async (t) => {
6464
async.series(
6565
[
6666
function (cb) {
67-
dpts[0].on('peer:added', function (peer: any) {
67+
dpts[0].on('peer:added', function (peer) {
6868
dpts[0].banPeer(peer)
6969
cb(null)
7070
})
7171
},
7272
function (cb) {
73-
dpts[0].on('peer:removed', function (peer: any) {
73+
dpts[0].on('peer:removed', function (peer) {
7474
t.equal(dpts[0].banlist.has(peer), true, 'ban-list should contain peer')
7575
t.equal(
7676
dpts[0].getPeers().length,
@@ -150,11 +150,14 @@ test('DPT: simulate bootstrap', async (t) => {
150150
}
151151

152152
await delay(250)
153-
util.destroyDPTs(dpts)
154153

155154
// dpts.forEach((dpt, i) => console.log(`${i}:${dpt.getPeers().length}`))
156-
for (const dpt of dpts)
155+
for (const dpt of dpts) {
157156
t.equal(dpt.getPeers().length, numDPTs, 'Peers should be distributed to all DPTs')
157+
}
158+
await delay(1000)
159+
160+
util.destroyDPTs(dpts)
158161

159162
t.end()
160163
})

packages/devp2p/test/integration/util.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import Common from '@ethereumjs/common'
55
export const localhost = '127.0.0.1'
66
export const basePort = 30306
77

8-
export function getTestDPTs(numDPTs: any) {
8+
export function getTestDPTs(numDPTs: number) {
99
const dpts = []
1010

1111
for (let i = 0; i < numDPTs; ++i) {
@@ -30,7 +30,7 @@ export function initTwoPeerDPTSetup() {
3030
return dpts
3131
}
3232

33-
export function destroyDPTs(dpts: any) {
33+
export function destroyDPTs(dpts: DPT[]) {
3434
for (const dpt of dpts) dpt.destroy()
3535
}
3636

0 commit comments

Comments
 (0)