Presence

Planned Upgrade

Introduction

A Presence object is a node's business card on the Ixian network. It bundles a node's identity (wallet address and public key) with a list of one or more network endpoints, called PresenceAddresses. This allows other nodes to discover and connect to it. A node broadcasts its Presence to the network, and Master Nodes collect these broadcasts to build a distributed network map known as the Presence List.

This document describes the on-wire serialization formats for the Presence container and its nested PresenceAddress and SignerPowSolution structures.

Core Data Types

  • IxiVarInt / IxiVarUInt: See IxiVarInt Encoding.
  • IxiBytes: See IxiBytes Encoding.
  • string: A standard UTF-8 encoded string, prefixed with its length.
  • char: A single byte representing a character.

Top-Level Presence Structure (v1)

This is the main container object.

FieldData TypeMinMaxDescription
versionIxiVarUInt1The Presence structure version.
walletIxiBytes**The wallet address of the node.
pubkeyIxiBytes**The public key associated with the wallet address.
metadataIxiBytes0*Optional, application-specific metadata.
addressCountIxiVarUInt1*The number of PresenceAddress entries that follow.
addressesPresenceAddress[]**An array of contact addresses for the node.

PresenceAddress Structure (v2)

Each Presence object contains one or more PresenceAddress entries, each representing a specific client instance or endpoint for the node. Each PresenceAddress is individually signed.

FieldData TypeMinMaxDescription
versionIxiVarUInt2The PresenceAddress structure version.
deviceIxiBytes**A unique identifier for this specific device or client instance.
addressstring**The network contact address (e.g., "123.45.67.89:10234").
typechar11A character code for the node type: 'M' (Master), 'H' (Full History), 'R' (Relay), 'C' (Client).
nodeVersionstring**The version string of the Ixian node software.
lastSeenTimeIxiVarInt**The Unix timestamp when this presence entry was last updated.
signatureIxiBytes**A signature over the checksum of this PresenceAddress entry, created with the node's private key.
powSolutionIxiBytes0*Optional. A serialized SignerPowSolution object, required for 'M' and 'H' type nodes.

SignerPowSolution Structure

This structure provides a Proof-of-Work solution that is required for Master Nodes to be listed in the Presence List. It proves the node has expended computational effort.

FieldData TypeMinMaxDescription
blockNumIxiVarUInt**The block number this PoW solution is valid for.
solutionIxiBytes164The nonce or solution that satisfies the PoW challenge.
signingPubKeyIxiBytes**The public key used in the PoW calculation.

Behavioral Notes

  • Individual Signatures: The top-level Presence object is an unsigned container. Security and authenticity are enforced at the PresenceAddress level, where each entry is individually signed. A recipient MUST validate the signature of each PresenceAddress against the pubkey from the parent Presence object.
  • PoW Requirement: Master Nodes (type = 'M') and Full History Nodes (type = 'H') MUST include a valid SignerPowSolution in their PresenceAddress entries. Other nodes can omit this field. The PoW difficulty is adjusted dynamically by the network.
  • Note: Currently, all Master nodes also function as Full History nodes, as the distinction is not yet implemented in the codebase.