Skip to content

Commit 8fd1455

Browse files
committed
chore: extract test code
createFrom* functions are only used in test. By extracting them in different class it should help bundlers.
1 parent 031f4c0 commit 8fd1455

File tree

5 files changed

+48
-39
lines changed

5 files changed

+48
-39
lines changed

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
import { createSecp256k1PeerId } from "@libp2p/peer-id-factory";
22
import { multiaddr } from "@multiformats/multiaddr";
33
import { ENR } from "@waku/enr";
4+
import { EnrCreator } from "@waku/enr";
45
import type { Waku2 } from "@waku/interfaces";
56
import { expect } from "chai";
67

78
import { fetchNodesUntilCapabilitiesFulfilled } from "./fetch_nodes.js";
89

910
async function createEnr(waku2: Waku2): Promise<ENR> {
1011
const peerId = await createSecp256k1PeerId();
11-
const enr = await ENR.createFromPeerId(peerId);
12+
const enr = await EnrCreator.fromPeerId(peerId);
1213
enr.setLocationMultiaddr(multiaddr("/ip4/18.223.219.100/udp/9000"));
1314
enr.multiaddrs = [
1415
multiaddr("/dns4/node1.do-ams.wakuv2.test.statusim.net/tcp/443/wss"),

packages/enr/src/creator.ts

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { PeerId } from "@libp2p/interface-peer-id";
2+
import type { ENRKey, ENRValue } from "@waku/interfaces";
3+
import { utf8ToBytes } from "@waku/utils";
4+
5+
import { compressPublicKey } from "./crypto.js";
6+
import { ENR } from "./enr.js";
7+
import { getPublicKeyFromPeerId } from "./peer_id.js";
8+
9+
export class EnrCreator {
10+
static fromPublicKey(
11+
publicKey: Uint8Array,
12+
kvs: Record<ENRKey, ENRValue> = {}
13+
): Promise<ENR> {
14+
// EIP-778 specifies that the key must be in compressed format, 33 bytes
15+
if (publicKey.length !== 33) {
16+
publicKey = compressPublicKey(publicKey);
17+
}
18+
return ENR.create({
19+
...kvs,
20+
id: utf8ToBytes("v4"),
21+
secp256k1: publicKey,
22+
});
23+
}
24+
25+
static async fromPeerId(
26+
peerId: PeerId,
27+
kvs: Record<ENRKey, ENRValue> = {}
28+
): Promise<ENR> {
29+
switch (peerId.type) {
30+
case "secp256k1":
31+
return EnrCreator.fromPublicKey(getPublicKeyFromPeerId(peerId), kvs);
32+
default:
33+
throw new Error();
34+
}
35+
}
36+
}

packages/enr/src/enr.spec.ts

+7-6
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ import { assert, expect } from "chai";
77
import { equals } from "uint8arrays/equals";
88

99
import { ERR_INVALID_ID } from "./constants.js";
10+
import { EnrCreator } from "./creator.js";
1011
import { ENR } from "./enr.js";
1112
import { getPrivateKeyFromPeerId } from "./peer_id.js";
1213

1314
describe("ENR", function () {
1415
describe("Txt codec", () => {
1516
it("should encodeTxt and decodeTxt", async () => {
1617
const peerId = await createSecp256k1PeerId();
17-
const enr = await ENR.createFromPeerId(peerId);
18+
const enr = await EnrCreator.fromPeerId(peerId);
1819
const privateKey = await getPrivateKeyFromPeerId(peerId);
1920
enr.setLocationMultiaddr(multiaddr("/ip4/18.223.219.100/udp/9000"));
2021
enr.multiaddrs = [
@@ -106,7 +107,7 @@ describe("ENR", function () {
106107
it("should throw error - no id", async () => {
107108
try {
108109
const peerId = await createSecp256k1PeerId();
109-
const enr = await ENR.createFromPeerId(peerId);
110+
const enr = await EnrCreator.fromPeerId(peerId);
110111
const privateKey = await getPrivateKeyFromPeerId(peerId);
111112
enr.setLocationMultiaddr(multiaddr("/ip4/18.223.219.100/udp/9000"));
112113

@@ -194,7 +195,7 @@ describe("ENR", function () {
194195
privateKey = hexToBytes(
195196
"b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291"
196197
);
197-
record = await ENR.createFromPublicKey(secp.getPublicKey(privateKey));
198+
record = await EnrCreator.fromPublicKey(secp.getPublicKey(privateKey));
198199
record.setLocationMultiaddr(multiaddr("/ip4/127.0.0.1/udp/30303"));
199200
record.seq = seq;
200201
await record.encodeTxt(privateKey);
@@ -239,7 +240,7 @@ describe("ENR", function () {
239240
privateKey = hexToBytes(
240241
"b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291"
241242
);
242-
record = await ENR.createFromPublicKey(secp.getPublicKey(privateKey));
243+
record = await EnrCreator.fromPublicKey(secp.getPublicKey(privateKey));
243244
});
244245

245246
it("should get / set UDP multiaddr", () => {
@@ -308,7 +309,7 @@ describe("ENR", function () {
308309

309310
before(async function () {
310311
peerId = await createSecp256k1PeerId();
311-
enr = await ENR.createFromPeerId(peerId);
312+
enr = await EnrCreator.fromPeerId(peerId);
312313
enr.ip = ip4;
313314
enr.ip6 = ip6;
314315
enr.tcp = tcp;
@@ -388,7 +389,7 @@ describe("ENR", function () {
388389

389390
beforeEach(async function () {
390391
peerId = await createSecp256k1PeerId();
391-
enr = await ENR.createFromPeerId(peerId);
392+
enr = await EnrCreator.fromPeerId(peerId);
392393
privateKey = await getPrivateKeyFromPeerId(peerId);
393394
waku2Protocols = {
394395
relay: false,

packages/enr/src/enr.ts

+2-32
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,10 @@ import {
2323
ERR_NO_SIGNATURE,
2424
MAX_RECORD_SIZE,
2525
} from "./constants.js";
26-
import { compressPublicKey, keccak256, verifySignature } from "./crypto.js";
26+
import { keccak256, verifySignature } from "./crypto.js";
2727
import { multiaddrFromFields } from "./multiaddr_from_fields.js";
2828
import { decodeMultiaddrs, encodeMultiaddrs } from "./multiaddrs_codec.js";
29-
import {
30-
createPeerIdFromPublicKey,
31-
getPublicKeyFromPeerId,
32-
} from "./peer_id.js";
29+
import { createPeerIdFromPublicKey } from "./peer_id.js";
3330
import * as v4 from "./v4.js";
3431
import { decodeWaku2, encodeWaku2 } from "./waku2_codec.js";
3532

@@ -69,33 +66,6 @@ export class ENR extends Map<ENRKey, ENRValue> implements IEnr {
6966
return enr;
7067
}
7168

72-
static createFromPublicKey(
73-
publicKey: Uint8Array,
74-
kvs: Record<ENRKey, ENRValue> = {}
75-
): Promise<ENR> {
76-
// EIP-778 specifies that the key must be in compressed format, 33 bytes
77-
if (publicKey.length !== 33) {
78-
publicKey = compressPublicKey(publicKey);
79-
}
80-
return ENR.create({
81-
...kvs,
82-
id: utf8ToBytes("v4"),
83-
secp256k1: publicKey,
84-
});
85-
}
86-
87-
static async createFromPeerId(
88-
peerId: PeerId,
89-
kvs: Record<ENRKey, ENRValue> = {}
90-
): Promise<ENR> {
91-
switch (peerId.type) {
92-
case "secp256k1":
93-
return ENR.createFromPublicKey(getPublicKeyFromPeerId(peerId), kvs);
94-
default:
95-
throw new Error();
96-
}
97-
}
98-
9969
static async decodeFromValues(decoded: Uint8Array[]): Promise<ENR> {
10070
if (!Array.isArray(decoded)) {
10171
throw new Error("Decoded ENR must be an array");

packages/enr/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export * from "./constants.js";
2+
export * from "./creator.js";
23
export * from "./enr.js";
34
export * from "./peer_id.js";
45
export * from "./waku2_codec.js";

0 commit comments

Comments
 (0)