Smart Contractsintermediatearticle35 min read

zkEVM cho Developer Solidity: Toolchain Thay Đổi Gì?

Bạn là zk evm developer? Hướng dẫn so sánh zkSync, Scroll, Linea, Taiko: compiler, bytecode, gas, deploy, audit và rủi ro vòng đời chain.

Vietcardano teamTeam

Đội ngũ biên tập VietCardanoCommunity — các chuyên gia blockchain và Cardano, cung cấp nội dung giáo dục và nghiên cứu chuyên sâu cho cộng đồng.

Published 31 tháng 8, 2026Updated 30 tháng 8, 2026

Linh đã ship Solidity lên Ethereum được ba năm. Mỗi thứ Sáu cô đều làm cùng một nghi thức: hardhat run deploy.ts, chờ xác nhận, cập nhật địa chỉ contract trên frontend. Rồi khách hàng yêu cầu deploy cùng protocol lên zkEVM. Là một zk evm developer mới bước vào thế giới này, cô chỉ nghĩ "thêm RPC, đổi chain id." Thay vào đó cô khám phá ra một menu: zkSync, Scroll, Linea, Taiko, và Polygon zkEVM (đã ngừng hoạt động) — mỗi nền có compiler, deploy script, và gas model khác nhau. Bài viết này là bản đồ cô cần: điều gì thực sự thay đổi trong toolchain khi Solidity chạy sau một zero-knowledge proof, từng chain một, với tradeoffs được nêu rõ.

Tin tốt trước: kiến thức Solidity của bạn mang qua gần như 100%. Bạn không cần học ngôn ngữ mới, mô hình state mới, hay cách viết circuit. Tin xấu: zkEVM không phải một thứ duy nhất, và khác biệt toolchain được quyết định bởi một câu hỏi — bytecode nào thực sự chạy. Trả lời được câu đó, mọi thay đổi khác sẽ theo sau.

Phổ tương thích zkEVM: từ Type 1 EVM-equivalent (Taiko) đến Type 4 Solidity-equivalent (zkSync Era)

Hình 1: Phổ tương thích zkEVM — bytecode compiler emit quyết định mọi thứ khác trong toolchain

Phổ tương thích zkEVM: bạn đang deploy lên "EVM" nào?

Năm 2022 Vitalik Buterin công bố một phân loại mà ngành vẫn dùng đến nay: Type 1 đến Type 4, sắp xếp theo mức độ mỗi hệ thống tái tạo Ethereum Virtual Machine. Mọi cấp đều chấp nhận mã Solidity. Khác biệt ở chỗ compiler emit cái gì và chain execute cái gì.

Type 1 — Ethereum-equivalent. Cùng EVM bytecode, cùng opcodes, cùng state transition, được xác thực bằng proof. Taiko là ví dụ production. Bạn deploy đúng cái bạn deploy lên L1. Cái giá: proving EVM trực tiếp là đắt đỏ nhất, đẩy phí lên.

Type 2 — EVM-equivalent. Bytecode chạy không đổi, nhưng chain tái trọng gas cho một vài opcodes—những cái sẽ làm prover phát nổ—và stub một vài precomp. Scroll và Linea là ví dụ production. Tài liệu Scroll liệt kê khác biệt thẳng thắn: SELFDESTRUCT bị vô hiệu hóa, DIFFICULTY/PREVRANDAO trả về 0, COINBASE trả về fee vault, và EIP-4844 blob opcodes không được expose trên L2. Hầu hết contract không chạm vào chúng.

Type 3 — mostly equivalent. Một số opcodes được thay thế bằng phiên bản ZK-friendly, gas semantics sửa, và precompiles chỉ được implement một phần. Mã nguồn compile được, nhưng hành vi có thể khác trong code nhạy cảm gas. Polygon zkEVM từng là Type 3 tiêu biểu — và là câu chuyện cảnh tỉnh trong bài viết này.

Type 4 — Solidity-equivalent. Chain bỏ hoàn toàn EVM bytecode, chạy VM riêng. zkSync Era's EraVM thực thi instruction set riêng. Solidity của bạn là source-compatible: compile được, nhưng đến bytecode khác, qua compiler khác, với storage và gas semantics khác. Đây là mức độ khác biệt lớn nhất.

Hệ quả rõ hơn hầu hết tutorial dám thừa nhận. Trên Type 1 và Type 2, solc vẫn là compiler — bytecode chạy chính là bytecode bạn đã audit. Trên Type 4, zksolc là compiler — một toolchain thứ hai bạn phải nhận, với versioning theo EraVM chứ không theo Solidity. Một solidity zk rollup dev hiểu được điểm fork này đã hiểu 80% công việc migration.

Điều gì thay đổi trong compiler pipeline

Bắt đầu từ chain không đổi gì cả. Trên Scroll, Linea, Taiko, deployment là "thêm RPC, deploy." Hardhat config thêm network entry, Foundry foundry.toml thêm RPC URL, solc phát ra cùng bytecode luôn. Cùng địa chỉ dưới cùng CREATE2 salt, cùng storage layout, cùng test. Audit contract bạn nhận được trên Ethereum mainnet áp dụng trực tiếp cho L2 — auditor gọi đây là transferability, đáng $20,000–50,000 mỗi deployment trong tiết kiệm re-audit. Với team nhỏ Việt Nam con số này không phải trừu tượng: thường là một phần tư ngân sách dự án.

zkSync Era là đầu kia. Toolchain là một LLVM pipeline. solc chạy trước như child process và emit AST; rồi zksolc hạ thế IR xuống LLVM IR, chạy LLVM optimizer, emit EraVM bytecode. Một số hệ quả thực tế theo sau:

  • Hai compiler cần quản lý version. Version zksolc theo EraVM protocol, nên "update compiler" có nghĩa khác với release của solc. Đọc changelog.
  • Từ vựng optimizer khác. zksolc dùng LLVM levels 0/1/2/3 thêm z (tối ưu deployment-size) và sizeFallback re-run. Setting runs: 200 cũ là vô nghĩa.
  • Divergence bất ngờ. Inline assembly dựng trên EVM stack semantics có thể gãy. tx.origin và send/transfer là suppressed warnings. ripemd160 là suppressed. ecrecover hoạt động. Địa chỉ CREATE2 được tính từ bytecode hash, không phải raw init code, khác L1.
  • Gas model đảo lộn thói quen. Storage rẻ tương đối, computation đắt đỏ hơn. Contract hardcode gas amount sẽ hành xử khác, và trực giác "cái nào đắt" cần học lại.

Tháng 4/2025 zkSync giới thiệu EVM Bytecode Interpreter, chạy EVM bytecode không sửa trên EraVM. Đột ngột Foundry/Hardhat/Remix chuẩn hoạt động không plugin, và create/create2 trùng khớp EVM hoàn toàn. Nhược điểm: interpreted execution tốn gas hơn native EraVM bytecode. zkSync giờ đưa ra lựa chọn thật — tool chuẩn với phí cao hơn, hoặc custom tooling với phí thấp hơn. Chi phí dịch chuyển từ thời gian developer sang phí người dùng.

So sánh toolchain Solidity: EVM-equivalent (Scroll/Linea) vs zkEVM (zkSync Era) với đường giữa EVM Bytecode Interpreter

Hình 2: Toolchain Solidity trước và sau zkEVM — EVM-equiv chỉ cần thêm RPC; Solidity-equiv cần compiler mới

Toolchain zkEVM thay đổi gì trong deploy và testing

Đối với Type 4 chain, deploy script thay đổi hoàn toàn. Trên zkSync bạn không gọi ethers.getContractFactory rồi deploy; bạn dùng class Deployer từ @matterlabs/hardhat-zksync-deploy, hoặc forge create --zksync nếu thích Foundry fork. Plugin suite giờ đóng gói trong @matterlabs/hardhat-zksync bao gồm compile, deploy, verify, Vyper support, upgradeable contracts, và local node plugin chạy anvil-zksync. foundry-zksync (cài qua foundryup-zksync) thêm cờ --zksync cho forge build, forge test, và forge create.

Mọi thứ downstream đi theo: contract verification qua zkSync verifier (có bytecode-representation quirks được fix 2026), zksync-ethers SDK bọc ethers với trường transaction EraVM-aware, và gas estimation cần gas model của zkSync chứ không phải heuristic L1. Testing cũng là fork: era-test-node / anvil-zksync replicate EraVM locally, và stack traces từ tooling nhận biết zkSync.

Đây là tóm tắt honest mà một solidity zk rollup dev nên ghi nhớ:

  • Scroll / Linea / Taiko: zero toolchain delta. Đây cấp "nó vừa vặn". CI, fuzzing, Tenderly traces — tất cả mang theo.
  • zkSync (native EraVM): nhận hardhat-zksync hoặc foundry-zksync, chạy lại test suite, re-validate edge cases (assembly, precompiles, gas branches, address derivation), và ngân sách cho re-audit.
  • zkSync (interpreter): tool chuẩn hoạt động, gas cao hơn, và — như các fix verifier 2026 cho thấy — EVM-emulated verification vẫn đang trưởng thành.

Với các team Việt Nam sự phân chia này rất thực tế. Team ship DeFi hoặc lending logic nên coi audit transferability của Scroll như một dòng chi phí; team ship GameFi hoặc consumer app nên nhìn kỹ account abstraction của zkSync — đó là nơi giá trị user-facing thực sự sống.

Gas, phí, và prover bạn chưa bao giờ thấy

Hai thứ xảy ra sau transaction thực thi: sequencer gom nó vào batch, và prover xây proof rằng toàn bộ batch thực thi đúng. Proof đó được xác thực bởi contract trên Ethereum L1, đó điều làm zkEVM "validity-based" — withdrawal finalize trong vài giờ, không cần cửa sổ 7 ngày như optimistic rollups.

Kiến trúc zkEVM: hợp đồng Solidity → compiler → bytecode → sequencer → prover → L1 verifier → finality trên Ethereum

Hình 3: Kiến trúc zkEVM — developer không chạy prover, nhưng phí và finality do prover quyết định

Bạn, developer, chưa bao giờ chạy prover. Nhưng chi phí prover nằm trong phí, và lịch prover chính là finality của bạn. Một proof có thể tốn $50–500 compute; prover operator kiếm chênh lệch giữa gas user trả và chi phí proving. Đó là ngành nghiện proof cost. Nâng cấp Boojum của zkSync cắt proving cost xấp xỉ mười lần, và nghiên cứu 2026 cho thấy proof generation đã cải thiện ~60x so với thiết kế sớm, với top teams chứng minh sub-2-second proofs — nhanh hơn block time 12 giây của Ethereum.

Fee arithmetic khác nhau theo chain. zkSync tính ~$0.01–0.06 mỗi swap; Scroll ~$0.05–0.18. Phí Scroll gồm hai phần — L2 execution fee cộng L1 data fee cho việc đẩy dữ liệu transaction lên Ethereum, thường là thành phần lớn và biến động nhất. Gas model của zkSync khiến storage rẻ và computation đắt. Finality dao động từ 20–45 phút trên zkSync đến 30–60 phút trên Scroll, với tính năng "fast finality" thu nhỏ latency cảm nhận.

Hai thực tế vận hành quan trọng hơn con số. Thứ nhất, đến 2026 mọi zkEVM lớn đều chạy centralized prover; permissionless proving là roadmap item (zkSync cuối 2026, Linea "by year-end 2026"), prover của Scroll là open-source. Proof pipeline của chain bạn chọn là trust assumption, không phải bài toán đã giải. Thứ hai, blob của Dencun (EIP-4844) cắt data cost nhưng compatibility lệch tùm lum — Scroll ghi chú rõ blob opcodes không expose trên L2 dù blob-based data availability, phá code monitoring ngây thơ.

Account abstraction: điểm khác biệt của zkSync

Tính năng duy nhất thay đổi bạn có thể build cái gì hơn là bạn deploy thế nào là account abstraction. zkSync Era ship native ở protocol level: mọi account là smart contract, paymasters sponsor gas, user trả phí bằng bất kỳ ERC-20 nào, passkey login và session keys hoạt động không cần ERC-4337 bundlers. Trên Scroll, Linea, Taiko bạn build cùng UX với ERC-4337 và bundler infrastructure (Pimlico, Stackup, Biconomy) — standard Ethereum AA tooling, không đổi.

Với developer khác biệt là kiến trúc. Mã ERC-4337 viết cho L1 không port sang native AA của zkSync và ngược lại; signature validation, msg.sender semantics, và khái niệm "an account" khác nhau. Đây là lý độc nhất ứng dụng consumer chọn zkSync — và cái bẫy lớn nhất team port AA code chiều ngược lại.

Polygon zkEVM đã dừng: rủi ro vòng đời chain

Tháng 6/2025 Polygon Labs thông báo trước 12 tháng: Polygon zkEVM Mainnet Beta sẽ sunset. Tháng 7/2026 sequencer ngừng sản block. Chain không còn hoạt động. EOA-held funds recover qua Claims interface đến 12/2027, nhưng assets lock trong DeFi contracts không recover qua đó, và infrastructure provider ngừng endpoint support. Không có migration path; Polygon chuyển effort sang Polygon PoS, Agglayer, và CDK framework.

Đây là bài học quan trọng nhất trong bài, và nó không nói về compiler. Một zkEVM là bet nhiều năm vào roadmap của một team. Zkevm tools bạn nhận hôm nay (zksolc trên zkSync, plain solc trên Scroll) là rủi ro nhỏ hơn rủi ro vòng đời chain — một rollup có thể bị deprioritized lúc bạn đang dựa vào nó. Khi chọn chain, kiểm tra funding, roadmap, và lịch sử. An toàn hôm nay là zkSync Era (consumer/AA), Scroll (DeFi audit-heavy), và bất cứ CDK-based hay optimistic nào cho "build anywhere, settle anywhere." Đừng build mới trên rollup đã bị giảm ưu tiên.

Checklist practical cho solidity zk rollup dev

  • Recompile trước, không port. Trên Scroll/Linea/Taiko không đổi gì. Trên zkSync, chạy suite hiện tại qua zksolc hoặc interpreter trước khi sửa bất kỳ dòng Solidity nào.
  • Audit cái audit. Scroll transfer L1 audit; zkSync yêu cầu re-validate EraVM behavior. Chênh $20–50K là thật.
  • Học lại gas. Storage rẻ / compute đắt trên zkSync; L1 data fee chi phối trên Scroll. Đừng tái dụng heuristic gas L1.
  • Test trên local node. anvil-zksync (zkSync) hoặc Foundry thẳng (Scroll) — rẻ trước khi chạm testnet.
  • Kiểm tra finality expectations. Các giờ, không phải giây, cho L1 finality; truyền đạt điều đó với product team.
  • Xác nhận chain còn sống. Roadmap, TVL trend, trạng thái prover decentralization — Polygon zkEVM sunset là bằng chứng nó quan trọng.

Câu hỏi thường gặp

Làm một zk evm developer, tôi có cần học viết circuit không?

Không. Circuit construction do prover team của rollup lo, không phải application developer. Việc bạn giữ nguyên: viết Solidity, compile, test. Trên Type 4 chain compiler thay đổi, nhưng bạn không bao giờ tự viết constraint hay witness.

Contract tôi cần thay đổi trên mọi zkEVM?

Chỉ trên Type 3 và Type 4, và thường chỉ edge cases: inline assembly, precompile hiếm, gas-sensitive branching, CREATE2 address assumptions. Type 1 và Type 2 chạy bytecode như-is. Quy tắc ngón tay cái: deploy được trên L1 và chain là Type 2 → deploy không đổi; Type 4 → ngân sách re-testing và có thể re-audit.

ZEVM tools rẻ và tương thích nhất để bắt đầu?

Đường ít thay đổi nhất là Scroll: solc chuẩn, Hardhat/Foundry chuẩn, địa chỉ và audit giữ nguyên. Phí thấp nhất và native AA là zkSync Era với @matterlabs/hardhat-zksync hoặc foundry-zksync — hoặc EVM Bytecode Interpreter nếu muốn tool chuẩn trước, chấp nhận phí cao hơn. Bắt đầu từ local node (anvil-zksync), rồi testnet, rồi mainnet.

Tôi có nên tránh Polygon zkEVM?

Sequencer Mainnet Beta sunset tháng 7/2026; chain không sản block và không có migration path. Đừng build mới trên nó. Công nghệ zkEVM tiếp tục trong CDK framework, nên "ZK trên Polygon" sống — nhưng là rollup bạn tự chọn, không phải old mainnet.

Finality zkEVM so với optimistic rollup thế nào?

zkEVM gửi validity proof lên L1, nên withdrawal finalize trong vài giờ (20–60 phút tùy chain). Optimistic rollup cần cửa sổ 7 ngày chứng minh gian lận. Khác biệt thực tế: bridge zkEVM gần như tức thì, và bạn tin proof chứ không phải incentive game-theoretic.

Kết luận

Kịch bản Friday deploy của Linh sống sót gần như nguyên vẹn — nhưng chỉ vì cô trả lời câu hỏi mỗi zk evm developer phải trả lời trước: bytecode nào sẽ thực sự chạy? Trên chain Type 1 và Type 2 (Taiko, Scroll, Linea) solc vẫn là compiler, audit mang theo, migration chỉ là RPC. Trên Type 4 (zkSync Era) zksolc tiếp quyền, zkevm tools nhân lên, và gas, địa chỉ, account abstraction đều theo bytecode mới — trừ khi bạn chọn EVM Bytecode Interpreter và chịu phí cao hơn. Tradeoff honest mà marketing ẩn đi: bytecode equivalence tốn phí và hiệu quả prover; custom VM tốn thời gian developer và re-audit. Và trên cả hai là rủi ro Polygon zkEVM sunset đã thể hiện rõ — chain có thể biến mất. Chọn compiler cho hôm nay, chọn chain cho ba năm, và test hết trên local node trước khi bỏ một dollars testnet nào.


Bảng tra nhanh

Thuộc tínhEVM-equivalent (Scroll / Linea / Taiko)Solidity-equivalent (zkSync Era)
CompilerStandard solczksolc (LLVM pipeline) + era-solidity fork
BytecodeCùng EVM bytecode L1Custom EraVM bytecode
Deploy toolingHardhat / Foundry giữ nguyênhardhat-zksync plugins hoặc foundry-zksync
Địa chỉ (CREATE2)Như L1Bytecode-hash derived, khác L1
Gas modelL2 execution + L1 data feeStorage rẻ, computation đắt
PrecompilesGần như đầy đủ; vài stubecrecover OK; ripemd160/send-transfer suppressed
Audit transferTrực tiếp từ L1 (tiết kiệm $20–50K)Cần re-validation
Account abstractionERC-4337 + bundlersNative ở protocol level
Đường EVM bytecodeNativeEVM Bytecode Interpreter (gas cao hơn)
Proof systemHalo2/OpenVM (Scroll), gnark (Linea)Boojum STARK / Airbender
L1 finality~30–60 phút (Scroll)~20–45 phút
Phí swap điển hình$0.05–0.18 (Scroll)$0.01–0.06
Phù hợp nhấtDeFi, protocol audit-heavyConsumer apps, GameFi, AA UX
Rủi ro vòng đờiScroll (2023–), Taiko (Type 1)zkSync (2023–); Polygon zkEVM sunset 2026

Tags:

zk evm developersolidity zk rollup devzkevm tools