Skip to content

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.

  • 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.

Bridge out: from a kUSDT burn on Kaspa to a USDT releaseThe user sends kUSDT with a standard KCC-20 transfer to a burn owner that names the payout chain and address. Once the burn is final on Kaspa, each signer reads it from its own node, checks the burn owner and amount, and signs an EIP-712 Release. The coordinator collects at least three signatures, sorted by signer address, and calls release on the vault, which checks them and pays units minus the fee to the named address.UserKaspa walletkUSDT familyKaspa L1Signers (5)each on its own nodesCoordinatoruntrusted relayKusdtVaultEthereum or BNB ChainKCC-20 transfer to the burn ownerpayload "KUSDT" 01 … names the payout1burn state: owner = BLAKE2b(R);it can never move again23Finality: the accepting block is at least 1 000 DAA below the virtual DAA score (about 100 s)reads the burnfrom the signer's own node4checks burn owner and amount;ECDSA-signs an EIP-712 Release53 or more signaturessorted by signer address6release(r, signatures)anyone may submit7checks quorum, redeemId,backing and release allowance8pays units − fee in USDT to the address named in Revent Released(redeemId, …)9
Bridge out. Numbers match the steps on this page. The payout address is fixed by the burn owner, so no party can redirect it.
  1. 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.
  2. 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.
  3. 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.
  4. Each signer reads the burn from its own Kaspa node.
  5. 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 Release message.
  6. The coordinator collects at least 3 signatures, sorted by signer address.
  7. Release. Anyone can submit release to the vault; the coordinator normally does.
  8. The vault checks the signatures, that this burn was never paid before, the backing and the release allowance.
  9. You are paid units − fee in USDT at the address the burn named.

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

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.

  • 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 blocked and 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, nextTry and lastError (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.