Pinned Tweet
OpenZK is live.
0x4263773f9a3dcbb0491135fdd1790b0cda337e20
Private prepaid payments for machine commerce, on Ethereum mainnet. Fund an anonymous note with ETH, spend on inference with a zero-knowledge proof, withdraw whenever you want. Built on zkAPI, from Open Anonymity and the Ethereum Foundation.
The deposit is public. The exit is public. The note stays in the browser. The service learns the payment is valid, not who paid, what is held, or what else was bought.
Cash for the machine internet.
openzk.app
OpenZK’s GitHub is open:
Read how purse works. The React hooks fund a private ETH note, burn a slice per call behind a proof, and withdraw the rest. MIT licensed. Fork it, read it, send a PR.
Privacy is for the payment. Transparency is for the software.
The vault is on Ethereum. The toolkit is on GitHub. The note stays in the browser.
github.com/openzkapp
zkAPI runs on Ethereum. Payments are made in ETH.
We turned that into a usable product with OpenZK:
One ETH note. Private ZK proofs. Session caps. Full exit rights.
No accounts. No provider keys. Real solvency.
openzk.app/burn
The OpenZK SDK is live.
@openzk.app/purse is the React toolkit for zkAPI. Fund a private ETH note, burn a slice per call with a proof, withdraw the rest. The same billing layer that runs on openzk.app.
npm install @openzk.app/purse react
A protocol gets adopted when a developer can install it. This is that step for private machine payments on Ethereum.
Package: npmjs.com/package/@openzk.ap…
Docs: openzk.app/docs
Utility update: the inference terminal is live.
Open it, connect a wallet, fund a note with ETH. The deposit is public. The note stays in the browser. Then pick a model. Llama 3.3 70B carries a $2 session cap, so one request cannot drain the balance. The cost tier sets the limit. The note caps the exposure.
The call is paid by a zero-knowledge proof, not a provider key. The proof says the payment is valid. It does not reveal the note secret, the remaining balance, or what else the note bought. The response streams. Usage settles against the note.
Stop whenever you want. The remainder can be withdrawn to Ethereum. Unused credit does not sit in someone else's dashboard.
No account. No billing profile. No permanent API key.
Paid via cryptographic note burns. Provable solvency, zero identity.
openzk.app/burn
The utility is live.
Open the inference terminal. Pick a model. Llama 3.3 70B carries a $2 session cap, so one call cannot drain the note. The request is paid by a proof, then streamed. Same note pays embeddings.
No provider key. No billing profile. Remaining ETH can be withdrawn.
Paid via cryptographic note burns. Provable solvency, zero identity.
openzk.app/burn
Exactly why we built the OpenZK note. Fund once. Spend by proof. Exit anytime.
An AI agent can't fill out a billing form but it can hold ethereum:native and generate a proof.
That's the whole zkAPI model.
Live on @ethereum mainnet.
API credit dies inside the provider. You buy a balance, spend some of it, and the rest sits in someone else's account. Leaving means a support ticket, or writing it off.
An OpenZK note does not work like that. You fund it with ETH. The deposit lands in a public vault. The note stays in the browser. Each call burns a slice by proof, then settles against that balance.
Stop whenever you want. Exit returns the remainder to a wallet on Ethereum. No billing profile to close. No unused credit trapped behind a login.
The edges are public: the deposit, and the withdrawal. The calls in between do not have to be.
Fund once. Spend what you use. Exit anytime.
Machine commerce needs a settlement layer that does not ask for a billing profile.
Agents will not open accounts. They will not store a card. They will not wait on an invoice. They will carry a balance, hit a price, and pay for the call.
Ethereum already has the pieces that matter for that: a public vault, an exit the user controls, and an audit trail anyone can check. What it did not have was cash in the middle. A way to spend without turning every request into a permanent purchase trail.
OpenZK is that note. Fund it with ETH. Spend it by proof. Withdraw the rest whenever you want. The service learns the call was paid. Not who funded the note. Not what else it bought.
Deposit and exit stay on Ethereum. The middle does not have to.
That is the bull case. Not another model wrapper. A payment standard for machines, settled on the chain that can actually hold the funds.
Cash for the machine internet.
openzk.app/
The missing payment layer.
Accounts were built for humans. Machines still get stuck with them.
OpenZK replaces the account with a note. Fund once. Spend by proof. Exit anytime. The service learns the call was paid. Not who funded the note. Not what else it bought.
Cash for the machine internet.
0x4263773f9a3dcbb0491135fdd1790b0cda337e20
openzk.app/
Building privacy infrastructure means documenting more than launches.
Architecture decisions.
Experiments.
Things that worked.
Things that didn’t.
Where OpenZK is heading next.
We’re keeping the development journal on Ethereum-native infrastructure.
Read it:
openzkapp.eth.limo
OpenZK shouldn’t be a black box.
The infrastructure touches Ethereum.
The vaults are public.
The contracts can be inspected.
The activity can be verified independently.
Don’t trust a screenshot when you can verify the infrastructure yourself.
Vault : etherscan.io/address/0x4386F…
LLM inference is only one place where private payments matter.
- APIs.
- Embeddings.
- Compute.
- Storage.
- Data.
- Agents.
- Machine-to-machine services.
If something can meter usage, it should be able to accept programmable private payments.
That’s the direction behind OpenZK.
openzk.app/docs
The internet was built for machines to communicate.
Payments were still built for humans.
Accounts. Cards. Billing profiles. Permanent API keys.
OpenZK is working on the missing layer:
private programmable payments for machine commerce.
Fund once. Pay by proof.
Docs: openzk.app/docs
Ethereum builders are making privacy more useful.
ethereum:0x4e67db19044549ff420860834c91b45bad298722 explores private money.
zkAPI introduces private pay-per-request inference.
OpenZK takes the next step: a broader private payment layer for APIs, compute, data and machine-to-machine commerce.
Think Stripe for the machine internet.
The testnet will focus on:
- Dynamic deposits and note-based payments
Fund once, create private notes, and use them to pay for different services or requests.
- Dedicated payment addresses
Test wallet/address architecture designed specifically for private machine payments and settlement.
- Payment orchestration infrastructure
Test the systems that handle deposits, note issuance, payment verification, routing, settlement, and state management.
Participants will receive Sepolia ETH from us, so you can test the full flow without needing to source test funds yourself.
If you’re building APIs, agents, compute infrastructure, or anything that could benefit from private programmable payments, we’d like you involved.
Join the testnet:
[email protected]
Let builders keep pushing privacy infrastructure forward on Ethereum.
We’re preparing a testnet for OpenZK’s next payment infrastructure layer and we’re looking for builders who want to test it with us.
We’re opening up @openzkapp/purse for builders who want to contribute.
Help us make privacy on ethereum:native more useful, accessible, and easier to integrate.
Contribute here:
github.com/openzkapp/purse
You don’t need to start with cryptography.
Useful contributions can be much smaller:
- better TypeScript types
- clearer errors
- better React examples
- framework examples
- wallet adapters
- test coverage
- documentation
- DX improvements
- bug fixes
Good infrastructure is often won in the boring details.
The goal is simple:
make privacy infrastructure feel less like cryptography research and more like something any developer can install and use.
Start here:
github.com/openzkapp/purse
Fork it. Read it. Break it. Improve it. Send a PR.


















