Commitment
A public fingerprint.
Points to a private note and has to bind it exactly. It's a reference, not an encrypted copy of the note.
Protocol overview
Inkk is designing a bridge that checks cross-chain actions with cryptographic proofs, so you reveal less about yourself to move value from one chain to another.
See how it works, step by step vThe bridge, in plain English
Concept animationOne example, four steps. Walk through the intended bridge flow. Nothing is sent.
The idea
100 USDC · exampleOne idea to remember
Picture proving that a sealed envelope holds the right document without opening it in front of everyone. That's the goal. A real zero-knowledge proof needs a precisely written statement and cryptographic verification; the envelope is only the intuition.
Commitment
Points to a private note and has to bind it exactly. It's a reference, not an encrypted copy of the note.
Proof
Shows that the rules written into the circuit hold, without publishing the private inputs (the witness).
Nullifier
Lets the protocol refuse a note that was already used. Across chains, this needs one shared design.
Who can see what?
Zero-knowledge protects the witness behind a proof. Transparent payouts, public inputs and network metadata each need their own privacy analysis.
What exists today
| Component | Status | Role |
|---|---|---|
| Inkk interface | Available | Coin and network selection, live quotes, swap creation and status tracking. |
| Quote & order service | Connected · SWAP.MY | Quotes, swaps, deposit addresses and status come from SWAP.MY, a third-party service, through Inkk's server, which keeps the API key secret. |
| ZK bridge backend | Not built | Orchestration and settlement for the protocol described on this page. |
| Circuits & proving stack | Not specified | The proof system, its parameters and the circuits will be documented with the implementation. |
| Source & destination contracts | Not deployed | No contract addresses, bytecode or verifier versions exist yet. |
| $INKK buybacks | Planned | Inkk's revenue share from swaps is planned for buybacks. Not active yet. |
Target architecture
This is a reference design, not a description of something running. Before a bridge accepts value it has to define custody, supported chains, finality rules, fees and how assets exist on the destination.
After an eligible deposit or lock, a source contract records a commitment. The commitment root only counts once the source chain has reached the required finality. How the destination verifier comes to trust that root is a separate security decision.
The client builds a proof from its private note and the note's membership path in the commitment tree. The circuit enforces ownership and value rules. Whether proving happens in the browser or on a server, and how a lost witness is recovered, are implementation choices still to be made.
The destination checks the proof, its public inputs, the accepted source root and the spend marker. Only when all of them pass can the settlement mechanism release or issue value.
A note is your private record of a position in the protocol. A commitment is the public, cryptographic stand-in for that note. A sound construction binds every field the circuit uses, with unambiguous encoding, domain separation and enough secret randomness.
Illustrative only. Not a production circuit.
C = Commit(protocol_version, source_domain,
asset_id, value, owner_secret, randomness)
Public record: C
Private witness: note fields + membership path
Still to be chosen: the commitment function and its encoding
A note is not your wallet's seed phrase. How notes are stored, backed up, encrypted and recovered needs its own design. Publishing a commitment proves nothing about a deposit on its own, and it doesn't hide a transparent deposit transaction.
"I know a valid, authorized note in an accepted source state, and this destination action follows the protocol's spending rules."
| Private witness (intended) | Public statement (to be defined) |
|---|---|
| Note secrets and randomness | Protocol, circuit and verifier versions |
| Membership path | Accepted source root and source domain |
| Ownership witness | Destination domain and the action it authorizes |
| Value and asset data, where the design allows | Spend marker and any amounts or assets settled in public |
The final circuit has to constrain every field that affects authorization or value: range checks, conservation of value, fees, domain separation and binding to the recipient and action. A proof establishes only what the circuit actually encodes. It can't make up for a missing constraint.
A nullifier marks a note as spent without revealing the note's secrets. The protocol must stop a note being spent twice on any destination it can reach. Separate nullifier lists per chain aren't enough if the same note could be redeemed on two chains independently; notes need to be bound to one destination, or spends need one consistent authorization across chains.
A valid proof about a note doesn't prove the source chain has finalized. The bridge has to authenticate source state on its own and refuse stale, forged or reorganized roots.
A relayer can carry messages and pay gas, but must never be able to change the recipient, amount or destination. If settlement relies on a signer set or an operator, that trust assumption has to be stated plainly.
The aim is to disclose as little as possible while keeping everything independently checkable. Any privacy claim has to name the observer it holds against and follow from the circuit and transaction flow that are actually deployed.
| Observer | What they can see |
|---|---|
| Public blockchain observer | Transparent deposits and payouts show addresses, assets, amounts and timing. A proof doesn't erase those records. |
| Verifier | The proof and every public input. A private witness doesn't mean the public inputs are hidden. |
| Relayer or backend | Requests, IP addresses and routing data, unless the design specifically prevents it. |
| SWAP.MY, which carries out swaps | The coins, networks and amount of every quote and swap, plus your receiving and refund addresses. Requests reach SWAP.MY through Inkk's server, so SWAP.MY does not get your IP address from Inkk. |
| Inkk's server | Passes each request to SWAP.MY and sees your IP address while doing so. It keeps no accounts and stores no swaps, and it never holds funds. Cloudflare hosts it and sees requests as any web host does. |
| Your browser | Remembers the reference of your latest swap so you can resume it. The page loads its fonts from Google Fonts. |
An external exchange service doesn't shield balances, doesn't produce Inkk proofs and doesn't hide transfers from itself. Private balances or selective disclosure would need extra mechanisms that are actually built. Routing through a privacy-focused asset doesn't by itself mean a shielded transfer happened.
Nothing here claims an audit, a trusted-setup ceremony, production proving performance or a mainnet deployment. Those claims need published artifacts behind them.
Live
The endpoints the app calls on Inkk's own server, which checks each request and passes it to SWAP.MY. They cover the exchange lifecycle only; none of them generates Inkk proofs.
GET /api/configWhether swaps are switched on, and who carries them out.
GET /api/currenciesEvery coin and network SWAP.MY supports.
POST /api/quoteA live, floating-rate quote for a route. Body: the coins and networks, amount, receiving address, optional memo/tag and refund address. Creates nothing.
POST /api/ordersCreates the swap with SWAP.MY and returns its one-time deposit address (and memo/tag when the network needs one).
GET /api/orders/{id}The swap's latest status, amounts, addresses and transaction links.
POST /api/rpcA read-only Solana relay for "Send with Phantom": balances, token accounts and a recent blockhash. It can't send anything; Phantom sends the one transfer you approve.
The Inkk economy
SWAP.MY charges a fee on each swap. It is shown in every quote and already included in the amount you receive, and Inkk adds nothing on top. As a SWAP.MY partner, Inkk receives a share of that fee for each completed swap.
The plan is to put all of Inkk's revenue share toward buying back $INKK. Swap amounts and network fees are never revenue. Buybacks aren't active: the treasury, the execution rules and public reporting all have to exist first, and holding $INKK earns nothing on its own.
There is no cashback. An earlier version of this page described one; it was never switched on.
No launch date is promised. This page changes as reviewable code and deployments exist.
For a general introduction to zero-knowledge proofs, read Zcash: What are zk-SNARKs? For circuit concepts, see the Circom documentation. These explain the techniques; Inkk isn't affiliated with either project and doesn't inherit their security.