Three deterministic test reds, all test-only (no production source change):
- plugin/evm/message: regenerate 6 LE golden vectors (utils LP-023 BE→LE
codec migration @v1.2.0; oracle-verified, not tautological) + fix stale
big-endian doc comments in codec.go.
- plugin/evm/validators/state: convert TestParseValidator fixtures BE→LE
(same codec migration) + doc comments.
- core/txpool/legacypool: decouple testTxPoolConfig from the production
DefaultConfig (which was deliberately bumped in fdc840067 for throughput);
pin canonical geth test limits. NOT a regression — production tx-acceptance
is correct; the test baseline was self-contradictory (per-account min >
global max). Also fixes a 600s package timeout → 20s.
Co-authored-by: Hanzo Dev <[email protected]>
CTO swarm audit found the strict-PQ tx-pool gate was dead code:
the previous commit checked vm.ActivePQProfile() (process-global)
but the EVM plugin sets vm.chainConfig.PQ per-chain and never
calls SetPQProfile. So the global stayed nil and the strict-PQ
branch never fired — classical tx types were still admitted on
strict-PQ chains, defeating the gate.
This commit reads pool.chainconfig.PQ directly — same field the
EVM precompile gate reads (params.ChainConfig.PQ via runPrecompile),
so the tx-pool admission and the precompile refusal are now driven
by the same per-chain profile pin. Multi-chain hosts (strict-PQ +
permissive in one process) get the right gate per pool because
the profile lives on each chain's config.
Drops the vm package import (no longer needed).
Closes red-team finding "per-chain profile" from the strict-PQ
adversarial review.
When the EVM has a non-nil ActivePQProfile (set by vm.Initialize
when chain config.PQ==true), the chain is strict-PQ:
- Refuse every classical tx type (Legacy / AccessList /
DynamicFee / Blob / SetCode) at the pool boundary
- Accept only MLDSATxType (0x42)
When ActivePQProfile is nil (permissive chain), accept the
classical types AND MLDSATxType — clients that want to dual-sign
or proactively migrate can submit ML-DSA-signed txs before the
chain flips to strict-PQ.
ValidationOptions grows AcceptMLDSA bool — the legacy uint8
Accept bitmap can't hold a slot for the 0x42 type byte (the
high-byte design was deliberate: scheme tag matches
NodeIDSchemeMLDSA65 in luxfi/ids; the downside is the bitmap
doesn't fit it).
Closes the gap between the existing EVM precompile PQ gate
(refuses ecrecover etc. INSIDE a contract execution) and the
tx-submission boundary (a classical-signed tx never enters the
mempool on a strict-PQ chain — not "enters but reverts on
ecrecover later").
Requires luxfi/geth@9c60b9dfa (MLDSATxType + MLDSASigner).
- Rename plugin/evm/upgrade/subnetevm package to feewindow
- Rename SubnetEVMTimestamp to EVMTimestamp (JSON: evmTimestamp)
- Rename IsSubnetEVM method to IsEVM
- Rename SubnetEVMDefaultChainConfig to EVMDefaultChainConfig
- Rename TestSubnetEVMChainConfig to TestEVMChainConfig
- Rename TestPreSubnetEVMChainConfig to TestPreEVMChainConfig
- Rename ethclient/subnetevmclient to ethclient/evmclient
- Update VM factory ID from "subnetevm" to "evm"
- Remove all backward compatibility aliases
- Update all documentation and comments
Breaking change: This removes all SubnetEVM naming - only "EVM" is supported.
No backward compatibility maintained as per user requirement.
Use externalized kzg4844 from luxfi/crypto package for consistent
crypto usage across all luxfi packages.
- Update geth to v1.16.43 (which also uses luxfi/crypto/kzg4844)
- Update crypto to v1.17.15
- Remove geth/crypto/kzg4844 from allowed packages
When tests use SnapshotNoBuild: true with SnapshotLimit > 0, snapshot
layers are initialized but not built for new blocks. Previously, when
blocks were accepted, the acceptor would crash with "cannot flatten
missing snapshot" error because it tried to flatten non-existent layers.
This fix adds:
- HasBlockLayer(blockHash) method to snapshot.Tree to check layer existence
- Check in flattenSnapshot to skip flattening if layer doesn't exist
This properly handles test configurations where snapshots are enabled
but layers aren't built, allowing all 63 packages to pass with 0 failures.
- Fixed all import paths for new consensus structure
- Added local replace directives for development
- Updated uptime and choices import paths throughout
- Fix ALL SetCode calls to use 2 parameters (remove tracing constants)
- Add SetCodeUnspecified wrapper for compatibility
- Fix StartPrefetcher to use 2 parameters instead of 3
- Fix all test files and runtime code
- NO SKIPS, NO TODOs, NO FAKE implementations
- This should achieve 100% green CI
- Updated all API calls to match geth interfaces
- Added tracing parameters to SetCode/SetNonce/SetBalance
- Fixed CalcBlobFee and CalcExcessBlobGas signatures
- Fixed consensus constants and Initialize calls
- All core packages now build and test successfully
- Change Go version from 1.24.6 to 1.22.8 (stable version)
- Ensure all build scripts have executable permissions
- Fix covdata issue by using stable Go version
- CI should now pass all checks
- Update consensus imports from luxfi/node/consensus to luxfi/consensus
- Remove all snow package references
- Fix utils/logging to use luxfi/log
- Update EIP-4844 API changes (CalcBlobFee, CalcExcessBlobGas)
- Add tracing.CodeChangeReason to SetCode calls
- Fix validators.GetCurrentValidatorOutput to GetValidatorOutput
- Fix wallet API changes (IssueCreateSubnetTx to IssueCreateNetTx)
- Fix VM interface compatibility between node and consensus packages
- Fix extstate.StateDB references to use state.StateDB
- Fix trienode API to use NodeWithPrev
- Remove duplicate files and unused code
- Update all dependencies to use externalized luxfi packages
- Fixed pqcrypto ML-KEM/ML-DSA API compatibility with latest crypto library
- Fixed selector collision in pqcrypto precompile (mlkem_encapsulate vs mlkem_decapsulate)
- Fixed warp signer interface adapter for EVM plugin
- All tests now pass successfully
- 100% build success across node, geth, and evm packages
- Updated go:generate comments to use luxfi/geth instead of ethereum/go-ethereum
- Fixed GitHub issue/PR references to point to luxfi repositories
- Updated comments referencing the Lux geth fork
- Part of the migration to unified EVM architecture with Lux consensus
- Updated all references from SubnetEVM to EVM
- This aligns with the new Lux architecture where EVM can run on L1, L2, or L3
- Removed 'subnet' terminology as it's being deprecated
- Update imports from luxdefi/node to luxfi/node
- Replace libevm interfaces with direct go-ethereum imports
- Add placeholder interface files for missing dependencies
- Update go.mod to use local luxfi/node path
- Fix merge conflicts in multiple files
- Create stub implementations for missing packages
This allows the project structure to align with v0.7.5 requirements
but the build still needs additional work to be fully functional.
Updated all copyright headers from "Lux Partners Limited" to "Lux Industries Inc" and updated the year to 2025 to reflect the new holding company structure.
Complete the transition of `core/types` to upstream code.
Note that the previous commit results in _all_ upstream types / vars / consts being in the `imports.go` file. This results in a strict partition of upstream and local identifiers so it is safe to simply change import paths.
1. Globally change all imports from `subnet-evm/core/types` to `libevm/core/types`;
2. Rename all `subnet-evm/core/types` imports to `customtypes` for ease of review here;
3. Dot import `libevm/core/types` in tests only to avoid hundreds of noisy changes.
See original PR https://github.com/ava-labs/coreth/pull/875
- use libevm/metrics instead of subnet-evm/metrics
- file kept and refactored `metrics/prometheus/prometheus.go` with the `Gatherer` implementation we use
- file kept and refactored `metrics/prometheus/prometheus_test.go`
- new file `metrics/prometheus/interfaces.go` added for refactoring
- geth global variable `metrics.Enabled` is set to true both in libevm and in `plugin/evm.VM.initializeMetrics`
Signed-off-by: Quentin McGaw <[email protected]>
Co-authored-by: Arran Schlosberg <[email protected]>