Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add the ability to use specific gas params in era vm environment and use them on script estimations #773

Open
wants to merge 14 commits into
base: main
Choose a base branch
from

Conversation

elfedy
Copy link
Contributor

@elfedy elfedy commented Dec 10, 2024

What 💻

  1. Added ZkEnv that contains values to be used when instantiating Era Vm locally.
  2. Updated fee model from L1PeggedBatchFeeModelInput to PubdataIndependentBatchFeeModelInput (previous was legacy, era_test_node/testnet/mainnet use the new model)
  3. Increased max gas limit (because era test node's current version has very high fair_pubdata_price and makes txs with big factory deps revert via OOG).
  4. When initializing script runner via a fork, get block details via rpc call, then use them as ZkEnv for running the script and the simulations.

Why ✋

This adds a stepping stone to make gas simulation on era vm txs meaningful by using the actual values from the enviroment the script will be finally broadcast to. This also opens the door for a follow up PR to let users modify these params the same way they can modify EVM env params when running tests.

Evidence 📷

When simulating, simulation now uses fair_l2_gas_price, l1_gas_price and fair_pubdata_price from the environment.

@elfedy elfedy requested a review from a team as a code owner December 10, 2024 17:00
crates/script/src/lib.rs Show resolved Hide resolved
crates/zksync/core/src/vm/env.rs Show resolved Hide resolved
crates/zksync/core/src/vm/env.rs Outdated Show resolved Hide resolved
@elfedy elfedy requested a review from dutterbutter December 13, 2024 13:47
/// Compute gas per pubdata
pub fn gas_per_pubdata(&self) -> u64 {
// https://github.com/matter-labs/era-contracts/blob/aafee035db892689df3f7afe4b89fd6467a39313/system-contracts/bootloader/bootloader.yul#L86
let max_l2_gas_per_pubdata: u64 = 50000;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can hoist this as a constant

@@ -131,5 +131,5 @@ pub fn fix_l2_gas_limit(
U256::min(proposed_gas_limit, max_gas_limit)
};

U256::min(gas_limit, U256::from(u32::MAX >> 1))
U256::min(gas_limit, U256::from((u32::MAX >> 1) * 2))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps this should also be a constant as it's being used in multiple places.

@elfedy elfedy requested a review from nbaztec December 13, 2024 16:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants