Skip to main content
LibXMTP allows installations and wallets to be revoked from an inbox using the RevokeAssociation mechanism defined in XIP-46.

RevokeAssociation Action

Revocation is performed by publishing a RevokeAssociation identity update to the network.

Structure

Fields:
  • member_to_revoke - The installation key or wallet address being revoked
  • recovery_identifier_signature - Signature from the recovery identifier (wallet) authorizing the revocation
Location: crates/xmtp_id/src/associations/association_log.rs:220-227

What Can Be Revoked?

Two types of members can be revoked:
  1. Installation keys - Removes an installation’s ability to act on behalf of the inbox
  2. Wallet addresses - Disassociates a wallet from the inbox

Creating a Revocation

Building the Revocation Action

Location: crates/xmtp_id/src/associations/unsigned_actions.rs:43-47

Signature Requirements

Revocations must be signed by the recovery identifier (typically the wallet that created the inbox).
The recovery identifier is set during inbox creation and can be updated with ChangeRecoveryAddress actions. Signature process:
Location: crates/xmtp_id/src/associations/builder.rs:360-371

Revocation Effects

Immediate Effects

Once published to the network:
  1. The revoked member is removed from the AssociationState
  2. The member can no longer sign new identity updates
  3. The member cannot be used to validate new associations
Location: crates/xmtp_id/src/associations/association_log.rs:227

Group Membership Effects

Revoking an installation does not immediately remove it from groups it is already a member of.
Instead:
  1. Any group member can update the group membership to the latest sequence_id
  2. This update removes the revoked installation from the group
  3. The protocol makes no guarantees about timeliness of removal
Automatic removal: Clients periodically check for revocations during their sync process:
This typically happens quickly, but the protocol provides no strict timing guarantees.

What Revocation Does NOT Do

XMTP does not detect or automatically remove inactive clients. Inactive client detection must be handled at the application layer, which should then trigger explicit removal.

Revocation Examples

Revoking an Installation

Revoking a Wallet

Self-Revocation Protection

No. Revocations must be signed by the recovery identifier (wallet), not by the installation being revoked.This prevents compromised installations from revoking themselves to cover their tracks.

State Management

AssociationState Tracking

Revocations modify the AssociationState by removing members:
Location: crates/xmtp_id/src/associations/state.rs:123-128

Computing State Diffs

To detect revocations, compute the diff between states:
Helper methods:
Location: crates/xmtp_id/src/associations/state.rs:45-54

Revocation and Group Updates

GroupMembership Extension

Each MLS group maintains a GroupMembership extension:
The sequence_id corresponds to the state of that inbox at a point in time.

Updating After Revocation

Process:
  1. Fetch latest sequence_id for affected inbox
  2. Create commit that updates GroupMembership to new sequence_id
  3. Compute expected installation list from new state
  4. Validate that MLS group members match expected installations
Location: crates/xmtp_mls/README.md:72-77

Recovery Identifier Management

What is the Recovery Identifier?

The recovery identifier is the wallet address (or other identifier) authorized to:
  • Revoke installations and wallets
  • Change the recovery identifier itself
  • Recover access to the inbox
Set during inbox creation:

Changing the Recovery Identifier

While not a revocation per se, changing the recovery identifier affects who can perform revocations:
Changing the recovery identifier is a sensitive operation. If the current recovery identifier is compromised, the attacker could change it to lock out the legitimate owner.

Backend Trust Considerations

The XMTP backend can hide revocations by not returning them in identity update queries.This is an inherent trust assumption in the current architecture. Clients cannot independently verify that they have received all revocations.
Mitigation: Clients should:
  1. Query identity updates from multiple sources if available
  2. Implement application-level revocation verification
  3. Monitor for unexpected installations in groups

Testing Revocation

Example Test

Location: crates/xmtp_id/src/associations/mod.rs:524-548 (similar test)