diff --git a/eth/tracers/internal/tracetest/firehose/generate-prestate/main.go b/eth/tracers/internal/tracetest/firehose/generate-prestate/main.go new file mode 100644 index 0000000000..731cee5928 --- /dev/null +++ b/eth/tracers/internal/tracetest/firehose/generate-prestate/main.go @@ -0,0 +1,257 @@ +package main + +import ( + "bytes" + "context" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "math/big" + "os" + "strings" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" + "golang.org/x/exp/maps" +) + +var configByName = map[string]*params.ChainConfig{ + "mainnet": params.MainnetChainConfig, + "goerli": params.GoerliChainConfig, + "sepolia": params.SepoliaChainConfig, + "holesky": params.HoleskyChainConfig, +} + +func main() { + ensure(len(os.Args) == 3, "Usage: generate-prestate ") + + config, found := configByName[os.Args[1]] + ensure(found, "Unknown network %q, valid networks are %q", os.Args[1], strings.Join(maps.Keys(configByName), ", ")) + + endpoint := os.Getenv("ARCHIVE_ENDPOINT") + ensure(endpoint != "", "ARCHIVE_ENDPOINT environment variable is not set") + + txHash := common.HexToHash(os.Args[2]) + ensure(txHash.Big().Sign() != 0, "Argument %q is not a valid transaction hash", os.Args[1]) + + client, err := rpc.DialOptions(context.Background(), endpoint) + noError(err, "Failed to connect to RPC server") + + log("Fetching transaction %q...", txHash.Hex()) + tx, blockHash, err := transactionByHash(context.Background(), client, txHash) + noError(err, "Failed to get transaction %q by hash", txHash) + + log("Fetching block %q...", txHash.Hex()) + block, err := blockByHash(context.Background(), client, blockHash) + noError(err, "Failed to get block %q by hash", blockHash) + + log("Fetching parent block %q...", txHash.Hex()) + parentBlock, err := blockByHash(context.Background(), client, block.ParentHash()) + noError(err, "Failed to get parent block %q by hash", block.ParentHash()) + + log("Collecting transaction prestate trace...") + var prestateTrace types.GenesisAlloc + err = client.Call(&prestateTrace, "debug_traceTransaction", txHash, map[string]interface{}{ + "tracer": "prestateTracer", + }) + noError(err, "Failed to trace transaction %q with prestateTracer", txHash) + + prestateTest := &PrestateTest{ + // Our genesis block is the parent block + Genesis: parentBlock, + Block: block, + Alloc: prestateTrace, + Config: config, + Tx: tx, + } + + output, err := json.MarshalIndent(prestateTest, "", " ") + noError(err, "Failed to marshal prestate test to JSON") + + fmt.Println(string(output)) +} + +type PrestateTest struct { + Genesis *rpcBlock + Block *rpcBlock + Alloc types.GenesisAlloc + Config *params.ChainConfig + Tx *types.Transaction +} + +func (b *PrestateTest) MarshalJSON() ([]byte, error) { + genesis := b.Genesis.Fields + + for k, v := range genesis { + if v == nil { + delete(genesis, k) + } + } + + delete(genesis, "gasUsed") + delete(genesis, "logsBloom") + delete(genesis, "parentHash") + delete(genesis, "receiptsRoot") + delete(genesis, "sha3Uncles") + delete(genesis, "size") + delete(genesis, "transactions") + delete(genesis, "transactionsRoot") + delete(genesis, "uncles") + + genesis["gasLimit"] = hexToIntegerString(genesis["gasLimit"].(string)) + genesis["number"] = hexToIntegerString(genesis["number"].(string)) + genesis["timestamp"] = hexToIntegerString(genesis["timestamp"].(string)) + genesis["difficulty"] = hexToIntegerString(genesis["difficulty"].(string)) + genesis["totalDifficulty"] = hexToIntegerString(genesis["totalDifficulty"].(string)) + + if found := genesis["baseFeePerGas"]; found != nil { + genesis["baseFeePerGas"] = hexToIntegerString(genesis["baseFeePerGas"].(string)) + } + + marshaledAlloc, err := json.Marshal(b.Alloc) + if err != nil { + return nil, err + } + + var allocOut map[string]any + if err = json.Unmarshal(marshaledAlloc, &allocOut); err != nil { + return nil, err + } + + for _, account := range allocOut { + details := account.(map[string]any) + for k, v := range details { + if k == "nonce" { + details["nonce"] = hexToIntegerString(v.(string)) + } + } + } + + genesis["alloc"] = allocOut + genesis["config"] = b.Config + + context := map[string]any{ + "number": hexToIntegerString(b.Block.Fields["number"].(string)), + "difficulty": hexToIntegerString(b.Block.Fields["difficulty"].(string)), + "timestamp": hexToIntegerString(b.Block.Fields["timestamp"].(string)), + "gasLimit": hexToIntegerString(b.Block.Fields["gasLimit"].(string)), + "miner": b.Block.Fields["miner"], + } + + if found := b.Block.Fields["baseFeePerGas"]; found != nil { + context["baseFeePerGas"] = hexToIntegerString(b.Block.Fields["baseFeePerGas"].(string)) + } + + txBuffer := bytes.NewBuffer(nil) + rlp.Encode(txBuffer, b.Tx) + + out := map[string]any{} + out["genesis"] = genesis + out["context"] = context + out["input"] = "0x" + hex.EncodeToString(txBuffer.Bytes()) + + return json.Marshal(out) +} + +func hexToIntegerString(in string) string { + value := math.HexOrDecimal256{} + noError(value.UnmarshalText([]byte(in)), "Failed to parse hex value %q", in) + + return (*big.Int)(&value).String() +} + +type CallTrace struct { + From string `json:"from"` + Gas string `json:"gas"` + GasUsed string `json:"gasUsed"` + To string `json:"to"` + Input string `json:"input"` + Value string `json:"value"` + Type string `json:"type"` + Output string `json:"output,omitempty"` + + Calls []CallTrace `json:"calls"` +} + +func blockByHash(ctx context.Context, ec *rpc.Client, hash common.Hash) (*rpcBlock, error) { + var out rpcBlock + err := ec.CallContext(ctx, &out.Fields, "eth_getBlockByHash", hash, false) + if err != nil { + return nil, err + } else if out.Fields == nil { + return nil, ethereum.NotFound + } + + return &out, nil +} + +type rpcBlock struct { + Fields map[string]any +} + +func (b *rpcBlock) ParentHash() common.Hash { + return common.HexToHash(b.Fields["parentHash"].(string)) +} + +func transactionByHash(ctx context.Context, ec *rpc.Client, hash common.Hash) (tx *types.Transaction, blockHash common.Hash, err error) { + var json *rpcTransaction + err = ec.CallContext(ctx, &json, "eth_getTransactionByHash", hash) + if err != nil { + return nil, common.Hash{}, err + } else if json == nil { + return nil, common.Hash{}, ethereum.NotFound + } else if _, r, _ := json.tx.RawSignatureValues(); r == nil { + return nil, common.Hash{}, errors.New("server returned transaction without signature") + } + + if json.BlockHash == nil { + return nil, common.Hash{}, errors.New("server returned transaction without block hash") + } + + return json.tx, *json.BlockHash, nil +} + +type rpcTransaction struct { + tx *types.Transaction + txExtraInfo +} + +type txExtraInfo struct { + BlockNumber *string `json:"blockNumber,omitempty"` + BlockHash *common.Hash `json:"blockHash,omitempty"` + From *common.Address `json:"from,omitempty"` +} + +func (tx *rpcTransaction) UnmarshalJSON(msg []byte) error { + if err := json.Unmarshal(msg, &tx.tx); err != nil { + return err + } + return json.Unmarshal(msg, &tx.txExtraInfo) +} + +func log(message string, args ...interface{}) { + fmt.Fprintf(os.Stderr, message+"\n", args...) +} + +func ensure(condition bool, message string, args ...interface{}) { + if !condition { + quit(message, args...) + } +} + +func noError(err error, message string, args ...interface{}) { + if err != nil { + quit(message+": "+err.Error(), args...) + } +} + +func quit(message string, args ...interface{}) { + fmt.Printf(message+"\n", args...) + os.Exit(1) +} diff --git a/eth/tracers/internal/tracetest/firehose/testdata/TestFirehoseChain/block.1.golden.json b/eth/tracers/internal/tracetest/firehose/testdata/TestFirehoseChain/block.1.golden.json index bc2a434442..a640645452 100644 --- a/eth/tracers/internal/tracetest/firehose/testdata/TestFirehoseChain/block.1.golden.json +++ b/eth/tracers/internal/tracetest/firehose/testdata/TestFirehoseChain/block.1.golden.json @@ -1,64 +1,64 @@ { - "hash": "jm7ksQVNlN8dilH7mDRH3C4nqFRZDDrABh+ZQoS+gVA=", - "number": "1", - "size": "541", - "header": { - "parentHash": "hFutUVaUpBa6tLjUTiLPl6jIlKhQIRCrgHiDlA4YXOA=", - "uncleHash": "HcxN6N7HXXqrhbVntszUGtMSRRuUinQT8KFC/UDUk0c=", - "coinbase": "AAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "stateRoot": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "transactionsRoot": "VugfFxvMVab/g0XmksD4bltI4BuZbK3AAWIvteNjtCE=", - "receiptRoot": "VugfFxvMVab/g0XmksD4bltI4BuZbK3AAWIvteNjtCE=", - "logsBloom": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "difficulty": { - "bytes": "Ag==" + "hash": "jm7ksQVNlN8dilH7mDRH3C4nqFRZDDrABh+ZQoS+gVA=", + "number": "1", + "size": "541", + "header": { + "parentHash": "hFutUVaUpBa6tLjUTiLPl6jIlKhQIRCrgHiDlA4YXOA=", + "uncleHash": "HcxN6N7HXXqrhbVntszUGtMSRRuUinQT8KFC/UDUk0c=", + "coinbase": "AAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "stateRoot": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "transactionsRoot": "VugfFxvMVab/g0XmksD4bltI4BuZbK3AAWIvteNjtCE=", + "receiptRoot": "VugfFxvMVab/g0XmksD4bltI4BuZbK3AAWIvteNjtCE=", + "logsBloom": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "difficulty": { + "bytes": "Ag==" }, - "totalDifficulty": { - "bytes": "Aw==" + "totalDifficulty": { + "bytes": "Aw==" }, - "number": "1", - "gasLimit": "1000000", - "timestamp": "1970-01-01T00:00:01Z", - "mixHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "hash": "jm7ksQVNlN8dilH7mDRH3C4nqFRZDDrABh+ZQoS+gVA=", - "baseFeePerGas": { - "bytes": "CA==" + "number": "1", + "gasLimit": "1000000", + "timestamp": "1970-01-01T00:00:01Z", + "mixHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "hash": "jm7ksQVNlN8dilH7mDRH3C4nqFRZDDrABh+ZQoS+gVA=", + "baseFeePerGas": { + "bytes": "CA==" }, - "parentBeaconRoot": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + "parentBeaconRoot": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" }, - "balanceChanges": [ + "balanceChanges": [ { - "address": "AAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "newValue": { - "bytes": "G8FtZ07IAAA=" + "address": "AAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "newValue": { + "bytes": "G8FtZ07IAAA=" }, - "reason": "REASON_REWARD_MINE_BLOCK", - "ordinal": "5" + "reason": "REASON_REWARD_MINE_BLOCK", + "ordinal": "5" } ], - "systemCalls": [ + "systemCalls": [ { - "index": 1, - "callType": "CALL", - "caller": "//////////////////////////4=", - "address": "AA899tcygH7xMZ+3uLuFItC+rAI=", - "gasLimit": "30000000", - "input": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "gasChanges": [ + "index": 1, + "callType": "CALL", + "caller": "//////////////////////////4=", + "address": "AA899tcygH7xMZ+3uLuFItC+rAI=", + "gasLimit": "30000000", + "input": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "gasChanges": [ { - "newValue": "30000000", - "reason": "REASON_CALL_INITIAL_BALANCE", - "ordinal": "2" + "newValue": "30000000", + "reason": "REASON_CALL_INITIAL_BALANCE", + "ordinal": "2" }, { - "oldValue": "30000000", - "reason": "REASON_CALL_LEFT_OVER_RETURNED", - "ordinal": "3" + "oldValue": "30000000", + "reason": "REASON_CALL_LEFT_OVER_RETURNED", + "ordinal": "3" } ], - "beginOrdinal": "1", - "endOrdinal": "4" + "beginOrdinal": "1", + "endOrdinal": "4" } ], - "ver": 4 + "ver": 4 } \ No newline at end of file diff --git a/eth/tracers/internal/tracetest/firehose/testdata/TestFirehosePrestate/keccak256_too_few_memory_bytes_get_padded/block.3727495.golden.json b/eth/tracers/internal/tracetest/firehose/testdata/TestFirehosePrestate/keccak256_too_few_memory_bytes_get_padded/block.3727495.golden.json index d889b925f0..b65d78f086 100644 --- a/eth/tracers/internal/tracetest/firehose/testdata/TestFirehosePrestate/keccak256_too_few_memory_bytes_get_padded/block.3727495.golden.json +++ b/eth/tracers/internal/tracetest/firehose/testdata/TestFirehosePrestate/keccak256_too_few_memory_bytes_get_padded/block.3727495.golden.json @@ -1,167 +1,167 @@ { - "hash": "SKLPDUOjSrOGLDSmQ92rvI79Tx7rbpi+MnMdw1ta0jQ=", - "number": "3727495", - "size": "723", - "header": { - "parentHash": "aYf8zdg87hj7kTMGYReWUn8vvkT0i92fQ04NAsNDcDc=", - "uncleHash": "HcxN6N7HXXqrhbVntszUGtMSRRuUinQT8KFC/UDUk0c=", - "coinbase": "AAAAaRaoe4IzP0JFBGYjsjeUxlw=", - "stateRoot": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "transactionsRoot": "bDCtoar4SKuDMt3K7Ay0vDV8FJj/S9YTAtfuy7yJYL0=", - "receiptRoot": "VugfFxvMVab/g0XmksD4bltI4BuZbK3AAWIvteNjtCE=", - "logsBloom": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "difficulty": { - "bytes": "AA==" + "hash": "SKLPDUOjSrOGLDSmQ92rvI79Tx7rbpi+MnMdw1ta0jQ=", + "number": "3727495", + "size": "723", + "header": { + "parentHash": "aYf8zdg87hj7kTMGYReWUn8vvkT0i92fQ04NAsNDcDc=", + "uncleHash": "HcxN6N7HXXqrhbVntszUGtMSRRuUinQT8KFC/UDUk0c=", + "coinbase": "AAAAaRaoe4IzP0JFBGYjsjeUxlw=", + "stateRoot": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "transactionsRoot": "bDCtoar4SKuDMt3K7Ay0vDV8FJj/S9YTAtfuy7yJYL0=", + "receiptRoot": "VugfFxvMVab/g0XmksD4bltI4BuZbK3AAWIvteNjtCE=", + "logsBloom": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "difficulty": { + "bytes": "AA==" }, - "totalDifficulty": { - "bytes": "PGVtIwKasA==" + "totalDifficulty": { + "bytes": "PGVtIwKasA==" }, - "number": "3727495", - "gasLimit": "30000000", - "timestamp": "2023-06-19T23:23:48Z", - "mixHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "hash": "SKLPDUOjSrOGLDSmQ92rvI79Tx7rbpi+MnMdw1ta0jQ=", - "baseFeePerGas": { - "bytes": "DQ==" + "number": "3727495", + "gasLimit": "30000000", + "timestamp": "2023-06-19T23:23:48Z", + "mixHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "hash": "SKLPDUOjSrOGLDSmQ92rvI79Tx7rbpi+MnMdw1ta0jQ=", + "baseFeePerGas": { + "bytes": "DQ==" }, - "parentBeaconRoot": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + "parentBeaconRoot": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" }, - "transactionTraces": [ + "transactionTraces": [ { - "to": "3Z+V4sEFOnYIm1AXgpuyMwy2rkc=", - "nonce": "5", - "gasPrice": { - "bytes": "AoQ=" + "to": "3Z+V4sEFOnYIm1AXgpuyMwy2rkc=", + "nonce": "5", + "gasPrice": { + "bytes": "AoQ=" }, - "gasLimit": "200000", - "input": "QMEPGQAAAAAAAAAAAAAAAOs9PWFvPkPp7TYe3S0OZE0Y0Xm3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPo=", - "v": "AVRtcg==", - "r": "Xww4NKZlcXSDEHF8P5UnXU9PLqL6aBoOU5VFipWpVaM=", - "s": "BOdJVNNAB7fPBAA48slaL2uQd1vOwb423lDacpucotM=", - "gasUsed": "69865", - "hash": "tF3PNXHZNWA+icLD8DyDTxT8x76iGVd8sDejy7wEQx8=", - "from": "6z09YW8+Q+ntNh7dLQ5kTRjRebc=", - "beginOrdinal": "1", - "endOrdinal": "13", - "status": "SUCCEEDED", - "receipt": { - "cumulativeGasUsed": "69865", - "logsBloom": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAIAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAIAAAAAAAAAAAAIAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAA==", - "logs": [ + "gasLimit": "200000", + "input": "QMEPGQAAAAAAAAAAAAAAAOs9PWFvPkPp7TYe3S0OZE0Y0Xm3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPo=", + "v": "AVRtcg==", + "r": "Xww4NKZlcXSDEHF8P5UnXU9PLqL6aBoOU5VFipWpVaM=", + "s": "BOdJVNNAB7fPBAA48slaL2uQd1vOwb423lDacpucotM=", + "gasUsed": "69865", + "hash": "tF3PNXHZNWA+icLD8DyDTxT8x76iGVd8sDejy7wEQx8=", + "from": "6z09YW8+Q+ntNh7dLQ5kTRjRebc=", + "beginOrdinal": "1", + "endOrdinal": "13", + "status": "SUCCEEDED", + "receipt": { + "cumulativeGasUsed": "69865", + "logsBloom": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAIAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAIAAAAAAAAAAAAIAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAA==", + "logs": [ { - "address": "3Z+V4sEFOnYIm1AXgpuyMwy2rkc=", - "topics": [ + "address": "3Z+V4sEFOnYIm1AXgpuyMwy2rkc=", + "topics": [ "3fJSrRviyJtpwrBo/DeNqpUrp/FjxKEWKPVaTfUjs+8=", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", "AAAAAAAAAAAAAAAA6z09YW8+Q+ntNh7dLQ5kTRjRebc=" ], - "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPo=", - "ordinal": "9" + "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPo=", + "ordinal": "9" } ] }, - "calls": [ + "calls": [ { - "index": 1, - "callType": "CALL", - "caller": "6z09YW8+Q+ntNh7dLQ5kTRjRebc=", - "address": "3Z+V4sEFOnYIm1AXgpuyMwy2rkc=", - "gasLimit": "178428", - "gasConsumed": "48293", - "input": "QMEPGQAAAAAAAAAAAAAAAOs9PWFvPkPp7TYe3S0OZE0Y0Xm3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPo=", - "executedCode": true, - "keccakPreimages": { - "bb65ff7a03b11b79143b011da0de7c67f6d9bb8f57df2381d88d503cdb07b0b6": "000000000000000000000000eb3d3d616f3e43e9ed361edd2d0e644d18d179b70000000000000000000000000000000000000000000000000000000000000000" + "index": 1, + "callType": "CALL", + "caller": "6z09YW8+Q+ntNh7dLQ5kTRjRebc=", + "address": "3Z+V4sEFOnYIm1AXgpuyMwy2rkc=", + "gasLimit": "178428", + "gasConsumed": "48293", + "input": "QMEPGQAAAAAAAAAAAAAAAOs9PWFvPkPp7TYe3S0OZE0Y0Xm3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPo=", + "executedCode": true, + "keccakPreimages": { + "bb65ff7a03b11b79143b011da0de7c67f6d9bb8f57df2381d88d503cdb07b0b6": "000000000000000000000000eb3d3d616f3e43e9ed361edd2d0e644d18d179b70000000000000000000000000000000000000000000000000000000000000000" }, - "storageChanges": [ + "storageChanges": [ { - "address": "3Z+V4sEFOnYIm1AXgpuyMwy2rkc=", - "key": "u2X/egOxG3kUOwEdoN58Z/bZu49X3yOB2I1QPNsHsLY=", - "oldValue": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "newValue": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPo=", - "ordinal": "6" + "address": "3Z+V4sEFOnYIm1AXgpuyMwy2rkc=", + "key": "u2X/egOxG3kUOwEdoN58Z/bZu49X3yOB2I1QPNsHsLY=", + "oldValue": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "newValue": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPo=", + "ordinal": "6" }, { - "address": "3Z+V4sEFOnYIm1AXgpuyMwy2rkc=", - "key": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI=", - "oldValue": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "newValue": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPo=", - "ordinal": "7" + "address": "3Z+V4sEFOnYIm1AXgpuyMwy2rkc=", + "key": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI=", + "oldValue": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "newValue": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPo=", + "ordinal": "7" } ], - "balanceChanges": [ + "balanceChanges": [ { - "address": "6z09YW8+Q+ntNh7dLQ5kTRjRebc=", - "oldValue": { - "bytes": "B5sluWe3fF0=" + "address": "6z09YW8+Q+ntNh7dLQ5kTRjRebc=", + "oldValue": { + "bytes": "B5sluWe3fF0=" }, - "newValue": { - "bytes": "B5sluWAKJ10=" + "newValue": { + "bytes": "B5sluWAKJ10=" }, - "reason": "REASON_GAS_BUY", - "ordinal": "2" + "reason": "REASON_GAS_BUY", + "ordinal": "2" }, { - "address": "6z09YW8+Q+ntNh7dLQ5kTRjRebc=", - "oldValue": { - "bytes": "B5sluWAKJ10=" + "address": "6z09YW8+Q+ntNh7dLQ5kTRjRebc=", + "oldValue": { + "bytes": "B5sluWAKJ10=" }, - "newValue": { - "bytes": "B5sluWUI8jk=" + "newValue": { + "bytes": "B5sluWUI8jk=" }, - "reason": "REASON_GAS_REFUND", - "ordinal": "11" + "reason": "REASON_GAS_REFUND", + "ordinal": "11" }, { - "address": "AAAAaRaoe4IzP0JFBGYjsjeUxlw=", - "oldValue": { - "bytes": "AecopRVH6fvBC6c=" + "address": "AAAAaRaoe4IzP0JFBGYjsjeUxlw=", + "oldValue": { + "bytes": "AecopRVH6fvBC6c=" }, - "newValue": { - "bytes": "AecopRVH6f5hufY=" + "newValue": { + "bytes": "AecopRVH6f5hufY=" }, - "reason": "REASON_REWARD_TRANSACTION_FEE", - "ordinal": "12" + "reason": "REASON_REWARD_TRANSACTION_FEE", + "ordinal": "12" } ], - "nonceChanges": [ + "nonceChanges": [ { - "address": "6z09YW8+Q+ntNh7dLQ5kTRjRebc=", - "oldValue": "5", - "newValue": "6", - "ordinal": "4" + "address": "6z09YW8+Q+ntNh7dLQ5kTRjRebc=", + "oldValue": "5", + "newValue": "6", + "ordinal": "4" } ], - "logs": [ + "logs": [ { - "address": "3Z+V4sEFOnYIm1AXgpuyMwy2rkc=", - "topics": [ + "address": "3Z+V4sEFOnYIm1AXgpuyMwy2rkc=", + "topics": [ "3fJSrRviyJtpwrBo/DeNqpUrp/FjxKEWKPVaTfUjs+8=", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", "AAAAAAAAAAAAAAAA6z09YW8+Q+ntNh7dLQ5kTRjRebc=" ], - "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPo=", - "ordinal": "9" + "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPo=", + "ordinal": "9" } ], - "gasChanges": [ + "gasChanges": [ { - "oldValue": "200000", - "newValue": "178428", - "reason": "REASON_INTRINSIC_GAS", - "ordinal": "3" + "oldValue": "200000", + "newValue": "178428", + "reason": "REASON_INTRINSIC_GAS", + "ordinal": "3" }, { - "oldValue": "131897", - "newValue": "130141", - "reason": "REASON_EVENT_LOG", - "ordinal": "8" + "oldValue": "131897", + "newValue": "130141", + "reason": "REASON_EVENT_LOG", + "ordinal": "8" } ], - "endOrdinal": "10" + "endOrdinal": "10" } ] } ], - "ver": 3 + "ver": 3 } \ No newline at end of file diff --git a/eth/tracers/internal/tracetest/firehose/testdata/TestFirehosePrestate/keccak256_too_few_memory_bytes_get_padded/prestate.json b/eth/tracers/internal/tracetest/firehose/testdata/TestFirehosePrestate/keccak256_too_few_memory_bytes_get_padded/prestate.json index 0725326ef8..7b14aca55b 100644 --- a/eth/tracers/internal/tracetest/firehose/testdata/TestFirehosePrestate/keccak256_too_few_memory_bytes_get_padded/prestate.json +++ b/eth/tracers/internal/tracetest/firehose/testdata/TestFirehosePrestate/keccak256_too_few_memory_bytes_get_padded/prestate.json @@ -1,116 +1,13 @@ { - "genesis": { - "baseFeePerGas": "14", + "context": { + "baseFeePerGas": "13", "difficulty": "0", - "extraData": "0x6769756c696f207761732068657265", "gasLimit": "30000000", - "hash": "0xff41623ef4e84cea4e957676a0b7e5868f1480e343ad533914133c448157764c", - "miner": "0x008b3b2f992c0e14edaa6e2c662bec549caa8df1", - "mixHash": "0xf04431d1d4ccb65f5d1b2e88ec010737ae82d68426b287a7158b9b16aa45a0bc", - "nonce": "0x0000000000000000", - "number": "3727494", - "stateRoot": "0xe3f9e4ff1577f21330eded302784f548f6fed4d4ca7a1f6884dde9ad38743279", - "timestamp": "1687217016", - "totalDifficulty": "17000018015853232", - "withdrawals": [ - { - "index": "0xb3bf91", - "validatorIndex": "0x38b", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x244a5" - }, - { - "index": "0xb3bf92", - "validatorIndex": "0x38c", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x2d66a" - }, - { - "index": "0xb3bf93", - "validatorIndex": "0x38d", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x2d66a" - }, - { - "index": "0xb3bf94", - "validatorIndex": "0x38e", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x2d66a" - }, - { - "index": "0xb3bf95", - "validatorIndex": "0x38f", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x2d66a" - }, - { - "index": "0xb3bf96", - "validatorIndex": "0x390", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x2d66a" - }, - { - "index": "0xb3bf97", - "validatorIndex": "0x391", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x244a5" - }, - { - "index": "0xb3bf98", - "validatorIndex": "0x392", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x2d66a" - }, - { - "index": "0xb3bf99", - "validatorIndex": "0x393", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x25b2b" - }, - { - "index": "0xb3bf9a", - "validatorIndex": "0x394", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x244a5" - }, - { - "index": "0xb3bf9b", - "validatorIndex": "0x395", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x2d66a" - }, - { - "index": "0xb3bf9c", - "validatorIndex": "0x396", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x244a5" - }, - { - "index": "0xb3bf9d", - "validatorIndex": "0x397", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x244a5" - }, - { - "index": "0xb3bf9e", - "validatorIndex": "0x398", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x2d66a" - }, - { - "index": "0xb3bf9f", - "validatorIndex": "0x399", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x2d66a" - }, - { - "index": "0xb3bfa0", - "validatorIndex": "0x39a", - "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", - "amount": "0x2ecf0" - } - ], - "withdrawalsRoot": "0xceabf2dc1561db0f29da25b6282082e5353c2f594942cfdcdccfeb176542411c", + "miner": "0x0000006916a87b82333f4245046623b23794c65c", + "number": "3727495", + "timestamp": "1687217028" + }, + "genesis": { "alloc": { "0x0000006916a87b82333f4245046623b23794c65c": { "balance": "0x1e728a51547e9fbc10ba7", @@ -131,44 +28,138 @@ "nonce": "5" } }, + "baseFeePerGas": "14", "config": { + "berlinBlock": 0, + "byzantiumBlock": 0, + "cancunTime": 1706655072, "chainId": 11155111, - "homesteadBlock": 0, + "constantinopleBlock": 0, "daoForkSupport": true, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, + "ethash": {}, + "homesteadBlock": 0, "istanbulBlock": 0, - "muirGlacierBlock": 0, - "berlinBlock": 0, "londonBlock": 0, "mergeNetsplitBlock": 1735371, + "muirGlacierBlock": 0, + "petersburgBlock": 0, "shanghaiTime": 1677557088, - "cancunTime": 1706655072, "terminalTotalDifficulty": 17000000000000000, - "terminalTotalDifficultyPassed": true, - "ethash": {} - } - }, - "context": { - "number": "3727495", + "terminalTotalDifficultyPassed": true + }, "difficulty": "0", - "timestamp": "1687217028", + "extraData": "0x6769756c696f207761732068657265", "gasLimit": "30000000", - "miner": "0x0000006916a87b82333f4245046623b23794c65c", - "baseFeePerGas": "13" + "hash": "0xff41623ef4e84cea4e957676a0b7e5868f1480e343ad533914133c448157764c", + "miner": "0x008b3b2f992c0e14edaa6e2c662bec549caa8df1", + "mixHash": "0xf04431d1d4ccb65f5d1b2e88ec010737ae82d68426b287a7158b9b16aa45a0bc", + "nonce": "0x0000000000000000", + "number": "3727494", + "stateRoot": "0xe3f9e4ff1577f21330eded302784f548f6fed4d4ca7a1f6884dde9ad38743279", + "timestamp": "1687217016", + "totalDifficulty": "17000018015853232", + "withdrawals": [ + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x244a5", + "index": "0xb3bf91", + "validatorIndex": "0x38b" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x2d66a", + "index": "0xb3bf92", + "validatorIndex": "0x38c" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x2d66a", + "index": "0xb3bf93", + "validatorIndex": "0x38d" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x2d66a", + "index": "0xb3bf94", + "validatorIndex": "0x38e" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x2d66a", + "index": "0xb3bf95", + "validatorIndex": "0x38f" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x2d66a", + "index": "0xb3bf96", + "validatorIndex": "0x390" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x244a5", + "index": "0xb3bf97", + "validatorIndex": "0x391" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x2d66a", + "index": "0xb3bf98", + "validatorIndex": "0x392" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x25b2b", + "index": "0xb3bf99", + "validatorIndex": "0x393" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x244a5", + "index": "0xb3bf9a", + "validatorIndex": "0x394" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x2d66a", + "index": "0xb3bf9b", + "validatorIndex": "0x395" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x244a5", + "index": "0xb3bf9c", + "validatorIndex": "0x396" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x244a5", + "index": "0xb3bf9d", + "validatorIndex": "0x397" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x2d66a", + "index": "0xb3bf9e", + "validatorIndex": "0x398" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x2d66a", + "index": "0xb3bf9f", + "validatorIndex": "0x399" + }, + { + "address": "0xe276bc378a527a8792b353cdca5b5e53263dfb9e", + "amount": "0x2ecf0", + "index": "0xb3bfa0", + "validatorIndex": "0x39a" + } + ], + "withdrawalsRoot": "0xceabf2dc1561db0f29da25b6282082e5353c2f594942cfdcdccfeb176542411c" }, - "input": "0xf8ab0582028483030d4094dd9f95e2c1053a76089b5017829bb2330cb6ae4780b84440c10f19000000000000000000000000eb3d3d616f3e43e9ed361edd2d0e644d18d179b700000000000000000000000000000000000000000000000000000000000000fa8401546d72a05f0c3834a66571748310717c3f95275d4f4f2ea2fa681a0e5395458a95a955a3a004e74954d34007b7cf040038f2c95a2f6b90775bcec1be36de50da729b9ca2d3", - "result": { - "from": "0xeb3d3d616f3e43e9ed361edd2d0e644d18d179b7", - "gas": "0x30d40", - "gasUsed": "0x110e9", - "to": "0xdd9f95e2c1053a76089b5017829bb2330cb6ae47", - "input": "0x40c10f19000000000000000000000000eb3d3d616f3e43e9ed361edd2d0e644d18d179b700000000000000000000000000000000000000000000000000000000000000fa", - "value": "0x0", - "type": "CALL" - } + "input": "0xf8ab0582028483030d4094dd9f95e2c1053a76089b5017829bb2330cb6ae4780b84440c10f19000000000000000000000000eb3d3d616f3e43e9ed361edd2d0e644d18d179b700000000000000000000000000000000000000000000000000000000000000fa8401546d72a05f0c3834a66571748310717c3f95275d4f4f2ea2fa681a0e5395458a95a955a3a004e74954d34007b7cf040038f2c95a2f6b90775bcec1be36de50da729b9ca2d3" }