when (NimMajor, NimMinor) < (1, 4): {.push raises: [Defect].} else: {.push raises: [].} import std/[options, sequtils], stew/[endians2, results], stew/shims/net, eth/keys, libp2p/[multiaddress, multicodec], libp2p/crypto/crypto import ../common/enr const MultiaddrEnrField* = "multiaddrs" func encodeMultiaddrs*(multiaddrs: seq[MultiAddress]): seq[byte] = var buffer = newSeq[byte]() for multiaddr in multiaddrs: let raw = multiaddr.data.buffer # binary encoded multiaddr size = raw.len.uint16.toBytes(Endianness.bigEndian) # size as Big Endian unsigned 16-bit integer buffer.add(concat(@size, raw)) buffer func readBytes(rawBytes: seq[byte], numBytes: int, pos: var int = 0): Result[seq[byte], cstring] = ## Attempts to read `numBytes` from a sequence, from ## position `pos`. Returns the requested slice or ## an error if `rawBytes` boundary is exceeded. ## ## If successful, `pos` is advanced by `numBytes` if rawBytes[pos..^1].len() < numBytes: return err("insufficient bytes") let slicedSeq = rawBytes[pos..