@waku/enr
Version:
ENR (EIP-778) for Waku
32 lines • 1.3 kB
JavaScript
import { multiaddr } from "@multiformats/multiaddr";
import { MULTIADDR_LENGTH_SIZE } from "./constants.js";
export function decodeMultiaddrs(bytes) {
const multiaddrs = [];
let index = 0;
while (index < bytes.length) {
const sizeDataView = new DataView(bytes.buffer, index, MULTIADDR_LENGTH_SIZE);
const size = sizeDataView.getUint16(0);
index += MULTIADDR_LENGTH_SIZE;
const multiaddrBytes = bytes.slice(index, index + size);
index += size;
multiaddrs.push(multiaddr(multiaddrBytes));
}
return multiaddrs;
}
export function encodeMultiaddrs(multiaddrs) {
const totalLength = multiaddrs.reduce((acc, ma) => acc + MULTIADDR_LENGTH_SIZE + ma.bytes.length, 0);
const bytes = new Uint8Array(totalLength);
const dataView = new DataView(bytes.buffer);
let index = 0;
multiaddrs.forEach((multiaddr) => {
if (multiaddr.getPeerId())
throw new Error("`multiaddr` field MUST not contain peer id");
// Prepend the size of the next entry
dataView.setUint16(index, multiaddr.bytes.length);
index += MULTIADDR_LENGTH_SIZE;
bytes.set(multiaddr.bytes, index);
index += multiaddr.bytes.length;
});
return bytes;
}
//# sourceMappingURL=multiaddrs_codec.js.map