The bridge · testnets only

Sepolia USDC in, USDC.sep out — and back.

Lock Circle's test USDC in a vault on Ethereum Sepolia naming a HashKinetics account; once Ethereum has finalized the block (≈ 13 min) the bridge mints the same amount of USDC.sep to it on testnet-1. Burn USDC.sep with a Sepolia address as destination and the vault releases the USDC within a couple of minutes. 1:1, six decimals both sides, no bridge fee. Test value only — nothing here has a price.

Trust label, said first. On this side every balance moves under hash-based keys — the mint is signed by the bridge issuer account, your burn by yours. On the Ethereum side the vault trusts a threshold of attestor keys, which are ECDSA because Ethereum verifies nothing else. Today that is one key (1-of-1), run by the founders: the bridge is exactly as safe as that key and the service's code. Deposit ids checked by consensus (X2) and a committee of operators (B2) come next.
Vault reserves — Sepolia, live
HKVault.reserves()
USDC.sep on testnet-1
supply − burned
The invariant
checked in your browser from the two public RPCs, and by the service every 10 min
Reverse leg · wHKT.sep
ERC-20 supply on Sepolia
Today's unlock room
per-day cap on releases
STEP 1 · WHAT YOU NEED

Test USDC, a little Sepolia ETH, and a HashKinetics account

USDC on Sepolia: faucet.circle.com (20 per address per two hours). Sepolia ETH for gas: any Sepolia faucet. A HashKinetics account that exists on chain: the faucet creates one from your auth commit, or the wallet does it for you — a mint to an id that does not exist yet is held by the bridge until it does.

Vault 0x989Cb35485d16c7b19Dff890b617984EeD9970aF · USDC 0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238 · USDC.sep asset id 0c3c3f40884ef40aee41d2ae2b823c8cc1e2c0859172ef20ff899f015442c0f1 (issuer c58cf9224f21). Contracts and the guide: bridge/contracts, docs/BRIDGE-GUIDE.md.

STEP 2 · SEPOLIA → TESTNET-1 (YOUR WALLET)

Approve, then lock

MetaMask or any injected wallet, on Sepolia. The page builds the two calls itself — approve(vault, amount) on USDC, then lock(amount, hkAccount) on the vault — and your wallet shows you exactly what it signs.

STEP 3 · TESTNET-1 → SEPOLIA

Burn USDC.sep with your Sepolia address as the destination

The destination is your address as exactly 20 bytes of hex, no 0x. The burn commits in one block; the service attests it and the vault releases the USDC — about two minutes. The burn's txid is the burnId; the vault pays each one at most once.

# from the machine that holds your account (CLI path)
hk-node asset burn ~/my-account https://rpc.hashkinetics.org 0c3c3f40884ef40aee41d2ae2b823c8cc1e2c0859172ef20ff899f015442c0f1 5000000 <your Sepolia address, 40 hex>
# two minutes later, +5 USDC on Sepolia — or watch the events list below

Your account pays the flat 100-micro protocol fee in the test asset, so keep a little of that. A burn with any other destination length is valid on HashKinetics but unbridgeable: the service records it and never attests it. If the vault is paused or the day's cap is used up, the release waits in the queue — it is never lost.

THE OTHER DIRECTION · HKT ⇄ wHKT.sep

An HK-issued asset as an ERC-20 on Sepolia

Burn HKT on testnet-1 naming a Sepolia address and wHKT.sep is minted there about a minute later — no finality wait, a HashKinetics commit is final. Burn it back here and the issuer re-mints HKT after Ethereum finality.

hk-node asset burn ~/my-account https://rpc.hashkinetics.org f2b88facb835a9e331b51772cf98cbcb95d6c86233324d252fd4c9edd8fbbcea 4000000 <your Sepolia address, 40 hex>

wHKT.sep 0x24159bE1577f3016AD64beA7D1430e5F2313DB26 · HKT asset id f2b88facb835a9e331b51772cf98cbcb95d6c86233324d252fd4c9edd8fbbcea. Wrapping the real HKN after TGE is a policy decision for counsel; this is the machinery, rehearsed on test assets.

EVERY HOP ON THE ETHEREUM SIDE — LIVE FROM THE VAULT'S LOGS

Bridge events

reading the vault's and the wrapped token's logs…

The HashKinetics side of every hop is a txid on the public RPC: hk_getTx, hk_getAsset for supply and burned, or the explorer. The first loops, with every txid: receipts.

WHAT CAN GO WRONG

And what happens then

Recipient account missing on HK → the mint is held and retried until it exists. Sepolia reorg before finality → never eligible, nothing minted. Vault paused (any attestor can pause; only the owner unpauses) or daily cap reached → the release is queued and drained when the vault reopens. Service crash between "submitted" and "recorded" → that item is held for a human, never retried by itself — the gate proves this with a kill -9 mid-flow. Nothing on this page can move funds without your wallet's signature.

HONESTY

What this is, and is not

A proof-of-concept bridge between two testnets, built so that the shape of the real one — deposit ids in consensus, an operator committee, a light-client path — can be argued from receipts instead of slides. Circle's test USDC and Sepolia ETH have no value; USDC.sep is our name for "Sepolia-backed test USDC", never "USDC" alone. Nothing on this page is an offer of anything. Mainnet value never flows through this path before X2, an audit and a real committee.