Status
As of 14 November 2026. kUSDT launches on mainnet today (Kaspa, Ethereum and BNB Chain), from the release
mainnet-v0.9.8-rc.25. Until the launch is verified, trestly.io shows a “Launching today”
page; the web app (Bridge, Swap, Pool, Reserves) opens there once the launch is verified. The mainnet addresses are
published below at the same time. The public testnet ran from 4 to 14 November 2026 and has ended
(The public testnet).
Components
Section titled “Components”| Component | Runs on | Status | Evidence |
|---|---|---|---|
| Protocol specification | (document) | v1 | SPEC.md, the source of truth for these docs |
| BridgeMint covenant | Kaspa L1 | Written | Script-engine tests, attacks included (175 Rust tests in all, with the pool’s); simnet run |
| kUSDT token family (KCC20, TokenSeed, BridgeMint) | Kaspa L1 | Written | KCC20 template matches the standard byte for byte (test) |
| KasPool covenants (Pool, Position) | Kaspa L1 | Written, with the circuit breaker and the pause | Script-engine tests; simnet run; the forged-kUSDT dump capped in local:e2e |
| KusdtVault | Ethereum, BNB Chain | Written | 209 Hardhat tests; reviewed line by line against the specification |
| Transaction builders | Rust CLI (kusdt-tx) and WebAssembly |
Written | The simnet run uses them |
| Signer and coordinator services | Off-chain | Written | The local end-to-end run (below) |
| Monitor and guardian service | Off-chain | Written | Caught and paused a forged mint in the local end-to-end run (below) |
| Web app | Browser | Built (bridge/web); ran on the public testnet, 4 to 14 November 2026; on mainnet at trestly.io once the launch is verified |
249 unit tests, end-to-end tests on the live stack, and a suite driving the real wallet extension |
| Wallet extension | Browser | Built (wallet/extension), tested against the local stack and on the public testnet. Its mainnet version is published right after the launch |
227 unit tests, simnet and smoke suites, and tests against the live stack. Its page interface is specified (Wallet provider) |
| Refunds | Services and vault | Working | local:load: a deposit skipped and refunded 14.5 USDT |
| Mainnet fork rehearsal | Forks of Ethereum and BNB Chain | Passed | The vault against the real USDT and BSC-USD |
| Internal security review | Money paths | Done, fixes applied | See Audit status |
| Deployment tooling | Docker image, testnet compose file, runbook, mainnet packages | Written | See Operations |
| Vault owner: AccessManager under a Safe | Ethereum, BNB Chain | Built and rehearsed; each mainnet vault is owned this way (a 2-of-3 Safe, 48-hour delays, a 6-hour emergency delay, two cancellers). The testnet vaults kept a plain owner | 17 Hardhat tests; mainnet:rehearse |
| Mainnet packages: signer, coordinator, monitor, deployer, web app | Off-chain | Built; launching today from mainnet-v0.9.8-rc.25 |
mainnet:rehearse on forks and simnet, 49 checks; local:rotate, 16 checks |
| Signer keys in an HSM or KMS | Off-chain | Built, as an option | See Operations |
| Proof of reserves | Browser | The web app’s Reserves page: ran on the public testnet, 4 to 14 November 2026; on mainnet once the launch is verified | Reads the vaults and the minter itself, next to GET /reserves and the monitor’s check |
| Reproducible covenant bytecode | CI | Built | tools/check-artifacts.mjs and a CI job recompile and compare, byte for byte |
| Outside reviews | Code and services | Four so far, each finding answered. Not an audit | See Audit status |
| Public testnet | TN10, Sepolia, BSC testnet | Ran on the public testnet, 4 to 14 November 2026; ended | testnet:e2e passed: deposits on both chains minted on TN10, 20 kUSDT redeemed to BSC testnet (19.5 USDT paid), the pool opened and a swap, and a burn to a blacklisted address refused, held, then paid once unblocked. It ran on one test host in isolated containers (see Operations) |
| Mainnet deployment | Kaspa, Ethereum, BNB Chain | Launching today, 14 November 2026, from mainnet-v0.9.8-rc.25 |
Addresses published here once the launch is verified. See the mainnet checklist |
| Signer operators | Mainnet | Five independent operators; any 3 approve a mint or a payout, 4 for Kaspa governance | The mainnet checklist, item 1 |
What the simnet run shows
Section titled “What the simnet run shows”A local Kaspa node (kaspad v2.1.0, simnet) accepted every step of the Kaspa-side flow, bridge and pool:
- a KCC-23 preparation transaction carrying the token metadata;
- the genesis transaction that creates BridgeMint and a TokenSeed;
- a mint of two Ethereum deposits (nonces 0 and 1), signed by signers 0, 2 and 4;
- a KCC-20 transfer between two users;
- a redemption burn to a burn owner naming an Ethereum address, with the redemption payload;
- a mint of two BNB Chain deposits (nonces 0 and 1), signed by signers 1, 3 and 4;
- the pool’s genesis, then its first deposit (200 KAS and 20 kUSDT);
- a buy, a sell, a liquidity deposit, a liquidity withdrawal, and the admin collecting the protocol fees.
The whole bridge on one machine
Section titled “The whole bridge on one machine”The local end-to-end run first passed on 3 November 2026. It has passed with the pool attack below since 4 November 2026, most recently on 7 November 2026. It runs two Hardhat chains (chain IDs 31337 and 31338, standing in for Ethereum and BNB Chain, with MockUSDT at 6 and 18 decimals and a vault each), the kaspad simnet, the 5 signers, the coordinator and the monitor, all on one machine. It showed:
- a deposit on each chain, minted on Kaspa with 3 of 5 signatures;
- a burn naming chain 2, released by its vault: 49.5 USDT paid for 50 kUSDT burned;
- healthy reserves (INV-1) afterwards;
- the coordinator’s pool and position APIs following a buy and a liquidity add and remove;
- the monitor agreeing with the coordinator before the attack: minted 299, released 50, owed 249 ≤ backing 249 (USDT), no alarms.
Then the attack. Three stolen signer keys try to mint 1 000 000 kUSDT; the mint allowance refuses it. They mint
400 000 kUSDT with no deposit; the covenant accepts it, because the signatures are valid and it is within the
allowance. Selling all of it into the pool at once is refused by the pool’s circuit breaker, which lets out under
10 % of the pool’s KAS. Within seconds the monitor raises inv1 and pauses both vaults, the minter and the pool. The coordinator follows
the forged mint and the pause, and a paused vault refuses a new deposit. This is the strongest evidence so far
that the defences work together. See The monitor.
The wallet extension was also tested live against the same stack (npm run local:stack): deposits on both
chains, a send, a redemption through to its release, swaps, and adding and removing liquidity.
Addresses
Section titled “Addresses”No mainnet address is published yet. The kUSDT covenant ID, the KasPool covenant ID, the two vault addresses, the coordinator API and the monitor’s status URLs will be listed here once the launch is verified. Until then, trust no address, covenant ID or API that claims to be kUSDT’s.
The public testnet’s addresses no longer work: it ended on 14 November 2026.
The USDT contracts that the mainnet vaults hold are fixed by the specification:
| Chain | Token | Address | Decimals |
|---|---|---|---|
| Ethereum | USDT | 0xdAC17F958D2ee523a2206206994597C13D831ec7 |
6 |
| BNB Smart Chain | BSC-USD | 0x55d398326f99059fF775485246999027B3197955 |
18 |