Conversation
1685611 to
56b764a
Compare
Blog post: "DIY Validium: Private Logic on Public Rails" Covers the DIY validium PoC: guest program pattern (disclosure proof as full exhibit), validium architecture, escape hatch + forced withdrawal (anti-censorship), trust model comparison with other IPTF approaches, and open questions on private shared state. Three Excalidraw diagrams and hero image.
56b764a to
f9c9c3d
Compare
_posts/2026-03-21-diy-validium.md
Outdated
|
|
||
| The program commits three values to the proof's public journal: the Merkle root, the threshold, and the disclosure key hash. That's all the auditor gets. Balance met a threshold, against a specific state root, bound to their identity. | ||
|
|
||
| A compliance officer can read this code. Compare that to Circom, where the same check needs roughly 80 lines of manual signal routing and SHA-256 constraint wiring. The business logic (`balance >= threshold`) is identical either way; everything around it in Circom is circuit plumbing. |
There was a problem hiding this comment.
might want to say the tradeoff here is maintainability vs perf?
There was a problem hiding this comment.
Good call — added this. The line now reads:
The tradeoff is maintainability vs performance: zkVMs are slower than hand-optimized circuits, but the code is readable and auditable.
tldr: ✅ Added maintainability vs perf tradeoff.
_posts/2026-03-21-diy-validium.md
Outdated
| This is a PoC. Some of the gaps are straightforward to close, others are open problems. | ||
|
|
||
| On the engineering side: the operator is centralized (production would use a DA committee or post calldata). Users save their own data for escape (production would add blob checkpoints or encrypted DA). Disclosure keys are hash-based (production would use verifiable encryption; both Aztec and Miden are exploring this). There's no batching, and deposits and withdrawals are public. |
There was a problem hiding this comment.
curious, each state transition triggered by a transfer/deposit would invalidate all pending transactions in the mempool due to root mismatch, right? can we count that as a limitation?
There was a problem hiding this comment.
Yes exactly — each state transition updates the root, so any in-flight proof built against the old root becomes invalid. Added this as an explicit limitation:
Each state transition updates the root, which invalidates any in-flight proofs built against the old root — there's no concurrent transaction processing without batching.
tldr: ✅ Called out root invalidation as a limitation in "What's missing".
_posts/2026-03-21-diy-validium.md
Outdated
|
|
||
| ## Write Rust, prove it, verify on-chain | ||
|
|
||
| A validium keeps account data off-chain (held by an operator) and posts only Merkle roots and validity proofs on-chain. The chain stores almost nothing, but every state transition is cryptographically proven. If a transfer violates the rules, the proof won't verify and the contract rejects it. |
There was a problem hiding this comment.
Intro might be a bit too technical.
Validium => define it as a rollup
Merkle roots => commitment
validity proofs on-chain => a proof that the operator is doing correct work on the L1 contract...
There was a problem hiding this comment.
Agreed — rewrote the intro. Now reads:
A validium is a type of rollup that keeps account data off-chain with an operator and posts only commitments and proofs to L1. The L1 contract verifies that the operator performed each state transition correctly.
tldr: ✅ Defined validium as a rollup, replaced jargon with plain language.
There was a problem hiding this comment.
what did you use to generate this? looks sick
There was a problem hiding this comment.
From the PR message, it might be a placeholder, but I agree it does look cool.
There was a problem hiding this comment.
Generated some Midjourney prompts and then tweaking a bit :) Midjourney
Not placeholder, this is the real hero iamge!
There was a problem hiding this comment.
Nope — deleted all three excalidraw source files and added *.excalidraw to .gitignore. PNGs are still there.
tldr: ✅ Removed, gitignored.
diy-validium-outline.md
Outdated
There was a problem hiding this comment.
Deleted.
tldr: ✅ Removed.
rymnc
left a comment
There was a problem hiding this comment.
overall i think it looks good, but seems too playful and has a bit of an ai voice to it, dealing in superlatives, slightly shilling etc
_posts/2026-03-21-diy-validium.md
Outdated
| commitment = SHA256(pubkey || balance_le || salt) | ||
| ``` | ||
|
|
||
| `balance_le` is the balance encoded as little-endian bytes (matching Rust's `u64::to_le_bytes()`). Sequential root checks (`require(oldRoot == stateRoot)`) prevent replay: each operation changes the root, making stale proofs invalid. We don't need nullifiers (unlike UTXO models like Zcash or our [shielded pool PoC](/building-private-transfers-on-ethereum/)), but the tradeoff is that a centralized state holder is required. |
There was a problem hiding this comment.
Should we go that deep in a blog post? Or can it be abstracted?
There was a problem hiding this comment.
Agreed — removed the code block with the commitment formula. Now just says:
Each account is a leaf in a Merkle tree. The leaf is a hash of the account's public key, balance, and a random salt.
tldr: ✅ Abstracted away, no more code block.
|
Thanks for the review comments! Addressed Feedback@rymnc
@Meyanis95
Ready for re-review. |
Remove excalidraw source files (PNGs kept), gitignore *.excalidraw, delete outline doc, and refine blog post wording for clarity.
11f7a9e to
129148a
Compare
_posts/2026-03-21-diy-validium.md
Outdated
| --- | ||
| layout: post | ||
| title: "DIY Validium: Private Logic on Public Rails" | ||
| description: "We built a validium in a few hundred lines of Rust and Solidity to understand what programmable privacy looks like end to end. The business logic is just Rust, proved in zero knowledge and verified on Ethereum." |
There was a problem hiding this comment.
Good catch — shortened to: "A validium PoC where the business logic is ordinary Rust, proved in zero knowledge and verified on Ethereum." Should fit in preview now.
…lint Address reviewer feedback on forced withdrawal two-step semantics and deposit stranding risk. Apply voice lint: hook pivot, orientation line, trust model forward-reference, UTXO callout, and ending recap.
Tweaked in a bunch of places; if there are still specific places that seems off to you please comment in-line |
Lead with problem statement instead of cold-opening with a code block. Remove duplicated "what are the moving parts" motivation. Keep assert! snippet as an earned reveal. Re-add Prividium mention in validium definition paragraph. Co-Authored-By: oskarth <o@oskx.io>
|
Reworked the opening section:
Net: -2 lines, matches the voice of earlier posts in the series. |
Co-Authored-By: oskarth <o@oskx.io>

Summary
Still needed
feat/escape-hatchbranchbundle exec jekyll serveTest plan
bundle exec jekyll serverenders post correctly