Skip to content
This repository was archived by the owner on Jul 21, 2023. It is now read-only.

Commit e3f15f1

Browse files
deps!: bump @libp2p/interface-peer-store from 1.2.9 to 2.0.0 (#460)
* deps: bump @libp2p/interface-connection-manager from 2.1.1 to 3.0.0 Bumps [@libp2p/interface-connection-manager](https://github.com/libp2p/js-libp2p-interfaces) from 2.1.1 to 3.0.0. - [Release notes](https://github.com/libp2p/js-libp2p-interfaces/releases) - [Commits](https://github.com/libp2p/js-libp2p-interfaces/compare/@libp2p/interface-connection-manager-v2.1.1...@libp2p/interface-connection-manager-v3.0.0) --- updated-dependencies: - dependency-name: "@libp2p/interface-connection-manager" dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> * deps: bump @libp2p/interface-peer-store from 1.2.9 to 2.0.0 Bumps [@libp2p/interface-peer-store](https://github.com/libp2p/js-libp2p-interfaces) from 1.2.9 to 2.0.0. - [Release notes](https://github.com/libp2p/js-libp2p-interfaces/releases) - [Commits](https://github.com/libp2p/js-libp2p-interfaces/compare/@libp2p/interface-peer-store-v1.2.9...@libp2p/interface-peer-store-v2.0.0) --- updated-dependencies: - dependency-name: "@libp2p/interface-peer-store" dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> * deps: bump @libp2p/interface-address-manager from 2.0.5 to 3.0.0 Bumps [@libp2p/interface-address-manager](https://github.com/libp2p/js-libp2p-interfaces) from 2.0.5 to 3.0.0. - [Release notes](https://github.com/libp2p/js-libp2p-interfaces/releases) - [Commits](https://github.com/libp2p/js-libp2p-interfaces/compare/@libp2p/interface-address-manager-v2.0.5...@libp2p/interface-address-manager-v3.0.0) --- updated-dependencies: - dependency-name: "@libp2p/interface-address-manager" dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> * deps(dev): bump @libp2p/interface-mocks from 10.0.3 to 11.0.0 Bumps [@libp2p/interface-mocks](https://github.com/libp2p/js-libp2p-interfaces) from 10.0.3 to 11.0.0. - [Release notes](https://github.com/libp2p/js-libp2p-interfaces/releases) - [Commits](https://github.com/libp2p/js-libp2p-interfaces/compare/@libp2p/interface-mocks-v10.0.3...@libp2p/interface-mocks-v11.0.0) --- updated-dependencies: - dependency-name: "@libp2p/interface-mocks" dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> * fix: update interfaces * fix: linting * chore: deps --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: achingbrain <[email protected]>
1 parent 987fed9 commit e3f15f1

File tree

13 files changed

+162
-83
lines changed

13 files changed

+162
-83
lines changed

package.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,16 +143,16 @@
143143
},
144144
"dependencies": {
145145
"@libp2p/crypto": "^1.0.4",
146-
"@libp2p/interface-address-manager": "^2.0.0",
146+
"@libp2p/interface-address-manager": "^3.0.0",
147147
"@libp2p/interface-connection": "^5.0.1",
148-
"@libp2p/interface-connection-manager": "^2.0.0",
148+
"@libp2p/interface-connection-manager": "^3.0.0",
149149
"@libp2p/interface-dht": "^2.0.0",
150150
"@libp2p/interface-metrics": "^4.0.0",
151151
"@libp2p/interface-peer-discovery": "^1.0.1",
152152
"@libp2p/interface-peer-id": "^2.0.0",
153153
"@libp2p/interface-peer-info": "^1.0.3",
154-
"@libp2p/interface-peer-store": "^1.2.2",
155-
"@libp2p/interface-registrar": "^2.0.3",
154+
"@libp2p/interface-peer-store": "^2.0.0",
155+
"@libp2p/interface-registrar": "^2.0.11",
156156
"@libp2p/interfaces": "^3.2.0",
157157
"@libp2p/logger": "^2.0.1",
158158
"@libp2p/peer-collections": "^3.0.0",
@@ -187,9 +187,10 @@
187187
"varint": "^6.0.0"
188188
},
189189
"devDependencies": {
190-
"@libp2p/interface-mocks": "^10.0.2",
190+
"@libp2p/interface-libp2p": "^2.0.0",
191+
"@libp2p/interface-mocks": "^11.0.0",
191192
"@libp2p/peer-id-factory": "^2.0.0",
192-
"@libp2p/peer-store": "^7.0.0",
193+
"@libp2p/peer-store": "^8.0.0",
193194
"@types/lodash.random": "^3.2.6",
194195
"@types/lodash.range": "^3.2.6",
195196
"@types/varint": "^6.0.0",

src/content-routing/index.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,21 @@ export class ContentRouting {
139139
const providers: PeerInfo[] = []
140140

141141
for (const peerId of provs.slice(0, toFind)) {
142-
providers.push({
143-
id: peerId,
144-
multiaddrs: ((await this.components.peerStore.addressBook.get(peerId)) ?? []).map(address => address.multiaddr),
145-
protocols: []
146-
})
142+
try {
143+
const peer = await this.components.peerStore.get(peerId)
144+
145+
providers.push({
146+
id: peerId,
147+
multiaddrs: peer.addresses.map(({ multiaddr }) => multiaddr),
148+
protocols: peer.protocols
149+
})
150+
} catch (err: any) {
151+
if (err.code !== 'ERR_NOT_FOUND') {
152+
throw err
153+
}
154+
155+
this.log('no peer store entry for %p', peerId)
156+
}
147157
}
148158

149159
yield peerResponseEvent({ from: this.components.peerId, messageType: MESSAGE_TYPE.GET_PROVIDERS, providers })

src/kad-dht.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,12 @@ export class KadDHT extends EventEmitter<PeerDiscoveryEvents> implements DHT {
188188
const peerId = evt.detail
189189

190190
Promise.resolve().then(async () => {
191-
const multiaddrs = await this.components.peerStore.addressBook.get(peerId)
191+
const peer = await this.components.peerStore.get(peerId)
192192

193193
const peerData = {
194194
id: peerId,
195-
multiaddrs: multiaddrs.map(addr => addr.multiaddr),
196-
protocols: []
195+
multiaddrs: peer.addresses.map(({ multiaddr }) => multiaddr),
196+
protocols: peer.protocols
197197
}
198198

199199
await this.onPeerConnect(peerData)

src/peer-routing/index.ts

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -241,15 +241,23 @@ export class PeerRouting {
241241

242242
this.log('found %d peers close to %b', peers.length, key)
243243

244-
for (const peer of peers.peers) {
245-
yield finalPeerEvent({
246-
from: this.components.peerId,
247-
peer: {
248-
id: peer,
249-
multiaddrs: (await (this.components.peerStore.addressBook.get(peer)) ?? []).map(addr => addr.multiaddr),
250-
protocols: []
244+
for (const peerId of peers.peers) {
245+
try {
246+
const peer = await this.components.peerStore.get(peerId)
247+
248+
yield finalPeerEvent({
249+
from: this.components.peerId,
250+
peer: {
251+
id: peerId,
252+
multiaddrs: peer.addresses.map(({ multiaddr }) => multiaddr),
253+
protocols: peer.protocols
254+
}
255+
})
256+
} catch (err: any) {
257+
if (err.code !== 'ERR_NOT_FOUND') {
258+
throw err
251259
}
252-
})
260+
}
253261
}
254262
}
255263

@@ -307,13 +315,12 @@ export class PeerRouting {
307315
}
308316

309317
try {
310-
const addresses = await this.components.peerStore.addressBook.get(peerId)
311-
const protocols = await this.components.peerStore.protoBook.get(peerId)
318+
const peer = await this.components.peerStore.get(peerId)
312319

313320
output.push({
314321
id: peerId,
315-
multiaddrs: addresses.map((address) => address.multiaddr),
316-
protocols
322+
multiaddrs: peer.addresses.map(({ multiaddr }) => multiaddr),
323+
protocols: peer.protocols
317324
})
318325
} catch (err: any) {
319326
if (err.code !== 'ERR_NOT_FOUND') {

src/routing-table/index.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,13 +173,21 @@ export class RoutingTable implements Startable {
173173
Promise.resolve()
174174
.then(async () => {
175175
for (const peer of addedPeers) {
176-
await this.components.peerStore.tagPeer(peer, this.tagName, {
177-
value: this.tagValue
176+
await this.components.peerStore.merge(peer, {
177+
tags: {
178+
[this.tagName]: {
179+
value: this.tagValue
180+
}
181+
}
178182
})
179183
}
180184

181185
for (const peer of removedPeers) {
182-
await this.components.peerStore.unTagPeer(peer, this.tagName)
186+
await this.components.peerStore.merge(peer, {
187+
tags: {
188+
[this.tagName]: undefined
189+
}
190+
})
183191
}
184192
})
185193
.catch(err => {

src/rpc/handlers/get-providers.ts

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -73,24 +73,30 @@ export class GetProvidersHandler implements DHTMessageHandler {
7373
}
7474

7575
async _getAddresses (peerId: PeerId): Promise<Multiaddr[]> {
76-
const addrs = await this.components.peerStore.addressBook.get(peerId)
77-
78-
return addrs.map(address => address.multiaddr)
76+
return []
7977
}
8078

8179
async _getPeers (peerIds: PeerId[]): Promise<PeerInfo[]> {
8280
const output: PeerInfo[] = []
8381
const addrFilter = this.lan ? removePublicAddresses : removePrivateAddresses
8482

8583
for (const peerId of peerIds) {
86-
const peer = addrFilter({
87-
id: peerId,
88-
multiaddrs: await this._getAddresses(peerId),
89-
protocols: []
90-
})
91-
92-
if (peer.multiaddrs.length > 0) {
93-
output.push(peer)
84+
try {
85+
const peer = await this.components.peerStore.get(peerId)
86+
87+
const peerAfterFilter = addrFilter({
88+
id: peerId,
89+
multiaddrs: peer.addresses.map(({ multiaddr }) => multiaddr),
90+
protocols: peer.protocols
91+
})
92+
93+
if (peerAfterFilter.multiaddrs.length > 0) {
94+
output.push(peerAfterFilter)
95+
}
96+
} catch (err: any) {
97+
if (err.code !== 'ERR_NOT_FOUND') {
98+
throw err
99+
}
94100
}
95101
}
96102

src/rpc/handlers/get-value.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ export class GetValueHandler implements DHTMessageHandler {
5151
let pubKey: Uint8Array | undefined
5252

5353
try {
54-
const key = await this.components.peerStore.keyBook.get(idFromKey)
54+
const peer = await this.components.peerStore.get(idFromKey)
5555

56-
if (key == null) {
56+
if (peer.id.publicKey == null) {
5757
throw new CodeError('No public key found in key book', 'ERR_NOT_FOUND')
5858
}
5959

60-
pubKey = key
60+
pubKey = peer.id.publicKey
6161
} catch (err: any) {
6262
if (err.code !== 'ERR_NOT_FOUND') {
6363
throw err

test/kad-dht.spec.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,14 @@ describe('KadDHT', () => {
623623

624624
const dht = await tdht.spawn()
625625

626+
sinon.stub(dht.components.peerStore, 'get').withArgs(dht.components.peerId)
627+
.resolves({
628+
id: dht.components.peerId,
629+
addresses: [],
630+
protocols: [],
631+
tags: new Map(),
632+
metadata: new Map()
633+
})
626634
sinon.stub(dht.lan.providers, 'getProviders').resolves([dht.components.peerId])
627635

628636
// Find provider

test/routing-table.spec.ts

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import type { Registrar } from '@libp2p/interface-registrar'
2121
import type { ConnectionManager } from '@libp2p/interface-connection-manager'
2222
import type { PeerStore } from '@libp2p/interface-peer-store'
2323
import { MemoryDatastore } from 'datastore-core'
24+
import { EventEmitter } from '@libp2p/interfaces/events'
25+
import type { Libp2pEvents } from '@libp2p/interface-libp2p'
2426

2527
describe('Routing Table', () => {
2628
let table: RoutingTable
@@ -29,18 +31,22 @@ describe('Routing Table', () => {
2931
beforeEach(async function () {
3032
this.timeout(20 * 1000)
3133

34+
const events = new EventEmitter<Libp2pEvents>()
35+
3236
components = {
3337
peerId: await createPeerId(),
3438
connectionManager: stubInterface<ConnectionManager>(),
3539
peerStore: stubInterface<PeerStore>()
3640
}
3741
components.connectionManager = mockConnectionManager({
3842
...components,
39-
registrar: stubInterface<Registrar>()
43+
registrar: stubInterface<Registrar>(),
44+
events
4045
})
4146
components.peerStore = new PersistentPeerStore({
4247
...components,
43-
datastore: new MemoryDatastore()
48+
datastore: new MemoryDatastore(),
49+
events
4450
})
4551

4652
table = new RoutingTable(components, {
@@ -229,7 +235,7 @@ describe('Routing Table', () => {
229235

230236
it('tags newly found kad-close peers', async () => {
231237
const remotePeer = await createEd25519PeerId()
232-
const tagPeerSpy = sinon.spy(components.peerStore, 'tagPeer')
238+
const tagPeerSpy = sinon.spy(components.peerStore, 'merge')
233239

234240
await table.add(remotePeer)
235241

@@ -241,8 +247,11 @@ describe('Routing Table', () => {
241247

242248
expect(tagPeerSpy.callCount).to.equal(1, 'did not tag kad-close peer')
243249
expect(tagPeerSpy.getCall(0).args[0].toString()).to.equal(remotePeer.toString())
244-
expect(tagPeerSpy.getCall(0).args[1]).to.equal(KAD_CLOSE_TAG_NAME)
245-
expect(tagPeerSpy.getCall(0).args[2]).to.have.property('value', KAD_CLOSE_TAG_VALUE)
250+
expect(tagPeerSpy.getCall(0).args[1].tags).to.deep.equal({
251+
[KAD_CLOSE_TAG_NAME]: {
252+
value: KAD_CLOSE_TAG_VALUE
253+
}
254+
})
246255
})
247256

248257
it('removes tags from kad-close peers when closer peers are found', async () => {
@@ -251,10 +260,9 @@ describe('Routing Table', () => {
251260
await components.peerStore.all(),
252261
async function * (source) {
253262
for await (const peer of source) {
254-
const tags = await components.peerStore.getTags(peer.id)
255-
const kadCloseTags = tags.filter(tag => tag.name === KAD_CLOSE_TAG_NAME)
263+
const peerData = await components.peerStore.get(peer.id)
256264

257-
if (kadCloseTags.length > 0) {
265+
if (peerData.tags.has(KAD_CLOSE_TAG_NAME)) {
258266
yield peer.id
259267
}
260268
}
@@ -263,8 +271,7 @@ describe('Routing Table', () => {
263271
))
264272
}
265273

266-
const tagPeerSpy = sinon.spy(components.peerStore, 'tagPeer')
267-
const unTagPeerSpy = sinon.spy(components.peerStore, 'unTagPeer')
274+
const tagPeerSpy = sinon.spy(components.peerStore, 'merge')
268275
const localNodeId = await kadUtils.convertPeerId(components.peerId)
269276
const sortedPeerList = await sortClosestPeers(
270277
await Promise.all(
@@ -305,7 +312,7 @@ describe('Routing Table', () => {
305312

306313
// wait for tag new peer and untag old peer
307314
await pWaitFor(() => {
308-
return tagPeerSpy.callCount === 1 && unTagPeerSpy.callCount === 1
315+
return tagPeerSpy.callCount === 2
309316
})
310317

311318
// should have updated list of tagged peers

test/rpc/handlers/get-providers.spec.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ import { multiaddr } from '@multiformats/multiaddr'
88
import { createPeerId } from '../../utils/create-peer-id.js'
99
import { createValues, Value } from '../../utils/create-values.js'
1010
import Sinon, { SinonStubbedInstance } from 'sinon'
11-
import type { AddressBook } from '@libp2p/interface-peer-store'
1211
import { Providers } from '../../../src/providers.js'
1312
import { PeerRouting } from '../../../src/peer-routing/index.js'
1413
import type { PeerId } from '@libp2p/interface-peer-id'
1514
import { PersistentPeerStore } from '@libp2p/peer-store'
1615
import { MemoryDatastore } from 'datastore-core'
1716
import type { PeerInfo } from '@libp2p/interface-peer-info'
17+
import { EventEmitter } from '@libp2p/interfaces/events'
18+
import type { Libp2pEvents } from '@libp2p/interface-libp2p'
19+
import type { PeerStore } from '@libp2p/interface-peer-store'
1820

1921
const T = MESSAGE_TYPE.GET_PROVIDERS
2022

@@ -23,7 +25,7 @@ describe('rpc - handlers - GetProviders', () => {
2325
let sourcePeer: PeerId
2426
let closerPeer: PeerId
2527
let providerPeer: PeerId
26-
let addressBook: AddressBook
28+
let peerStore: PeerStore
2729
let providers: SinonStubbedInstance<Providers>
2830
let peerRouting: SinonStubbedInstance<PeerRouting>
2931
let handler: GetProvidersHandler
@@ -38,21 +40,21 @@ describe('rpc - handlers - GetProviders', () => {
3840

3941
peerRouting = Sinon.createStubInstance(PeerRouting)
4042
providers = Sinon.createStubInstance(Providers)
43+
peerStore = new PersistentPeerStore({
44+
peerId,
45+
datastore: new MemoryDatastore(),
46+
events: new EventEmitter<Libp2pEvents>()
47+
})
4148

4249
const components: GetProvidersHandlerComponents = {
43-
peerStore: new PersistentPeerStore({
44-
peerId,
45-
datastore: new MemoryDatastore()
46-
})
50+
peerStore
4751
}
4852

4953
handler = new GetProvidersHandler(components, {
5054
peerRouting,
5155
providers,
5256
lan: false
5357
})
54-
55-
addressBook = components.peerStore.addressBook
5658
})
5759

5860
it('errors with an invalid key ', async () => {
@@ -88,8 +90,12 @@ describe('rpc - handlers - GetProviders', () => {
8890
providers.getProviders.withArgs(v.cid).resolves([providerPeer])
8991
peerRouting.getCloserPeersOffline.withArgs(msg.key, sourcePeer).resolves(closer)
9092

91-
await addressBook.set(providerPeer, provider[0].multiaddrs)
92-
await addressBook.set(closerPeer, closer[0].multiaddrs)
93+
await peerStore.merge(providerPeer, {
94+
multiaddrs: provider[0].multiaddrs
95+
})
96+
await peerStore.merge(closerPeer, {
97+
multiaddrs: closer[0].multiaddrs
98+
})
9399

94100
const response = await handler.handle(sourcePeer, msg)
95101

0 commit comments

Comments
 (0)