Skip to content

EVM Node v2.0.0

Latest

Choose a tag to compare

@stephen-diesel stephen-diesel released this 01 Oct 01:56
· 18 commits to main since this release
523d255

Introduction

Vaulta EVM Node v2.0.0 builds upon the previously introduced Gas Fee Algorithm architecture with key enhancements that improve fairness and updateability of transaction fees.

Read on for more details.

New Features

Gas Fee Algorithm v3

PRs
  • (414)[ 2.0 ] Update silkworm to v2.0.0
Dual-Component Gas Fee Model

The Gas v3 algorithm introduces a dual-component gas fee model, separating transaction costs into:

  • Computational Gas: Charges associated with CPU usage for executing operations.
  • Storage Gas: Charges related to RAM usage for storing data.

Each component has its own pricing:

  • overhead_price: Cost per unit of computational gas
  • storage_price: Cost per unit of storage gas

To maintain compatibility with existing tools and interfaces, the system calculates a unified gas_price as the maximum of overhead_price and storage_price. The total gas_used is the sum of computational and storage gas, adjusted for any applicable discounts or refunds.

Gas Discount and Refund Mechanism

This release also introduces a transaction-level gas discount and refund mechanism that adjusts for scenarios where overcharging occurs in the new dual-component model.

  • If the inclusion_price exceeds zero, miners receive inclusion_price * computational_gas as their fee. The inclusion_price * storage_gas portion is not collected in the final fee because the storage gas is discounted to effectively refund that excess fee back to the sender.
  • Depending on which of overhead_price or storage_price is greater, either discounts are applied to storage gas used or an explicit refund of gas usage occurs at the end of the transaction to prevent overcharging.
Safer Pricing Adjustments for Resource Cost Variability

Vaulta’s resource layer, specifically RAM, is subject to market-based pricing volatility. This release improves the handling for updates to gas pricing without breaking deployed application functionality.

The operation updtgasparam changes the gas usage for storage-manipulating operations and opcodes (such as SSTORE) and should only be used in select scenarios where RAM price changes drastically. Instead, setgasprices, can now be used to reflect RAM cost changes dynamically by updating storage_price with minimal disruption.

Building, compatibility, and upgrading

Building

The README in the evm-node repository contains instructions on how to build Vaulta EVM Node and Vaulta EVM RPC.

Compatibility and upgrading

Vaulta EVM Node and Vaulta EVM RPC can be upgraded from the prior 1.x.x version by replacing the binaries.

Further details on changes since last release

Contributors

Special thanks to the contributors that submitted patches for this release:

Full list of changes since last release

PRs
  • (234)[1.0 -> main] Update silkworm 1.0.1
  • (236)[1.0 -> main] add get transaction & get transaction receipt from rpc test
  • (235)[1.0 -> main] Bump 1.0.0-rc3 version
  • (248)[1.0 -> main] fix estimate gas
  • (249)[1.0 -> main] Update silkworm 1.0.2
  • (255)[1.0 -> main] add estimate_gas test
  • (256)[1.0 -> main] Bump 1.0.0-rc4 version
  • (257)[1.0 -> main] dynamic chainid
  • (274)[1.0 -> main] Update CICD to use Spring
  • (275)[1.0 -> main] Update silkworm with kGasCap=100M
  • (276)[1.0 -> main] Update to silkworm 1.0.3
  • (277)[1.0 -> main] Bump 1.0.0 version
  • (278) Save overhead/storage price in block extra data
  • (281)[1.0 -> main] Fix eth_call when evm_version>0
  • (286)[1.0->main] Kayan 1.0 to main test savanna
  • (291)[1.0.1 -> main] Update silkworm with fixes for EVMExecutor/TraceCallExecutor
  • (294)[1.0.1 -> main] Bump 1.0.1 version
  • (298)[1.0.2 -> main] Change to BSL licensing scheme
  • (300)[1.0.2 -> main] Update versions/branches to use for CI dependencies
  • (304) recover performance
  • (313)[1.0 -> main] forword evmtx ordering fix to main
  • (308) Block buggy debug calls in nginx
  • (322)[1.0 -> main] Fix gas estimation and traces
  • (326)[1.0 -> main] Bump 1.0.3 version
  • (331)[1.0 ->main] integration test for evmtx order
  • (332)[1.0 -> main] Add eth_getLogs integration test
  • (333)[1.0 -> main] Update silkworm version to 1.0.8
  • (334)[1.0 -> main] Remove blocks ack request from ship client
  • (343)[1.0->main] Pull fixes to enable eth_gasPrice
  • (350)[1.0 ->main] Forward 1.0.5 to main
  • (353) Update silkworm (last gas v3)
  • (356)[1.0 -> main] Disable EIP2 enforcement by default
  • (357) Update silkworm with default EIP2 enforcing when evm_version >= 3
  • (363) fix gas v3
  • (342) gas v3 test
  • (365) Modify the eth_estimateGas API to enable conservative gas estimation
  • (359)[1.0 -> main] Bump 1.0.6 version
  • (367) Modify how gas_prices are set when creating EVM blocks
  • (370)[1.0] Encode transaction properly in the tx removal step during fork
  • (373)[1.0] Bump version to 1.0.7
  • (374)[1.0->main] Encode transaction properly in the tx removal step during fork
  • (375)[1.0] Exit instead of silently continue for exceptions when processing blocks
  • (377)[2.0] Update silkworm 2.0.0-rc1
  • (376)[1.0->2.0] Exit properly when encounter unrecoverable issues when processing blocks
  • (381)[2.0] Bump 2.0.0-rc1 version
  • (386)[1.0] fix gas param fork test
  • (387)[1.0] fix unstable different gas token test, use instant finality
  • (388)[1.0-> 2.0] Fix unstable integration tests & use savanna finality (gas param fork test, different gas token test)
  • (394)[2.0] Change references to eos
  • (398)[2.0] Update silkworm
  • (396)[1.0] activate instant finality in integration tests
  • (400)[1.0->2.0] Ensure integration tests all use Savanna consensus
  • (403)[2.0] Bump 2.0.0-rc2 version
  • (414)[ 2.0 ] Update silkworm to v2.0.0
  • (418)[2.0] Bump 2.0.0 version

Full Changelog: v1.0.6...v2.0.0