return a different error code for each potential failure step

This commit is contained in:
Guillaume Ballet 2025-09-05 08:26:12 +02:00 committed by Felix Lange
parent ac3f406ead
commit 4273efec1f
2 changed files with 12 additions and 5 deletions

View file

@ -19,7 +19,9 @@
package main package main
import ( import (
"fmt"
"math/big" "math/big"
"os"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/stateless" "github.com/ethereum/go-ethereum/core/stateless"
@ -95,7 +97,8 @@ func getInput() []byte {
encoded, err := rlp.EncodeToBytes(payload) encoded, err := rlp.EncodeToBytes(payload)
if err != nil { if err != nil {
panic(err) fmt.Fprintf(os.Stderr, "failed to encode payload: %v\n", err)
os.Exit(20)
} }
return encoded return encoded
} }

View file

@ -18,6 +18,7 @@ package main
import ( import (
"fmt" "fmt"
"os"
"github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/stateless" "github.com/ethereum/go-ethereum/core/stateless"
@ -32,7 +33,7 @@ type Payload struct {
} }
func main() { func main() {
input := getPayload() input := getInput()
var payload Payload var payload Payload
rlp.DecodeBytes(input, &payload) rlp.DecodeBytes(input, &payload)
@ -41,12 +42,15 @@ func main() {
crossStateRoot, crossReceiptRoot, err := core.ExecuteStateless(chainConfig, vmConfig, payload.Block, payload.Witness) crossStateRoot, crossReceiptRoot, err := core.ExecuteStateless(chainConfig, vmConfig, payload.Block, payload.Witness)
if err != nil { if err != nil {
panic(fmt.Errorf("stateless self-validation failed: %v", err)) fmt.Fprintf(os.Stderr, "stateless self-validation failed: %v\n", err)
os.Exit(10)
} }
if crossStateRoot != payload.Block.Root() { if crossStateRoot != payload.Block.Root() {
panic(fmt.Errorf("stateless self-validation root mismatch (cross: %x local: %x)", crossStateRoot, payload.Block.Root())) fmt.Fprintf(os.Stderr, "stateless self-validation root mismatch (cross: %x local: %x)\n", crossStateRoot, payload.Block.Root())
os.Exit(11)
} }
if crossReceiptRoot != payload.Block.ReceiptHash() { if crossReceiptRoot != payload.Block.ReceiptHash() {
panic(fmt.Errorf("stateless self-validation receipt root mismatch (cross: %x local: %x)", crossReceiptRoot, payload.Block.ReceiptHash())) fmt.Fprintf(os.Stderr, "stateless self-validation receipt root mismatch (cross: %x local: %x)\n", crossReceiptRoot, payload.Block.ReceiptHash())
os.Exit(12)
} }
} }