Một zk rollup là đối tác blockchain của người buôn bán buôn Bến Thành: đóng 500 áo sơ mi vào một container, vận chuyển một lần, chia chi phí flete cho mỗi áo — thay vì gửi từng áo qua bưu kiện nhanh. Kết quả: zk rollup phí giao dịch giảm từ đô la xuống xu, vì phần đắt đỏ nhất (đăng dữ liệu lên Ethereum) được chia sẻ.
Một câu tóm gọn: zkRollup gom hàng nghìn giao dịch vào một batch, tạo một bằng chứng ZK duy nhất, và chia chi phí calldata cho tất cả user — nên mỗi người chỉ trả một phần nhỏ.
Nếu bạn từng thắc mắc tại sao l2 gom giao dịch làm phí rẻ 10–20 lần so với Ethereum mainnet, hay tại sao rollup phí rẻ là phép màu đằng sau zkSync, Starknet, Linea — bài viết này giải mã bằng phép so sánh với thị trường bán buôn cho dễ hiểu.
Hình 1: Container Bán Buôn — 1000 giao dịch chia 1 bằng chứng và 1 calldata
Vấn Đề: Vận Chuyển Lẻ Rất Đắt
Trên Ethereum mainnet, mỗi giao dịch là một "bưu kiện nhanh" riêng biệt:
- Bạn trả ghi trạng thái (state write) — cập nhật sổ cái blockchain
- Bạn trả calldata — đăng dữ liệu giao dịch lên chuỗi
- Bạn trả phí ưu tiên (priority fee) — tiền tip cho validator
- Tổng cộng: $1–$5+ cho một transfer đơn giản
zkRollup thay đổi cuộc chơi: vận chuyển số lượng lớn (wholesale).
zkRollup Thực Sự Làm Gì
- User gửi giao dịch đến operator L2 (sequencer).
- Operator gom batch giao dịch — hàng trăm, hàng ngàn — off-chain.
- Operator tạo MỘT validity proof (ZK-SNARK hoặc ZK-STARK) chứng minh cả batch đúng.
- Operator đăng lên Ethereum: bằng chứng + dữ liệu batch nén (calldata).
- Ethereum kiểm tra proof — nếu hợp lệ, state root mới được chấp nhận.
Ma thuật ở chỗ: một proof, một lần đăng calldata, hàng nghìn giao dịch. Chi phí cố định (verify proof ~500k gas, state write) trả một lần. Chi phí biến đổi (calldata) được nén và chia.
Phân Tích Chi Phí: Tiền Bạn Đi Đâu
| Thành phần chi phí | Ethereum L1 (mỗi tx) | zkRollup (mỗi tx, batched) |
|---|---|---|
| State write | ~21,000 gas (cố định) | ~21,000 gas ÷ batch size |
| Calldata | ~100–200 byte × 16 gas | Nén (index thay address) ÷ batch |
| Phí operator | N/A | Tip nhỏ cho sequencer |
| Xác minh proof | N/A | ~500,000 gas ÷ batch size |
| Tổng | $1.00–$5.00+ | $0.05–$0.20 |
Dữ liệu thực (l2fees.info): zkSync Era ~$0.07 send ETH, Starknet ~$0.19, Ethereum L1 ~$1.10.
Hình 2: Phân Tích Chi Phí — chi phí cố định chia đều, calldata nén, batch thắng
Tại Sao Lại Rẻ Như Vậy?
- Nén calldata: dùng index 4-byte thay address 20-byte (tiết kiệm 28 byte/tx). Byte zero = 4 gas, byte non-zero = 16 gas.
- Chi phí cố định chia đều: 500k gas verify proof chia cho 1,000 tx = 500 gas/tx.
- Không verify chữ ký mỗi tx trên L1: ZK proof cover cả batch.
Validity Proof: Phiếu Nhận Bao Quát Mọi Giao Dịch
Một validity proof (ZK-SNARK hoặc ZK-STARK) là biên nhận mật mã nói: "Tôi đã verify mọi tx trong batch này — sender đủ tiền, balance cập nhật đúng, không double-spend."
- ZK-SNARK: proof nhỏ (~200 byte), verify thời gian hằng số, cần trusted setup (ceremony). Dùng bởi zkSync (Boojum), Polygon zkEVM.
- ZK-STARK: proof lớn hơn (~50–100 KB), transparent (không trusted setup), kháng lượng tử, scale quasilinear. Dùng bởi Starknet.
Cả hai đều được verify trên Ethereum bởi verifier contract. Proof pass → state root mới là canonical. Không cần re-execute.
Mạch Chứng Minh: Cách Phiếu Nhận Được Tạo
Mạch chứng minh "lặp" qua mỗi tx trong batch:
` For each tx in batch: 1. Verify sender account exists in current state root (Merkle proof) 2. Check sender balance ≥ amount 3. Decrease sender balance, increase nonce 4. Hash updated account + Merkle proof → new intermediate state root 5. Verify receiver account exists in intermediate root 6. Increase receiver balance 7. Hash updated account + Merkle proof → new intermediate state root End loop Final state root = post-state root Batch root = Merkle root of all tx in batch `
Mạch đầu ra: pre-state root, post-state root, batch root, transaction inputs. Verifier check: proof valid + pre-state match on-chain root → accept post-state.
Recursive Proofs: Container Của Container
Recursive proofs đi xa hơn: thay vì verify một block proof một lần, mạch verify nhiều block proofs và ra MỘT proof.
` Block 1 proof → Block 2 proof → Recursive circuit → ONE recursive proof → Ethereum verify once Block 3 proof → ... Block N proof → `
Kết quả: finalize N blocks với một lần verify L1. Throughput multiplier. Đây là cách zkVM (RISC Zero, SP1) và rollup nâng cao scale thêm.
Hình 3: Bằng Chứng Đệ Quy — container của container, nhân throughput
Các Kỹ Thuật Nén Dữ Liệu
| Kỹ thuật | Tiết kiệm |
|---|---|
| Account index (4 byte) vs address (20 byte) | 28 byte/tx |
| Non-zero byte: 16 gas → Zero byte: 4 gas | Encode giá trị thường gặp thành zero |
| Batch Merkle root only | O(1) calldata cho batch inclusion |
| Transaction input compression | Chỉ post field bắt buộc |
zkSync Era's Boojum prover dùng Plonk + custom gates cho batch proving hiệu quả. Starknet's Cairo VM compile sang STARK-friendly AIR.
So Sánh Phí Thực Tế
| Network | Send ETH | Swap Tokens | Type |
|---|---|---|---|
| Ethereum L1 | $1.10 | $5.48 | Base layer |
| zkSync Era | $0.07 | — | ZK-Rollup (SNARK) |
| zkSync Lite | $0.09 | $0.22 | ZK-Rollup (SNARK) |
| Loopring | $0.04 | $0.59 | ZK-Rollup (SNARK) |
| Starknet | $0.19 | $0.57 | ZK-Rollup (STARK) |
| Polygon zkEVM | $0.19 | $2.75 | ZK-Rollup (SNARK) |
| Optimism / Arbitrum | $0.09 | $0.18–$0.27 | Optimistic Rollup |
Nguồn: l2fees.info (live data). ZK-rollups thường rẻ nhất cho transfer đơn giản.
Sự Đánh Đổi Trung Thực
Điều bạn nhận được:
- Phí rẻ 10–20 lần
- Finality gần như tức thì (proof verified → state final)
- Self-custody: ai cũng tái tạo state từ calldata + rút qua Merkle proof
Điều bạn đánh đổi:
- Rủi ro sequencer tập trung: hầu hết rollup dùng single operator (censorship có thể, giảm thiểu bằng forced exit via L1)
- Hardware sinh proof: GPU/FPGA chuyên dụng cho prover (áp lực tập trung)
- Trusted setup (SNARKs): rủi ro ceremony nếu all participant compromised
- EVM compatibility: không phải opcode nào cũng support ngang nhau (Type 1–4 spectrum)
Các Câu Hỏi Thường Gặp Về Phí zkRollup
Tại sao phí zk rollup lại rẻ?
Batching chia chi phí cố định (verify proof, state write) cho hàng nghìn tx. Calldata nén (index vs address, zero-byte encoding)."l2 gom giao dịch" là gì?
Tiếng Việt cho "L2 aggregates transactions" — operator gom nhiều user tx, thực hiện off-chain, chứng minh đúng bằng một ZK proof, đăng một batch lên Ethereum.Batching giảm chi phí calldata như thế nào?
Ethereum tính 16 gas/byte non-zero, 4 gas/byte zero. Rollup nén: index 4-byte thay address 20-byte, encode giá trị lặp thành zero. 1000 tx → ~10 KB calldata vs ~200 KB raw.Khác biệt ZK-SNARK vs ZK-STARK rollup?
SNARK: proof nhỏ, verify nhanh, trusted setup. STARK: proof lớn, transparent, kháng lượng tử. Cả hai verify batch correctness trên Ethereum.Operator xấu có thể cướp tiền không?
Không — validity proof đảm bảo state transition đúng. Operator chỉ censor (bỏ tx của bạn), không thể execute tx sai. Forced exit via L1 bảo vệ chống censor.Withdrawal hoạt động thế nào?
User gửi tx burn account trên L2. Sau batch finalized, user submit Merkle proof + batch root + tx data lên L1 contract. Contract verify inclusion → release funds. Gần như tức thì.zk rollup nào đang live?
zkSync Era, Starknet, Polygon zkEVM, Scroll, Linea, Taiko, ZKsync Lite, Loopring. zkEVM types từ Type 1 (Ethereum-equivalent, Taiko) đến Type 4 (high-level language, zkSync).Recursive proofs trong rollup là gì?
Một proof verify nhiều block proofs. Thay vì verify Block 1, rồi Block 2, rồi Block 3 trên L1 — recursive circuit verify cả ba, ra một proof. L1 verify một lần, finalize cả ba.Kết Luận
Một zk rollup là container vận chuyển số cho giao dịch. Thay vì mỗi user trả full phí (L1 gas), operator gom hàng nghìn tx vào một batch, tạo một ZK receipt, đăng một calldata nén — và mọi người chia bill.
zk rollup phí giao dịch giảm xuống xu vì:
- Chi phí cố định chia đều (verify proof, state write)
- Calldata nén (index, zero-byte encoding)
- Một proof cover all (validity proof cho cả batch)
- Recursive proofs nhân lên (container của container)
Người buôn bán buôn Bến Thành không quan tâm thiết kế áo — họ quan tâm đóng đầy container. zkRollup không quan tâm purpose tx của bạn — nó quan tâm pack đầy batch. Container đầy = chi phí thấp nhất mỗi áo. Batch đầy = phí thấp nhất mỗi tx.
Tham Khảo Nhanh
| Thuộc tính | zkRollup |
|---|---|
| Core mechanism | Batch tx off-chain → 1 ZK proof → 1 calldata post |
| Fee per tx (simple transfer) | ~$0.05–$0.20 (vs $1–$5 L1) |
| Calldata cost | 16 gas/non-zero byte, 4 gas/zero byte (EIP-1559) |
| Compression | 4-byte index vs 20-byte address |
| Proof verification | ~500k gas fixed, split across batch |
| Recursive proofs | Aggregate N block proofs → 1 L1 verify |
| Finality | Instant after proof verified on L1 |
| Self-custody | Yes — reconstruct state from calldata |
| Main risk | Sequencer centralization (censorship) |
| Live examples | zkSync Era, Starknet, Polygon zkEVM, Scroll, Linea, Taiko |
