Skip to main content

Trade busts

Propose undoing a trade that must not stand, have a second operator approve it, and follow the reversal before or after delivery.
Open it fromAsset lifecycleVenuesMoreTrade bustsRoles:OwnerPlatform adminVenue managerConsole address: /asset-lifecycle/venues/venueAddress/trade-busts

A bust undoes a trade that a venue operator decides should not stand. The buyer and the seller are not asked, so keep the evidence for the decision in the reason. The Trade busts tab lists the trades eligible for a bust and the bust proposals on them. One venue operator proposes the bust within 24 hours of the trade, with a reason. While the “Trading venues” row under “Approvals” is on, a different venue operator approves or rejects it, and the user who proposed a bust cannot decide it, whichever wallet they sign with. While the row is off, one operator alone proposes and executes the bust of an undelivered trade. A bust of a delivered trade reverses it with forced transfers, so it always waits for a different operator, whatever the row says.

The “Bust proposals” section reading “No bust proposals yet”, above the “Eligible trades” table.

The “Eligible trades” table has an “Instrument” filter and reads “No trades are left to bust” for the chosen instrument. When pending or delivered trades exist, each row carries “Propose bust…”, and the proposals table shows “Trade”, “Status” and “Actions”.

Steps

Propose the bust

  1. Open “Asset lifecycle”, then “Venues”, select the venue, then “More” and Trade busts.
  2. Choose the instrument in the Instrument filter above “Eligible trades”. On a venue with no instrument yet, the filter is disabled and reads “No instruments yet”.
  3. Find the trade under Eligible trades. It reads “Pending delivery” or “Delivered”. A trade with an open proposal reads “Bust proposed”, “Bust executing”, “Bust failed” or “Bust needs reconciliation”.
  4. Select “Propose bust…” on the trade, enter a reason, and select Propose bust. The sheet states what the bust does to this trade: it releases a trade that has not delivered, and it reverses a delivered trade with forced transfers, which is possible only within 24 hours of the trade. Confirm with your wallet verification. “Keep trade” backs out.

The Console reads “Bust proposal created. A different operator must approve it.” while the “Trading venues” row is on and for every bust of a delivered trade, and “Bust executed.” when the row is off and the trade is undelivered.

Decide the proposal

A different venue operator opens “Trade busts”, finds the trade under “Bust proposals”, and selects Approve or “Reject”, confirming with their wallet verification.

The operator who proposed a bust sees no Approve or “Reject” on it and is told another operator must decide.

While the proposal is open on a trade that still awaits delivery, the platform flags it on chain, and delivery skips a flagged trade for up to seven days after its due time, so scheduled delivery cannot settle it during the decision. A venue operator wallet can clear the flag on the venue contract directly, which lets the trade deliver during the decision. A rejection clears the flag and the trade delivers when it is due. An approval runs the undo at once.

Undo a pending delivery

A proposal can target a pending delivery within 24 hours of the trade. An unflagged delivery must still be inside its holding period. A flagged delivery can remain pending after that period, and after the seven-day flag ends, so the platform can complete an approved undo and both owners recover their legs.

For a pending delivery, approval runs the undo at once: the organisation's operations signer, which holds the venue submitter role, submits one on-chain call that unlocks both legs. A venue operator's key cannot submit that call, but any wallet holding the venue submitter role can. The undo of a pending delivery moves no assets back and refunds no fee, because none has moved. Rejection clears the flag so the delivery can proceed. An unflagged delivery whose holding period has ended, a trade that is already undone, and a trade older than 24 hours cannot enter this flow.

Reverse a delivered trade

A trade that has already been delivered can be proposed on the same tab inside the same 24 hours, and its row reads Delivered. There the approved bust reverses the trade with custodian forced transfers under the organisation's operations signer: the base units go back to the seller, and the quote units, both fees and any VAT paid on chain go back to the buyer. The custodian role is the token role that may force a transfer, and the platform first checks that the tokens' compliance rules allow each reversal transfer. When the operations signer lacks the custodian role on a token, the platform queues the grant from your wallet when all three hold:

  • your organisation issued the token
  • your wallet is a listing signer on the venue, the wallet that lists instruments
  • your wallet holds the role that administers the custodian role on that token

Otherwise an administrator of the token grants it on the token's Permissions page. The operations signer keeps the custodian role after the bust until a token admin revokes it there. Approval is refused until a queued grant has landed. The proposal is refused when the role is missing and the platform cannot grant it, when a compliance rule would block a reversal transfer or that check cannot run, or when a counterparty or the fee account cannot cover its leg. An instrument with a holding period of zero delivers in the fill's own transaction, so a bust there always takes this path.

Resume an interrupted bust

If the chain call completes before the platform records the result, Resume completes the remaining record updates. The trade becomes “Undone” and its market-data contribution is corrected.

Approving or resuming a bust waits for each reversal transfer to confirm on chain, one after another, for as long as the request allows, less a 15-second reserve. When the reversal is not confirmed in that time, the bust does not fail. It goes back to “Approved”, and the trade reads “Bust executing”, because its transfers may already be queued and still land. Resume then records the bust as executed when the transfers have landed, or sends them again when they have not. The platform sends each reversal transfer under an idempotency key, so the queue does not accept the same transfer a second time. When only some transfers landed, “Resume” sends the missing ones without checking the compliance rules again over the balances the reversal already moved. While a transfer is still waiting in the queue, “Resume” is refused and the bust keeps its state, so try again once it has been sent. A reversal the queue refuses outright still fails the bust, and “Resume” sends it again.

Let a proposal expire

A bust proposal that no second operator decides in time expires, 24 hours after it is proposed by default. An expired bust clears its flag in the same way as a rejection, so the delivery can proceed. Propose the bust again if it is still needed. When a proposal expires gives the window and what expiry does.

After a bust

A bust is a decision by operators. The venue also undoes a pending trade by itself at its due time, with the reason refused, but only for an outside cause: a paused token, a trade lock a custodian shrank, a frozen sending side, or a receiver added to the compliance bypass list during the holding period. That undo is not a bust and has no proposal. Any other refusal at delivery, such as a receiver whose identity claim lapsed, does not undo the trade. The refused leg is booked to the receiver's free balance in the venue's escrow, and the trade shows “Delivered”. The receiver finds the parked units in the Balances panel on Trading and withdraws them after the token's rules accept the wallet again, so the receiver must be verified again first. An unverified receiver also cannot fund a venue order from that balance: the order is refused with MakerCannotReceiveToken. To reverse such a trade, propose a bust of the delivered trade.

An undone lot does not return to the order book. The contract counts it as filled, and the platform keeps no original time priority for it, so the trader places it again as a new order with a new price-band check and a new place in the queue.

Troubleshooting

A trade bust cannot be proposed or remains incomplete

An unflagged delivery whose holding period has ended is refused. A flagged delivery can remain pending through its review deadline so the platform can complete an approved undo. A trade older than 24 hours, an already-undone trade, a trade whose settlement is unconfirmed, a trade with an order still open, and duplicate open proposals are refused. A delivered trade needs the custodian role on both tokens for the operations signer and reversal transfers that the tokens' compliance rules allow. A proposal flags the trade, so scheduled delivery skips it while the review is open, up to seven days past the due time. If the chain applied the undo but the record is incomplete, use Resume and verify the unlocked balances. Escalate a reported reconciliation mismatch before signing it off.

A proposal is refused with a named cause

The Console names the cause under the trade, and each cause has its own fix.

  • “The trade's settlement is not confirmed on chain yet”: wait for confirmation, then propose again.
  • “An order from this trade is still open”: cancel it on the Orders tab first.
  • “The bust window for this trade has closed”: the 24-hour window ended, or the holding period ended before the delivery was flagged.
  • “A bust proposal for this trade is already pending”: approve or reject it under “Bust proposals”.
  • “A counterparty does not hold enough to cover the reversal”: ask the counterparty to top up, then propose again.
  • “The fee account cannot cover the fee reversal”: fund the fee account, then propose again.
  • Token compliance blocks the reversal: a token admin reviews the compliance rules.
  • “The compliance check for the reversal is unavailable”: try again in a moment.
  • The token custodian role is missing: a token admin grants it on the token's “Permissions” tab.

API routes

Task
Route
Propose a trade bust
POST /api/v2/addons/trading-venues/{venueAddress}/trade-busts
Decide a trade bust
POST /api/v2/addons/trading-venues/{venueAddress}/trade-bust-decisions

The request and response fields are in the v2 API reference.

Was this page helpful?