Commit Graph
71 Commits
Author SHA1 Message Date
zeekayandHanzo Dev 6cbb326615 consensus v1.36 export-boundary: close 3 LOW items for tag (DRY clamp, one admin_importChain, locked export writes + boot-wiring tests)
Two-tier finality (Nova = local majority accept, drives VM.Accept; Quasar =
⅔-by-stake export) requires that NO export surface ever names a block above the
served accept tip. RED's final pass approved SHIP with three LOW items to close
first.

LOW-1 — DRY the accept-tip clamp into ONE place. New eth.Ethereum.ClampedQuasarHeight()
= min(LastQuasarHeight, LastAccepted.Number) is the single clamp; BOTH export
surfaces read it: EthAPIBackend.quasarHeight() (RPC finalized/safe) and
warpBlockClient.LastQuasarHeight() (warp export gate, via the BlockClient
interface). Removes the second inlined clamp copy that could drift. LastQuasarHeight()
is documented as RAW (node boot re-seed only, where reconcile has already run).

LOW-2 — exactly ONE admin_importChain. Deleted the eth-package AdminAPI.ImportChain
(which neither reconciled the export height nor skipped <=head blocks); the plugin VM's
(plugin/evm/admin_api.go) is the sole one — it runs under vmLock and calls
reconcileQuasarWithAccept after each SetLastAcceptedBlockDirect. Left a NOTE so it is
not re-added and reopens the rewind hole. Dropped the now-unused rlp import.

LOW-3 — exclude concurrent export-height writers + prove the real boot wiring.
SetLastQuasarFinalized now takes vmLock (the same lock reconcileQuasarWithAccept's
admin_importChain caller holds), so the observer callback's durable Put+Store can never
interleave with a re-import's Reset(0)+Delete on the same key. Fixed a boot ordering
gap: the startup auto-import (importBlocksFromFile) runs AFTER initializeChain's
reconcile, so a --import-chain-data rewind could leave a stale export height — added a
reconcile right after the auto-import. New eth.NewTestEthereum test-support ctor.

Tests (all green): eth -race adds TestClampedQuasarHeight_RealRewind (genuine
SetLastAcceptedBlockDirect rewind; belt clamps finalized/safe to the rewound tip while
raw is unchanged); plugin/evm adds TestBootReconcile_RealLastAccepted_ClearsStaleQuasarOnRewind
(drives the REAL restored LastAcceptedBlock through belt + suspenders) and
TestSetLastQuasarFinalized_LockedAgainstReconcile (concurrency: durable key <-> in-mem
always consistent). gofmt/vet/ontology clean.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-10 09:22:12 -07:00
zeekayandHanzo Dev bdebad3632 eth,plugin/evm: clamp finalized/safe to accept tip + clear export height on rewind (RED MEDIUM/LOW)
Follow-up to the export-boundary re-point, closing RED's re-review MEDIUM (a finality-safety hole
reachable via our own EVM-rewind→re-import restore runbook) and LOW.

MEDIUM — the rewind path. A rewind / RLP re-import (SetLastAcceptedBlockDirect) can lower the accept
tip BELOW the persisted EXPORT-FINAL (Quasar) height; the monotone SetLastQuasarHeight + advance-only
SyncQuasarFrontier then keep it stuck high, and after the chain rebuilds past that height with a
DIFFERENT canonical, `finalized` would name a block that was NEVER ⅔-certified — reported export-final
to every bridge/DEX consumer. Two parts, both needed:
- Belt: api_backend quasarHeight() resolves finalized/safe at min(LastQuasarHeight, LastAccepted) —
  finalized/safe can NEVER exceed the served accept tip, even with a stale-high durable key.
- Suspenders: VM.reconcileQuasarWithAccept clears the durable quasarHeightKey + the in-mem height
  (eth.ResetLastQuasarHeight, bypassing the monotone guard) when the accept tip is below the export
  height — the ONE legal regression of the otherwise-irreversible frontier. Conservative reset to 0
  (nothing export-final until the rebuilt chain re-certifies). Called on boot (against the restored
  accept tip — catches an offline rewind) and after admin_importChain (the live re-import). On the
  next boot the node re-seeds consensus' export frontier from the cleared (0) height, so the
  advance-only SyncQuasarFrontier yields to the rewind without touching the four shipped fixes.

LOW — SetLastQuasarFinalized now PERSISTS the durable key BEFORE advancing the in-mem height, so the
durable key is the source of truth: a crash between the two can only leave in-mem at/behind the
durable value on boot, never ahead of it (no monotonicity dip). A persist failure does not advance.

Tests: augmented TestFinalizedSafeResolveToQuasarNeverAboveIt with the belt case (seed export height
ABOVE the accept tip → finalized CLAMPS to the tip — the case RED flagged as false confidence, now
ENFORCED); new TestReconcileQuasarWithAccept_ClearsStaleHeightOnRewind (durable key + in-mem cleared
on an accept regression) and TestSetLastQuasarFinalized_PersistsBeforeAdvancing (persist-first,
no-advance-on-failure). eth suite green under -race.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-10 05:49:40 -07:00
zeekayandHanzo Dev 9c6d66ef6b eth,warp: gate EXPORT surfaces on the ⅔-stake Quasar tier, not the Nova accept tip (v1.36)
The two-tier consensus (v1.36) advances VM.Accept at a BARE MAJORITY (Nova), which is reorgable
and can fork under f=1 equivocation. The Ethereum `finalized`/`safe` tags and warp cross-chain
exports were still reading the accept tip — the "semantic collapse" the split exists to prevent.
Re-point every EXPORT surface onto the export-final (Quasar, ⅔-by-stake) frontier consensus
already exposes.

#1 CRITICAL — eth `finalized`/`safe` tags:
- eth.Ethereum gains a DURABLE, monotone lastQuasarHeight (SetLastQuasarHeight/LastQuasarHeight),
  pushed by consensus strictly AFTER accept. The plugin VM's SetLastQuasarFinalized persists it to
  acceptedBlockDB and reloads it on boot (readLastQuasarHeight), so the export surface never
  regresses on restart.
- api_backend HeaderByNumber/BlockByNumber resolve Finalized(-3)/Safe(-4) to GetBlockByNumber(
  LastQuasarHeight) BEFORE the IsAccepted() catch-all — NEVER a block above the Quasar height.
  `latest`/`pending` stay on the accept tip (correct — not finality tags).
- Test: TestFinalizedSafeResolveToQuasarNeverAboveIt proves finalized == the Quasar height,
  monotone, and never above the accepted tip.

#2 HIGH — warp cross-chain export double-spend:
- warp.verifyBlockMessage now requires the block be EXPORT-final (height ≤ BlockClient.
  LastQuasarHeight), so a validator signs a block hash only at Quasar finality, never on a
  reorgable Nova accept (two conflicting Nova forks could otherwise each aggregate a valid export).
- WarpQuorumNumeratorMinimum floored 33 → 67 (⅔): any warp message needs ≥⅔ stake to verify, so at
  most one of two conflicting exports can validate (two ⅔ sets intersect on >⅓ honest stake) —
  restoring the ⅔-accept safety the pre-split accept tier gave for free.

The consensus engine pushes the frontier via NetworkConfig.QuasarObserver; the node bridges it into
the VM (separate node commit). Nova-only chains (no export surface) are unaffected.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-10 04:58:54 -07:00
zeekay 7341b4a885 fix(evm): bind chain identity before NewBlockChain reprocess (no new type)
The 0x9999 DEX value path is identity-gated: the asset resolver refuses to
admit a market unless the running chain's identity matches. core.NewBlockChain
re-executes accepted blocks during construction (loadLastState recovery /
populateMissingTries backfill), but the identity was only bound onto the chain
AFTER eth.New returned (vm.go SetConsensusContext) — so an unclean restart after
a 0x9999 swap re-executed that block with networkID 0 / C-Chain Empty, reverted
the committed swap, failed ValidateState, and the node could not boot.

Fix is purely timing: hand NewBlockChain the *runtime.Runtime the VM already
holds (eth.Settings.ChainRuntime -> core.NewBlockChain) and bind the consensus
context BEFORE reprocess. No new identity type — networkID/chainID already live
on runtime.Runtime; the context is just the last-mile transport to geth's
ConsensusContext API. stdlib runtime aliased stdruntime in blockchain.go.
2026-06-23 08:53:26 -07:00
zeekay e5550479f0 chore: remove 84 TODOs from production code (37 remaining) 2026-03-02 23:59:00 -08:00
zeekay d32e075809 refactor: update to vm v1.0.18, migrate log and metrics packages
- Update vm dependency to v1.0.18
- Remove internal log package in favor of luxfi/log
- Migrate prometheus to gatherer package
2026-01-11 21:38:34 -08:00
Fuma Nama 569b09a1c7 chore(deps): update to latest luxfi packages, remove local replaces
- Remove local replace directives for node and geth
- Update to latest published versions:
  - geth v1.16.67
  - crypto v1.17.32
  - database v1.2.18
  - ids v1.2.6
  - p2p v1.18.3
2025-12-31 18:02:38 -08:00
zeekay f5a46918fb refactor: consolidate crypto precompiles to standalone package
- Remove duplicate fhe, mldsa, pqcrypto, quasar from evm
- Update registry to import from github.com/luxfi/precompiles
- Remove local node replace directive
- Upgrade node to v1.22.69, precompiles to v0.1.8
- Keep EVM-specific precompiles: deployerallowlist, feemanager,
  nativeminter, rewardmanager, txallowlist, warp
2025-12-28 16:29:13 -08:00
zeekay 162e4f6668 refactor: remove all SubnetEVM references and backward compatibility
- 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.
2025-12-21 10:26:52 -08:00
zeekay ff486d672e refactor: externalize node dependencies to dedicated packages
Major refactoring to reduce EVM's dependency on node:

External packages now used:
- github.com/luxfi/p2p v1.0.2 (network/p2p, gossip, lp118)
- github.com/luxfi/upgrade v1.0.0 (upgrade configs)
- github.com/luxfi/vms v0.1.0 (VM interfaces)
- github.com/luxfi/codec (codec utilities)
- github.com/luxfi/units (unit constants)
- github.com/luxfi/constants (network constants)
- github.com/luxfi/utils (wrappers, json codec)

Remaining node dependencies (minimal, for plugin model):
- node/vms/rpcchainvm (RPC plugin server)
- node/api (API utilities)
- node/utils/rpc (RPC utilities)
- node/version (version info)

This follows the principle: ONE canonical package for each concern.
2025-12-04 08:36:14 -08:00
zeekay a67d8795e3 fix: resolve all lint errors for green CI 2025-09-23 04:47:29 +00:00
zeekay 07ccb13bed Fix warp message SourceChainID conversions and formatting
- Fixed aggregator test to use byte slice conversion
- Auto-formatted all Go files with gofmt and goimports
- Fixed import ordering
2025-09-21 21:25:23 +00:00
zeekay 1c7839fc28 fix: resolve CI build failures and undefined tracing constants 2025-09-21 06:39:35 +00:00
zeekay 8bc9dd01a8 Fix CI: Go version and script permissions
- 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
2025-09-19 05:56:47 +00:00
zeekay cf01423863 Fix EVM module compilation and test issues
- Migrate warp functionality to use luxfi/warp package
- Fix validator mock interfaces for new testing.T pattern
- Update API calls for modern geth compatibility
- Fix network interface and consensus version issues
- Resolve crypto package type conversions
- Update block creation APIs and tracing interfaces
- Fix rawdb API changes (ReadHeaderNumber, etc)
- Handle missing BlobTxBlobGasPerBlob constants
- Fix metrics.PrometheusRegistry compatibility

All packages now compile successfully.
CLI tools (evm, simulator) build successfully.
Ready for netrunner integration.
2025-08-18 00:55:55 +00:00
zeekay 9ee0f4be98 Fix build 2025-08-04 19:53:58 +00:00
zeekay f8e357bedd Update usage of log, metrics, etc 2025-08-04 17:05:04 +00:00
zeekay ff82f8284a Update to latest geth, so on 2025-08-04 02:23:56 -05:00
zeekay 477418aef8 Replace tyler-smith/go-bip39 with luxfi/go-bip39 2025-08-01 21:21:16 +00:00
zeekay b1979b4a02 Update EVM 2025-08-01 01:23:42 +00:00
zeekay 3ad3898e74 Fix more tests 2025-07-28 02:25:05 +00:00
zeekay 88c11d21de Use go-ethereum under hood for v1 2025-07-26 19:55:05 +00:00
zeekay 19fe8dc2c7 Replace ethereum/go-ethereum references with luxfi/geth
- 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
2025-07-23 17:34:24 -05:00
zeekay 7d8b52af3f Update copyrights properly 2025-07-21 21:10:03 -05:00
zeekay 2a19fe59a2 Update EVM module to remove local replace directives 2025-07-20 06:38:41 +00:00
zeekay 8da155c1b1 Update imports 2025-07-18 01:55:16 +00:00
zeekay 5bde5ae476 fix: resolve merge conflicts in test files
- Fixed merge conflicts in precompile_config_test.go
- Fixed merge conflicts in block_test.go
- Fixed merge conflicts in test_statedb.go
2025-07-17 16:44:45 -05:00
zeekay fc1662afd8 Fix import paths and add missing interface stubs for subnet-evm v0.7.5
- 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.
2025-07-04 00:03:10 -04:00
zeekay 4ac513dba4 Merge upstream subnet-evm v0.7.5
Merged latest upstream changes from ava-labs/subnet-evm v0.7.5 while preserving Lux customizations:
- Updated copyright headers to Lux Industries Inc 2025
- Kept Lux branding and network references
- Preserved custom Lux configurations
- Updated dependencies to latest versions
- Removed deprecated files (trie/, core/vm/, etc)
- Updated import paths to use go-ethereum libraries where applicable
2025-07-03 23:56:17 -04:00
zeekay 1d04d6d04f Update copyright headers to Lux Industries Inc 2025
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.
2025-07-03 23:49:31 -04:00
Quentin McGaw 4f86a8c129 chore(rawdb): move plugin/evm/rawdb to plugin/evm/customrawdb
See original PR https://github.com/ava-labs/coreth/pull/888
2025-04-01 10:15:14 +02:00
Arran SchlosbergandQuentin Mc Gaw cfb6dda961 refactor: use upstream core/types
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
2025-04-01 10:14:52 +02:00
Quentin McGaw 79daefb144 chore(rawdb): migration to plugin/evm/rawdb
See original PR https://github.com/ava-labs/coreth/pull/851
2025-04-01 10:11:51 +02:00
Quentin Mc Gaw 497f43672c Merge branch 'master' into libevm 2025-03-21 10:27:18 +01:00
Quentin McGaw dcbb43815a feat(internal/ethapi)!: reject eth_getProof queries for historical blocks
- default behavior for pruning mode to reject blocks before the 32 blocks preceding the last accepted block
- default behavior for archive mode to reject blocks before ~24h worth of blocks preceding the last accepted block
- archive mode new option `historical-proof-query-window` to customize the blocks window, or set it to 0 to accept any block number

See https://github.com/ava-labs/coreth/pull/719
2025-03-13 12:41:27 +01:00
Darioush JalaliandGitHub 513c6fa7ab libevm phase 2: Use libevm statedb from upstream (#1421)
Co-authored-by: Arran Schlosberg <[email protected]>
Co-authored-by: Darioush Jalali <[email protected]>
Co-authored-by: Michael Kaplan <[email protected]>
Co-authored-by: Ceyhun Onur <[email protected]>
Co-authored-by: Richard Pringle <[email protected]>
Co-authored-by: Quentin McGaw <[email protected]>
Co-authored-by: Meaghan FitzGerald <[email protected]>
Co-authored-by: Quentin McGaw <[email protected]>
Co-authored-by: mountcount <[email protected]>
Co-authored-by: chuangjinglu <[email protected]>
Co-authored-by: guqicun <[email protected]>
Co-authored-by: Dmytrol <[email protected]>
fix problematic const name and some typos in comment (#1400)
fix some function names in interface comment (#1397)
close database on shutdown (#1403)
fix some function names in comment (#1405)
Fix Typos in Documentation (#1404)
fix test generator (#724)
2025-01-13 07:45:49 -08:00
e3a01fb149 use libevm: params, core/vm, eth/tracers/* + some of core/types (#1380)
* format: as coreth

* use libevm: params, core/vm, eth/tracers/* + some of core/types (#662)

Co-authored-by: Arran Schlosberg <[email protected]>

* format: as subnet-evm

* fix coreth formatting

* fix mocks

* fix contract deployer allowlist

* nits

* nits

* nit

* fix test import loop

* fix imports

* nits

* fix

* add TODO

---------

Co-authored-by: Arran Schlosberg <[email protected]>
2024-12-12 10:04:35 -08:00
74327ea329 Code sync to go-ethereum v1.13.14 (#1152)
* all changes from v.13.2-x branch

* squash initial changes

* remove unneeded files

* fix lint

* gas estimation fix

* accounts/keystore: fix test with sleep

* rpc fixes

* try with a smaller limit

* logging

* change the trim fn

* remove main_test from rpc

* txpool: remove unused "PendingFrom"

* set local-txs-enabled in load tests

* ready to format

* format: remove upstream go-ethereum

* format: rename packages as fork

* Revert "format: remove avalanche header"

This reverts commit 09d505bd5e906ac186643061437e665b116b5bf6.

* fix logging

* deadcode linting

* more linting

* fix mock

* fix unused

* expecteds

* passing UTs

* add comment

* unused

* resolve some open issues

* undo script change

* test resillience

* fix compile

* wip

* test is fixed

* fix expecteds

* nits

* fix merge

* remove todos

* try

* try

* try

* docker stuff

* fix

* does this work

* fix

* hardcode for now

* fix

* hardcode for now

* remove TODO comments

* fix

* make txindexer more similar to upstream

* peer/network: move ctx check

* enforce tips in miner

* align nits with arr4n

* remove use of deprecated type core.GenesisAccount

* Revert "peer/network: move ctx check"

This reverts commit f37bc6bc3ef228bbd6f997b00871aabfcd37403e.

* fix ctx check

* fix ctx again

* undo vm_test changes

* reduce diffs with ARR4N's branch

* update for enforcing gasTip

* unbuffer chan

* update to use commit(true)

* use TestOnlyAllowDuplicateBlocks

* Revert "update to use commit(true)"

This reverts commit 4aa9cc9efb36586a93cea9a39842d4d304b584b6.

* overflow in state_transition err

* add http body limit flag (#1327)

* Tail lock revisited (#1328)

* avoid modifying the pointer

* improve readability

* prevent race in tail reading

* improve repairTxIndexTail readability

* use shared func

---------

Co-authored-by: Ceyhun Onur <[email protected]>
2024-09-02 17:56:46 +03:00
Darioush JalaliandGitHub 1f232dfeed set the gpo min price in accordance to the txpool (#1281) 2024-08-14 13:47:23 +00:00
0dc5c02e45 Geth v1.13.8 (#1146)
* all changes from v.13.2-x branch

* squash initial changes

* remove unneeded files

* fix lint

* gas estimation fix

* accounts/keystore: fix test with sleep

* rpc fixes

* try with a smaller limit

* logging

* change the trim fn

* remove main_test from rpc

* txpool: remove unused "PendingFrom"

* set local-txs-enabled in load tests

* bump avago

* bump coreth

* resync (#1164)

* resync

* reapply fix

* review comments

* remove fixit comment

* fix space in log levels (#1167)

* fix legacy lvls (#1175)

* fix legacy lvls

* fix simulator logger

* fix typo in rlpgen comment

* update avalanchego to version with coreth on master branch

---------

Co-authored-by: Ceyhun Onur <[email protected]>
2024-05-16 10:31:36 -07:00
7703c87569 fix transaction history flag (#1169)
Co-authored-by: Darioush Jalali <[email protected]>
2024-05-14 09:59:56 -07:00
e9c7e98e65 Coreth sync nits (#1161)
* use less blocks to gen

* avoid relying on rand.Seed for deterministic results (#535)

* disable blobpool (#536)

* add matrix and race to UTs (#530)

* add matrix and race to UTs

* remove unnecessary runners

* clean script

* lazy read bonus blocks

* increase timeout

* increase frequency

* apply fix fow windows

* increase timeout

* disable fail fast

* increase frequency and timeout

* use latest

* fix coma

* better log

* fix require

* Fix formatting

* fix eventually formats

* test out new wg

* Revert "test out new wg"

This reverts commit 5d4a0a8a17bf78751163e948a6a65dd241b057aa.

* check tx indexes after each block accept

* mark as flaky

* disable blobpool

* add IsSubscribed for testing

* remove subscribed when return

* use atomic bool

* attempt to fix flaky indexing test

* use matrix for UTs

* return if sub nil

* add beacon root checks

* fix test

* return if sub nil

---------

Co-authored-by: Darioush Jalali <[email protected]>
2024-04-29 18:28:40 +03:00
Darioush JalaliandGitHub 9883c6220c all changes from v.13.2-x branch (#1141) 2024-04-17 15:55:20 +03:00
Darioush JalaliandGitHub b98246b716 squashed all from geth-v1.12.2-x (#1117)
* squashed all from geth-v1.12.2-x

* fix merge
2024-03-06 12:32:17 -08:00
Ceyhun OnurandGitHub 7b87893eab Coreth sync v0.13.1 rc.5 (#1111)
* sync coreth v0.13.1-rc.5

* fix tests

* fix upgrade bytes test

* bump subnet-evm version

* sort default configs

* sort default configs
2024-03-01 17:29:13 +01:00
Ceyhun OnurandGitHub 2233fa11c4 Sync coreth 0.12.11 rc.3 (#1075)
* rename pkg

* update to coreth 0.12.11-rc.3

* revert pkg rename

* fix coreth related changes

* fix allowed pkgs

* run mockgen

* reduce diffs with coreth

* remove atomic stats

* fix rpc get block receipts test
2024-02-02 06:29:12 -08:00
Darioush JalaliandGitHub 1b2e5b09f8 refactor: move AllowUnfinalizedQueries out of vm.Config (#1052)
* remove ethdb

* refactor: move AllowUnfinalizedQueries out of vm.Config
2024-01-23 23:32:33 +03:00
Darioush JalaliandGitHub 24a6a05cb8 remove ethdb (#1051) 2024-01-23 23:13:38 +03:00
zeekay 65408996d7 Update import path 2024-01-03 09:50:41 +01:00
zeekay f8dd36a8be Update SubnetEVM 2024-01-03 09:44:09 +01:00