Skip to content

fix: reject standalone TreeLookup node at eval to match the reference interpreter#893

Open
mwaddip wants to merge 1 commit into
ergoplatform:developfrom
mwaddip:fix/tree-lookup-eval-reject
Open

fix: reject standalone TreeLookup node at eval to match the reference interpreter#893
mwaddip wants to merge 1 commit into
ergoplatform:developfrom
mwaddip:fix/tree-lookup-eval-reject

Conversation

@mwaddip

@mwaddip mwaddip commented Jun 7, 2026

Copy link
Copy Markdown

The standalone TreeLookup node (opcode AvlTreeGet) has no eval override in sigma-state — its costKind is notSupportedError, so the default Value.eval raises ("Should be overriden"). The ErgoScript compiler emits an AvlTree.get MethodCall, never this node, so mainnet never reaches it; but sigma-rust evaluated it directly via the AVL verifier, accepting a hand-crafted tree the reference interpreter rejects — a consensus split on crafted blocks (the node still serializes/deserializes fine; only eval diverged).

This makes eval error to match the oracle; parsing and serialization are unchanged.

Found via SANTA conformance testing against the JVM oracle.

… interpreter

The standalone `TreeLookup` node (opcode `AvlTreeGet`) has no eval override in
sigma-state: its `costKind` is `notSupportedError`, so the default `Value.eval`
raises ("Should be overriden"). The ErgoScript compiler emits an `AvlTree.get`
MethodCall rather than this node, so mainnet never reaches it — but sigma-rust
evaluated it directly via the AVL verifier, accepting a crafted tree that the
reference interpreter rejects. That is a consensus split on hand-crafted blocks
(the node serializes/deserializes fine; only eval diverges). Make eval error to
match the oracle; parsing and serialization are unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant