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

fix: validate gas_limit and max_fee_per_gas before transaction execution #207

Merged
merged 11 commits into from
Oct 31, 2023

Conversation

Romsters
Copy link
Contributor

What πŸ’»

  • Added validation for gas_limit and max_fee_per_gas before transaction execution

Why βœ‹

  • Atm when gasLimit doesn't fit in U32 the system crashes.

Evidence πŸ“·

2023-10-27T23:09:19.788918Z  INFO era_test_node::node: Executing 0xcfa772ee8b45f2d54ee5a31f3e42be5018862627fe4785d812bf1617bb8de5e7
thread 'tokio-runtime-worker' panicked at /Users/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/primitive-types-0.12.2/src/lib.rs:38:1:
Integer overflow when casting to u32
stack backtrace:
   0: rust_begin_unwind
             at /rustc/aa1a71e9e90f6eb3aed8cf79fc80bea304c17ecb/library/std/src/panicking.rs:597:5
   1: core::panicking::panic_fmt
             at /rustc/aa1a71e9e90f6eb3aed8cf79fc80bea304c17ecb/library/core/src/panicking.rs:72:14
   2: primitive_types::U256::as_u32
             at /Users/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/uint-0.9.5/src/uint.rs:633:6
   3: multivm::versions::vm_virtual_blocks::types::internals::transaction_data::TransactionData::overhead_gas
             at /Users/user/.cargo/git/checkouts/zksync-era-657998444dcd9ed9/73a1e8f/core/lib/multivm/src/versions/vm_virtual_blocks/types/internals/transaction_data.rs:203:31
   4: multivm::versions::vm_virtual_blocks::implementation::tx::<impl multivm::versions::vm_virtual_blocks::vm::Vm<S,H>>::push_transaction_with_compression
             at /Users/user/.cargo/git/checkouts/zksync-era-657998444dcd9ed9/73a1e8f/core/lib/multivm/src/versions/vm_virtual_blocks/implementation/tx.rs:64:24
   5: multivm::versions::vm_virtual_blocks::vm::Vm<S,H>::push_transaction
             at /Users/user/.cargo/git/checkouts/zksync-era-657998444dcd9ed9/73a1e8f/core/lib/multivm/src/versions/vm_virtual_blocks/vm.rs:48:9
   6: era_test_node::node::InMemoryNode<S>::run_l2_tx_inner
             at ./src/node.rs:1289:9
   7: era_test_node::node::InMemoryNode<S>::run_l2_tx
             at ./src/node.rs:1471:13
   8: <era_test_node::node::InMemoryNode<S> as zksync_core::api_server::web3::backend_jsonrpc::namespaces::eth::rpc_impl_EthNamespaceT::gen_server::EthNamespaceT>::send_raw_transaction
             at ./src/node.rs:2019:15
]

@Romsters Romsters requested a review from a team as a code owner October 27, 2023 23:27
@Romsters
Copy link
Contributor Author

Closes #206

src/node.rs Outdated Show resolved Hide resolved
src/node.rs Outdated Show resolved Hide resolved
src/node.rs Outdated Show resolved Hide resolved
@MexicanAce
Copy link
Collaborator

When adding Evidence to the PR description, please show evidence that the issue is now resolved with these changes. This provides another level of confidence for the reviewer that things are working end-to-end after these changes.

@Romsters
Copy link
Contributor Author

When adding Evidence to the PR description, please show evidence that the issue is now resolved with these changes. This provides another level of confidence for the reviewer that things are working end-to-end after these changes.

I guess adding unit tests should resolve this one, in terms of other evidences not sure how do you see it, in my case there is just no crash or errors in console after the fix.

@MexicanAce
Copy link
Collaborator

I guess adding unit tests should resolve this one, in terms of other evidences not sure how do you see it, in my case there is just no crash or errors in console after the fix.

Yup, unit tests would work! Just any way to prove that the problem is resolved with these changes πŸ‘

Copy link
Collaborator

@MexicanAce MexicanAce left a comment

Choose a reason for hiding this comment

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

LGTM

@Romsters Romsters merged commit c5350bf into main Oct 31, 2023
8 checks passed
@Romsters Romsters deleted the gas-limit-validation branch October 31, 2023 14:19
AntonD3 added a commit that referenced this pull request Dec 6, 2023
* chore: adds proper null response to zks_batchDetails method (#152)

* fix: add back call stacks, console logs, and correct call stack count (#155)

* fix: add back call stacks, console logs, and correct call stack count

* Add comments. Fix typo.

* fix lint

* feat: add eth_getStorageAt (#134)

* add get_storage_at

* add eth_getStorageAt

* limit max archived blocks to 128

* remove ethers-contract dep

* feat: add evm_snapshot/revert (#158)

* fix: update compiled smart contracts to latest (#157)

* Update compile smart contracts checked into source
* Hide Notes section of PR template by default
* Update e2e tests to also be run on MacOS
* Add commented link to YouTube video at the top of release notes
* Limit rust/clippy linting to only the era_test_node package/crate
* Re-enable e2e test for zks_estimateFee
* Add more trace level logs for gas estimation

* feat: add eth_getTransactionByBlockHashAndIndex and eth_getTransactionByBlockNumberAndIndex (#159)

* feat: add eth_protocolVersion (#161)

* feat: impl debug_traceCall (#151)

* feat: impl debug_traceCall

* feat: adds test contract dir

* add refresh_test_contracts in Makefile

* fix: rename contacts_for_l2_call -> contracts_for_l2_call

* move not_implemented() to crate::utils, replace usage of macro

---------

Co-authored-by: Nicolas Villanueva <[email protected]>

* feat: Add well-known log selectors to console output (#162)

* add aarch64-unknown-linux-gnu target (#164)

* feat: add rustbook (#163)

* fix: install mdbook for ci (#169)

* feat: impl debug_traceTransaction (#165)

* feat: impl `debug_traceBlockByHash` and `debug_traceBlockByNumber` (#168)

* fix: update zksync-era deps to v16.0.0 (#173)

* chore: remove hub usage in favour of gh for draft releases (#175)

* feat: add hardhat_setCode (#171)

* feat: impl `zks_getTransactionDetails` (#176)

* feat: forbid ".only" from e2e-tests (#179)

* feat: impl zks_getBlockDetails (#182)

* feat: support builtInWithoutSecurity option (#186)

* feat: add zks_getBridgeContracts (#184)

* feat: add zks_getBytecodeByHash (#180)

* feat: refactor logging to use tracing crate and make it dynamic (#187)

* feat: impl zks_getRawBlockTransactions (#185)

* fix: unit-tests fixed on main (#193)

* fix: fix forking for [email protected] (#194)

* fix: Release drafts now attach files correctly (#196)

* feat: impl `zks_getAllAccountBalances` and `zks_getConfirmedTokens` (#198)

* fix: Update transaction type for gas estimation if one is not provided for EIP712 transactions, this fixes paymasters for era-test-node. (#195)

* chore: updates zksync dep, and replaces vm with multivm crate (#199)

* chore: update era test node to latest

* chore: cargo fmt

* chore: switch toolchain actions and use nightly

* chore: updates zks gas estimate

* chore: remove +stable for nexttest action

* chore: use larger runner

* debug: collect runner stats

* chore: invalidate cache to collect stats

* chore: remove default runner for 16core

* chore: fix workflows to use nightly (#203)

* chore: fix workflows to use nightly

* chore: fix workflows to use nightly

* chore: refactor node namespaces (#197)

* fix: validate gas_limit and max_fee_per_gas before transaction execution (#207)

* fix: validate gas_limit and max_fee_per_gas before transaction execution

* fix: add validation for max_fee_per_gas being to low

* fix: move validate_tx to node/in_memoty.ts

* fix: lint

* fix: move tx validation logic to run_l2_tx

* test: add tests for tx validation

* fix: remove unneeded match from eth.rs

* fix: lint

* fix: remove +nightly from vscode debug config

* fix: remove extra new line log

* feat: add parent hash linking for blocks (#209)

* feat: add parent_hash linking for blocks

* test: add tests

* fix: lint

* fix: use correct genesis block hash as initial current_miniblock_hash

* chore: Update zksync-era dependency to latest (#210)

* chore: Update zksync-era dependency to latest

* add Version17 to list of supported version

* chore: add rust toolchain for version mgt, make inner_tx pub (#213)

* chore: add rust toolchain for version mgt, update to make inner tx pub again

* chore: change version to reflect ci

* fix: rename run_l2_tx_inner, fix panics for lib users (#214)

* rename run_l2_tx_inner, fix panics for lib users

* add test

* undo dep changes

* cleanup comments

* inline params

* cleanup ExternalStorage

* fix test messages

* feat: get block returns null for non existing blocks (#218)

* chore: fix docs issue (#215)

* chore: fix rust-toolchain extension (#216)

* run smoke test on PRs (#219)

* feat: update `multivm::vm_virtual_blocks` dependency to `multivim::vm_latest` (#220)

* bugfix: Set removed property in Logs to false (#224)

* feat: Implement web3_clientVersion (#223)

* feat: Implement web3_clientVersion

* lint fix

---------

Co-authored-by: Dustin Brickwood <[email protected]>

* feat: Update event formatter and observability formatter (#226)

* chore: bump cargo toml for upcoming `0.1.0-alpha.12` release (#227)

* chore: bump cargo toml for upcoming release

* chore: bump cargo toml for upcoming release

* feat(vm): Adapt code for the latest zksync era changes (#230)

Signed-off-by: Danil <[email protected]>

* feat: Allow to pass custom tracers to run_raw_tx (#231)

Signed-off-by: Danil <[email protected]>

* Merge main

* latest vm

* Small refactoring

* System contracts 18.4.0

* EcAdd, EcMul, rebuild system contracts

* Small change in system-contracts/VERSION.md

* Update zksync-era dependency

* Fix test

* Prepare to merge into main

---------

Signed-off-by: Danil <[email protected]>
Co-authored-by: Dustin Brickwood <[email protected]>
Co-authored-by: Nicolas Villanueva <[email protected]>
Co-authored-by: Nisheeth Barthwal <[email protected]>
Co-authored-by: George W <[email protected]>
Co-authored-by: Roman Petriv <[email protected]>
Co-authored-by: Vasyl Ivanchuk <[email protected]>
Co-authored-by: Agustin Aon <[email protected]>
Co-authored-by: Danil <[email protected]>
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.

2 participants