Closed Khang-NT closed 5 months ago
hardaht-zksync-solc
Hardhat config:
const config: HardhatUserConfig = { solidity: { version: "0.8.25", settings: { viaIR: true, evmVersion: "cancun", optimizer: { enabled: true, runs: 2000 }, }, }, zksolc: { version: "1.4.1", // Uses latest available in https://github.com/matter-labs/zksolc-bin/ settings: { optimizer: { enabled: true, mode: 'z' // even worse if mode = 3 }, contractsToCompile: ["USDC.sol", "MyContract.sol"] } }, networks: { hardhat: { zksync: process.env.ZKSYNC_NODE === "1", }, }, };
$ ZKSYNC_NODE=0 hardhat compile ยท------------------------|--------------------------------|--------------------------------ยท | Solc version: 0.8.25 ยท Optimizer enabled: true ยท Runs: 2000 โ ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท | Contract Name ยท Deployed size (KiB) (change) ยท Initcode size (KiB) (change) โ ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท | USDC ยท 2.038 (0.000) ยท 2.906 (0.000) โ ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท | MyContract ยท 9.904 (0.000) ยท 10.780 (0.000) โ ยท------------------------|--------------------------------|--------------------------------ยท $ ZKSYNC_NODE=1 hardhat compile Compiling contracts for zkSync Era with zksolc v1.4.1 and solc v0.8.25 Compiling 11 Solidity files Generating typings for: 13 artifacts in dir: typechain for target: ethers-v6 Successfully generated 50 typings! Successfully compiled 11 Solidity files ยท------------------------|--------------------------------|--------------------------------ยท | Solc version: 0.8.25 ยท Optimizer enabled: true ยท Runs: undefined โ ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท | Contract Name ยท Deployed size (KiB) (change) ยท Initcode size (KiB) (change) โ ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท | USDC ยท 6.094 () ยท 6.094 () โ ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท | MyContract ยท 31.531 () ยท 31.531 () โ ยท------------------------|--------------------------------|--------------------------------ยท
Set optimizer.mode = "3" and run again:
optimizer.mode = "3"
$ ZKSYNC_NODE=1 hardhat compile Compiling contracts for zkSync Era with zksolc v1.4.1 and solc v0.8.25 Compiling 11 Solidity files Generating typings for: 13 artifacts in dir: typechain for target: ethers-v6 Successfully generated 50 typings! Successfully compiled 11 Solidity files ยท------------------------|--------------------------------|--------------------------------ยท | Solc version: 0.8.25 ยท Optimizer enabled: true ยท Runs: undefined โ ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท | Contract Name ยท Deployed size (KiB) (change) ยท Initcode size (KiB) (change) โ ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท | USDC ยท 8.219 (+2.125) ยท 8.219 (+2.125) โ ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท | MyContract ยท 56.406 (+24.875) ยท 56.406 (+24.875) โ ยท------------------------|--------------------------------|--------------------------------ยท
zksolc produces insane large bytecode size, x3 times solc produces when using optimizer.mode = 'z', and x5 when using optimizer.mode = "3"
zksolc
solc
optimizer.mode = 'z'
Here's USDC.sol, just a simple ERC20 contract:
USDC.sol
pragma solidity ^0.8.20; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract USDC is ERC20 { constructor() ERC20("Fake USDC", "USDC") { _mint(msg.sender, 1000000 * (10 ** uint256(decimals()))); } function decimals() public pure override returns (uint8) { return 10; } }
Thanks for the report, but it is not a bug.
EraVM bytecode is larger than that of EVM, mostly due to different encoding and the usage of System Contracts which make EraVM behavior equivalent to EVM's.
๐ Bug Report for hardaht-zksync plugins
๐ฅ Plugin name
๐ Description
Hardhat config:
๐ Reproduction Steps
Set
optimizer.mode = "3"
and run again:zksolc
produces insane large bytecode size, x3 timessolc
produces when usingoptimizer.mode = 'z'
, and x5 when usingoptimizer.mode = "3"
Here's
USDC.sol
, just a simple ERC20 contract:๐ฅ๏ธ Environment