Skip to content

Commit 11819fc

Browse files
feat: DNS discovery as default bootstrap discovery (#1114)
* use DNS discovery as default bootstrap discovery * fix: failing CI * fix: typo * introduce tagging, components & explicit tests libp2p wasn't by default tagging peers with dns-discovery as "bootstrap" -- we are manually now tagging peers with "dns-discovery", and then running tests according to that * fix: package installs * fix: typedoc CI * change tag name from dns-discovery to bootstrap * update tag name in test * fix CI * address review * add: prod enrtree and use as default
1 parent 1166dbc commit 11819fc

File tree

8 files changed

+207
-88
lines changed

8 files changed

+207
-88
lines changed

package-lock.json

+60-48
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/create/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
},
5252
"dependencies": {
5353
"@chainsafe/libp2p-noise": "^10.1.0",
54-
"@libp2p/bootstrap": "^5.0.0",
5554
"@libp2p/interface-address-manager": "^2.0.1",
5655
"@libp2p/interface-connection": "^3.0.3",
5756
"@libp2p/interface-connection-manager": "^1.3.1",
@@ -68,6 +67,7 @@
6867
"@libp2p/mplex": "^7.0.0",
6968
"@libp2p/websockets": "^5.0.0",
7069
"@waku/core": "*",
70+
"@waku/dns-discovery": "*",
7171
"@waku/peer-exchange": "*",
7272
"interface-datastore": "^7.0.1"
7373
},

packages/create/src/index.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { noise } from "@chainsafe/libp2p-noise";
2-
import { bootstrap } from "@libp2p/bootstrap";
32
import type { PeerDiscovery } from "@libp2p/interface-peer-discovery";
43
import { mplex } from "@libp2p/mplex";
54
import { webSockets } from "@libp2p/websockets";
@@ -14,14 +13,20 @@ import {
1413
wakuStore,
1514
} from "@waku/core";
1615
import { DefaultUserAgent } from "@waku/core";
17-
import { getPredefinedBootstrapNodes } from "@waku/core/lib/predefined_bootstrap_nodes";
16+
import { enrTree, wakuDnsDiscovery } from "@waku/dns-discovery";
1817
import type { FullNode, IRelay, LightNode, RelayNode } from "@waku/interfaces";
1918
import { wakuPeerExchange } from "@waku/peer-exchange";
2019
import type { Libp2p } from "libp2p";
2120
import { createLibp2p, Libp2pOptions } from "libp2p";
2221

2322
import type { Libp2pComponents } from "./libp2p_components.js";
2423

24+
const DEFAULT_NODE_REQUIREMENTS = {
25+
lightPush: 1,
26+
filter: 1,
27+
store: 1,
28+
};
29+
2530
export { Libp2pComponents };
2631

2732
export interface CreateOptions {
@@ -165,7 +170,7 @@ export async function createFullNode(
165170
export function defaultPeerDiscovery(): (
166171
components: Libp2pComponents
167172
) => PeerDiscovery {
168-
return bootstrap({ list: getPredefinedBootstrapNodes() });
173+
return wakuDnsDiscovery(enrTree["PROD"], DEFAULT_NODE_REQUIREMENTS);
169174
}
170175

171176
export async function defaultLibp2p(

packages/dns-discovery/src/dns.spec.ts

+26-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { expect } from "chai";
33
import { DnsClient, DnsNodeDiscovery } from "./dns.js";
44
import testData from "./testdata.json" assert { type: "json" };
55

6+
import { enrTree } from "./index.js";
7+
68
const mockData = testData.dns;
79

810
const host = "nodes.example.org";
@@ -260,9 +262,6 @@ describe("DNS Node Discovery w/ capabilities", () => {
260262
});
261263

262264
describe("DNS Node Discovery [live data]", function () {
263-
const publicKey = "AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM";
264-
const fqdn = "test.waku.nodes.status.im";
265-
const enrTree = `enrtree://${publicKey}@${fqdn}`;
266265
const maxQuantity = 3;
267266

268267
before(function () {
@@ -275,7 +274,30 @@ describe("DNS Node Discovery [live data]", function () {
275274
this.timeout(10000);
276275
// Google's dns server address. Needs to be set explicitly to run in CI
277276
const dnsNodeDiscovery = DnsNodeDiscovery.dnsOverHttp();
278-
const peers = await dnsNodeDiscovery.getPeers([enrTree], {
277+
const peers = await dnsNodeDiscovery.getPeers([enrTree.TEST], {
278+
relay: maxQuantity,
279+
store: maxQuantity,
280+
filter: maxQuantity,
281+
lightPush: maxQuantity,
282+
});
283+
284+
expect(peers.length).to.eq(maxQuantity);
285+
286+
const multiaddrs = peers.map((peer) => peer.multiaddrs).flat();
287+
288+
const seen: string[] = [];
289+
for (const ma of multiaddrs) {
290+
expect(ma).to.not.be.undefined;
291+
expect(seen).to.not.include(ma!.toString());
292+
seen.push(ma!.toString());
293+
}
294+
});
295+
296+
it(`should retrieve ${maxQuantity} multiaddrs for prod.waku.nodes.status.im`, async function () {
297+
this.timeout(10000);
298+
// Google's dns server address. Needs to be set explicitly to run in CI
299+
const dnsNodeDiscovery = DnsNodeDiscovery.dnsOverHttp();
300+
const peers = await dnsNodeDiscovery.getPeers([enrTree.PROD], {
279301
relay: maxQuantity,
280302
store: maxQuantity,
281303
filter: maxQuantity,

0 commit comments

Comments
 (0)