Skip to content

The wallet

The kUSDT wallet is a browser extension (Manifest V3) in wallet/extension. It is built and tested against the local stack. A testnet build can be downloaded; it is not in any store yet.

For Chromium browsers: Chrome, Brave and Edge.

  1. Download kusdt-wallet-testnet.zip from https://kastools.com/downloads/kusdt-wallet-testnet.zip.
  2. Unzip it.
  3. Open chrome://extensions.
  4. Turn on Developer mode.
  5. Click Load unpacked and pick the unzipped folder.
  6. Pin the extension.

It starts on Testnet. To try it end to end, see Test on the public testnet.

Feature Detail
KAS and kUSDT Holds and sends KAS and kUSDT as standard KCC-20 states
Deposits Bridges USDT in from Ethereum and BNB Chain through its own EVM side. On testnet its Bridge tab has “Get 1,000 test USDT”
Redemptions Builds the burn with the right burn owner and payload
Pool Swaps KAS and kUSDT, adds and removes liquidity
Pages Injects window.kusdt, so a page can ask the wallet to send, redeem, swap or provide liquidity. See Wallet provider

It was tested live against npm run local:stack: deposits on both chains, a send, a redemption through to its release, swaps, and adding and removing liquidity. The live tests also blacklist an address with the dev faucet: the wallet refuses it before any burn, and a burn built past the checks is held as blocked until the address is taken off the list, then released. It also has 78 unit tests, a simnet test, live-stack tests and a browser smoke test. Its README is wallet/extension/README.md.

  • Your keys stay on your device. The wallet builds every transaction itself with the WebAssembly builders, shows you what it does, signs and submits it. A page never sees a key.
  • It pins the deployment: the kUSDT covenant ID, the pool’s covenant ID and the vault addresses.
  • It takes nothing the coordinator says about a covenant state as fact. Before a state is shown or spent, the wallet checks its fields, recomputes its locking script, and finds that exact outpoint on the Kaspa node with the same script and the pinned covenant ID. A token state that fails is dropped; a pool state that fails is refused. See Following covenant states.
  • It refuses burns the vault cannot pay now: a payout above the named vault’s release capacity or current releaseAvailable, an amount above its backing, a paused vault, or an amount at or below the release fee.
  • It refuses a recipient the vault would not pay. Before every burn it asks the coordinator (GET /recipients/:chain/:address), and it burns only when the answer, about exactly that chain and address, says payable. See Blocked recipients.

What you see on the redeem screen:

Case What the wallet does
The token blocks the address An amber notice: “USDT on blocks this address: a payout there would be frozen, so the vault pays nothing to it. Use another address.” Review stays off
The zero address or the vault’s own “The vault won’t pay this address (…)”. It refuses without asking
The coordinator can’t answer “Couldn’t check the recipient with the coordinator, so nothing was burnt…”, with a Check again button
Right before sending It asks once more, whatever the screen showed
The other chain Offered only when that chain’s vault would pay the address too. A blocked address is never steered to the other chain

Activity shows a redemption or a refund the coordinator holds (blocked) as held. It is paid automatically if the token unblocks the address.

kUSDT’s token code is the standard KCC-20 reference, compiled to the same bytes. A wallet that supports KCC-20 can therefore read kUSDT states without any kUSDT-specific code. See The KCC20 template.

Before mainnet, kUSDT’s genesis is to be reviewed by kascov.io. Wallets mark tokens whose genesis has not been reviewed as “unvalidated”, so kUSDT may show that label until the review is done.

Every Kaspa transaction pays a network fee in KAS. Each kUSDT state also carries KAS for the storage it uses (see Storage mass):

Output KAS it carries Comes back?
An ordinary kUSDT state 1.5 KAS Yes, when the state is spent
A redemption’s burn output 0.3 KAS No: nothing can spend a burn, so it is gone for good

Keep some KAS next to your kUSDT.