diff --git a/src/lib/enr/enr.ts b/src/lib/enr/enr.ts index fe7b862480..c92be25b89 100644 --- a/src/lib/enr/enr.ts +++ b/src/lib/enr/enr.ts @@ -31,6 +31,7 @@ export class ENR extends Map { public static readonly RECORD_PREFIX = "enr:"; public seq: SequenceNumber; public signature: Uint8Array | null; + public peerId?: PeerId; constructor( kvs: Record = {}, @@ -40,6 +41,16 @@ export class ENR extends Map { super(Object.entries(kvs)); this.seq = seq; this.signature = signature; + + try { + const publicKey = this.publicKey; + if (publicKey) { + const keypair = createKeypair(this.keypairType, undefined, publicKey); + this.peerId = createPeerIdFromKeypair(keypair); + } + } catch (e) { + dbg("Could not calculate peer id for ENR", e); + } } static createV4( @@ -96,6 +107,7 @@ export class ENR extends Map { } // If seq is an empty array, translate as value 0 const hexSeq = "0x" + (seq.length ? bytesToHex(seq) : "00"); + const enr = new ENR(obj, BigInt(hexSeq), signature); const rlpEncodedBytes = hexToBytes(RLP.encode([seq, ...kvs])); @@ -157,10 +169,6 @@ export class ENR extends Map { return; } - get peerId(): PeerId | undefined { - return this.keypair ? createPeerIdFromKeypair(this.keypair) : undefined; - } - get nodeId(): NodeId | undefined { switch (this.id) { case "v4":