ethereum/go-ethereum · error
unknown node: %+v
Error message
unknown node: %+v
What it means
Error "unknown node: %+v" thrown in ethereum/go-ethereum.
Source
Thrown at trie/sync.go:604
}
if exists {
s.membatch.delNode(owner, append(inner, key[:i]...))
log.Debug("Detected dangling node", "owner", owner, "path", append(inner, key[:i]...))
}
}
lookupGauge.Inc(int64(len(key) - 1))
}
case *fullNode:
for i := 0; i < 17; i++ {
if node.Children[i] != nil {
children = append(children, childNode{
node: node.Children[i],
path: append(slices.Clone(req.path), byte(i)),
})
}
}
default:
panic(fmt.Sprintf("unknown node: %+v", node))
}
// Iterate over the children, and request all unknown ones
var (
missing = make(chan *nodeRequest, len(children))
pending sync.WaitGroup
batchMu sync.Mutex
)
for _, child := range children {
// Notify any external watcher of a new key/value node
if req.callback != nil {
if node, ok := (child.node).(valueNode); ok {
var paths [][]byte
if len(child.path) == 2*common.HashLength {
paths = append(paths, hexToKeybytes(child.path))
} else if len(child.path) == 4*common.HashLength {
paths = append(paths, hexToKeybytes(child.path[:2*common.HashLength]))
paths = append(paths, hexToKeybytes(child.path[2*common.HashLength:]))
}View on GitHub (pinned to 6bb0588ad8)
Solutions
- An unknown node type was delivered to the sync scheduler — indicates corrupted node data or an internal bug. Re-sync the state; if reproducible with clean data, report it as a bug.
Example fix
// No user fix: defensive panic over internal node kinds. // Resync state if the underlying node data is corrupt.
When it happens
Trigger: trie.Sync children-expansion receiving a node that is neither a fullNode, shortNode, hashNode, nor valueNode.
Common situations: Corrupted trie nodes served during state/snap sync.
AI-assisted analysis of ethereum/go-ethereum@6bb0588ad8 (2026-08-15).
Data as JSON: /api/errors/a3dca5f75fe35164.
Report an issue: GitHub.