Commit Graph
1761 Commits
Author SHA1 Message Date
zeekay 263c81d093 params/extras: relaunch-safety test + regenerate canonical upgrade fixtures
Round-2 follow-up to the luxfi/genesis upgrade.json reschedule fix (17
live-at-genesis precompiles pinned to blockTimestamp 0; warp two-step
strict-PQ toggle moved after the zero-timestamp block; dead dexConfig
0x9010 dropped).

- relaunch_safety_test.go (new): drives the node's REAL fork-application
  primitive extras.IsForkTransition (parent=nil reduces to fork <=
  genesisTime, exactly what GetActivatingPrecompileConfigs evaluates when
  a relaunched node builds its first rule set) against the embedded
  canonical fixtures. Asserts the invariant: every precompile that
  activates at/under the C-Chain genesis time (mainnet 1730446786 /
  testnet 1730517266) is in the live-at-block-0 set AND pinned to exactly
  0; every other entry is strictly future; and all 17 live precompiles are
  present (no relaunch divergence). No entry sits in the (0, genesisTime]
  retroactive-reschedule window.

- mainnet_upgrade_v46.json / testnet_upgrade_v47.json: regenerated
  byte-for-byte from the corrected canonical genesis configs (46 / 44
  entries; the 25 timestamp diffs were the 1766708400 -> 0 normalization
  plus the warp reorder).

- precompile_upgrade_rollout_test.go: WarpRequiresPrimaryNetworkSigners
  updated for the two-step toggle — warp is declared in the genesis
  chainConfig, and the schedule carries disable@strictPQ-1 then
  re-enable@strictPQ; the PQ signer-policy assertion targets the re-enable
  entry, and same-key strict-increase is enforced (mirrors
  verifyPrecompileUpgrades).

- upgrade_unmarshal_test.go / testnet_upgrade_unmarshal_test.go: fixture
  doc comments rewritten to the live-at-0 / strict-PQ-toggle / BLS /
  Quasar-Edition tier layout; RegressionProof entry-count assertion 45 ->
  46 to match the embedded fixture.

Verified: go vet clean; CGO_ENABLED=0 go test ./params/extras/...
./params/extras_e2e_test/... — RelaunchSafe (mainnet+testnet),
IsForwardCompatibleWithLiveActivations, WarpRequiresPrimaryNetworkSigners,
PrecompileTimestampsAreMonotonic, RegressionProof all PASS.
2026-06-21 22:22:38 -07:00
zeekay b644c5054f fix(extras): remove dead dexConfig from vendored upgrade fixtures + gates
node v1.30.27/28 dropped the 0x9010 DEX precompile; its config key
dexConfig is unregistered under the pinned luxfi/precompile v0.5.55, so
the vendored canonical fixtures carrying it made
TestMainnetUpgradeJSON_UnmarshalsAgainstRegistry FAIL with 'unknown
precompile config: dexConfig' (the C-Chain brick-on-boot the gate exists
to catch). Remove dexConfig from both fixtures (sync source: luxfi/genesis
configs/{mainnet,testnet}/upgrade.json, cleaned in lockstep), update the
canonical entry-count assertion 46->45, and drop dexConfig from the
lux-mainnet live-activations const so the forward-compat check stays
consistent. Verified CGO_ENABLED=0 go test ./params/extras_e2e_test/ -> ok.
2026-06-21 19:05:22 -07:00
zeekay 470ed84e4b params: remove leftover debug fmt prints
SetEthUpgrades wrote a [SET-ETH-UPGRADES] line to stderr and GetFeeConfig
wrote two DEBUG lines to stdout on every call — leftover debugging, not
intentional logging. Removed all three; dropped the now-unused fmt and os
imports from config_extra.go.

NOTE: coordinated cascade — another agent is bumping this repo's version for
an unrelated change. This is a pure code edit (print removal) on its own
branch; fold into the cascade.
2026-06-21 19:05:03 -07:00
zeekay 4e58dc29fe evm: require precompile v0.5.55 (native 0x9999 DEXFill/Initialize emission) (v1.99.35)
Pins the precompile tag that exports dex.DexSettleActivationTime so the
dexsettle_guard DRY test compiles and enforces extras==dex mirror equality.
go test -tags dexsettle_guard ./core/ PASSES against the pinned tag.
2026-06-21 14:27:59 -07:00
zeekay 93682171fd Merge fix/native-dex-indexing: dexsettle_guard DRY guard for cross-layer activation constant (v1.99.35) 2026-06-21 14:26:02 -07:00
zeekay b36fbd3191 extras: correct DexSettleActivationTime annotation to 23:20:00Z + do-not-round guard
1766704800 is 2025-12-25T23:20:00Z, not midnight (1766620800). Value is the
canonical protocol constant, already live gating 0x9999 dispatch on devnet;
changing it would fork chains that crossed the boundary. Annotate the true
instant; warn against rounding. Comment-only — zero consensus change.
2026-06-21 14:26:02 -07:00
zeekay 3b3e792373 evm/core: release-gate the cross-repo DexSettleActivationTime DRY guard behind a build tag
The guard TestDexSettleActivationTime_LayerMirrorsMatch references
dex.DexSettleActivationTime, which is defined in luxfi/precompile and post-dates
evm/go.mod's pinned precompile tag (v0.5.54). Under GOWORK=off (CI), evm/core
failed to build (undefined: dex.DexSettleActivationTime); it only compiled via an
untracked local go.work. The guard was therefore both inert in CI and a latent
CI break.

Move the single cross-repo guard into precompile_alwayson_dexsettle_guard_test.go
behind //go:build dexsettle_guard. Default CI excludes it, so evm/core builds and
tests against the pinned precompile tag with no go.work. The release step bumps
evm/go.mod to a precompile tag that exports the symbol and runs
`go test -tags dexsettle_guard ./core/`, enforcing the DRY invariant atomically
with the bump. precompile cannot host the guard (it does not import luxfi/evm; the
graph is strictly evm->precompile, so referencing extras.DexSettleActivationTime
from precompile would create a cycle). All other 0x9999 activation pins in
precompile_alwayson_test.go use only evm-local symbols and run on every CI build.
2026-06-21 13:51:10 -07:00
zeekay 4ca6f2cab7 evm/core: guard dex.DexSettleActivationTime == extras.DexSettleActivationTime
The 0x9999 activation timestamp lives in TWO layers that cannot share a symbol: the
canonical extras.DexSettleActivationTime (this evm layer, used by the dispatch gate +
marker transition) and a layer-local mirror dex.DexSettleActivationTime (luxfi/
precompile, used to gate the precompile's new consensus-visible logs — precompile is
below evm in the import graph so it cannot import extras). If they drift, a settlement
could dispatch (extras gate) where the precompile withholds its log (stale mirror) ->
settlement-without-log window -> consensus split on replay. This test imports BOTH and
fails CI the instant either constant moves without the other.

NOTE: compiling this test against the new dex export requires evm go.mod to pin a
luxfi/precompile release that exports DexSettleActivationTime (>= v0.5.55, to be cut
from the precompile branch). Verified locally PASS against the local precompile via a
temporary replace (reverted); the go.mod bump is part of the coordinated release.
2026-06-21 13:16:17 -07:00
zeekay a5110aec52 evm: fix 0x9999 dispatch consensus-divergence on replay path + harden value/genesis edges (v1.99.34)
Red review of the 0x9999 dated-fork activation (v1.99.33) found ONE HIGH that
blocked the production deploy, plus a money-path footgun and two guards. The
money path (V4 swap ABI, EXTCODESIZE marker, two-phase atomic settle) is
byte-for-byte unchanged — only the dispatch-path timestamp source, the SubBalance
fail-mode, the genesis-builder guard, and stale comments change. Bumps
precompile v0.5.53 -> v0.5.54 (Red L1 comment scrub).

H1 (HIGH, blocked deploy) — consensus-divergence on the relaunch/replay path:
  core.LuxPrecompileOverrider.PrecompileOverride read the PROCESS-GLOBAL
  params.lastRulesContext via GetRulesExtra(Rules{}). That global is rewritten
  last-writer-wins by SetRulesContext on every Rules()/RulesAt() — including
  concurrent eth_call/estimateGas/miner goroutines. The geth EVM invokes
  PrecompileOverride LAZILY during opcode execution, a different instant than when
  precompileHook set the global. On a live, RPC-serving post-fork node replaying a
  PRE-fork RLP block (admin.importChain), a concurrent post-fork eth_call could
  overwrite the global timestamp between the verify goroutine's NewEVM(pre-fork
  block) and its tx dispatch -> the pre-fork block sees 0x9999 ENABLED and
  dispatches SettleContract.Run during plain-account execution -> STATE DIVERGENCE.
  Fix: the dispatch gate now decides from the overrider's OWN per-EVM fields
  (o.chainConfig + o.timestamp) via the pure params.GetExtrasRules — which performs
  the SAME dated-fork (extras.IsDexSettleActive) computation GetRulesExtra did,
  minus the racy global read. Audited every GetRulesExtra reader: only the overrider
  was on the precompile-dispatch path; no other dispatch/consensus-replay call site
  consults the 0x9999 gate. Every replay of a given block now yields the same
  enabled set on every validator, independent of concurrent activity.

L2 (money-path footgun) — registry stateDBBridge.SubBalance fail-open silent mint:
  when the subBalancer type-assertion failed it logged + returned a zero 'previous
  balance' WITHOUT subtracting, while the caller treats the debit as successful ->
  native value minted. Now FAILS CLOSED: it panics, which the EVM recovers into a
  reverted call, so the enclosing value move rolls back rather than committing
  half-done. Structurally unreachable in prod (the concrete adapter implements
  SubBalance) but no longer mints if a future StateDB omits it.

INFO1 (latent footgun) — genesis-config builders bypassed the dated fork:
  SetAllGenesisPrecompiles/AllGenesisPrecompiles iterated ALL RegisteredModules()
  incl the AlwaysOn 0x9999 and wrote timestamp-0 genesis configs, which would enable
  0x9999 from block 0 on a fresh chain — bypassing the dated fork and re-introducing
  the genesis-marker mutation. Both builders now skip AlwaysOn modules.

INFO2 (tests):
  - core: -race regression TestDexSettle_PrecompileOverride_NoGlobalRace reproduces
    the exact relaunch race (pre-fork verify vs concurrent post-fork eth_call
    clobbering the global) and asserts the pre-fork side ALWAYS sees 0x9999 ABSENT,
    post-fork ALWAYS PRESENT. PerEVMTimestamp pins the gate reads o.timestamp not the
    global. Replay e2e asserts a pre-fork value transfer to 0x9999 credits a PLAIN
    account WITHOUT invoking the precompile. All proven to FAIL under the old
    global-read code and PASS under the fix; -race clean.
  - extras + core: TestGenesisPrecompileBuilders_SkipAlwaysOn / _Skip9999 pin INFO1.
  - subbalance test comment refreshed to 0x9999 + fail-closed semantics.
2026-06-21 12:42:42 -07:00
zeekay d34c473034 Merge: dex 0x9999 dated-fork activation + marker install (v1.99.33) 2026-06-21 12:09:56 -07:00
zeekay 4572d7f758 dex(0x9999): timestamp-gated dated-fork activation + marker install (v1.99.33)
Replace the v1.99.32 "always-on, dispatch-only, no marker" activation of the
0x9999 DEX settlement money path with the CTO's exact model: a SINGLE canonical
dated fork that both enables dispatch AND installs the EXTCODESIZE marker —
forward, at the fork boundary, never in historical genesis.

The fork: extras.DexSettleActivationTime = 1766704800 (Dec 25 2025 00:00:00 UTC),
defined ONCE in params/extras/network_upgrades.go alongside the Durango/Quasar/
Fortuna/Granite built-in upgrades. NOT per-net config (no per-net upgrade.json
precompileUpgrades entry, no genesisPrecompiles entry) — one dated fork, identical
on every Lux network, DRY. This is the proper canonical fork mechanism for a
system precompile that takes no per-net parameters (0x9999 resolves protocolFee-
Controller=DefaultDAOTreasury and dChainID at runtime from the consensus context).

Two coupled effects, both gated on that one timestamp:

  1. DISPATCH (params/config_extra.go GetExtrasRules): the AlwaysOnModules() inject
     into the enabled precompile set is now wrapped in extras.IsDexSettleActive(ts)
     — present at/after Dec 25, ABSENT before. This is REQUIRED for canonical
     history: replaying a pre-Dec-25 block (the ~/work/lux/state RLP snapshot, e.g.
     lux-mainnet 96369 = 1,082,780 blocks via admin.importChain) must see 0x9999 as
     a PLAIN ACCOUNT so a historical value transfer to that address behaves as it
     did originally, not as a precompile dispatch. The prior unconditional inject
     would have diverged replay from canonical state.

  2. MARKER (core/state_processor_ext.go ApplyPrecompileActivations): on the block
     transition that CROSSES the fork (params.IsDexSettleForkTransition →
     extras.IsForkTransition), write the STANDARD precompile-activation marker
     (SetNonce=1 + SetCode{0x1}) into 0x9999 — identical to the config-driven path.
     This is the forward state upgrade: EXTCODESIZE(0x9999)>0, eth_getCode!=0x, and
     Solidity's contract-existence guard passes for a typed IPoolManager(0x9999)
     .swap(...). The prior change DROPPED this marker to avoid mutating genesis;
     installing it forward at the fork preserves the genesis hash (pre-activation
     blocks get NO marker) while making typed calls work post-activation. Reverts
     the v1.99.32 "writes NO genesis state for always-on modules" skip.

IsForkTransition fires exactly once (!parentForked && currentForked). For a fresh
net whose genesis timestamp is already >= the fork (parent==nil), it fires at
genesis — so fresh/local/new nets carry the marker from block 0 via the SAME
mechanism, no separate genesisPrecompiles entry (CTO step 4). For an existing net
(genesis ts < fork) it does NOT fire at genesis — genesis hash immutable — and
fires forward at the Dec 25 block.

KEPT byte-for-byte: runtime DChainID via BCLookup.Lookup("D"), DefaultDAOTreasury
protocolFeeController, networkID/cChainID from runtime context, AlwaysOn module
tagging + AlwaysOnModules(), all settlement/money-path logic.

0x9010: with precompile v0.5.53 the 0x9010 module is no longer registered, so the
EVM never dispatches it and eth_getCode(0x9010)=0x. registry comment updated to
LP-9999. No EVM-side 0x9010 dispatch reference existed.

deps: precompile v0.5.52 -> v0.5.53.

Tests (core/precompile_alwayson_test.go, rewritten — DRY, replaces the prior
unconditional/no-marker assertions):
  - TestDexSettle_DispatchGate_TimestampGated: 0x9999 absent pre-fork, present
    at/after (replay safety + post-activation dispatch).
  - TestDexSettle_NoGenesisMarker_ExistingNet: genesis (ts<fork) writes no marker
    (genesis hash immutable).
  - TestDexSettle_MarkerInstalledAtForkTransition: marker (nonce=1 + code, EXTCODESIZE>0)
    installed at the boundary block.
  - TestDexSettle_ForkTransitionFiresOnce: fires once; fresh-net genesis>=fork at
    block 0; existing-net genesis<fork not at genesis.
  - TestAlwaysOn_9999_Registered: 0x9999 bridged AlwaysOn.
  core + params/extras green incl. the real-mainnet genesis-hash guards. (Two
  pre-existing unrelated failures on pristine main: params/config_test.go references
  a removed DurangoTimestamp field; params/extras mainnet upgrade.json ringConfig/
  warpConfig timestamp guards — both fail identically with these changes stashed.)
2026-06-21 12:09:46 -07:00
zeekay 5b67e103ff Merge: dex 0x9999 always-on settlement + runtime DChainID (v1.99.32) 2026-06-21 09:21:12 -07:00
zeekay 1da6f47b13 dex(0x9999): always-on settlement activation + runtime DChainID (v1.99.32)
Wire the EVM side of the always-on DEX settlement money path 0x9999. It is ACTIVE
on every chain from genesis with NO config entry — neither a genesis-inlined
precompile nor a precompileUpgrades timestamp. Zero per-net config, one way.

Activation is DISPATCH-only (genesis state is consensus-critical and immutable):
  - params.GetExtrasRules injects every modules.AlwaysOnModules() entry into the
    enabled precompile set unconditionally (every chain, every timestamp). This is
    what PrecompileOverride.IsPrecompileEnabled consults, so 0x9999 runs for a
    tx-to-0x9999, a low-level CALL/STATICCALL, and the 0x9010 V4 forward.
  - ApplyPrecompileActivations writes NO genesis state for always-on modules. An
    EXTCODESIZE marker at genesis would change the genesis hash and FORK existing
    networks (a fresh-syncing node would disagree with the committed genesis). The
    real lux-mainnet genesis hash is preserved (TestSkipPostMergeFieldsGenesisHash).
  - The always-on module's Configurator is never invoked (no activating config).

DChainID runtime resolution (THE crux): contract.AtomicState gains DChainID(); the
EVM adapter (accessibleStateAdapter) resolves it from the consensus context via
runtime.GetBCLookup().Lookup("D") — the dexvm "D"/"dex"/"dexvm" alias the node
registers in initChainAliases before any chain bootstraps. Identical on every
validator and re-execution; ids.Empty on a network with no dexvm (seam stays closed,
fail-secure). The registry bridge forwards DChainID across the internal/external
AtomicState surfaces. modules.Module gains AlwaysOn (+ AlwaysOnModules()), bridged
from github.com/luxfi/precompile.

deps: precompile v0.5.51 -> v0.5.52 (DChainID + AlwaysOn + always-on settle module).

Tests: core suite green incl. the real-mainnet genesis-hash guards. New
core/precompile_alwayson_test.go: 0x9999 registers AlwaysOn, is dispatch-enabled with
NO config at genesis + far-future ts, and writes NO genesis state (genesis-hash
immutability). (Two pre-existing unrelated failures: params/config_test.go references
a removed DurangoTimestamp field; mainnet upgrade.json aiMining/warp timestamp guards
— both fail identically on pristine main.)
2026-06-21 09:21:06 -07:00
zeekay 66b287ad6a deps: bump geth v1.17.12 + precompile v0.5.51 for DEX native-atomic-seam release (v1.99.31) 2026-06-21 07:16:50 -07:00
zeekay c9a78299d0 plugin/evm: one-batch-atomic DEX native seam flush (FIX 2 chain-halt)
The host side of the 0x9999 native C<->D atomic seam, and the consensus-liveness
fix Red found.

THE BUG: Block.Accept applied the staged atomic ops to shared memory FIRST
(sm.Apply, no batch -> committed immediately) and advanced the node-local seq
marker LATER, in a separate versiondb.Commit(). atomic.SharedMemory.Apply is NOT
idempotent (duplicate Put errors). A crash BETWEEN them left shared memory
mutated but the marker unadvanced; on restart the same parent->current window
re-collected, sm.Apply re-applied the present Put, errored, and Accept returned
fatal -> the chain HALTED.

THE FIX (mirrors chains/dexvm commitAtomic): flushDexAtomic -> stageDexAtomic
stages the advanced dexAtomicSeqKey marker INTO the versiondb in-memory layer and
returns (reqs, sm). Block.Accept snapshots the versiondb (marker + lastAccepted)
via CommitBatch() and passes it to sm.Apply(reqs, batch) — its WriteAll commits
the shared-memory mutation AND the batch in ONE database write. The marker advance
and the SM mutation are now all-or-nothing: a crash applies-and-marks both or
neither, and a re-accept of an applied window sees an advanced marker -> empty
window -> no duplicate Put -> no halt. With no atomic ops the plain
versiondb.Commit() path is unchanged.

Also: core/precompile_overrider.go wires CallIndex() through the EVM accessible-
state adapter; precompile/registry/bridge.go + precompile/contract/atomic.go
forward the optional contract.AtomicState capability to luxfi/precompile.

Regression for the closed halt window lives in precompile
native_haltwindow_test.go (unit). The live-path test (real versiondb + crash
injection) is CI-only (CGO + luxfi/accel LUXCPP). Local symbol-resolution proof:
CGO_ENABLED=0 go build ./plugin/evm/ compiles clean.
2026-06-21 00:19:47 -07:00
zeekay c25184fcfd deps: precompile v0.5.50 + clean go.sum (consensus/geth hashes corrected)
Bump precompile v0.5.49->v0.5.50 (clean go.sum; 0x9999 surface unchanged) and
regenerate evm's go.sum from a clean module cache (v1.99.29's consensus/geth
hashes were poisoned by a tampered local cache). No evm code change. go mod
verify clean; build+test green.
2026-06-20 22:12:29 -07:00
zeekay 706823ebe6 plugin/evm: remove deprecated DexZap live-backend wiring; precompile v0.5.49
The C-Chain DEX settles certified D-Chain fill receipts at the 0x9999 precompile
(LP-9999); it never queries a live matcher. Remove the deprecated
DexZapEndpoint -> SetBackend(NewZAPEngine()) wiring from vm.go and the
DexZapEndpoint config knob: a synchronous in-block ZAP query against the
D-Chain's moving book forks consensus (each validator observes differently-timed
fills -> divergent StateRoot, proven by chains/dexvm
TestRED_PerValidatorRelay_SplitsConsensus). ZAP survives only as the dexvm's own
build-path transport, never as a C-Chain live backend. Receipts ride in V4 swap
hookData and are verified inline (deterministic BLS).

Bump github.com/luxfi/precompile v0.5.47 -> v0.5.49 to embed the complete,
red-swarm-hardened 0x9999 receipt-settlement surface.
2026-06-20 14:57:25 -07:00
zeekay f7d28f0776 deps: pin geth v1.17.11 + consensus v1.25.18 + precompile v0.5.47 (real semver); MVS-propagate transitive bumps 2026-06-19 14:43:16 -07:00
zeekay 8fac9151f4 Merge feature/zchain-rollup-starkfri-pq: Z-Chain rollup + starkfri PQ 2026-06-19 14:25:55 -07:00
zeekay 96d754b116 evm: install bn256-carve-out strict-PQ profile; prove StrictPQ gate active (Red H2 + guardrail)
Task 2 (Red H2): StrictPQTimestamp was wired from config.PQ (vm.go) but the
gate was unproven inert. The canonical lux-mainnet config already sets
pq:true and upgrade.json sets strictPQTimestamp=Quasar-TS; added behavioral
tests proving NetworkUpgrades.IsStrictPQ activates (genesis when pq:true ->
StrictPQTimestamp=0; at the timestamp on running chains; Override carries it).

GUARDRAIL fix: vm.Initialize installed gethvm.AllForbidden() (=pq.Strict),
which forbids the standard bn256 precompiles 0x06-0x08 — breaking
Ethereum-compat dapps. Now installs the EVM-owned LuxStrictPQ() projection
(pq_profile.go): every classical family forbidden EXCEPT bn256. Lux's
security-critical pairing/DLOG is in CUSTOM precompiles (0x0900, 0x22
Pedersen, zkvm verifiers) + the consensus cert, each gated by the SAME
profile bit (config.PQ also pins StrictPQTimestamp=0 -> RefuseUnderStrictPQ).

Tests (b): IsStrictPQ true on a prod strict chain (genesis + timestamp +
Override paths), false when nil. (f): LuxStrictPQ admits bn256 0x06-0x08 and
still refuses every other family; differs from AllForbidden only by bn256.
2026-06-19 13:37:37 -07:00
zeekay 671704829e evm: bump precompile v0.5.45 -> v0.5.46 (DEX embedded-engine vestige removed; one path inert | ZAP->D-Chain)
Builds CGO on+off; core SubBalance regression green.
2026-06-18 10:41:35 -07:00
zeekay 9e9475f2bd evm v1.99.26: bump precompile v0.5.44 -> v0.5.45 (durable cancel-authorization binding)
Picks up the EVM-path 0x9010 cancel fix: the owner<->order cancel-auth binding
now lives in durable StateDB (PoolManager seam) instead of the backend's process
memory, so a cancel survives the EVM's ~5x multi-execution and a node restart.
Builds CGO on + off; core precompile SubBalance regression green.
2026-06-18 10:14:52 -07:00
zeekay 6de8aaa7e9 evm: FIX native-MINT bug in precompile StateDB bridge + precompile v0.5.44
CRITICAL: stateDBBridge.SubBalance type-asserts the concrete adapter else SILENTLY no-ops; the
internal contract.StateDB had AddBalance but no SubBalance and stateDBAdapter only implemented
AddBalance → a precompile debiting native value (DEX withdraw) CREDITED the caller while debiting
NOTHING = native mint (caught live: vault 100000, wallet +100000). The DEX is the first precompile
to debit native value so the path was never exercised. Added stateDBAdapter.SubBalance + regression
guard (core/precompile_statedb_subbalance_test.go); zero 'SubBalance fallback' warnings. Bump
precompile v0.5.43→v0.5.44 (PoolManager pure-ingress custody).
2026-06-17 22:30:58 -07:00
zeekay 2af00d3928 evm: bump luxfi/precompile v0.5.42 → v0.5.43 (autoSettle removed; non-native legs deposit into D-Chain) 2026-06-17 21:11:12 -07:00
zeekay ed62f967d5 evm: bump luxfi/precompile v0.5.38 → v0.5.42 (0x9010 EVM-path fixes) 2026-06-17 19:30:09 -07:00
zeekay 82d534607d Merge dex-zap-endpoint-flip 2026-06-17 17:26:12 -07:00
zeekay 51b23247ca evm: wire dex-zap-endpoint -> SetBackend(NewZAPEngine) so 0x9010 routes to the venue D-Chain
config.go: DexZapEndpoint (node-local + version-pinned consensus-safety invariant). vm.go: when
set, SetBackend(NewZAPEngine(endpoint,2s)) BEFORE parseGenesis; INERT when empty (public default
= embedded engine, unchanged). Resolves against published luxfi/[email protected], no replace.
Builds CGO on+off; config decode test added.
2026-06-17 17:26:12 -07:00
zeekay 1a6fcb5cbd corona→corona: academic Corona now only in lp-220-p3q-corona 2026-06-11 10:27:50 -07:00
zeekay d8316032a8 deps: update to latest real-semver, drop local replaces, fix breaks
- luxfi/constants: pseudo-version v1.5.8-0.2026... -> real tag v1.5.8
- luxfi/upgrade: pseudo-version v1.0.1-0.2026... -> real tag v1.0.1
- precompilebind: emit MakeGenesisConfig in module template (Configurator
  interface gained MakeGenesisConfig; generator was stale)
- precompilebind test: use reserved-range address 0x0200..00ff (the 0x03..
  test address predates the tightened reserved ranges in modules/registerer.go)
2026-06-11 09:26:08 -07:00
zeekay 3049ca0e8e ci: route to canonical native arcd labels [self-hosted, linux, <arch>]
Replaces non-canonical scale-set / org-prefixed labels with the
existing labels every arcd host registers with. Matches evo for
amd64 and spark for arm64. No new labels added.
2026-06-10 20:20:09 -07:00
Antje WorringandHanzo Dev 76e9bba6cf feat(registry): activate AI inference + model-registry precompiles (precompile v0.5.38)
Bump luxfi/precompile v0.5.37 -> v0.5.38 and register the two new AI-family precompiles:
- inference     (0x0300..0003): deterministic on-chain int8 transformer (byte-exact across
                                Go/Rust/Metal/CUDA/HIP; the trustless on-chain 'thinking' path)
- modelregistry (0x0300..0002): governance-adopted versioned model-commitment registry
v0.5.38 also carries the ai (0x0300) atomic cross-chain mining methods (verifyAndMintWork/Data).

Additive + DORMANT: registering != activating. No chain runs these until its genesis/upgrade
config enables the ConfigKey (aiInferenceConfig / modelRegistryConfig). Mainnet C-Chain + zoo
do not; the Zoo L3 Beluga genesis does. Full registry init() verified clean — all precompiles
register with no address collision.

Co-authored-by: Hanzo Dev <[email protected]>
2026-06-10 08:15:23 -07:00
zeekay b79120cb40 deps: bump Go to 1.26.4 across go.mod, Dockerfiles, GH Actions
Workspace-wide sync. luxfi/node already shipped on 1.26.4 in v1.30.6
(commit 121aca1fa9); this is the cross-repo catch-up.
2026-06-07 11:01:34 -07:00
zeekay 5d4ebb094b deps: bump Go to 1.26.4 across go.mod, Dockerfiles, GH Actions
Workspace-wide sync. luxfi/node already shipped on 1.26.4 in v1.30.6
(commit 121aca1fa9); this is the cross-repo catch-up.
2026-06-07 10:45:51 -07:00
zeekay c71f618ea3 go: 1.26.3 → 1.26.4 (security: crypto/x509, mime, net/textproto) 2026-06-06 22:05:13 -07:00
zeekay 31177d3be4 deps: bump luxfi/vm v1.2.0, sampler v1.1.0, staking v1.5.0 (relicense)
Picks up the 2026-06-06 relicensing:
- luxfi/vm v1.2.0 → Lux Ecosystem License v1.2 (was Lux Research v1.0).
  License-only retag of the extracted runtime; patent reservation
  preserved for runtime optimization surfaces, royalty-free for
  Descending Chains.
- luxfi/sampler v1.1.0 → BSD-3-Clause (was Lux Research v1.0).
  License restored to match the luxfi/node provenance (originally
  extracted from node/utils/sampler).
- luxfi/staking v1.5.0 → BSD-3-Clause (was Lux Research v1.0).
  License restored to match the luxfi/node provenance.

No code changes in this commit — go.mod/go.sum only.
2026-06-06 19:02:04 -07:00
zeekay b442c2e218 deps: bump p2p v1.21.1, vm v1.1.11, geth v1.16.99 (Wave 2G-Cascade) 2026-06-06 06:27:18 -07:00
zeekay 0bef9d7637 codec rip: switch sync/statesync to luxfi/utils/wrappers
Drop codec/wrappers import in trie_segments + statesynctest helpers.
luxfi/utils/wrappers has identical API (Packer, ByteLen/ShortLen/
LongLen, Errs) — it has been the canonical home since utils v1.1.x.

Bumps utils to v1.1.5 for the new json subpackage now used elsewhere
in the codec rip; statesync only uses /wrappers.
2026-06-06 02:56:37 -07:00
zeekay edce485ac1 evm: codec rip — message.Manager + validators state hand-rolled binary
Salvages an in-flight Wave 1C cascade on evm/ (the EVM fork separate
from coreth and evmgpu). 17 files touched. Mirrors the coreth
migration patterns:

- plugin/evm/message/codec.go: defines local Manager interface with
  hand-rolled wrappers.Packer; drops codec.Manager polymorphic registry.
- plugin/evm/message/request.go: typed Marshaler boundary.
- sync/{client,handlers}/*.go: codec.Manager → message.Manager swap.
- plugin/evm/customrawdb/*: explicit big-endian for state sync schema.
- plugin/evm/validators/state/{codec,state,state_test}.go: hand-rolled.
- plugin/evm/upgrade/feewindow/window.go + plugin/evm/vm.go +
  network/network.go + plugin/evm/network_handler.go: call-site fixups.
- precompile/registry/registry.go: codec-free registration path.

Builds clean: go build ./...
2026-06-05 15:31:59 -07:00
zeekay e4547055c6 predicate, warp/messages: hand-rolled binary, drop github.com/luxfi/codec
predicate/predicate_results.go:
  Hand-rolled big-endian wire for map[Hash]map[Address][]byte:
    u16 version | u32 outer | (32B hash, u32 inner, (20B addr, u32 len, bytes)*)*
  Sorted by hash then address for deterministic output — block-hash
  load-bearing across validators. Test suite (golden-byte multi-tx
  cases) passes.

warp/messages/{codec,payload}.go:
  Drops codec.Manager polymorphic registry — single payload family
  (ValidatorUptime) doesn't need reflection. Fixed 44-byte layout:
    u16 version | u16 type | 32B validation_id | u64 total_uptime
  Parse() dispatches on type discriminator (u16) — extensible without
  the codec dependency. initialize() / Bytes() / Parse() API unchanged.

Both Bytes()/Parse() public APIs preserved — consumers don't change.
2026-06-05 15:30:41 -07:00
zeekay 727493f6e7 plugin/evm: harden admin_exportChain with idempotency + sentinel (Task #118)
Previous ExportChain returned (bool, error) and would re-export from
scratch every call, leaving partial files with no marker on Ctrl-C.

Now returns *ExportChainResult with first/last block hashes and a Status
field ("ok" | "noop" | "interrupted"). Behavior:

  * Atomic JSON sentinel at <file>.sentinel (tmp+rename) updated every
    1024 blocks and on terminal states.
  * Idempotency: if file exists with a "done" sentinel matching
    {first, last, firstHash, lastHash}, returns Status=noop without
    re-exporting. Safe to call from a cron CronJob.
  * Interrupt: ctx.Done() at every block boundary writes a sentinel
    with Status=interrupted + HighestExported so the caller can resume.
  * Block iterator still streams (no whole-chain buffering); gzip path
    unchanged.

Symmetric with admin_importChain which returns *ImportChainResult, and
with the cmd/rlp-export CLI shipping alongside.

Server-side test coverage: writeSentinel atomicity, readSentinel
absent + corrupt fall-through, JSON shape pinning for both the
sentinel and ExportChainResult, exportProgressInterval stability.
2026-06-05 15:30:41 -07:00
zeekay 6bd3101d46 docs: gRPC -> ZAP native sweep per LP-200 / LP-186 2026-06-05 15:30:41 -07:00
zeekayandGitHub 95c2574d72 Merge pull request #117 from luxfi/dependabot/go_modules/github.com/luxfi/sys-0.1.0
build(deps): bump github.com/luxfi/sys from 0.0.0-20260110090042-50187ec5ffd8 to 0.1.0
2026-06-04 14:02:33 -07:00
zeekayandGitHub e8c0019e46 Merge pull request #118 from luxfi/dependabot/go_modules/github.com/luxfi/metric-1.5.8
build(deps): bump github.com/luxfi/metric from 1.5.7 to 1.5.8
2026-06-04 14:02:30 -07:00
dependabot[bot]andGitHub f911c060bd build(deps): bump github.com/luxfi/metric from 1.5.7 to 1.5.8
Bumps [github.com/luxfi/metric](https://github.com/luxfi/metric) from 1.5.7 to 1.5.8.
- [Release notes](https://github.com/luxfi/metric/releases)
- [Commits](https://github.com/luxfi/metric/compare/v1.5.7...v1.5.8)

---
updated-dependencies:
- dependency-name: github.com/luxfi/metric
  dependency-version: 1.5.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-06-04 21:00:14 +00:00
dependabot[bot]andGitHub 81c7b7a3db build(deps): bump github.com/luxfi/sys
Bumps [github.com/luxfi/sys](https://github.com/luxfi/sys) from 0.0.0-20260110090042-50187ec5ffd8 to 0.1.0.
- [Release notes](https://github.com/luxfi/sys/releases)
- [Commits](https://github.com/luxfi/sys/commits/v0.1.0)

---
updated-dependencies:
- dependency-name: github.com/luxfi/sys
  dependency-version: 0.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-06-04 20:59:56 +00:00
zeekayandGitHub 937016c060 Merge pull request #116 from luxfi/dependabot/go_modules/golang.org/x/tools-0.45.0
build(deps): bump golang.org/x/tools from 0.43.0 to 0.45.0
2026-06-04 13:57:25 -07:00
zeekayandGitHub 38e72381b5 Merge pull request #119 from luxfi/dependabot/go_modules/github.com/luxfi/consensus-1.25.14
build(deps): bump github.com/luxfi/consensus from 1.25.0 to 1.25.14
2026-06-04 13:57:19 -07:00
zeekayandGitHub 3840c0f2f2 Merge pull request #120 from luxfi/dependabot/go_modules/github.com/deckarep/golang-set/v2-2.9.0
build(deps): bump github.com/deckarep/golang-set/v2 from 2.8.0 to 2.9.0
2026-06-04 13:57:16 -07:00
dependabot[bot]andGitHub e5369929ea build(deps): bump github.com/deckarep/golang-set/v2 from 2.8.0 to 2.9.0
Bumps [github.com/deckarep/golang-set/v2](https://github.com/deckarep/golang-set) from 2.8.0 to 2.9.0.
- [Release notes](https://github.com/deckarep/golang-set/releases)
- [Commits](https://github.com/deckarep/golang-set/compare/v2.8.0...v2.9.0)

---
updated-dependencies:
- dependency-name: github.com/deckarep/golang-set/v2
  dependency-version: 2.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-06-04 13:04:33 +00:00
dependabot[bot]andGitHub 23bc69679c build(deps): bump github.com/luxfi/consensus from 1.25.0 to 1.25.14
Bumps [github.com/luxfi/consensus](https://github.com/luxfi/consensus) from 1.25.0 to 1.25.14.
- [Release notes](https://github.com/luxfi/consensus/releases)
- [Changelog](https://github.com/luxfi/consensus/blob/main/CHANGELOG.md)
- [Commits](https://github.com/luxfi/consensus/compare/v1.25.0...v1.25.14)

---
updated-dependencies:
- dependency-name: github.com/luxfi/consensus
  dependency-version: 1.25.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-06-04 13:04:26 +00:00