This page will include descriptions of all messages used in Nyzo. Deprecated messages will not be included.
The 200 - 299 range is defined as "test messages" in the current code comments. However, the ping (200/201) message
pair, which is the only message pair in the range, is used in standard operation. The test range will be absorbed
into the standard operation range, which will encompass 0 - 299. In anticipation of this change, the ping (200) and
ping response (201) are currently included in this section.
A placeholder number. Unused. As the name indicates, not a valid message.
Contains a single Nyzo transaction.
Returned to the sender of a transaction message. Indicates whether the transaction was accepted. Includes a
field for a human-readable message explaining acceptance or rejection of the transaction.
Requests the height and hash of the verifier's current frozen edge.
Returned in response to a previous-hash request. Should contain the height and hash of the frozen edge. This
information is used when building transactions.
Used by verifiers to send newly produced blocks to other verifiers.
Acknowledges receipt of a new block.
Used to request a series of blocks and, optionally, an initial balance list.
Sent in response to a block request. To conserve resources, verifiers are configured to respond to block
requests for no more than 10 blocks at a time and to limit frequency of responses that include balance
Requests pending transactions from a verifier. This request must be self-signed (signed with the verifier's
own private key).
Sent in response to a transaction-pool request. If the request is not self-signed, a valid but empty
response is returned. Contains full transaction information for all pending transactions on the verifier.
Requests a list of all nodes in the cycle.
Sent in response to a mesh request. Returns a list of all nodes in the cycle. Each node includes identifier,
IP address, TCP port, and queue timestamp according to the responding verifier. Currently has a maximum size
of 10,000 nodes, but this limit should not be a concern for many years.
Requests the status of the verifier. If the request is self-signed (signed with the verifier's own private
key), the status response will contain additional details not contained in a typical status response.
Sent in response to a status request. Provides, in plain text, various information about the current
operational state of the verifier. If the status request is self-signed (signed with the verifier's own
private key), this response will contain additional details not contained in a typical status response.
Sent to indicate choice of a block to become the new frozen edge. Contains the hash and block height of the
block, along with the current timestamp. Sent over UDP.
An empty message indicating receipt of a block vote. While verifiers still produce this message in response
to TCP block vote messages, they are seldom used because block votes are now sent over UDP.
Sent to indicate choice of the next verifier to join the cycle. Sent over UDP.
new-verifier vote response
An empty message indicating receipt of a new-verifier vote. While verifiers still produce this message in
response to TCP new-verifier vote messages, they are seldom used because new-verifier votes are now sent
Requests a verifier's block vote at a specified height.
Sent in response to a missing-block-vote request. Contains the vote for the requested height, if available.
Requests a missing block with a specified hash and height.
Sent in response to a missing-block request. Contains the block with the request height and hash, if
Requests the current timestamp of a verifier.
Sent in a response to a timestamp request. Contains the current timestamp of the verifier.
hash-vote override request
Requests setting the manual block-vote override to a specified hash at a specified height. If the hash is
all zeros, clears the manual block-vote override at the specified height. This request must be self-signed
(signed with the verifier's own private key).
hash-vote override response
Acknowledges receipt of a hash-vote override request. Indicates whether the override was accepted. Includes
a plain-text explanation.
consensus-threshold override request
Requests setting the consensus threshold to a value other than 75% for the specified height. Expressed as an
integer percentage of cycle length. If the value is 0, clears the consensus-threshold override at the
specified height. This request must be self-signed (signed with the verifier's own private key).
consensus-threshold override response
Acknowledges receipt of a consensus-threshold override request. Indicates whether the override was accepted.
Includes a plain-text explanation.
new-verifier-vote override request
Requests setting the new-verifier vote to the specified identifier. A value of all zeros erases the
override. If not erased with a new override request, the override will persist until restart of the verifier
or until the verifier represented by the override joins the cycle. This request must be self-signed (signed
with the verifier's own private key).
new-verifier-vote override response
Acknowledges receipt of a new-verifier-vote override request. Indicates whether the override was accepted.
Includes a plain-text explanation.
Requests information useful for a verifier to begin tracking the cycle. This request contains a field
for the TCP port of the requesting verifier, but the field is no longer used.
Sent in response to a bootstrap request. Contains the frozen-edge height, frozen-edge hash, and identifiers
in the cycle leading up to the frozen edge. This response is used by the
ChainInitializationManager, which is used by both the verifier and client run
modes to initialize blockchain tracking. This response is also used by the
CycleTransactionSignScript to determine the next verifiers in the cycle and by
SentinelUtil to initialize the frozen edge.
Requests a block and the cycle's corresponding block votes for a particular height.
Sent in response to a block-with-votes request. Contains a block and the cycle's latest block votes for the
height of the block. Only produced for blocks at or behind the frozen edge.
Sent from an in-cycle verifier to all other in-cycle verifiers to indicate which verifiers should be removed
from the cycle due to poor performance.
An empty message that acknowledges a verifier-removal-vote message.
Requests a list of all nodes, both in-cycle and out-of-cycle.
Sent in response to a full-mesh request. The structure is the same as message 16
(mesh response). Currently has a limit of 10,000 nodes. If the size of the full mesh is more than 10,000
nodes, includes all in-cycle nodes and a random subset of out-of-cycle nodes.
Sent to request registering or updating a verifier's entry on another verifier. If the sending verifier is
in-cycle or the update does not result in an identifier change at the IP address, this results in an
immediate update. If the sending verifier is out-of-cycle and the message would either result in an
identifier change or an addition of a new entry, the node is added to a queue for later querying before an
update is performed.
Sent in response to a node join. Results in the same updates as a node join, additionally updating
information for out-of-cycle nodes that is not updated in some cases due to node joins.
frozen-edge balance list request
Requests the balance list of the verifier's current frozen edge. Does not specify height. Currently only
used by MeshListenerStressScript.
frozen-edge balance list response
Sent in response to a frozen-edge balance list request. Contains the balance list of the current frozen
edge. Only provided once per IP address per 10 minutes unless the IP address is whitelisted by the verifier.
If requested more frequently, an empty but valid response is produced.
Used by sentinels to send blocks for verifiers attempting to join the cycle. Contains only a verification
timestamp and the block signature in the message object. Sent over UDP.
Unused. Reserved to preserve request/response alignment with even and odd message numbers. Minimal blocks
have only been sent over UDP, and responses have never been sent to UDP messages.
Requests the IPv4 address of this host as seen from the receiver. This is used by the sentinel in the
automatic whitelist negotiation process.
Sent in response to an IP-address request. Contains the IPv4 address of the requester as seen by this host.
A simple message for checking reachability.
Sent in response to a ping. Includes a human-readable message.
This is described as "debugging and private messages" in the current code, and the whitelist request (424) and
response (425) are currently included in this range. As the standard-operation range already includes several other
private (self-signed) messages, the whitelist request and response would be more appropriately located in that
Designed to request rejection of blocks to simulate a brief outage. This message is not
Designed to be sent in response to a block-rejection request. This message is not yet
Designed to request that a verifier fail to produce a block for two cycles to simulate a verifier tracking
problem. This message is not yet implemented.
Designed to be sent in response to a detachment request. This message is not yet
unfrozen-block-pool purge request
Requests clearing of the unfrozenBlocks map in
unfrozen-block-pool purge response
Indicates whether the unfrozen-block-pool purge request was accepted. Includes a plain-text explanation.
unfrozen-block-pool status request
Requests information about the contents of the unfrozenBlocks map in
unfrozen-block-pool status response
Produced in response to an unfrozen-block-pool status request. Shows information about block heights,
hashes, verifier identifiers, chain scores, and block vote.
mesh status request
Requests textual information regarding the nodes returned by the
mesh status response
Produced in response to a mesh status request. This message was used extensively in pre-release testing.
However, this response is limited to 2000 nodes, which limits its utility with the current Nyzo queue.
Intended to request completely pausing a verifier to simulate an outage. This message
is not currently implemented.
Intended to be produced in response to a toggle-pause request. This message is not
consensus-tally status request
Requests the internal state of the BlockVoteManager for the block one
past the frozen edge.
consensus-tally status response
Provides a plain-text list of all block votes in BlockVoteManager for
the block one past the frozen edge. First displays the nickname (or identifier, if no nickname is available)
and the compact hash of the vote of each in-cycle verifier from which a vote has been received. Then,
displays the full hash and vote count for each block for which a vote has been received.
new-verifier-tally status request
Requests the internal state of the NewVerifierVoteManager
new-verifier-tally status response
Provides a plain-text list of the identifiers, nicknames (if available), and vote counts in