zksync
Installation
SKILL.md
zkSync Era Development
What You Probably Got Wrong
- Bytecode is NOT EVM bytecode — zkSync compiles to zkEVM bytecode via
zksolc/zkvyper. You cannot deploy raw EVM bytecode. Standardsolcoutput does not work. - CREATE/CREATE2 behave differently — Address derivation uses the bytecode hash, not the creation code. CREATE2 addresses differ from Ethereum for the same inputs.
- All accounts are smart accounts — EOAs are implemented as a default account contract. Native account abstraction means every account goes through
validateTransaction/executeTransaction. - Gas has two components — L2 execution gas + L1 pubdata gas. The
gas_per_pubdata_byte_limitfield is mandatory on every transaction. - No
SELFDESTRUCT— The opcode is a no-op. Contracts cannot be destroyed. - No
EXTCODECOPYof other contracts — You can onlyEXTCODECOPYyour own bytecode. Copying another contract's code returns zeros. msg.valueworks differently — Handled by theMsgValueSimulatorsystem contract, not natively at the EVM level.- Contract deployment uses a system contract — All deployments go through the
ContractDeployersystem contract, not raw CREATE opcodes.