Cross-Chain Export
Cross-Chain Export lets a Xahau account or Hook request an ordinary transaction for another XRPL-compatible chain. The account chooses an immutable committee of Xahau validator master keys. Committee members sign only after the Xahau ledger containing the request is validated.
(Requires the Export amendment.)
User Guide
Section titled “User Guide”How It Works
Section titled “How It Works”- The account creates an ExportCommittee containing up to 32 validator master keys. Xahau stores the canonical roster under its content digest.
- The caller submits an
Exportintent containing an unsigned target transaction and the committee digest. A direct transaction may create and use a matching committee in one operation. - Xahau verifies that every committee master appears in the admitting ledger’s immediate-parent
UNLReport, charges one owner reserve, and creates an ExportLatch. The source Export transaction hash is called W and identifies the latch. - Only after the exact source ledger validates, committee members append a canonical
xahau/exportMemo and sign the resulting release-stamped target transaction. - Shares use a dedicated overlay relay, appear immediately on the
export_signaturesstream, and also ride consensus proposals as bounded recovery traffic. Once the committee threshold is present and the network aligns on the complete share-set root, a later ledger records an ExportSignatures witness. - An assembler adds a sufficient
Signersarray to the release-stamped transaction and submits it to the target chain. - After target execution validates, an Import transaction returns an XPOP to Xahau. The witness and XPOP may arrive in either order; the second one removes the latch and releases its reserve.
Prerequisites
Section titled “Prerequisites”- The target chain must support XRPL transaction serialization, Tickets, SignerLists, and multisigning.
- The target account must be the same classic address as the outer Xahau
Account;ExportedTxn.Accountmust match it. - The target transaction must use
Sequence: 0, a pre-createdTicketSequence, an emptySigningPubKey, and noTxnSignatureorSigners. - The target account’s SignerList must authorize accounts derived from the committee members’ validator signing keys. Its weights and threshold must match the intended custody policy.
- Operators must keep the target SignerList aligned with validator manifest rotations. Xahau verifies live signing-key-to-master-key attribution, but it cannot inspect or update the remote SignerList.
- For an XRPL-mainnet-style target transaction with no
NetworkID, the source Xahau network must use a localNETWORK_IDgreater than 1024. An explicit targetNetworkIDmust not equal the source network ID. - Before activation, every validator that participates in proposals must run compatible software because Export extends consensus proposal payloads.
- On networks using NegativeUNL, activate
NegativeUNLActiveViewCapno later than Export so NegativeUNL vote production and Export alignment use the same parent-ledger denominator.
Create a Committee
Section titled “Create a Committee”ExportCommittee is a concatenation of 33-byte compressed validator master public keys. The transaction may supply them in any order; Xahau sorts them lexicographically, rejects duplicates, stores the canonical roster, and derives a network-neutral ExportCommitteeHash.
{ "TransactionType": "Export", "Account": "rYourAccount...", "Fee": "1000000", "ExportCommittee": "[CONCATENATED_33_BYTE_MASTER_KEYS_HEX]"}The roster contains between 1 and 32 members. Committee setup only verifies the roster’s structure; it may stage a future committee. Every actual Export intent rechecks that all members belong to the immediate parent’s pre-NegativeUNL validator view. There is no protocol-default committee.
The source content threshold is fixed at ceil(0.8 * committee size), called qC. The intent chooses a stored committee but cannot lower qC. The separate alignment threshold qV is ceil(0.8 * effective active-validator count), computed after the capped NegativeUNL subtraction, with a fail-closed floor of one for an empty view. It coordinates the accepted share-set root; it does not replace qC or prove the target account’s SignerList configuration.
An account may own multiple committee objects. A committee cannot be deleted while that account has any live Export latch, because witness apply and replay still resolve the roster by digest.
Submit an Export Intent
Section titled “Submit an Export Intent”{ "TransactionType": "Export", "Account": "rYourAccount...", "Fee": "1000000", "LastLedgerSequence": 12345680, "ExportCommitteeHash": "[COMMITTEE_DIGEST]", "ExportedTxn": { "TransactionType": "Payment", "Account": "rYourAccount...", "Destination": "rRecipient...", "Amount": "1000000", "Fee": "1000", "Sequence": 0, "TicketSequence": 2, "Flags": 2147483648, "SigningPubKey": "", "LastLedgerSequence": 98765500 }}The committee object must already exist. A direct transaction can instead include both ExportCommitteeHash and the matching ExportCommittee roster to create and use it atomically.
The outer LastLedgerSequence is mandatory and may be at most five Xahau ledgers beyond the ledger evaluating the intent. It bounds admission and queueing only. Once admitted, the latch receives a separate publication deadline.
The inner LastLedgerSequence belongs to the target chain. Xahau does not require it, but a finite value limits how long disclosed signatures can remain executable. Leave enough target-ledger time for source validation, share collection, assembly, and submission.
Admission returns tesSUCCESS and creates the latch immediately. Signatures collect asynchronously after the admitting ledger validates.
An Export intent pays more than an ordinary transaction because it initiates committee-wide share publication and creates a permanent witness. The required fee scales deterministically with the selected committee size and serialized target size, in addition to the normal transaction fee; use the server’s fee calculation rather than hard-coding the examples above. Committee setup, committee deletion, and latch control do not initiate signing and retain the ordinary transaction fee schedule.
Release Stamp
Section titled “Release Stamp”The submitted ExportedTxn is the base target transaction. Callers may include ordinary Memos, but must not supply the reserved MemoType xahau/export.
After source validation, validators preserve the caller’s Memos in their original order and append one canonical final Memo containing:
- A format version and flags.
- The source and target network IDs.
- W, the source Export transaction hash.
- The validated source ledger sequence and hash.
Validators sign this release-stamped transaction. The witness stores the same unsigned stamped transaction, so assemblers do not invent or independently choose stamp bytes.
Collect Signatures
Section titled “Collect Signatures”The same admitted shares have two public views:
- The
export_signaturesWebSocket stream provides low-latency individual shares. - The later
ExportSignaturespseudo-transaction is the canonical on-ledger witness and contains the exact release-stamped payload plus sufficient signatures.
Subscribe with:
{ "command": "subscribe", "streams": ["export_signatures"]}Each event has this shape:
{ "stream": "export_signatures", "type": "exportSignatureReceived", "version": 1, "ledger_index": 12345682, "ledger_hash": "[CURRENT_VALIDATED_LEDGER_HASH]", "owner": "rYourAccount...", "origin_txid": "[W]", "origin_ledger_seq": 12345679, "origin_ledger_hash": "[VALIDATED_ORIGIN_LEDGER_HASH]", "committee_position": 3, "signing_key": "n9...", "signature": "[HEX_SIGNATURE]"}ledger_index and ledger_hash identify the node’s validated observation cursor. The origin_* fields identify the validated ledger containing the Export intent. A retained share can be published again at later validated cursors, so consumers should deduplicate by semantic identity such as (origin_txid, committee_position, signing_key, signature).
Assemble and Submit
Section titled “Assemble and Submit”The witness ExportedTxn is already the exact unsigned release-stamped target transaction. To assemble it:
- Convert each witness signing key to its signer AccountID.
- Create a
Signerentry containing that AccountID,SigningPubKey, andTxnSignature. - Sort
Signersby AccountID. - Keep the top-level
SigningPubKeyempty. - Confirm the selected entries satisfy the target account’s current SignerList and quorum.
Submit the assembled transaction to the target chain. Different sufficient signer subsets produce different target transaction IDs, but they retain the same W-bearing release Memo and normalized Export intent.
Latch Lifecycle
Section titled “Latch Lifecycle”An ExportLatch is a pending callback and evidence rendezvous, not a permanent replay tombstone.
- Intent admitted: the latch is created, linked into the pending Export directory, and holds one owner reserve.
- Witness first: the latch stores
ExportSignatureHashand leaves the pending directory, but remains callback-ready. - XPOP first: the latch records that the proof arrived and remains until the witness appears.
- Both facts present: the latch is erased and the reserve is released.
- Publication stopped or expired: no new shares are produced, but the latch and callback readiness remain.
- Explicit erase: the latch and reserve are removed, and any later callback is intentionally forfeited.
Import callback Hooks must still implement business-level replay protection. Once a completed latch is gone, Export is not a permanent record that the target transaction was processed.
Stop or Erase an Export
Section titled “Stop or Erase an Export”Lifecycle control names W, not the target Ticket:
{ "TransactionType": "Export", "Account": "rYourAccount...", "TransactionHash": "[W]"}Without flags, this stops publication and retains the latch, owner reserve, and callback readiness. With Flags: 0x00010000 (tfExportEraseLatch), it irreversibly erases the latch and releases the reserve.
Neither operation revokes shares that validators already published. Erase only when forfeiting any later callback is acceptable. A safe retry normally uses a fresh target Ticket so a delayed execution of the old signed transaction cannot collide with the replacement.
Limits
Section titled “Limits”- At most 8 Export intents may be admitted in one ledger.
- One account may own at most 8 live Export latches.
- At most 64 latches may remain in the global pending-signature directory.
- One Hook execution may reserve at most 2 exports.
- A committee may contain at most 32 members.
- The post-stamp target transaction may serialize to at most 2,048 bytes.
- The self-contained ExportSignatures witness may serialize to at most 8,192 bytes.
- The current admission and post-validation publication windows are each capped at 5 ledgers.
Hook API
Section titled “Hook API”Hooks use xport_reserve() followed by xport(). xport() receives an existing committee digest and returns W, the emitted Export wrapper transaction hash and lifecycle handle. xport_cancel() accepts W and either stops publication or explicitly erases the latch.