Redeem kUSDT
Redeeming turns kUSDT on Kaspa back into USDT on Ethereum, or BSC-USD on BNB Chain. You send kUSDT to a burn owner that names the chain and the EVM address to pay. After the burn is final, the signers approve a release and the vault pays you.
Before you start
Section titled “Before you start”-
Burns of an amount at or below the release fee are never paid. On mainnet that is 5 USDT on Ethereum and 0.50 USDT on BNB Chain (or 0.20 % of the amount if that is higher); on the testnet both vaults charge at least 0.50 USDT.
-
Just above the fee, a burn is paid but the minimum fee takes most of it: on the testnet, 0.58 kUSDT pays 0.08 USDT. When the fee is more than 20 % of the amount, the wallet and the web app say so and name the amount from which it is 20 % or less (five times the minimum fee: 2.50 kUSDT on the testnet). The burn stays allowed.
-
One burn output is paid in one release, and a vault pays only from its own backing. The wallet and the web app refuse a burn the named vault cannot pay now: a payout above its release capacity (250 000 USDT by default) or its current
releaseAvailable, an amount above its backing, or a vault that is paused. They offer the other chain when that one can pay. -
The address must be one the vault would pay. Ethereum USDT keeps a blacklist; BSC-USD keeps none. The bridge never pays an address the token blocks (see Blocked recipients). Before every burn, the wallet and the web app ask the coordinator (
GET /recipients/:chain/:address) and refuse an address it would not pay, with the reason. If they cannot ask, they refuse too, and offer to check again: a burn cannot be undone. The wallet asks once more right before it sends. It offers the other chain only when that vault would pay the address. -
You need KAS as well as kUSDT: the burn output carries KAS (below), and the transaction pays a network fee.
-
Only a plain burn is paid: borrow scheme, borrow guard and extension commitment must all be zero. Signers refuse any other burn state, and its kUSDT is lost. Wallets never build one.
-
The burn output carries the deployment’s burn value, 0.3 KAS. Nothing can spend a burn, so that KAS is gone for good, and it is part of a redemption’s cost. An ordinary kUSDT state carries 1.5 KAS instead, which comes back when it is spent.
-
What that means for your KAS balance:
- Burning a whole kUSDT state: its 1.5 KAS comes back less the 0.3 KAS burn and the network fee. On the testnet that is about +1.08 KAS.
- Burning part of a state: the kUSDT you keep stays in a change state, which keeps carrying 1.5 KAS. That KAS is still yours. Your balance pays only the 0.3 KAS burn and the network fee.
The wallet’s review shows every part: locked with the burn, kept in your change, the network fee, and the net change to your KAS balance.
- Burn. Your wallet builds a standard KCC-20 transfer that sends kUSDT to the burn owner for your chain and address. It also writes the burn’s details into the transaction payload (its free data field), so the bridge can read them. See Burn owner and payload.
- The burn state exists on Kaspa. Its owner is a hash of a script that starts with
OP_RETURN, which no transaction can ever satisfy. - Finality. The bridge waits until the burn’s accepting block is at least 1 000 DAA scores below the current virtual DAA score, about 100 seconds (300 DAA scores on testnet). See Finality.
- Each signer reads the burn from its own Kaspa node.
- Each signer checks and signs. It checks that the burn owner matches the chain and address, and that the
amount is above the release fee. It then signs an EIP-712
Releasemessage. - The coordinator collects at least 3 signatures, sorted by signer address.
- Release. Anyone can submit
releaseto the vault; the coordinator normally does. - The vault checks the signatures, that this burn was never paid before, the backing and the release allowance.
- You are paid
units − feein USDT at the address the burn named.
What you receive
Section titled “What you receive”The release fee is 0.20 % of the amount, with a minimum of 5 USDT on Ethereum and 0.50 USDT on BNB Chain (mainnet; on the testnet the minimum is 0.50 USDT on both chains).
| kUSDT burned | Ethereum: fee | Ethereum: you receive | BNB Chain: fee | BNB Chain: you receive |
|---|---|---|---|---|
| 10 | 5.00 | 5.00 | 0.50 | 9.50 |
| 100 | 5.00 | 95.00 | 0.50 | 99.50 |
| 1 000 | 5.00 | 995.00 | 2.00 | 998.00 |
| 2 500 | 5.00 | 2 495.00 | 5.00 | 2 495.00 |
| 10 000 | 20.00 | 9 980.00 | 20.00 | 9 980.00 |
| 100 000 | 200.00 | 99 800.00 | 200.00 | 99 800.00 |
How long it takes
Section titled “How long it takes”About 100 seconds of Kaspa finality, then the signers and an EVM transaction. If the vault’s release allowance is used up, your release waits until it refills. See Limits.
If something goes wrong
Section titled “If something goes wrong”- The payload is missing. The burn is still valid. Anyone can later give the coordinator the burn’s chain and address; it checks them against the burn owner. See Known limits.
- The address is blocked by the token. Ethereum USDT can blacklist an address; BSC-USD cannot. USDT would
still pay a blacklisted address, but the USDT would be frozen there for good, so the signers refuse to sign it.
The burn is held with status
blockedand checked again every hour. It is paid if the token unblocks the address. Nobody can send it elsewhere: the burn commits to that address, and no key can redirect it. Its USDT stays in the vault as backing. See Known limits. - The vault cannot pay yet. If a burn lands that the vault cannot pay now, the relayer retries it with a backoff
of its own until the allowance refills or the backing arrives. It never holds up other burns. Its status shows
attempts,nextTryandlastError(see the coordinator API). - The vault can never pay it. A burn at or below the release fee, or naming the zero address or the vault
itself, is marked
unpayable. Its kUSDT is lost.