Both tests now PASS — no t.Skip, no TODO markers.
TestParseNodeEoA: the original test set values[0..4] under the old
pre-EIP-6800 "5-separate-slots" EoA model (version, balance, nonce,
code-hash, code-size as separate leaf slots). The current encoding
implements the EIP-6800 post-pack model: values[0] is a single
32-byte basic-data slot encoding (version + balance + nonce +
codesize), and values[1] = EmptyCodeHash deterministically. The on-
wire serialization stores only the basic-data slot + commitments;
parseEoAccountNode reconstructs values[1] = EmptyCodeHash and
leaves values[2..255] = nil.
Updated the test to match the new layout:
- Set only values[0] (basic data, 32 bytes) and values[1]
(= EmptyCodeHash).
- Assert values[0] = basic data, values[1] = EmptyCodeHash,
values[2..255] = nil after roundtrip.
- Removed the "fourtyKeyTest at values[2]" old-model artifacts.
TestParseNodeSingleSlot: the original test used values[153]
(idx >= 128), which routes through the c2 branch of
parseSingleSlotNode (c2 = loaded, c1 = Identity). But the test
asserted c2 = Identity and c1 = original — the c1/c2 expectations
were swapped relative to the idx >= 128 branch.
Fixed by using values[100] (idx < 128) so the c1 branch fires,
matching the assertions (c1 = loaded, c2 = Identity). Updated the
loop bound from 153 to 100 in the per-slot nil assertion as well.
Verified: `go test -v -run "TestParseNodeEoA|TestParseNodeSingleSlot"
./verkle/` reports both PASS. The whole verkle package green
(`go test ./verkle/` → ok 48.057s), so verkle's full contribution
to CI coverage is now active without any skipped tests.
TestParseNodeEoA + TestParseNodeSingleSlot have pre-existing
structural bugs:
TestParseNodeEoA - the test sets values[0..4] expecting EoA
detection, but tree.go:1860-1883's EoA
detection requires values[i]==nil for i>=2.
Spec mismatch (EIP-6800 pre-pack vs post-pack
basic-data model) — not a code regression.
TestParseNodeSingleSlot - roundtrip c2 commitment mismatch. After
Serialize → ParseNode the deserialized c2
is non-identity; expected banderwagon.Identity.
Roundtrip-invariant bug, side TBD.
Both marked t.Skip with TODO comments referencing the open issue.
The rest of the verkle test suite passes (`go test ./verkle/` now
reports `ok 48.057s`).
ci.yml: removed the `grep -v '/verkle$'` exclusion from the
coverage step. Verkle's other ~30 tests now contribute to the
60% coverage floor. The two skipped tests don't count toward
the coverage gate (skipped tests don't execute code paths).
Fixing the underlying encoding spec mismatch is a separate
verkle-team task; this commit gets verkle into the CI loop so
regressions in non-encoding code are caught.
The inline ipa/ directory was a vendored copy of go-ipa that
collided with the separate luxfi/crypto/ipa module's import path —
any downstream that pulled both saw "ambiguous import" errors at
the bandersnatch / banderwagon / common/parallel packages.
Removed the inline tree and added `require github.com/luxfi/crypto/ipa
v1.2.4`. The verkle subpackage switches its banderwagon imports from
`luxfi/crypto/banderwagon` (local) to `luxfi/crypto/ipa/banderwagon`
(external) so its Point alias matches the type ipa.CreateMultiProof
and IPAConfig.Commit return. The local lux/crypto/banderwagon
package stays — its MultiExp/Precomp helpers remain available for
callers that want the Element-method shape; it just no longer
shares a struct identity with the verkle types.
Two pre-existing test failures in verkle (TestParseNodeEoA,
TestParseNodeSingleSlot) reproduce both with this change AND on the
pre-change tree — encoding-tag mismatch and projective-coord
hardcoding in the test's expected values. Not blocking; tracked
separately.
Replaces the prior `verkle/verkle.go` re-export shim (`type X =
upstream.X`, `var Fn = upstream.Fn` against `github.com/ethereum/go-verkle`)
with a full source vendor of `github.com/ethereum/go-verkle@v0.2.2` into
`/Users/z/work/lux/crypto/verkle/` under luxfi copyright. Every type and
function now has a concrete Go body in luxfi-owned files; no aliases
remain. Resolves the canonical-audit violation flagged in
CANONICAL_AUDIT.md (commit 9affea3).
Provenance:
Upstream: github.com/ethereum/go-verkle@v0.2.2 (public domain / Unlicense)
Per-file header notes vendor source and Lux Ecosystem License rebadge.
Files (13 source + 10 tests, ~7,900 LOC vendored):
verkle/config.go, config_ipa.go, conversion.go, debug.go, doc.go,
verkle/empty.go, encoding.go, hashednode.go, ipa.go, proof_ipa.go,
verkle/proof_json.go, tree.go, unknown.go (+ matching _test.go)
Surface preserved (all symbols consumed by lux/geth/trie, lux/geth/core/types):
Types: VerkleNode, InternalNode, LeafNode, Empty, Point, Fr,
VerkleProof, StateDiff, NodeResolverFn, IPAConfig, Proof
Const: NodeWidth
Funcs: ParseNode, New, ToDot, GetConfig, MakeVerkleMultiProof,
SerializeProof, HashPointToBytes, FromLEBytes, FromBytes,
DeserializeProof, MergeTrees, BatchNewLeafNode,
PreStateTreeFromProof
Methods: *InternalNode.{Insert,Commit,Hash,GetValuesAtStem,
DeleteAtStem}, IPAConfig.CommitToPoly, ...
go.mod: drop direct require on github.com/ethereum/go-verkle; promote
crate-crypto/go-ipa and davecgh/go-spew to direct (still pulled
through banderwagon primitives — to be swapped to luxfi/crypto/ipa
once the parallel banderwagon vendor lands at lux/crypto/banderwagon).
Tests (GOWORK=off go test ./verkle/ -count=1):
82 PASS, 4 SKIP, 2 FAIL.
TestParseNodeEoA and TestParseNodeSingleSlot fail identically against
upstream go-verkle@v0.2.2 (verified) -- these are pre-existing upstream
test fixtures gone stale; not caused by the vendor.
Consumer compatibility verified by external module replace+build
exercising every consumed symbol: ok.
Outstanding (tracked, not blocking):
- Switch IPA primitives import from `crate-crypto/go-ipa/{banderwagon,
common,ipa}` to `luxfi/crypto/ipa/*` once the banderwagon-vanilla
branch lands. Done in this commit would conflict with the parallel
work-in-progress.
- Two upstream-stale test fixtures (TestParseNodeEoA,
TestParseNodeSingleSlot) to be regenerated against current encoding
in a follow-up.
Branch: verkle-vanilla-2026-04-27