Skip to content

discv4/discv4_constants.hpp

Namespaces

Name
discv4

Attributes

Name
size_t kWireHashSize
Outer Keccak-256 hash.
size_t kWireSigSize
Recoverable ECDSA signature.
size_t kWirePacketTypeSize
Single packet-type byte.
size_t kWireRecoveryIdSize
Recoverable ECDSA recovery id.
size_t kWireCompactSigSize
size_t kWireHeaderSize
size_t kWirePacketTypeOffset
size_t kNodeIdSize
Node identity.
size_t kNodeIdHexSize
size_t kUncompressedPubKeySize
0x04 prefix + 64 bytes
size_t kIPv4Size
Network.
size_t kUdpBufferSize
uint8_t kPacketTypePing
Packet type identifiers.
uint8_t kPacketTypePong
uint8_t kPacketTypeFindNode
uint8_t kPacketTypeNeighbours
uint8_t kPacketTypeEnrRequest
uint8_t kPacketTypeEnrResponse
uint8_t kProtocolVersion
Protocol version advertised in PING packets.
uint32_t kPacketExpirySeconds
Default packet expiry window (seconds).
auto kDefaultPingTimeout
Default networking timers.
auto kDefaultPeerExpiry
auto kDefaultDialHistoryExpiry
size_t kEnrSeqSize
ENR sequence number field size in PONG (optional, 6-byte big-endian uint48).

Attributes Documentation

variable kWireHashSize

static size_t kWireHashSize = 32;

Outer Keccak-256 hash.

discv4 wire-packet layout constants Layout: hash(32) || signature(65) || packet-type(1) || RLP(payload)

variable kWireSigSize

static size_t kWireSigSize = 65;

Recoverable ECDSA signature.

variable kWirePacketTypeSize

static size_t kWirePacketTypeSize = 1;

Single packet-type byte.

variable kWireRecoveryIdSize

static size_t kWireRecoveryIdSize = 1;

Recoverable ECDSA recovery id.

variable kWireCompactSigSize

static size_t kWireCompactSigSize = kWireSigSize - kWireRecoveryIdSize;

variable kWireHeaderSize

static size_t kWireHeaderSize = kWireHashSize + kWireSigSize + kWirePacketTypeSize;

variable kWirePacketTypeOffset

static size_t kWirePacketTypeOffset = kWireHashSize + kWireSigSize;

variable kNodeIdSize

static size_t kNodeIdSize = 64;

Node identity.

Uncompressed secp256k1 pubkey without 0x04 prefix

variable kNodeIdHexSize

static size_t kNodeIdHexSize = kNodeIdSize * 2;

variable kUncompressedPubKeySize

static size_t kUncompressedPubKeySize = kNodeIdSize + kWirePacketTypeSize;

0x04 prefix + 64 bytes

variable kIPv4Size

static size_t kIPv4Size = 4;

Network.

variable kUdpBufferSize

static size_t kUdpBufferSize = 2048;

variable kPacketTypePing

static uint8_t kPacketTypePing = 0x01U;

Packet type identifiers.

variable kPacketTypePong

static uint8_t kPacketTypePong = 0x02U;

variable kPacketTypeFindNode

static uint8_t kPacketTypeFindNode = 0x03U;

variable kPacketTypeNeighbours

static uint8_t kPacketTypeNeighbours = 0x04U;

variable kPacketTypeEnrRequest

static uint8_t kPacketTypeEnrRequest = 0x05U;

variable kPacketTypeEnrResponse

static uint8_t kPacketTypeEnrResponse = 0x06U;

variable kProtocolVersion

static uint8_t kProtocolVersion = 0x04U;

Protocol version advertised in PING packets.

variable kPacketExpirySeconds

static uint32_t kPacketExpirySeconds = 60U;

Default packet expiry window (seconds).

variable kDefaultPingTimeout

auto kDefaultPingTimeout = std::chrono::milliseconds(5000);

Default networking timers.

variable kDefaultPeerExpiry

auto kDefaultPeerExpiry = std::chrono::seconds(300);

variable kDefaultDialHistoryExpiry

auto kDefaultDialHistoryExpiry = std::chrono::seconds(35);

variable kEnrSeqSize

static size_t kEnrSeqSize = 6;

ENR sequence number field size in PONG (optional, 6-byte big-endian uint48).

Source code

// Copyright 2025 GeniusVentures
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include <chrono>
#include <cstddef>
#include <cstdint>

namespace discv4 {

static constexpr size_t  kWireHashSize           = 32;   
static constexpr size_t  kWireSigSize            = 65;   
static constexpr size_t  kWirePacketTypeSize     = 1;    
static constexpr size_t  kWireRecoveryIdSize     = 1;    
static constexpr size_t  kWireCompactSigSize     = kWireSigSize - kWireRecoveryIdSize;
static constexpr size_t  kWireHeaderSize         = kWireHashSize + kWireSigSize + kWirePacketTypeSize;
static constexpr size_t  kWirePacketTypeOffset   = kWireHashSize + kWireSigSize;

static constexpr size_t  kNodeIdSize             = 64;   
static constexpr size_t  kNodeIdHexSize          = kNodeIdSize * 2;
static constexpr size_t  kUncompressedPubKeySize = kNodeIdSize + kWirePacketTypeSize; 

static constexpr size_t  kIPv4Size               = 4;
static constexpr size_t  kUdpBufferSize          = 2048;

static constexpr uint8_t kPacketTypePing         = 0x01U;
static constexpr uint8_t kPacketTypePong         = 0x02U;
static constexpr uint8_t kPacketTypeFindNode     = 0x03U;
static constexpr uint8_t kPacketTypeNeighbours   = 0x04U;
static constexpr uint8_t kPacketTypeEnrRequest   = 0x05U;
static constexpr uint8_t kPacketTypeEnrResponse  = 0x06U;

static constexpr uint8_t kProtocolVersion        = 0x04U;

static constexpr uint32_t kPacketExpirySeconds   = 60U;

inline constexpr auto kDefaultPingTimeout        = std::chrono::milliseconds(5000);
inline constexpr auto kDefaultPeerExpiry         = std::chrono::seconds(300);
inline constexpr auto kDefaultDialHistoryExpiry  = std::chrono::seconds(35);

static constexpr size_t kEnrSeqSize              = 6;

} // namespace discv4

Updated on 2026-04-13 at 23:22:46 -0700