@libp2p/kad-dht 3.0.4 → 3.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -3
- package/dist/src/message/index.js +2 -2
- package/dist/src/message/index.js.map +1 -1
- package/dist/src/query/manager.d.ts.map +1 -1
- package/dist/src/query/manager.js +5 -1
- package/dist/src/query/manager.js.map +1 -1
- package/dist/src/query/query-path.d.ts +5 -0
- package/dist/src/query/query-path.d.ts.map +1 -1
- package/dist/src/query/query-path.js +3 -5
- package/dist/src/query/query-path.js.map +1 -1
- package/dist/src/rpc/handlers/get-providers.d.ts +1 -1
- package/package.json +20 -19
- package/src/message/index.ts +2 -2
- package/src/query/manager.ts +6 -1
- package/src/query/query-path.ts +9 -6
package/README.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# @libp2p/kad-dht <!-- omit in toc -->
|
|
2
2
|
|
|
3
3
|
[](http://libp2p.io/)
|
|
4
|
-
[](http://webchat.freenode.net/?channels=%23libp2p)
|
|
5
4
|
[](https://discuss.libp2p.io)
|
|
6
5
|
[](https://codecov.io/gh/libp2p/js-libp2p-kad-dht)
|
|
7
6
|
[](https://github.com/libp2p/js-libp2p-kad-dht/actions/workflows/js-test-and-release.yml)
|
|
@@ -20,7 +19,7 @@
|
|
|
20
19
|
- [Spec](#spec)
|
|
21
20
|
- [Contribute](#contribute)
|
|
22
21
|
- [License](#license)
|
|
23
|
-
- [
|
|
22
|
+
- [Contribute](#contribute-1)
|
|
24
23
|
|
|
25
24
|
## Install
|
|
26
25
|
|
|
@@ -96,6 +95,6 @@ Licensed under either of
|
|
|
96
95
|
- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)
|
|
97
96
|
- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)
|
|
98
97
|
|
|
99
|
-
##
|
|
98
|
+
## Contribute
|
|
100
99
|
|
|
101
100
|
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { peerIdFromBytes } from '@libp2p/peer-id';
|
|
2
|
-
import {
|
|
2
|
+
import { multiaddr } from '@multiformats/multiaddr';
|
|
3
3
|
import { Libp2pRecord } from '@libp2p/record';
|
|
4
4
|
import { Message as PBMessage } from './dht.js';
|
|
5
5
|
export const MESSAGE_TYPE = PBMessage.MessageType;
|
|
@@ -74,7 +74,7 @@ function fromPbPeer(peer) {
|
|
|
74
74
|
}
|
|
75
75
|
return {
|
|
76
76
|
id: peerIdFromBytes(peer.id),
|
|
77
|
-
multiaddrs: (peer.addrs ?? []).map((a) =>
|
|
77
|
+
multiaddrs: (peer.addrs ?? []).map((a) => multiaddr(a)),
|
|
78
78
|
protocols: []
|
|
79
79
|
};
|
|
80
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/message/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/message/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/query/manager.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/query/manager.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAK9D,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,WAAW,CAAA;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,SAAS,EAAE,aAAa;IAC3D,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IACtB,aAAa,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAQ;gBAEV,IAAI,EAAE,gBAAgB;IAUnC,IAAI,CAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAInC,SAAS;IAIT;;OAEG;IACG,KAAK;IAIX;;OAEG;IACG,IAAI;IAUF,GAAG,CAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE,YAAiB;CAoHhG"}
|
|
@@ -8,6 +8,7 @@ import { setMaxListeners } from 'events';
|
|
|
8
8
|
import { EventEmitter, CustomEvent } from '@libp2p/interfaces/events';
|
|
9
9
|
import { logger } from '@libp2p/logger';
|
|
10
10
|
import { Components } from '@libp2p/components';
|
|
11
|
+
import { PeerSet } from '@libp2p/peer-collections';
|
|
11
12
|
const METRIC_RUNNING_QUERIES = 'running-queries';
|
|
12
13
|
/**
|
|
13
14
|
* Keeps track of all running queries
|
|
@@ -97,6 +98,8 @@ export class QueryManager {
|
|
|
97
98
|
log.error('Running query with no peers');
|
|
98
99
|
return;
|
|
99
100
|
}
|
|
101
|
+
// make sure we don't get trapped in a loop
|
|
102
|
+
const peersSeen = new PeerSet();
|
|
100
103
|
// Create query paths from the starting peers
|
|
101
104
|
const paths = peersToQuery.map((peer, index) => {
|
|
102
105
|
return queryPath({
|
|
@@ -110,7 +113,8 @@ export class QueryManager {
|
|
|
110
113
|
alpha: this.alpha,
|
|
111
114
|
cleanUp,
|
|
112
115
|
queryFuncTimeout: options.queryFuncTimeout,
|
|
113
|
-
log
|
|
116
|
+
log,
|
|
117
|
+
peersSeen
|
|
114
118
|
});
|
|
115
119
|
});
|
|
116
120
|
// Execute the query along each disjoint path and yield their results as they become available
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/query/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EACL,KAAK,EAAE,CAAC,EAAE,qBAAqB,EAChC,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,UAAU,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAKvC,OAAO,EAAE,UAAU,EAAiB,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/query/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import type { CleanUpEvents } from './manager.js';
|
|
|
4
4
|
import type { Logger } from '@libp2p/logger';
|
|
5
5
|
import type { QueryFunc } from '../query/types.js';
|
|
6
6
|
import type { QueryEvent } from '@libp2p/interface-dht';
|
|
7
|
+
import type { PeerSet } from '@libp2p/peer-collections';
|
|
7
8
|
export interface QueryPathOptions {
|
|
8
9
|
/**
|
|
9
10
|
* What are we trying to find
|
|
@@ -49,6 +50,10 @@ export interface QueryPathOptions {
|
|
|
49
50
|
* Query log
|
|
50
51
|
*/
|
|
51
52
|
log: Logger;
|
|
53
|
+
/**
|
|
54
|
+
* Set of peers seen by this and other paths
|
|
55
|
+
*/
|
|
56
|
+
peersSeen: PeerSet;
|
|
52
57
|
}
|
|
53
58
|
/**
|
|
54
59
|
* Walks a path through the DHT, calling the passed query function for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-path.d.ts","sourceRoot":"","sources":["../../../src/query/query-path.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAIvD,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,GAAG,EAAE,UAAU,CAAA;IAEf;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,MAAM,EAAE,WAAW,CAAA;IAEnB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAA;IAEhB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC,aAAa,CAAC,CAAA;IAEpC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"query-path.d.ts","sourceRoot":"","sources":["../../../src/query/query-path.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAIvD,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,GAAG,EAAE,UAAU,CAAA;IAEf;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,MAAM,EAAE,WAAW,CAAA;IAEnB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAA;IAEhB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC,aAAa,CAAC,CAAA;IAEpC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IAEX;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;CACnB;AAED;;;GAGG;AACH,wBAAwB,SAAS,CAAE,OAAO,EAAE,gBAAgB,+CA+G3D"}
|
|
@@ -13,7 +13,7 @@ const MAX_XOR = BigInt('0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
|
|
13
13
|
* every peer encountered that we have not seen before
|
|
14
14
|
*/
|
|
15
15
|
export async function* queryPath(options) {
|
|
16
|
-
const { key, startingPeer, ourPeerId, signal, query, alpha, pathIndex, numPaths, cleanUp, queryFuncTimeout, log } = options;
|
|
16
|
+
const { key, startingPeer, ourPeerId, signal, query, alpha, pathIndex, numPaths, cleanUp, queryFuncTimeout, log, peersSeen } = options;
|
|
17
17
|
// Only ALPHA node/value lookups are allowed at any given time for each process
|
|
18
18
|
// https://github.com/libp2p/specs/tree/master/kad-dht#alpha-concurrency-parameter-%CE%B1
|
|
19
19
|
const queue = new Queue({
|
|
@@ -21,8 +21,6 @@ export async function* queryPath(options) {
|
|
|
21
21
|
});
|
|
22
22
|
// perform lookups on kadId, not the actual value
|
|
23
23
|
const kadId = await convertBuffer(key);
|
|
24
|
-
// make sure we don't get trapped in a loop
|
|
25
|
-
const peersSeen = new Set();
|
|
26
24
|
/**
|
|
27
25
|
* Adds the passed peer to the query queue if it's not us and no
|
|
28
26
|
* other path has passed through this peer
|
|
@@ -31,7 +29,7 @@ export async function* queryPath(options) {
|
|
|
31
29
|
if (peer == null) {
|
|
32
30
|
return;
|
|
33
31
|
}
|
|
34
|
-
peersSeen.add(peer
|
|
32
|
+
peersSeen.add(peer);
|
|
35
33
|
const peerXor = BigInt('0x' + toString(xor(peerKadId, kadId), 'base16'));
|
|
36
34
|
queue.add(async () => {
|
|
37
35
|
let timeout;
|
|
@@ -55,7 +53,7 @@ export async function* queryPath(options) {
|
|
|
55
53
|
// if there are closer peers and the query has not completed, continue the query
|
|
56
54
|
if (event.name === 'PEER_RESPONSE') {
|
|
57
55
|
for (const closerPeer of event.closer) {
|
|
58
|
-
if (peersSeen.has(closerPeer.id
|
|
56
|
+
if (peersSeen.has(closerPeer.id)) { // eslint-disable-line max-depth
|
|
59
57
|
log('already seen %p in query', closerPeer.id);
|
|
60
58
|
continue;
|
|
61
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-path.js","sourceRoot":"","sources":["../../../src/query/query-path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"query-path.js","sourceRoot":"","sources":["../../../src/query/query-path.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ export declare class GetProvidersHandler implements DHTMessageHandler, Initializ
|
|
|
18
18
|
constructor(init: GetProvidersHandlerInit);
|
|
19
19
|
init(components: Components): void;
|
|
20
20
|
handle(peerId: PeerId, msg: Message): Promise<Message>;
|
|
21
|
-
_getAddresses(peerId: PeerId): Promise<import("@multiformats/multiaddr
|
|
21
|
+
_getAddresses(peerId: PeerId): Promise<import("@multiformats/multiaddr").Multiaddr[]>;
|
|
22
22
|
_getPeers(peerIds: PeerId[]): Promise<PeerInfo[]>;
|
|
23
23
|
}
|
|
24
24
|
//# sourceMappingURL=get-providers.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/kad-dht",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.6",
|
|
4
4
|
"description": "JavaScript implementation of the Kad-DHT for libp2p",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p-kad-dht#readme",
|
|
@@ -138,22 +138,23 @@
|
|
|
138
138
|
},
|
|
139
139
|
"dependencies": {
|
|
140
140
|
"@libp2p/components": "^2.0.4",
|
|
141
|
-
"@libp2p/crypto": "^1.0.
|
|
142
|
-
"@libp2p/interface-address-manager": "^1.0.
|
|
143
|
-
"@libp2p/interface-connection": "^3.0.
|
|
144
|
-
"@libp2p/interface-connection-manager": "^1.
|
|
145
|
-
"@libp2p/interface-dht": "^1.0.
|
|
146
|
-
"@libp2p/interface-peer-discovery": "^1.0.
|
|
147
|
-
"@libp2p/interface-peer-id": "^1.0.
|
|
148
|
-
"@libp2p/interface-peer-info": "^1.0.
|
|
149
|
-
"@libp2p/interface-peer-store": "^1.
|
|
150
|
-
"@libp2p/interface-registrar": "^2.0.
|
|
151
|
-
"@libp2p/interfaces": "^3.0.
|
|
152
|
-
"@libp2p/logger": "^2.0.
|
|
153
|
-
"@libp2p/peer-
|
|
154
|
-
"@libp2p/
|
|
141
|
+
"@libp2p/crypto": "^1.0.4",
|
|
142
|
+
"@libp2p/interface-address-manager": "^1.0.3",
|
|
143
|
+
"@libp2p/interface-connection": "^3.0.2",
|
|
144
|
+
"@libp2p/interface-connection-manager": "^1.1.1",
|
|
145
|
+
"@libp2p/interface-dht": "^1.0.1",
|
|
146
|
+
"@libp2p/interface-peer-discovery": "^1.0.1",
|
|
147
|
+
"@libp2p/interface-peer-id": "^1.0.4",
|
|
148
|
+
"@libp2p/interface-peer-info": "^1.0.3",
|
|
149
|
+
"@libp2p/interface-peer-store": "^1.2.2",
|
|
150
|
+
"@libp2p/interface-registrar": "^2.0.3",
|
|
151
|
+
"@libp2p/interfaces": "^3.0.3",
|
|
152
|
+
"@libp2p/logger": "^2.0.1",
|
|
153
|
+
"@libp2p/peer-collections": "^2.2.0",
|
|
154
|
+
"@libp2p/peer-id": "^1.1.15",
|
|
155
|
+
"@libp2p/record": "^2.0.2",
|
|
155
156
|
"@libp2p/topology": "^3.0.0",
|
|
156
|
-
"@multiformats/multiaddr": "^
|
|
157
|
+
"@multiformats/multiaddr": "^11.0.0",
|
|
157
158
|
"abortable-iterator": "^4.0.2",
|
|
158
159
|
"any-signal": "^3.0.0",
|
|
159
160
|
"datastore-core": "^8.0.1",
|
|
@@ -183,9 +184,9 @@
|
|
|
183
184
|
"varint": "^6.0.0"
|
|
184
185
|
},
|
|
185
186
|
"devDependencies": {
|
|
186
|
-
"@libp2p/interface-mocks": "^4.0.
|
|
187
|
-
"@libp2p/peer-id-factory": "^1.0.
|
|
188
|
-
"@libp2p/peer-store": "^3.
|
|
187
|
+
"@libp2p/interface-mocks": "^4.0.3",
|
|
188
|
+
"@libp2p/peer-id-factory": "^1.0.18",
|
|
189
|
+
"@libp2p/peer-store": "^3.1.4",
|
|
189
190
|
"@types/lodash.random": "^3.2.6",
|
|
190
191
|
"@types/lodash.range": "^3.2.6",
|
|
191
192
|
"@types/varint": "^6.0.0",
|
package/src/message/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { peerIdFromBytes } from '@libp2p/peer-id'
|
|
2
|
-
import {
|
|
2
|
+
import { multiaddr } from '@multiformats/multiaddr'
|
|
3
3
|
import { Libp2pRecord } from '@libp2p/record'
|
|
4
4
|
import { Message as PBMessage } from './dht.js'
|
|
5
5
|
import type { PeerInfo } from '@libp2p/interface-peer-info'
|
|
@@ -104,7 +104,7 @@ function fromPbPeer (peer: PBMessage.Peer) {
|
|
|
104
104
|
|
|
105
105
|
return {
|
|
106
106
|
id: peerIdFromBytes(peer.id),
|
|
107
|
-
multiaddrs: (peer.addrs ?? []).map((a) =>
|
|
107
|
+
multiaddrs: (peer.addrs ?? []).map((a) => multiaddr(a)),
|
|
108
108
|
protocols: []
|
|
109
109
|
}
|
|
110
110
|
}
|
package/src/query/manager.ts
CHANGED
|
@@ -14,6 +14,7 @@ import type { Startable } from '@libp2p/interfaces/startable'
|
|
|
14
14
|
import type { QueryFunc } from './types.js'
|
|
15
15
|
import type { QueryOptions } from '@libp2p/interface-dht'
|
|
16
16
|
import { Components, Initializable } from '@libp2p/components'
|
|
17
|
+
import { PeerSet } from '@libp2p/peer-collections'
|
|
17
18
|
|
|
18
19
|
const METRIC_RUNNING_QUERIES = 'running-queries'
|
|
19
20
|
|
|
@@ -139,6 +140,9 @@ export class QueryManager implements Startable, Initializable {
|
|
|
139
140
|
return
|
|
140
141
|
}
|
|
141
142
|
|
|
143
|
+
// make sure we don't get trapped in a loop
|
|
144
|
+
const peersSeen = new PeerSet()
|
|
145
|
+
|
|
142
146
|
// Create query paths from the starting peers
|
|
143
147
|
const paths = peersToQuery.map((peer, index) => {
|
|
144
148
|
return queryPath({
|
|
@@ -152,7 +156,8 @@ export class QueryManager implements Startable, Initializable {
|
|
|
152
156
|
alpha: this.alpha,
|
|
153
157
|
cleanUp,
|
|
154
158
|
queryFuncTimeout: options.queryFuncTimeout,
|
|
155
|
-
log
|
|
159
|
+
log,
|
|
160
|
+
peersSeen
|
|
156
161
|
})
|
|
157
162
|
})
|
|
158
163
|
|
package/src/query/query-path.ts
CHANGED
|
@@ -13,6 +13,7 @@ import type { CleanUpEvents } from './manager.js'
|
|
|
13
13
|
import type { Logger } from '@libp2p/logger'
|
|
14
14
|
import type { QueryFunc } from '../query/types.js'
|
|
15
15
|
import type { QueryEvent } from '@libp2p/interface-dht'
|
|
16
|
+
import type { PeerSet } from '@libp2p/peer-collections'
|
|
16
17
|
|
|
17
18
|
const MAX_XOR = BigInt('0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF')
|
|
18
19
|
|
|
@@ -71,6 +72,11 @@ export interface QueryPathOptions {
|
|
|
71
72
|
* Query log
|
|
72
73
|
*/
|
|
73
74
|
log: Logger
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Set of peers seen by this and other paths
|
|
78
|
+
*/
|
|
79
|
+
peersSeen: PeerSet
|
|
74
80
|
}
|
|
75
81
|
|
|
76
82
|
/**
|
|
@@ -78,7 +84,7 @@ export interface QueryPathOptions {
|
|
|
78
84
|
* every peer encountered that we have not seen before
|
|
79
85
|
*/
|
|
80
86
|
export async function * queryPath (options: QueryPathOptions) {
|
|
81
|
-
const { key, startingPeer, ourPeerId, signal, query, alpha, pathIndex, numPaths, cleanUp, queryFuncTimeout, log } = options
|
|
87
|
+
const { key, startingPeer, ourPeerId, signal, query, alpha, pathIndex, numPaths, cleanUp, queryFuncTimeout, log, peersSeen } = options
|
|
82
88
|
// Only ALPHA node/value lookups are allowed at any given time for each process
|
|
83
89
|
// https://github.com/libp2p/specs/tree/master/kad-dht#alpha-concurrency-parameter-%CE%B1
|
|
84
90
|
const queue = new Queue({
|
|
@@ -88,9 +94,6 @@ export async function * queryPath (options: QueryPathOptions) {
|
|
|
88
94
|
// perform lookups on kadId, not the actual value
|
|
89
95
|
const kadId = await convertBuffer(key)
|
|
90
96
|
|
|
91
|
-
// make sure we don't get trapped in a loop
|
|
92
|
-
const peersSeen = new Set()
|
|
93
|
-
|
|
94
97
|
/**
|
|
95
98
|
* Adds the passed peer to the query queue if it's not us and no
|
|
96
99
|
* other path has passed through this peer
|
|
@@ -100,7 +103,7 @@ export async function * queryPath (options: QueryPathOptions) {
|
|
|
100
103
|
return
|
|
101
104
|
}
|
|
102
105
|
|
|
103
|
-
peersSeen.add(peer
|
|
106
|
+
peersSeen.add(peer)
|
|
104
107
|
|
|
105
108
|
const peerXor = BigInt('0x' + toString(xor(peerKadId, kadId), 'base16'))
|
|
106
109
|
|
|
@@ -130,7 +133,7 @@ export async function * queryPath (options: QueryPathOptions) {
|
|
|
130
133
|
// if there are closer peers and the query has not completed, continue the query
|
|
131
134
|
if (event.name === 'PEER_RESPONSE') {
|
|
132
135
|
for (const closerPeer of event.closer) {
|
|
133
|
-
if (peersSeen.has(closerPeer.id
|
|
136
|
+
if (peersSeen.has(closerPeer.id)) { // eslint-disable-line max-depth
|
|
134
137
|
log('already seen %p in query', closerPeer.id)
|
|
135
138
|
continue
|
|
136
139
|
}
|