@@ -6,6 +6,10 @@ import type { ComponentLogger, Libp2pEvents, Logger, TypedEventTarget, PeerId, P
6
6
import type { AddressManager as AddressManagerInterface , TransportManager } from '@libp2p/interface-internal'
7
7
import type { Multiaddr } from '@multiformats/multiaddr'
8
8
9
+ export const defaultValues = {
10
+ maxObservedAddresses : 10
11
+ }
12
+
9
13
export interface AddressManagerInit {
10
14
/**
11
15
* Pass an function in this field to override the list of addresses
@@ -32,6 +36,11 @@ export interface AddressManagerInit {
32
36
* A list of string multiaddrs to add to the list of announced addresses
33
37
*/
34
38
appendAnnounce ?: string [ ]
39
+
40
+ /**
41
+ * Limits the number of observed addresses we will store
42
+ */
43
+ maxObservedAddresses ?: number
35
44
}
36
45
37
46
export interface AddressManagerComponents {
@@ -103,6 +112,7 @@ export class AddressManager implements AddressManagerInterface {
103
112
private readonly announceFilter : AddressFilter
104
113
private readonly ipDomainMappings : Map < string , DNSMapping >
105
114
private readonly publicAddressMappings : Map < string , PublicAddressMapping [ ] >
115
+ private readonly maxObservedAddresses : number
106
116
107
117
/**
108
118
* Responsible for managing the peer addresses.
@@ -122,6 +132,7 @@ export class AddressManager implements AddressManagerInterface {
122
132
this . ipDomainMappings = new Map ( )
123
133
this . publicAddressMappings = new Map ( )
124
134
this . announceFilter = init . announceFilter ?? defaultAddressFilter
135
+ this . maxObservedAddresses = init . maxObservedAddresses ?? defaultValues . maxObservedAddresses
125
136
126
137
// this method gets called repeatedly on startup when transports start listening so
127
138
// debounce it so we don't cause multiple self:peer:update events to be emitted
@@ -192,6 +203,10 @@ export class AddressManager implements AddressManagerInterface {
192
203
* Add peer observed addresses
193
204
*/
194
205
addObservedAddr ( addr : Multiaddr ) : void {
206
+ if ( this . observed . size === this . maxObservedAddresses ) {
207
+ return
208
+ }
209
+
195
210
addr = stripPeerId ( addr , this . components . peerId )
196
211
const addrString = addr . toString ( )
197
212
0 commit comments