The HSUITE bridge
Moves HSUITE from Hedera to XRPL, where it is HST. It is one-way and burn-first, and it is the only way HST is ever minted.
A bridge moves a token from one chain to another: units are removed on the source chain and the same amount appears on the destination chain. Done right, nothing is created from nothing. Smart Engines builds one bridge engine with per-chain adapters, instead of a new bridge per chain pair. Today that engine covers one pair of chains, Hedera and XRPL, in two forms:
The HSUITE bridge
Moves HSUITE from Hedera to XRPL, where it is HST. It is one-way and burn-first, and it is the only way HST is ever minted.
Lock-wallet bridges
Let any Hedera HTS token be wrapped on XRPL. They are built and switched off: each validator has to opt in, and nothing moves until a threshold of validators has.
Each piece of the bridge has its own switch, and every one is off by default. No network turns any of them on.
| Switch | Default | While it is off |
|---|---|---|
| The HSUITE bridge’s mint executor | off | The HSUITE bridge’s mint executor drives nothing |
| The HSUITE bridge’s settings (bridge id, source token, its treasury, XRPL launch ledger) | empty | No validator installs its HSUITE evidence check, so every validator refuses every bridge mint |
| The HSUITE bridge’s activation date | unset on every network | No removal can back a mint. The date can only be set by a software release, never by a setting |
| The claim registry topic and its fee | empty | No claim resolves. The executor cannot be switched on without the registry’s fee |
| The lock-wallet executor | off | Set per validator. A validator with it off mints and unlocks nothing for a lock-wallet bridge, refuses to activate one, and withholds its signature share from every lock-wallet mint and unlock. Nothing moves until a threshold of validators has each turned it on. It cannot be turned on without the claim registry and its fee |
| Treasury funding for lock wallets | off | The Protocol Treasury pays nothing toward lock-wallet accounts. It also needs the lock-wallet executor on, and a Treasury rule that permits bridge funding |
| Public exposure of the bridge API | off | The bridge routes are not reachable from outside the cluster |
On top of the switches, the HSUITE bridge needs two things done first: a network whose genesis mints zero HST, and the Hedera HSUITE token’s supply and wipe keys moved to a key the validators hold. The activation date is set only after both.
Genesis mints zero HST, on every network, mainnet included. HST enters XRPL only through this bridge, one-for-one against HSUITE removed from circulation on Hedera, and only after that removal. That gives an invariant anyone can check from the two public ledgers: the HST the bridge has minted equals the HSUITE it has removed. Genesis runs once per network, so this holds from each network’s next genesis.
sequenceDiagram
autonumber
participant H as Holder
participant HED as Hedera
participant REG as HCS claim registry
participant EX as Mint executor
participant V as Every validator's gate
participant X as XRPL
H->>HED: removal of HSUITE (wipe or burn), memo commits to the claim.<br/>The holder's account pays the fee, which is its consent
H->>REG: register the claim (anyone may)
EX->>HED: scan for removals carrying a bridge memo
EX->>V: ask for a signature on a mint of exactly the removed amount
V->>HED: re-read the removal (own endpoint)
V->>REG: earliest valid registration for this removal
V->>X: issuer's next Sequence, no earlier mint for this claim
V-->>EX: signature share, or withheld
EX->>X: HST minted 1:1 to the committed XRPL address
The validators’ threshold key, which will hold HSUITE’s wipe and supply keys, removes the HSUITE on Hedera. A holder’s HSUITE is removed with a TOKENWIPE; the token treasury’s own HSUITE is removed with a TOKENBURN. The account being debited must be the transaction’s fee payer. Hedera runs no transaction without its payer’s signature, so a removal cannot happen without that account’s consent. Every validator’s sign gate checks the same thing before it co-signs: the bound source token, an amount above zero, payer equal to the debited account, and a memo that is a well-formed claim commitment.
The memo commits to the bridge, the claimant and the XRPL address (see The claim memo), so nobody can redirect the HST to another address.
Each claim is registered on the HCS claim registry, a public Hedera topic with no submit key: anyone may write to it, and each message pays the topic’s fee. A registration counts only if the removal’s own memo commits to exactly what it says, so registering somebody else’s removal cannot send it anywhere else. For each removal, the earliest valid registration wins, and every validator reads the same topic in the same order. The executor registers a claim itself when its cluster already holds a verified port request for it.
A flood of junk messages cannot halt the bridge. A registration only counts if it was written inside its claim’s window (from 60 seconds before the removal), and the reader pages through the topic into one shared, persisted index instead of loading the whole topic. Junk still costs the flooder the topic’s fee for every message, and can still delay claims while the reader pages through it.
The mint executor holds no authority. It finds work by scanning the Hedera chain for removals that carry a bridge memo. One validator at a time drives the mints, rotating hourly. It takes a lease on each claim, records each signed attempt before submitting it, and resubmits the same bytes after a crash.
A mint needs a threshold of signature shares, and each validator releases its share only after its own reads confirm the claim. These checks include:
hsuite-<HST issuer address>;InvoiceID.No person, DAO vote or validator quorum can authorise a mint, and once the bridge is enabled, anyone can bridge. A mint happens only because a threshold of validators each confirmed the removal on its own.
Mints are capped at 1 billion HST per transaction, 2 billion per 24 hours and 50 billion in total (the whole HSUITE supply). The caps are fixed in the HST issuer’s rule for the next genesis, so no vote can raise them. One removal backs at most one mint: the claim key comes from the removal transaction, every mint carries it as its InvoiceID, and XRPL validates at most one transaction per Sequence.
The bridge is one-way: nothing is ever refunded on Hedera. A claim stays open until its mint lands. Before signing, the executor checks that the XRPL address can receive HST: the account exists, has an HST trust line with room for the amount, needs no destination tag, and accepts payments from the issuer. A claim that keeps failing is parked with an alert (2 failed transactions, 5 signed attempts, or about a day without a signature), and a removal that can never back a claim is parked at once.
An operator can re-drive a parked claim. That returns it to the queue with fresh budgets; it skips no check, cannot approve or size a mint, and is not reachable from outside the cluster.
A reconciler compares the two ledgers: every mint is backed by a removal, no removal backs two mints, minted equals removed, no mint comes before its removal, and the HST outstanding on XRPL is at most what was minted. It detects only: a violation raises metrics and an alert, and nothing pauses automatically. Outstanding HST can sit below the amount minted, because HST burned on XRPL (including HST’s transfer fee, which is burned on every transfer) leaves circulation.
A removal or a burn is public: anyone can see it on the chain. So the transaction itself has to say who it is for. It must carry a short memo that commits to the claim. The validators read that memo from the transaction on the chain, never from a request, and refuse the claim unless it matches exactly. This stops someone who watches the chain from claiming your transaction to their own address.
What the memo commits to. Four things, hashed together with SHA-256:
port (source chain to destination chain) or return (back again);It does not commit to the amount: the amount is part of the same signed transaction and is read from the chain. It has no nonce and no expiry.
What it looks like. The text hsuite-bridge/v1: followed by 64 lower-case hex characters, 81 bytes in all. For a port on bridge bridge-hedera-xrpl-1767225600000 by Hedera account 0.0.999, paying out to XRPL address rPEPPER7kfTD9w2To4CQk6UCfuHM9c6GDY, the memo is:
hsuite-bridge/v1:db38c5d1ff1367261359babe9448eb3c76c569f2479188ae6da8a2f97f11a5bbWhere it goes.
| Chain | Where | What to put there |
|---|---|---|
| Hedera | The transaction memo | The memo text, exactly |
| XRPL | One entry in the transaction’s Memos |
MemoType = hex of hsuite-bridge; MemoData = hex of the memo text; no MemoFormat |
On XRPL, memos of other types (a wallet’s own tag, for example) are ignored. Two hsuite-bridge entries in one transaction are refused.
A claim is refused when:
A refused claim records nothing. So if someone else submits your transaction first and is refused, you can still claim it.
Set the memo before you sign. The memo is part of the signed transaction and cannot be added afterwards. The published SDK does not include memo builders or any bridge support while the bridge routes are not public. The hsuite CLI has no bridge command.
A bridge for any other token goes through the generic lifecycle routes: create, PATCH rules, activate, pause and close. Like every bridge route, they are reachable only inside the cluster today. A wallet session alone is refused (403). Every lifecycle call needs one of two proofs:
Owner proof. A short-lived intent (10 minutes at most), signed with the source token’s admin key as the chain reports it. The intent binds the action, the bridge, the exact request body and a random nonce. On Hedera the admin key must be a single key. A token whose admin key is a key list or a threshold key uses the DAO route instead.
DAO proof. A passed proposal of the protocol DAO that names the action, the bridge, the exact request body and a deadline.
Each proof works once, across the whole network. create, activate, pause and close are each recorded as one message on an HCS bridge directory, threshold-signed by the validators. Every validator reads the directory from its own mirror node. A record counts only if its proof checks out at the record’s consensus time and no earlier record already used it. When two records conflict, the first valid one wins. A bridge’s id is derived from its create proof, so one proof names one bridge on every cluster.
An owner proof for a token on any chain other than Hedera cannot be recorded in the directory, so such a bridge uses the DAO proof for every recorded action.
Pause and close. A pause can be lifted by a later activate whose proof was issued after the pause. A close is final. Each validator’s lock-wallet gates read the directory themselves, so a pause recorded through any cluster stops every validator from co-signing that bridge’s lock-wallet mints and unlocks, and a close stops its mints. Each cluster’s own copy of the bridge record, which the claim routes check, follows the directory when that cluster next reads it. There is no single-validator emergency pause. PATCH rules is not recorded in the directory: it changes one cluster’s copy only, and it is refused on a lock-wallet bridge if it would change that bridge’s anchored terms.
A lock-wallet close is drain-only. A closed lock-wallet bridge takes no new deposits, but its holders can still return: every validator’s return gate co-signs an unlock for a closed bridge as it does for an active one, so a close does not strand the tokens locked behind wrapped tokens still in circulation. A deposit made after the close is never minted: the mint executor parks it with an alert, and it is not refunded. A paused bridge holds its returns until it is active again. Any other close, the HSUITE bridge’s included, stays final.
Trust levels. A bridge records a trust level at creation: owner-rekeyed, owner-verified or community. Nothing reads it for any limit. owner-rekeyed is recorded whenever the bridge is created in rekey mode; nothing checks on chain that the keys were handed over.
A lock-wallet bridge is for a token the validators do not control: holders deposit it into a lock wallet on Hedera, and an equal wrapped token (an XRPL issued currency) is minted on XRPL. Returning burns the wrapped token and releases the original. Version 1 supports one pair only: a Hedera HTS token to XRPL.
What is built:
freeze_default, or when fewer than 3 validators are attested. Creation provisions the lock wallet: a Hedera account under a threshold key the validators hold, created through the validators’ standard entity path (DKG plus a rule published on HCS).What is not built, and the limits:
rekey bridges: a claim ledger onlyA bridge in rekey mode assumes the validators hold the token’s supply and wipe keys. For any rekey bridge other than the HSUITE bridge, the engine only records claims. A port verifies the source burn on the chain and records a pending claim, but no executor mints for it, and no return is released.
These checks run before any claim is recorded:
A source transaction is mandatory
A claim backed only by an amount the caller typed is impossible.
The verified amount wins
The validators re-read the transaction on its chain and use that amount. A request for a different amount is rejected. “1.50” and “1.5” count as equal.
Only a real supply reduction counts as a burn
On Hedera only TOKENBURN or TOKENWIPE is accepted, never a plain transfer.
The claim is bound
The signed-in wallet must be the claimant, on the chain of the transaction, and the memo must commit to the claim.
Only fresh transactions count
A transaction older than the bridge’s activation is refused.
One claim per source transaction, across every bridge, within one cluster
Clusters keep separate databases. Across clusters, only a mint is made unique, by the HCS claim registry and every validator’s gate.
Decimals are converted exactly
Hedera amounts are integer base units and XRPL amounts are decimal strings. The bridge converts with exact digit arithmetic, never floating point. A port or return for an amount the receiving chain cannot hold exactly is refused, never rounded: a fraction of a base unit, or an XRPL amount beyond 15 significant digits.
A per-bridge total limit
A port that would push a bridge past its totalLimit is refused. The per-transaction and daily limits a bridge may declare are not enforced on this path.
“Built” means written and merged. Nothing in this table is switched on for any network.
| Piece | Status |
|---|---|
| Genesis mints zero HST | Built |
| HSUITE removal leg: wipe or burn, paid by the debited account | Built, not armed |
| HCS claim registry: earliest valid registration wins, flood-resistant | Built; no topic provisioned |
| Each validator re-reads the evidence from its own endpoint before co-signing | Built, not armed |
| HSUITE mint executor, caps, parking and operator re-drive | Built, switched off |
| Conservation reconciler (detects; does not pause) | Built, not installed on any network |
| Lifecycle authorization: owner proof or DAO proof, single use network-wide | Built; routes not public |
| HCS bridge directory: pause and close across the network | Built; routes not public |
| Lock-wallet creation, anchored terms, issuer crowning, port and return gates, mint and unlock executors, drain-only close | Built; off until a threshold of validators each opts in |
| Treasury funding of a lock wallet’s unlock fees and its issuer’s reserve | Built, switched off |
Minting for rekey bridges other than HSUITE |
Not available: claim ledger only |
| Refunds of any kind | Not available. The HSUITE bridge is one-way by design |
| Chain pairs other than Hedera ↔ XRPL | Not available: the burn verifier reads only Hedera and XRPL |
| Caps by trust level | Not available: the trust level is recorded, never read |
| Automatic pause on a conservation violation | Not available: the reconciler only alerts |
| Public bridge routes, a CLI command, and bridge support in the published SDK | Not available |
| Cross-chain operator payouts through the bridge | Not available |
| A security audit of the bridge | Not done |
| Per-pair bridges (industry norm) | The Smart Engines design |
|---|---|
| New code per chain pair | One chain-neutral engine; adapters do the per-chain work |
| New review per pair | One set of checks to review for every pair |
| Often a small committee of keys signs | Each validator signs only on its own reads of the source chain |
| Supply reconciled privately, if at all | Conservation is checkable from the public ledgers |
Hacked bridges have cost the industry billions, largely because each one is a separate attack surface. Today the engine covers one pair, Hedera and XRPL. Each new chain needs its own verifier and adapters before it can join.
The HSUITE migration from Hedera to XRPL is the HSUITE bridge described above (see Settlement & migration). Paying operator rewards across chains through the bridge is not available (see Staking & node-runners).