Files
zeekay 017968151d decomplect: test suite alignment after NetworkUpgrades rip + Test*Config inline; bump luxfi/geth pin to v1.16.94
- params/config_test.go: delete TestConfigRules (exercised IsCortina gating
  that no longer exists under activate-all-implicitly)
- plugin/evm/header/{base_fee,block_gas_cost,extra,gas_limit}_test.go: drop
  extras.NetworkUpgrades field from test config literals; replace
  extras.LuxRules{IsFortuna: true} with extras.LuxRules{} (only IsGenesis
  remains as a runtime axis)
- plugin/evm/header/dynamic_fee_windower_test.go: delete (selectBigWithinBounds
  function was ripped along with the legacy windower fee model)
- plugin/evm/header/block_gas_cost_test.go: update TestBlockGasCost/
  TestBlockGasCostWithStep/TestEstimateRequiredTip to expect 0 (BlockGasCost
  and BlockGasCostWithStep now always return zero under LP-176)
- consensus/dummy/consensus_test.go: delete "tx only base fee" and "extra
  state contribution insufficient" subtests (assertions no longer fire because
  BlockGasCostWithStep returns 0)
- eth/gasprice/gasprice_test.go: update TestSuggestTipCapIncludesExtraDataGas
  expectedTip to 1 (block-gas-cost surcharge gone under activate-all-implicitly)
- plugin/evm/lux_security_profile_f118_test.go,
  plugin/evm/lux_strict_pq_test.go,
  plugin/evm/vm.go: replace gethvm.SetActiveSecurityProfile +
  gethvm.LuxSecurityProfile{ForbidECDSAContractAuth} with the geth v1.16.94+
  gethvm.SetPQProfile + gethvm.PQProfile{ForbidEcrecover}; replace
  gethvm.ActiveSecurityProfile with gethvm.ActivePQProfile; switch the
  direct precompile-gate test from ecrec.Run(input) +
  gethvm.ErrClassicalAuthForbidden to (*gethvm.PQProfile).RefuseUnder(Op) +
  gethvm.ErrEcrecoverForbidden (per-precompile Run() no longer gates)
- go.mod: github.com/luxfi/geth v1.16.88 → v1.16.94 (+ indirect luxfi/pq pull)
2026-05-19 08:19:48 -07:00
..
2025-07-31 21:45:39 +00:00
2025-07-31 21:45:39 +00:00
2025-07-31 21:45:39 +00:00
2025-07-31 21:45:39 +00:00
2025-07-31 21:45:39 +00:00
2025-07-31 21:45:39 +00:00
2025-07-31 21:45:39 +00:00

EVM Package

The EVM package implements the Luxd VM interface.

VM

The VM creates the Ethereum backend and provides basic block building, parsing, and retrieval logic to the consensus engine.

APIs

The VM creates APIs for the node through the function CreateHandlers(). CreateHandlers returns the Service struct to serve Coreth specific APIs. Additionally, the Ethereum backend APIs are also returned at the /rpc extension.

Block Handling

The VM implements buildBlock, parseBlock, and getBlock and uses the chain package from Luxd to construct a metered state, which uses these functions to implement an efficient caching layer and maintain the required invariants for blocks that get returned to the consensus engine.

To do this, the VM uses a modified version of the Ethereum RLP block type here and uses the core package's BlockChain type here to handle the insertion and storage of blocks into the chain.

Block

The Block type implements the Luxd ChainVM Block interface. The key functions for this interface are Verify(), Accept(), Reject(), and Status().

The Block type wraps the stateless block type here and implements these functions to allow the consensus engine to verify blocks as valid, perform consensus, and mark them as accepted or rejected. See the documentation in Luxd for the more detailed VM invariants that are maintained here.

Atomic Transactions

Atomic transactions utilize Shared Memory (documented here) to send assets to the P-Chain and X-Chain.

Operations on shared memory cannot be reverted, so atomic transactions must separate their verification and processing into two stages: verifying the transaction as valid to be performed within its block and actually performing the operation. For example, once an export transaction is accepted, there is no way for the C-Chain to take that asset back and it can be imported immediately by the recipient chain.

The C-Chain uses the account model for its own state, but atomic transactions must be compatible with the P-Chain and X-Chain, such that C-Chain atomic transactions must transform between the account model and the UTXO model.