Loading vLEI.wiki
Fetching knowledge base...
Fetching knowledge base...
This comprehensive explanation has been generated from 127 GitHub source documents. All source documents are searchable here.
Last updated: October 7, 2025
This content is meant to be consumed by AI agents via MCP. Click here to get the MCP configuration.
Note: In rare cases it may contain LLM hallucinations.
For authoritative documentation, please consult the official GLEIF vLEI trainings and the ToIP Glossary.
A non-establishment event is a key event in KERI that anchors external data to an AID's key event log without modifying the current key state, enabling verifiable commitments to data while maintaining the existing authoritative keypairs, thresholds, and witness configuration.
A non-establishment event represents a fundamental primitive in the KERI protocol that enables controllers to make cryptographically verifiable statements and commitments without altering the security-critical key state of their autonomic identifier (AID). This separation of concerns—between key management operations and data anchoring operations—is architecturally essential for KERI's security model.
The primary purpose of non-establishment events is to anchor external data to a specific point in an identifier's key event log (KEL) through cryptographic seals. These seals create verifiable commitments that bind arbitrary data to the identifier's authoritative key state at a particular sequence number, enabling use cases including:
Implementations MUST maintain strict sequence number ordering. Non-establishment events increment the sequence counter just like establishment events. A gap in sequence numbers invalidates the KEL. When creating interaction events, always query the current sequence number from the KEL and increment by exactly 1.
The p field MUST contain the SAID of the immediately preceding event, regardless of whether that event was an establishment or non-establishment event. Implementations should maintain a cache of the most recent event SAID to avoid recomputing digests for every new event.
Computing the d field requires a two-pass algorithm:
d field replaced by # characters (count must match digest length)# characters with the computed digestThis self-referential property is critical for event integrity and must be implemented correctly.
Signatures MUST be attached using CESR encoding with proper indexed signature format. For multi-sig identifiers, each signature must include an index indicating which key from the current key set was used. The signature attachment format is:
-AAB{indexed_signature_1}{indexed_signature_2}...
Where -AAB is the CESR count code indicating indexed signatures follow.
In indirect mode, implementations must handle witness receipts asynchronously. After creating and signing an interaction event:
When processing seals in the anchor array, implementations should:
Non-establishment events are also known as interaction events (event type ixn in KERI serialization). They maintain the cryptographic chain integrity of the KEL while explicitly avoiding any modification to the key state established by the most recent establishment event (either inception or rotation).
The structural organization follows KERI's event message format with specific constraints:
t field must be set to ixn (interaction)s field contains the next sequential number in the KELp field contains the SAID of the immediately preceding eventa field contains an array of seal objects anchoring external dataThe essential components of a non-establishment event include:
Version String (v): Specifies the KERI protocol version and serialization format (e.g., KERI10JSON for KERI version 1.0 with JSON serialization). This enables protocol evolution and ensures parsers can correctly interpret the event structure.
Event Type (t): Set to ixn to designate this as an interaction event, distinguishing it from establishment events (icp, rot, dip, drt).
Identifier (i): The AID prefix for which this event is being created. This field remains constant throughout the identifier's lifecycle.
Sequence Number (s): A monotonically increasing integer (encoded as hexadecimal string in text domain) that establishes the event's position in the KEL. For non-establishment events, this continues the sequence from the most recent establishment event.
Prior Event Digest (p): The cryptographic digest (SAID) of the immediately preceding event in the KEL. This creates the backward-chaining property that makes the KEL tamper-evident.
Anchor Array (a): An array of seal objects that cryptographically commit to external data. Each seal typically contains:
i: Identifier being sealed (may be the same AID or a different identifier)s: Sequence number of the event being sealedd: Digest (SAID) of the data being anchoredSignature Attachments: Following the event body, CESR-encoded signatures from the current authoritative keypairs prove the controller's commitment to the anchored data.
The canonical field structure for a non-establishment event follows KERI's ordered field map convention:
{
"v": "KERI10JSON0000cb_",
"t": "ixn",
"d": "EL1L56LyoKrIofnn0oPChS4EyzMHEEk75INJohDS_Bug",
"i": "EH7Oq9oxCgYa-nnNLvwhp9sFZpALILlRYyB-6n4WDi7w",
"s": "2",
"p": "EEnwxEm5Bg5s5aTL0HgwfRSNd7wgWHJ_1FKDcyDJKXYw",
"a": [
{
"i": "EH7Oq9oxCgYa-nnNLvwhp9sFZpALILlRYyB-6n4WDi7w",
"s": "0",
"d": "EBkPreYpZfFk66jpf3uFv7vklXKhzBrAqjsKAn2EDIPM"
}
]
}
Version String Format: The v field follows the pattern KERI{major}{minor}{kind}{size}_ where:
KERI is the protocol identifier{major}{minor} encode the version (e.g., 10 for version 1.0){kind} specifies serialization (e.g., JSON, CBOR, MGPK){size} is a hexadecimal count of bytes/characters_ is the terminatorSequence Number Encoding: The s field uses hexadecimal string representation to support compact encoding in CESR streams. Values 0-9 use decimal digits, 10-15 use lowercase a-f, and larger values continue in hexadecimal.
Digest Fields: Both d (event SAID) and p (prior event digest) use CESR qualified Base64 encoding with derivation codes indicating the hash algorithm (e.g., E prefix for Blake3-256 digest).
Anchor Array Structure: The a field contains an array of seal objects. An empty array [] is valid and indicates the event maintains KEL continuity without anchoring external data. Non-empty arrays contain seal objects with i, s, and d fields creating cryptographic commitments.
Non-establishment events support multiple serialization formats through KERI's CESR encoding:
JSON Serialization: Human-readable text format using UTF-8 encoding. Field ordering must be preserved as specified (insertion-ordered dictionaries). This is the primary format for development and debugging.
CBOR Serialization: Compact binary format (Concise Binary Object Representation) for efficient transmission. Maintains semantic equivalence with JSON while reducing size.
MGPK Serialization: MessagePack binary format providing another compact encoding option with different performance characteristics.
CESR Native: Events can be encoded directly in CESR's composable streaming format, enabling efficient concatenation with other primitives and groups.
All formats must support round-trip conversion without loss of information, ensuring semantic equivalence across serialization boundaries.
Minimum Event Size: A minimal non-establishment event with empty anchor array requires approximately 200 bytes in JSON format (varies with identifier length and sequence number).
Maximum Practical Size: While KERI does not impose hard limits, practical considerations suggest keeping anchor arrays under 100 seals per event to maintain reasonable processing times and network transmission efficiency.
Sequence Number Range: Sequence numbers are unbounded integers, though implementations typically use 64-bit representations. Hexadecimal encoding in text domain supports arbitrarily large values.
Digest Size: Standard digest fields use 256-bit hashes (32 bytes raw, 44 characters Base64), though KERI's crypto-agility allows algorithm upgrades to larger digests if needed.
Creating a non-establishment event requires several steps that maintain KEL integrity:
1. Retrieve Current Key State: Query the KEL to determine the current sequence number, prior event digest, and authoritative keypairs. The non-establishment event must reference the correct prior event and use the current keys for signing.
2. Construct Seal Array: Build the anchor array with seal objects for any external data being committed. Each seal must reference valid identifiers and include correct SAIDs for the data being anchored.
3. Compute Event SAID: The d field is self-referential, requiring a two-pass computation:
d field with # characters matching the digest length# characters with the computed digest4. Sign Event: Generate signatures using the current authoritative private keys. For multi-sig identifiers, collect threshold-satisficing signatures from the controlling entities.
5. Attach Signatures: Append CESR-encoded signature attachments to the event message. These attachments include indexed signatures that identify which key from the current key set produced each signature.
Non-establishment events are immutable once signed and published. The KEL's append-only property means events cannot be modified after creation. However, subsequent events can:
Supersede Previous Commitments: A new non-establishment event can anchor updated data, effectively superseding earlier commitments. Validators must process events in sequence order to determine current state.
Correct Errors: If an incorrect seal was published, a subsequent event can anchor corrected data. The KEL maintains the complete history, enabling audit of changes.
Revoke Commitments: Specific revocation patterns can be implemented through seal conventions. For example, anchoring a revocation registry event that nullifies a previous commitment.
Validating a non-establishment event requires multiple verification steps:
1. Structural Validation:
v, t, d, i, s, p, a)t field equals ixn2. Sequence Validation:
s equals the expected next sequence numberp matches the SAID of the prior event in the KEL3. SAID Verification:
d field4. Key State Verification:
5. Signature Verification:
6. Seal Validation:
7. Witness Receipt Validation (for indirect mode):
Non-establishment events are utilized across multiple KERI-based protocols:
KERI Core Protocol: The foundational use case is maintaining KEL continuity between establishment events. Even when no external data needs anchoring, interaction events may be created to demonstrate continued control and prevent KEL staleness.
ACDC Credential Protocol: Authentic Chained Data Containers leverage non-establishment events extensively:
TEL Registry Protocol: Transaction Event Logs use non-establishment events to anchor registry operations:
IPEX Exchange Protocol: Issuance and Presentation Exchange uses interaction events to anchor:
DID:KERI Method: The did:keri DID method uses interaction events to anchor:
The lifecycle of non-establishment events follows the broader KEL lifecycle:
Creation Phase: Events are created by the controller when external data needs anchoring or KEL continuity must be maintained. Creation may be triggered by:
Publication Phase: After signing, events are published to:
Verification Phase: Recipients validate events through the verification process described above. Invalid events are rejected and may trigger duplicity detection if conflicting valid events exist.
Archival Phase: Events become part of the permanent KEL record. They may be:
Supersession Phase: While events themselves are immutable, their semantic meaning may be superseded by later events. For example:
Non-establishment events interact with several related KERI data structures:
Establishment Events: Non-establishment events depend on the key state defined by the most recent establishment event. They cannot exist without a prior inception or rotation event that establishes the authoritative keys used for signing.
Key Event Receipts: Witnesses generate receipt messages for non-establishment events, creating key event receipt logs (KERLs) that provide distributed consensus on event ordering and validity.
Seals: The anchor array contains seal objects that are themselves structured data. Seals may reference:
Transaction Event Logs: TELs are anchored to KELs through seals in non-establishment events. This creates a cryptographic binding between the transaction state and the identifier's key state.
ACDC Credentials: Credentials are anchored to issuer KELs through interaction events, enabling verifiable credential issuance without requiring the credential itself to be stored in the KEL.
Delegated Events: When an identifier delegates authority to another identifier, the delegation is anchored through a seal in a non-establishment event (or rotation event) of the delegator's KEL.
Witness Pools: Non-establishment events are sent to witness pools for receipting in indirect mode. The witness configuration is established by the most recent establishment event and remains unchanged by interaction events.
Watcher Networks: Watchers observe non-establishment events to detect duplicity. If a controller creates conflicting interaction events at the same sequence number, watchers can detect this duplicitous behavior.
Non-establishment events inherit and extend KERI's security properties:
Cryptographic Integrity: The SAID mechanism ensures events cannot be tampered with after creation. Any modification invalidates the digest and breaks the KEL chain.
Non-Repudiation: Digital signatures provide non-repudiable proof that the controller authorized the anchored data. The controller cannot later deny creating the commitment.
Duplicity Evidence: If a controller creates conflicting non-establishment events at the same sequence number, both events serve as cryptographic evidence of duplicitous behavior. This enables duplicity detection mechanisms.
Key State Isolation: By not modifying key state, non-establishment events reduce the attack surface for key compromise. An attacker who compromises signing keys can create fraudulent interaction events but cannot rotate keys without access to pre-rotated keys.
Temporal Ordering: The sequence number and prior event digest create a verifiable temporal ordering of commitments. This enables audit trails and prevents reordering attacks.
Witness Consensus: In indirect mode, witness receipts provide distributed consensus on event validity and ordering, making it difficult for attackers to create alternative event histories.
Non-establishment events are designed for high-frequency operations:
Lightweight Creation: Since they don't modify key state, creation is computationally cheaper than establishment events. No key generation or pre-rotation computation is required.
Efficient Verification: Validators can verify interaction events using cached key state from the most recent establishment event, avoiding repeated key state computation.
Scalable Anchoring: The seal array enables batching multiple commitments in a single event, reducing the number of events needed for high-volume operations.
Parallel Processing: Multiple non-establishment events can be created in parallel (at different sequence numbers) without coordination, enabling high-throughput scenarios.
Compact Encoding: CESR's compact binary encoding minimizes network transmission overhead for interaction events, important for bandwidth-constrained environments.
Several common patterns emerge in non-establishment event usage:
Empty Interaction Pattern: Creating interaction events with empty anchor arrays to maintain KEL liveness and demonstrate continued control. This prevents KEL staleness and provides regular proof-of-control.
Batch Anchoring Pattern: Including multiple seals in a single interaction event to anchor several operations atomically. This is efficient for high-volume credential issuance or registry updates.
Delegation Anchoring Pattern: Using interaction events to anchor delegated inception or rotation events, creating verifiable delegation chains.
Registry State Pattern: Anchoring TEL state changes through interaction events, enabling verifiable credential registries without blockchain dependencies.
Service Endpoint Pattern: Publishing service endpoints and communication routes through interaction events, enabling dynamic service discovery.
Revocation Pattern: Anchoring credential revocation events through interaction events, providing verifiable revocation without requiring credential holders to check centralized revocation lists.
An empty anchor array [] is valid and commonly used for KEL maintenance. Implementations should not treat empty arrays as errors. This pattern is used to:
For high-throughput scenarios:
Implementations must handle several error conditions:
p doesn't match the actual prior eventd fieldFor multi-sig identifiers, interaction event creation requires coordination:
When anchoring delegated events, the seal must reference the delegated event correctly:
i: The delegated identifier (not the delegator)s: The sequence number of the delegated eventd: The SAID of the delegated eventThis creates the cryptographic binding that enables delegation verification.
When anchoring TEL events:
Implementations should support multiple KERI versions: