mirror of
https://github.com/luxfi/chains.git
synced 2026-09-24 00:26:00 +00:00
cevm's Go entry is gpu_execute_block (go_bridge.h, ABI 6); the gpu_execute_block_v4 and gpu_free_result_v2 this package called are gone from the library, so the native build did not link. The entry answers ok=0 for any block it does not run — any batch with code, and any refusal on balance, nonce, price, block gas limit, revision or hashes — and that block is the caller's. ExecuteBlock returns ErrDeclined for it, with no result, and the executor declines the block to the Go EVM: (nil, nil), counted. A decline is never an error, so CEVM_STRICT and ErrGPUEVMRequired are gone; the state processor fell through on that error anyway. Nothing wider than the 64-bit wire reaches cevm. A gas price or fee cap above 2^64-1 crossed as 0; it, a value, a base fee or a chain id that does not fit now declines the block, as does a tx the wire drops part of: an access list, a blob or set-code tx, a tip above its fee cap. Snapshot rows carry what the header asks for: keccak256 of nothing and the empty trie root for an account that does not exist — the StateDB answers zero, which cevm reads as saying nothing and declines — the real storage root otherwise, and a row for the coinbase. cevm_cgo.go checks the four C structs' sizes at compile time, so a header that grows a field cannot have it cross as zero unnoticed. The call into cevm is a field on the Executor, so the tests show a declined block going to the Go EVM and a value of 2^64 never reaching cevm without the library. Co-authored-by: Hanzo Dev <[email protected]>