diff --git a/cmd/abidump/main.go b/cmd/abidump/main.go
deleted file mode 100644
index ae1ac64139..0000000000
--- a/cmd/abidump/main.go
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "encoding/hex"
- "flag"
- "fmt"
- "os"
- "strings"
-
- "github.com/ethereum/go-ethereum/signer/core/apitypes"
- "github.com/ethereum/go-ethereum/signer/fourbyte"
-)
-
-func init() {
- flag.Usage = func() {
- fmt.Fprintln(os.Stderr, "Usage:", os.Args[0], "")
- flag.PrintDefaults()
- fmt.Fprintln(os.Stderr, `
-Parses the given ABI data and tries to interpret it from the fourbyte database.`)
- }
-}
-
-func parse(data []byte) {
- db, err := fourbyte.New()
- if err != nil {
- die(err)
- }
- messages := apitypes.ValidationMessages{}
- db.ValidateCallData(nil, data, &messages)
- for _, m := range messages.Messages {
- fmt.Printf("%v: %v\n", m.Typ, m.Message)
- }
-}
-
-// Example
-// ./abidump a9059cbb000000000000000000000000ea0e2dc7d65a50e77fc7e84bff3fd2a9e781ff5c0000000000000000000000000000000000000000000000015af1d78b58c40000
-func main() {
- flag.Parse()
-
- switch {
- case flag.NArg() == 1:
- hexdata := flag.Arg(0)
- data, err := hex.DecodeString(strings.TrimPrefix(hexdata, "0x"))
- if err != nil {
- die(err)
- }
- parse(data)
- default:
- fmt.Fprintln(os.Stderr, "Error: one argument needed")
- flag.Usage()
- os.Exit(2)
- }
-}
-
-func die(args ...interface{}) {
- fmt.Fprintln(os.Stderr, args...)
- os.Exit(1)
-}
diff --git a/cmd/abigen/main.go b/cmd/abigen/main.go
deleted file mode 100644
index 0149dec527..0000000000
--- a/cmd/abigen/main.go
+++ /dev/null
@@ -1,241 +0,0 @@
-// Copyright 2016 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "encoding/json"
- "fmt"
- "io"
- "os"
- "regexp"
- "strings"
-
- "github.com/ethereum/go-ethereum/accounts/abi/bind"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common/compiler"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
- "github.com/urfave/cli/v2"
-)
-
-var (
- // Flags needed by abigen
- abiFlag = &cli.StringFlag{
- Name: "abi",
- Usage: "Path to the Ethereum contract ABI json to bind, - for STDIN",
- }
- binFlag = &cli.StringFlag{
- Name: "bin",
- Usage: "Path to the Ethereum contract bytecode (generate deploy method)",
- }
- typeFlag = &cli.StringFlag{
- Name: "type",
- Usage: "Struct name for the binding (default = package name)",
- }
- jsonFlag = &cli.StringFlag{
- Name: "combined-json",
- Usage: "Path to the combined-json file generated by compiler, - for STDIN",
- }
- excFlag = &cli.StringFlag{
- Name: "exc",
- Usage: "Comma separated types to exclude from binding",
- }
- pkgFlag = &cli.StringFlag{
- Name: "pkg",
- Usage: "Package name to generate the binding into",
- }
- outFlag = &cli.StringFlag{
- Name: "out",
- Usage: "Output file for the generated binding (default = stdout)",
- }
- langFlag = &cli.StringFlag{
- Name: "lang",
- Usage: "Destination language for the bindings (go)",
- Value: "go",
- }
- aliasFlag = &cli.StringFlag{
- Name: "alias",
- Usage: "Comma separated aliases for function and event renaming, e.g. original1=alias1, original2=alias2",
- }
-)
-
-var app = flags.NewApp("Ethereum ABI wrapper code generator")
-
-func init() {
- app.Name = "abigen"
- app.Flags = []cli.Flag{
- abiFlag,
- binFlag,
- typeFlag,
- jsonFlag,
- excFlag,
- pkgFlag,
- outFlag,
- langFlag,
- aliasFlag,
- }
- app.Action = abigen
-}
-
-func abigen(c *cli.Context) error {
- utils.CheckExclusive(c, abiFlag, jsonFlag) // Only one source can be selected.
-
- if c.String(pkgFlag.Name) == "" {
- utils.Fatalf("No destination package specified (--pkg)")
- }
- var lang bind.Lang
- switch c.String(langFlag.Name) {
- case "go":
- lang = bind.LangGo
- default:
- utils.Fatalf("Unsupported destination language \"%s\" (--lang)", c.String(langFlag.Name))
- }
- // If the entire solidity code was specified, build and bind based on that
- var (
- abis []string
- bins []string
- types []string
- sigs []map[string]string
- libs = make(map[string]string)
- aliases = make(map[string]string)
- )
- if c.String(abiFlag.Name) != "" {
- // Load up the ABI, optional bytecode and type name from the parameters
- var (
- abi []byte
- err error
- )
- input := c.String(abiFlag.Name)
- if input == "-" {
- abi, err = io.ReadAll(os.Stdin)
- } else {
- abi, err = os.ReadFile(input)
- }
- if err != nil {
- utils.Fatalf("Failed to read input ABI: %v", err)
- }
- abis = append(abis, string(abi))
-
- var bin []byte
- if binFile := c.String(binFlag.Name); binFile != "" {
- if bin, err = os.ReadFile(binFile); err != nil {
- utils.Fatalf("Failed to read input bytecode: %v", err)
- }
- if strings.Contains(string(bin), "//") {
- utils.Fatalf("Contract has additional library references, please use other mode(e.g. --combined-json) to catch library infos")
- }
- }
- bins = append(bins, string(bin))
-
- kind := c.String(typeFlag.Name)
- if kind == "" {
- kind = c.String(pkgFlag.Name)
- }
- types = append(types, kind)
- } else {
- // Generate the list of types to exclude from binding
- var exclude *nameFilter
- if c.IsSet(excFlag.Name) {
- var err error
- if exclude, err = newNameFilter(strings.Split(c.String(excFlag.Name), ",")...); err != nil {
- utils.Fatalf("Failed to parse excludes: %v", err)
- }
- }
- var contracts map[string]*compiler.Contract
-
- if c.IsSet(jsonFlag.Name) {
- var (
- input = c.String(jsonFlag.Name)
- jsonOutput []byte
- err error
- )
- if input == "-" {
- jsonOutput, err = io.ReadAll(os.Stdin)
- } else {
- jsonOutput, err = os.ReadFile(input)
- }
- if err != nil {
- utils.Fatalf("Failed to read combined-json: %v", err)
- }
- contracts, err = compiler.ParseCombinedJSON(jsonOutput, "", "", "", "")
- if err != nil {
- utils.Fatalf("Failed to read contract information from json output: %v", err)
- }
- }
- // Gather all non-excluded contract for binding
- for name, contract := range contracts {
- // fully qualified name is of the form :
- nameParts := strings.Split(name, ":")
- typeName := nameParts[len(nameParts)-1]
- if exclude != nil && exclude.Matches(name) {
- fmt.Fprintf(os.Stderr, "excluding: %v\n", name)
- continue
- }
- abi, err := json.Marshal(contract.Info.AbiDefinition) // Flatten the compiler parse
- if err != nil {
- utils.Fatalf("Failed to parse ABIs from compiler output: %v", err)
- }
- abis = append(abis, string(abi))
- bins = append(bins, contract.Code)
- sigs = append(sigs, contract.Hashes)
- types = append(types, typeName)
-
- // Derive the library placeholder which is a 34 character prefix of the
- // hex encoding of the keccak256 hash of the fully qualified library name.
- // Note that the fully qualified library name is the path of its source
- // file and the library name separated by ":".
- libPattern := crypto.Keccak256Hash([]byte(name)).String()[2:36] // the first 2 chars are 0x
- libs[libPattern] = typeName
- }
- }
- // Extract all aliases from the flags
- if c.IsSet(aliasFlag.Name) {
- // We support multi-versions for aliasing
- // e.g.
- // foo=bar,foo2=bar2
- // foo:bar,foo2:bar2
- re := regexp.MustCompile(`(?:(\w+)[:=](\w+))`)
- submatches := re.FindAllStringSubmatch(c.String(aliasFlag.Name), -1)
- for _, match := range submatches {
- aliases[match[1]] = match[2]
- }
- }
- // Generate the contract binding
- code, err := bind.Bind(types, abis, bins, sigs, c.String(pkgFlag.Name), lang, libs, aliases)
- if err != nil {
- utils.Fatalf("Failed to generate ABI binding: %v", err)
- }
- // Either flush it out to a file or display on the standard output
- if !c.IsSet(outFlag.Name) {
- fmt.Printf("%s\n", code)
- return nil
- }
- if err := os.WriteFile(c.String(outFlag.Name), []byte(code), 0600); err != nil {
- utils.Fatalf("Failed to write ABI binding: %v", err)
- }
- return nil
-}
-
-func main() {
- log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelInfo, true)))
-
- if err := app.Run(os.Args); err != nil {
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
- }
-}
diff --git a/cmd/abigen/namefilter.go b/cmd/abigen/namefilter.go
deleted file mode 100644
index eea5c643c4..0000000000
--- a/cmd/abigen/namefilter.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package main
-
-import (
- "fmt"
- "strings"
-)
-
-type nameFilter struct {
- fulls map[string]bool // path/to/contract.sol:Type
- files map[string]bool // path/to/contract.sol:*
- types map[string]bool // *:Type
-}
-
-func newNameFilter(patterns ...string) (*nameFilter, error) {
- f := &nameFilter{
- fulls: make(map[string]bool),
- files: make(map[string]bool),
- types: make(map[string]bool),
- }
- for _, pattern := range patterns {
- if err := f.add(pattern); err != nil {
- return nil, err
- }
- }
- return f, nil
-}
-
-func (f *nameFilter) add(pattern string) error {
- ft := strings.Split(pattern, ":")
- if len(ft) != 2 {
- // filenames and types must not include ':' symbol
- return fmt.Errorf("invalid pattern: %s", pattern)
- }
-
- file, typ := ft[0], ft[1]
- if file == "*" {
- f.types[typ] = true
- return nil
- } else if typ == "*" {
- f.files[file] = true
- return nil
- }
- f.fulls[pattern] = true
- return nil
-}
-
-func (f *nameFilter) Matches(name string) bool {
- ft := strings.Split(name, ":")
- if len(ft) != 2 {
- // If contract names are always of the fully-qualified form
- // :, then this case will never happen.
- return false
- }
-
- file, typ := ft[0], ft[1]
- // full paths > file paths > types
- return f.fulls[name] || f.files[file] || f.types[typ]
-}
diff --git a/cmd/abigen/namefilter_test.go b/cmd/abigen/namefilter_test.go
deleted file mode 100644
index ccee712018..0000000000
--- a/cmd/abigen/namefilter_test.go
+++ /dev/null
@@ -1,39 +0,0 @@
-package main
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-)
-
-func TestNameFilter(t *testing.T) {
- t.Parallel()
- _, err := newNameFilter("Foo")
- require.Error(t, err)
- _, err = newNameFilter("too/many:colons:Foo")
- require.Error(t, err)
-
- f, err := newNameFilter("a/path:A", "*:B", "c/path:*")
- require.NoError(t, err)
-
- for _, tt := range []struct {
- name string
- match bool
- }{
- {"a/path:A", true},
- {"unknown/path:A", false},
- {"a/path:X", false},
- {"unknown/path:X", false},
- {"any/path:B", true},
- {"c/path:X", true},
- {"c/path:foo:B", false},
- } {
- match := f.Matches(tt.name)
- if tt.match {
- assert.True(t, match, "expected match")
- } else {
- assert.False(t, match, "expected no match")
- }
- }
-}
diff --git a/cmd/bootnode/main.go b/cmd/bootnode/main.go
deleted file mode 100644
index 350b85df1e..0000000000
--- a/cmd/bootnode/main.go
+++ /dev/null
@@ -1,209 +0,0 @@
-// Copyright 2015 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-// bootnode runs a bootstrap node for the Ethereum Discovery Protocol.
-package main
-
-import (
- "crypto/ecdsa"
- "flag"
- "fmt"
- "net"
- "os"
- "time"
-
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/discover"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/nat"
- "github.com/ethereum/go-ethereum/p2p/netutil"
-)
-
-func main() {
- var (
- listenAddr = flag.String("addr", ":30301", "listen address")
- genKey = flag.String("genkey", "", "generate a node key")
- writeAddr = flag.Bool("writeaddress", false, "write out the node's public key and quit")
- nodeKeyFile = flag.String("nodekey", "", "private key filename")
- nodeKeyHex = flag.String("nodekeyhex", "", "private key as hex (for testing)")
- natdesc = flag.String("nat", "none", "port mapping mechanism (any|none|upnp|pmp|pmp:|extip:)")
- netrestrict = flag.String("netrestrict", "", "restrict network communication to the given IP networks (CIDR masks)")
- runv5 = flag.Bool("v5", false, "run a v5 topic discovery bootnode")
- verbosity = flag.Int("verbosity", 3, "log verbosity (0-5)")
- vmodule = flag.String("vmodule", "", "log verbosity pattern")
-
- nodeKey *ecdsa.PrivateKey
- err error
- )
- flag.Parse()
-
- glogger := log.NewGlogHandler(log.NewTerminalHandler(os.Stderr, false))
- slogVerbosity := log.FromLegacyLevel(*verbosity)
- glogger.Verbosity(slogVerbosity)
- glogger.Vmodule(*vmodule)
- log.SetDefault(log.NewLogger(glogger))
-
- natm, err := nat.Parse(*natdesc)
- if err != nil {
- utils.Fatalf("-nat: %v", err)
- }
- switch {
- case *genKey != "":
- nodeKey, err = crypto.GenerateKey()
- if err != nil {
- utils.Fatalf("could not generate key: %v", err)
- }
- if err = crypto.SaveECDSA(*genKey, nodeKey); err != nil {
- utils.Fatalf("%v", err)
- }
- if !*writeAddr {
- return
- }
- case *nodeKeyFile == "" && *nodeKeyHex == "":
- utils.Fatalf("Use -nodekey or -nodekeyhex to specify a private key")
- case *nodeKeyFile != "" && *nodeKeyHex != "":
- utils.Fatalf("Options -nodekey and -nodekeyhex are mutually exclusive")
- case *nodeKeyFile != "":
- if nodeKey, err = crypto.LoadECDSA(*nodeKeyFile); err != nil {
- utils.Fatalf("-nodekey: %v", err)
- }
- case *nodeKeyHex != "":
- if nodeKey, err = crypto.HexToECDSA(*nodeKeyHex); err != nil {
- utils.Fatalf("-nodekeyhex: %v", err)
- }
- }
-
- if *writeAddr {
- fmt.Printf("%x\n", crypto.FromECDSAPub(&nodeKey.PublicKey)[1:])
- os.Exit(0)
- }
-
- var restrictList *netutil.Netlist
- if *netrestrict != "" {
- restrictList, err = netutil.ParseNetlist(*netrestrict)
- if err != nil {
- utils.Fatalf("-netrestrict: %v", err)
- }
- }
-
- addr, err := net.ResolveUDPAddr("udp", *listenAddr)
- if err != nil {
- utils.Fatalf("-ResolveUDPAddr: %v", err)
- }
- conn, err := net.ListenUDP("udp", addr)
- if err != nil {
- utils.Fatalf("-ListenUDP: %v", err)
- }
- defer conn.Close()
-
- db, _ := enode.OpenDB("")
- ln := enode.NewLocalNode(db, nodeKey)
-
- listenerAddr := conn.LocalAddr().(*net.UDPAddr)
- if natm != nil && !listenerAddr.IP.IsLoopback() {
- natAddr := doPortMapping(natm, ln, listenerAddr)
- if natAddr != nil {
- listenerAddr = natAddr
- }
- }
-
- printNotice(&nodeKey.PublicKey, *listenerAddr)
- cfg := discover.Config{
- PrivateKey: nodeKey,
- NetRestrict: restrictList,
- }
- if *runv5 {
- if _, err := discover.ListenV5(conn, ln, cfg); err != nil {
- utils.Fatalf("%v", err)
- }
- } else {
- if _, err := discover.ListenUDP(conn, ln, cfg); err != nil {
- utils.Fatalf("%v", err)
- }
- }
-
- select {}
-}
-
-func printNotice(nodeKey *ecdsa.PublicKey, addr net.UDPAddr) {
- if addr.IP.IsUnspecified() {
- addr.IP = net.IP{127, 0, 0, 1}
- }
- n := enode.NewV4(nodeKey, addr.IP, 0, addr.Port)
- fmt.Println(n.URLv4())
- fmt.Println("Note: you're using cmd/bootnode, a developer tool.")
- fmt.Println("We recommend using a regular node as bootstrap node for production deployments.")
-}
-
-func doPortMapping(natm nat.Interface, ln *enode.LocalNode, addr *net.UDPAddr) *net.UDPAddr {
- const (
- protocol = "udp"
- name = "ethereum discovery"
- )
- newLogger := func(external int, internal int) log.Logger {
- return log.New("proto", protocol, "extport", external, "intport", internal, "interface", natm)
- }
-
- var (
- intport = addr.Port
- extaddr = &net.UDPAddr{IP: addr.IP, Port: addr.Port}
- mapTimeout = nat.DefaultMapTimeout
- log = newLogger(addr.Port, intport)
- )
- addMapping := func() {
- // Get the external address.
- var err error
- extaddr.IP, err = natm.ExternalIP()
- if err != nil {
- log.Debug("Couldn't get external IP", "err", err)
- return
- }
- // Create the mapping.
- p, err := natm.AddMapping(protocol, extaddr.Port, intport, name, mapTimeout)
- if err != nil {
- log.Debug("Couldn't add port mapping", "err", err)
- return
- }
- if p != uint16(extaddr.Port) {
- extaddr.Port = int(p)
- log = newLogger(extaddr.Port, intport)
- log.Info("NAT mapped alternative port")
- } else {
- log.Info("NAT mapped port")
- }
- // Update IP/port information of the local node.
- ln.SetStaticIP(extaddr.IP)
- ln.SetFallbackUDP(extaddr.Port)
- }
-
- // Perform mapping once, synchronously.
- log.Info("Attempting port mapping")
- addMapping()
-
- // Refresh the mapping periodically.
- go func() {
- refresh := time.NewTimer(mapTimeout)
- defer refresh.Stop()
- for range refresh.C {
- addMapping()
- refresh.Reset(mapTimeout)
- }
- }()
-
- return extaddr
-}
diff --git a/cmd/clef/README.md b/cmd/clef/README.md
deleted file mode 100644
index 3a43db8c95..0000000000
--- a/cmd/clef/README.md
+++ /dev/null
@@ -1,922 +0,0 @@
-# Clef
-
-Clef can be used to sign transactions and data and is meant as a(n eventual) replacement for Geth's account management. This allows DApps to not depend on Geth's account management. When a DApp wants to sign data (or a transaction), it can send the content to Clef, which will then provide the user with context and asks for permission to sign the content. If the users grants the signing request, Clef will send the signature back to the DApp.
-
-This setup allows a DApp to connect to a remote Ethereum node and send transactions that are locally signed. This can help in situations when a DApp is connected to an untrusted remote Ethereum node, because a local one is not available, not synchronized with the chain, or is a node that has no built-in (or limited) account management.
-
-Clef can run as a daemon on the same machine, off a usb-stick like [USB armory](https://inversepath.com/usbarmory), or even a separate VM in a [QubesOS](https://www.qubes-os.org/) type setup.
-
-Check out the
-
-* [CLI tutorial](tutorial.md) for some concrete examples on how Clef works.
-* [Setup docs](docs/setup.md) for information on how to configure Clef on QubesOS or USB Armory.
-* [Data types](datatypes.md) for details on the communication messages between Clef and an external UI.
-
-## Command line flags
-
-Clef accepts the following command line options:
-
-```
-COMMANDS:
- init Initialize the signer, generate secret storage
- attest Attest that a js-file is to be used
- setpw Store a credential for a keystore file
- delpw Remove a credential for a keystore file
- gendoc Generate documentation about json-rpc format
- help Shows a list of commands or help for one command
-
-GLOBAL OPTIONS:
- --loglevel value log level to emit to the screen (default: 4)
- --keystore value Directory for the keystore (default: "$HOME/.ethereum/keystore")
- --configdir value Directory for Clef configuration (default: "$HOME/.clef")
- --chainid value Chain id to use for signing (1=mainnet, 5=Goerli) (default: 1)
- --lightkdf Reduce key-derivation RAM & CPU usage at some expense of KDF strength
- --nousb Disables monitoring for and managing USB hardware wallets
- --pcscdpath value Path to the smartcard daemon (pcscd) socket file (default: "/run/pcscd/pcscd.comm")
- --http.addr value HTTP-RPC server listening interface (default: "localhost")
- --http.vhosts value Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. (default: "localhost")
- --ipcdisable Disable the IPC-RPC server
- --ipcpath Filename for IPC socket/pipe within the datadir (explicit paths escape it)
- --http Enable the HTTP-RPC server
- --http.port value HTTP-RPC server listening port (default: 8550)
- --signersecret value A file containing the (encrypted) master seed to encrypt Clef data, e.g. keystore credentials and ruleset hash
- --4bytedb-custom value File used for writing new 4byte-identifiers submitted via API (default: "./4byte-custom.json")
- --auditlog value File used to emit audit logs. Set to "" to disable (default: "audit.log")
- --rules value Path to the rule file to auto-authorize requests with
- --stdio-ui Use STDIN/STDOUT as a channel for an external UI. This means that an STDIN/STDOUT is used for RPC-communication with a e.g. a graphical user interface, and can be used when Clef is started by an external process.
- --stdio-ui-test Mechanism to test interface between Clef and UI. Requires 'stdio-ui'.
- --advanced If enabled, issues warnings instead of rejections for suspicious requests. Default off
- --suppress-bootwarn If set, does not show the warning during boot
- --help, -h show help
- --version, -v print the version
-```
-
-Example:
-
-```
-$ clef -keystore /my/keystore -chainid 4
-```
-
-## Security model
-
-The security model of Clef is as follows:
-
-* One critical component (the Clef binary / daemon) is responsible for handling cryptographic operations: signing, private keys, encryption/decryption of keystore files.
-* Clef has a well-defined 'external' API.
-* The 'external' API is considered UNTRUSTED.
-* Clef also communicates with whatever process that invoked the binary, via stdin/stdout.
- * This channel is considered 'trusted'. Over this channel, approvals and passwords are communicated.
-
-The general flow for signing a transaction using e.g. Geth is as follows:
-
-
-In this case, `geth` would be started with `--signer http://localhost:8550` and would relay requests to `eth.sendTransaction`.
-
-## TODOs
-
-Some snags and todos
-
-* [ ] Clef should take a startup param "--no-change", for UIs that do not contain the capability to perform changes to things, only approve/deny. Such a UI should be able to start the signer in a more secure mode by telling it that it only wants approve/deny capabilities.
-* [x] It would be nice if Clef could collect new 4byte-id:s/method selectors, and have a secondary database for those (`4byte_custom.json`). Users could then (optionally) submit their collections for inclusion upstream.
-* [ ] It should be possible to configure Clef to check if an account is indeed known to it, before passing on to the UI. The reason it currently does not, is that it would make it possible to enumerate accounts if it immediately returned "unknown account" (side channel attack).
-* [x] It should be possible to configure Clef to auto-allow listing (certain) accounts, instead of asking every time.
-* [x] Done Upon startup, Clef should spit out some info to the caller (particularly important when executed in `stdio-ui`-mode), invoking methods with the following info:
- * [x] Version info about the signer
- * [x] Address of API (HTTP/IPC)
- * [ ] List of known accounts
-* [ ] Have a default timeout on signing operations, so that if the user has not answered within e.g. 60 seconds, the request is rejected.
-* [ ] `account_signRawTransaction`
-* [ ] `account_bulkSignTransactions([] transactions)` should
- * only exist if enabled via config/flag
- * only allow non-data-sending transactions
- * all txs must use the same `from`-account
- * let the user confirm, showing
- * the total amount
- * the number of unique recipients
-
-* Geth todos
- - The signer should pass the `Origin` header as call-info to the UI. As of right now, the way that info about the request is put together is a bit of a hack into the HTTP server. This could probably be greatly improved.
- - Relay: Geth should be started in `geth --signer localhost:8550`.
- - Currently, the Geth APIs use `common.Address` in the arguments to transaction submission (e.g `to` field). This type is 20 `bytes`, and is incapable of carrying checksum information. The signer uses `common.MixedcaseAddress`, which retains the original input.
- - The Geth API should switch to use the same type, and relay `to`-account verbatim to the external API.
-* [x] Storage
- * [x] An encrypted key-value storage should be implemented.
- * See [rules.md](rules.md) for more info about this.
-* Another potential thing to introduce is pairing.
- * To prevent spurious requests which users just accept, implement a way to "pair" the caller with the signer (external API).
- * Thus Geth/cpp would cryptographically handshake and afterwards the caller would be allowed to make signing requests.
- * This feature would make the addition of rules less dangerous.
-
-* Wallets / accounts. Add API methods for wallets.
-
-## Communication
-
-### External API
-
-Clef listens to HTTP requests on `http.addr`:`http.port` (or to IPC on `ipcpath`), with the same JSON-RPC standard as Geth. The messages are expected to be [JSON-RPC 2.0 standard](https://www.jsonrpc.org/specification).
-
-Some of these calls can require user interaction. Clients must be aware that responses may be delayed significantly or may never be received if a user decides to ignore the confirmation request.
-
-The External API is **untrusted**: it does not accept credentials, nor does it expect that requests have any authority.
-
-### Internal UI API
-
-Clef has one native console-based UI, for operation without any standalone tools. However, there is also an API to communicate with an external UI. To enable that UI, the signer needs to be executed with the `--stdio-ui` option, which allocates `stdin` / `stdout` for the UI API.
-
-An example (insecure) proof-of-concept of has been implemented in `pythonsigner.py`.
-
-The model is as follows:
-
-* The user starts the UI app (`pythonsigner.py`).
-* The UI app starts `clef` with `--stdio-ui`, and listens to the
-process output for confirmation-requests.
-* `clef` opens the external HTTP API.
-* When the `signer` receives requests, it sends a JSON-RPC request via `stdout`.
-* The UI app prompts the user accordingly, and responds to `clef`.
-* `clef` signs (or not), and responds to the original request.
-
-## External API
-
-See the [external API changelog](extapi_changelog.md) for information about changes to this API.
-
-### Encoding
-- number: positive integers that are hex encoded
-- data: hex encoded data
-- string: ASCII string
-
-All hex encoded values must be prefixed with `0x`.
-
-### account_new
-
-#### Create new password protected account
-
-The signer will generate a new private key, encrypt it according to [web3 keystore spec](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition) and store it in the keystore directory.
-The client is responsible for creating a backup of the keystore. If the keystore is lost there is no method of retrieving lost accounts.
-
-#### Arguments
-
-None
-
-#### Result
- - address [string]: account address that is derived from the generated key
-
-#### Sample call
-```json
-{
- "id": 0,
- "jsonrpc": "2.0",
- "method": "account_new",
- "params": []
-}
-```
-Response
-```json
-{
- "id": 0,
- "jsonrpc": "2.0",
- "result": "0xbea9183f8f4f03d427f6bcea17388bdff1cab133"
-}
-```
-
-### account_list
-
-#### List available accounts
- List all accounts that this signer currently manages
-
-#### Arguments
-
-None
-
-#### Result
- - array with account records:
- - account.address [string]: account address that is derived from the generated key
-
-#### Sample call
-```json
-{
- "id": 1,
- "jsonrpc": "2.0",
- "method": "account_list"
-}
-```
-Response
-```json
-{
- "id": 1,
- "jsonrpc": "2.0",
- "result": [
- "0xafb2f771f58513609765698f65d3f2f0224a956f",
- "0xbea9183f8f4f03d427f6bcea17388bdff1cab133"
- ]
-}
-```
-
-### account_signTransaction
-
-#### Sign transactions
- Signs a transaction and responds with the signed transaction in RLP-encoded and JSON forms.
-
-#### Arguments
- 1. transaction object:
- - `from` [address]: account to send the transaction from
- - `to` [address]: receiver account. If omitted or `0x`, will cause contract creation.
- - `gas` [number]: maximum amount of gas to burn
- - `gasPrice` [number]: gas price
- - `value` [number:optional]: amount of Wei to send with the transaction
- - `data` [data:optional]: input data
- - `nonce` [number]: account nonce
- 1. method signature [string:optional]
- - The method signature, if present, is to aid decoding the calldata. Should consist of `methodname(paramtype,...)`, e.g. `transfer(uint256,address)`. The signer may use this data to parse the supplied calldata, and show the user. The data, however, is considered totally untrusted, and reliability is not expected.
-
-
-#### Result
- - raw [data]: signed transaction in RLP encoded form
- - tx [json]: signed transaction in JSON form
-
-#### Sample call
-```json
-{
- "id": 2,
- "jsonrpc": "2.0",
- "method": "account_signTransaction",
- "params": [
- {
- "from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db",
- "gas": "0x55555",
- "gasPrice": "0x1234",
- "input": "0xabcd",
- "nonce": "0x0",
- "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
- "value": "0x1234"
- }
- ]
-}
-```
-Response
-
-```json
-{
- "jsonrpc": "2.0",
- "id": 2,
- "result": {
- "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
- "tx": {
- "nonce": "0x0",
- "gasPrice": "0x1234",
- "gas": "0x55555",
- "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
- "value": "0x1234",
- "input": "0xabcd",
- "v": "0x26",
- "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e",
- "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
- "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"
- }
- }
-}
-```
-#### Sample call with ABI-data
-
-
-```json
-{
- "id": 67,
- "jsonrpc": "2.0",
- "method": "account_signTransaction",
- "params": [
- {
- "from": "0x694267f14675d7e1b9494fd8d72fefe1755710fa",
- "gas": "0x333",
- "gasPrice": "0x1",
- "nonce": "0x0",
- "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
- "value": "0x0",
- "data": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"
- },
- "safeSend(address)"
- ]
-}
-```
-Response
-
-```json
-{
- "jsonrpc": "2.0",
- "id": 67,
- "result": {
- "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
- "tx": {
- "nonce": "0x0",
- "gasPrice": "0x1",
- "gas": "0x333",
- "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
- "value": "0x0",
- "input": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012",
- "v": "0x26",
- "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e",
- "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
- "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"
- }
- }
-}
-```
-
-Bash example:
-```bash
-> curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_signTransaction","params":[{"from":"0x694267f14675d7e1b9494fd8d72fefe1755710fa","gas":"0x333","gasPrice":"0x1","nonce":"0x0","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0", "value":"0x0", "data":"0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"},"safeSend(address)"],"id":67}' http://localhost:8550/
-
-{"jsonrpc":"2.0","id":67,"result":{"raw":"0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663","tx":{"nonce":"0x0","gasPrice":"0x1","gas":"0x333","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0","value":"0x0","input":"0x4401a6e40000000000000000000000000000000000000000000000000000000000000012","v":"0x26","r":"0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e","s":"0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663","hash":"0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"}}}
-```
-
-### account_signData
-
-#### Sign data
- Signs a chunk of data and returns the calculated signature.
-
-#### Arguments
- - content type [string]: type of signed data
- - `text/validator`: hex data with custom validator defined in a contract
- - `application/clique`: [clique](https://github.com/ethereum/EIPs/issues/225) headers
- - `text/plain`: simple hex data validated by `account_ecRecover`
- - account [address]: account to sign with
- - data [object]: data to sign
-
-#### Result
- - calculated signature [data]
-
-#### Sample call
-```json
-{
- "id": 3,
- "jsonrpc": "2.0",
- "method": "account_signData",
- "params": [
- "data/plain",
- "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db",
- "0xaabbccdd"
- ]
-}
-```
-Response
-
-```json
-{
- "id": 3,
- "jsonrpc": "2.0",
- "result": "0x5b6693f153b48ec1c706ba4169960386dbaa6903e249cc79a8e6ddc434451d417e1e57327872c7f538beeb323c300afa9999a3d4a5de6caf3be0d5ef832b67ef1c"
-}
-```
-
-### account_signTypedData
-
-#### Sign data
- Signs a chunk of structured data conformant to [EIP-712](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md) and returns the calculated signature.
-
-#### Arguments
- - account [address]: account to sign with
- - data [object]: data to sign
-
-#### Result
- - calculated signature [data]
-
-#### Sample call
-```json
-{
- "id": 68,
- "jsonrpc": "2.0",
- "method": "account_signTypedData",
- "params": [
- "0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826",
- {
- "types": {
- "EIP712Domain": [
- {
- "name": "name",
- "type": "string"
- },
- {
- "name": "version",
- "type": "string"
- },
- {
- "name": "chainId",
- "type": "uint256"
- },
- {
- "name": "verifyingContract",
- "type": "address"
- }
- ],
- "Person": [
- {
- "name": "name",
- "type": "string"
- },
- {
- "name": "wallet",
- "type": "address"
- }
- ],
- "Mail": [
- {
- "name": "from",
- "type": "Person"
- },
- {
- "name": "to",
- "type": "Person"
- },
- {
- "name": "contents",
- "type": "string"
- }
- ]
- },
- "primaryType": "Mail",
- "domain": {
- "name": "Ether Mail",
- "version": "1",
- "chainId": 1,
- "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
- },
- "message": {
- "from": {
- "name": "Cow",
- "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"
- },
- "to": {
- "name": "Bob",
- "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"
- },
- "contents": "Hello, Bob!"
- }
- }
- ]
-}
-```
-Response
-
-```json
-{
- "id": 1,
- "jsonrpc": "2.0",
- "result": "0x4355c47d63924e8a72e509b65029052eb6c299d53a04e167c5775fd466751c9d07299936d304c153f6443dfa05f40ff007d72911b6f72307f996231605b915621c"
-}
-```
-
-### account_ecRecover
-
-#### Recover the signing address
-
-Derive the address from the account that was used to sign data with content type `text/plain` and the signature.
-
-#### Arguments
- - data [data]: data that was signed
- - signature [data]: the signature to verify
-
-#### Result
- - derived account [address]
-
-#### Sample call
-```json
-{
- "id": 4,
- "jsonrpc": "2.0",
- "method": "account_ecRecover",
- "params": [
- "0xaabbccdd",
- "0x5b6693f153b48ec1c706ba4169960386dbaa6903e249cc79a8e6ddc434451d417e1e57327872c7f538beeb323c300afa9999a3d4a5de6caf3be0d5ef832b67ef1c"
- ]
-}
-```
-Response
-
-```json
-{
- "id": 4,
- "jsonrpc": "2.0",
- "result": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db"
-}
-```
-
-### account_version
-
-#### Get external API version
-
-Get the version of the external API used by Clef.
-
-#### Arguments
-
-None
-
-#### Result
-
-* external API version [string]
-
-#### Sample call
-```json
-{
- "id": 0,
- "jsonrpc": "2.0",
- "method": "account_version",
- "params": []
-}
-```
-
-Response
-```json
-{
- "id": 0,
- "jsonrpc": "2.0",
- "result": "6.0.0"
-}
-```
-
-## UI API
-
-These methods needs to be implemented by a UI listener.
-
-By starting the signer with the switch `--stdio-ui-test`, the signer will invoke all known methods, and expect the UI to respond with
-denials. This can be used during development to ensure that the API is (at least somewhat) correctly implemented.
-See `pythonsigner`, which can be invoked via `python3 pythonsigner.py test` to perform the 'denial-handshake-test'.
-
-All methods in this API use object-based parameters, so that there can be no mixup of parameters: each piece of data is accessed by key.
-
-See the [ui API changelog](intapi_changelog.md) for information about changes to this API.
-
-OBS! A slight deviation from `json` standard is in place: every request and response should be confined to a single line.
-Whereas the `json` specification allows for linebreaks, linebreaks __should not__ be used in this communication channel, to make
-things simpler for both parties.
-
-### ApproveTx / `ui_approveTx`
-
-Invoked when there's a transaction for approval.
-
-
-#### Sample call
-
-Here's a method invocation:
-```bash
-
-curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_signTransaction","params":[{"from":"0x694267f14675d7e1b9494fd8d72fefe1755710fa","gas":"0x333","gasPrice":"0x1","nonce":"0x0","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0", "value":"0x0", "data":"0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"},"safeSend(address)"],"id":67}' http://localhost:8550/
-```
-Results in the following invocation on the UI:
-```json
-
-{
- "jsonrpc": "2.0",
- "id": 1,
- "method": "ui_approveTx",
- "params": [
- {
- "transaction": {
- "from": "0x0x694267f14675d7e1b9494fd8d72fefe1755710fa",
- "to": "0x0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
- "gas": "0x333",
- "gasPrice": "0x1",
- "value": "0x0",
- "nonce": "0x0",
- "data": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012",
- "input": null
- },
- "call_info": [
- {
- "type": "WARNING",
- "message": "Invalid checksum on to-address"
- },
- {
- "type": "Info",
- "message": "safeSend(address: 0x0000000000000000000000000000000000000012)"
- }
- ],
- "meta": {
- "remote": "127.0.0.1:48486",
- "local": "localhost:8550",
- "scheme": "HTTP/1.1"
- }
- }
- ]
-}
-
-```
-
-The same method invocation, but with invalid data:
-```bash
-
-curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_signTransaction","params":[{"from":"0x694267f14675d7e1b9494fd8d72fefe1755710fa","gas":"0x333","gasPrice":"0x1","nonce":"0x0","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0", "value":"0x0", "data":"0x4401a6e40000000000000002000000000000000000000000000000000000000000000012"},"safeSend(address)"],"id":67}' http://localhost:8550/
-```
-
-```json
-
-{
- "jsonrpc": "2.0",
- "id": 1,
- "method": "ui_approveTx",
- "params": [
- {
- "transaction": {
- "from": "0x0x694267f14675d7e1b9494fd8d72fefe1755710fa",
- "to": "0x0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
- "gas": "0x333",
- "gasPrice": "0x1",
- "value": "0x0",
- "nonce": "0x0",
- "data": "0x4401a6e40000000000000002000000000000000000000000000000000000000000000012",
- "input": null
- },
- "call_info": [
- {
- "type": "WARNING",
- "message": "Invalid checksum on to-address"
- },
- {
- "type": "WARNING",
- "message": "Transaction data did not match ABI-interface: WARNING: Supplied data is stuffed with extra data. \nWant 0000000000000002000000000000000000000000000000000000000000000012\nHave 0000000000000000000000000000000000000000000000000000000000000012\nfor method safeSend(address)"
- }
- ],
- "meta": {
- "remote": "127.0.0.1:48492",
- "local": "localhost:8550",
- "scheme": "HTTP/1.1"
- }
- }
- ]
-}
-
-
-```
-
-One which has missing `to`, but with no `data`:
-
-
-```json
-
-{
- "jsonrpc": "2.0",
- "id": 3,
- "method": "ui_approveTx",
- "params": [
- {
- "transaction": {
- "from": "",
- "to": null,
- "gas": "0x0",
- "gasPrice": "0x0",
- "value": "0x0",
- "nonce": "0x0",
- "data": null,
- "input": null
- },
- "call_info": [
- {
- "type": "CRITICAL",
- "message": "Tx will create contract with empty code!"
- }
- ],
- "meta": {
- "remote": "signer binary",
- "local": "main",
- "scheme": "in-proc"
- }
- }
- ]
-}
-```
-
-### ApproveListing / `ui_approveListing`
-
-Invoked when a request for account listing has been made.
-
-#### Sample call
-
-```json
-
-{
- "jsonrpc": "2.0",
- "id": 5,
- "method": "ui_approveListing",
- "params": [
- {
- "accounts": [
- {
- "url": "keystore:///home/bazonk/.ethereum/keystore/UTC--2017-11-20T14-44-54.089682944Z--123409812340981234098123409812deadbeef42",
- "address": "0x123409812340981234098123409812deadbeef42"
- },
- {
- "url": "keystore:///home/bazonk/.ethereum/keystore/UTC--2017-11-23T21-59-03.199240693Z--cafebabedeadbeef34098123409812deadbeef42",
- "address": "0xcafebabedeadbeef34098123409812deadbeef42"
- }
- ],
- "meta": {
- "remote": "signer binary",
- "local": "main",
- "scheme": "in-proc"
- }
- }
- ]
-}
-
-```
-
-
-### ApproveSignData / `ui_approveSignData`
-
-#### Sample call
-
-```json
-{
- "jsonrpc": "2.0",
- "id": 4,
- "method": "ui_approveSignData",
- "params": [
- {
- "address": "0x123409812340981234098123409812deadbeef42",
- "raw_data": "0x01020304",
- "messages": [
- {
- "name": "message",
- "value": "\u0019Ethereum Signed Message:\n4\u0001\u0002\u0003\u0004",
- "type": "text/plain"
- }
- ],
- "hash": "0x7e3a4e7a9d1744bc5c675c25e1234ca8ed9162bd17f78b9085e48047c15ac310",
- "meta": {
- "remote": "signer binary",
- "local": "main",
- "scheme": "in-proc"
- }
- }
- ]
-}
-```
-
-### ApproveNewAccount / `ui_approveNewAccount`
-
-Invoked when a request for creating a new account has been made.
-
-#### Sample call
-
-```json
-{
- "jsonrpc": "2.0",
- "id": 4,
- "method": "ui_approveNewAccount",
- "params": [
- {
- "meta": {
- "remote": "signer binary",
- "local": "main",
- "scheme": "in-proc"
- }
- }
- ]
-}
-```
-
-### ShowInfo / `ui_showInfo`
-
-The UI should show the info (a single message) to the user. Does not expect response.
-
-#### Sample call
-
-```json
-{
- "jsonrpc": "2.0",
- "id": 9,
- "method": "ui_showInfo",
- "params": [
- "Tests completed"
- ]
-}
-
-```
-
-### ShowError / `ui_showError`
-
-The UI should show the error (a single message) to the user. Does not expect response.
-
-```json
-
-{
- "jsonrpc": "2.0",
- "id": 2,
- "method": "ui_showError",
- "params": [
- "Something bad happened!"
- ]
-}
-
-```
-
-### OnApprovedTx / `ui_onApprovedTx`
-
-`OnApprovedTx` is called when a transaction has been approved and signed. The call contains the return value that will be sent to the external caller. The return value from this method is ignored - the reason for having this callback is to allow the ruleset to keep track of approved transactions.
-
-When implementing rate-limited rules, this callback should be used.
-
-TLDR; Use this method to keep track of signed transactions, instead of using the data in `ApproveTx`.
-
-Example call:
-```json
-
-{
- "jsonrpc": "2.0",
- "id": 1,
- "method": "ui_onApprovedTx",
- "params": [
- {
- "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
- "tx": {
- "nonce": "0x0",
- "gasPrice": "0x1",
- "gas": "0x333",
- "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
- "value": "0x0",
- "input": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012",
- "v": "0x26",
- "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e",
- "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
- "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"
- }
- }
- ]
-}
-```
-
-### OnSignerStartup / `ui_onSignerStartup`
-
-This method provides the UI with information about what API version the signer uses (both internal and external) as well as build-info and external API,
-in k/v-form.
-
-Example call:
-```json
-
-{
- "jsonrpc": "2.0",
- "id": 1,
- "method": "ui_onSignerStartup",
- "params": [
- {
- "info": {
- "extapi_http": "http://localhost:8550",
- "extapi_ipc": null,
- "extapi_version": "2.0.0",
- "intapi_version": "1.2.0"
- }
- }
- ]
-}
-
-```
-
-### OnInputRequired / `ui_onInputRequired`
-
-Invoked when Clef requires user input (e.g. a password).
-
-Example call:
-```json
-
-{
- "jsonrpc": "2.0",
- "id": 1,
- "method": "ui_onInputRequired",
- "params": [
- {
- "title": "Account password",
- "prompt": "Please enter the password for account 0x694267f14675d7e1b9494fd8d72fefe1755710fa",
- "isPassword": true
- }
- ]
-}
-```
-
-
-### Rules for UI apis
-
-A UI should conform to the following rules.
-
-* A UI MUST NOT load any external resources that were not embedded/part of the UI package.
- * For example, not load icons, stylesheets from the internet
- * Not load files from the filesystem, unless they reside in the same local directory (e.g. config files)
-* A Graphical UI MUST show the blocky-identicon for ethereum addresses.
-* A UI MUST warn display appropriate warning if the destination-account is formatted with invalid checksum.
-* A UI MUST NOT open any ports or services
- * The signer opens the public port
-* A UI SHOULD verify the permissions on the signer binary, and refuse to execute or warn if permissions allow non-user write.
-* A UI SHOULD inform the user about the `SHA256` or `MD5` hash of the binary being executed
-* A UI SHOULD NOT maintain a secondary storage of data, e.g. list of accounts
- * The signer provides accounts
-* A UI SHOULD, to the best extent possible, use static linking / bundling, so that required libraries are bundled
-along with the UI.
-
-
-### UI Implementations
-
-There are a couple of implementation for a UI. We'll try to keep this list up to date.
-
-| Name | Repo | UI type| No external resources| Blocky support| Verifies permissions | Hash information | No secondary storage | Statically linked| Can modify parameters|
-| ---- | ---- | -------| ---- | ---- | ---- |---- | ---- | ---- | ---- |
-| QtSigner| https://github.com/holiman/qtsigner/| Python3/QT-based| :+1:| :+1:| :+1:| :+1:| :+1:| :x: | :+1: (partially)|
-| GtkSigner| https://github.com/holiman/gtksigner| Python3/GTK-based| :+1:| :x:| :x:| :+1:| :+1:| :x: | :x: |
-| Frame | https://github.com/floating/frame/commits/go-signer| Electron-based| :x:| :x:| :x:| :x:| ?| :x: | :x: |
-| Clef UI| https://github.com/ethereum/clef-ui| Golang/QT-based| :+1:| :+1:| :x:| :+1:| :+1:| :x: | :+1: (approve tx only)|
diff --git a/cmd/clef/consolecmd_test.go b/cmd/clef/consolecmd_test.go
deleted file mode 100644
index c8b37f5b92..0000000000
--- a/cmd/clef/consolecmd_test.go
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright 2022 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "fmt"
- "os"
- "path/filepath"
- "strings"
- "testing"
-)
-
-// TestImportRaw tests clef --importraw
-func TestImportRaw(t *testing.T) {
- t.Parallel()
- keyPath := filepath.Join(os.TempDir(), fmt.Sprintf("%v-tempkey.test", t.Name()))
- os.WriteFile(keyPath, []byte("0102030405060708090a0102030405060708090a0102030405060708090a0102"), 0777)
- t.Cleanup(func() { os.Remove(keyPath) })
-
- t.Run("happy-path", func(t *testing.T) {
- t.Parallel()
- // Run clef importraw
- clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "importraw", keyPath)
- clef.input("myverylongpassword").input("myverylongpassword")
- if out := string(clef.Output()); !strings.Contains(out,
- "Key imported:\n Address 0x9160DC9105f7De5dC5E7f3d97ef11DA47269BdA6") {
- t.Logf("Output\n%v", out)
- t.Error("Failure")
- }
- })
- // tests clef --importraw with mismatched passwords.
- t.Run("pw-mismatch", func(t *testing.T) {
- t.Parallel()
- // Run clef importraw
- clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "importraw", keyPath)
- clef.input("myverylongpassword1").input("myverylongpassword2").WaitExit()
- if have, want := clef.StderrText(), "Passwords do not match\n"; have != want {
- t.Errorf("have %q, want %q", have, want)
- }
- })
- // tests clef --importraw with a too short password.
- t.Run("short-pw", func(t *testing.T) {
- t.Parallel()
- // Run clef importraw
- clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "importraw", keyPath)
- clef.input("shorty").input("shorty").WaitExit()
- if have, want := clef.StderrText(),
- "password requirements not met: password too short (<10 characters)\n"; have != want {
- t.Errorf("have %q, want %q", have, want)
- }
- })
-}
-
-// TestListAccounts tests clef --list-accounts
-func TestListAccounts(t *testing.T) {
- t.Parallel()
- keyPath := filepath.Join(os.TempDir(), fmt.Sprintf("%v-tempkey.test", t.Name()))
- os.WriteFile(keyPath, []byte("0102030405060708090a0102030405060708090a0102030405060708090a0102"), 0777)
- t.Cleanup(func() { os.Remove(keyPath) })
-
- t.Run("no-accounts", func(t *testing.T) {
- t.Parallel()
- clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "list-accounts")
- if out := string(clef.Output()); !strings.Contains(out, "The keystore is empty.") {
- t.Logf("Output\n%v", out)
- t.Error("Failure")
- }
- })
- t.Run("one-account", func(t *testing.T) {
- t.Parallel()
- // First, we need to import
- clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "importraw", keyPath)
- clef.input("myverylongpassword").input("myverylongpassword").WaitExit()
- // Secondly, do a listing, using the same datadir
- clef = runWithKeystore(t, clef.Datadir, "--suppress-bootwarn", "--lightkdf", "list-accounts")
- if out := string(clef.Output()); !strings.Contains(out, "0x9160DC9105f7De5dC5E7f3d97ef11DA47269BdA6 (keystore:") {
- t.Logf("Output\n%v", out)
- t.Error("Failure")
- }
- })
-}
-
-// TestListWallets tests clef --list-wallets
-func TestListWallets(t *testing.T) {
- t.Parallel()
- keyPath := filepath.Join(os.TempDir(), fmt.Sprintf("%v-tempkey.test", t.Name()))
- os.WriteFile(keyPath, []byte("0102030405060708090a0102030405060708090a0102030405060708090a0102"), 0777)
- t.Cleanup(func() { os.Remove(keyPath) })
-
- t.Run("no-accounts", func(t *testing.T) {
- t.Parallel()
- clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "list-wallets")
- if out := string(clef.Output()); !strings.Contains(out, "There are no wallets.") {
- t.Logf("Output\n%v", out)
- t.Error("Failure")
- }
- })
- t.Run("one-account", func(t *testing.T) {
- t.Parallel()
- // First, we need to import
- clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "importraw", keyPath)
- clef.input("myverylongpassword").input("myverylongpassword").WaitExit()
- // Secondly, do a listing, using the same datadir
- clef = runWithKeystore(t, clef.Datadir, "--suppress-bootwarn", "--lightkdf", "list-wallets")
- if out := string(clef.Output()); !strings.Contains(out, "Account 0: 0x9160DC9105f7De5dC5E7f3d97ef11DA47269BdA6") {
- t.Logf("Output\n%v", out)
- t.Error("Failure")
- }
- })
-}
diff --git a/cmd/clef/datatypes.md b/cmd/clef/datatypes.md
deleted file mode 100644
index dd8cda5846..0000000000
--- a/cmd/clef/datatypes.md
+++ /dev/null
@@ -1,224 +0,0 @@
-## UI Client interface
-
-These data types are defined in the channel between clef and the UI
-### SignDataRequest
-
-SignDataRequest contains information about a pending request to sign some data. The data to be signed can be of various types, defined by content-type. Clef has done most of the work in canonicalizing and making sense of the data, and it's up to the UI to present the user with the contents of the `message`
-
-Example:
-```json
-{
- "content_type": "text/plain",
- "address": "0xDEADbEeF000000000000000000000000DeaDbeEf",
- "raw_data": "GUV0aGVyZXVtIFNpZ25lZCBNZXNzYWdlOgoxMWhlbGxvIHdvcmxk",
- "messages": [
- {
- "name": "message",
- "value": "\u0019Ethereum Signed Message:\n11hello world",
- "type": "text/plain"
- }
- ],
- "hash": "0xd9eba16ed0ecae432b71fe008c98cc872bb4cc214d3220a36f365326cf807d68",
- "meta": {
- "remote": "localhost:9999",
- "local": "localhost:8545",
- "scheme": "http",
- "User-Agent": "Firefox 3.2",
- "Origin": "www.malicious.ru"
- }
-}
-```
-### SignDataResponse - approve
-
-Response to SignDataRequest
-
-Example:
-```json
-{
- "approved": true
-}
-```
-### SignDataResponse - deny
-
-Response to SignDataRequest
-
-Example:
-```json
-{
- "approved": false
-}
-```
-### SignTxRequest
-
-SignTxRequest contains information about a pending request to sign a transaction. Aside from the transaction itself, there is also a `call_info`-struct. That struct contains messages of various types, that the user should be informed of.
-
-As in any request, it's important to consider that the `meta` info also contains untrusted data.
-
-The `transaction` (on input into clef) can have either `data` or `input` -- if both are set, they must be identical, otherwise an error is generated. However, Clef will always use `data` when passing this struct on (if Clef does otherwise, please file a ticket)
-
-Example:
-```json
-{
- "transaction": {
- "from": "0xDEADbEeF000000000000000000000000DeaDbeEf",
- "to": null,
- "gas": "0x3e8",
- "gasPrice": "0x5",
- "value": "0x6",
- "nonce": "0x1",
- "data": "0x01020304"
- },
- "call_info": [
- {
- "type": "Warning",
- "message": "Something looks odd, show this message as a warning"
- },
- {
- "type": "Info",
- "message": "User should see this aswell"
- }
- ],
- "meta": {
- "remote": "localhost:9999",
- "local": "localhost:8545",
- "scheme": "http",
- "User-Agent": "Firefox 3.2",
- "Origin": "www.malicious.ru"
- }
-}
-```
-### SignTxResponse - approve
-
-Response to request to sign a transaction. This response needs to contain the `transaction`, because the UI is free to make modifications to the transaction.
-
-Example:
-```json
-{
- "transaction": {
- "from": "0xDEADbEeF000000000000000000000000DeaDbeEf",
- "to": null,
- "gas": "0x3e8",
- "gasPrice": "0x5",
- "value": "0x6",
- "nonce": "0x4",
- "data": "0x04030201"
- },
- "approved": true
-}
-```
-### SignTxResponse - deny
-
-Response to SignTxRequest. When denying a request, there's no need to provide the transaction in return
-
-Example:
-```json
-{
- "transaction": {
- "from": "0x",
- "to": null,
- "gas": "0x0",
- "gasPrice": "0x0",
- "value": "0x0",
- "nonce": "0x0",
- "data": null
- },
- "approved": false
-}
-```
-### OnApproved - SignTransactionResult
-
-SignTransactionResult is used in the call `clef` -> `OnApprovedTx(result)`
-
-This occurs _after_ successful completion of the entire signing procedure, but right before the signed transaction is passed to the external caller. This method (and data) can be used by the UI to signal to the user that the transaction was signed, but it is primarily useful for ruleset implementations.
-
-A ruleset that implements a rate limitation needs to know what transactions are sent out to the external interface. By hooking into this methods, the ruleset can maintain track of that count.
-
-**OBS:** Note that if an attacker can restore your `clef` data to a previous point in time (e.g through a backup), the attacker can reset such windows, even if he/she is unable to decrypt the content.
-
-The `OnApproved` method cannot be responded to, it's purely informative
-
-Example:
-```json
-{
- "raw": "0xf85d640101948a8eafb1cf62bfbeb1741769dae1a9dd47996192018026a0716bd90515acb1e68e5ac5867aa11a1e65399c3349d479f5fb698554ebc6f293a04e8a4ebfff434e971e0ef12c5bf3a881b06fd04fc3f8b8a7291fb67a26a1d4ed",
- "tx": {
- "nonce": "0x64",
- "gasPrice": "0x1",
- "gas": "0x1",
- "to": "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192",
- "value": "0x1",
- "input": "0x",
- "v": "0x26",
- "r": "0x716bd90515acb1e68e5ac5867aa11a1e65399c3349d479f5fb698554ebc6f293",
- "s": "0x4e8a4ebfff434e971e0ef12c5bf3a881b06fd04fc3f8b8a7291fb67a26a1d4ed",
- "hash": "0x662f6d772692dd692f1b5e8baa77a9ff95bbd909362df3fc3d301aafebde5441"
- }
-}
-```
-### UserInputRequest
-
-Sent when clef needs the user to provide data. If 'password' is true, the input field should be treated accordingly (echo-free)
-
-Example:
-```json
-{
- "prompt": "The question to ask the user",
- "title": "The title here",
- "isPassword": true
-}
-```
-### UserInputResponse
-
-Response to UserInputRequest
-
-Example:
-```json
-{
- "text": "The textual response from user"
-}
-```
-### ListRequest
-
-Sent when a request has been made to list addresses. The UI is provided with the full `account`s, including local directory names. Note: this information is not passed back to the external caller, who only sees the `address`es.
-
-Example:
-```json
-{
- "accounts": [
- {
- "address": "0xdeadbeef000000000000000000000000deadbeef",
- "url": "keystore:///path/to/keyfile/a"
- },
- {
- "address": "0x1111111122222222222233333333334444444444",
- "url": "keystore:///path/to/keyfile/b"
- }
- ],
- "meta": {
- "remote": "localhost:9999",
- "local": "localhost:8545",
- "scheme": "http",
- "User-Agent": "Firefox 3.2",
- "Origin": "www.malicious.ru"
- }
-}
-```
-### ListResponse
-
-Response to list request. The response contains a list of all addresses to show to the caller. Note: the UI is free to respond with any address the caller, regardless of whether it exists or not
-
-Example:
-```json
-{
- "accounts": [
- {
- "address": "0x0000000000000000000000000000000000000000",
- "url": ".. ignored .."
- },
- {
- "address": "0xffffffffffffffffffffffffffffffffffffffff",
- "url": ""
- }
- ]
-}
-```
diff --git a/cmd/clef/docs/clef_architecture_pt1.png b/cmd/clef/docs/clef_architecture_pt1.png
deleted file mode 100644
index e40e532f30..0000000000
Binary files a/cmd/clef/docs/clef_architecture_pt1.png and /dev/null differ
diff --git a/cmd/clef/docs/clef_architecture_pt2.png b/cmd/clef/docs/clef_architecture_pt2.png
deleted file mode 100644
index f617d755e2..0000000000
Binary files a/cmd/clef/docs/clef_architecture_pt2.png and /dev/null differ
diff --git a/cmd/clef/docs/clef_architecture_pt3.png b/cmd/clef/docs/clef_architecture_pt3.png
deleted file mode 100644
index b9d6954473..0000000000
Binary files a/cmd/clef/docs/clef_architecture_pt3.png and /dev/null differ
diff --git a/cmd/clef/docs/clef_architecture_pt4.png b/cmd/clef/docs/clef_architecture_pt4.png
deleted file mode 100644
index a6cb3b4df2..0000000000
Binary files a/cmd/clef/docs/clef_architecture_pt4.png and /dev/null differ
diff --git a/cmd/clef/docs/qubes/clef_qubes_http.png b/cmd/clef/docs/qubes/clef_qubes_http.png
deleted file mode 100644
index e95ad8da4a..0000000000
Binary files a/cmd/clef/docs/qubes/clef_qubes_http.png and /dev/null differ
diff --git a/cmd/clef/docs/qubes/clef_qubes_qrexec.png b/cmd/clef/docs/qubes/clef_qubes_qrexec.png
deleted file mode 100644
index b1814e7c36..0000000000
Binary files a/cmd/clef/docs/qubes/clef_qubes_qrexec.png and /dev/null differ
diff --git a/cmd/clef/docs/qubes/qrexec-example.png b/cmd/clef/docs/qubes/qrexec-example.png
deleted file mode 100644
index fc5d57725d..0000000000
Binary files a/cmd/clef/docs/qubes/qrexec-example.png and /dev/null differ
diff --git a/cmd/clef/docs/qubes/qubes-client.py b/cmd/clef/docs/qubes/qubes-client.py
deleted file mode 100644
index 93a74b899b..0000000000
--- a/cmd/clef/docs/qubes/qubes-client.py
+++ /dev/null
@@ -1,23 +0,0 @@
-"""
-This implements a dispatcher which listens to localhost:8550, and proxies
-requests via qrexec to the service qubes.EthSign on a target domain
-"""
-
-import http.server
-import socketserver,subprocess
-
-PORT=8550
-TARGET_DOMAIN= 'debian-work'
-
-class Dispatcher(http.server.BaseHTTPRequestHandler):
- def do_POST(self):
- post_data = self.rfile.read(int(self.headers['Content-Length']))
- p = subprocess.Popen(['/usr/bin/qrexec-client-vm',TARGET_DOMAIN,'qubes.Clefsign'],stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- output = p.communicate(post_data)[0]
- self.wfile.write(output)
-
-
-with socketserver.TCPServer(("",PORT), Dispatcher) as httpd:
- print("Serving at port", PORT)
- httpd.serve_forever()
-
diff --git a/cmd/clef/docs/qubes/qubes.Clefsign b/cmd/clef/docs/qubes/qubes.Clefsign
deleted file mode 100644
index 9b5af7b4fe..0000000000
--- a/cmd/clef/docs/qubes/qubes.Clefsign
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-SIGNER_BIN="/home/user/tools/clef/clef"
-SIGNER_CMD="/home/user/tools/gtksigner/gtkui.py -s $SIGNER_BIN"
-
-# Start clef if not already started
-if [ ! -S /home/user/.clef/clef.ipc ]; then
- $SIGNER_CMD &
- sleep 1
-fi
-
-# Should be started by now
-if [ -S /home/user/.clef/clef.ipc ]; then
- # Post incoming request to HTTP channel
- curl -H "Content-Type: application/json" -X POST -d @- http://localhost:8550 2>/dev/null
-fi
diff --git a/cmd/clef/docs/qubes/qubes_newaccount-1.png b/cmd/clef/docs/qubes/qubes_newaccount-1.png
deleted file mode 100644
index 3bfc8b5b7e..0000000000
Binary files a/cmd/clef/docs/qubes/qubes_newaccount-1.png and /dev/null differ
diff --git a/cmd/clef/docs/qubes/qubes_newaccount-2.png b/cmd/clef/docs/qubes/qubes_newaccount-2.png
deleted file mode 100644
index c6dbd535dd..0000000000
Binary files a/cmd/clef/docs/qubes/qubes_newaccount-2.png and /dev/null differ
diff --git a/cmd/clef/docs/setup.md b/cmd/clef/docs/setup.md
deleted file mode 100644
index 6cc7a4120d..0000000000
--- a/cmd/clef/docs/setup.md
+++ /dev/null
@@ -1,198 +0,0 @@
-# Setting up Clef
-
-This document describes how Clef can be used in a more secure manner than executing it from your everyday laptop,
-in order to ensure that the keys remain safe in the event that your computer should get compromised.
-
-## Qubes OS
-
-
-### Background
-
-The Qubes operating system is based around virtual machines (qubes), where a set of virtual machines are configured, typically for
-different purposes such as:
-
-- personal
- - Your personal email, browsing etc
-- work
- - Work email etc
-- vault
- - a VM without network access, where gpg-keys and/or keepass credentials are stored.
-
-A couple of dedicated virtual machines handle externalities:
-
-- sys-net provides networking to all other (network-enabled) machines
-- sys-firewall handles firewall rules
-- sys-usb handles USB devices, and can map usb-devices to certain qubes.
-
-The goal of this document is to describe how we can set up clef to provide secure transaction
-signing from a `vault` vm, to another networked qube which runs Dapps.
-
-### Setup
-
-There are two ways that this can be achieved: integrated via Qubes or integrated via networking.
-
-
-#### 1. Qubes Integrated
-
-Qubes provides a facility for inter-qubes communication via `qrexec`. A qube can request to make a cross-qube RPC request
-to another qube. The OS then asks the user if the call is permitted.
-
-
-
-A policy-file can be created to allow such interaction. On the `target` domain, a service is invoked which can read the
-`stdin` from the `client` qube.
-
-This is how [Split GPG](https://www.qubes-os.org/doc/split-gpg/) is implemented. We can set up Clef the same way:
-
-##### Server
-
-
-
-On the `target` qubes, we need to define the RPC service.
-
-[qubes.Clefsign](qubes/qubes.Clefsign):
-
-```bash
-#!/bin/bash
-
-SIGNER_BIN="/home/user/tools/clef/clef"
-SIGNER_CMD="/home/user/tools/gtksigner/gtkui.py -s $SIGNER_BIN"
-
-# Start clef if not already started
-if [ ! -S /home/user/.clef/clef.ipc ]; then
- $SIGNER_CMD &
- sleep 1
-fi
-
-# Should be started by now
-if [ -S /home/user/.clef/clef.ipc ]; then
- # Post incoming request to HTTP channel
- curl -H "Content-Type: application/json" -X POST -d @- http://localhost:8550 2>/dev/null
-fi
-
-```
-This RPC service is not complete (see notes about HTTP headers below), but works as a proof-of-concept.
-It will forward the data received on `stdin` (forwarded by the OS) to Clef's HTTP channel.
-
-It would have been possible to send data directly to the `/home/user/.clef/.clef.ipc`
-socket via e.g `nc -U /home/user/.clef/clef.ipc`, but the reason for sending the request
-data over `HTTP` instead of `IPC` is that we want the ability to forward `HTTP` headers.
-
-To enable the service:
-
-``` bash
-sudo cp qubes.Clefsign /etc/qubes-rpc/
-sudo chmod +x /etc/qubes-rpc/ qubes.Clefsign
-```
-
-This setup uses [gtksigner](https://github.com/holiman/gtksigner), which is a very minimal GTK-based UI that works well
-with minimal requirements.
-
-##### Client
-
-
-On the `client` qube, we need to create a listener which will receive the request from the Dapp, and proxy it.
-
-
-[qubes-client.py](qubes/qubes-client.py):
-
-```python
-
-"""
-This implements a dispatcher which listens to localhost:8550, and proxies
-requests via qrexec to the service qubes.EthSign on a target domain
-"""
-
-import http.server
-import socketserver,subprocess
-
-PORT=8550
-TARGET_DOMAIN= 'debian-work'
-
-class Dispatcher(http.server.BaseHTTPRequestHandler):
- def do_POST(self):
- post_data = self.rfile.read(int(self.headers['Content-Length']))
- p = subprocess.Popen(['/usr/bin/qrexec-client-vm',TARGET_DOMAIN,'qubes.Clefsign'],stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- output = p.communicate(post_data)[0]
- self.wfile.write(output)
-
-
-with socketserver.TCPServer(("",PORT), Dispatcher) as httpd:
- print("Serving at port", PORT)
- httpd.serve_forever()
-
-
-```
-
-#### Testing
-
-To test the flow, if we have set up `debian-work` as the `target`, we can do
-
-```bash
-$ cat newaccnt.json
-{ "id": 0, "jsonrpc": "2.0","method": "account_new","params": []}
-
-$ cat newaccnt.json| qrexec-client-vm debian-work qubes.Clefsign
-```
-
-A dialog should pop up first to allow the IPC call:
-
-
-
-Followed by a GTK-dialog to approve the operation:
-
-
-
-To test the full flow, we use the client wrapper. Start it on the `client` qube:
-```
-[user@work qubes]$ python3 qubes-client.py
-```
-
-Make the request over http (`client` qube):
-```
-[user@work clef]$ cat newaccnt.json | curl -X POST -d @- http://localhost:8550
-```
-And it should show the same popups again.
-
-##### Pros and cons
-
-The benefits of this setup are:
-
-- This is the qubes-os intended model for inter-qube communication,
-- and thus benefits from qubes-os dialogs and policies for user approval
-
-However, it comes with a couple of drawbacks:
-
-- The `qubes-gpg-client` must forward the http request via RPC to the `target` qube. When doing so, the proxy
- will either drop important headers, or replace them.
- - The `Host` header is most likely `localhost`
- - The `Origin` header must be forwarded
- - Information about the remote ip must be added as a `X-Forwarded-For`. However, Clef cannot always trust an `XFF` header,
- since malicious clients may lie about `XFF` in order to fool the http server into believing it comes from another address.
-- Even with a policy in place to allow RPC calls between `caller` and `target`, there will be several popups:
- - One qubes-specific where the user specifies the `target` vm
- - One clef-specific to approve the transaction
-
-
-#### 2. Network integrated
-
-The second way to set up Clef on a qubes system is to allow networking, and have Clef listen to a port which is accessible
-from other qubes.
-
-
-
-
-
-
-## USBArmory
-
-The [USB armory](https://inversepath.com/usbarmory) is an open source hardware design with an 800 MHz ARM processor. It is a pocket-size
-computer. When inserted into a laptop, it identifies itself as a USB network interface, basically adding another network
-to your computer. Over this new network interface, you can SSH into the device.
-
-Running Clef off a USB armory means that you can use the armory as a very versatile offline computer, which only
-ever connects to a local network between your computer and the device itself.
-
-Needless to say, while this model should be fairly secure against remote attacks, an attacker with physical access
-to the USB Armory would trivially be able to extract the contents of the device filesystem.
-
diff --git a/cmd/clef/extapi_changelog.md b/cmd/clef/extapi_changelog.md
deleted file mode 100644
index 31554f0790..0000000000
--- a/cmd/clef/extapi_changelog.md
+++ /dev/null
@@ -1,104 +0,0 @@
-## Changelog for external API
-
-The API uses [semantic versioning](https://semver.org/).
-
-TL;DR: Given a version number MAJOR.MINOR.PATCH, increment the:
-
-* MAJOR version when you make incompatible API changes,
-* MINOR version when you add functionality in a backwards-compatible manner, and
-* PATCH version when you make backwards-compatible bug fixes.
-
-Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.
-
-### 6.1.0
-
-The API-method `account_signGnosisSafeTx` was added. This method takes two parameters,
-`[address, safeTx]`. The latter, `safeTx`, can be copy-pasted from the gnosis relay. For example:
-
-```
-{
- "jsonrpc": "2.0",
- "method": "account_signGnosisSafeTx",
- "params": ["0xfd1c4226bfD1c436672092F4eCbfC270145b7256",
- {
- "safe": "0x25a6c4BBd32B2424A9c99aEB0584Ad12045382B3",
- "to": "0xB372a646f7F05Cc1785018dBDA7EBc734a2A20E2",
- "value": "20000000000000000",
- "data": null,
- "operation": 0,
- "gasToken": "0x0000000000000000000000000000000000000000",
- "safeTxGas": 27845,
- "baseGas": 0,
- "gasPrice": "0",
- "refundReceiver": "0x0000000000000000000000000000000000000000",
- "nonce": 2,
- "executionDate": null,
- "submissionDate": "2020-09-15T21:54:49.617634Z",
- "modified": "2020-09-15T21:54:49.617634Z",
- "blockNumber": null,
- "transactionHash": null,
- "safeTxHash": "0x2edfbd5bc113ff18c0631595db32eb17182872d88d9bf8ee4d8c2dd5db6d95e2",
- "executor": null,
- "isExecuted": false,
- "isSuccessful": null,
- "ethGasPrice": null,
- "gasUsed": null,
- "fee": null,
- "origin": null,
- "dataDecoded": null,
- "confirmationsRequired": null,
- "confirmations": [
- {
- "owner": "0xAd2e180019FCa9e55CADe76E4487F126Fd08DA34",
- "submissionDate": "2020-09-15T21:54:49.663299Z",
- "transactionHash": null,
- "confirmationType": "CONFIRMATION",
- "signature": "0x95a7250bb645f831c86defc847350e7faff815b2fb586282568e96cc859e39315876db20a2eed5f7a0412906ec5ab57652a6f645ad4833f345bda059b9da2b821c",
- "signatureType": "EOA"
- }
- ],
- "signatures": null
- }
- ],
- "id": 67
-}
-```
-
-Not all fields are required, though. This method is really just a UX helper, which massages the
-input to conform to the `EIP-712` [specification](https://docs.gnosis.io/safe/docs/contracts_tx_execution/#transaction-hash)
-for the Gnosis Safe, and making the output be directly importable to by a relay service.
-
-
-### 6.0.0
-
-* `New` was changed to deliver only an address, not the full `Account` data
-* `Export` was moved from External API to the UI Server API
-
-#### 5.0.0
-
-* The external `account_EcRecover`-method was reimplemented.
-* The external method `account_sign(address, data)` was replaced with `account_signData(contentType, address, data)`.
-The addition of `contentType` makes it possible to use the method for different types of objects, such as:
- * signing data with an intended validator (not yet implemented)
- * signing clique headers,
- * signing plain personal messages,
-* The external method `account_signTypedData` implements [EIP-712](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md) and makes it possible to sign typed data.
-
-#### 4.0.0
-
-* The external `account_Ecrecover`-method was removed.
-* The external `account_Import`-method was removed.
-
-#### 3.0.0
-
-* The external `account_List`-method was changed to not expose `url`, which contained info about the local filesystem. It now returns only a list of addresses.
-
-#### 2.0.0
-
-* Commit `73abaf04b1372fa4c43201fb1b8019fe6b0a6f8d`, move `from` into `transaction` object in `signTransaction`. This
-makes the `accounts_signTransaction` identical to the old `eth_signTransaction`.
-
-
-#### 1.0.0
-
-Initial release.
diff --git a/cmd/clef/intapi_changelog.md b/cmd/clef/intapi_changelog.md
deleted file mode 100644
index eaeb2e6862..0000000000
--- a/cmd/clef/intapi_changelog.md
+++ /dev/null
@@ -1,191 +0,0 @@
-## Changelog for internal API (ui-api)
-
-The API uses [semantic versioning](https://semver.org/).
-
-TL;DR: Given a version number MAJOR.MINOR.PATCH, increment the:
-
-* MAJOR version when you make incompatible API changes,
-* MINOR version when you add functionality in a backwards-compatible manner, and
-* PATCH version when you make backwards-compatible bug fixes.
-
-Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.
-
-### 7.0.1
-
-Added `clef_New` to the internal API callable from a UI.
-
-> `New` creates a new password protected Account. The private key is protected with
-> the given password. Users are responsible to backup the private key that is stored
-> in the keystore location that was specified when this API was created.
-> This method is the same as New on the external API, the difference being that
-> this implementation does not ask for confirmation, since it's initiated by
-> the user
-
-### 7.0.0
-
-- The `message` field was renamed to `messages` in all data signing request methods to better reflect that it's a list, not a value.
-- The `storage.Put` and `storage.Get` methods in the rule execution engine were lower-cased to `storage.put` and `storage.get` to be consistent with JavaScript call conventions.
-
-### 6.0.0
-
-Removed `password` from responses to operations which require them. This is for two reasons,
-
-- Consistency between how rulesets operate and how manual processing works. A rule can `Approve` but require the actual password to be stored in the clef storage.
-With this change, the same stored password can be used even if rulesets are not enabled, but storage is.
-- It also removes the usability-shortcut that a UI might otherwise want to implement; remembering passwords. Since we now will not require the
-password on every `Approve`, there's no need for the UI to cache it locally.
- - In a future update, we'll likely add `clef_storePassword` to the internal API, so the user can store it via his UI (currently only CLI works).
-
-Affected datatypes:
-- `SignTxResponse`
-- `SignDataResponse`
-- `NewAccountResponse`
-
-If `clef` requires a password, the `OnInputRequired` will be used to collect it.
-
-
-### 5.0.0
-
-Changed the namespace format to adhere to the legacy ethereum format: `name_methodName`. Changes:
-
-* `ApproveTx` -> `ui_approveTx`
-* `ApproveSignData` -> `ui_approveSignData`
-* `ApproveExport` -> `removed`
-* `ApproveImport` -> `removed`
-* `ApproveListing` -> `ui_approveListing`
-* `ApproveNewAccount` -> `ui_approveNewAccount`
-* `ShowError` -> `ui_showError`
-* `ShowInfo` -> `ui_showInfo`
-* `OnApprovedTx` -> `ui_onApprovedTx`
-* `OnSignerStartup` -> `ui_onSignerStartup`
-* `OnInputRequired` -> `ui_onInputRequired`
-
-
-### 4.0.0
-
-* Bidirectional communication implemented, so the UI can query `clef` via the stdin/stdout RPC channel. Methods implemented are:
- - `clef_listWallets`
- - `clef_listAccounts`
- - `clef_listWallets`
- - `clef_deriveAccount`
- - `clef_importRawKey`
- - `clef_openWallet`
- - `clef_chainId`
- - `clef_setChainId`
- - `clef_export`
- - `clef_import`
-
-* The type `Account` was modified (the json-field `type` was removed), to consist of
-
-```go
-type Account struct {
- Address common.Address `json:"address"` // Ethereum account address derived from the key
- URL URL `json:"url"` // Optional resource locator within a backend
-}
-```
-
-
-### 3.2.0
-
-* Make `ShowError`, `OnApprovedTx`, `OnSignerStartup` be json-rpc [notifications](https://www.jsonrpc.org/specification#notification):
-
-> A Notification is a Request object without an "id" member. A Request object that is a Notification signifies the Client's lack of interest in the corresponding Response object, and as such no Response object needs to be returned to the client. The Server MUST NOT reply to a Notification, including those that are within a batch request.
->
-> Notifications are not confirmable by definition, since they do not have a Response object to be returned. As such, the Client would not be aware of any errors (like e.g. "Invalid params","Internal error"
-### 3.1.0
-
-* Add `ContentType` `string` to `SignDataRequest` to accommodate the latest EIP-191 and EIP-712 implementations.
-
-### 3.0.0
-
-* Make use of `OnInputRequired(info UserInputRequest)` for obtaining master password during startup
-
-### 2.1.0
-
-* Add `OnInputRequired(info UserInputRequest)` to internal API. This method is used when Clef needs user input, e.g. passwords.
-
-The following structures are used:
-
-```go
-UserInputRequest struct {
- Prompt string `json:"prompt"`
- Title string `json:"title"`
- IsPassword bool `json:"isPassword"`
-}
-UserInputResponse struct {
- Text string `json:"text"`
-}
-```
-
-### 2.0.0
-
-* Modify how `call_info` on a transaction is conveyed. New format:
-
-```
-{
- "jsonrpc": "2.0",
- "id": 2,
- "method": "ApproveTx",
- "params": [
- {
- "transaction": {
- "from": "0x82A2A876D39022B3019932D30Cd9c97ad5616813",
- "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
- "gas": "0x333",
- "gasPrice": "0x123",
- "value": "0x10",
- "nonce": "0x0",
- "data": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012",
- "input": null
- },
- "call_info": [
- {
- "type": "WARNING",
- "message": "Invalid checksum on to-address"
- },
- {
- "type": "WARNING",
- "message": "Tx contains data, but provided ABI signature could not be matched: Did not match: test (0 matches)"
- }
- ],
- "meta": {
- "remote": "127.0.0.1:54286",
- "local": "localhost:8550",
- "scheme": "HTTP/1.1"
- }
- }
- ]
-}
-```
-
-#### 1.2.0
-
-* Add `OnStartup` method, to provide the UI with information about what API version
-the signer uses (both internal and external) as well as build-info and external api.
-
-Example call:
-```json
-{
- "jsonrpc": "2.0",
- "id": 1,
- "method": "OnSignerStartup",
- "params": [
- {
- "info": {
- "extapi_http": "http://localhost:8550",
- "extapi_ipc": null,
- "extapi_version": "2.0.0",
- "intapi_version": "1.2.0"
- }
- }
- ]
-}
-```
-
-#### 1.1.0
-
-* Add `OnApproved` method
-
-#### 1.0.0
-
-Initial release.
diff --git a/cmd/clef/main.go b/cmd/clef/main.go
deleted file mode 100644
index f9b00e4a12..0000000000
--- a/cmd/clef/main.go
+++ /dev/null
@@ -1,1224 +0,0 @@
-// Copyright 2018 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "bufio"
- "context"
- "crypto/rand"
- "crypto/sha256"
- "encoding/hex"
- "encoding/json"
- "errors"
- "fmt"
- "io"
- "math/big"
- "net"
- "os"
- "os/signal"
- "path/filepath"
- "runtime"
- "strings"
- "time"
-
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/rpc"
- "github.com/ethereum/go-ethereum/signer/core"
- "github.com/ethereum/go-ethereum/signer/core/apitypes"
- "github.com/ethereum/go-ethereum/signer/fourbyte"
- "github.com/ethereum/go-ethereum/signer/rules"
- "github.com/ethereum/go-ethereum/signer/storage"
- "github.com/mattn/go-colorable"
- "github.com/mattn/go-isatty"
- "github.com/urfave/cli/v2"
-)
-
-const legalWarning = `
-WARNING!
-
-Clef is an account management tool. It may, like any software, contain bugs.
-
-Please take care to
-- backup your keystore files,
-- verify that the keystore(s) can be opened with your password.
-
-Clef is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
-without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU General Public License for more details.
-`
-
-var (
- logLevelFlag = &cli.IntFlag{
- Name: "loglevel",
- Value: 3,
- Usage: "log level to emit to the screen",
- }
- advancedMode = &cli.BoolFlag{
- Name: "advanced",
- Usage: "If enabled, issues warnings instead of rejections for suspicious requests. Default off",
- }
- acceptFlag = &cli.BoolFlag{
- Name: "suppress-bootwarn",
- Usage: "If set, does not show the warning during boot",
- }
- keystoreFlag = &cli.StringFlag{
- Name: "keystore",
- Value: filepath.Join(node.DefaultDataDir(), "keystore"),
- Usage: "Directory for the keystore",
- }
- configdirFlag = &cli.StringFlag{
- Name: "configdir",
- Value: DefaultConfigDir(),
- Usage: "Directory for Clef configuration",
- }
- chainIdFlag = &cli.Int64Flag{
- Name: "chainid",
- Value: params.MainnetChainConfig.ChainID.Int64(),
- Usage: "Chain id to use for signing (1=mainnet, 5=Goerli)",
- }
- rpcPortFlag = &cli.IntFlag{
- Name: "http.port",
- Usage: "HTTP-RPC server listening port",
- Value: node.DefaultHTTPPort + 5,
- Category: flags.APICategory,
- }
- signerSecretFlag = &cli.StringFlag{
- Name: "signersecret",
- Usage: "A file containing the (encrypted) master seed to encrypt Clef data, e.g. keystore credentials and ruleset hash",
- }
- customDBFlag = &cli.StringFlag{
- Name: "4bytedb-custom",
- Usage: "File used for writing new 4byte-identifiers submitted via API",
- Value: "./4byte-custom.json",
- }
- auditLogFlag = &cli.StringFlag{
- Name: "auditlog",
- Usage: "File used to emit audit logs. Set to \"\" to disable",
- Value: "audit.log",
- }
- ruleFlag = &cli.StringFlag{
- Name: "rules",
- Usage: "Path to the rule file to auto-authorize requests with",
- }
- stdiouiFlag = &cli.BoolFlag{
- Name: "stdio-ui",
- Usage: "Use STDIN/STDOUT as a channel for an external UI. " +
- "This means that an STDIN/STDOUT is used for RPC-communication with a e.g. a graphical user " +
- "interface, and can be used when Clef is started by an external process.",
- }
- testFlag = &cli.BoolFlag{
- Name: "stdio-ui-test",
- Usage: "Mechanism to test interface between Clef and UI. Requires 'stdio-ui'.",
- }
- initCommand = &cli.Command{
- Action: initializeSecrets,
- Name: "init",
- Usage: "Initialize the signer, generate secret storage",
- ArgsUsage: "",
- Flags: []cli.Flag{
- logLevelFlag,
- configdirFlag,
- },
- Description: `
-The init command generates a master seed which Clef can use to store credentials and data needed for
-the rule-engine to work.`,
- }
- attestCommand = &cli.Command{
- Action: attestFile,
- Name: "attest",
- Usage: "Attest that a js-file is to be used",
- ArgsUsage: "",
- Flags: []cli.Flag{
- logLevelFlag,
- configdirFlag,
- signerSecretFlag,
- },
- Description: `
-The attest command stores the sha256 of the rule.js-file that you want to use for automatic processing of
-incoming requests.
-
-Whenever you make an edit to the rule file, you need to use attestation to tell
-Clef that the file is 'safe' to execute.`,
- }
- setCredentialCommand = &cli.Command{
- Action: setCredential,
- Name: "setpw",
- Usage: "Store a credential for a keystore file",
- ArgsUsage: "",
- Flags: []cli.Flag{
- logLevelFlag,
- configdirFlag,
- signerSecretFlag,
- },
- Description: `
-The setpw command stores a password for a given address (keyfile).
-`}
- delCredentialCommand = &cli.Command{
- Action: removeCredential,
- Name: "delpw",
- Usage: "Remove a credential for a keystore file",
- ArgsUsage: "",
- Flags: []cli.Flag{
- logLevelFlag,
- configdirFlag,
- signerSecretFlag,
- },
- Description: `
-The delpw command removes a password for a given address (keyfile).
-`}
- newAccountCommand = &cli.Command{
- Action: newAccount,
- Name: "newaccount",
- Usage: "Create a new account",
- ArgsUsage: "",
- Flags: []cli.Flag{
- logLevelFlag,
- keystoreFlag,
- utils.LightKDFFlag,
- acceptFlag,
- },
- Description: `
-The newaccount command creates a new keystore-backed account. It is a convenience-method
-which can be used in lieu of an external UI.
-`}
- gendocCommand = &cli.Command{
- Action: GenDoc,
- Name: "gendoc",
- Usage: "Generate documentation about json-rpc format",
- Description: `
-The gendoc generates example structures of the json-rpc communication types.
-`}
- listAccountsCommand = &cli.Command{
- Action: listAccounts,
- Name: "list-accounts",
- Usage: "List accounts in the keystore",
- Flags: []cli.Flag{
- logLevelFlag,
- keystoreFlag,
- utils.LightKDFFlag,
- acceptFlag,
- },
- Description: `
- Lists the accounts in the keystore.
- `}
- listWalletsCommand = &cli.Command{
- Action: listWallets,
- Name: "list-wallets",
- Usage: "List wallets known to Clef",
- Flags: []cli.Flag{
- logLevelFlag,
- keystoreFlag,
- utils.LightKDFFlag,
- acceptFlag,
- },
- Description: `
- Lists the wallets known to Clef.
- `}
- importRawCommand = &cli.Command{
- Action: accountImport,
- Name: "importraw",
- Usage: "Import a hex-encoded private key.",
- ArgsUsage: "",
- Flags: []cli.Flag{
- logLevelFlag,
- keystoreFlag,
- utils.LightKDFFlag,
- acceptFlag,
- },
- Description: `
-Imports an unencrypted private key from and creates a new account.
-Prints the address.
-The keyfile is assumed to contain an unencrypted private key in hexadecimal format.
-The account is saved in encrypted format, you are prompted for a password.
-`}
-)
-
-var app = flags.NewApp("Manage Ethereum account operations")
-
-func init() {
- app.Name = "Clef"
- app.Flags = []cli.Flag{
- logLevelFlag,
- keystoreFlag,
- configdirFlag,
- chainIdFlag,
- utils.LightKDFFlag,
- utils.NoUSBFlag,
- utils.SmartCardDaemonPathFlag,
- utils.HTTPListenAddrFlag,
- utils.HTTPVirtualHostsFlag,
- utils.IPCDisabledFlag,
- utils.IPCPathFlag,
- utils.HTTPEnabledFlag,
- rpcPortFlag,
- signerSecretFlag,
- customDBFlag,
- auditLogFlag,
- ruleFlag,
- stdiouiFlag,
- testFlag,
- advancedMode,
- acceptFlag,
- }
- app.Action = signer
- app.Commands = []*cli.Command{initCommand,
- attestCommand,
- setCredentialCommand,
- delCredentialCommand,
- newAccountCommand,
- importRawCommand,
- gendocCommand,
- listAccountsCommand,
- listWalletsCommand,
- }
-}
-
-func main() {
- if err := app.Run(os.Args); err != nil {
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
- }
-}
-
-func initializeSecrets(c *cli.Context) error {
- // Get past the legal message
- if err := initialize(c); err != nil {
- return err
- }
- // Ensure the master key does not yet exist, we're not willing to overwrite
- configDir := c.String(configdirFlag.Name)
- if err := os.Mkdir(configDir, 0700); err != nil && !os.IsExist(err) {
- return err
- }
- location := filepath.Join(configDir, "masterseed.json")
- if _, err := os.Stat(location); err == nil {
- return fmt.Errorf("master key %v already exists, will not overwrite", location)
- }
- // Key file does not exist yet, generate a new one and encrypt it
- masterSeed := make([]byte, 256)
- num, err := io.ReadFull(rand.Reader, masterSeed)
- if err != nil {
- return err
- }
- if num != len(masterSeed) {
- return errors.New("failed to read enough random")
- }
- n, p := keystore.StandardScryptN, keystore.StandardScryptP
- if c.Bool(utils.LightKDFFlag.Name) {
- n, p = keystore.LightScryptN, keystore.LightScryptP
- }
- text := "The master seed of clef will be locked with a password.\nPlease specify a password. Do not forget this password!"
- var password string
- for {
- password = utils.GetPassPhrase(text, true)
- if err := core.ValidatePasswordFormat(password); err != nil {
- fmt.Printf("invalid password: %v\n", err)
- } else {
- fmt.Println()
- break
- }
- }
- cipherSeed, err := encryptSeed(masterSeed, []byte(password), n, p)
- if err != nil {
- return fmt.Errorf("failed to encrypt master seed: %v", err)
- }
- // Double check the master key path to ensure nothing wrote there in between
- if err = os.Mkdir(configDir, 0700); err != nil && !os.IsExist(err) {
- return err
- }
- if _, err := os.Stat(location); err == nil {
- return fmt.Errorf("master key %v already exists, will not overwrite", location)
- }
- // Write the file and print the usual warning message
- if err = os.WriteFile(location, cipherSeed, 0400); err != nil {
- return err
- }
- fmt.Printf("A master seed has been generated into %s\n", location)
- fmt.Printf(`
-This is required to be able to store credentials, such as:
-* Passwords for keystores (used by rule engine)
-* Storage for JavaScript auto-signing rules
-* Hash of JavaScript rule-file
-
-You should treat 'masterseed.json' with utmost secrecy and make a backup of it!
-* The password is necessary but not enough, you need to back up the master seed too!
-* The master seed does not contain your accounts, those need to be backed up separately!
-
-`)
- return nil
-}
-
-func attestFile(ctx *cli.Context) error {
- if ctx.NArg() < 1 {
- utils.Fatalf("This command requires an argument.")
- }
- if err := initialize(ctx); err != nil {
- return err
- }
-
- stretchedKey, err := readMasterKey(ctx, nil)
- if err != nil {
- utils.Fatalf(err.Error())
- }
- configDir := ctx.String(configdirFlag.Name)
- vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), stretchedKey)[:10]))
- confKey := crypto.Keccak256([]byte("config"), stretchedKey)
-
- // Initialize the encrypted storages
- configStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "config.json"), confKey)
- val := ctx.Args().First()
- configStorage.Put("ruleset_sha256", val)
- log.Info("Ruleset attestation updated", "sha256", val)
- return nil
-}
-
-func initInternalApi(c *cli.Context) (*core.UIServerAPI, core.UIClientAPI, error) {
- if err := initialize(c); err != nil {
- return nil, nil, err
- }
- var (
- ui = core.NewCommandlineUI()
- pwStorage storage.Storage = &storage.NoStorage{}
- ksLoc = c.String(keystoreFlag.Name)
- lightKdf = c.Bool(utils.LightKDFFlag.Name)
- )
- am := core.StartClefAccountManager(ksLoc, true, lightKdf, "")
- api := core.NewSignerAPI(am, 0, true, ui, nil, false, pwStorage)
- internalApi := core.NewUIServerAPI(api)
- return internalApi, ui, nil
-}
-
-func setCredential(ctx *cli.Context) error {
- if ctx.NArg() < 1 {
- utils.Fatalf("This command requires an address to be passed as an argument")
- }
- if err := initialize(ctx); err != nil {
- return err
- }
- addr := ctx.Args().First()
- if !common.IsHexAddress(addr) {
- utils.Fatalf("Invalid address specified: %s", addr)
- }
- address := common.HexToAddress(addr)
- password := utils.GetPassPhrase("Please enter a password to store for this address:", true)
- fmt.Println()
-
- stretchedKey, err := readMasterKey(ctx, nil)
- if err != nil {
- utils.Fatalf(err.Error())
- }
- configDir := ctx.String(configdirFlag.Name)
- vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), stretchedKey)[:10]))
- pwkey := crypto.Keccak256([]byte("credentials"), stretchedKey)
-
- pwStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "credentials.json"), pwkey)
- pwStorage.Put(address.Hex(), password)
-
- log.Info("Credential store updated", "set", address)
- return nil
-}
-
-func removeCredential(ctx *cli.Context) error {
- if ctx.NArg() < 1 {
- utils.Fatalf("This command requires an address to be passed as an argument")
- }
- if err := initialize(ctx); err != nil {
- return err
- }
- addr := ctx.Args().First()
- if !common.IsHexAddress(addr) {
- utils.Fatalf("Invalid address specified: %s", addr)
- }
- address := common.HexToAddress(addr)
-
- stretchedKey, err := readMasterKey(ctx, nil)
- if err != nil {
- utils.Fatalf(err.Error())
- }
- configDir := ctx.String(configdirFlag.Name)
- vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), stretchedKey)[:10]))
- pwkey := crypto.Keccak256([]byte("credentials"), stretchedKey)
-
- pwStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "credentials.json"), pwkey)
- pwStorage.Del(address.Hex())
-
- log.Info("Credential store updated", "unset", address)
- return nil
-}
-
-func initialize(c *cli.Context) error {
- // Set up the logger to print everything
- logOutput := os.Stdout
- if c.Bool(stdiouiFlag.Name) {
- logOutput = os.Stderr
- // If using the stdioui, we can't do the 'confirm'-flow
- if !c.Bool(acceptFlag.Name) {
- fmt.Fprint(logOutput, legalWarning)
- }
- } else if !c.Bool(acceptFlag.Name) {
- if !confirm(legalWarning) {
- return errors.New("aborted by user")
- }
- fmt.Println()
- }
- usecolor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb"
- output := io.Writer(logOutput)
- if usecolor {
- output = colorable.NewColorable(logOutput)
- }
- verbosity := log.FromLegacyLevel(c.Int(logLevelFlag.Name))
- log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(output, verbosity, usecolor)))
-
- return nil
-}
-
-func newAccount(c *cli.Context) error {
- internalApi, _, err := initInternalApi(c)
- if err != nil {
- return err
- }
- addr, err := internalApi.New(context.Background())
- if err == nil {
- fmt.Printf("Generated account %v\n", addr.String())
- }
- return err
-}
-
-func listAccounts(c *cli.Context) error {
- internalApi, _, err := initInternalApi(c)
- if err != nil {
- return err
- }
- accs, err := internalApi.ListAccounts(context.Background())
- if err != nil {
- return err
- }
- if len(accs) == 0 {
- fmt.Println("\nThe keystore is empty.")
- }
- fmt.Println()
- for _, account := range accs {
- fmt.Printf("%v (%v)\n", account.Address, account.URL)
- }
- return err
-}
-
-func listWallets(c *cli.Context) error {
- internalApi, _, err := initInternalApi(c)
- if err != nil {
- return err
- }
- wallets := internalApi.ListWallets()
- if len(wallets) == 0 {
- fmt.Println("\nThere are no wallets.")
- }
- fmt.Println()
- for i, wallet := range wallets {
- fmt.Printf("- Wallet %d at %v (%v %v)\n", i, wallet.URL, wallet.Status, wallet.Failure)
- for j, acc := range wallet.Accounts {
- fmt.Printf(" -Account %d: %v (%v)\n", j, acc.Address, acc.URL)
- }
- fmt.Println()
- }
- return nil
-}
-
-// accountImport imports a raw hexadecimal private key via CLI.
-func accountImport(c *cli.Context) error {
- if c.Args().Len() != 1 {
- return errors.New(" must be given as first argument.")
- }
- internalApi, ui, err := initInternalApi(c)
- if err != nil {
- return err
- }
- pKey, err := crypto.LoadECDSA(c.Args().First())
- if err != nil {
- return err
- }
- readPw := func(prompt string) (string, error) {
- resp, err := ui.OnInputRequired(core.UserInputRequest{
- Title: "Password",
- Prompt: prompt,
- IsPassword: true,
- })
- if err != nil {
- return "", err
- }
- return resp.Text, nil
- }
- first, err := readPw("Please enter a password for the imported account")
- if err != nil {
- return err
- }
- second, err := readPw("Please repeat the password you just entered")
- if err != nil {
- return err
- }
- if first != second {
- //lint:ignore ST1005 This is a message for the user
- return errors.New("Passwords do not match")
- }
- acc, err := internalApi.ImportRawKey(hex.EncodeToString(crypto.FromECDSA(pKey)), first)
- if err != nil {
- return err
- }
- ui.ShowInfo(fmt.Sprintf(`Key imported:
- Address %v
- Keystore file: %v
-
-The key is now encrypted; losing the password will result in permanently losing
-access to the key and all associated funds!
-
-Make sure to backup keystore and passwords in a safe location.`,
- acc.Address, acc.URL.Path))
- return nil
-}
-
-// ipcEndpoint resolves an IPC endpoint based on a configured value, taking into
-// account the set data folders as well as the designated platform we're currently
-// running on.
-func ipcEndpoint(ipcPath, datadir string) string {
- // On windows we can only use plain top-level pipes
- if runtime.GOOS == "windows" {
- if strings.HasPrefix(ipcPath, `\\.\pipe\`) {
- return ipcPath
- }
- return `\\.\pipe\` + ipcPath
- }
- // Resolve names into the data directory full paths otherwise
- if filepath.Base(ipcPath) == ipcPath {
- if datadir == "" {
- return filepath.Join(os.TempDir(), ipcPath)
- }
- return filepath.Join(datadir, ipcPath)
- }
- return ipcPath
-}
-
-func signer(c *cli.Context) error {
- // If we have some unrecognized command, bail out
- if c.NArg() > 0 {
- return fmt.Errorf("invalid command: %q", c.Args().First())
- }
- if err := initialize(c); err != nil {
- return err
- }
- var (
- ui core.UIClientAPI
- )
- if c.Bool(stdiouiFlag.Name) {
- log.Info("Using stdin/stdout as UI-channel")
- ui = core.NewStdIOUI()
- } else {
- log.Info("Using CLI as UI-channel")
- ui = core.NewCommandlineUI()
- }
- // 4bytedb data
- fourByteLocal := c.String(customDBFlag.Name)
- db, err := fourbyte.NewWithFile(fourByteLocal)
- if err != nil {
- utils.Fatalf(err.Error())
- }
- embeds, locals := db.Size()
- log.Info("Loaded 4byte database", "embeds", embeds, "locals", locals, "local", fourByteLocal)
-
- var (
- api core.ExternalAPI
- pwStorage storage.Storage = &storage.NoStorage{}
- )
- configDir := c.String(configdirFlag.Name)
- if stretchedKey, err := readMasterKey(c, ui); err != nil {
- log.Warn("Failed to open master, rules disabled", "err", err)
- } else {
- vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), stretchedKey)[:10]))
-
- // Generate domain specific keys
- pwkey := crypto.Keccak256([]byte("credentials"), stretchedKey)
- jskey := crypto.Keccak256([]byte("jsstorage"), stretchedKey)
- confkey := crypto.Keccak256([]byte("config"), stretchedKey)
-
- // Initialize the encrypted storages
- pwStorage = storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "credentials.json"), pwkey)
- jsStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "jsstorage.json"), jskey)
- configStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "config.json"), confkey)
-
- // Do we have a rule-file?
- if ruleFile := c.String(ruleFlag.Name); ruleFile != "" {
- ruleJS, err := os.ReadFile(ruleFile)
- if err != nil {
- log.Warn("Could not load rules, disabling", "file", ruleFile, "err", err)
- } else {
- shasum := sha256.Sum256(ruleJS)
- foundShaSum := hex.EncodeToString(shasum[:])
- storedShasum, _ := configStorage.Get("ruleset_sha256")
- if storedShasum != foundShaSum {
- log.Warn("Rule hash not attested, disabling", "hash", foundShaSum, "attested", storedShasum)
- } else {
- // Initialize rules
- ruleEngine, err := rules.NewRuleEvaluator(ui, jsStorage)
- if err != nil {
- utils.Fatalf(err.Error())
- }
- ruleEngine.Init(string(ruleJS))
- ui = ruleEngine
- log.Info("Rule engine configured", "file", c.String(ruleFlag.Name))
- }
- }
- }
- }
- var (
- chainId = c.Int64(chainIdFlag.Name)
- ksLoc = c.String(keystoreFlag.Name)
- lightKdf = c.Bool(utils.LightKDFFlag.Name)
- advanced = c.Bool(advancedMode.Name)
- nousb = c.Bool(utils.NoUSBFlag.Name)
- scpath = c.String(utils.SmartCardDaemonPathFlag.Name)
- )
- log.Info("Starting signer", "chainid", chainId, "keystore", ksLoc,
- "light-kdf", lightKdf, "advanced", advanced)
- am := core.StartClefAccountManager(ksLoc, nousb, lightKdf, scpath)
- defer am.Close()
- apiImpl := core.NewSignerAPI(am, chainId, nousb, ui, db, advanced, pwStorage)
-
- // Establish the bidirectional communication, by creating a new UI backend and registering
- // it with the UI.
- ui.RegisterUIServer(core.NewUIServerAPI(apiImpl))
- api = apiImpl
-
- // Audit logging
- if logfile := c.String(auditLogFlag.Name); logfile != "" {
- api, err = core.NewAuditLogger(logfile, api)
- if err != nil {
- utils.Fatalf(err.Error())
- }
- log.Info("Audit logs configured", "file", logfile)
- }
- // register signer API with server
- var (
- extapiURL = "n/a"
- ipcapiURL = "n/a"
- )
- rpcAPI := []rpc.API{
- {
- Namespace: "account",
- Service: api,
- },
- }
- if c.Bool(utils.HTTPEnabledFlag.Name) {
- vhosts := utils.SplitAndTrim(c.String(utils.HTTPVirtualHostsFlag.Name))
- cors := utils.SplitAndTrim(c.String(utils.HTTPCORSDomainFlag.Name))
-
- srv := rpc.NewServer()
- srv.SetBatchLimits(node.DefaultConfig.BatchRequestLimit, node.DefaultConfig.BatchResponseMaxSize)
- err := node.RegisterApis(rpcAPI, []string{"account"}, srv)
- if err != nil {
- utils.Fatalf("Could not register API: %w", err)
- }
- handler := node.NewHTTPHandlerStack(srv, cors, vhosts, nil)
-
- // set port
- port := c.Int(rpcPortFlag.Name)
-
- // start http server
- httpEndpoint := net.JoinHostPort(c.String(utils.HTTPListenAddrFlag.Name), fmt.Sprintf("%d", port))
- httpServer, addr, err := node.StartHTTPEndpoint(httpEndpoint, rpc.DefaultHTTPTimeouts, handler)
- if err != nil {
- utils.Fatalf("Could not start RPC api: %v", err)
- }
- extapiURL = fmt.Sprintf("http://%v/", addr)
- log.Info("HTTP endpoint opened", "url", extapiURL)
-
- defer func() {
- // Don't bother imposing a timeout here.
- httpServer.Shutdown(context.Background())
- log.Info("HTTP endpoint closed", "url", extapiURL)
- }()
- }
- if !c.Bool(utils.IPCDisabledFlag.Name) {
- givenPath := c.String(utils.IPCPathFlag.Name)
- ipcapiURL = ipcEndpoint(filepath.Join(givenPath, "clef.ipc"), configDir)
- listener, _, err := rpc.StartIPCEndpoint(ipcapiURL, rpcAPI)
- if err != nil {
- utils.Fatalf("Could not start IPC api: %v", err)
- }
- log.Info("IPC endpoint opened", "url", ipcapiURL)
- defer func() {
- listener.Close()
- log.Info("IPC endpoint closed", "url", ipcapiURL)
- }()
- }
- if c.Bool(testFlag.Name) {
- log.Info("Performing UI test")
- go testExternalUI(apiImpl)
- }
- ui.OnSignerStartup(core.StartupInfo{
- Info: map[string]interface{}{
- "intapi_version": core.InternalAPIVersion,
- "extapi_version": core.ExternalAPIVersion,
- "extapi_http": extapiURL,
- "extapi_ipc": ipcapiURL,
- }})
-
- abortChan := make(chan os.Signal, 1)
- signal.Notify(abortChan, os.Interrupt)
-
- sig := <-abortChan
- log.Info("Exiting...", "signal", sig)
-
- return nil
-}
-
-// DefaultConfigDir is the default config directory to use for the vaults and other
-// persistence requirements.
-func DefaultConfigDir() string {
- // Try to place the data folder in the user's home dir
- home := flags.HomeDir()
- if home != "" {
- if runtime.GOOS == "darwin" {
- return filepath.Join(home, "Library", "Signer")
- } else if runtime.GOOS == "windows" {
- appdata := os.Getenv("APPDATA")
- if appdata != "" {
- return filepath.Join(appdata, "Signer")
- }
- return filepath.Join(home, "AppData", "Roaming", "Signer")
- }
- return filepath.Join(home, ".clef")
- }
- // As we cannot guess a stable location, return empty and handle later
- return ""
-}
-
-func readMasterKey(ctx *cli.Context, ui core.UIClientAPI) ([]byte, error) {
- var (
- file string
- configDir = ctx.String(configdirFlag.Name)
- )
- if ctx.IsSet(signerSecretFlag.Name) {
- file = ctx.String(signerSecretFlag.Name)
- } else {
- file = filepath.Join(configDir, "masterseed.json")
- }
- if err := checkFile(file); err != nil {
- return nil, err
- }
- cipherKey, err := os.ReadFile(file)
- if err != nil {
- return nil, err
- }
- var password string
- // If ui is not nil, get the password from ui.
- if ui != nil {
- resp, err := ui.OnInputRequired(core.UserInputRequest{
- Title: "Master Password",
- Prompt: "Please enter the password to decrypt the master seed",
- IsPassword: true})
- if err != nil {
- return nil, err
- }
- password = resp.Text
- } else {
- password = utils.GetPassPhrase("Decrypt master seed of clef", false)
- }
- masterSeed, err := decryptSeed(cipherKey, password)
- if err != nil {
- return nil, errors.New("failed to decrypt the master seed of clef")
- }
- if len(masterSeed) < 256 {
- return nil, fmt.Errorf("master seed of insufficient length, expected >255 bytes, got %d", len(masterSeed))
- }
- // Create vault location
- vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), masterSeed)[:10]))
- err = os.Mkdir(vaultLocation, 0700)
- if err != nil && !os.IsExist(err) {
- return nil, err
- }
- return masterSeed, nil
-}
-
-// checkFile is a convenience function to check if a file
-// * exists
-// * is mode 0400 (unix only)
-func checkFile(filename string) error {
- info, err := os.Stat(filename)
- if err != nil {
- return fmt.Errorf("failed stat on %s: %v", filename, err)
- }
- // Check the unix permission bits
- // However, on windows, we cannot use the unix perm-bits, see
- // https://github.com/ethereum/go-ethereum/issues/20123
- if runtime.GOOS != "windows" && info.Mode().Perm()&0377 != 0 {
- return fmt.Errorf("file (%v) has insecure file permissions (%v)", filename, info.Mode().String())
- }
- return nil
-}
-
-// confirm displays a text and asks for user confirmation
-func confirm(text string) bool {
- fmt.Print(text)
- fmt.Printf("\nEnter 'ok' to proceed:\n> ")
-
- text, err := bufio.NewReader(os.Stdin).ReadString('\n')
- if err != nil {
- log.Crit("Failed to read user input", "err", err)
- }
- if text := strings.TrimSpace(text); text == "ok" {
- return true
- }
- return false
-}
-
-func testExternalUI(api *core.SignerAPI) {
- ctx := context.WithValue(context.Background(), "remote", "clef binary")
- ctx = context.WithValue(ctx, "scheme", "in-proc")
- ctx = context.WithValue(ctx, "local", "main")
- errs := make([]string, 0)
-
- a := common.HexToAddress("0xdeadbeef000000000000000000000000deadbeef")
- addErr := func(errStr string) {
- log.Info("Test error", "err", errStr)
- errs = append(errs, errStr)
- }
-
- queryUser := func(q string) string {
- resp, err := api.UI.OnInputRequired(core.UserInputRequest{
- Title: "Testing",
- Prompt: q,
- })
- if err != nil {
- addErr(err.Error())
- }
- return resp.Text
- }
- expectResponse := func(testcase, question, expect string) {
- if got := queryUser(question); got != expect {
- addErr(fmt.Sprintf("%s: got %v, expected %v", testcase, got, expect))
- }
- }
- expectApprove := func(testcase string, err error) {
- if err == nil || err == accounts.ErrUnknownAccount {
- return
- }
- addErr(fmt.Sprintf("%v: expected no error, got %v", testcase, err.Error()))
- }
- expectDeny := func(testcase string, err error) {
- if err == nil || err != core.ErrRequestDenied {
- addErr(fmt.Sprintf("%v: expected ErrRequestDenied, got %v", testcase, err))
- }
- }
- var delay = 1 * time.Second
- // Test display of info and error
- {
- api.UI.ShowInfo("If you see this message, enter 'yes' to next question")
- time.Sleep(delay)
- expectResponse("showinfo", "Did you see the message? [yes/no]", "yes")
- api.UI.ShowError("If you see this message, enter 'yes' to the next question")
- time.Sleep(delay)
- expectResponse("showerror", "Did you see the message? [yes/no]", "yes")
- }
- { // Sign data test - clique header
- api.UI.ShowInfo("Please approve the next request for signing a clique header")
- time.Sleep(delay)
- cliqueHeader := types.Header{
- ParentHash: common.HexToHash("0000H45H"),
- UncleHash: common.HexToHash("0000H45H"),
- Coinbase: common.HexToAddress("0000H45H"),
- Root: common.HexToHash("0000H00H"),
- TxHash: common.HexToHash("0000H45H"),
- ReceiptHash: common.HexToHash("0000H45H"),
- Difficulty: big.NewInt(1337),
- Number: big.NewInt(1337),
- GasLimit: 1338,
- GasUsed: 1338,
- Time: 1338,
- Extra: []byte("Extra data Extra data Extra data Extra data Extra data Extra data Extra data Extra data"),
- MixDigest: common.HexToHash("0x0000H45H"),
- }
- cliqueRlp, err := rlp.EncodeToBytes(cliqueHeader)
- if err != nil {
- utils.Fatalf("Should not error: %v", err)
- }
- addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899")
- _, err = api.SignData(ctx, accounts.MimetypeClique, *addr, hexutil.Encode(cliqueRlp))
- expectApprove("signdata - clique header", err)
- }
- { // Sign data test - typed data
- api.UI.ShowInfo("Please approve the next request for signing EIP-712 typed data")
- time.Sleep(delay)
- addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899")
- data := `{"types":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"Person":[{"name":"name","type":"string"},{"name":"test","type":"uint8"},{"name":"wallet","type":"address"}],"Mail":[{"name":"from","type":"Person"},{"name":"to","type":"Person"},{"name":"contents","type":"string"}]},"primaryType":"Mail","domain":{"name":"Ether Mail","version":"1","chainId":"1","verifyingContract":"0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"},"message":{"from":{"name":"Cow","test":"3","wallet":"0xcD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"},"to":{"name":"Bob","wallet":"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB","test":"2"},"contents":"Hello, Bob!"}}`
- //_, err := api.SignData(ctx, accounts.MimetypeTypedData, *addr, hexutil.Encode([]byte(data)))
- var typedData apitypes.TypedData
- json.Unmarshal([]byte(data), &typedData)
- _, err := api.SignTypedData(ctx, *addr, typedData)
- expectApprove("sign 712 typed data", err)
- }
- { // Sign data test - plain text
- api.UI.ShowInfo("Please approve the next request for signing text")
- time.Sleep(delay)
- addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899")
- _, err := api.SignData(ctx, accounts.MimetypeTextPlain, *addr, hexutil.Encode([]byte("hello world")))
- expectApprove("signdata - text", err)
- }
- { // Sign data test - plain text reject
- api.UI.ShowInfo("Please deny the next request for signing text")
- time.Sleep(delay)
- addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899")
- _, err := api.SignData(ctx, accounts.MimetypeTextPlain, *addr, hexutil.Encode([]byte("hello world")))
- expectDeny("signdata - text", err)
- }
- { // Sign transaction
- api.UI.ShowInfo("Please reject next transaction")
- time.Sleep(delay)
- data := hexutil.Bytes([]byte{})
- to := common.NewMixedcaseAddress(a)
- tx := apitypes.SendTxArgs{
- Data: &data,
- Nonce: 0x1,
- Value: hexutil.Big(*big.NewInt(6)),
- From: common.NewMixedcaseAddress(a),
- To: &to,
- GasPrice: (*hexutil.Big)(big.NewInt(5)),
- Gas: 1000,
- Input: nil,
- }
- _, err := api.SignTransaction(ctx, tx, nil)
- expectDeny("signtransaction [1]", err)
- expectResponse("signtransaction [2]", "Did you see any warnings for the last transaction? (yes/no)", "no")
- }
- { // Listing
- api.UI.ShowInfo("Please reject listing-request")
- time.Sleep(delay)
- _, err := api.List(ctx)
- expectDeny("list", err)
- }
- { // Import
- api.UI.ShowInfo("Please reject new account-request")
- time.Sleep(delay)
- _, err := api.New(ctx)
- expectDeny("newaccount", err)
- }
- { // Metadata
- api.UI.ShowInfo("Please check if you see the Origin in next listing (approve or deny)")
- time.Sleep(delay)
- api.List(context.WithValue(ctx, "Origin", "origin.com"))
- expectResponse("metadata - origin", "Did you see origin (origin.com)? [yes/no] ", "yes")
- }
-
- for _, e := range errs {
- log.Error(e)
- }
- result := fmt.Sprintf("Tests completed. %d errors:\n%s\n", len(errs), strings.Join(errs, "\n"))
- api.UI.ShowInfo(result)
-}
-
-type encryptedSeedStorage struct {
- Description string `json:"description"`
- Version int `json:"version"`
- Params keystore.CryptoJSON `json:"params"`
-}
-
-// encryptSeed uses a similar scheme as the keystore uses, but with a different wrapping,
-// to encrypt the master seed
-func encryptSeed(seed []byte, auth []byte, scryptN, scryptP int) ([]byte, error) {
- cryptoStruct, err := keystore.EncryptDataV3(seed, auth, scryptN, scryptP)
- if err != nil {
- return nil, err
- }
- return json.Marshal(&encryptedSeedStorage{"Clef seed", 1, cryptoStruct})
-}
-
-// decryptSeed decrypts the master seed
-func decryptSeed(keyjson []byte, auth string) ([]byte, error) {
- var encSeed encryptedSeedStorage
- if err := json.Unmarshal(keyjson, &encSeed); err != nil {
- return nil, err
- }
- if encSeed.Version != 1 {
- log.Warn(fmt.Sprintf("unsupported encryption format of seed: %d, operation will likely fail", encSeed.Version))
- }
- seed, err := keystore.DecryptDataV3(encSeed.Params, auth)
- if err != nil {
- return nil, err
- }
- return seed, err
-}
-
-// GenDoc outputs examples of all structures used in json-rpc communication
-func GenDoc(ctx *cli.Context) error {
- var (
- a = common.HexToAddress("0xdeadbeef000000000000000000000000deadbeef")
- b = common.HexToAddress("0x1111111122222222222233333333334444444444")
- meta = core.Metadata{
- Scheme: "http",
- Local: "localhost:8545",
- Origin: "www.malicious.ru",
- Remote: "localhost:9999",
- UserAgent: "Firefox 3.2",
- }
- output []string
- add = func(name, desc string, v interface{}) {
- if data, err := json.MarshalIndent(v, "", " "); err == nil {
- output = append(output, fmt.Sprintf("### %s\n\n%s\n\nExample:\n```json\n%s\n```", name, desc, data))
- } else {
- log.Error("Error generating output", "err", err)
- }
- }
- )
-
- { // Sign plain text request
- desc := "SignDataRequest contains information about a pending request to sign some data. " +
- "The data to be signed can be of various types, defined by content-type. Clef has done most " +
- "of the work in canonicalizing and making sense of the data, and it's up to the UI to present" +
- "the user with the contents of the `message`"
- sighash, msg := accounts.TextAndHash([]byte("hello world"))
- messages := []*apitypes.NameValueType{{Name: "message", Value: msg, Typ: accounts.MimetypeTextPlain}}
-
- add("SignDataRequest", desc, &core.SignDataRequest{
- Address: common.NewMixedcaseAddress(a),
- Meta: meta,
- ContentType: accounts.MimetypeTextPlain,
- Rawdata: []byte(msg),
- Messages: messages,
- Hash: sighash})
- }
- { // Sign plain text response
- add("SignDataResponse - approve", "Response to SignDataRequest",
- &core.SignDataResponse{Approved: true})
- add("SignDataResponse - deny", "Response to SignDataRequest",
- &core.SignDataResponse{})
- }
- { // Sign transaction request
- desc := "SignTxRequest contains information about a pending request to sign a transaction. " +
- "Aside from the transaction itself, there is also a `call_info`-struct. That struct contains " +
- "messages of various types, that the user should be informed of." +
- "\n\n" +
- "As in any request, it's important to consider that the `meta` info also contains untrusted data." +
- "\n\n" +
- "The `transaction` (on input into clef) can have either `data` or `input` -- if both are set, " +
- "they must be identical, otherwise an error is generated. " +
- "However, Clef will always use `data` when passing this struct on (if Clef does otherwise, please file a ticket)"
-
- data := hexutil.Bytes([]byte{0x01, 0x02, 0x03, 0x04})
- add("SignTxRequest", desc, &core.SignTxRequest{
- Meta: meta,
- Callinfo: []apitypes.ValidationInfo{
- {Typ: "Warning", Message: "Something looks odd, show this message as a warning"},
- {Typ: "Info", Message: "User should see this as well"},
- },
- Transaction: apitypes.SendTxArgs{
- Data: &data,
- Nonce: 0x1,
- Value: hexutil.Big(*big.NewInt(6)),
- From: common.NewMixedcaseAddress(a),
- To: nil,
- GasPrice: (*hexutil.Big)(big.NewInt(5)),
- Gas: 1000,
- Input: nil,
- }})
- }
- { // Sign tx response
- data := hexutil.Bytes([]byte{0x04, 0x03, 0x02, 0x01})
- add("SignTxResponse - approve", "Response to request to sign a transaction. This response needs to contain the `transaction`"+
- ", because the UI is free to make modifications to the transaction.",
- &core.SignTxResponse{Approved: true,
- Transaction: apitypes.SendTxArgs{
- Data: &data,
- Nonce: 0x4,
- Value: hexutil.Big(*big.NewInt(6)),
- From: common.NewMixedcaseAddress(a),
- To: nil,
- GasPrice: (*hexutil.Big)(big.NewInt(5)),
- Gas: 1000,
- Input: nil,
- }})
- add("SignTxResponse - deny", "Response to SignTxRequest. When denying a request, there's no need to "+
- "provide the transaction in return",
- &core.SignTxResponse{})
- }
- { // WHen a signed tx is ready to go out
- desc := "SignTransactionResult is used in the call `clef` -> `OnApprovedTx(result)`" +
- "\n\n" +
- "This occurs _after_ successful completion of the entire signing procedure, but right before the signed " +
- "transaction is passed to the external caller. This method (and data) can be used by the UI to signal " +
- "to the user that the transaction was signed, but it is primarily useful for ruleset implementations." +
- "\n\n" +
- "A ruleset that implements a rate limitation needs to know what transactions are sent out to the external " +
- "interface. By hooking into this methods, the ruleset can maintain track of that count." +
- "\n\n" +
- "**OBS:** Note that if an attacker can restore your `clef` data to a previous point in time" +
- " (e.g through a backup), the attacker can reset such windows, even if he/she is unable to decrypt the content. " +
- "\n\n" +
- "The `OnApproved` method cannot be responded to, it's purely informative"
-
- rlpdata := common.FromHex("0xf85d640101948a8eafb1cf62bfbeb1741769dae1a9dd47996192018026a0716bd90515acb1e68e5ac5867aa11a1e65399c3349d479f5fb698554ebc6f293a04e8a4ebfff434e971e0ef12c5bf3a881b06fd04fc3f8b8a7291fb67a26a1d4ed")
- var tx types.Transaction
- tx.UnmarshalBinary(rlpdata)
- add("OnApproved - SignTransactionResult", desc, ðapi.SignTransactionResult{Raw: rlpdata, Tx: &tx})
- }
- { // User input
- add("UserInputRequest", "Sent when clef needs the user to provide data. If 'password' is true, the input field should be treated accordingly (echo-free)",
- &core.UserInputRequest{IsPassword: true, Title: "The title here", Prompt: "The question to ask the user"})
- add("UserInputResponse", "Response to UserInputRequest",
- &core.UserInputResponse{Text: "The textual response from user"})
- }
- { // List request
- add("ListRequest", "Sent when a request has been made to list addresses. The UI is provided with the "+
- "full `account`s, including local directory names. Note: this information is not passed back to the external caller, "+
- "who only sees the `address`es. ",
- &core.ListRequest{
- Meta: meta,
- Accounts: []accounts.Account{
- {Address: a, URL: accounts.URL{Scheme: "keystore", Path: "/path/to/keyfile/a"}},
- {Address: b, URL: accounts.URL{Scheme: "keystore", Path: "/path/to/keyfile/b"}}},
- })
-
- add("ListResponse", "Response to list request. The response contains a list of all addresses to show to the caller. "+
- "Note: the UI is free to respond with any address the caller, regardless of whether it exists or not",
- &core.ListResponse{
- Accounts: []accounts.Account{
- {
- Address: common.HexToAddress("0xcowbeef000000cowbeef00000000000000000c0w"),
- URL: accounts.URL{Path: ".. ignored .."},
- },
- {
- Address: common.MaxAddress,
- },
- }})
- }
-
- fmt.Println(`## UI Client interface
-
-These data types are defined in the channel between clef and the UI`)
- for _, elem := range output {
- fmt.Println(elem)
- }
- return nil
-}
diff --git a/cmd/clef/pythonsigner.py b/cmd/clef/pythonsigner.py
deleted file mode 100644
index 5d0eb18dcc..0000000000
--- a/cmd/clef/pythonsigner.py
+++ /dev/null
@@ -1,315 +0,0 @@
-import sys
-import subprocess
-
-from tinyrpc.transports import ServerTransport
-from tinyrpc.protocols.jsonrpc import JSONRPCProtocol
-from tinyrpc.dispatch import public, RPCDispatcher
-from tinyrpc.server import RPCServer
-
-"""
-This is a POC example of how to write a custom UI for Clef.
-The UI starts the clef process with the '--stdio-ui' option
-and communicates with clef using standard input / output.
-
-The standard input/output is a relatively secure way to communicate,
-as it does not require opening any ports or IPC files. Needless to say,
-it does not protect against memory inspection mechanisms
-where an attacker can access process memory.
-
-To make this work install all the requirements:
-
- pip install -r requirements.txt
-"""
-
-try:
- import urllib.parse as urlparse
-except ImportError:
- import urllib as urlparse
-
-
-class StdIOTransport(ServerTransport):
- """Uses std input/output for RPC"""
-
- def receive_message(self):
- return None, urlparse.unquote(sys.stdin.readline())
-
- def send_reply(self, context, reply):
- print(reply)
-
-
-class PipeTransport(ServerTransport):
- """Uses std a pipe for RPC"""
-
- def __init__(self, input, output):
- self.input = input
- self.output = output
-
- def receive_message(self):
- data = self.input.readline()
- print(">> {}".format(data))
- return None, urlparse.unquote(data)
-
- def send_reply(self, context, reply):
- reply = str(reply, "utf-8")
- print("<< {}".format(reply))
- self.output.write("{}\n".format(reply))
-
-
-def sanitize(txt, limit=100):
- return txt[:limit].encode("unicode_escape").decode("utf-8")
-
-
-def metaString(meta):
- """
- "meta":{"remote":"clef binary","local":"main","scheme":"in-proc","User-Agent":"","Origin":""}
- """ # noqa: E501
- message = (
- "\tRequest context:\n"
- "\t\t{remote} -> {scheme} -> {local}\n"
- "\tAdditional HTTP header data, provided by the external caller:\n"
- "\t\tUser-Agent: {user_agent}\n"
- "\t\tOrigin: {origin}\n"
- )
- return message.format(
- remote=meta.get("remote", ""),
- scheme=meta.get("scheme", ""),
- local=meta.get("local", ""),
- user_agent=sanitize(meta.get("User-Agent"), 200),
- origin=sanitize(meta.get("Origin"), 100),
- )
-
-
-class StdIOHandler:
- def __init__(self):
- pass
-
- @public
- def approveTx(self, req):
- """
- Example request:
-
- {"jsonrpc":"2.0","id":20,"method":"ui_approveTx","params":[{"transaction":{"from":"0xDEADbEeF000000000000000000000000DeaDbeEf","to":"0xDEADbEeF000000000000000000000000DeaDbeEf","gas":"0x3e8","gasPrice":"0x5","maxFeePerGas":null,"maxPriorityFeePerGas":null,"value":"0x6","nonce":"0x1","data":"0x"},"call_info":null,"meta":{"remote":"clef binary","local":"main","scheme":"in-proc","User-Agent":"","Origin":""}}]}
-
- :param transaction: transaction info
- :param call_info: info about the call, e.g. if ABI info could not be
- :param meta: metadata about the request, e.g. where the call comes from
- :return:
- """ # noqa: E501
- message = (
- "Sign transaction request:\n"
- "\t{meta_string}\n"
- "\n"
- "\tFrom: {from_}\n"
- "\tTo: {to}\n"
- "\n"
- "\tAuto-rejecting request"
- )
- meta = req.get("meta", {})
- transaction = req.get("transaction")
- sys.stdout.write(
- message.format(
- meta_string=metaString(meta),
- from_=transaction.get("from", ""),
- to=transaction.get("to", ""),
- )
- )
- return {
- "approved": False,
- }
-
- @public
- def approveSignData(self, req):
- """
- Example request:
-
- {"jsonrpc":"2.0","id":8,"method":"ui_approveSignData","params":[{"content_type":"application/x-clique-header","address":"0x0011223344556677889900112233445566778899","raw_data":"+QIRoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIFOYIFOYIFOoIFOoIFOppFeHRyYSBkYXRhIEV4dHJhIGRhdGEgRXh0cqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAAAAAA==","messages":[{"name":"Clique header","value":"clique header 1337 [0x44381ab449d77774874aca34634cb53bc21bd22aef2d3d4cf40e51176cb585ec]","type":"clique"}],"call_info":null,"hash":"0xa47ab61438a12a06c81420e308c2b7aae44e9cd837a5df70dd021421c0f58643","meta":{"remote":"clef binary","local":"main","scheme":"in-proc","User-Agent":"","Origin":""}}]}
- """ # noqa: E501
- message = (
- "Sign data request:\n"
- "\t{meta_string}\n"
- "\n"
- "\tContent-type: {content_type}\n"
- "\tAddress: {address}\n"
- "\tHash: {hash_}\n"
- "\n"
- "\tAuto-rejecting request\n"
- )
- meta = req.get("meta", {})
- sys.stdout.write(
- message.format(
- meta_string=metaString(meta),
- content_type=req.get("content_type"),
- address=req.get("address"),
- hash_=req.get("hash"),
- )
- )
-
- return {
- "approved": False,
- "password": None,
- }
-
- @public
- def approveNewAccount(self, req):
- """
- Example request:
-
- {"jsonrpc":"2.0","id":25,"method":"ui_approveNewAccount","params":[{"meta":{"remote":"clef binary","local":"main","scheme":"in-proc","User-Agent":"","Origin":""}}]}
- """ # noqa: E501
- message = (
- "Create new account request:\n"
- "\t{meta_string}\n"
- "\n"
- "\tAuto-rejecting request\n"
- )
- meta = req.get("meta", {})
- sys.stdout.write(message.format(meta_string=metaString(meta)))
- return {
- "approved": False,
- }
-
- @public
- def showError(self, req):
- """
- Example request:
-
- {"jsonrpc":"2.0","method":"ui_showError","params":[{"text":"If you see this message, enter 'yes' to the next question"}]}
-
- :param message: to display
- :return:nothing
- """ # noqa: E501
- message = (
- "## Error\n{text}\n"
- "Press enter to continue\n"
- )
- text = req.get("text")
- sys.stdout.write(message.format(text=text))
- input()
- return
-
- @public
- def showInfo(self, req):
- """
- Example request:
-
- {"jsonrpc":"2.0","method":"ui_showInfo","params":[{"text":"If you see this message, enter 'yes' to next question"}]}
-
- :param message: to display
- :return:nothing
- """ # noqa: E501
- message = (
- "## Info\n{text}\n"
- "Press enter to continue\n"
- )
- text = req.get("text")
- sys.stdout.write(message.format(text=text))
- input()
- return
-
- @public
- def onSignerStartup(self, req):
- """
- Example request:
-
- {"jsonrpc":"2.0", "method":"ui_onSignerStartup", "params":[{"info":{"extapi_http":"n/a","extapi_ipc":"/home/user/.clef/clef.ipc","extapi_version":"6.1.0","intapi_version":"7.0.1"}}]}
- """ # noqa: E501
- message = (
- "\n"
- "\t\tExt api url: {extapi_http}\n"
- "\t\tInt api ipc: {extapi_ipc}\n"
- "\t\tExt api ver: {extapi_version}\n"
- "\t\tInt api ver: {intapi_version}\n"
- )
- info = req.get("info")
- sys.stdout.write(
- message.format(
- extapi_http=info.get("extapi_http"),
- extapi_ipc=info.get("extapi_ipc"),
- extapi_version=info.get("extapi_version"),
- intapi_version=info.get("intapi_version"),
- )
- )
-
- @public
- def approveListing(self, req):
- """
- Example request:
-
- {"jsonrpc":"2.0","id":23,"method":"ui_approveListing","params":[{"accounts":[{"address":...
- """ # noqa: E501
- message = (
- "\n"
- "## Account listing request\n"
- "\t{meta_string}\n"
- "\tDo you want to allow listing the following accounts?\n"
- "\t-{addrs}\n"
- "\n"
- "->Auto-answering No\n"
- )
- meta = req.get("meta", {})
- accounts = req.get("accounts", [])
- addrs = [x.get("address") for x in accounts]
- sys.stdout.write(
- message.format(
- addrs="\n\t-".join(addrs),
- meta_string=metaString(meta)
- )
- )
- return {}
-
- @public
- def onInputRequired(self, req):
- """
- Example request:
-
- {"jsonrpc":"2.0","id":1,"method":"ui_onInputRequired","params":[{"title":"Master Password","prompt":"Please enter the password to decrypt the master seed","isPassword":true}]}
-
- :param message: to display
- :return:nothing
- """ # noqa: E501
- message = (
- "\n"
- "## {title}\n"
- "\t{prompt}\n"
- "\n"
- "> "
- )
- sys.stdout.write(
- message.format(
- title=req.get("title"),
- prompt=req.get("prompt")
- )
- )
- isPassword = req.get("isPassword")
- if not isPassword:
- return {"text": input()}
-
- return ""
-
-
-def main(args):
- cmd = ["clef", "--stdio-ui"]
- if len(args) > 0 and args[0] == "test":
- cmd.extend(["--stdio-ui-test"])
- print("cmd: {}".format(" ".join(cmd)))
-
- dispatcher = RPCDispatcher()
- dispatcher.register_instance(StdIOHandler(), "ui_")
-
- # line buffered
- p = subprocess.Popen(
- cmd,
- bufsize=1,
- universal_newlines=True,
- stdin=subprocess.PIPE,
- stdout=subprocess.PIPE,
- )
-
- rpc_server = RPCServer(
- PipeTransport(p.stdout, p.stdin), JSONRPCProtocol(), dispatcher
- )
- rpc_server.serve_forever()
-
-
-if __name__ == "__main__":
- main(sys.argv[1:])
diff --git a/cmd/clef/requirements.txt b/cmd/clef/requirements.txt
deleted file mode 100644
index 5381862e30..0000000000
--- a/cmd/clef/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
-tinyrpc==1.1.4
diff --git a/cmd/clef/rules.md b/cmd/clef/rules.md
deleted file mode 100644
index 112dae6512..0000000000
--- a/cmd/clef/rules.md
+++ /dev/null
@@ -1,234 +0,0 @@
-# Rules
-
-The `signer` binary contains a ruleset engine, implemented with [OttoVM](https://github.com/robertkrimen/otto)
-
-It enables usecases like the following:
-
-* I want to auto-approve transactions with contract `CasinoDapp`, with up to `0.05 ether` in value to maximum `1 ether` per 24h period
-* I want to auto-approve transaction to contract `EthAlarmClock` with `data`=`0xdeadbeef`, if `value=0`, `gas < 44k` and `gasPrice < 40Gwei`
-
-The two main features that are required for this to work well are;
-
-1. Rule Implementation: how to create, manage and interpret rules in a flexible but secure manner
-2. Credential managements and credentials; how to provide auto-unlock without exposing keys unnecessarily.
-
-The section below deals with both of them
-
-## Rule Implementation
-
-A ruleset file is implemented as a `js` file. Under the hood, the ruleset-engine is a `SignerUI`, implementing the same methods as the `json-rpc` methods
-defined in the UI protocol. Example:
-
-```js
-function asBig(str) {
- if (str.slice(0, 2) == "0x") {
- return new BigNumber(str.slice(2), 16)
- }
- return new BigNumber(str)
-}
-
-// Approve transactions to a certain contract if value is below a certain limit
-function ApproveTx(req) {
- var limit = big.Newint("0xb1a2bc2ec50000")
- var value = asBig(req.transaction.value);
-
- if (req.transaction.to.toLowerCase() == "0xae967917c465db8578ca9024c205720b1a3651a9") && value.lt(limit)) {
- return "Approve"
- }
- // If we return "Reject", it will be rejected.
- // By not returning anything, it will be passed to the next UI, for manual processing
-}
-
-// Approve listings if request made from IPC
-function ApproveListing(req){
- if (req.metadata.scheme == "ipc"){ return "Approve"}
-}
-```
-
-Whenever the external API is called (and the ruleset is enabled), the `signer` calls the UI, which is an instance of a ruleset-engine. The ruleset-engine
-invokes the corresponding method. In doing so, there are three possible outcomes:
-
-1. JS returns "Approve"
- * Auto-approve request
-2. JS returns "Reject"
- * Auto-reject request
-3. Error occurs, or something else is returned
- * Pass on to `next` ui: the regular UI channel.
-
-A more advanced example can be found below, "Example 1: ruleset for a rate-limited window", using `storage` to `Put` and `Get` `string`s by key.
-
-* At the time of writing, storage only exists as an ephemeral unencrypted implementation, to be used during testing.
-
-### Things to note
-
-The Otto vm has a few [caveats](https://github.com/robertkrimen/otto):
-
-* "use strict" will parse, but does nothing.
-* The regular expression engine (re2/regexp) is not fully compatible with the ECMA5 specification.
-* Otto targets ES5. ES6 features (eg: Typed Arrays) are not supported.
-
-Additionally, a few more have been added
-
-* The rule execution cannot load external javascript files.
-* The only preloaded library is [`bignumber.js`](https://github.com/MikeMcl/bignumber.js) version `2.0.3`. This one is fairly old, and is not aligned with the documentation at the github repository.
-* Each invocation is made in a fresh virtual machine. This means that you cannot store data in global variables between invocations. This is a deliberate choice -- if you want to store data, use the disk-backed `storage`, since rules should not rely on ephemeral data.
-* Javascript API parameters are _always_ an object. This is also a design choice, to ensure that parameters are accessed by _key_ and not by order. This is to prevent mistakes due to missing parameters or parameter changes.
-* The JS engine has access to `storage` and `console`.
-
-#### Security considerations
-
-##### Security of ruleset
-
-Some security precautions can be made, such as:
-
-* Never load `ruleset.js` unless the file is `readonly` (`r-??-??-?`). If the user wishes to modify the ruleset, he must make it writeable and then set back to readonly.
- * This is to prevent attacks where files are dropped on the users disk.
-* Since we're going to have to have some form of secure storage (not defined in this section), we could also store the `sha3` of the `ruleset.js` file in there.
- * If the user wishes to modify the ruleset, he'd then have to perform e.g. `signer --attest /path/to/ruleset --credential `
-
-##### Security of implementation
-
-The drawbacks of this very flexible solution is that the `signer` needs to contain a javascript engine. This is pretty simple to implement, since it's already
-implemented for `geth`. There are no known security vulnerabilities in, nor have we had any security-problems with it so far.
-
-The javascript engine would be an added attack surface; but if the validation of `rulesets` is made good (with hash-based attestation), the actual javascript cannot be considered
-an attack surface -- if an attacker can control the ruleset, a much simpler attack would be to implement an "always-approve" rule instead of exploiting the js vm. The only benefit
-to be gained from attacking the actual `signer` process from the `js` side would be if it could somehow extract cryptographic keys from memory.
-
-##### Security in usability
-
-Javascript is flexible, but also easy to get wrong, especially when users assume that `js` can handle large integers natively. Typical errors
-include trying to multiply `gasCost` with `gas` without using `bigint`:s.
-
-It's unclear whether any other DSL could be more secure; since there's always the possibility of erroneously implementing a rule.
-
-
-## Credential management
-
-The ability to auto-approve transaction means that the signer needs to have necessary credentials to decrypt keyfiles. These passwords are hereafter called `ksp` (keystore pass).
-
-### Example implementation
-
-Upon startup of the signer, the signer is given a switch: `--seed `
-The `seed` contains a blob of bytes, which is the master seed for the `signer`.
-
-The `signer` uses the `seed` to:
-
-* Generate the `path` where the settings are stored.
- * `./settings/1df094eb-c2b1-4689-90dd-790046d38025/vault.dat`
- * `./settings/1df094eb-c2b1-4689-90dd-790046d38025/rules.js`
-* Generate the encryption password for `vault.dat`.
-
-The `vault.dat` would be an encrypted container storing the following information:
-
-* `ksp` entries
-* `sha256` hash of `rules.js`
-* Information about pair:ed callers (not yet specified)
-
-### Security considerations
-
-This would leave it up to the user to ensure that the `path/to/masterseed` is handled in a secure way. It's difficult to get around this, although one could
-imagine leveraging OS-level keychains where supported. The setup is however in general similar to how ssh-keys are stored in `.ssh/`.
-
-
-# Implementation status
-
-This is now implemented (with ephemeral non-encrypted storage for now, so not yet enabled).
-
-## Example 1: ruleset for a rate-limited window
-
-
-```js
-function big(str) {
- if (str.slice(0, 2) == "0x") {
- return new BigNumber(str.slice(2), 16)
- }
- return new BigNumber(str)
-}
-
-// Time window: 1 week
-var window = 1000* 3600*24*7;
-
-// Limit : 1 ether
-var limit = new BigNumber("1e18");
-
-function isLimitOk(transaction) {
- var value = big(transaction.value)
- // Start of our window function
- var windowstart = new Date().getTime() - window;
-
- var txs = [];
- var stored = storage.get('txs');
-
- if (stored != "") {
- txs = JSON.parse(stored)
- }
- // First, remove all that have passed out of the time-window
- var newtxs = txs.filter(function(tx){return tx.tstamp > windowstart});
- console.log(txs, newtxs.length);
-
- // Secondly, aggregate the current sum
- sum = new BigNumber(0)
-
- sum = newtxs.reduce(function(agg, tx){ return big(tx.value).plus(agg)}, sum);
- console.log("ApproveTx > Sum so far", sum);
- console.log("ApproveTx > Requested", value.toNumber());
-
- // Would we exceed weekly limit ?
- return sum.plus(value).lt(limit)
-
-}
-function ApproveTx(r) {
- if (isLimitOk(r.transaction)) {
- return "Approve"
- }
- return "Nope"
-}
-
-/**
-* OnApprovedTx(str) is called when a transaction has been approved and signed. The parameter
- * 'response_str' contains the return value that will be sent to the external caller.
-* The return value from this method is ignore - the reason for having this callback is to allow the
-* ruleset to keep track of approved transactions.
-*
-* When implementing rate-limited rules, this callback should be used.
-* If a rule responds with neither 'Approve' nor 'Reject' - the tx goes to manual processing. If the user
-* then accepts the transaction, this method will be called.
-*
-* TLDR; Use this method to keep track of signed transactions, instead of using the data in ApproveTx.
-*/
-function OnApprovedTx(resp) {
- var value = big(resp.tx.value)
- var txs = []
- // Load stored transactions
- var stored = storage.get('txs');
- if (stored != "") {
- txs = JSON.parse(stored)
- }
- // Add this to the storage
- txs.push({tstamp: new Date().getTime(), value: value});
- storage.put("txs", JSON.stringify(txs));
-}
-```
-
-## Example 2: allow destination
-
-```js
-function ApproveTx(r) {
- if (r.transaction.from.toLowerCase() == "0x0000000000000000000000000000000000001337") {
- return "Approve"
- }
- if (r.transaction.from.toLowerCase() == "0x000000000000000000000000000000000000dead") {
- return "Reject"
- }
- // Otherwise goes to manual processing
-}
-```
-
-## Example 3: Allow listing
-
-```js
-function ApproveListing() {
- return "Approve"
-}
-```
diff --git a/cmd/clef/run_test.go b/cmd/clef/run_test.go
deleted file mode 100644
index 5fa6e02e14..0000000000
--- a/cmd/clef/run_test.go
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2022 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "fmt"
- "os"
- "testing"
-
- "github.com/ethereum/go-ethereum/internal/cmdtest"
- "github.com/ethereum/go-ethereum/internal/reexec"
-)
-
-const registeredName = "clef-test"
-
-type testproc struct {
- *cmdtest.TestCmd
-
- // template variables for expect
- Datadir string
- Etherbase string
-}
-
-func init() {
- reexec.Register(registeredName, func() {
- if err := app.Run(os.Args); err != nil {
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
- }
- os.Exit(0)
- })
-}
-
-func TestMain(m *testing.M) {
- // check if we have been reexec'd
- if reexec.Init() {
- return
- }
- os.Exit(m.Run())
-}
-
-// runClef spawns clef with the given command line args and adds keystore arg.
-// This method creates a temporary keystore folder which will be removed after
-// the test exits.
-func runClef(t *testing.T, args ...string) *testproc {
- ddir, err := os.MkdirTemp("", "cleftest-*")
- if err != nil {
- return nil
- }
- t.Cleanup(func() {
- os.RemoveAll(ddir)
- })
- return runWithKeystore(t, ddir, args...)
-}
-
-// runWithKeystore spawns clef with the given command line args and adds keystore arg.
-// This method does _not_ create the keystore folder, but it _does_ add the arg
-// to the args.
-func runWithKeystore(t *testing.T, keystore string, args ...string) *testproc {
- args = append([]string{"--keystore", keystore}, args...)
- tt := &testproc{Datadir: keystore}
- tt.TestCmd = cmdtest.NewTestCmd(t, tt)
- // Boot "clef". This actually runs the test binary but the TestMain
- // function will prevent any tests from running.
- tt.Run(registeredName, args...)
- return tt
-}
-
-func (proc *testproc) input(text string) *testproc {
- proc.TestCmd.InputLine(text)
- return proc
-}
-
-/*
-// waitForEndpoint waits for the rpc endpoint to appear, or
-// aborts after 3 seconds.
-func (proc *testproc) waitForEndpoint(t *testing.T) *testproc {
- t.Helper()
- timeout := 3 * time.Second
- ipc := filepath.Join(proc.Datadir, "clef.ipc")
-
- start := time.Now()
- for time.Since(start) < timeout {
- if _, err := os.Stat(ipc); !errors.Is(err, os.ErrNotExist) {
- t.Logf("endpoint %v opened", ipc)
- return proc
- }
- time.Sleep(200 * time.Millisecond)
- }
- t.Logf("stderr: \n%v", proc.StderrText())
- t.Logf("stdout: \n%v", proc.Output())
- t.Fatal("endpoint", ipc, "did not open within", timeout)
- return proc
-}
-*/
diff --git a/cmd/clef/sign_flow.png b/cmd/clef/sign_flow.png
deleted file mode 100644
index e7010ab43f..0000000000
Binary files a/cmd/clef/sign_flow.png and /dev/null differ
diff --git a/cmd/clef/testdata/sign_1559_missing_field_exp_fail.json b/cmd/clef/testdata/sign_1559_missing_field_exp_fail.json
deleted file mode 100644
index c5a1336860..0000000000
--- a/cmd/clef/testdata/sign_1559_missing_field_exp_fail.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "jsonrpc": "2.0",
- "method": "account_signTransaction",
- "params": [
- {
- "from": "0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192",
- "to": "0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192",
- "gas": "0x333",
- "maxFeePerGas": "0x123",
- "nonce": "0x0",
- "value": "0x10",
- "data": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"
- }
- ],
- "id": 67
-}
diff --git a/cmd/clef/testdata/sign_1559_missing_maxfeepergas_exp_fail.json b/cmd/clef/testdata/sign_1559_missing_maxfeepergas_exp_fail.json
deleted file mode 100644
index df69231d7e..0000000000
--- a/cmd/clef/testdata/sign_1559_missing_maxfeepergas_exp_fail.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "jsonrpc": "2.0",
- "method": "account_signTransaction",
- "params": [
- {
- "from": "0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192",
- "to": "0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192",
- "gas": "0x333",
- "maxPriorityFeePerGas": "0x123",
- "nonce": "0x0",
- "value": "0x10",
- "data": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"
- }
- ],
- "id": 67
-}
diff --git a/cmd/clef/testdata/sign_1559_tx.json b/cmd/clef/testdata/sign_1559_tx.json
deleted file mode 100644
index 29355f6cf5..0000000000
--- a/cmd/clef/testdata/sign_1559_tx.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "jsonrpc": "2.0",
- "method": "account_signTransaction",
- "params": [
- {
- "from": "0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192",
- "to": "0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192",
- "gas": "0x333",
- "maxPriorityFeePerGas": "0x123",
- "maxFeePerGas": "0x123",
- "nonce": "0x0",
- "value": "0x10",
- "data": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"
- }
- ],
- "id": 67
-}
diff --git a/cmd/clef/testdata/sign_bad_checksum_exp_fail.json b/cmd/clef/testdata/sign_bad_checksum_exp_fail.json
deleted file mode 100644
index 21ba7b3fc0..0000000000
--- a/cmd/clef/testdata/sign_bad_checksum_exp_fail.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "jsonrpc": "2.0",
- "method": "account_signTransaction",
- "params": [
- {
- "from":"0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192",
- "to":"0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192",
- "gas": "0x333",
- "gasPrice": "0x123",
- "nonce": "0x0",
- "value": "0x10",
- "data":
- "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"
- }
- ],
- "id": 67
-}
diff --git a/cmd/clef/testdata/sign_normal_exp_ok.json b/cmd/clef/testdata/sign_normal_exp_ok.json
deleted file mode 100644
index 7f3a9202a0..0000000000
--- a/cmd/clef/testdata/sign_normal_exp_ok.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "jsonrpc": "2.0",
- "method": "account_signTransaction",
- "params": [
- {
- "from":"0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192",
- "to":"0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192",
- "gas": "0x333",
- "gasPrice": "0x123",
- "nonce": "0x0",
- "value": "0x10",
- "data":
- "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"
- }
- ],
- "id": 67
-}
diff --git a/cmd/clef/tests/testsigner.js b/cmd/clef/tests/testsigner.js
deleted file mode 100644
index 258679de50..0000000000
--- a/cmd/clef/tests/testsigner.js
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2019 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-// This file is a test-utility for testing clef-functionality
-//
-// Start clef with
-//
-// build/bin/clef --4bytedb=./cmd/clef/4byte.json --rpc
-//
-// Start geth with
-//
-// build/bin/geth --nodiscover --maxpeers 0 --signer http://localhost:8550 console --preload=cmd/clef/tests/testsigner.js
-//
-// and in the console simply invoke
-//
-// > test()
-//
-// You can reload the file via `reload()`
-
-function reload(){
- loadScript("./cmd/clef/tests/testsigner.js");
-}
-
-function init(){
- if (typeof accts == 'undefined' || accts.length == 0){
- accts = eth.accounts
- console.log("Got accounts ", accts);
- }
-}
-init()
-function testTx(){
- if( accts && accts.length > 0) {
- var a = accts[0]
- var txdata = eth.signTransaction({from: a, to: a, value: 1, nonce: 1, gas: 1, gasPrice: 1})
- var v = parseInt(txdata.tx.v)
- console.log("V value: ", v)
- if (v == 37 || v == 38){
- console.log("Mainnet 155-protected chainid was used")
- }
- if (v == 27 || v == 28){
- throw new Error("Mainnet chainid was used, but without replay protection!")
- }
- }
-}
-function testSignText(){
- if( accts && accts.length > 0){
- var a = accts[0]
- var r = eth.sign(a, "0x68656c6c6f20776f726c64"); //hello world
- console.log("signing response", r)
- }
-}
-function testClique(){
- if( accts && accts.length > 0){
- var a = accts[0]
- var r = debug.testSignCliqueBlock(a, 0); // Sign genesis
- console.log("signing response", r)
- if( a != r){
- throw new Error("Requested signing by "+a+ " but got sealer "+r)
- }
- }
-}
-
-function test(){
- var tests = [
- testTx,
- testSignText,
- testClique,
- ]
- for( i in tests){
- try{
- tests[i]()
- }catch(err){
- console.log(err)
- }
- }
- }
diff --git a/cmd/clef/tutorial.md b/cmd/clef/tutorial.md
deleted file mode 100644
index 3ea662b5d4..0000000000
--- a/cmd/clef/tutorial.md
+++ /dev/null
@@ -1,353 +0,0 @@
-## Initializing Clef
-
-First things first, Clef needs to store some data itself. Since that data might be sensitive (passwords, signing rules, accounts), Clef's entire storage is encrypted. To support encrypting data, the first step is to initialize Clef with a random master seed, itself too encrypted with your chosen password:
-
-```text
-$ clef init
-
-WARNING!
-
-Clef is an account management tool. It may, like any software, contain bugs.
-
-Please take care to
-- backup your keystore files,
-- verify that the keystore(s) can be opened with your password.
-
-Clef is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
-without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU General Public License for more details.
-
-Enter 'ok' to proceed:
-> ok
-
-The master seed of clef will be locked with a password.
-Please specify a password. Do not forget this password!
-Password:
-Repeat password:
-
-A master seed has been generated into /home/martin/.clef/masterseed.json
-
-This is required to be able to store credentials, such as:
-* Passwords for keystores (used by rule engine)
-* Storage for JavaScript auto-signing rules
-* Hash of JavaScript rule-file
-
-You should treat 'masterseed.json' with utmost secrecy and make a backup of it!
-* The password is necessary but not enough, you need to back up the master seed too!
-* The master seed does not contain your accounts, those need to be backed up separately!
-```
-
-*For readability purposes, we'll remove the WARNING printout, user confirmation and the unlocking of the master seed in the rest of this document.*
-
-## Remote interactions
-
-Clef is capable of managing both key-file based accounts as well as hardware wallets. To evaluate clef, we're going to point it to our Rinkeby testnet keystore and specify the Rinkeby chain ID for signing (Clef doesn't have a backing chain, so it doesn't know what network it runs on).
-
-```text
-$ clef --keystore ~/.ethereum/rinkeby/keystore --chainid 4
-
-INFO [07-01|11:00:46.385] Starting signer chainid=4 keystore=$HOME/.ethereum/rinkeby/keystore light-kdf=false advanced=false
-DEBUG[07-01|11:00:46.389] FS scan times list=3.521941ms set=9.017µs diff=4.112µs
-DEBUG[07-01|11:00:46.391] Ledger support enabled
-DEBUG[07-01|11:00:46.391] Trezor support enabled via HID
-DEBUG[07-01|11:00:46.391] Trezor support enabled via WebUSB
-INFO [07-01|11:00:46.391] Audit logs configured file=audit.log
-DEBUG[07-01|11:00:46.392] IPC registered namespace=account
-INFO [07-01|11:00:46.392] IPC endpoint opened url=$HOME/.clef/clef.ipc
-------- Signer info -------
-* intapi_version : 7.0.0
-* extapi_version : 6.0.0
-* extapi_http : n/a
-* extapi_ipc : $HOME/.clef/clef.ipc
-```
-
-By default, Clef starts up in CLI (Command Line Interface) mode. Arbitrary remote processes may *request* account interactions (e.g. sign a transaction), which the user will need to individually *confirm*.
-
-To test this out, we can *request* Clef to list all account via its *External API endpoint*:
-
-```text
-echo '{"id": 1, "jsonrpc": "2.0", "method": "account_list"}' | nc -U ~/.clef/clef.ipc
-```
-
-This will prompt the user within the Clef CLI to confirm or deny the request:
-
-```text
--------- List Account request--------------
-A request has been made to list all accounts.
-You can select which accounts the caller can see
- [x] 0xD9C9Cd5f6779558b6e0eD4e6Acf6b1947E7fA1F3
- URL: keystore://$HOME/.ethereum/rinkeby/keystore/UTC--2017-04-14T15-15-00.327614556Z--d9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3
- [x] 0x086278A6C067775F71d6B2BB1856Db6E28c30418
- URL: keystore://$HOME/.ethereum/rinkeby/keystore/UTC--2018-02-06T22-53-11.211657239Z--086278a6c067775f71d6b2bb1856db6e28c30418
--------------------------------------------
-Request context:
- NA -> NA -> NA
-
-Additional HTTP header data, provided by the external caller:
- User-Agent:
- Origin:
-Approve? [y/N]:
->
-```
-
-Depending on whether we approve or deny the request, the original NetCat process will get:
-
-```text
-{"jsonrpc":"2.0","id":1,"result":["0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3","0x086278a6c067775f71d6b2bb1856db6e28c30418"]}
-
-or
-
-{"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"Request denied"}}
-```
-
-Apart from listing accounts, you can also *request* creating a new account; signing transactions and data; and recovering signatures. You can find the available methods in the Clef [External API Spec](https://github.com/ethereum/go-ethereum/tree/master/cmd/clef#external-api-1) and the [External API Changelog](https://github.com/ethereum/go-ethereum/blob/master/cmd/clef/extapi_changelog.md).
-
-*Note, the number of things you can do from the External API is deliberately small, since we want to limit the power of remote calls by as much as possible! Clef has an [Internal API](https://github.com/ethereum/go-ethereum/tree/master/cmd/clef#ui-api-1) too for the UI (User Interface) which is much richer and can support custom interfaces on top. But that's out of scope here.*
-
-## Automatic rules
-
-For most users, manually confirming every transaction is the way to go. However, there are cases when it makes sense to set up some rules which permit Clef to sign a transaction without prompting the user. One such example would be running a signer on Rinkeby or other PoA networks.
-
-For starters, we can create a rule file that automatically permits anyone to list our available accounts without user confirmation. The rule file is a tiny JavaScript snippet that you can program however you want:
-
-```js
-function ApproveListing() {
- return "Approve"
-}
-```
-
-Of course, Clef isn't going to just accept and run arbitrary scripts you give it, that would be dangerous if someone changes your rule file! Instead, you need to explicitly *attest* the rule file, which entails injecting its hash into Clef's secure store.
-
-```text
-$ sha256sum rules.js
-645b58e4f945e24d0221714ff29f6aa8e860382ced43490529db1695f5fcc71c rules.js
-
-$ clef attest 645b58e4f945e24d0221714ff29f6aa8e860382ced43490529db1695f5fcc71c
-Decrypt master seed of clef
-Password:
-INFO [07-01|13:25:03.290] Ruleset attestation updated sha256=645b58e4f945e24d0221714ff29f6aa8e860382ced43490529db1695f5fcc71c
-```
-
-At this point, we can start Clef with the rule file:
-
-```text
-$ clef --keystore ~/.ethereum/rinkeby/keystore --chainid 4 --rules rules.js
-
-INFO [07-01|13:39:49.726] Rule engine configured file=rules.js
-INFO [07-01|13:39:49.726] Starting signer chainid=4 keystore=$HOME/.ethereum/rinkeby/keystore light-kdf=false advanced=false
-DEBUG[07-01|13:39:49.726] FS scan times list=35.15µs set=4.251µs diff=2.766µs
-DEBUG[07-01|13:39:49.727] Ledger support enabled
-DEBUG[07-01|13:39:49.727] Trezor support enabled via HID
-DEBUG[07-01|13:39:49.727] Trezor support enabled via WebUSB
-INFO [07-01|13:39:49.728] Audit logs configured file=audit.log
-DEBUG[07-01|13:39:49.728] IPC registered namespace=account
-INFO [07-01|13:39:49.728] IPC endpoint opened url=$HOME/.clef/clef.ipc
-------- Signer info -------
-* intapi_version : 7.0.0
-* extapi_version : 6.0.0
-* extapi_http : n/a
-* extapi_ipc : $HOME/.clef/clef.ipc
-```
-
-Any account listing *request* will now be auto-approved by the rule file:
-
-```text
-$ echo '{"id": 1, "jsonrpc": "2.0", "method": "account_list"}' | nc -U ~/.clef/clef.ipc
-{"jsonrpc":"2.0","id":1,"result":["0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3","0x086278a6c067775f71d6b2bb1856db6e28c30418"]}
-```
-
-## Under the hood
-
-While doing the operations above, these files have been created:
-
-```text
-$ ls -laR ~/.clef/
-
-$HOME/.clef/:
-total 24
-drwxr-x--x 3 user user 4096 Jul 1 13:45 .
-drwxr-xr-x 102 user user 12288 Jul 1 13:39 ..
-drwx------ 2 user user 4096 Jul 1 13:25 02f90c0603f4f2f60188
--r-------- 1 user user 868 Jun 28 13:55 masterseed.json
-
-$HOME/.clef/02f90c0603f4f2f60188:
-total 12
-drwx------ 2 user user 4096 Jul 1 13:25 .
-drwxr-x--x 3 user user 4096 Jul 1 13:45 ..
--rw------- 1 user user 159 Jul 1 13:25 config.json
-
-$ cat ~/.clef/02f90c0603f4f2f60188/config.json
-{"ruleset_sha256":{"iv":"SWWEtnl+R+I+wfG7","c":"I3fjmwmamxVcfGax7D0MdUOL29/rBWcs73WBILmYK0o1CrX7wSMc3y37KsmtlZUAjp0oItYq01Ow8VGUOzilG91tDHInB5YHNtm/YkufEbo="}}
-```
-
-In `$HOME/.clef`, the `masterseed.json` file was created, containing the master seed. This seed was then used to derive a few other things:
-
-- **Vault location**: in this case `02f90c0603f4f2f60188`.
- - If you use a different master seed, a different vault location will be used that does not conflict with each other (e.g. `clef --signersecret /path/to/file`). This allows you to run multiple instances of Clef, each with its own rules (e.g. mainnet + testnet).
-- **`config.json`**: the encrypted key/value storage for configuration data, currently only containing the key `ruleset_sha256`, the attested hash of the automatic rules to use.
-
-## Advanced rules
-
-In order to make more useful rules - like signing transactions - the signer needs access to the passwords needed to unlock keys from the keystore. You can inject an unlock password via `clef setpw`.
-
-```text
-$ clef setpw 0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3
-
-Please enter a password to store for this address:
-Password:
-Repeat password:
-
-Decrypt master seed of clef
-Password:
-INFO [07-01|14:05:56.031] Credential store updated key=0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3
-```
-
-Now let's update the rules to make use of the new credentials:
-
-```js
-function ApproveListing() {
- return "Approve"
-}
-
-function ApproveSignData(req) {
- if (req.address.toLowerCase() == "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3") {
- if (req.messages[0].value.indexOf("bazonk") >= 0) {
- return "Approve"
- }
- return "Reject"
- }
- // Otherwise goes to manual processing
-}
-```
-
-In this example:
-
-- Any requests to sign data with the account `0xd9c9...` will be:
- - Auto-approved if the message contains `bazonk`,
- - Auto-rejected if the message does not contain `bazonk`,
-- Any other requests will be passed along for manual confirmation.
-
-*Note, to make this example work, please use you own accounts. You can create a new account either via Clef or the traditional account CLI tools. If the latter was chosen, make sure both Clef and Geth use the same keystore by specifying `--keystore path/to/your/keystore` when running Clef.*
-
-Attest the new rule file so that Clef will accept loading it:
-
-```text
-$ sha256sum rules.js
-f163a1738b649259bb9b369c593fdc4c6b6f86cc87e343c3ba58faee03c2a178 rules.js
-
-$ clef attest f163a1738b649259bb9b369c593fdc4c6b6f86cc87e343c3ba58faee03c2a178
-Decrypt master seed of clef
-Password:
-INFO [07-01|14:11:28.509] Ruleset attestation updated sha256=f163a1738b649259bb9b369c593fdc4c6b6f86cc87e343c3ba58faee03c2a178
-```
-
-Restart Clef with the new rules in place:
-
-```
-$ clef --keystore ~/.ethereum/rinkeby/keystore --chainid 4 --rules rules.js
-
-INFO [07-01|14:12:41.636] Rule engine configured file=rules.js
-INFO [07-01|14:12:41.636] Starting signer chainid=4 keystore=$HOME/.ethereum/rinkeby/keystore light-kdf=false advanced=false
-DEBUG[07-01|14:12:41.636] FS scan times list=46.722µs set=4.47µs diff=2.157µs
-DEBUG[07-01|14:12:41.637] Ledger support enabled
-DEBUG[07-01|14:12:41.637] Trezor support enabled via HID
-DEBUG[07-01|14:12:41.638] Trezor support enabled via WebUSB
-INFO [07-01|14:12:41.638] Audit logs configured file=audit.log
-DEBUG[07-01|14:12:41.638] IPC registered namespace=account
-INFO [07-01|14:12:41.638] IPC endpoint opened url=$HOME/.clef/clef.ipc
-------- Signer info -------
-* intapi_version : 7.0.0
-* extapi_version : 6.0.0
-* extapi_http : n/a
-* extapi_ipc : $HOME/.clef/clef.ipc
-```
-
-Then test signing, once with `bazonk` and once without:
-
-```
-$ echo '{"id": 1, "jsonrpc":"2.0", "method":"account_signData", "params":["data/plain", "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3", "0x202062617a6f6e6b2062617a2067617a0a"]}' | nc -U ~/.clef/clef.ipc
-{"jsonrpc":"2.0","id":1,"result":"0x4f93e3457027f6be99b06b3392d0ebc60615ba448bb7544687ef1248dea4f5317f789002df783979c417d969836b6fda3710f5bffb296b4d51c8aaae6e2ac4831c"}
-
-$ echo '{"id": 1, "jsonrpc":"2.0", "method":"account_signData", "params":["data/plain", "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3", "0x2020626f6e6b2062617a2067617a0a"]}' | nc -U ~/.clef/clef.ipc
-{"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"Request denied"}}
-```
-
-Meanwhile, in the Clef output log you can see:
-```text
-INFO [02-21|14:42:41] Op approved
-INFO [02-21|14:42:56] Op rejected
-```
-
-The signer also stores all traffic over the external API in a log file. The last 4 lines shows the two requests and their responses:
-
-```text
-$ tail -n 4 audit.log
-t=2019-07-01T15:52:14+0300 lvl=info msg=SignData api=signer type=request metadata="{\"remote\":\"NA\",\"local\":\"NA\",\"scheme\":\"NA\",\"User-Agent\":\"\",\"Origin\":\"\"}" addr="0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3 [chksum INVALID]" data=0x202062617a6f6e6b2062617a2067617a0a content-type=data/plain
-t=2019-07-01T15:52:14+0300 lvl=info msg=SignData api=signer type=response data=4f93e3457027f6be99b06b3392d0ebc60615ba448bb7544687ef1248dea4f5317f789002df783979c417d969836b6fda3710f5bffb296b4d51c8aaae6e2ac4831c error=nil
-t=2019-07-01T15:52:23+0300 lvl=info msg=SignData api=signer type=request metadata="{\"remote\":\"NA\",\"local\":\"NA\",\"scheme\":\"NA\",\"User-Agent\":\"\",\"Origin\":\"\"}" addr="0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3 [chksum INVALID]" data=0x2020626f6e6b2062617a2067617a0a content-type=data/plain
-t=2019-07-01T15:52:23+0300 lvl=info msg=SignData api=signer type=response data= error="Request denied"
-```
-
-For more details on writing automatic rules, please see the [rules spec](https://github.com/ethereum/go-ethereum/blob/master/cmd/clef/rules.md).
-
-## Geth integration
-
-Of course, as awesome as Clef is, it's not feasible to interact with it via JSON RPC by hand. Long term, we're hoping to convince the general Ethereum community to support Clef as a general signer (it's only 3-5 methods), thus allowing your favorite DApp, Metamask, MyCrypto, etc to request signatures directly.
-
-Until then however, we're trying to pave the way via Geth. Geth v1.9.0 has built in support via `--signer ` for using a local or remote Clef instance as an account backend!
-
-We can try this by running Clef with our previous rules on Rinkeby (for now it's a good idea to allow auto-listing accounts, since Geth likes to retrieve them once in a while).
-
-```text
-$ clef --keystore ~/.ethereum/rinkeby/keystore --chainid 4 --rules rules.js
-```
-
-In a different window we can start Geth, list our accounts, even list our wallets to see where the accounts originate from:
-
-```text
-$ geth --rinkeby --signer=~/.clef/clef.ipc console
-
-> eth.accounts
-["0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3", "0x086278a6c067775f71d6b2bb1856db6e28c30418"]
-
-> personal.listWallets
-[{
- accounts: [{
- address: "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3",
- url: "extapi://$HOME/.clef/clef.ipc"
- }, {
- address: "0x086278a6c067775f71d6b2bb1856db6e28c30418",
- url: "extapi://$HOME/.clef/clef.ipc"
- }],
- status: "ok [version=6.0.0]",
- url: "extapi://$HOME/.clef/clef.ipc"
-}]
-
-> eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[0]})
-```
-
-Lastly, when we requested a transaction to be sent, Clef prompted us in the original window to approve it:
-
-```text
---------- Transaction request-------------
-to: 0xD9C9Cd5f6779558b6e0eD4e6Acf6b1947E7fA1F3
-from: 0xD9C9Cd5f6779558b6e0eD4e6Acf6b1947E7fA1F3 [chksum ok]
-value: 0 wei
-gas: 0x5208 (21000)
-gasprice: 1000000000 wei
-nonce: 0x2366 (9062)
-
-Request context:
- NA -> NA -> NA
-
-Additional HTTP header data, provided by the external caller:
- User-Agent:
- Origin:
--------------------------------------------
-Approve? [y/N]:
-> y
-```
-
-:boom:
-
-*Note, if you enable the external signer backend in Geth, all other account management is disabled. This is because long term we want to remove account management from Geth.*
diff --git a/cmd/devp2p/README.md b/cmd/devp2p/README.md
deleted file mode 100644
index 284dfe0a45..0000000000
--- a/cmd/devp2p/README.md
+++ /dev/null
@@ -1,141 +0,0 @@
-# The devp2p command
-
-The devp2p command line tool is a utility for low-level peer-to-peer debugging and
-protocol development purposes. It can do many things.
-
-### ENR Decoding
-
-Use `devp2p enrdump ` to verify and display an Ethereum Node Record.
-
-### Node Key Management
-
-The `devp2p key ...` command family deals with node key files.
-
-Run `devp2p key generate mynode.key` to create a new node key in the `mynode.key` file.
-
-Run `devp2p key to-enode mynode.key -ip 127.0.0.1 -tcp 30303` to create an enode:// URL
-corresponding to the given node key and address information.
-
-### Maintaining DNS Discovery Node Lists
-
-The devp2p command can create and publish DNS discovery node lists.
-
-Run `devp2p dns sign ` to update the signature of a DNS discovery tree.
-
-Run `devp2p dns sync ` to download a complete DNS discovery tree.
-
-Run `devp2p dns to-cloudflare ` to publish a tree to CloudFlare DNS.
-
-Run `devp2p dns to-route53 ` to publish a tree to Amazon Route53.
-
-You can find more information about these commands in the [DNS Discovery Setup Guide][dns-tutorial].
-
-### Node Set Utilities
-
-There are several commands for working with JSON node set files. These files are generated
-by the discovery crawlers and DNS client commands. Node sets also used as the input of the
-DNS deployer commands.
-
-Run `devp2p nodeset info ` to display statistics of a node set.
-
-Run `devp2p nodeset filter ` to write a new, filtered node
-set to standard output. The following filters are supported:
-
-- `-limit ` limits the output set to N entries, taking the top N nodes by score
-- `-ip ` filters nodes by IP subnet
-- `-min-age ` filters nodes by 'first seen' time
-- `-eth-network ` filters nodes by "eth" ENR entry
-- `-les-server` filters nodes by LES server support
-- `-snap` filters nodes by snap protocol support
-
-For example, given a node set in `nodes.json`, you could create a filtered set containing
-up to 20 eth mainnet nodes which also support snap sync using this command:
-
- devp2p nodeset filter nodes.json -eth-network mainnet -snap -limit 20
-
-### Discovery v4 Utilities
-
-The `devp2p discv4 ...` command family deals with the [Node Discovery v4][discv4]
-protocol.
-
-Run `devp2p discv4 ping ` to ping a node.
-
-Run `devp2p discv4 resolve ` to find the most recent node record of a node in
-the DHT.
-
-Run `devp2p discv4 crawl ` to create or update a JSON node set.
-
-### Discovery v5 Utilities
-
-The `devp2p discv5 ...` command family deals with the [Node Discovery v5][discv5]
-protocol. This protocol is currently under active development.
-
-Run `devp2p discv5 ping ` to ping a node.
-
-Run `devp2p discv5 resolve ` to find the most recent node record of a node in
-the discv5 DHT.
-
-Run `devp2p discv5 listen` to run a Discovery v5 node.
-
-Run `devp2p discv5 crawl ` to create or update a JSON node set containing
-discv5 nodes.
-
-### Discovery Test Suites
-
-The devp2p command also contains interactive test suites for Discovery v4 and Discovery
-v5.
-
-To run these tests against your implementation, you need to set up a networking
-environment where two separate UDP listening addresses are available on the same machine.
-The two listening addresses must also be routed such that they are able to reach the node
-you want to test.
-
-For example, if you want to run the test on your local host, and the node under test is
-also on the local host, you need to assign two IP addresses (or a larger range) to your
-loopback interface. On macOS, this can be done by executing the following command:
-
- sudo ifconfig lo0 add 127.0.0.2
-
-You can now run either test suite as follows: Start the node under test first, ensuring
-that it won't talk to the Internet (i.e. disable bootstrapping). An easy way to prevent
-unintended connections to the global DHT is listening on `127.0.0.1`.
-
-Now get the ENR of your node and store it in the `NODE` environment variable.
-
-Start the test by running `devp2p discv5 test -listen1 127.0.0.1 -listen2 127.0.0.2 $NODE`.
-
-### Eth Protocol Test Suite
-
-The Eth Protocol test suite is a conformance test suite for the [eth protocol][eth].
-
-To run the eth protocol test suite against your implementation, the node needs to be initialized
-with our test chain. The chain files are located in `./cmd/devp2p/internal/ethtest/testdata`.
-
-1. initialize the geth node with the `genesis.json` file
-2. import blocks from `chain.rlp`
-3. run the client using the resulting database. For geth, use a command like the one below:
-
- geth \
- --datadir \
- --nodiscover \
- --nat=none \
- --networkid 3503995874084926 \
- --verbosity 5 \
- --authrpc.jwtsecret 0x7365637265747365637265747365637265747365637265747365637265747365
-
-Note that the tests also require access to the engine API.
-The test suite can now be executed using the devp2p tool.
-
- devp2p rlpx eth-test \
- --chain internal/ethtest/testdata \
- --node enode://.... \
- --engineapi http://127.0.0.1:8551 \
- --jwtsecret 0x7365637265747365637265747365637265747365637265747365637265747365
-
-Repeat the above process (re-initialising the node) in order to run the Eth Protocol test suite again.
-
-
-[eth]: https://github.com/ethereum/devp2p/blob/master/caps/eth.md
-[dns-tutorial]: https://geth.ethereum.org/docs/developers/geth-developer/dns-discovery-setup
-[discv4]: https://github.com/ethereum/devp2p/tree/master/discv4.md
-[discv5]: https://github.com/ethereum/devp2p/tree/master/discv5/discv5.md
diff --git a/cmd/devp2p/crawl.go b/cmd/devp2p/crawl.go
deleted file mode 100644
index 4288a5feb8..0000000000
--- a/cmd/devp2p/crawl.go
+++ /dev/null
@@ -1,226 +0,0 @@
-// Copyright 2019 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "errors"
- "sync"
- "sync/atomic"
- "time"
-
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/enode"
-)
-
-type crawler struct {
- input nodeSet
- output nodeSet
- disc resolver
- iters []enode.Iterator
- inputIter enode.Iterator
- ch chan *enode.Node
- closed chan struct{}
-
- // settings
- revalidateInterval time.Duration
- mu sync.RWMutex
-}
-
-const (
- nodeRemoved = iota
- nodeSkipRecent
- nodeSkipIncompat
- nodeAdded
- nodeUpdated
-)
-
-type resolver interface {
- RequestENR(*enode.Node) (*enode.Node, error)
-}
-
-func newCrawler(input nodeSet, bootnodes []*enode.Node, disc resolver, iters ...enode.Iterator) (*crawler, error) {
- if len(input) == 0 {
- input.add(bootnodes...)
- }
- if len(input) == 0 {
- return nil, errors.New("no input nodes to start crawling")
- }
-
- c := &crawler{
- input: input,
- output: make(nodeSet, len(input)),
- disc: disc,
- iters: iters,
- inputIter: enode.IterNodes(input.nodes()),
- ch: make(chan *enode.Node),
- closed: make(chan struct{}),
- }
- c.iters = append(c.iters, c.inputIter)
- // Copy input to output initially. Any nodes that fail validation
- // will be dropped from output during the run.
- for id, n := range input {
- c.output[id] = n
- }
- return c, nil
-}
-
-func (c *crawler) run(timeout time.Duration, nthreads int) nodeSet {
- var (
- timeoutTimer = time.NewTimer(timeout)
- timeoutCh <-chan time.Time
- statusTicker = time.NewTicker(time.Second * 8)
- doneCh = make(chan enode.Iterator, len(c.iters))
- liveIters = len(c.iters)
- )
- if nthreads < 1 {
- nthreads = 1
- }
- defer timeoutTimer.Stop()
- defer statusTicker.Stop()
- for _, it := range c.iters {
- go c.runIterator(doneCh, it)
- }
- var (
- added atomic.Uint64
- updated atomic.Uint64
- skipped atomic.Uint64
- recent atomic.Uint64
- removed atomic.Uint64
- wg sync.WaitGroup
- )
- wg.Add(nthreads)
- for i := 0; i < nthreads; i++ {
- go func() {
- defer wg.Done()
- for {
- select {
- case n := <-c.ch:
- switch c.updateNode(n) {
- case nodeSkipIncompat:
- skipped.Add(1)
- case nodeSkipRecent:
- recent.Add(1)
- case nodeRemoved:
- removed.Add(1)
- case nodeAdded:
- added.Add(1)
- default:
- updated.Add(1)
- }
- case <-c.closed:
- return
- }
- }
- }()
- }
-
-loop:
- for {
- select {
- case it := <-doneCh:
- if it == c.inputIter {
- // Enable timeout when we're done revalidating the input nodes.
- log.Info("Revalidation of input set is done", "len", len(c.input))
- if timeout > 0 {
- timeoutCh = timeoutTimer.C
- }
- }
- if liveIters--; liveIters == 0 {
- break loop
- }
- case <-timeoutCh:
- break loop
- case <-statusTicker.C:
- log.Info("Crawling in progress",
- "added", added.Load(),
- "updated", updated.Load(),
- "removed", removed.Load(),
- "ignored(recent)", recent.Load(),
- "ignored(incompatible)", skipped.Load())
- }
- }
-
- close(c.closed)
- for _, it := range c.iters {
- it.Close()
- }
- for ; liveIters > 0; liveIters-- {
- <-doneCh
- }
- wg.Wait()
- return c.output
-}
-
-func (c *crawler) runIterator(done chan<- enode.Iterator, it enode.Iterator) {
- defer func() { done <- it }()
- for it.Next() {
- select {
- case c.ch <- it.Node():
- case <-c.closed:
- return
- }
- }
-}
-
-// updateNode updates the info about the given node, and returns a status
-// about what changed
-func (c *crawler) updateNode(n *enode.Node) int {
- c.mu.RLock()
- node, ok := c.output[n.ID()]
- c.mu.RUnlock()
-
- // Skip validation of recently-seen nodes.
- if ok && time.Since(node.LastCheck) < c.revalidateInterval {
- return nodeSkipRecent
- }
-
- // Request the node record.
- status := nodeUpdated
- node.LastCheck = truncNow()
- if nn, err := c.disc.RequestENR(n); err != nil {
- if node.Score == 0 {
- // Node doesn't implement EIP-868.
- log.Debug("Skipping node", "id", n.ID())
- return nodeSkipIncompat
- }
- node.Score /= 2
- } else {
- node.N = nn
- node.Seq = nn.Seq()
- node.Score++
- if node.FirstResponse.IsZero() {
- node.FirstResponse = node.LastCheck
- status = nodeAdded
- }
- node.LastResponse = node.LastCheck
- }
- // Store/update node in output set.
- c.mu.Lock()
- defer c.mu.Unlock()
- if node.Score <= 0 {
- log.Debug("Removing node", "id", n.ID())
- delete(c.output, n.ID())
- return nodeRemoved
- }
- log.Debug("Updating node", "id", n.ID(), "seq", n.Seq(), "score", node.Score)
- c.output[n.ID()] = node
- return status
-}
-
-func truncNow() time.Time {
- return time.Now().UTC().Truncate(1 * time.Second)
-}
diff --git a/cmd/devp2p/discv4cmd.go b/cmd/devp2p/discv4cmd.go
deleted file mode 100644
index 45bcdcd367..0000000000
--- a/cmd/devp2p/discv4cmd.go
+++ /dev/null
@@ -1,364 +0,0 @@
-// Copyright 2019 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "errors"
- "fmt"
- "net"
- "strconv"
- "strings"
- "time"
-
- "github.com/ethereum/go-ethereum/cmd/devp2p/internal/v4test"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/p2p/discover"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/params"
- "github.com/urfave/cli/v2"
-)
-
-var (
- discv4Command = &cli.Command{
- Name: "discv4",
- Usage: "Node Discovery v4 tools",
- Subcommands: []*cli.Command{
- discv4PingCommand,
- discv4RequestRecordCommand,
- discv4ResolveCommand,
- discv4ResolveJSONCommand,
- discv4CrawlCommand,
- discv4TestCommand,
- },
- }
- discv4PingCommand = &cli.Command{
- Name: "ping",
- Usage: "Sends ping to a node",
- Action: discv4Ping,
- ArgsUsage: "",
- Flags: discoveryNodeFlags,
- }
- discv4RequestRecordCommand = &cli.Command{
- Name: "requestenr",
- Usage: "Requests a node record using EIP-868 enrRequest",
- Action: discv4RequestRecord,
- ArgsUsage: "",
- Flags: discoveryNodeFlags,
- }
- discv4ResolveCommand = &cli.Command{
- Name: "resolve",
- Usage: "Finds a node in the DHT",
- Action: discv4Resolve,
- ArgsUsage: "",
- Flags: discoveryNodeFlags,
- }
- discv4ResolveJSONCommand = &cli.Command{
- Name: "resolve-json",
- Usage: "Re-resolves nodes in a nodes.json file",
- Action: discv4ResolveJSON,
- Flags: discoveryNodeFlags,
- ArgsUsage: "",
- }
- discv4CrawlCommand = &cli.Command{
- Name: "crawl",
- Usage: "Updates a nodes.json file with random nodes found in the DHT",
- Action: discv4Crawl,
- Flags: flags.Merge(discoveryNodeFlags, []cli.Flag{crawlTimeoutFlag, crawlParallelismFlag}),
- }
- discv4TestCommand = &cli.Command{
- Name: "test",
- Usage: "Runs tests against a node",
- Action: discv4Test,
- Flags: []cli.Flag{
- remoteEnodeFlag,
- testPatternFlag,
- testTAPFlag,
- testListen1Flag,
- testListen2Flag,
- },
- }
-)
-
-var (
- bootnodesFlag = &cli.StringFlag{
- Name: "bootnodes",
- Usage: "Comma separated nodes used for bootstrapping",
- }
- nodekeyFlag = &cli.StringFlag{
- Name: "nodekey",
- Usage: "Hex-encoded node key",
- }
- nodedbFlag = &cli.StringFlag{
- Name: "nodedb",
- Usage: "Nodes database location",
- }
- listenAddrFlag = &cli.StringFlag{
- Name: "addr",
- Usage: "Listening address",
- }
- extAddrFlag = &cli.StringFlag{
- Name: "extaddr",
- Usage: "UDP endpoint announced in ENR. You can provide a bare IP address or IP:port as the value of this flag.",
- }
- crawlTimeoutFlag = &cli.DurationFlag{
- Name: "timeout",
- Usage: "Time limit for the crawl.",
- Value: 30 * time.Minute,
- }
- crawlParallelismFlag = &cli.IntFlag{
- Name: "parallel",
- Usage: "How many parallel discoveries to attempt.",
- Value: 16,
- }
- remoteEnodeFlag = &cli.StringFlag{
- Name: "remote",
- Usage: "Enode of the remote node under test",
- EnvVars: []string{"REMOTE_ENODE"},
- }
-)
-
-var discoveryNodeFlags = []cli.Flag{
- bootnodesFlag,
- nodekeyFlag,
- nodedbFlag,
- listenAddrFlag,
- extAddrFlag,
-}
-
-func discv4Ping(ctx *cli.Context) error {
- n := getNodeArg(ctx)
- disc, _ := startV4(ctx)
- defer disc.Close()
-
- start := time.Now()
- if err := disc.Ping(n); err != nil {
- return fmt.Errorf("node didn't respond: %v", err)
- }
- fmt.Printf("node responded to ping (RTT %v).\n", time.Since(start))
- return nil
-}
-
-func discv4RequestRecord(ctx *cli.Context) error {
- n := getNodeArg(ctx)
- disc, _ := startV4(ctx)
- defer disc.Close()
-
- respN, err := disc.RequestENR(n)
- if err != nil {
- return fmt.Errorf("can't retrieve record: %v", err)
- }
- fmt.Println(respN.String())
- return nil
-}
-
-func discv4Resolve(ctx *cli.Context) error {
- n := getNodeArg(ctx)
- disc, _ := startV4(ctx)
- defer disc.Close()
-
- fmt.Println(disc.Resolve(n).String())
- return nil
-}
-
-func discv4ResolveJSON(ctx *cli.Context) error {
- if ctx.NArg() < 1 {
- return errors.New("need nodes file as argument")
- }
- nodesFile := ctx.Args().Get(0)
- inputSet := make(nodeSet)
- if common.FileExist(nodesFile) {
- inputSet = loadNodesJSON(nodesFile)
- }
-
- // Add extra nodes from command line arguments.
- var nodeargs []*enode.Node
- for i := 1; i < ctx.NArg(); i++ {
- n, err := parseNode(ctx.Args().Get(i))
- if err != nil {
- exit(err)
- }
- nodeargs = append(nodeargs, n)
- }
-
- disc, config := startV4(ctx)
- defer disc.Close()
-
- c, err := newCrawler(inputSet, config.Bootnodes, disc, enode.IterNodes(nodeargs))
- if err != nil {
- return err
- }
- c.revalidateInterval = 0
- output := c.run(0, 1)
- writeNodesJSON(nodesFile, output)
- return nil
-}
-
-func discv4Crawl(ctx *cli.Context) error {
- if ctx.NArg() < 1 {
- return errors.New("need nodes file as argument")
- }
- nodesFile := ctx.Args().First()
- inputSet := make(nodeSet)
- if common.FileExist(nodesFile) {
- inputSet = loadNodesJSON(nodesFile)
- }
-
- disc, config := startV4(ctx)
- defer disc.Close()
-
- c, err := newCrawler(inputSet, config.Bootnodes, disc, disc.RandomNodes())
- if err != nil {
- return err
- }
- c.revalidateInterval = 10 * time.Minute
- output := c.run(ctx.Duration(crawlTimeoutFlag.Name), ctx.Int(crawlParallelismFlag.Name))
- writeNodesJSON(nodesFile, output)
- return nil
-}
-
-// discv4Test runs the protocol test suite.
-func discv4Test(ctx *cli.Context) error {
- // Configure test package globals.
- if !ctx.IsSet(remoteEnodeFlag.Name) {
- return fmt.Errorf("missing -%v", remoteEnodeFlag.Name)
- }
- v4test.Remote = ctx.String(remoteEnodeFlag.Name)
- v4test.Listen1 = ctx.String(testListen1Flag.Name)
- v4test.Listen2 = ctx.String(testListen2Flag.Name)
- return runTests(ctx, v4test.AllTests)
-}
-
-// startV4 starts an ephemeral discovery V4 node.
-func startV4(ctx *cli.Context) (*discover.UDPv4, discover.Config) {
- ln, config := makeDiscoveryConfig(ctx)
- socket := listen(ctx, ln)
- disc, err := discover.ListenV4(socket, ln, config)
- if err != nil {
- exit(err)
- }
- return disc, config
-}
-
-func makeDiscoveryConfig(ctx *cli.Context) (*enode.LocalNode, discover.Config) {
- var cfg discover.Config
-
- if ctx.IsSet(nodekeyFlag.Name) {
- key, err := crypto.HexToECDSA(ctx.String(nodekeyFlag.Name))
- if err != nil {
- exit(fmt.Errorf("-%s: %v", nodekeyFlag.Name, err))
- }
- cfg.PrivateKey = key
- } else {
- cfg.PrivateKey, _ = crypto.GenerateKey()
- }
-
- if commandHasFlag(ctx, bootnodesFlag) {
- bn, err := parseBootnodes(ctx)
- if err != nil {
- exit(err)
- }
- cfg.Bootnodes = bn
- }
-
- dbpath := ctx.String(nodedbFlag.Name)
- db, err := enode.OpenDB(dbpath)
- if err != nil {
- exit(err)
- }
- ln := enode.NewLocalNode(db, cfg.PrivateKey)
- return ln, cfg
-}
-
-func parseExtAddr(spec string) (ip net.IP, port int, ok bool) {
- ip = net.ParseIP(spec)
- if ip != nil {
- return ip, 0, true
- }
- host, portstr, err := net.SplitHostPort(spec)
- if err != nil {
- return nil, 0, false
- }
- ip = net.ParseIP(host)
- if ip == nil {
- return nil, 0, false
- }
- port, err = strconv.Atoi(portstr)
- if err != nil {
- return nil, 0, false
- }
- return ip, port, true
-}
-
-func listen(ctx *cli.Context, ln *enode.LocalNode) *net.UDPConn {
- addr := ctx.String(listenAddrFlag.Name)
- if addr == "" {
- addr = "0.0.0.0:0"
- }
- socket, err := net.ListenPacket("udp4", addr)
- if err != nil {
- exit(err)
- }
-
- // Configure UDP endpoint in ENR from listener address.
- usocket := socket.(*net.UDPConn)
- uaddr := socket.LocalAddr().(*net.UDPAddr)
- if uaddr.IP.IsUnspecified() {
- ln.SetFallbackIP(net.IP{127, 0, 0, 1})
- } else {
- ln.SetFallbackIP(uaddr.IP)
- }
- ln.SetFallbackUDP(uaddr.Port)
-
- // If an ENR endpoint is set explicitly on the command-line, override
- // the information from the listening address. Note this is careful not
- // to set the UDP port if the external address doesn't have it.
- extAddr := ctx.String(extAddrFlag.Name)
- if extAddr != "" {
- ip, port, ok := parseExtAddr(extAddr)
- if !ok {
- exit(fmt.Errorf("-%s: invalid external address %q", extAddrFlag.Name, extAddr))
- }
- ln.SetStaticIP(ip)
- if port != 0 {
- ln.SetFallbackUDP(port)
- }
- }
-
- return usocket
-}
-
-func parseBootnodes(ctx *cli.Context) ([]*enode.Node, error) {
- s := params.MainnetBootnodes
- if ctx.IsSet(bootnodesFlag.Name) {
- input := ctx.String(bootnodesFlag.Name)
- if input == "" {
- return nil, nil
- }
- s = strings.Split(input, ",")
- }
- nodes := make([]*enode.Node, len(s))
- var err error
- for i, record := range s {
- nodes[i], err = parseNode(record)
- if err != nil {
- return nil, fmt.Errorf("invalid bootstrap node: %v", err)
- }
- }
- return nodes, nil
-}
diff --git a/cmd/devp2p/discv5cmd.go b/cmd/devp2p/discv5cmd.go
deleted file mode 100644
index 0dac945269..0000000000
--- a/cmd/devp2p/discv5cmd.go
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "errors"
- "fmt"
- "time"
-
- "github.com/ethereum/go-ethereum/cmd/devp2p/internal/v5test"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/p2p/discover"
- "github.com/urfave/cli/v2"
-)
-
-var (
- discv5Command = &cli.Command{
- Name: "discv5",
- Usage: "Node Discovery v5 tools",
- Subcommands: []*cli.Command{
- discv5PingCommand,
- discv5ResolveCommand,
- discv5CrawlCommand,
- discv5TestCommand,
- discv5ListenCommand,
- },
- }
- discv5PingCommand = &cli.Command{
- Name: "ping",
- Usage: "Sends ping to a node",
- Action: discv5Ping,
- Flags: discoveryNodeFlags,
- }
- discv5ResolveCommand = &cli.Command{
- Name: "resolve",
- Usage: "Finds a node in the DHT",
- Action: discv5Resolve,
- Flags: discoveryNodeFlags,
- }
- discv5CrawlCommand = &cli.Command{
- Name: "crawl",
- Usage: "Updates a nodes.json file with random nodes found in the DHT",
- Action: discv5Crawl,
- Flags: flags.Merge(discoveryNodeFlags, []cli.Flag{
- crawlTimeoutFlag,
- }),
- }
- discv5TestCommand = &cli.Command{
- Name: "test",
- Usage: "Runs protocol tests against a node",
- Action: discv5Test,
- Flags: []cli.Flag{
- testPatternFlag,
- testTAPFlag,
- testListen1Flag,
- testListen2Flag,
- },
- }
- discv5ListenCommand = &cli.Command{
- Name: "listen",
- Usage: "Runs a node",
- Action: discv5Listen,
- Flags: discoveryNodeFlags,
- }
-)
-
-func discv5Ping(ctx *cli.Context) error {
- n := getNodeArg(ctx)
- disc, _ := startV5(ctx)
- defer disc.Close()
-
- fmt.Println(disc.Ping(n))
- return nil
-}
-
-func discv5Resolve(ctx *cli.Context) error {
- n := getNodeArg(ctx)
- disc, _ := startV5(ctx)
- defer disc.Close()
-
- fmt.Println(disc.Resolve(n))
- return nil
-}
-
-func discv5Crawl(ctx *cli.Context) error {
- if ctx.NArg() < 1 {
- return errors.New("need nodes file as argument")
- }
- nodesFile := ctx.Args().First()
- inputSet := make(nodeSet)
- if common.FileExist(nodesFile) {
- inputSet = loadNodesJSON(nodesFile)
- }
-
- disc, config := startV5(ctx)
- defer disc.Close()
-
- c, err := newCrawler(inputSet, config.Bootnodes, disc, disc.RandomNodes())
- if err != nil {
- return err
- }
- c.revalidateInterval = 10 * time.Minute
- output := c.run(ctx.Duration(crawlTimeoutFlag.Name), ctx.Int(crawlParallelismFlag.Name))
- writeNodesJSON(nodesFile, output)
- return nil
-}
-
-// discv5Test runs the protocol test suite.
-func discv5Test(ctx *cli.Context) error {
- suite := &v5test.Suite{
- Dest: getNodeArg(ctx),
- Listen1: ctx.String(testListen1Flag.Name),
- Listen2: ctx.String(testListen2Flag.Name),
- }
- return runTests(ctx, suite.AllTests())
-}
-
-func discv5Listen(ctx *cli.Context) error {
- disc, _ := startV5(ctx)
- defer disc.Close()
-
- fmt.Println(disc.Self())
- select {}
-}
-
-// startV5 starts an ephemeral discovery v5 node.
-func startV5(ctx *cli.Context) (*discover.UDPv5, discover.Config) {
- ln, config := makeDiscoveryConfig(ctx)
- socket := listen(ctx, ln)
- disc, err := discover.ListenV5(socket, ln, config)
- if err != nil {
- exit(err)
- }
- return disc, config
-}
diff --git a/cmd/devp2p/dns_cloudflare.go b/cmd/devp2p/dns_cloudflare.go
deleted file mode 100644
index a3cc69cf19..0000000000
--- a/cmd/devp2p/dns_cloudflare.go
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright 2019 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "context"
- "errors"
- "fmt"
- "strings"
-
- "github.com/cloudflare/cloudflare-go"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/dnsdisc"
- "github.com/urfave/cli/v2"
-)
-
-var (
- cloudflareTokenFlag = &cli.StringFlag{
- Name: "token",
- Usage: "CloudFlare API token",
- EnvVars: []string{"CLOUDFLARE_API_TOKEN"},
- }
- cloudflareZoneIDFlag = &cli.StringFlag{
- Name: "zoneid",
- Usage: "CloudFlare Zone ID (optional)",
- }
-)
-
-type cloudflareClient struct {
- *cloudflare.API
- zoneID string
-}
-
-// newCloudflareClient sets up a CloudFlare API client from command line flags.
-func newCloudflareClient(ctx *cli.Context) *cloudflareClient {
- token := ctx.String(cloudflareTokenFlag.Name)
- if token == "" {
- exit(errors.New("need cloudflare API token to proceed"))
- }
- api, err := cloudflare.NewWithAPIToken(token)
- if err != nil {
- exit(fmt.Errorf("can't create Cloudflare client: %v", err))
- }
- return &cloudflareClient{
- API: api,
- zoneID: ctx.String(cloudflareZoneIDFlag.Name),
- }
-}
-
-// deploy uploads the given tree to CloudFlare DNS.
-func (c *cloudflareClient) deploy(name string, t *dnsdisc.Tree) error {
- if err := c.checkZone(name); err != nil {
- return err
- }
- records := t.ToTXT(name)
- return c.uploadRecords(name, records)
-}
-
-// checkZone verifies permissions on the CloudFlare DNS Zone for name.
-func (c *cloudflareClient) checkZone(name string) error {
- if c.zoneID == "" {
- log.Info(fmt.Sprintf("Finding CloudFlare zone ID for %s", name))
- id, err := c.ZoneIDByName(name)
- if err != nil {
- return err
- }
- c.zoneID = id
- }
- log.Info(fmt.Sprintf("Checking Permissions on zone %s", c.zoneID))
- zone, err := c.ZoneDetails(context.Background(), c.zoneID)
- if err != nil {
- return err
- }
- if !strings.HasSuffix(name, "."+zone.Name) {
- return fmt.Errorf("CloudFlare zone name %q does not match name %q to be deployed", zone.Name, name)
- }
- needPerms := map[string]bool{"#zone:edit": false, "#zone:read": false}
- for _, perm := range zone.Permissions {
- if _, ok := needPerms[perm]; ok {
- needPerms[perm] = true
- }
- }
- for _, ok := range needPerms {
- if !ok {
- return fmt.Errorf("wrong permissions on zone %s: %v", c.zoneID, needPerms)
- }
- }
- return nil
-}
-
-// uploadRecords updates the TXT records at a particular subdomain. All non-root records
-// will have a TTL of "infinity" and all existing records not in the new map will be
-// nuked!
-func (c *cloudflareClient) uploadRecords(name string, records map[string]string) error {
- // Convert all names to lowercase.
- lrecords := make(map[string]string, len(records))
- for name, r := range records {
- lrecords[strings.ToLower(name)] = r
- }
- records = lrecords
-
- log.Info(fmt.Sprintf("Retrieving existing TXT records on %s", name))
- entries, _, err := c.ListDNSRecords(context.Background(), cloudflare.ZoneIdentifier(c.zoneID), cloudflare.ListDNSRecordsParams{Type: "TXT"})
- if err != nil {
- return err
- }
- existing := make(map[string]cloudflare.DNSRecord)
- for _, entry := range entries {
- if !strings.HasSuffix(entry.Name, name) {
- continue
- }
- existing[strings.ToLower(entry.Name)] = entry
- }
-
- // Iterate over the new records and inject anything missing.
- log.Info("Updating DNS entries")
- created := 0
- updated := 0
- skipped := 0
- for path, val := range records {
- old, exists := existing[path]
- if !exists {
- // Entry is unknown, push a new one to Cloudflare.
- log.Debug(fmt.Sprintf("Creating %s = %q", path, val))
- created++
- ttl := rootTTL
- if path != name {
- ttl = treeNodeTTLCloudflare // Max TTL permitted by Cloudflare
- }
- record := cloudflare.CreateDNSRecordParams{Type: "TXT", Name: path, Content: val, TTL: ttl}
- _, err = c.CreateDNSRecord(context.Background(), cloudflare.ZoneIdentifier(c.zoneID), record)
- } else if old.Content != val {
- // Entry already exists, only change its content.
- log.Info(fmt.Sprintf("Updating %s from %q to %q", path, old.Content, val))
- updated++
-
- record := cloudflare.UpdateDNSRecordParams{
- Type: old.Type,
- Name: old.Name,
- Content: val,
- Data: old.Data,
- ID: old.ID,
- Priority: old.Priority,
- TTL: old.TTL,
- Proxied: old.Proxied,
- Tags: old.Tags,
- }
- _, err = c.UpdateDNSRecord(context.Background(), cloudflare.ZoneIdentifier(c.zoneID), record)
- } else {
- skipped++
- log.Debug(fmt.Sprintf("Skipping %s = %q", path, val))
- }
- if err != nil {
- return fmt.Errorf("failed to publish %s: %v", path, err)
- }
- }
- log.Info("Updated DNS entries", "new", created, "updated", updated, "untouched", skipped)
- // Iterate over the old records and delete anything stale.
- deleted := 0
- log.Info("Deleting stale DNS entries")
- for path, entry := range existing {
- if _, ok := records[path]; ok {
- continue
- }
- // Stale entry, nuke it.
- log.Debug(fmt.Sprintf("Deleting %s = %q", path, entry.Content))
- deleted++
- if err := c.DeleteDNSRecord(context.Background(), cloudflare.ZoneIdentifier(c.zoneID), entry.ID); err != nil {
- return fmt.Errorf("failed to delete %s: %v", path, err)
- }
- }
- log.Info("Deleted stale DNS entries", "count", deleted)
- return nil
-}
diff --git a/cmd/devp2p/dns_route53.go b/cmd/devp2p/dns_route53.go
deleted file mode 100644
index 21a32f9414..0000000000
--- a/cmd/devp2p/dns_route53.go
+++ /dev/null
@@ -1,431 +0,0 @@
-// Copyright 2019 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "context"
- "errors"
- "fmt"
- "strconv"
- "strings"
- "time"
-
- "github.com/aws/aws-sdk-go-v2/aws"
- "github.com/aws/aws-sdk-go-v2/config"
- "github.com/aws/aws-sdk-go-v2/credentials"
- "github.com/aws/aws-sdk-go-v2/service/route53"
- "github.com/aws/aws-sdk-go-v2/service/route53/types"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/dnsdisc"
- "github.com/urfave/cli/v2"
- "golang.org/x/exp/slices"
-)
-
-const (
- // Route53 limits change sets to 32k of 'RDATA size'. Change sets are also limited to
- // 1000 items. UPSERTs count double.
- // https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html#limits-api-requests-changeresourcerecordsets
- route53ChangeSizeLimit = 32000
- route53ChangeCountLimit = 1000
- maxRetryLimit = 60
-)
-
-var (
- route53AccessKeyFlag = &cli.StringFlag{
- Name: "access-key-id",
- Usage: "AWS Access Key ID",
- EnvVars: []string{"AWS_ACCESS_KEY_ID"},
- }
- route53AccessSecretFlag = &cli.StringFlag{
- Name: "access-key-secret",
- Usage: "AWS Access Key Secret",
- EnvVars: []string{"AWS_SECRET_ACCESS_KEY"},
- }
- route53ZoneIDFlag = &cli.StringFlag{
- Name: "zone-id",
- Usage: "Route53 Zone ID",
- }
- route53RegionFlag = &cli.StringFlag{
- Name: "aws-region",
- Usage: "AWS Region",
- Value: "eu-central-1",
- }
-)
-
-type route53Client struct {
- api *route53.Client
- zoneID string
-}
-
-type recordSet struct {
- values []string
- ttl int64
-}
-
-// newRoute53Client sets up a Route53 API client from command line flags.
-func newRoute53Client(ctx *cli.Context) *route53Client {
- akey := ctx.String(route53AccessKeyFlag.Name)
- asec := ctx.String(route53AccessSecretFlag.Name)
- if akey == "" || asec == "" {
- exit(errors.New("need Route53 Access Key ID and secret to proceed"))
- }
- creds := aws.NewCredentialsCache(credentials.NewStaticCredentialsProvider(akey, asec, ""))
- cfg, err := config.LoadDefaultConfig(context.Background(), config.WithCredentialsProvider(creds))
- if err != nil {
- exit(fmt.Errorf("can't initialize AWS configuration: %v", err))
- }
- cfg.Region = ctx.String(route53RegionFlag.Name)
- return &route53Client{
- api: route53.NewFromConfig(cfg),
- zoneID: ctx.String(route53ZoneIDFlag.Name),
- }
-}
-
-// deploy uploads the given tree to Route53.
-func (c *route53Client) deploy(name string, t *dnsdisc.Tree) error {
- if err := c.checkZone(name); err != nil {
- return err
- }
-
- // Compute DNS changes.
- existing, err := c.collectRecords(name)
- if err != nil {
- return err
- }
- log.Info(fmt.Sprintf("Found %d TXT records", len(existing)))
- records := t.ToTXT(name)
- changes := c.computeChanges(name, records, existing)
-
- // Submit to API.
- comment := fmt.Sprintf("enrtree update of %s at seq %d", name, t.Seq())
- return c.submitChanges(changes, comment)
-}
-
-// deleteDomain removes all TXT records of the given domain.
-func (c *route53Client) deleteDomain(name string) error {
- if err := c.checkZone(name); err != nil {
- return err
- }
-
- // Compute DNS changes.
- existing, err := c.collectRecords(name)
- if err != nil {
- return err
- }
- log.Info(fmt.Sprintf("Found %d TXT records", len(existing)))
- changes := makeDeletionChanges(existing, nil)
-
- // Submit to API.
- comment := "enrtree delete of " + name
- return c.submitChanges(changes, comment)
-}
-
-// submitChanges submits the given DNS changes to Route53.
-func (c *route53Client) submitChanges(changes []types.Change, comment string) error {
- if len(changes) == 0 {
- log.Info("No DNS changes needed")
- return nil
- }
-
- var err error
- batches := splitChanges(changes, route53ChangeSizeLimit, route53ChangeCountLimit)
- changesToCheck := make([]*route53.ChangeResourceRecordSetsOutput, len(batches))
- for i, changes := range batches {
- log.Info(fmt.Sprintf("Submitting %d changes to Route53", len(changes)))
- batch := &types.ChangeBatch{
- Changes: changes,
- Comment: aws.String(fmt.Sprintf("%s (%d/%d)", comment, i+1, len(batches))),
- }
- req := &route53.ChangeResourceRecordSetsInput{HostedZoneId: &c.zoneID, ChangeBatch: batch}
- changesToCheck[i], err = c.api.ChangeResourceRecordSets(context.TODO(), req)
- if err != nil {
- return err
- }
- }
-
- // Wait for all change batches to propagate.
- for _, change := range changesToCheck {
- log.Info(fmt.Sprintf("Waiting for change request %s", *change.ChangeInfo.Id))
- wreq := &route53.GetChangeInput{Id: change.ChangeInfo.Id}
- var count int
- for {
- wresp, err := c.api.GetChange(context.TODO(), wreq)
- if err != nil {
- return err
- }
-
- count++
-
- if wresp.ChangeInfo.Status == types.ChangeStatusInsync || count >= maxRetryLimit {
- break
- }
-
- time.Sleep(30 * time.Second)
- }
- }
- return nil
-}
-
-// checkZone verifies zone information for the given domain.
-func (c *route53Client) checkZone(name string) (err error) {
- if c.zoneID == "" {
- c.zoneID, err = c.findZoneID(name)
- }
- return err
-}
-
-// findZoneID searches for the Zone ID containing the given domain.
-func (c *route53Client) findZoneID(name string) (string, error) {
- log.Info(fmt.Sprintf("Finding Route53 Zone ID for %s", name))
- var req route53.ListHostedZonesByNameInput
- for {
- resp, err := c.api.ListHostedZonesByName(context.TODO(), &req)
- if err != nil {
- return "", err
- }
- for _, zone := range resp.HostedZones {
- if isSubdomain(name, *zone.Name) {
- return *zone.Id, nil
- }
- }
- if !resp.IsTruncated {
- break
- }
- req.DNSName = resp.NextDNSName
- req.HostedZoneId = resp.NextHostedZoneId
- }
- return "", errors.New("can't find zone ID for " + name)
-}
-
-// computeChanges creates DNS changes for the given set of DNS discovery records.
-// The 'existing' arg is the set of records that already exist on Route53.
-func (c *route53Client) computeChanges(name string, records map[string]string, existing map[string]recordSet) []types.Change {
- // Convert all names to lowercase.
- lrecords := make(map[string]string, len(records))
- for name, r := range records {
- lrecords[strings.ToLower(name)] = r
- }
- records = lrecords
-
- var (
- changes []types.Change
- inserts int
- upserts int
- skips int
- )
-
- for path, newValue := range records {
- prevRecords, exists := existing[path]
- prevValue := strings.Join(prevRecords.values, "")
-
- // prevValue contains quoted strings, encode newValue to compare.
- newValue = splitTXT(newValue)
-
- // Assign TTL.
- ttl := int64(rootTTL)
- if path != name {
- ttl = int64(treeNodeTTL)
- }
-
- if !exists {
- // Entry is unknown, push a new one
- log.Debug(fmt.Sprintf("Creating %s = %s", path, newValue))
- changes = append(changes, newTXTChange("CREATE", path, ttl, newValue))
- inserts++
- } else if prevValue != newValue || prevRecords.ttl != ttl {
- // Entry already exists, only change its content.
- log.Info(fmt.Sprintf("Updating %s from %s to %s", path, prevValue, newValue))
- changes = append(changes, newTXTChange("UPSERT", path, ttl, newValue))
- upserts++
- } else {
- log.Debug(fmt.Sprintf("Skipping %s = %s", path, newValue))
- skips++
- }
- }
-
- // Iterate over the old records and delete anything stale.
- deletions := makeDeletionChanges(existing, records)
- changes = append(changes, deletions...)
-
- log.Info("Computed DNS changes",
- "changes", len(changes),
- "inserts", inserts,
- "skips", skips,
- "deleted", len(deletions),
- "upserts", upserts)
- // Ensure changes are in the correct order.
- sortChanges(changes)
- return changes
-}
-
-// makeDeletionChanges creates record changes which delete all records not contained in 'keep'.
-func makeDeletionChanges(records map[string]recordSet, keep map[string]string) []types.Change {
- var changes []types.Change
- for path, set := range records {
- if _, ok := keep[path]; ok {
- continue
- }
- log.Debug(fmt.Sprintf("Deleting %s = %s", path, strings.Join(set.values, "")))
- changes = append(changes, newTXTChange("DELETE", path, set.ttl, set.values...))
- }
- return changes
-}
-
-// sortChanges ensures DNS changes are in leaf-added -> root-changed -> leaf-deleted order.
-func sortChanges(changes []types.Change) {
- score := map[string]int{"CREATE": 1, "UPSERT": 2, "DELETE": 3}
- slices.SortFunc(changes, func(a, b types.Change) int {
- if a.Action == b.Action {
- return strings.Compare(*a.ResourceRecordSet.Name, *b.ResourceRecordSet.Name)
- }
- if score[string(a.Action)] < score[string(b.Action)] {
- return -1
- }
- if score[string(a.Action)] > score[string(b.Action)] {
- return 1
- }
- return 0
- })
-}
-
-// splitChanges splits up DNS changes such that each change batch
-// is smaller than the given RDATA limit.
-func splitChanges(changes []types.Change, sizeLimit, countLimit int) [][]types.Change {
- var (
- batches [][]types.Change
- batchSize int
- batchCount int
- )
- for _, ch := range changes {
- // Start new batch if this change pushes the current one over the limit.
- count := changeCount(ch)
- size := changeSize(ch) * count
- overSize := batchSize+size > sizeLimit
- overCount := batchCount+count > countLimit
- if len(batches) == 0 || overSize || overCount {
- batches = append(batches, nil)
- batchSize = 0
- batchCount = 0
- }
- batches[len(batches)-1] = append(batches[len(batches)-1], ch)
- batchSize += size
- batchCount += count
- }
- return batches
-}
-
-// changeSize returns the RDATA size of a DNS change.
-func changeSize(ch types.Change) int {
- size := 0
- for _, rr := range ch.ResourceRecordSet.ResourceRecords {
- if rr.Value != nil {
- size += len(*rr.Value)
- }
- }
- return size
-}
-
-func changeCount(ch types.Change) int {
- if ch.Action == types.ChangeActionUpsert {
- return 2
- }
- return 1
-}
-
-// collectRecords collects all TXT records below the given name.
-func (c *route53Client) collectRecords(name string) (map[string]recordSet, error) {
- var req route53.ListResourceRecordSetsInput
- req.HostedZoneId = &c.zoneID
- existing := make(map[string]recordSet)
- log.Info("Loading existing TXT records", "name", name, "zone", c.zoneID)
- for page := 0; ; page++ {
- log.Debug("Loading existing TXT records", "name", name, "zone", c.zoneID, "page", page)
- resp, err := c.api.ListResourceRecordSets(context.TODO(), &req)
- if err != nil {
- return existing, err
- }
- for _, set := range resp.ResourceRecordSets {
- if !isSubdomain(*set.Name, name) || set.Type != types.RRTypeTxt {
- continue
- }
- s := recordSet{ttl: *set.TTL}
- for _, rec := range set.ResourceRecords {
- s.values = append(s.values, *rec.Value)
- }
- name := strings.TrimSuffix(*set.Name, ".")
- existing[name] = s
- }
-
- if !resp.IsTruncated {
- break
- }
- // Set the cursor to the next batch. From the AWS docs:
- //
- // To display the next page of results, get the values of NextRecordName,
- // NextRecordType, and NextRecordIdentifier (if any) from the response. Then submit
- // another ListResourceRecordSets request, and specify those values for
- // StartRecordName, StartRecordType, and StartRecordIdentifier.
- req.StartRecordIdentifier = resp.NextRecordIdentifier
- req.StartRecordName = resp.NextRecordName
- req.StartRecordType = resp.NextRecordType
- }
- log.Info("Loaded existing TXT records", "name", name, "zone", c.zoneID, "records", len(existing))
- return existing, nil
-}
-
-// newTXTChange creates a change to a TXT record.
-func newTXTChange(action, name string, ttl int64, values ...string) types.Change {
- r := types.ResourceRecordSet{
- Type: types.RRTypeTxt,
- Name: &name,
- TTL: &ttl,
- }
- var rrs []types.ResourceRecord
- for _, val := range values {
- var rr types.ResourceRecord
- rr.Value = aws.String(val)
- rrs = append(rrs, rr)
- }
-
- r.ResourceRecords = rrs
-
- return types.Change{
- Action: types.ChangeAction(action),
- ResourceRecordSet: &r,
- }
-}
-
-// isSubdomain returns true if name is a subdomain of domain.
-func isSubdomain(name, domain string) bool {
- domain = strings.TrimSuffix(domain, ".")
- name = strings.TrimSuffix(name, ".")
- return strings.HasSuffix("."+name, "."+domain)
-}
-
-// splitTXT splits value into a list of quoted 255-character strings.
-func splitTXT(value string) string {
- var result strings.Builder
- for len(value) > 0 {
- rlen := len(value)
- if rlen > 253 {
- rlen = 253
- }
- result.WriteString(strconv.Quote(value[:rlen]))
- value = value[rlen:]
- }
- return result.String()
-}
diff --git a/cmd/devp2p/dns_route53_test.go b/cmd/devp2p/dns_route53_test.go
deleted file mode 100644
index af39c70a36..0000000000
--- a/cmd/devp2p/dns_route53_test.go
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "reflect"
- "testing"
-
- "github.com/aws/aws-sdk-go-v2/service/route53/types"
-)
-
-// This test checks that computeChanges/splitChanges create DNS changes in
-// leaf-added -> root-changed -> leaf-deleted order.
-func TestRoute53ChangeSort(t *testing.T) {
- t.Parallel()
- testTree0 := map[string]recordSet{
- "2kfjogvxdqtxxugbh7gs7naaai.n": {ttl: 3333, values: []string{
- `"enr:-HW4QO1ml1DdXLeZLsUxewnthhUy8eROqkDyoMTyavfks9JlYQIlMFEUoM78PovJDPQrAkrb3LRJ-""vtrymDguKCOIAWAgmlkgnY0iXNlY3AyNTZrMaEDffaGfJzgGhUif1JqFruZlYmA31HzathLSWxfbq_QoQ4"`,
- }},
- "fdxn3sn67na5dka4j2gok7bvqi.n": {ttl: treeNodeTTL, values: []string{`"enrtree-branch:"`}},
- "n": {ttl: rootTTL, values: []string{`"enrtree-root:v1 e=2KFJOGVXDQTXXUGBH7GS7NAAAI l=FDXN3SN67NA5DKA4J2GOK7BVQI seq=0 sig=v_-J_q_9ICQg5ztExFvLQhDBGMb0lZPJLhe3ts9LAcgqhOhtT3YFJsl8BWNDSwGtamUdR-9xl88_w-X42SVpjwE"`}},
- }
-
- testTree1 := map[string]string{
- "n": "enrtree-root:v1 e=JWXYDBPXYWG6FX3GMDIBFA6CJ4 l=C7HRFPF3BLGF3YR4DY5KX3SMBE seq=1 sig=o908WmNp7LibOfPsr4btQwatZJ5URBr2ZAuxvK4UWHlsB9sUOTJQaGAlLPVAhM__XJesCHxLISo94z5Z2a463gA",
- "C7HRFPF3BLGF3YR4DY5KX3SMBE.n": "enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org",
- "JWXYDBPXYWG6FX3GMDIBFA6CJ4.n": "enrtree-branch:2XS2367YHAXJFGLZHVAWLQD4ZY,H4FHT4B454P6UXFD7JCYQ5PWDY,MHTDO6TMUBRIA2XWG5LUDACK24",
- "2XS2367YHAXJFGLZHVAWLQD4ZY.n": "enr:-HW4QOFzoVLaFJnNhbgMoDXPnOvcdVuj7pDpqRvh6BRDO68aVi5ZcjB3vzQRZH2IcLBGHzo8uUN3snqmgTiE56CH3AMBgmlkgnY0iXNlY3AyNTZrMaECC2_24YYkYHEgdzxlSNKQEnHhuNAbNlMlWJxrJxbAFvA",
- "H4FHT4B454P6UXFD7JCYQ5PWDY.n": "enr:-HW4QAggRauloj2SDLtIHN1XBkvhFZ1vtf1raYQp9TBW2RD5EEawDzbtSmlXUfnaHcvwOizhVYLtr7e6vw7NAf6mTuoCgmlkgnY0iXNlY3AyNTZrMaECjrXI8TLNXU0f8cthpAMxEshUyQlK-AM0PW2wfrnacNI",
- "MHTDO6TMUBRIA2XWG5LUDACK24.n": "enr:-HW4QLAYqmrwllBEnzWWs7I5Ev2IAs7x_dZlbYdRdMUx5EyKHDXp7AV5CkuPGUPdvbv1_Ms1CPfhcGCvSElSosZmyoqAgmlkgnY0iXNlY3AyNTZrMaECriawHKWdDRk2xeZkrOXBQ0dfMFLHY4eENZwdufn1S1o",
- }
-
- wantChanges := []types.Change{
- {
- Action: "CREATE",
- ResourceRecordSet: &types.ResourceRecordSet{
- Name: sp("2xs2367yhaxjfglzhvawlqd4zy.n"),
- ResourceRecords: []types.ResourceRecord{{
- Value: sp(`"enr:-HW4QOFzoVLaFJnNhbgMoDXPnOvcdVuj7pDpqRvh6BRDO68aVi5ZcjB3vzQRZH2IcLBGHzo8uUN3snqmgTiE56CH3AMBgmlkgnY0iXNlY3AyNTZrMaECC2_24YYkYHEgdzxlSNKQEnHhuNAbNlMlWJxrJxbAFvA"`),
- }},
- TTL: ip(treeNodeTTL),
- Type: "TXT",
- },
- },
- {
- Action: "CREATE",
- ResourceRecordSet: &types.ResourceRecordSet{
- Name: sp("c7hrfpf3blgf3yr4dy5kx3smbe.n"),
- ResourceRecords: []types.ResourceRecord{{
- Value: sp(`"enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org"`),
- }},
- TTL: ip(treeNodeTTL),
- Type: "TXT",
- },
- },
- {
- Action: "CREATE",
- ResourceRecordSet: &types.ResourceRecordSet{
- Name: sp("h4fht4b454p6uxfd7jcyq5pwdy.n"),
- ResourceRecords: []types.ResourceRecord{{
- Value: sp(`"enr:-HW4QAggRauloj2SDLtIHN1XBkvhFZ1vtf1raYQp9TBW2RD5EEawDzbtSmlXUfnaHcvwOizhVYLtr7e6vw7NAf6mTuoCgmlkgnY0iXNlY3AyNTZrMaECjrXI8TLNXU0f8cthpAMxEshUyQlK-AM0PW2wfrnacNI"`),
- }},
- TTL: ip(treeNodeTTL),
- Type: "TXT",
- },
- },
- {
- Action: "CREATE",
- ResourceRecordSet: &types.ResourceRecordSet{
- Name: sp("jwxydbpxywg6fx3gmdibfa6cj4.n"),
- ResourceRecords: []types.ResourceRecord{{
- Value: sp(`"enrtree-branch:2XS2367YHAXJFGLZHVAWLQD4ZY,H4FHT4B454P6UXFD7JCYQ5PWDY,MHTDO6TMUBRIA2XWG5LUDACK24"`),
- }},
- TTL: ip(treeNodeTTL),
- Type: "TXT",
- },
- },
- {
- Action: "CREATE",
- ResourceRecordSet: &types.ResourceRecordSet{
- Name: sp("mhtdo6tmubria2xwg5ludack24.n"),
- ResourceRecords: []types.ResourceRecord{{
- Value: sp(`"enr:-HW4QLAYqmrwllBEnzWWs7I5Ev2IAs7x_dZlbYdRdMUx5EyKHDXp7AV5CkuPGUPdvbv1_Ms1CPfhcGCvSElSosZmyoqAgmlkgnY0iXNlY3AyNTZrMaECriawHKWdDRk2xeZkrOXBQ0dfMFLHY4eENZwdufn1S1o"`),
- }},
- TTL: ip(treeNodeTTL),
- Type: "TXT",
- },
- },
- {
- Action: "UPSERT",
- ResourceRecordSet: &types.ResourceRecordSet{
- Name: sp("n"),
- ResourceRecords: []types.ResourceRecord{{
- Value: sp(`"enrtree-root:v1 e=JWXYDBPXYWG6FX3GMDIBFA6CJ4 l=C7HRFPF3BLGF3YR4DY5KX3SMBE seq=1 sig=o908WmNp7LibOfPsr4btQwatZJ5URBr2ZAuxvK4UWHlsB9sUOTJQaGAlLPVAhM__XJesCHxLISo94z5Z2a463gA"`),
- }},
- TTL: ip(rootTTL),
- Type: "TXT",
- },
- },
- {
- Action: "DELETE",
- ResourceRecordSet: &types.ResourceRecordSet{
- Name: sp("2kfjogvxdqtxxugbh7gs7naaai.n"),
- ResourceRecords: []types.ResourceRecord{
- {Value: sp(`"enr:-HW4QO1ml1DdXLeZLsUxewnthhUy8eROqkDyoMTyavfks9JlYQIlMFEUoM78PovJDPQrAkrb3LRJ-""vtrymDguKCOIAWAgmlkgnY0iXNlY3AyNTZrMaEDffaGfJzgGhUif1JqFruZlYmA31HzathLSWxfbq_QoQ4"`)},
- },
- TTL: ip(3333),
- Type: "TXT",
- },
- },
- {
- Action: "DELETE",
- ResourceRecordSet: &types.ResourceRecordSet{
- Name: sp("fdxn3sn67na5dka4j2gok7bvqi.n"),
- ResourceRecords: []types.ResourceRecord{{
- Value: sp(`"enrtree-branch:"`),
- }},
- TTL: ip(treeNodeTTL),
- Type: "TXT",
- },
- },
- }
-
- var client route53Client
- changes := client.computeChanges("n", testTree1, testTree0)
- if !reflect.DeepEqual(changes, wantChanges) {
- t.Fatalf("wrong changes (got %d, want %d)", len(changes), len(wantChanges))
- }
-
- // Check splitting according to size.
- wantSplit := [][]types.Change{
- wantChanges[:4],
- wantChanges[4:6],
- wantChanges[6:],
- }
- split := splitChanges(changes, 600, 4000)
- if !reflect.DeepEqual(split, wantSplit) {
- t.Fatalf("wrong split batches: got %d, want %d", len(split), len(wantSplit))
- }
-
- // Check splitting according to count.
- wantSplit = [][]types.Change{
- wantChanges[:5],
- wantChanges[5:],
- }
- split = splitChanges(changes, 10000, 6)
- if !reflect.DeepEqual(split, wantSplit) {
- t.Fatalf("wrong split batches: got %d, want %d", len(split), len(wantSplit))
- }
-}
-
-// This test checks that computeChanges compares the quoted value of the records correctly.
-func TestRoute53NoChange(t *testing.T) {
- t.Parallel()
- // Existing record set.
- testTree0 := map[string]recordSet{
- "n": {ttl: rootTTL, values: []string{
- `"enrtree-root:v1 e=JWXYDBPXYWG6FX3GMDIBFA6CJ4 l=C7HRFPF3BLGF3YR4DY5KX3SMBE seq=1 sig=o908WmNp7LibOfPsr4btQwatZJ5URBr2ZAuxvK4UWHlsB9sUOTJQaGAlLPVAhM__XJesCHxLISo94z5Z2a463gA"`,
- }},
- "2xs2367yhaxjfglzhvawlqd4zy.n": {ttl: treeNodeTTL, values: []string{
- `"enr:-HW4QOFzoVLaFJnNhbgMoDXPnOvcdVuj7pDpqRvh6BRDO68aVi5ZcjB3vzQRZH2IcLBGHzo8uUN3snqmgTiE56CH3AMBgmlkgnY0iXNlY3AyNTZrMaECC2_24YYkYHEgdzxlSNKQEnHhuNAbNlMlWJxrJxbAFvA"`,
- }},
- }
- // New set.
- testTree1 := map[string]string{
- "n": "enrtree-root:v1 e=JWXYDBPXYWG6FX3GMDIBFA6CJ4 l=C7HRFPF3BLGF3YR4DY5KX3SMBE seq=1 sig=o908WmNp7LibOfPsr4btQwatZJ5URBr2ZAuxvK4UWHlsB9sUOTJQaGAlLPVAhM__XJesCHxLISo94z5Z2a463gA",
- "2XS2367YHAXJFGLZHVAWLQD4ZY.n": "enr:-HW4QOFzoVLaFJnNhbgMoDXPnOvcdVuj7pDpqRvh6BRDO68aVi5ZcjB3vzQRZH2IcLBGHzo8uUN3snqmgTiE56CH3AMBgmlkgnY0iXNlY3AyNTZrMaECC2_24YYkYHEgdzxlSNKQEnHhuNAbNlMlWJxrJxbAFvA",
- }
-
- var client route53Client
- changes := client.computeChanges("n", testTree1, testTree0)
- if len(changes) > 0 {
- t.Fatalf("wrong changes (got %d, want 0)", len(changes))
- }
-}
-
-func sp(s string) *string { return &s }
-func ip(i int64) *int64 { return &i }
diff --git a/cmd/devp2p/dnscmd.go b/cmd/devp2p/dnscmd.go
deleted file mode 100644
index 0fce7b1030..0000000000
--- a/cmd/devp2p/dnscmd.go
+++ /dev/null
@@ -1,417 +0,0 @@
-// Copyright 2019 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "crypto/ecdsa"
- "encoding/json"
- "errors"
- "fmt"
- "os"
- "path/filepath"
- "time"
-
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/console/prompt"
- "github.com/ethereum/go-ethereum/p2p/dnsdisc"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/urfave/cli/v2"
-)
-
-var (
- dnsCommand = &cli.Command{
- Name: "dns",
- Usage: "DNS Discovery Commands",
- Subcommands: []*cli.Command{
- dnsSyncCommand,
- dnsSignCommand,
- dnsTXTCommand,
- dnsCloudflareCommand,
- dnsRoute53Command,
- dnsRoute53NukeCommand,
- },
- }
- dnsSyncCommand = &cli.Command{
- Name: "sync",
- Usage: "Download a DNS discovery tree",
- ArgsUsage: " [ ]",
- Action: dnsSync,
- Flags: []cli.Flag{dnsTimeoutFlag},
- }
- dnsSignCommand = &cli.Command{
- Name: "sign",
- Usage: "Sign a DNS discovery tree",
- ArgsUsage: " ",
- Action: dnsSign,
- Flags: []cli.Flag{dnsDomainFlag, dnsSeqFlag},
- }
- dnsTXTCommand = &cli.Command{
- Name: "to-txt",
- Usage: "Create a DNS TXT records for a discovery tree",
- ArgsUsage: " ",
- Action: dnsToTXT,
- }
- dnsCloudflareCommand = &cli.Command{
- Name: "to-cloudflare",
- Usage: "Deploy DNS TXT records to CloudFlare",
- ArgsUsage: "",
- Action: dnsToCloudflare,
- Flags: []cli.Flag{cloudflareTokenFlag, cloudflareZoneIDFlag},
- }
- dnsRoute53Command = &cli.Command{
- Name: "to-route53",
- Usage: "Deploy DNS TXT records to Amazon Route53",
- ArgsUsage: "",
- Action: dnsToRoute53,
- Flags: []cli.Flag{
- route53AccessKeyFlag,
- route53AccessSecretFlag,
- route53ZoneIDFlag,
- route53RegionFlag,
- },
- }
- dnsRoute53NukeCommand = &cli.Command{
- Name: "nuke-route53",
- Usage: "Deletes DNS TXT records of a subdomain on Amazon Route53",
- ArgsUsage: "",
- Action: dnsNukeRoute53,
- Flags: []cli.Flag{
- route53AccessKeyFlag,
- route53AccessSecretFlag,
- route53ZoneIDFlag,
- route53RegionFlag,
- },
- }
-)
-
-var (
- dnsTimeoutFlag = &cli.DurationFlag{
- Name: "timeout",
- Usage: "Timeout for DNS lookups",
- }
- dnsDomainFlag = &cli.StringFlag{
- Name: "domain",
- Usage: "Domain name of the tree",
- }
- dnsSeqFlag = &cli.UintFlag{
- Name: "seq",
- Usage: "New sequence number of the tree",
- }
-)
-
-const (
- rootTTL = 30 * 60 // 30 min
- treeNodeTTL = 4 * 7 * 24 * 60 * 60 // 4 weeks
- treeNodeTTLCloudflare = 24 * 60 * 60 // 1 day
-)
-
-// dnsSync performs dnsSyncCommand.
-func dnsSync(ctx *cli.Context) error {
- var (
- c = dnsClient(ctx)
- url = ctx.Args().Get(0)
- outdir = ctx.Args().Get(1)
- )
- domain, _, err := dnsdisc.ParseURL(url)
- if err != nil {
- return err
- }
- if outdir == "" {
- outdir = domain
- }
-
- t, err := c.SyncTree(url)
- if err != nil {
- return err
- }
- def := treeToDefinition(url, t)
- def.Meta.LastModified = time.Now()
- writeTreeMetadata(outdir, def)
- writeTreeNodes(outdir, def)
- return nil
-}
-
-func dnsSign(ctx *cli.Context) error {
- if ctx.NArg() < 2 {
- return errors.New("need tree definition directory and key file as arguments")
- }
- var (
- defdir = ctx.Args().Get(0)
- keyfile = ctx.Args().Get(1)
- def = loadTreeDefinition(defdir)
- domain = directoryName(defdir)
- )
- if def.Meta.URL != "" {
- d, _, err := dnsdisc.ParseURL(def.Meta.URL)
- if err != nil {
- return fmt.Errorf("invalid 'url' field: %v", err)
- }
- domain = d
- }
- if ctx.IsSet(dnsDomainFlag.Name) {
- domain = ctx.String(dnsDomainFlag.Name)
- }
- if ctx.IsSet(dnsSeqFlag.Name) {
- def.Meta.Seq = ctx.Uint(dnsSeqFlag.Name)
- } else {
- def.Meta.Seq++ // Auto-bump sequence number if not supplied via flag.
- }
- t, err := dnsdisc.MakeTree(def.Meta.Seq, def.Nodes, def.Meta.Links)
- if err != nil {
- return err
- }
-
- key := loadSigningKey(keyfile)
- url, err := t.Sign(key, domain)
- if err != nil {
- return fmt.Errorf("can't sign: %v", err)
- }
-
- def = treeToDefinition(url, t)
- def.Meta.LastModified = time.Now()
- writeTreeMetadata(defdir, def)
- return nil
-}
-
-// directoryName returns the directory name of the given path.
-// For example, when dir is "foo/bar", it returns "bar".
-// When dir is ".", and the working directory is "example/foo", it returns "foo".
-func directoryName(dir string) string {
- abs, err := filepath.Abs(dir)
- if err != nil {
- exit(err)
- }
- return filepath.Base(abs)
-}
-
-// dnsToTXT performs dnsTXTCommand.
-func dnsToTXT(ctx *cli.Context) error {
- if ctx.NArg() < 1 {
- return errors.New("need tree definition directory as argument")
- }
- output := ctx.Args().Get(1)
- if output == "" {
- output = "-" // default to stdout
- }
- domain, t, err := loadTreeDefinitionForExport(ctx.Args().Get(0))
- if err != nil {
- return err
- }
- writeTXTJSON(output, t.ToTXT(domain))
- return nil
-}
-
-// dnsToCloudflare performs dnsCloudflareCommand.
-func dnsToCloudflare(ctx *cli.Context) error {
- if ctx.NArg() != 1 {
- return errors.New("need tree definition directory as argument")
- }
- domain, t, err := loadTreeDefinitionForExport(ctx.Args().Get(0))
- if err != nil {
- return err
- }
- client := newCloudflareClient(ctx)
- return client.deploy(domain, t)
-}
-
-// dnsToRoute53 performs dnsRoute53Command.
-func dnsToRoute53(ctx *cli.Context) error {
- if ctx.NArg() != 1 {
- return errors.New("need tree definition directory as argument")
- }
- domain, t, err := loadTreeDefinitionForExport(ctx.Args().Get(0))
- if err != nil {
- return err
- }
- client := newRoute53Client(ctx)
- return client.deploy(domain, t)
-}
-
-// dnsNukeRoute53 performs dnsRoute53NukeCommand.
-func dnsNukeRoute53(ctx *cli.Context) error {
- if ctx.NArg() != 1 {
- return errors.New("need domain name as argument")
- }
- client := newRoute53Client(ctx)
- return client.deleteDomain(ctx.Args().First())
-}
-
-// loadSigningKey loads a private key in Ethereum keystore format.
-func loadSigningKey(keyfile string) *ecdsa.PrivateKey {
- keyjson, err := os.ReadFile(keyfile)
- if err != nil {
- exit(fmt.Errorf("failed to read the keyfile at '%s': %v", keyfile, err))
- }
- password, _ := prompt.Stdin.PromptPassword("Please enter the password for '" + keyfile + "': ")
- key, err := keystore.DecryptKey(keyjson, password)
- if err != nil {
- exit(fmt.Errorf("error decrypting key: %v", err))
- }
- return key.PrivateKey
-}
-
-// dnsClient configures the DNS discovery client from command line flags.
-func dnsClient(ctx *cli.Context) *dnsdisc.Client {
- var cfg dnsdisc.Config
- if commandHasFlag(ctx, dnsTimeoutFlag) {
- cfg.Timeout = ctx.Duration(dnsTimeoutFlag.Name)
- }
- return dnsdisc.NewClient(cfg)
-}
-
-// There are two file formats for DNS node trees on disk:
-//
-// The 'TXT' format is a single JSON file containing DNS TXT records
-// as a JSON object where the keys are names and the values are objects
-// containing the value of the record.
-//
-// The 'definition' format is a directory containing two files:
-//
-// enrtree-info.json -- contains sequence number & links to other trees
-// nodes.json -- contains the nodes as a JSON array.
-//
-// This format exists because it's convenient to edit. nodes.json can be generated
-// in multiple ways: it may be written by a DHT crawler or compiled by a human.
-
-type dnsDefinition struct {
- Meta dnsMetaJSON
- Nodes []*enode.Node
-}
-
-type dnsMetaJSON struct {
- URL string `json:"url,omitempty"`
- Seq uint `json:"seq"`
- Sig string `json:"signature,omitempty"`
- Links []string `json:"links"`
- LastModified time.Time `json:"lastModified"`
-}
-
-func treeToDefinition(url string, t *dnsdisc.Tree) *dnsDefinition {
- meta := dnsMetaJSON{
- URL: url,
- Seq: t.Seq(),
- Sig: t.Signature(),
- Links: t.Links(),
- }
- if meta.Links == nil {
- meta.Links = []string{}
- }
- return &dnsDefinition{Meta: meta, Nodes: t.Nodes()}
-}
-
-// loadTreeDefinition loads a directory in 'definition' format.
-func loadTreeDefinition(directory string) *dnsDefinition {
- metaFile, nodesFile := treeDefinitionFiles(directory)
- var def dnsDefinition
- err := common.LoadJSON(metaFile, &def.Meta)
- if err != nil && !os.IsNotExist(err) {
- exit(err)
- }
- if def.Meta.Links == nil {
- def.Meta.Links = []string{}
- }
- // Check link syntax.
- for _, link := range def.Meta.Links {
- if _, _, err := dnsdisc.ParseURL(link); err != nil {
- exit(fmt.Errorf("invalid link %q: %v", link, err))
- }
- }
- // Check/convert nodes.
- nodes := loadNodesJSON(nodesFile)
- if err := nodes.verify(); err != nil {
- exit(err)
- }
- def.Nodes = nodes.nodes()
- return &def
-}
-
-// loadTreeDefinitionForExport loads a DNS tree and ensures it is signed.
-func loadTreeDefinitionForExport(dir string) (domain string, t *dnsdisc.Tree, err error) {
- metaFile, _ := treeDefinitionFiles(dir)
- def := loadTreeDefinition(dir)
- if def.Meta.URL == "" {
- return "", nil, fmt.Errorf("missing 'url' field in %v", metaFile)
- }
- domain, pubkey, err := dnsdisc.ParseURL(def.Meta.URL)
- if err != nil {
- return "", nil, fmt.Errorf("invalid 'url' field in %v: %v", metaFile, err)
- }
- if t, err = dnsdisc.MakeTree(def.Meta.Seq, def.Nodes, def.Meta.Links); err != nil {
- return "", nil, err
- }
- if err := ensureValidTreeSignature(t, pubkey, def.Meta.Sig); err != nil {
- return "", nil, err
- }
- return domain, t, nil
-}
-
-// ensureValidTreeSignature checks that sig is valid for tree and assigns it as the
-// tree's signature if valid.
-func ensureValidTreeSignature(t *dnsdisc.Tree, pubkey *ecdsa.PublicKey, sig string) error {
- if sig == "" {
- return errors.New("missing signature, run 'devp2p dns sign' first")
- }
- if err := t.SetSignature(pubkey, sig); err != nil {
- return errors.New("invalid signature on tree, run 'devp2p dns sign' to update it")
- }
- return nil
-}
-
-// writeTreeMetadata writes a DNS node tree metadata file to the given directory.
-func writeTreeMetadata(directory string, def *dnsDefinition) {
- metaJSON, err := json.MarshalIndent(&def.Meta, "", jsonIndent)
- if err != nil {
- exit(err)
- }
- if err := os.Mkdir(directory, 0744); err != nil && !os.IsExist(err) {
- exit(err)
- }
- metaFile, _ := treeDefinitionFiles(directory)
- if err := os.WriteFile(metaFile, metaJSON, 0644); err != nil {
- exit(err)
- }
-}
-
-func writeTreeNodes(directory string, def *dnsDefinition) {
- ns := make(nodeSet, len(def.Nodes))
- ns.add(def.Nodes...)
- _, nodesFile := treeDefinitionFiles(directory)
- writeNodesJSON(nodesFile, ns)
-}
-
-func treeDefinitionFiles(directory string) (string, string) {
- meta := filepath.Join(directory, "enrtree-info.json")
- nodes := filepath.Join(directory, "nodes.json")
- return meta, nodes
-}
-
-// writeTXTJSON writes TXT records in JSON format.
-func writeTXTJSON(file string, txt map[string]string) {
- txtJSON, err := json.MarshalIndent(txt, "", jsonIndent)
- if err != nil {
- exit(err)
- }
- if file == "-" {
- os.Stdout.Write(txtJSON)
- fmt.Println()
- return
- }
- if err := os.WriteFile(file, txtJSON, 0644); err != nil {
- exit(err)
- }
-}
diff --git a/cmd/devp2p/enrcmd.go b/cmd/devp2p/enrcmd.go
deleted file mode 100644
index c5a97c8411..0000000000
--- a/cmd/devp2p/enrcmd.go
+++ /dev/null
@@ -1,209 +0,0 @@
-// Copyright 2019 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "bytes"
- "encoding/base64"
- "encoding/hex"
- "errors"
- "fmt"
- "io"
- "net"
- "os"
- "strconv"
- "strings"
-
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/urfave/cli/v2"
-)
-
-var fileFlag = &cli.StringFlag{Name: "file"}
-
-var enrdumpCommand = &cli.Command{
- Name: "enrdump",
- Usage: "Pretty-prints node records",
- Action: enrdump,
- Flags: []cli.Flag{
- fileFlag,
- },
-}
-
-func enrdump(ctx *cli.Context) error {
- var source string
- if file := ctx.String(fileFlag.Name); file != "" {
- if ctx.NArg() != 0 {
- return errors.New("can't dump record from command-line argument in -file mode")
- }
- var b []byte
- var err error
- if file == "-" {
- b, err = io.ReadAll(os.Stdin)
- } else {
- b, err = os.ReadFile(file)
- }
- if err != nil {
- return err
- }
- source = string(b)
- } else if ctx.NArg() == 1 {
- source = ctx.Args().First()
- } else {
- return errors.New("need record as argument")
- }
-
- r, err := parseRecord(source)
- if err != nil {
- return fmt.Errorf("INVALID: %v", err)
- }
- dumpRecord(os.Stdout, r)
- return nil
-}
-
-// dumpRecord creates a human-readable description of the given node record.
-func dumpRecord(out io.Writer, r *enr.Record) {
- n, err := enode.New(enode.ValidSchemes, r)
- if err != nil {
- fmt.Fprintf(out, "INVALID: %v\n", err)
- } else {
- fmt.Fprintf(out, "Node ID: %v\n", n.ID())
- dumpNodeURL(out, n)
- }
- kv := r.AppendElements(nil)[1:]
- fmt.Fprintf(out, "Record has sequence number %d and %d key/value pairs.\n", r.Seq(), len(kv)/2)
- fmt.Fprint(out, dumpRecordKV(kv, 2))
-}
-
-func dumpNodeURL(out io.Writer, n *enode.Node) {
- var key enode.Secp256k1
- if n.Load(&key) != nil {
- return // no secp256k1 public key
- }
- fmt.Fprintf(out, "URLv4: %s\n", n.URLv4())
-}
-
-func dumpRecordKV(kv []interface{}, indent int) string {
- // Determine the longest key name for alignment.
- var out string
- var longestKey = 0
- for i := 0; i < len(kv); i += 2 {
- key := kv[i].(string)
- if len(key) > longestKey {
- longestKey = len(key)
- }
- }
- // Print the keys, invoking formatters for known keys.
- for i := 0; i < len(kv); i += 2 {
- key := kv[i].(string)
- val := kv[i+1].(rlp.RawValue)
- pad := longestKey - len(key)
- out += strings.Repeat(" ", indent) + strconv.Quote(key) + strings.Repeat(" ", pad+1)
- formatter := attrFormatters[key]
- if formatter == nil {
- formatter = formatAttrRaw
- }
- fmtval, ok := formatter(val)
- if ok {
- out += fmtval + "\n"
- } else {
- out += hex.EncodeToString(val) + " (!)\n"
- }
- }
- return out
-}
-
-// parseNode parses a node record and verifies its signature.
-func parseNode(source string) (*enode.Node, error) {
- if strings.HasPrefix(source, "enode://") {
- return enode.ParseV4(source)
- }
- r, err := parseRecord(source)
- if err != nil {
- return nil, err
- }
- return enode.New(enode.ValidSchemes, r)
-}
-
-// parseRecord parses a node record from hex, base64, or raw binary input.
-func parseRecord(source string) (*enr.Record, error) {
- bin := []byte(source)
- if d, ok := decodeRecordHex(bytes.TrimSpace(bin)); ok {
- bin = d
- } else if d, ok := decodeRecordBase64(bytes.TrimSpace(bin)); ok {
- bin = d
- }
- var r enr.Record
- err := rlp.DecodeBytes(bin, &r)
- return &r, err
-}
-
-func decodeRecordHex(b []byte) ([]byte, bool) {
- if bytes.HasPrefix(b, []byte("0x")) {
- b = b[2:]
- }
- dec := make([]byte, hex.DecodedLen(len(b)))
- _, err := hex.Decode(dec, b)
- return dec, err == nil
-}
-
-func decodeRecordBase64(b []byte) ([]byte, bool) {
- if bytes.HasPrefix(b, []byte("enr:")) {
- b = b[4:]
- }
- dec := make([]byte, base64.RawURLEncoding.DecodedLen(len(b)))
- n, err := base64.RawURLEncoding.Decode(dec, b)
- return dec[:n], err == nil
-}
-
-// attrFormatters contains formatting functions for well-known ENR keys.
-var attrFormatters = map[string]func(rlp.RawValue) (string, bool){
- "id": formatAttrString,
- "ip": formatAttrIP,
- "ip6": formatAttrIP,
- "tcp": formatAttrUint,
- "tcp6": formatAttrUint,
- "udp": formatAttrUint,
- "udp6": formatAttrUint,
-}
-
-func formatAttrRaw(v rlp.RawValue) (string, bool) {
- s := hex.EncodeToString(v)
- return s, true
-}
-
-func formatAttrString(v rlp.RawValue) (string, bool) {
- content, _, err := rlp.SplitString(v)
- return strconv.Quote(string(content)), err == nil
-}
-
-func formatAttrIP(v rlp.RawValue) (string, bool) {
- content, _, err := rlp.SplitString(v)
- if err != nil || len(content) != 4 && len(content) != 6 {
- return "", false
- }
- return net.IP(content).String(), true
-}
-
-func formatAttrUint(v rlp.RawValue) (string, bool) {
- var x uint64
- if err := rlp.DecodeBytes(v, &x); err != nil {
- return "", false
- }
- return strconv.FormatUint(x, 10), true
-}
diff --git a/cmd/devp2p/internal/ethtest/chain.go b/cmd/devp2p/internal/ethtest/chain.go
deleted file mode 100644
index e8b3725b17..0000000000
--- a/cmd/devp2p/internal/ethtest/chain.go
+++ /dev/null
@@ -1,353 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package ethtest
-
-import (
- "bytes"
- "compress/gzip"
- "crypto/ecdsa"
- "encoding/json"
- "errors"
- "fmt"
- "io"
- "math/big"
- "os"
- "path"
- "sort"
- "strings"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/forkid"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
- "golang.org/x/exp/slices"
-)
-
-// Chain is a lightweight blockchain-like store which can read a hivechain
-// created chain.
-type Chain struct {
- genesis core.Genesis
- blocks []*types.Block
- state map[common.Address]state.DumpAccount // state of head block
- senders map[common.Address]*senderInfo
- config *params.ChainConfig
-}
-
-// NewChain takes the given chain.rlp file, and decodes and returns
-// the blocks from the file.
-func NewChain(dir string) (*Chain, error) {
- gen, err := loadGenesis(path.Join(dir, "genesis.json"))
- if err != nil {
- return nil, err
- }
- gblock := gen.ToBlock()
-
- blocks, err := blocksFromFile(path.Join(dir, "chain.rlp"), gblock)
- if err != nil {
- return nil, err
- }
- state, err := readState(path.Join(dir, "headstate.json"))
- if err != nil {
- return nil, err
- }
- accounts, err := readAccounts(path.Join(dir, "accounts.json"))
- if err != nil {
- return nil, err
- }
- return &Chain{
- genesis: gen,
- blocks: blocks,
- state: state,
- senders: accounts,
- config: gen.Config,
- }, nil
-}
-
-// senderInfo is an account record as output in the "accounts.json" file from
-// hivechain.
-type senderInfo struct {
- Key *ecdsa.PrivateKey `json:"key"`
- Nonce uint64 `json:"nonce"`
-}
-
-// Head returns the chain head.
-func (c *Chain) Head() *types.Block {
- return c.blocks[c.Len()-1]
-}
-
-// AccountsInHashOrder returns all accounts of the head state, ordered by hash of address.
-func (c *Chain) AccountsInHashOrder() []state.DumpAccount {
- list := make([]state.DumpAccount, len(c.state))
- i := 0
- for addr, acc := range c.state {
- addr := addr
- list[i] = acc
- list[i].Address = &addr
- if len(acc.AddressHash) != 32 {
- panic(fmt.Errorf("missing/invalid SecureKey in dump account %v", addr))
- }
- i++
- }
- slices.SortFunc(list, func(x, y state.DumpAccount) int {
- return bytes.Compare(x.AddressHash, y.AddressHash)
- })
- return list
-}
-
-// CodeHashes returns all bytecode hashes contained in the head state.
-func (c *Chain) CodeHashes() []common.Hash {
- var hashes []common.Hash
- seen := make(map[common.Hash]struct{})
- seen[types.EmptyCodeHash] = struct{}{}
- for _, acc := range c.state {
- h := common.BytesToHash(acc.CodeHash)
- if _, ok := seen[h]; ok {
- continue
- }
- hashes = append(hashes, h)
- seen[h] = struct{}{}
- }
- slices.SortFunc(hashes, (common.Hash).Cmp)
- return hashes
-}
-
-// Len returns the length of the chain.
-func (c *Chain) Len() int {
- return len(c.blocks)
-}
-
-// ForkID gets the fork id of the chain.
-func (c *Chain) ForkID() forkid.ID {
- return forkid.NewID(c.config, c.blocks[0], uint64(c.Len()), c.blocks[c.Len()-1].Time())
-}
-
-// TD calculates the total difficulty of the chain at the
-// chain head.
-func (c *Chain) TD() *big.Int {
- sum := new(big.Int)
- for _, block := range c.blocks[:c.Len()] {
- sum.Add(sum, block.Difficulty())
- }
- return sum
-}
-
-// GetBlock returns the block at the specified number.
-func (c *Chain) GetBlock(number int) *types.Block {
- return c.blocks[number]
-}
-
-// RootAt returns the state root for the block at the given height.
-func (c *Chain) RootAt(height int) common.Hash {
- if height < c.Len() {
- return c.blocks[height].Root()
- }
- return common.Hash{}
-}
-
-// GetSender returns the address associated with account at the index in the
-// pre-funded accounts list.
-func (c *Chain) GetSender(idx int) (common.Address, uint64) {
- var accounts Addresses
- for addr := range c.senders {
- accounts = append(accounts, addr)
- }
- sort.Sort(accounts)
- addr := accounts[idx]
- return addr, c.senders[addr].Nonce
-}
-
-// IncNonce increases the specified signing account's pending nonce.
-func (c *Chain) IncNonce(addr common.Address, amt uint64) {
- if _, ok := c.senders[addr]; !ok {
- panic("nonce increment for non-signer")
- }
- c.senders[addr].Nonce += amt
-}
-
-// Balance returns the balance of an account at the head of the chain.
-func (c *Chain) Balance(addr common.Address) *big.Int {
- bal := new(big.Int)
- if acc, ok := c.state[addr]; ok {
- bal, _ = bal.SetString(acc.Balance, 10)
- }
- return bal
-}
-
-// SignTx signs a transaction for the specified from account, so long as that
-// account was in the hivechain accounts dump.
-func (c *Chain) SignTx(from common.Address, tx *types.Transaction) (*types.Transaction, error) {
- signer := types.LatestSigner(c.config)
- acc, ok := c.senders[from]
- if !ok {
- return nil, fmt.Errorf("account not available for signing: %s", from)
- }
- return types.SignTx(tx, signer, acc.Key)
-}
-
-// GetHeaders returns the headers base on an ethGetPacketHeadersPacket.
-func (c *Chain) GetHeaders(req *eth.GetBlockHeadersPacket) ([]*types.Header, error) {
- if req.Amount < 1 {
- return nil, errors.New("no block headers requested")
- }
- var (
- headers = make([]*types.Header, req.Amount)
- blockNumber uint64
- )
- // Range over blocks to check if our chain has the requested header.
- for _, block := range c.blocks {
- if block.Hash() == req.Origin.Hash || block.Number().Uint64() == req.Origin.Number {
- headers[0] = block.Header()
- blockNumber = block.Number().Uint64()
- }
- }
- if headers[0] == nil {
- return nil, fmt.Errorf("no headers found for given origin number %v, hash %v", req.Origin.Number, req.Origin.Hash)
- }
- if req.Reverse {
- for i := 1; i < int(req.Amount); i++ {
- blockNumber -= (1 - req.Skip)
- headers[i] = c.blocks[blockNumber].Header()
- }
- return headers, nil
- }
- for i := 1; i < int(req.Amount); i++ {
- blockNumber += (1 + req.Skip)
- headers[i] = c.blocks[blockNumber].Header()
- }
- return headers, nil
-}
-
-// Shorten returns a copy chain of a desired height from the imported
-func (c *Chain) Shorten(height int) *Chain {
- blocks := make([]*types.Block, height)
- copy(blocks, c.blocks[:height])
-
- config := *c.config
- return &Chain{
- blocks: blocks,
- config: &config,
- }
-}
-
-func loadGenesis(genesisFile string) (core.Genesis, error) {
- chainConfig, err := os.ReadFile(genesisFile)
- if err != nil {
- return core.Genesis{}, err
- }
- var gen core.Genesis
- if err := json.Unmarshal(chainConfig, &gen); err != nil {
- return core.Genesis{}, err
- }
- return gen, nil
-}
-
-type Addresses []common.Address
-
-func (a Addresses) Len() int {
- return len(a)
-}
-
-func (a Addresses) Less(i, j int) bool {
- return bytes.Compare(a[i][:], a[j][:]) < 0
-}
-
-func (a Addresses) Swap(i, j int) {
- tmp := a[i]
- a[i] = a[j]
- a[j] = tmp
-}
-
-func blocksFromFile(chainfile string, gblock *types.Block) ([]*types.Block, error) {
- // Load chain.rlp.
- fh, err := os.Open(chainfile)
- if err != nil {
- return nil, err
- }
- defer fh.Close()
- var reader io.Reader = fh
- if strings.HasSuffix(chainfile, ".gz") {
- if reader, err = gzip.NewReader(reader); err != nil {
- return nil, err
- }
- }
- stream := rlp.NewStream(reader, 0)
- var blocks = make([]*types.Block, 1)
- blocks[0] = gblock
- for i := 0; ; i++ {
- var b types.Block
- if err := stream.Decode(&b); err == io.EOF {
- break
- } else if err != nil {
- return nil, fmt.Errorf("at block index %d: %v", i, err)
- }
- if b.NumberU64() != uint64(i+1) {
- return nil, fmt.Errorf("block at index %d has wrong number %d", i, b.NumberU64())
- }
- blocks = append(blocks, &b)
- }
- return blocks, nil
-}
-
-func readState(file string) (map[common.Address]state.DumpAccount, error) {
- f, err := os.ReadFile(file)
- if err != nil {
- return nil, fmt.Errorf("unable to read state: %v", err)
- }
- var dump state.Dump
- if err := json.Unmarshal(f, &dump); err != nil {
- return nil, fmt.Errorf("unable to unmarshal state: %v", err)
- }
-
- state := make(map[common.Address]state.DumpAccount)
- for key, acct := range dump.Accounts {
- var addr common.Address
- if err := addr.UnmarshalText([]byte(key)); err != nil {
- return nil, fmt.Errorf("invalid address %q", key)
- }
- state[addr] = acct
- }
- return state, nil
-}
-
-func readAccounts(file string) (map[common.Address]*senderInfo, error) {
- f, err := os.ReadFile(file)
- if err != nil {
- return nil, fmt.Errorf("unable to read state: %v", err)
- }
- type account struct {
- Key hexutil.Bytes `json:"key"`
- }
- keys := make(map[common.Address]account)
- if err := json.Unmarshal(f, &keys); err != nil {
- return nil, fmt.Errorf("unable to unmarshal accounts: %v", err)
- }
- accounts := make(map[common.Address]*senderInfo)
- for addr, acc := range keys {
- pk, err := crypto.HexToECDSA(common.Bytes2Hex(acc.Key))
- if err != nil {
- return nil, fmt.Errorf("unable to read private key for %s: %v", err, addr)
- }
- accounts[addr] = &senderInfo{Key: pk, Nonce: 0}
- }
- return accounts, nil
-}
diff --git a/cmd/devp2p/internal/ethtest/chain_test.go b/cmd/devp2p/internal/ethtest/chain_test.go
deleted file mode 100644
index 62bd6d26ea..0000000000
--- a/cmd/devp2p/internal/ethtest/chain_test.go
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package ethtest
-
-import (
- "path/filepath"
- "strconv"
- "testing"
-
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/stretchr/testify/assert"
-)
-
-// TestEthProtocolNegotiation tests whether the test suite
-// can negotiate the highest eth protocol in a status message exchange
-func TestEthProtocolNegotiation(t *testing.T) {
- t.Parallel()
- var tests = []struct {
- conn *Conn
- caps []p2p.Cap
- expected uint32
- }{
- {
- conn: &Conn{
- ourHighestProtoVersion: 65,
- },
- caps: []p2p.Cap{
- {Name: "eth", Version: 63},
- {Name: "eth", Version: 64},
- {Name: "eth", Version: 65},
- },
- expected: uint32(65),
- },
- {
- conn: &Conn{
- ourHighestProtoVersion: 65,
- },
- caps: []p2p.Cap{
- {Name: "eth", Version: 63},
- {Name: "eth", Version: 64},
- {Name: "eth", Version: 65},
- },
- expected: uint32(65),
- },
- {
- conn: &Conn{
- ourHighestProtoVersion: 65,
- },
- caps: []p2p.Cap{
- {Name: "eth", Version: 63},
- {Name: "eth", Version: 64},
- {Name: "eth", Version: 65},
- },
- expected: uint32(65),
- },
- {
- conn: &Conn{
- ourHighestProtoVersion: 64,
- },
- caps: []p2p.Cap{
- {Name: "eth", Version: 63},
- {Name: "eth", Version: 64},
- {Name: "eth", Version: 65},
- },
- expected: 64,
- },
- {
- conn: &Conn{
- ourHighestProtoVersion: 65,
- },
- caps: []p2p.Cap{
- {Name: "eth", Version: 0},
- {Name: "eth", Version: 89},
- {Name: "eth", Version: 65},
- },
- expected: uint32(65),
- },
- {
- conn: &Conn{
- ourHighestProtoVersion: 64,
- },
- caps: []p2p.Cap{
- {Name: "eth", Version: 63},
- {Name: "eth", Version: 64},
- {Name: "wrongProto", Version: 65},
- },
- expected: uint32(64),
- },
- {
- conn: &Conn{
- ourHighestProtoVersion: 65,
- },
- caps: []p2p.Cap{
- {Name: "eth", Version: 63},
- {Name: "eth", Version: 64},
- {Name: "wrongProto", Version: 65},
- },
- expected: uint32(64),
- },
- }
-
- for i, tt := range tests {
- t.Run(strconv.Itoa(i), func(t *testing.T) {
- tt.conn.negotiateEthProtocol(tt.caps)
- assert.Equal(t, tt.expected, uint32(tt.conn.negotiatedProtoVersion))
- })
- }
-}
-
-// TestChainGetHeaders tests whether the test suite can correctly
-// respond to a GetBlockHeaders request from a node.
-func TestChainGetHeaders(t *testing.T) {
- t.Parallel()
-
- dir, err := filepath.Abs("./testdata")
- if err != nil {
- t.Fatal(err)
- }
- chain, err := NewChain(dir)
- if err != nil {
- t.Fatal(err)
- }
-
- var tests = []struct {
- req eth.GetBlockHeadersPacket
- expected []*types.Header
- }{
- {
- req: eth.GetBlockHeadersPacket{
- GetBlockHeadersRequest: ð.GetBlockHeadersRequest{
- Origin: eth.HashOrNumber{Number: uint64(2)},
- Amount: uint64(5),
- Skip: 1,
- Reverse: false,
- },
- },
- expected: []*types.Header{
- chain.blocks[2].Header(),
- chain.blocks[4].Header(),
- chain.blocks[6].Header(),
- chain.blocks[8].Header(),
- chain.blocks[10].Header(),
- },
- },
- {
- req: eth.GetBlockHeadersPacket{
- GetBlockHeadersRequest: ð.GetBlockHeadersRequest{
- Origin: eth.HashOrNumber{Number: uint64(chain.Len() - 1)},
- Amount: uint64(3),
- Skip: 0,
- Reverse: true,
- },
- },
- expected: []*types.Header{
- chain.blocks[chain.Len()-1].Header(),
- chain.blocks[chain.Len()-2].Header(),
- chain.blocks[chain.Len()-3].Header(),
- },
- },
- {
- req: eth.GetBlockHeadersPacket{
- GetBlockHeadersRequest: ð.GetBlockHeadersRequest{
- Origin: eth.HashOrNumber{Hash: chain.Head().Hash()},
- Amount: uint64(1),
- Skip: 0,
- Reverse: false,
- },
- },
- expected: []*types.Header{
- chain.Head().Header(),
- },
- },
- }
-
- for i, tt := range tests {
- t.Run(strconv.Itoa(i), func(t *testing.T) {
- headers, err := chain.GetHeaders(&tt.req)
- if err != nil {
- t.Fatal(err)
- }
- assert.Equal(t, headers, tt.expected)
- })
- }
-}
diff --git a/cmd/devp2p/internal/ethtest/conn.go b/cmd/devp2p/internal/ethtest/conn.go
deleted file mode 100644
index 2d36ccb423..0000000000
--- a/cmd/devp2p/internal/ethtest/conn.go
+++ /dev/null
@@ -1,361 +0,0 @@
-// Copyright 2023 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package ethtest
-
-import (
- "crypto/ecdsa"
- "errors"
- "fmt"
- "net"
- "reflect"
- "time"
-
- "github.com/davecgh/go-spew/spew"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/eth/protocols/snap"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/rlpx"
- "github.com/ethereum/go-ethereum/rlp"
-)
-
-var (
- pretty = spew.ConfigState{
- Indent: " ",
- DisableCapacities: true,
- DisablePointerAddresses: true,
- SortKeys: true,
- }
- timeout = 2 * time.Second
-)
-
-// dial attempts to dial the given node and perform a handshake, returning the
-// created Conn if successful.
-func (s *Suite) dial() (*Conn, error) {
- key, _ := crypto.GenerateKey()
- return s.dialAs(key)
-}
-
-// dialAs attempts to dial a given node and perform a handshake using the given
-// private key.
-func (s *Suite) dialAs(key *ecdsa.PrivateKey) (*Conn, error) {
- fd, err := net.Dial("tcp", fmt.Sprintf("%v:%d", s.Dest.IP(), s.Dest.TCP()))
- if err != nil {
- return nil, err
- }
- conn := Conn{Conn: rlpx.NewConn(fd, s.Dest.Pubkey())}
- conn.ourKey = key
- _, err = conn.Handshake(conn.ourKey)
- if err != nil {
- conn.Close()
- return nil, err
- }
- conn.caps = []p2p.Cap{
- {Name: "eth", Version: 67},
- {Name: "eth", Version: 68},
- }
- conn.ourHighestProtoVersion = 68
- return &conn, nil
-}
-
-// dialSnap creates a connection with snap/1 capability.
-func (s *Suite) dialSnap() (*Conn, error) {
- conn, err := s.dial()
- if err != nil {
- return nil, fmt.Errorf("dial failed: %v", err)
- }
- conn.caps = append(conn.caps, p2p.Cap{Name: "snap", Version: 1})
- conn.ourHighestSnapProtoVersion = 1
- return conn, nil
-}
-
-// Conn represents an individual connection with a peer
-type Conn struct {
- *rlpx.Conn
- ourKey *ecdsa.PrivateKey
- negotiatedProtoVersion uint
- negotiatedSnapProtoVersion uint
- ourHighestProtoVersion uint
- ourHighestSnapProtoVersion uint
- caps []p2p.Cap
-}
-
-// Read reads a packet from the connection.
-func (c *Conn) Read() (uint64, []byte, error) {
- c.SetReadDeadline(time.Now().Add(timeout))
- code, data, _, err := c.Conn.Read()
- if err != nil {
- return 0, nil, err
- }
- return code, data, nil
-}
-
-// ReadMsg attempts to read a devp2p message with a specific code.
-func (c *Conn) ReadMsg(proto Proto, code uint64, msg any) error {
- c.SetReadDeadline(time.Now().Add(timeout))
- for {
- got, data, err := c.Read()
- if err != nil {
- return err
- }
- if protoOffset(proto)+code == got {
- return rlp.DecodeBytes(data, msg)
- }
- }
-}
-
-// Write writes a eth packet to the connection.
-func (c *Conn) Write(proto Proto, code uint64, msg any) error {
- c.SetWriteDeadline(time.Now().Add(timeout))
- payload, err := rlp.EncodeToBytes(msg)
- if err != nil {
- return err
- }
- _, err = c.Conn.Write(protoOffset(proto)+code, payload)
- return err
-}
-
-// ReadEth reads an Eth sub-protocol wire message.
-func (c *Conn) ReadEth() (any, error) {
- c.SetReadDeadline(time.Now().Add(timeout))
- for {
- code, data, _, err := c.Conn.Read()
- if err != nil {
- return nil, err
- }
- if code == pingMsg {
- c.Write(baseProto, pongMsg, []byte{})
- continue
- }
- if getProto(code) != ethProto {
- // Read until eth message.
- continue
- }
- code -= baseProtoLen
-
- var msg any
- switch int(code) {
- case eth.StatusMsg:
- msg = new(eth.StatusPacket)
- case eth.GetBlockHeadersMsg:
- msg = new(eth.GetBlockHeadersPacket)
- case eth.BlockHeadersMsg:
- msg = new(eth.BlockHeadersPacket)
- case eth.GetBlockBodiesMsg:
- msg = new(eth.GetBlockBodiesPacket)
- case eth.BlockBodiesMsg:
- msg = new(eth.BlockBodiesPacket)
- case eth.NewBlockMsg:
- msg = new(eth.NewBlockPacket)
- case eth.NewBlockHashesMsg:
- msg = new(eth.NewBlockHashesPacket)
- case eth.TransactionsMsg:
- msg = new(eth.TransactionsPacket)
- case eth.NewPooledTransactionHashesMsg:
- msg = new(eth.NewPooledTransactionHashesPacket68)
- case eth.GetPooledTransactionsMsg:
- msg = new(eth.GetPooledTransactionsPacket)
- case eth.PooledTransactionsMsg:
- msg = new(eth.PooledTransactionsPacket)
- default:
- panic(fmt.Sprintf("unhandled eth msg code %d", code))
- }
- if err := rlp.DecodeBytes(data, msg); err != nil {
- return nil, fmt.Errorf("unable to decode eth msg: %v", err)
- }
- return msg, nil
- }
-}
-
-// ReadSnap reads a snap/1 response with the given id from the connection.
-func (c *Conn) ReadSnap() (any, error) {
- c.SetReadDeadline(time.Now().Add(timeout))
- for {
- code, data, _, err := c.Conn.Read()
- if err != nil {
- return nil, err
- }
- if getProto(code) != snapProto {
- // Read until snap message.
- continue
- }
- code -= baseProtoLen + ethProtoLen
-
- var msg any
- switch int(code) {
- case snap.GetAccountRangeMsg:
- msg = new(snap.GetAccountRangePacket)
- case snap.AccountRangeMsg:
- msg = new(snap.AccountRangePacket)
- case snap.GetStorageRangesMsg:
- msg = new(snap.GetStorageRangesPacket)
- case snap.StorageRangesMsg:
- msg = new(snap.StorageRangesPacket)
- case snap.GetByteCodesMsg:
- msg = new(snap.GetByteCodesPacket)
- case snap.ByteCodesMsg:
- msg = new(snap.ByteCodesPacket)
- case snap.GetTrieNodesMsg:
- msg = new(snap.GetTrieNodesPacket)
- case snap.TrieNodesMsg:
- msg = new(snap.TrieNodesPacket)
- default:
- panic(fmt.Errorf("unhandled snap code: %d", code))
- }
- if err := rlp.DecodeBytes(data, msg); err != nil {
- return nil, fmt.Errorf("could not rlp decode message: %v", err)
- }
- return msg, nil
- }
-}
-
-// peer performs both the protocol handshake and the status message
-// exchange with the node in order to peer with it.
-func (c *Conn) peer(chain *Chain, status *eth.StatusPacket) error {
- if err := c.handshake(); err != nil {
- return fmt.Errorf("handshake failed: %v", err)
- }
- if err := c.statusExchange(chain, status); err != nil {
- return fmt.Errorf("status exchange failed: %v", err)
- }
- return nil
-}
-
-// handshake performs a protocol handshake with the node.
-func (c *Conn) handshake() error {
- // Write hello to client.
- pub0 := crypto.FromECDSAPub(&c.ourKey.PublicKey)[1:]
- ourHandshake := &protoHandshake{
- Version: 5,
- Caps: c.caps,
- ID: pub0,
- }
- if err := c.Write(baseProto, handshakeMsg, ourHandshake); err != nil {
- return fmt.Errorf("write to connection failed: %v", err)
- }
- // Read hello from client.
- code, data, err := c.Read()
- if err != nil {
- return fmt.Errorf("erroring reading handshake: %v", err)
- }
- switch code {
- case handshakeMsg:
- msg := new(protoHandshake)
- if err := rlp.DecodeBytes(data, &msg); err != nil {
- return fmt.Errorf("error decoding handshake msg: %v", err)
- }
- // Set snappy if version is at least 5.
- if msg.Version >= 5 {
- c.SetSnappy(true)
- }
- c.negotiateEthProtocol(msg.Caps)
- if c.negotiatedProtoVersion == 0 {
- return fmt.Errorf("could not negotiate eth protocol (remote caps: %v, local eth version: %v)", msg.Caps, c.ourHighestProtoVersion)
- }
- // If we require snap, verify that it was negotiated.
- if c.ourHighestSnapProtoVersion != c.negotiatedSnapProtoVersion {
- return fmt.Errorf("could not negotiate snap protocol (remote caps: %v, local snap version: %v)", msg.Caps, c.ourHighestSnapProtoVersion)
- }
- return nil
- default:
- return fmt.Errorf("bad handshake: got msg code %d", code)
- }
-}
-
-// negotiateEthProtocol sets the Conn's eth protocol version to highest
-// advertised capability from peer.
-func (c *Conn) negotiateEthProtocol(caps []p2p.Cap) {
- var highestEthVersion uint
- var highestSnapVersion uint
- for _, capability := range caps {
- switch capability.Name {
- case "eth":
- if capability.Version > highestEthVersion && capability.Version <= c.ourHighestProtoVersion {
- highestEthVersion = capability.Version
- }
- case "snap":
- if capability.Version > highestSnapVersion && capability.Version <= c.ourHighestSnapProtoVersion {
- highestSnapVersion = capability.Version
- }
- }
- }
- c.negotiatedProtoVersion = highestEthVersion
- c.negotiatedSnapProtoVersion = highestSnapVersion
-}
-
-// statusExchange performs a `Status` message exchange with the given node.
-func (c *Conn) statusExchange(chain *Chain, status *eth.StatusPacket) error {
-loop:
- for {
- code, data, err := c.Read()
- if err != nil {
- return fmt.Errorf("failed to read from connection: %w", err)
- }
- switch code {
- case eth.StatusMsg + protoOffset(ethProto):
- msg := new(eth.StatusPacket)
- if err := rlp.DecodeBytes(data, &msg); err != nil {
- return fmt.Errorf("error decoding status packet: %w", err)
- }
- if have, want := msg.Head, chain.blocks[chain.Len()-1].Hash(); have != want {
- return fmt.Errorf("wrong head block in status, want: %#x (block %d) have %#x",
- want, chain.blocks[chain.Len()-1].NumberU64(), have)
- }
- if have, want := msg.TD.Cmp(chain.TD()), 0; have != want {
- return fmt.Errorf("wrong TD in status: have %v want %v", have, want)
- }
- if have, want := msg.ForkID, chain.ForkID(); !reflect.DeepEqual(have, want) {
- return fmt.Errorf("wrong fork ID in status: have %v, want %v", have, want)
- }
- if have, want := msg.ProtocolVersion, c.ourHighestProtoVersion; have != uint32(want) {
- return fmt.Errorf("wrong protocol version: have %v, want %v", have, want)
- }
- break loop
- case discMsg:
- var msg []p2p.DiscReason
- if rlp.DecodeBytes(data, &msg); len(msg) == 0 {
- return errors.New("invalid disconnect message")
- }
- return fmt.Errorf("disconnect received: %v", pretty.Sdump(msg))
- case pingMsg:
- // TODO (renaynay): in the future, this should be an error
- // (PINGs should not be a response upon fresh connection)
- c.Write(baseProto, pongMsg, nil)
- default:
- return fmt.Errorf("bad status message: code %d", code)
- }
- }
- // make sure eth protocol version is set for negotiation
- if c.negotiatedProtoVersion == 0 {
- return errors.New("eth protocol version must be set in Conn")
- }
- if status == nil {
- // default status message
- status = ð.StatusPacket{
- ProtocolVersion: uint32(c.negotiatedProtoVersion),
- NetworkID: chain.config.ChainID.Uint64(),
- TD: chain.TD(),
- Head: chain.blocks[chain.Len()-1].Hash(),
- Genesis: chain.blocks[0].Hash(),
- ForkID: chain.ForkID(),
- }
- }
- if err := c.Write(ethProto, eth.StatusMsg, status); err != nil {
- return fmt.Errorf("write to connection failed: %v", err)
- }
- return nil
-}
diff --git a/cmd/devp2p/internal/ethtest/engine.go b/cmd/devp2p/internal/ethtest/engine.go
deleted file mode 100644
index ea4fc76e6f..0000000000
--- a/cmd/devp2p/internal/ethtest/engine.go
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2023 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package ethtest
-
-import (
- "bytes"
- "fmt"
- "io"
- "net/http"
- "os"
- "path"
- "time"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/golang-jwt/jwt/v4"
-)
-
-// EngineClient is a wrapper around engine-related data.
-type EngineClient struct {
- url string
- jwt [32]byte
- headfcu []byte
-}
-
-// NewEngineClient creates a new engine client.
-func NewEngineClient(dir, url, jwt string) (*EngineClient, error) {
- headfcu, err := os.ReadFile(path.Join(dir, "headfcu.json"))
- if err != nil {
- return nil, fmt.Errorf("failed to read headfcu: %w", err)
- }
- return &EngineClient{url, common.HexToHash(jwt), headfcu}, nil
-}
-
-// token returns the jwt claim token for authorization.
-func (ec *EngineClient) token() string {
- claims := jwt.RegisteredClaims{IssuedAt: jwt.NewNumericDate(time.Now())}
- token, _ := jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(ec.jwt[:])
- return token
-}
-
-// sendForkchoiceUpdated sends an fcu for the head of the generated chain.
-func (ec *EngineClient) sendForkchoiceUpdated() error {
- var (
- req, _ = http.NewRequest(http.MethodPost, ec.url, io.NopCloser(bytes.NewReader(ec.headfcu)))
- header = make(http.Header)
- )
- // Set header
- header.Set("accept", "application/json")
- header.Set("content-type", "application/json")
- header.Set("Authorization", fmt.Sprintf("Bearer %v", ec.token()))
- req.Header = header
-
- _, err := new(http.Client).Do(req)
- return err
-}
diff --git a/cmd/devp2p/internal/ethtest/mkchain.sh b/cmd/devp2p/internal/ethtest/mkchain.sh
deleted file mode 100644
index b9253e8ca7..0000000000
--- a/cmd/devp2p/internal/ethtest/mkchain.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-hivechain generate \
- --fork-interval 6 \
- --tx-interval 1 \
- --length 500 \
- --outdir testdata \
- --lastfork cancun \
- --outputs accounts,genesis,chain,headstate,txinfo,headblock,headfcu,newpayload,forkenv
diff --git a/cmd/devp2p/internal/ethtest/protocol.go b/cmd/devp2p/internal/ethtest/protocol.go
deleted file mode 100644
index f5f5f7e489..0000000000
--- a/cmd/devp2p/internal/ethtest/protocol.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2023 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-package ethtest
-
-import (
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/rlp"
-)
-
-// Unexported devp2p message codes from p2p/peer.go.
-const (
- handshakeMsg = 0x00
- discMsg = 0x01
- pingMsg = 0x02
- pongMsg = 0x03
-)
-
-// Unexported devp2p protocol lengths from p2p package.
-const (
- baseProtoLen = 16
- ethProtoLen = 17
- snapProtoLen = 8
-)
-
-// Unexported handshake structure from p2p/peer.go.
-type protoHandshake struct {
- Version uint64
- Name string
- Caps []p2p.Cap
- ListenPort uint64
- ID []byte
- Rest []rlp.RawValue `rlp:"tail"`
-}
-
-type Hello = protoHandshake
-
-// Proto is an enum representing devp2p protocol types.
-type Proto int
-
-const (
- baseProto Proto = iota
- ethProto
- snapProto
-)
-
-// getProto returns the protocol a certain message code is associated with
-// (assuming the negotiated capabilities are exactly {eth,snap})
-func getProto(code uint64) Proto {
- switch {
- case code < baseProtoLen:
- return baseProto
- case code < baseProtoLen+ethProtoLen:
- return ethProto
- case code < baseProtoLen+ethProtoLen+snapProtoLen:
- return snapProto
- default:
- panic("unhandled msg code beyond last protocol")
- }
-}
-
-// protoOffset will return the offset at which the specified protocol's messages
-// begin.
-func protoOffset(proto Proto) uint64 {
- switch proto {
- case baseProto:
- return 0
- case ethProto:
- return baseProtoLen
- case snapProto:
- return baseProtoLen + ethProtoLen
- default:
- panic("unhandled protocol")
- }
-}
diff --git a/cmd/devp2p/internal/ethtest/snap.go b/cmd/devp2p/internal/ethtest/snap.go
deleted file mode 100644
index 64e0633585..0000000000
--- a/cmd/devp2p/internal/ethtest/snap.go
+++ /dev/null
@@ -1,983 +0,0 @@
-// Copyright 2022 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package ethtest
-
-import (
- "bytes"
- "errors"
- "fmt"
- "math/big"
- "math/rand"
- "reflect"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/eth/protocols/snap"
- "github.com/ethereum/go-ethereum/internal/utesting"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "golang.org/x/crypto/sha3"
-)
-
-func (c *Conn) snapRequest(code uint64, msg any) (any, error) {
- if err := c.Write(snapProto, code, msg); err != nil {
- return nil, fmt.Errorf("could not write to connection: %v", err)
- }
- return c.ReadSnap()
-}
-
-func (s *Suite) TestSnapStatus(t *utesting.T) {
- conn, err := s.dialSnap()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err := conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
-}
-
-type accRangeTest struct {
- nBytes uint64
- root common.Hash
- startingHash common.Hash
- limitHash common.Hash
-
- expAccounts int
- expFirst common.Hash
- expLast common.Hash
-
- desc string
-}
-
-// TestSnapGetAccountRange various forms of GetAccountRange requests.
-func (s *Suite) TestSnapGetAccountRange(t *utesting.T) {
- var (
- ffHash = common.MaxHash
- zero = common.Hash{}
-
- // test values derived from chain/ account dump
- root = s.chain.Head().Root()
- headstate = s.chain.AccountsInHashOrder()
- firstKey = common.BytesToHash(headstate[0].AddressHash)
- secondKey = common.BytesToHash(headstate[1].AddressHash)
- storageRoot = findNonEmptyStorageRoot(headstate)
- )
-
- tests := []accRangeTest{
- // Tests decreasing the number of bytes
- {
- nBytes: 4000,
- root: root,
- startingHash: zero,
- limitHash: ffHash,
- expAccounts: 86,
- expFirst: firstKey,
- expLast: common.HexToHash("0x445cb5c1278fdce2f9cbdb681bdd76c52f8e50e41dbd9e220242a69ba99ac099"),
- desc: "In this test, we request the entire state range, but limit the response to 4000 bytes.",
- },
- {
- nBytes: 3000,
- root: root,
- startingHash: zero,
- limitHash: ffHash,
- expAccounts: 65,
- expFirst: firstKey,
- expLast: common.HexToHash("0x2e6fe1362b3e388184fd7bf08e99e74170b26361624ffd1c5f646da7067b58b6"),
- desc: "In this test, we request the entire state range, but limit the response to 3000 bytes.",
- },
- {
- nBytes: 2000,
- root: root,
- startingHash: zero,
- limitHash: ffHash,
- expAccounts: 44,
- expFirst: firstKey,
- expLast: common.HexToHash("0x1c3f74249a4892081ba0634a819aec9ed25f34c7653f5719b9098487e65ab595"),
- desc: "In this test, we request the entire state range, but limit the response to 2000 bytes.",
- },
- {
- nBytes: 1,
- root: root,
- startingHash: zero,
- limitHash: ffHash,
- expAccounts: 1,
- expFirst: firstKey,
- expLast: firstKey,
- desc: `In this test, we request the entire state range, but limit the response to 1 byte.
-The server should return the first account of the state.`,
- },
- {
- nBytes: 0,
- root: root,
- startingHash: zero,
- limitHash: ffHash,
- expAccounts: 1,
- expFirst: firstKey,
- expLast: firstKey,
- desc: `Here we request with a responseBytes limit of zero.
-The server should return one account.`,
- },
-
- // Tests variations of the range
- {
- nBytes: 4000,
- root: root,
- startingHash: hashAdd(firstKey, -500),
- limitHash: hashAdd(firstKey, 1),
- expAccounts: 2,
- expFirst: firstKey,
- expLast: secondKey,
- desc: `In this test, we request a range where startingHash is before the first available
-account key, and limitHash is after. The server should return the first and second
-account of the state (because the second account is the 'next available').`,
- },
-
- {
- nBytes: 4000,
- root: root,
- startingHash: hashAdd(firstKey, -500),
- limitHash: hashAdd(firstKey, -450),
- expAccounts: 1,
- expFirst: firstKey,
- expLast: firstKey,
- desc: `Here we request range where both bounds are before the first available account key.
-This should return the first account (even though it's out of bounds).`,
- },
-
- // More range tests:
- {
- nBytes: 4000,
- root: root,
- startingHash: zero,
- limitHash: zero,
- expAccounts: 1,
- expFirst: firstKey,
- expLast: firstKey,
- desc: `In this test, both startingHash and limitHash are zero.
-The server should return the first available account.`,
- },
- {
- nBytes: 4000,
- root: root,
- startingHash: firstKey,
- limitHash: ffHash,
- expAccounts: 86,
- expFirst: firstKey,
- expLast: common.HexToHash("0x445cb5c1278fdce2f9cbdb681bdd76c52f8e50e41dbd9e220242a69ba99ac099"),
- desc: `In this test, startingHash is exactly the first available account key.
-The server should return the first available account of the state as the first item.`,
- },
- {
- nBytes: 4000,
- root: root,
- startingHash: hashAdd(firstKey, 1),
- limitHash: ffHash,
- expAccounts: 86,
- expFirst: secondKey,
- expLast: common.HexToHash("0x4615e5f5df5b25349a00ad313c6cd0436b6c08ee5826e33a018661997f85ebaa"),
- desc: `In this test, startingHash is after the first available key.
-The server should return the second account of the state as the first item.`,
- },
-
- // Test different root hashes
-
- {
- nBytes: 4000,
- root: common.Hash{0x13, 0x37},
- startingHash: zero,
- limitHash: ffHash,
- expAccounts: 0,
- expFirst: zero,
- expLast: zero,
- desc: `This test requests a non-existent state root.`,
- },
-
- // The genesis stateroot (we expect it to not be served)
- {
- nBytes: 4000,
- root: s.chain.RootAt(0),
- startingHash: zero,
- limitHash: ffHash,
- expAccounts: 0,
- expFirst: zero,
- expLast: zero,
- desc: `This test requests data at the state root of the genesis block. We expect the
-server to return no data because genesis is older than 127 blocks.`,
- },
-
- {
- nBytes: 4000,
- root: s.chain.RootAt(int(s.chain.Head().Number().Uint64()) - 127),
- startingHash: zero,
- limitHash: ffHash,
- expAccounts: 84,
- expFirst: firstKey,
- expLast: common.HexToHash("0x580aa878e2f92d113a12c0a3ce3c21972b03dbe80786858d49a72097e2c491a3"),
- desc: `This test requests data at a state root that is 127 blocks old.
-We expect the server to have this state available.`,
- },
-
- {
- nBytes: 4000,
- root: storageRoot,
- startingHash: zero,
- limitHash: ffHash,
- expAccounts: 0,
- expFirst: zero,
- expLast: zero,
- desc: `This test requests data at a state root that is actually the storage root of
-an existing account. The server is supposed to ignore this request.`,
- },
-
- // And some non-sensical requests
-
- {
- nBytes: 4000,
- root: root,
- startingHash: ffHash,
- limitHash: zero,
- expAccounts: 0,
- expFirst: zero,
- expLast: zero,
- desc: `In this test, the startingHash is after limitHash (wrong order). The server
-should ignore this invalid request.`,
- },
-
- {
- nBytes: 4000,
- root: root,
- startingHash: firstKey,
- limitHash: hashAdd(firstKey, -1),
- expAccounts: 1,
- expFirst: firstKey,
- expLast: firstKey,
- desc: `In this test, the startingHash is the first available key, and limitHash is
-a key before startingHash (wrong order). The server should return the first available key.`,
- },
-
- // range from [firstkey, 0], wrong order. Expect to get first key.
- {
- nBytes: 4000,
- root: root,
- startingHash: firstKey,
- limitHash: zero,
- expAccounts: 1,
- expFirst: firstKey,
- expLast: firstKey,
- desc: `In this test, the startingHash is the first available key and limitHash is zero.
-(wrong order). The server should return the first available key.`,
- },
- }
-
- for i, tc := range tests {
- tc := tc
- if i > 0 {
- t.Log("\n")
- }
- t.Logf("-- Test %d", i)
- t.Log(tc.desc)
- t.Log(" request:")
- t.Logf(" root: %x", tc.root)
- t.Logf(" range: %#x - %#x", tc.startingHash, tc.limitHash)
- t.Logf(" responseBytes: %d", tc.nBytes)
- if err := s.snapGetAccountRange(t, &tc); err != nil {
- t.Errorf("test %d failed: %v", i, err)
- }
- }
-}
-
-func hashAdd(h common.Hash, n int64) common.Hash {
- hb := h.Big()
- return common.BigToHash(hb.Add(hb, big.NewInt(n)))
-}
-
-func findNonEmptyStorageRoot(accounts []state.DumpAccount) common.Hash {
- for i := range accounts {
- if len(accounts[i].Storage) != 0 {
- return common.BytesToHash(accounts[i].Root)
- }
- }
- panic("can't find account with non-empty storage")
-}
-
-type stRangesTest struct {
- root common.Hash
- accounts []common.Hash
- origin []byte
- limit []byte
- nBytes uint64
-
- expSlots [][]*snap.StorageData
-
- desc string
-}
-
-// TestSnapGetStorageRanges various forms of GetStorageRanges requests.
-func (s *Suite) TestSnapGetStorageRanges(t *utesting.T) {
- var (
- acct = common.HexToAddress("0x8bebc8ba651aee624937e7d897853ac30c95a067")
- acctHash = common.BytesToHash(s.chain.state[acct].AddressHash)
- ffHash = common.MaxHash
- zero = common.Hash{}
- blockroot = s.chain.Head().Root()
- )
-
- // These are the storage slots of the test account, encoded as snap response data.
- acctSlots := []*snap.StorageData{
- {
- Hash: common.HexToHash("0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace"),
- Body: []byte{0x02},
- },
- {
- Hash: common.HexToHash("0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6"),
- Body: []byte{0x01},
- },
- {
- Hash: common.HexToHash("0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b"),
- Body: []byte{0x03},
- },
- }
-
- tests := []stRangesTest{
- /*
- Some tests against this account:
-
- "0x8bebc8ba651aee624937e7d897853ac30c95a067": {
- "balance": "1",
- "nonce": 1,
- "root": "0xe318dff15b33aa7f2f12d5567d58628e3e3f2e8859e46b56981a4083b391da17",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- // Note: keys below are hashed!!!
- "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace": "02",
- "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "01",
- "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "03"
- },
- "key": "0x445cb5c1278fdce2f9cbdb681bdd76c52f8e50e41dbd9e220242a69ba99ac099"
- }
- */
-
- { // [:] -> [slot1, slot2, slot3]
- desc: `This request has a range of 00..ff.
-The server should return all storage slots of the test account.`,
- root: blockroot,
- accounts: []common.Hash{acctHash},
- origin: zero[:],
- limit: ffHash[:],
- nBytes: 500,
- expSlots: [][]*snap.StorageData{acctSlots},
- },
-
- { // [slot1:] -> [slot1, slot2, slot3]
- desc: `This test requests slots starting at the first available key.
-The server should return all storage slots of the test account.`,
- root: blockroot,
- accounts: []common.Hash{acctHash},
- origin: common.FromHex("0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace"),
- limit: ffHash[:],
- nBytes: 1000,
- expSlots: [][]*snap.StorageData{acctSlots},
- },
-
- { // [slot1+:] -> [slot2, slot3]
- desc: `This test requests slots starting at a key one past the first available key.
-The server should return the remaining two slots of the test account.`,
- root: blockroot,
- accounts: []common.Hash{acctHash},
- origin: common.FromHex("0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf"),
- limit: ffHash[:],
- nBytes: 500,
- expSlots: [][]*snap.StorageData{acctSlots[1:]},
- },
-
- { // [slot1:slot2] -> [slot1, slot2]
- desc: `This test requests a range which is exactly the first and second available key.`,
- root: blockroot,
- accounts: []common.Hash{acctHash},
- origin: common.FromHex("0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace"),
- limit: common.FromHex("0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6"),
- nBytes: 500,
- expSlots: [][]*snap.StorageData{acctSlots[:2]},
- },
-
- { // [slot1+:slot2+] -> [slot2, slot3]
- desc: `This test requests a range where limitHash is after the second, but before the third slot
-of the test account. The server should return slots [2,3] (i.e. the 'next available' needs to be returned).`,
- root: blockroot,
- accounts: []common.Hash{acctHash},
- origin: common.FromHex("0x4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
- limit: common.FromHex("0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7"),
- nBytes: 500,
- expSlots: [][]*snap.StorageData{acctSlots[1:]},
- },
- }
-
- for i, tc := range tests {
- tc := tc
- if i > 0 {
- t.Log("\n")
- }
- t.Logf("-- Test %d", i)
- t.Log(tc.desc)
- t.Log(" request:")
- t.Logf(" root: %x", tc.root)
- t.Logf(" accounts: %x", tc.accounts)
- t.Logf(" range: %#x - %#x", tc.origin, tc.limit)
- t.Logf(" responseBytes: %d", tc.nBytes)
- if err := s.snapGetStorageRanges(t, &tc); err != nil {
- t.Errorf(" failed: %v", err)
- }
- }
-}
-
-type byteCodesTest struct {
- nBytes uint64
- hashes []common.Hash
-
- expHashes int
-
- desc string
-}
-
-// TestSnapGetByteCodes various forms of GetByteCodes requests.
-func (s *Suite) TestSnapGetByteCodes(t *utesting.T) {
- var (
- allHashes = s.chain.CodeHashes()
- headRoot = s.chain.Head().Root()
- genesisRoot = s.chain.RootAt(0)
- )
-
- tests := []byteCodesTest{
- // A few stateroots
- {
- desc: `Here we request state roots as code hashes. The server should deliver an empty response with no items.`,
- nBytes: 10000,
- hashes: []common.Hash{genesisRoot, headRoot},
- expHashes: 0,
- },
- {
- desc: `Here we request the genesis state root (which is not an existing code hash) two times. The server should deliver an empty response with no items.`,
- nBytes: 10000,
- hashes: []common.Hash{genesisRoot, genesisRoot},
- expHashes: 0,
- },
- // Empties
- {
- desc: `Here we request the empty state root (which is not an existing code hash). The server should deliver an empty response with no items.`,
- nBytes: 10000,
- hashes: []common.Hash{types.EmptyRootHash},
- expHashes: 0,
- },
- {
- desc: `Here we request the empty code hash. The server should deliver an empty response item.`,
- nBytes: 10000,
- hashes: []common.Hash{types.EmptyCodeHash},
- expHashes: 1,
- },
- {
- desc: `In this test, we request the empty code hash three times. The server should deliver the empty item three times.`,
- nBytes: 10000,
- hashes: []common.Hash{types.EmptyCodeHash, types.EmptyCodeHash, types.EmptyCodeHash},
- expHashes: 3,
- },
- // The existing bytecodes
- {
- desc: `Here we request all available contract codes. The server should deliver them all in one response.`,
- nBytes: 100000,
- hashes: allHashes,
- expHashes: len(allHashes),
- },
- // The existing, with limited byte arg
- {
- desc: `In this test, the request has a bytes limit of one. The server should deliver one item.`,
- nBytes: 1,
- hashes: allHashes,
- expHashes: 1,
- },
- {
- desc: `In this test, the request has a bytes limit of zero. The server should deliver one item.`,
- nBytes: 0,
- hashes: allHashes,
- expHashes: 1,
- },
- // Request the same hash multiple times.
- {
- desc: `This test requests the same code hash multiple times. The server should deliver it multiple times.`,
- nBytes: 1000,
- hashes: []common.Hash{allHashes[0], allHashes[0], allHashes[0], allHashes[0]},
- expHashes: 4,
- },
- }
-
- for i, tc := range tests {
- tc := tc
- if i > 0 {
- t.Log("\n")
- }
- t.Logf("-- Test %d", i)
- t.Log(tc.desc)
- t.Log(" request:")
- t.Logf(" hashes: %x", tc.hashes)
- t.Logf(" responseBytes: %d", tc.nBytes)
- if err := s.snapGetByteCodes(t, &tc); err != nil {
- t.Errorf("failed: %v", err)
- }
- }
-}
-
-type trieNodesTest struct {
- root common.Hash
- paths []snap.TrieNodePathSet
- nBytes uint64
-
- expHashes []common.Hash // expected response
- expReject bool // if true, request should be rejected
-
- desc string
-}
-
-func decodeNibbles(nibbles []byte, bytes []byte) {
- for bi, ni := 0, 0; ni < len(nibbles); bi, ni = bi+1, ni+2 {
- bytes[bi] = nibbles[ni]<<4 | nibbles[ni+1]
- }
-}
-
-// hasTerm returns whether a hex key has the terminator flag.
-func hasTerm(s []byte) bool {
- return len(s) > 0 && s[len(s)-1] == 16
-}
-
-func keybytesToHex(str []byte) []byte {
- l := len(str)*2 + 1
- var nibbles = make([]byte, l)
- for i, b := range str {
- nibbles[i*2] = b / 16
- nibbles[i*2+1] = b % 16
- }
- nibbles[l-1] = 16
- return nibbles
-}
-
-func hexToCompact(hex []byte) []byte {
- terminator := byte(0)
- if hasTerm(hex) {
- terminator = 1
- hex = hex[:len(hex)-1]
- }
- buf := make([]byte, len(hex)/2+1)
- buf[0] = terminator << 5 // the flag byte
- if len(hex)&1 == 1 {
- buf[0] |= 1 << 4 // odd flag
- buf[0] |= hex[0] // first nibble is contained in the first byte
- hex = hex[1:]
- }
- decodeNibbles(hex, buf[1:])
- return buf
-}
-
-// TestSnapTrieNodes various forms of GetTrieNodes requests.
-func (s *Suite) TestSnapTrieNodes(t *utesting.T) {
- var (
- // This is the known address of the snap storage testing contract.
- storageAcct = common.HexToAddress("0x8bebc8ba651aee624937e7d897853ac30c95a067")
- storageAcctHash = common.BytesToHash(s.chain.state[storageAcct].AddressHash)
- // This is the known address of an existing account.
- key = common.FromHex("0xa87387b50b481431c6ccdb9ae99a54d4dcdd4a3eff75d7b17b4818f7bbfc21e9")
- empty = types.EmptyCodeHash
- accPaths []snap.TrieNodePathSet
- )
- for i := 1; i <= 65; i++ {
- accPaths = append(accPaths, makeSnapPath(key, i))
- }
-
- tests := []trieNodesTest{
- {
- desc: `In this test, we send an empty request to the node.`,
- root: s.chain.Head().Root(),
- paths: nil,
- nBytes: 500,
- expHashes: nil,
- },
-
- {
- desc: `In this test, we send a request containing an empty path-set.
-The server should reject the request.`,
- root: s.chain.Head().Root(),
- paths: []snap.TrieNodePathSet{
- {}, // zero-length pathset should 'abort' and kick us off
- {[]byte{0}},
- },
- nBytes: 5000,
- expHashes: []common.Hash{},
- expReject: true,
- },
-
- {
- desc: `Here we request the root node of the trie. The server should respond with the root node.`,
- root: s.chain.RootAt(int(s.chain.Head().NumberU64() - 1)),
- paths: []snap.TrieNodePathSet{
- {[]byte{0}},
- {[]byte{1}, []byte{0}},
- },
- nBytes: 5000,
- expHashes: []common.Hash{s.chain.RootAt(int(s.chain.Head().NumberU64() - 1))},
- },
-
- { // nonsensically long path
- desc: `In this test, we request a very long trie node path. The server should respond with an empty node (keccak256("")).`,
- root: s.chain.Head().Root(),
- paths: []snap.TrieNodePathSet{
- {[]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8}},
- },
- nBytes: 5000,
- expHashes: []common.Hash{common.HexToHash("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470")},
- },
-
- {
- // The leaf is only a couple of levels down, so the continued trie traversal causes lookup failures.
- desc: `Here we request some known accounts from the state.`,
- root: s.chain.Head().Root(),
- paths: accPaths,
- nBytes: 5000,
- expHashes: []common.Hash{
- // It's a bit unfortunate these are hard-coded, but the result depends on
- // a lot of aspects of the state trie and can't be guessed in a simple
- // way. So you'll have to update this when the test chain is changed.
- common.HexToHash("0x3e963a69401a70224cbfb8c0cc2249b019041a538675d71ccf80c9328d114e2e"),
- common.HexToHash("0xd0670d09cdfbf3c6320eb3e92c47c57baa6c226551a2d488c05581091e6b1689"),
- empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty,
- empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty,
- empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty,
- empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty,
- empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty,
- empty, empty, empty},
- },
-
- {
- desc: `In this test, we request some known accounts in state. The requested paths are NOT in key order.`,
- root: s.chain.Head().Root(),
- paths: []snap.TrieNodePathSet{
- accPaths[10], accPaths[1], accPaths[0],
- },
- nBytes: 5000,
- // As with the previous test, this result depends on the whole tree and will have to
- // be updated when the test chain is changed.
- expHashes: []common.Hash{
- empty,
- common.HexToHash("0xd0670d09cdfbf3c6320eb3e92c47c57baa6c226551a2d488c05581091e6b1689"),
- common.HexToHash("0x3e963a69401a70224cbfb8c0cc2249b019041a538675d71ccf80c9328d114e2e"),
- },
- },
-
- // Storage tests.
- // These use the known storage test account.
-
- {
- desc: `This test requests the storage root node of a known account.`,
- root: s.chain.Head().Root(),
- paths: []snap.TrieNodePathSet{
- {
- storageAcctHash[:],
- []byte{0},
- },
- },
- nBytes: 5000,
- expHashes: []common.Hash{
- common.HexToHash("0xbe3d75a1729be157e79c3b77f00206db4d54e3ea14375a015451c88ec067c790"),
- },
- },
-
- {
- desc: `This test requests multiple storage nodes of a known account.`,
- root: s.chain.Head().Root(),
- paths: []snap.TrieNodePathSet{
- {
- storageAcctHash[:],
- []byte{0},
- []byte{0x1b},
- },
- },
- nBytes: 5000,
- expHashes: []common.Hash{
- common.HexToHash("0xbe3d75a1729be157e79c3b77f00206db4d54e3ea14375a015451c88ec067c790"),
- common.HexToHash("0xf4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd7"),
- },
- },
- }
-
- for i, tc := range tests {
- tc := tc
- if i > 0 {
- t.Log("\n")
- }
- t.Logf("-- Test %d", i)
- t.Log(tc.desc)
- t.Log(" request:")
- t.Logf(" root: %x", tc.root)
- t.Logf(" paths: %x", tc.paths)
- t.Logf(" responseBytes: %d", tc.nBytes)
-
- if err := s.snapGetTrieNodes(t, &tc); err != nil {
- t.Errorf(" failed: %v", err)
- }
- }
-}
-
-func makeSnapPath(key []byte, length int) snap.TrieNodePathSet {
- hex := keybytesToHex(key)[:length]
- hex[len(hex)-1] = 0 // remove term flag
- hKey := hexToCompact(hex)
- return snap.TrieNodePathSet{hKey}
-}
-
-func (s *Suite) snapGetAccountRange(t *utesting.T, tc *accRangeTest) error {
- conn, err := s.dialSnap()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err = conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
- // write request
- req := &snap.GetAccountRangePacket{
- ID: uint64(rand.Int63()),
- Root: tc.root,
- Origin: tc.startingHash,
- Limit: tc.limitHash,
- Bytes: tc.nBytes,
- }
- msg, err := conn.snapRequest(snap.GetAccountRangeMsg, req)
- if err != nil {
- return fmt.Errorf("account range request failed: %v", err)
- }
- res, ok := msg.(*snap.AccountRangePacket)
- if !ok {
- return fmt.Errorf("account range response wrong: %T %v", msg, msg)
- }
- if exp, got := tc.expAccounts, len(res.Accounts); exp != got {
- return fmt.Errorf("expected %d accounts, got %d", exp, got)
- }
- // Check that the encoding order is correct
- for i := 1; i < len(res.Accounts); i++ {
- if bytes.Compare(res.Accounts[i-1].Hash[:], res.Accounts[i].Hash[:]) >= 0 {
- return fmt.Errorf("accounts not monotonically increasing: #%d [%x] vs #%d [%x]", i-1, res.Accounts[i-1].Hash[:], i, res.Accounts[i].Hash[:])
- }
- }
- var (
- hashes []common.Hash
- accounts [][]byte
- proof = res.Proof
- )
- hashes, accounts, err = res.Unpack()
- if err != nil {
- return err
- }
- if len(hashes) == 0 && len(accounts) == 0 && len(proof) == 0 {
- return nil
- }
- if len(hashes) > 0 {
- if exp, got := tc.expFirst, res.Accounts[0].Hash; exp != got {
- return fmt.Errorf("expected first account %#x, got %#x", exp, got)
- }
- if exp, got := tc.expLast, res.Accounts[len(res.Accounts)-1].Hash; exp != got {
- return fmt.Errorf("expected last account %#x, got %#x", exp, got)
- }
- }
- // Reconstruct a partial trie from the response and verify it
- keys := make([][]byte, len(hashes))
- for i, key := range hashes {
- keys[i] = common.CopyBytes(key[:])
- }
- nodes := make(trienode.ProofList, len(proof))
- for i, node := range proof {
- nodes[i] = node
- }
- proofdb := nodes.Set()
-
- _, err = trie.VerifyRangeProof(tc.root, tc.startingHash[:], keys, accounts, proofdb)
- return err
-}
-
-func (s *Suite) snapGetStorageRanges(t *utesting.T, tc *stRangesTest) error {
- conn, err := s.dialSnap()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err = conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
-
- // write request
- req := &snap.GetStorageRangesPacket{
- ID: uint64(rand.Int63()),
- Root: tc.root,
- Accounts: tc.accounts,
- Origin: tc.origin,
- Limit: tc.limit,
- Bytes: tc.nBytes,
- }
- msg, err := conn.snapRequest(snap.GetStorageRangesMsg, req)
- if err != nil {
- return fmt.Errorf("account range request failed: %v", err)
- }
- res, ok := msg.(*snap.StorageRangesPacket)
- if !ok {
- return fmt.Errorf("account range response wrong: %T %v", msg, msg)
- }
-
- // Ensure the ranges are monotonically increasing
- for i, slots := range res.Slots {
- for j := 1; j < len(slots); j++ {
- if bytes.Compare(slots[j-1].Hash[:], slots[j].Hash[:]) >= 0 {
- return fmt.Errorf("storage slots not monotonically increasing for account #%d: #%d [%x] vs #%d [%x]", i, j-1, slots[j-1].Hash[:], j, slots[j].Hash[:])
- }
- }
- }
-
- // Compute expected slot hashes.
- var expHashes [][]common.Hash
- for _, acct := range tc.expSlots {
- var list []common.Hash
- for _, s := range acct {
- list = append(list, s.Hash)
- }
- expHashes = append(expHashes, list)
- }
-
- // Check response.
- if !reflect.DeepEqual(res.Slots, tc.expSlots) {
- t.Log(" expected slot hashes:", expHashes)
- return fmt.Errorf("wrong storage slots in response: %#v", res.Slots)
- }
- return nil
-}
-
-func (s *Suite) snapGetByteCodes(t *utesting.T, tc *byteCodesTest) error {
- conn, err := s.dialSnap()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err = conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
- // write request
- req := &snap.GetByteCodesPacket{
- ID: uint64(rand.Int63()),
- Hashes: tc.hashes,
- Bytes: tc.nBytes,
- }
- msg, err := conn.snapRequest(snap.GetByteCodesMsg, req)
- if err != nil {
- return fmt.Errorf("getBytecodes request failed: %v", err)
- }
- res, ok := msg.(*snap.ByteCodesPacket)
- if !ok {
- return fmt.Errorf("bytecodes response wrong: %T %v", msg, msg)
- }
- if exp, got := tc.expHashes, len(res.Codes); exp != got {
- for i, c := range res.Codes {
- t.Logf("%d. %#x\n", i, c)
- }
- return fmt.Errorf("expected %d bytecodes, got %d", exp, got)
- }
- // Cross reference the requested bytecodes with the response to find gaps
- // that the serving node is missing
- var (
- bytecodes = res.Codes
- hasher = sha3.NewLegacyKeccak256().(crypto.KeccakState)
- hash = make([]byte, 32)
- codes = make([][]byte, len(req.Hashes))
- )
-
- for i, j := 0, 0; i < len(bytecodes); i++ {
- // Find the next hash that we've been served, leaving misses with nils
- hasher.Reset()
- hasher.Write(bytecodes[i])
- hasher.Read(hash)
-
- for j < len(req.Hashes) && !bytes.Equal(hash, req.Hashes[j][:]) {
- j++
- }
- if j < len(req.Hashes) {
- codes[j] = bytecodes[i]
- j++
- continue
- }
- // We've either ran out of hashes, or got unrequested data
- return errors.New("unexpected bytecode")
- }
-
- return nil
-}
-
-func (s *Suite) snapGetTrieNodes(t *utesting.T, tc *trieNodesTest) error {
- conn, err := s.dialSnap()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err = conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
-
- // write0 request
- req := &snap.GetTrieNodesPacket{
- ID: uint64(rand.Int63()),
- Root: tc.root,
- Paths: tc.paths,
- Bytes: tc.nBytes,
- }
- msg, err := conn.snapRequest(snap.GetTrieNodesMsg, req)
- if err != nil {
- if tc.expReject {
- return nil
- }
- return fmt.Errorf("trienodes request failed: %v", err)
- }
- res, ok := msg.(*snap.TrieNodesPacket)
- if !ok {
- return fmt.Errorf("trienodes response wrong: %T %v", msg, msg)
- }
-
- // Check the correctness
-
- // Cross reference the requested trienodes with the response to find gaps
- // that the serving node is missing
- hasher := sha3.NewLegacyKeccak256().(crypto.KeccakState)
- hash := make([]byte, 32)
- trienodes := res.Nodes
- if got, want := len(trienodes), len(tc.expHashes); got != want {
- return fmt.Errorf("wrong trienode count, got %d, want %d", got, want)
- }
- for i, trienode := range trienodes {
- hasher.Reset()
- hasher.Write(trienode)
- hasher.Read(hash)
- if got, want := hash, tc.expHashes[i]; !bytes.Equal(got, want[:]) {
- t.Logf(" hash %d wrong, got %#x, want %#x\n", i, got, want)
- err = fmt.Errorf("hash %d wrong, got %#x, want %#x", i, got, want)
- }
- }
- return err
-}
diff --git a/cmd/devp2p/internal/ethtest/suite.go b/cmd/devp2p/internal/ethtest/suite.go
deleted file mode 100644
index dd42ec7f7f..0000000000
--- a/cmd/devp2p/internal/ethtest/suite.go
+++ /dev/null
@@ -1,846 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package ethtest
-
-import (
- "crypto/rand"
- "math/big"
- "reflect"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/consensus/misc/eip4844"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/crypto/kzg4844"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/internal/utesting"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/holiman/uint256"
-)
-
-// Suite represents a structure used to test a node's conformance
-// to the eth protocol.
-type Suite struct {
- Dest *enode.Node
- chain *Chain
- engine *EngineClient
-}
-
-// NewSuite creates and returns a new eth-test suite that can
-// be used to test the given node against the given blockchain
-// data.
-func NewSuite(dest *enode.Node, chainDir, engineURL, jwt string) (*Suite, error) {
- chain, err := NewChain(chainDir)
- if err != nil {
- return nil, err
- }
- engine, err := NewEngineClient(chainDir, engineURL, jwt)
- if err != nil {
- return nil, err
- }
-
- return &Suite{
- Dest: dest,
- chain: chain,
- engine: engine,
- }, nil
-}
-
-func (s *Suite) EthTests() []utesting.Test {
- return []utesting.Test{
- // status
- {Name: "TestStatus", Fn: s.TestStatus},
- // get block headers
- {Name: "TestGetBlockHeaders", Fn: s.TestGetBlockHeaders},
- {Name: "TestSimultaneousRequests", Fn: s.TestSimultaneousRequests},
- {Name: "TestSameRequestID", Fn: s.TestSameRequestID},
- {Name: "TestZeroRequestID", Fn: s.TestZeroRequestID},
- // get block bodies
- {Name: "TestGetBlockBodies", Fn: s.TestGetBlockBodies},
- // // malicious handshakes + status
- {Name: "TestMaliciousHandshake", Fn: s.TestMaliciousHandshake},
- {Name: "TestMaliciousStatus", Fn: s.TestMaliciousStatus},
- // test transactions
- {Name: "TestTransaction", Fn: s.TestTransaction},
- {Name: "TestInvalidTxs", Fn: s.TestInvalidTxs},
- {Name: "TestLargeTxRequest", Fn: s.TestLargeTxRequest},
- {Name: "TestNewPooledTxs", Fn: s.TestNewPooledTxs},
- {Name: "TestBlobViolations", Fn: s.TestBlobViolations},
- }
-}
-
-func (s *Suite) SnapTests() []utesting.Test {
- return []utesting.Test{
- {Name: "Status", Fn: s.TestSnapStatus},
- {Name: "AccountRange", Fn: s.TestSnapGetAccountRange},
- {Name: "GetByteCodes", Fn: s.TestSnapGetByteCodes},
- {Name: "GetTrieNodes", Fn: s.TestSnapTrieNodes},
- {Name: "GetStorageRanges", Fn: s.TestSnapGetStorageRanges},
- }
-}
-
-// TestStatus attempts to connect to the given node and exchange a status
-// message with it on the eth protocol.
-func (s *Suite) TestStatus(t *utesting.T) {
- conn, err := s.dial()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err := conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
-}
-
-// headersMatch returns whether the received headers match the given request
-func headersMatch(expected []*types.Header, headers []*types.Header) bool {
- return reflect.DeepEqual(expected, headers)
-}
-
-// TestGetBlockHeaders tests whether the given node can respond to an eth
-// `GetBlockHeaders` request and that the response is accurate.
-func (s *Suite) TestGetBlockHeaders(t *utesting.T) {
- conn, err := s.dial()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err = conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
- // Send headers request.
- req := ð.GetBlockHeadersPacket{
- RequestId: 33,
- GetBlockHeadersRequest: ð.GetBlockHeadersRequest{
- Origin: eth.HashOrNumber{Hash: s.chain.blocks[1].Hash()},
- Amount: 2,
- Skip: 1,
- Reverse: false,
- },
- }
- // Read headers response.
- if err := conn.Write(ethProto, eth.GetBlockHeadersMsg, req); err != nil {
- t.Fatalf("could not write to connection: %v", err)
- }
- headers := new(eth.BlockHeadersPacket)
- if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, &headers); err != nil {
- t.Fatalf("error reading msg: %v", err)
- }
- if got, want := headers.RequestId, req.RequestId; got != want {
- t.Fatalf("unexpected request id")
- }
- // Check for correct headers.
- expected, err := s.chain.GetHeaders(req)
- if err != nil {
- t.Fatalf("failed to get headers for given request: %v", err)
- }
- if !headersMatch(expected, headers.BlockHeadersRequest) {
- t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers)
- }
-}
-
-// TestSimultaneousRequests sends two simultaneous `GetBlockHeader` requests
-// from the same connection with different request IDs and checks to make sure
-// the node responds with the correct headers per request.
-func (s *Suite) TestSimultaneousRequests(t *utesting.T) {
- conn, err := s.dial()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err := conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
-
- // Create two different requests.
- req1 := ð.GetBlockHeadersPacket{
- RequestId: uint64(111),
- GetBlockHeadersRequest: ð.GetBlockHeadersRequest{
- Origin: eth.HashOrNumber{
- Hash: s.chain.blocks[1].Hash(),
- },
- Amount: 2,
- Skip: 1,
- Reverse: false,
- },
- }
- req2 := ð.GetBlockHeadersPacket{
- RequestId: uint64(222),
- GetBlockHeadersRequest: ð.GetBlockHeadersRequest{
- Origin: eth.HashOrNumber{
- Hash: s.chain.blocks[1].Hash(),
- },
- Amount: 4,
- Skip: 1,
- Reverse: false,
- },
- }
-
- // Send both requests.
- if err := conn.Write(ethProto, eth.GetBlockHeadersMsg, req1); err != nil {
- t.Fatalf("failed to write to connection: %v", err)
- }
- if err := conn.Write(ethProto, eth.GetBlockHeadersMsg, req2); err != nil {
- t.Fatalf("failed to write to connection: %v", err)
- }
-
- // Wait for responses.
- headers1 := new(eth.BlockHeadersPacket)
- if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, &headers1); err != nil {
- t.Fatalf("error reading block headers msg: %v", err)
- }
- if got, want := headers1.RequestId, req1.RequestId; got != want {
- t.Fatalf("unexpected request id in response: got %d, want %d", got, want)
- }
- headers2 := new(eth.BlockHeadersPacket)
- if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, &headers2); err != nil {
- t.Fatalf("error reading block headers msg: %v", err)
- }
- if got, want := headers2.RequestId, req2.RequestId; got != want {
- t.Fatalf("unexpected request id in response: got %d, want %d", got, want)
- }
-
- // Check received headers for accuracy.
- if expected, err := s.chain.GetHeaders(req1); err != nil {
- t.Fatalf("failed to get expected headers for request 1: %v", err)
- } else if !headersMatch(expected, headers1.BlockHeadersRequest) {
- t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers1)
- }
- if expected, err := s.chain.GetHeaders(req2); err != nil {
- t.Fatalf("failed to get expected headers for request 2: %v", err)
- } else if !headersMatch(expected, headers2.BlockHeadersRequest) {
- t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers2)
- }
-}
-
-// TestSameRequestID sends two requests with the same request ID to a single
-// node.
-func (s *Suite) TestSameRequestID(t *utesting.T) {
- conn, err := s.dial()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err := conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
-
- // Create two different requests with the same ID.
- reqID := uint64(1234)
- request1 := ð.GetBlockHeadersPacket{
- RequestId: reqID,
- GetBlockHeadersRequest: ð.GetBlockHeadersRequest{
- Origin: eth.HashOrNumber{
- Number: 1,
- },
- Amount: 2,
- },
- }
- request2 := ð.GetBlockHeadersPacket{
- RequestId: reqID,
- GetBlockHeadersRequest: ð.GetBlockHeadersRequest{
- Origin: eth.HashOrNumber{
- Number: 33,
- },
- Amount: 2,
- },
- }
-
- // Send the requests.
- if err = conn.Write(ethProto, eth.GetBlockHeadersMsg, request1); err != nil {
- t.Fatalf("failed to write to connection: %v", err)
- }
- if err = conn.Write(ethProto, eth.GetBlockHeadersMsg, request2); err != nil {
- t.Fatalf("failed to write to connection: %v", err)
- }
-
- // Wait for the responses.
- headers1 := new(eth.BlockHeadersPacket)
- if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, &headers1); err != nil {
- t.Fatalf("error reading from connection: %v", err)
- }
- if got, want := headers1.RequestId, request1.RequestId; got != want {
- t.Fatalf("unexpected request id: got %d, want %d", got, want)
- }
- headers2 := new(eth.BlockHeadersPacket)
- if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, &headers2); err != nil {
- t.Fatalf("error reading from connection: %v", err)
- }
- if got, want := headers2.RequestId, request2.RequestId; got != want {
- t.Fatalf("unexpected request id: got %d, want %d", got, want)
- }
-
- // Check if headers match.
- if expected, err := s.chain.GetHeaders(request1); err != nil {
- t.Fatalf("failed to get expected block headers: %v", err)
- } else if !headersMatch(expected, headers1.BlockHeadersRequest) {
- t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers1)
- }
- if expected, err := s.chain.GetHeaders(request2); err != nil {
- t.Fatalf("failed to get expected block headers: %v", err)
- } else if !headersMatch(expected, headers2.BlockHeadersRequest) {
- t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers2)
- }
-}
-
-// TestZeroRequestID checks that a message with a request ID of zero is still handled
-// by the node.
-func (s *Suite) TestZeroRequestID(t *utesting.T) {
- conn, err := s.dial()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err := conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
- req := ð.GetBlockHeadersPacket{
- GetBlockHeadersRequest: ð.GetBlockHeadersRequest{
- Origin: eth.HashOrNumber{Number: 0},
- Amount: 2,
- },
- }
- // Read headers response.
- if err := conn.Write(ethProto, eth.GetBlockHeadersMsg, req); err != nil {
- t.Fatalf("could not write to connection: %v", err)
- }
- headers := new(eth.BlockHeadersPacket)
- if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, &headers); err != nil {
- t.Fatalf("error reading msg: %v", err)
- }
- if got, want := headers.RequestId, req.RequestId; got != want {
- t.Fatalf("unexpected request id")
- }
- if expected, err := s.chain.GetHeaders(req); err != nil {
- t.Fatalf("failed to get expected block headers: %v", err)
- } else if !headersMatch(expected, headers.BlockHeadersRequest) {
- t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers)
- }
-}
-
-// TestGetBlockBodies tests whether the given node can respond to a
-// `GetBlockBodies` request and that the response is accurate.
-func (s *Suite) TestGetBlockBodies(t *utesting.T) {
- conn, err := s.dial()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err := conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
- // Create block bodies request.
- req := ð.GetBlockBodiesPacket{
- RequestId: 55,
- GetBlockBodiesRequest: eth.GetBlockBodiesRequest{
- s.chain.blocks[54].Hash(),
- s.chain.blocks[75].Hash(),
- },
- }
- if err := conn.Write(ethProto, eth.GetBlockBodiesMsg, req); err != nil {
- t.Fatalf("could not write to connection: %v", err)
- }
- // Wait for response.
- resp := new(eth.BlockBodiesPacket)
- if err := conn.ReadMsg(ethProto, eth.BlockBodiesMsg, &resp); err != nil {
- t.Fatalf("error reading block bodies msg: %v", err)
- }
- if got, want := resp.RequestId, req.RequestId; got != want {
- t.Fatalf("unexpected request id in respond", got, want)
- }
- bodies := resp.BlockBodiesResponse
- if len(bodies) != len(req.GetBlockBodiesRequest) {
- t.Fatalf("wrong bodies in response: expected %d bodies, got %d", len(req.GetBlockBodiesRequest), len(bodies))
- }
-}
-
-// randBuf makes a random buffer size kilobytes large.
-func randBuf(size int) []byte {
- buf := make([]byte, size*1024)
- rand.Read(buf)
- return buf
-}
-
-// TestMaliciousHandshake tries to send malicious data during the handshake.
-func (s *Suite) TestMaliciousHandshake(t *utesting.T) {
- key, _ := crypto.GenerateKey()
-
- // Write hello to client.
- var (
- pub0 = crypto.FromECDSAPub(&key.PublicKey)[1:]
- version = eth.ProtocolVersions[0]
- )
- handshakes := []*protoHandshake{
- {
- Version: 5,
- Caps: []p2p.Cap{
- {Name: string(randBuf(2)), Version: version},
- },
- ID: pub0,
- },
- {
- Version: 5,
- Caps: []p2p.Cap{
- {Name: "eth", Version: version},
- },
- ID: append(pub0, byte(0)),
- },
- {
- Version: 5,
- Caps: []p2p.Cap{
- {Name: "eth", Version: version},
- },
- ID: append(pub0, pub0...),
- },
- {
- Version: 5,
- Caps: []p2p.Cap{
- {Name: "eth", Version: version},
- },
- ID: randBuf(2),
- },
- {
- Version: 5,
- Caps: []p2p.Cap{
- {Name: string(randBuf(2)), Version: version},
- },
- ID: randBuf(2),
- },
- }
- for _, handshake := range handshakes {
- conn, err := s.dialAs(key)
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
-
- if err := conn.Write(ethProto, handshakeMsg, handshake); err != nil {
- t.Fatalf("could not write to connection: %v", err)
- }
- // Check that the peer disconnected
- for i := 0; i < 2; i++ {
- code, _, err := conn.Read()
- if err != nil {
- // Client may have disconnected without sending disconnect msg.
- continue
- }
- switch code {
- case discMsg:
- case handshakeMsg:
- // Discard one hello as Hello's are sent concurrently
- continue
- default:
- t.Fatalf("unexpected msg: code %d", code)
- }
- }
- }
-}
-
-// TestMaliciousStatus sends a status package with a large total difficulty.
-func (s *Suite) TestMaliciousStatus(t *utesting.T) {
- conn, err := s.dial()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err := conn.handshake(); err != nil {
- t.Fatalf("handshake failed: %v", err)
- }
- // Create status with large total difficulty.
- status := ð.StatusPacket{
- ProtocolVersion: uint32(conn.negotiatedProtoVersion),
- NetworkID: s.chain.config.ChainID.Uint64(),
- TD: new(big.Int).SetBytes(randBuf(2048)),
- Head: s.chain.Head().Hash(),
- Genesis: s.chain.GetBlock(0).Hash(),
- ForkID: s.chain.ForkID(),
- }
- if err := conn.statusExchange(s.chain, status); err != nil {
- t.Fatalf("status exchange failed: %v", err)
- }
- // Wait for disconnect.
- code, _, err := conn.Read()
- if err != nil {
- t.Fatalf("error reading from connection: %v", err)
- }
- switch code {
- case discMsg:
- break
- default:
- t.Fatalf("expected disconnect, got: %d", code)
- }
-}
-
-// TestTransaction sends a valid transaction to the node and checks if the
-// transaction gets propagated.
-func (s *Suite) TestTransaction(t *utesting.T) {
- // Nudge client out of syncing mode to accept pending txs.
- if err := s.engine.sendForkchoiceUpdated(); err != nil {
- t.Fatalf("failed to send next block: %v", err)
- }
- from, nonce := s.chain.GetSender(0)
- inner := &types.DynamicFeeTx{
- ChainID: s.chain.config.ChainID,
- Nonce: nonce,
- GasTipCap: common.Big1,
- GasFeeCap: s.chain.Head().BaseFee(),
- Gas: 30000,
- To: &common.Address{0xaa},
- Value: common.Big1,
- }
- tx, err := s.chain.SignTx(from, types.NewTx(inner))
- if err != nil {
- t.Fatalf("failed to sign tx: %v", err)
- }
- if err := s.sendTxs([]*types.Transaction{tx}); err != nil {
- t.Fatal(err)
- }
- s.chain.IncNonce(from, 1)
-}
-
-// TestInvalidTxs sends several invalid transactions and tests whether
-// the node will propagate them.
-func (s *Suite) TestInvalidTxs(t *utesting.T) {
- // Nudge client out of syncing mode to accept pending txs.
- if err := s.engine.sendForkchoiceUpdated(); err != nil {
- t.Fatalf("failed to send next block: %v", err)
- }
-
- from, nonce := s.chain.GetSender(0)
- inner := &types.DynamicFeeTx{
- ChainID: s.chain.config.ChainID,
- Nonce: nonce,
- GasTipCap: common.Big1,
- GasFeeCap: s.chain.Head().BaseFee(),
- Gas: 30000,
- To: &common.Address{0xaa},
- }
- tx, err := s.chain.SignTx(from, types.NewTx(inner))
- if err != nil {
- t.Fatalf("failed to sign tx: %v", err)
- }
- if err := s.sendTxs([]*types.Transaction{tx}); err != nil {
- t.Fatalf("failed to send txs: %v", err)
- }
- s.chain.IncNonce(from, 1)
-
- inners := []*types.DynamicFeeTx{
- // Nonce already used
- {
- ChainID: s.chain.config.ChainID,
- Nonce: nonce - 1,
- GasTipCap: common.Big1,
- GasFeeCap: s.chain.Head().BaseFee(),
- Gas: 100000,
- },
- // Value exceeds balance
- {
- Nonce: nonce,
- GasTipCap: common.Big1,
- GasFeeCap: s.chain.Head().BaseFee(),
- Gas: 100000,
- Value: s.chain.Balance(from),
- },
- // Gas limit too low
- {
- Nonce: nonce,
- GasTipCap: common.Big1,
- GasFeeCap: s.chain.Head().BaseFee(),
- Gas: 1337,
- },
- // Code size too large
- {
- Nonce: nonce,
- GasTipCap: common.Big1,
- GasFeeCap: s.chain.Head().BaseFee(),
- Data: randBuf(50),
- Gas: 1_000_000,
- },
- // Data too large
- {
- Nonce: nonce,
- GasTipCap: common.Big1,
- GasFeeCap: s.chain.Head().BaseFee(),
- To: &common.Address{0xaa},
- Data: randBuf(128),
- Gas: 5_000_000,
- },
- }
-
- var txs []*types.Transaction
- for _, inner := range inners {
- tx, err := s.chain.SignTx(from, types.NewTx(inner))
- if err != nil {
- t.Fatalf("failed to sign tx: %v", err)
- }
- txs = append(txs, tx)
- }
- if err := s.sendInvalidTxs(txs); err != nil {
- t.Fatalf("failed to send invalid txs: %v", err)
- }
-}
-
-// TestLargeTxRequest tests whether a node can fulfill a large GetPooledTransactions
-// request.
-func (s *Suite) TestLargeTxRequest(t *utesting.T) {
- // Nudge client out of syncing mode to accept pending txs.
- if err := s.engine.sendForkchoiceUpdated(); err != nil {
- t.Fatalf("failed to send next block: %v", err)
- }
-
- // Generate many transactions to seed target with.
- var (
- from, nonce = s.chain.GetSender(1)
- count = 2000
- txs []*types.Transaction
- hashes []common.Hash
- set = make(map[common.Hash]struct{})
- )
- for i := 0; i < count; i++ {
- inner := &types.DynamicFeeTx{
- ChainID: s.chain.config.ChainID,
- Nonce: nonce + uint64(i),
- GasTipCap: common.Big1,
- GasFeeCap: s.chain.Head().BaseFee(),
- Gas: 75000,
- }
- tx, err := s.chain.SignTx(from, types.NewTx(inner))
- if err != nil {
- t.Fatalf("failed to sign tx: err")
- }
- txs = append(txs, tx)
- set[tx.Hash()] = struct{}{}
- hashes = append(hashes, tx.Hash())
- }
- s.chain.IncNonce(from, uint64(count))
-
- // Send txs.
- if err := s.sendTxs(txs); err != nil {
- t.Fatalf("failed to send txs: %v", err)
- }
-
- // Set up receive connection to ensure node is peered with the receiving
- // connection before tx request is sent.
- conn, err := s.dial()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err = conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
- // Create and send pooled tx request.
- req := ð.GetPooledTransactionsPacket{
- RequestId: 1234,
- GetPooledTransactionsRequest: hashes,
- }
- if err = conn.Write(ethProto, eth.GetPooledTransactionsMsg, req); err != nil {
- t.Fatalf("could not write to conn: %v", err)
- }
- // Check that all received transactions match those that were sent to node.
- msg := new(eth.PooledTransactionsPacket)
- if err := conn.ReadMsg(ethProto, eth.PooledTransactionsMsg, &msg); err != nil {
- t.Fatalf("error reading from connection: %v", err)
- }
- if got, want := msg.RequestId, req.RequestId; got != want {
- t.Fatalf("unexpected request id in response: got %d, want %d", got, want)
- }
- for _, got := range msg.PooledTransactionsResponse {
- if _, exists := set[got.Hash()]; !exists {
- t.Fatalf("unexpected tx received: %v", got.Hash())
- }
- }
-}
-
-// TestNewPooledTxs tests whether a node will do a GetPooledTransactions request
-// upon receiving a NewPooledTransactionHashes announcement.
-func (s *Suite) TestNewPooledTxs(t *utesting.T) {
- // Nudge client out of syncing mode to accept pending txs.
- if err := s.engine.sendForkchoiceUpdated(); err != nil {
- t.Fatalf("failed to send next block: %v", err)
- }
- var (
- count = 50
- from, nonce = s.chain.GetSender(1)
- hashes = make([]common.Hash, count)
- txTypes = make([]byte, count)
- sizes = make([]uint32, count)
- )
- for i := 0; i < count; i++ {
- inner := &types.DynamicFeeTx{
- ChainID: s.chain.config.ChainID,
- Nonce: nonce + uint64(i),
- GasTipCap: common.Big1,
- GasFeeCap: s.chain.Head().BaseFee(),
- Gas: 75000,
- }
- tx, err := s.chain.SignTx(from, types.NewTx(inner))
- if err != nil {
- t.Fatalf("failed to sign tx: err")
- }
- hashes[i] = tx.Hash()
- txTypes[i] = tx.Type()
- sizes[i] = uint32(tx.Size())
- }
- s.chain.IncNonce(from, uint64(count))
-
- // Connect to peer.
- conn, err := s.dial()
- if err != nil {
- t.Fatalf("dial failed: %v", err)
- }
- defer conn.Close()
- if err = conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
-
- // Send announcement.
- ann := eth.NewPooledTransactionHashesPacket68{Types: txTypes, Sizes: sizes, Hashes: hashes}
- err = conn.Write(ethProto, eth.NewPooledTransactionHashesMsg, ann)
- if err != nil {
- t.Fatalf("failed to write to connection: %v", err)
- }
-
- // Wait for GetPooledTxs request.
- for {
- msg, err := conn.ReadEth()
- if err != nil {
- t.Fatalf("failed to read eth msg: %v", err)
- }
- switch msg := msg.(type) {
- case *eth.GetPooledTransactionsPacket:
- if len(msg.GetPooledTransactionsRequest) != len(hashes) {
- t.Fatalf("unexpected number of txs requested: wanted %d, got %d", len(hashes), len(msg.GetPooledTransactionsRequest))
- }
- return
- case *eth.NewPooledTransactionHashesPacket68:
- continue
- case *eth.TransactionsPacket:
- continue
- default:
- t.Fatalf("unexpected %s", pretty.Sdump(msg))
- }
- }
-}
-
-func makeSidecar(data ...byte) *types.BlobTxSidecar {
- var (
- blobs = make([]kzg4844.Blob, len(data))
- commitments []kzg4844.Commitment
- proofs []kzg4844.Proof
- )
- for i := range blobs {
- blobs[i][0] = data[i]
- c, _ := kzg4844.BlobToCommitment(blobs[i])
- p, _ := kzg4844.ComputeBlobProof(blobs[i], c)
- commitments = append(commitments, c)
- proofs = append(proofs, p)
- }
- return &types.BlobTxSidecar{
- Blobs: blobs,
- Commitments: commitments,
- Proofs: proofs,
- }
-}
-
-func (s *Suite) makeBlobTxs(count, blobs int, discriminator byte) (txs types.Transactions) {
- from, nonce := s.chain.GetSender(5)
- for i := 0; i < count; i++ {
- // Make blob data, max of 2 blobs per tx.
- blobdata := make([]byte, blobs%2)
- for i := range blobdata {
- blobdata[i] = discriminator
- blobs -= 1
- }
- inner := &types.BlobTx{
- ChainID: uint256.MustFromBig(s.chain.config.ChainID),
- Nonce: nonce + uint64(i),
- GasTipCap: uint256.NewInt(1),
- GasFeeCap: uint256.MustFromBig(s.chain.Head().BaseFee()),
- Gas: 100000,
- BlobFeeCap: uint256.MustFromBig(eip4844.CalcBlobFee(*s.chain.Head().ExcessBlobGas())),
- BlobHashes: makeSidecar(blobdata...).BlobHashes(),
- Sidecar: makeSidecar(blobdata...),
- }
- tx, err := s.chain.SignTx(from, types.NewTx(inner))
- if err != nil {
- panic("blob tx signing failed")
- }
- txs = append(txs, tx)
- }
- return txs
-}
-
-func (s *Suite) TestBlobViolations(t *utesting.T) {
- if err := s.engine.sendForkchoiceUpdated(); err != nil {
- t.Fatalf("send fcu failed: %v", err)
- }
- // Create blob txs for each tests with unqiue tx hashes.
- var (
- t1 = s.makeBlobTxs(2, 3, 0x1)
- t2 = s.makeBlobTxs(2, 3, 0x2)
- )
- for _, test := range []struct {
- ann eth.NewPooledTransactionHashesPacket68
- resp eth.PooledTransactionsResponse
- }{
- // Invalid tx size.
- {
- ann: eth.NewPooledTransactionHashesPacket68{
- Types: []byte{types.BlobTxType, types.BlobTxType},
- Sizes: []uint32{uint32(t1[0].Size()), uint32(t1[1].Size() + 10)},
- Hashes: []common.Hash{t1[0].Hash(), t1[1].Hash()},
- },
- resp: eth.PooledTransactionsResponse(t1),
- },
- // Wrong tx type.
- {
- ann: eth.NewPooledTransactionHashesPacket68{
- Types: []byte{types.DynamicFeeTxType, types.BlobTxType},
- Sizes: []uint32{uint32(t2[0].Size()), uint32(t2[1].Size())},
- Hashes: []common.Hash{t2[0].Hash(), t2[1].Hash()},
- },
- resp: eth.PooledTransactionsResponse(t2),
- },
- } {
- conn, err := s.dial()
- if err != nil {
- t.Fatalf("dial fail: %v", err)
- }
- if err := conn.peer(s.chain, nil); err != nil {
- t.Fatalf("peering failed: %v", err)
- }
- if err := conn.Write(ethProto, eth.NewPooledTransactionHashesMsg, test.ann); err != nil {
- t.Fatalf("sending announcement failed: %v", err)
- }
- req := new(eth.GetPooledTransactionsPacket)
- if err := conn.ReadMsg(ethProto, eth.GetPooledTransactionsMsg, req); err != nil {
- t.Fatalf("reading pooled tx request failed: %v", err)
- }
- resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, PooledTransactionsResponse: test.resp}
- if err := conn.Write(ethProto, eth.PooledTransactionsMsg, resp); err != nil {
- t.Fatalf("writing pooled tx response failed: %v", err)
- }
- if code, _, err := conn.Read(); err != nil {
- t.Fatalf("expected disconnect on blob violation, got err: %v", err)
- } else if code != discMsg {
- t.Fatalf("expected disconnect on blob violation, got msg code: %d", code)
- }
- conn.Close()
- }
-}
diff --git a/cmd/devp2p/internal/ethtest/suite_test.go b/cmd/devp2p/internal/ethtest/suite_test.go
deleted file mode 100644
index 79146c8aba..0000000000
--- a/cmd/devp2p/internal/ethtest/suite_test.go
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2021 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package ethtest
-
-import (
- crand "crypto/rand"
- "fmt"
- "os"
- "path"
- "testing"
- "time"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/eth"
- "github.com/ethereum/go-ethereum/eth/catalyst"
- "github.com/ethereum/go-ethereum/eth/ethconfig"
- "github.com/ethereum/go-ethereum/internal/utesting"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/p2p"
-)
-
-func makeJWTSecret() (string, [32]byte, error) {
- var secret [32]byte
- if _, err := crand.Read(secret[:]); err != nil {
- return "", secret, fmt.Errorf("failed to create jwt secret: %v", err)
- }
- jwtPath := path.Join(os.TempDir(), "jwt_secret")
- if err := os.WriteFile(jwtPath, []byte(hexutil.Encode(secret[:])), 0600); err != nil {
- return "", secret, fmt.Errorf("failed to prepare jwt secret file: %v", err)
- }
- return jwtPath, secret, nil
-}
-
-func TestEthSuite(t *testing.T) {
- jwtPath, secret, err := makeJWTSecret()
- if err != nil {
- t.Fatalf("could not make jwt secret: %v", err)
- }
- geth, err := runGeth("./testdata", jwtPath)
- if err != nil {
- t.Fatalf("could not run geth: %v", err)
- }
- defer geth.Close()
-
- suite, err := NewSuite(geth.Server().Self(), "./testdata", geth.HTTPAuthEndpoint(), common.Bytes2Hex(secret[:]))
- if err != nil {
- t.Fatalf("could not create new test suite: %v", err)
- }
- for _, test := range suite.EthTests() {
- t.Run(test.Name, func(t *testing.T) {
- result := utesting.RunTests([]utesting.Test{{Name: test.Name, Fn: test.Fn}}, os.Stdout)
- if result[0].Failed {
- t.Fatal()
- }
- })
- }
-}
-
-func TestSnapSuite(t *testing.T) {
- jwtPath, secret, err := makeJWTSecret()
- if err != nil {
- t.Fatalf("could not make jwt secret: %v", err)
- }
- geth, err := runGeth("./testdata", jwtPath)
- if err != nil {
- t.Fatalf("could not run geth: %v", err)
- }
- defer geth.Close()
-
- suite, err := NewSuite(geth.Server().Self(), "./testdata", geth.HTTPAuthEndpoint(), common.Bytes2Hex(secret[:]))
- if err != nil {
- t.Fatalf("could not create new test suite: %v", err)
- }
- for _, test := range suite.SnapTests() {
- t.Run(test.Name, func(t *testing.T) {
- result := utesting.RunTests([]utesting.Test{{Name: test.Name, Fn: test.Fn}}, os.Stdout)
- if result[0].Failed {
- t.Fatal()
- }
- })
- }
-}
-
-// runGeth creates and starts a geth node
-func runGeth(dir string, jwtPath string) (*node.Node, error) {
- stack, err := node.New(&node.Config{
- AuthAddr: "127.0.0.1",
- AuthPort: 0,
- P2P: p2p.Config{
- ListenAddr: "127.0.0.1:0",
- NoDiscovery: true,
- MaxPeers: 10, // in case a test requires multiple connections, can be changed in the future
- NoDial: true,
- },
- JWTSecret: jwtPath,
- })
- if err != nil {
- return nil, err
- }
-
- err = setupGeth(stack, dir)
- if err != nil {
- stack.Close()
- return nil, err
- }
- if err = stack.Start(); err != nil {
- stack.Close()
- return nil, err
- }
- return stack, nil
-}
-
-func setupGeth(stack *node.Node, dir string) error {
- chain, err := NewChain(dir)
- if err != nil {
- return err
- }
- backend, err := eth.New(stack, ðconfig.Config{
- Genesis: &chain.genesis,
- NetworkId: chain.genesis.Config.ChainID.Uint64(), // 19763
- DatabaseCache: 10,
- TrieCleanCache: 10,
- TrieDirtyCache: 16,
- TrieTimeout: 60 * time.Minute,
- SnapshotCache: 10,
- })
- if err != nil {
- return err
- }
- if err := catalyst.Register(stack, backend); err != nil {
- return fmt.Errorf("failed to register catalyst service: %v", err)
- }
- _, err = backend.BlockChain().InsertChain(chain.blocks[1:])
- return err
-}
diff --git a/cmd/devp2p/internal/ethtest/testdata/accounts.json b/cmd/devp2p/internal/ethtest/testdata/accounts.json
deleted file mode 100644
index c9666235a8..0000000000
--- a/cmd/devp2p/internal/ethtest/testdata/accounts.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "0x0c2c51a0990aee1d73c1228de158688341557508": {
- "key": "0xbfcd0e032489319f4e5ca03e643b2025db624be6cf99cbfed90c4502e3754850"
- },
- "0x14e46043e63d0e3cdcf2530519f4cfaf35058cb2": {
- "key": "0x457075f6822ac29481154792f65c5f1ec335b4fea9ca20f3fea8fa1d78a12c68"
- },
- "0x16c57edf7fa9d9525378b0b81bf8a3ced0620c1c": {
- "key": "0x865898edcf43206d138c93f1bbd86311f4657b057658558888aa5ac4309626a6"
- },
- "0x1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf": {
- "key": "0xee7f7875d826d7443ccc5c174e38b2c436095018774248a8074ee92d8914dcdb"
- },
- "0x1f5bde34b4afc686f136c7a3cb6ec376f7357759": {
- "key": "0x25e6ce8611cefb5cd338aeaa9292ed2139714668d123a4fb156cabb42051b5b7"
- },
- "0x2d389075be5be9f2246ad654ce152cf05990b209": {
- "key": "0x19168cd7767604b3d19b99dc3da1302b9ccb6ee9ad61660859e07acd4a2625dd"
- },
- "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c": {
- "key": "0x71aa7d299c7607dabfc3d0e5213d612b5e4a97455b596c2f642daac43fa5eeaa"
- },
- "0x4340ee1b812acb40a1eb561c019c327b243b92df": {
- "key": "0x47f666f20e2175606355acec0ea1b37870c15e5797e962340da7ad7972a537e8"
- },
- "0x4a0f1452281bcec5bd90c3dce6162a5995bfe9df": {
- "key": "0xa88293fefc623644969e2ce6919fb0dbd0fd64f640293b4bf7e1a81c97e7fc7f"
- },
- "0x4dde844b71bcdf95512fb4dc94e84fb67b512ed8": {
- "key": "0x6e1e16a9c15641c73bf6e237f9293ab1d4e7c12b9adf83cfc94bcf969670f72d"
- },
- "0x5f552da00dfb4d3749d9e62dcee3c918855a86a0": {
- "key": "0x41be4e00aac79f7ffbb3455053ec05e971645440d594c047cdcc56a3c7458bd6"
- },
- "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e": {
- "key": "0xc825f31cd8792851e33a290b3d749e553983111fc1f36dfbbdb45f101973f6a9"
- },
- "0x717f8aa2b982bee0e29f573d31df288663e1ce16": {
- "key": "0x8d0faa04ae0f9bc3cd4c890aa025d5f40916f4729538b19471c0beefe11d9e19"
- },
- "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f": {
- "key": "0x4552dbe6ca4699322b5d923d0c9bcdd24644f5db8bf89a085b67c6c49b8a1b91"
- },
- "0x83c7e323d189f18725ac510004fdc2941f8c4a78": {
- "key": "0x34391cbbf06956bb506f45ec179cdd84df526aa364e27bbde65db9c15d866d00"
- },
- "0x84e75c28348fb86acea1a93a39426d7d60f4cc46": {
- "key": "0xf6a8f1603b8368f3ca373292b7310c53bec7b508aecacd442554ebc1c5d0c856"
- },
- "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0": {
- "key": "0x8d56bcbcf2c1b7109e1396a28d7a0234e33544ade74ea32c460ce4a443b239b1"
- },
- "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d": {
- "key": "0xfc39d1c9ddbba176d806ebb42d7460189fe56ca163ad3eb6143bfc6beb6f6f72"
- },
- "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc": {
- "key": "0x9ee3fd550664b246ad7cdba07162dd25530a3b1d51476dd1d85bbc29f0592684"
- },
- "0xeda8645ba6948855e3b3cd596bbb07596d59c603": {
- "key": "0x14cdde09d1640eb8c3cda063891b0453073f57719583381ff78811efa6d4199f"
- }
-}
\ No newline at end of file
diff --git a/cmd/devp2p/internal/ethtest/testdata/chain.rlp b/cmd/devp2p/internal/ethtest/testdata/chain.rlp
deleted file mode 100644
index 2964c02bb1..0000000000
Binary files a/cmd/devp2p/internal/ethtest/testdata/chain.rlp and /dev/null differ
diff --git a/cmd/devp2p/internal/ethtest/testdata/forkenv.json b/cmd/devp2p/internal/ethtest/testdata/forkenv.json
deleted file mode 100644
index 86c49e2b97..0000000000
--- a/cmd/devp2p/internal/ethtest/testdata/forkenv.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "HIVE_CANCUN_TIMESTAMP": "840",
- "HIVE_CHAIN_ID": "3503995874084926",
- "HIVE_FORK_ARROW_GLACIER": "60",
- "HIVE_FORK_BERLIN": "48",
- "HIVE_FORK_BYZANTIUM": "18",
- "HIVE_FORK_CONSTANTINOPLE": "24",
- "HIVE_FORK_GRAY_GLACIER": "66",
- "HIVE_FORK_HOMESTEAD": "0",
- "HIVE_FORK_ISTANBUL": "36",
- "HIVE_FORK_LONDON": "54",
- "HIVE_FORK_MUIR_GLACIER": "42",
- "HIVE_FORK_PETERSBURG": "30",
- "HIVE_FORK_SPURIOUS": "12",
- "HIVE_FORK_TANGERINE": "6",
- "HIVE_MERGE_BLOCK_ID": "72",
- "HIVE_NETWORK_ID": "3503995874084926",
- "HIVE_SHANGHAI_TIMESTAMP": "780",
- "HIVE_TERMINAL_TOTAL_DIFFICULTY": "9454784"
-}
\ No newline at end of file
diff --git a/cmd/devp2p/internal/ethtest/testdata/genesis.json b/cmd/devp2p/internal/ethtest/testdata/genesis.json
deleted file mode 100644
index e8bb66bb3c..0000000000
--- a/cmd/devp2p/internal/ethtest/testdata/genesis.json
+++ /dev/null
@@ -1,112 +0,0 @@
-{
- "config": {
- "chainId": 3503995874084926,
- "homesteadBlock": 0,
- "eip150Block": 6,
- "eip155Block": 12,
- "eip158Block": 12,
- "byzantiumBlock": 18,
- "constantinopleBlock": 24,
- "petersburgBlock": 30,
- "istanbulBlock": 36,
- "muirGlacierBlock": 42,
- "berlinBlock": 48,
- "londonBlock": 54,
- "arrowGlacierBlock": 60,
- "grayGlacierBlock": 66,
- "mergeNetsplitBlock": 72,
- "shanghaiTime": 780,
- "cancunTime": 840,
- "terminalTotalDifficulty": 9454784,
- "terminalTotalDifficultyPassed": true,
- "ethash": {}
- },
- "nonce": "0x0",
- "timestamp": "0x0",
- "extraData": "0x68697665636861696e",
- "gasLimit": "0x23f3e20",
- "difficulty": "0x20000",
- "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "coinbase": "0x0000000000000000000000000000000000000000",
- "alloc": {
- "000f3df6d732807ef1319fb7b8bb8522d0beac02": {
- "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500",
- "balance": "0x2a"
- },
- "0c2c51a0990aee1d73c1228de158688341557508": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "14e46043e63d0e3cdcf2530519f4cfaf35058cb2": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "16c57edf7fa9d9525378b0b81bf8a3ced0620c1c": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "1f5bde34b4afc686f136c7a3cb6ec376f7357759": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "2d389075be5be9f2246ad654ce152cf05990b209": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "3ae75c08b4c907eb63a8960c45b86e1e9ab6123c": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "4340ee1b812acb40a1eb561c019c327b243b92df": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "4a0f1452281bcec5bd90c3dce6162a5995bfe9df": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "4dde844b71bcdf95512fb4dc94e84fb67b512ed8": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "5f552da00dfb4d3749d9e62dcee3c918855a86a0": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "654aa64f5fbefb84c270ec74211b81ca8c44a72e": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "717f8aa2b982bee0e29f573d31df288663e1ce16": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "7435ed30a8b4aeb0877cef0c6e8cffe834eb865f": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "83c7e323d189f18725ac510004fdc2941f8c4a78": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "84e75c28348fb86acea1a93a39426d7d60f4cc46": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "8bebc8ba651aee624937e7d897853ac30c95a067": {
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000001",
- "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000002",
- "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000003"
- },
- "balance": "0x1",
- "nonce": "0x1"
- },
- "c7b99a164efd027a93f147376cc7da7c67c6bbe0": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "d803681e487e6ac18053afc5a6cd813c86ec3e4d": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "e7d13f7aa2a838d24c59b40186a0aca1e21cffcc": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- },
- "eda8645ba6948855e3b3cd596bbb07596d59c603": {
- "balance": "0xc097ce7bc90715b34b9f1000000000"
- }
- },
- "number": "0x0",
- "gasUsed": "0x0",
- "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "baseFeePerGas": null,
- "excessBlobGas": null,
- "blobGasUsed": null
-}
\ No newline at end of file
diff --git a/cmd/devp2p/internal/ethtest/testdata/headblock.json b/cmd/devp2p/internal/ethtest/testdata/headblock.json
deleted file mode 100644
index e84e96b0f0..0000000000
--- a/cmd/devp2p/internal/ethtest/testdata/headblock.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "parentHash": "0x96a73007443980c5e0985dfbb45279aa496dadea16918ad42c65c0bf8122ec39",
- "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "miner": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xea4c1f4d9fa8664c22574c5b2f948a78c4b1a753cebc1861e7fb5b1aa21c5a94",
- "transactionsRoot": "0xecda39025fc4c609ce778d75eed0aa53b65ce1e3d1373b34bad8578cc31e5b48",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "difficulty": "0x0",
- "number": "0x1f4",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x1388",
- "extraData": "0x",
- "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "nonce": "0x0000000000000000",
- "baseFeePerGas": "0x7",
- "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0",
- "parentBeaconBlockRoot": "0xf653da50cdff4733f13f7a5e338290e883bdf04adf3f112709728063ea965d6c",
- "hash": "0x36a166f0dcd160fc5e5c61c9a7c2d7f236d9175bf27f43aaa2150e291f092ef7"
-}
\ No newline at end of file
diff --git a/cmd/devp2p/internal/ethtest/testdata/headfcu.json b/cmd/devp2p/internal/ethtest/testdata/headfcu.json
deleted file mode 100644
index 920212d0c0..0000000000
--- a/cmd/devp2p/internal/ethtest/testdata/headfcu.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "jsonrpc": "2.0",
- "id": "fcu500",
- "method": "engine_forkchoiceUpdatedV3",
- "params": [
- {
- "headBlockHash": "0x36a166f0dcd160fc5e5c61c9a7c2d7f236d9175bf27f43aaa2150e291f092ef7",
- "safeBlockHash": "0x36a166f0dcd160fc5e5c61c9a7c2d7f236d9175bf27f43aaa2150e291f092ef7",
- "finalizedBlockHash": "0x36a166f0dcd160fc5e5c61c9a7c2d7f236d9175bf27f43aaa2150e291f092ef7"
- },
- null
- ]
-}
\ No newline at end of file
diff --git a/cmd/devp2p/internal/ethtest/testdata/headstate.json b/cmd/devp2p/internal/ethtest/testdata/headstate.json
deleted file mode 100644
index f7b076af69..0000000000
--- a/cmd/devp2p/internal/ethtest/testdata/headstate.json
+++ /dev/null
@@ -1,4204 +0,0 @@
-{
- "root": "ea4c1f4d9fa8664c22574c5b2f948a78c4b1a753cebc1861e7fb5b1aa21c5a94",
- "accounts": {
- "0x0000000000000000000000000000000000000000": {
- "balance": "233437500000029008737",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x5380c7b7ae81a58eb98d9c78de4a1fd7fd9535fc953ed2be602daaa41767312a"
- },
- "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": {
- "balance": "42",
- "nonce": 0,
- "root": "0xac3162a8b9dbb4318b84219f3140e7a9ec35126234120297dde10f51b25f6a26",
- "codeHash": "0xf57acd40259872606d76197ef052f3d35588dadf919ee1f0e3cb9b62d3f4b02c",
- "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000348": "0348",
- "0x0000000000000000000000000000000000000000000000000000000000000352": "0352",
- "0x000000000000000000000000000000000000000000000000000000000000035c": "035c",
- "0x0000000000000000000000000000000000000000000000000000000000000366": "0366",
- "0x0000000000000000000000000000000000000000000000000000000000000370": "0370",
- "0x000000000000000000000000000000000000000000000000000000000000037a": "037a",
- "0x0000000000000000000000000000000000000000000000000000000000000384": "0384",
- "0x000000000000000000000000000000000000000000000000000000000000038e": "038e",
- "0x0000000000000000000000000000000000000000000000000000000000000398": "0398",
- "0x00000000000000000000000000000000000000000000000000000000000003a2": "03a2",
- "0x00000000000000000000000000000000000000000000000000000000000003ac": "03ac",
- "0x00000000000000000000000000000000000000000000000000000000000003b6": "03b6",
- "0x00000000000000000000000000000000000000000000000000000000000003c0": "03c0",
- "0x00000000000000000000000000000000000000000000000000000000000003ca": "03ca",
- "0x00000000000000000000000000000000000000000000000000000000000003d4": "03d4",
- "0x00000000000000000000000000000000000000000000000000000000000003de": "03de",
- "0x00000000000000000000000000000000000000000000000000000000000003e8": "03e8",
- "0x00000000000000000000000000000000000000000000000000000000000003f2": "03f2",
- "0x00000000000000000000000000000000000000000000000000000000000003fc": "03fc",
- "0x0000000000000000000000000000000000000000000000000000000000000406": "0406",
- "0x0000000000000000000000000000000000000000000000000000000000000410": "0410",
- "0x000000000000000000000000000000000000000000000000000000000000041a": "041a",
- "0x0000000000000000000000000000000000000000000000000000000000000424": "0424",
- "0x000000000000000000000000000000000000000000000000000000000000042e": "042e",
- "0x0000000000000000000000000000000000000000000000000000000000000438": "0438",
- "0x0000000000000000000000000000000000000000000000000000000000000442": "0442",
- "0x000000000000000000000000000000000000000000000000000000000000044c": "044c",
- "0x0000000000000000000000000000000000000000000000000000000000000456": "0456",
- "0x0000000000000000000000000000000000000000000000000000000000000460": "0460",
- "0x000000000000000000000000000000000000000000000000000000000000046a": "046a",
- "0x0000000000000000000000000000000000000000000000000000000000000474": "0474",
- "0x000000000000000000000000000000000000000000000000000000000000047e": "047e",
- "0x0000000000000000000000000000000000000000000000000000000000000488": "0488",
- "0x0000000000000000000000000000000000000000000000000000000000000492": "0492",
- "0x000000000000000000000000000000000000000000000000000000000000049c": "049c",
- "0x00000000000000000000000000000000000000000000000000000000000004a6": "04a6",
- "0x00000000000000000000000000000000000000000000000000000000000004b0": "04b0",
- "0x00000000000000000000000000000000000000000000000000000000000004ba": "04ba",
- "0x00000000000000000000000000000000000000000000000000000000000004c4": "04c4",
- "0x00000000000000000000000000000000000000000000000000000000000004ce": "04ce",
- "0x00000000000000000000000000000000000000000000000000000000000004d8": "04d8",
- "0x00000000000000000000000000000000000000000000000000000000000004e2": "04e2",
- "0x00000000000000000000000000000000000000000000000000000000000004ec": "04ec",
- "0x00000000000000000000000000000000000000000000000000000000000004f6": "04f6",
- "0x0000000000000000000000000000000000000000000000000000000000000500": "0500",
- "0x000000000000000000000000000000000000000000000000000000000000050a": "050a",
- "0x0000000000000000000000000000000000000000000000000000000000000514": "0514",
- "0x000000000000000000000000000000000000000000000000000000000000051e": "051e",
- "0x0000000000000000000000000000000000000000000000000000000000000528": "0528",
- "0x0000000000000000000000000000000000000000000000000000000000000532": "0532",
- "0x000000000000000000000000000000000000000000000000000000000000053c": "053c",
- "0x0000000000000000000000000000000000000000000000000000000000000546": "0546",
- "0x0000000000000000000000000000000000000000000000000000000000000550": "0550",
- "0x000000000000000000000000000000000000000000000000000000000000055a": "055a",
- "0x0000000000000000000000000000000000000000000000000000000000000564": "0564",
- "0x000000000000000000000000000000000000000000000000000000000000056e": "056e",
- "0x0000000000000000000000000000000000000000000000000000000000000578": "0578",
- "0x0000000000000000000000000000000000000000000000000000000000000582": "0582",
- "0x000000000000000000000000000000000000000000000000000000000000058c": "058c",
- "0x0000000000000000000000000000000000000000000000000000000000000596": "0596",
- "0x00000000000000000000000000000000000000000000000000000000000005a0": "05a0",
- "0x00000000000000000000000000000000000000000000000000000000000005aa": "05aa",
- "0x00000000000000000000000000000000000000000000000000000000000005b4": "05b4",
- "0x00000000000000000000000000000000000000000000000000000000000005be": "05be",
- "0x00000000000000000000000000000000000000000000000000000000000005c8": "05c8",
- "0x00000000000000000000000000000000000000000000000000000000000005d2": "05d2",
- "0x00000000000000000000000000000000000000000000000000000000000005dc": "05dc",
- "0x00000000000000000000000000000000000000000000000000000000000005e6": "05e6",
- "0x00000000000000000000000000000000000000000000000000000000000005f0": "05f0",
- "0x00000000000000000000000000000000000000000000000000000000000005fa": "05fa",
- "0x0000000000000000000000000000000000000000000000000000000000000604": "0604",
- "0x000000000000000000000000000000000000000000000000000000000000060e": "060e",
- "0x0000000000000000000000000000000000000000000000000000000000000618": "0618",
- "0x0000000000000000000000000000000000000000000000000000000000000622": "0622",
- "0x000000000000000000000000000000000000000000000000000000000000062c": "062c",
- "0x0000000000000000000000000000000000000000000000000000000000000636": "0636",
- "0x0000000000000000000000000000000000000000000000000000000000000640": "0640",
- "0x000000000000000000000000000000000000000000000000000000000000064a": "064a",
- "0x0000000000000000000000000000000000000000000000000000000000000654": "0654",
- "0x000000000000000000000000000000000000000000000000000000000000065e": "065e",
- "0x0000000000000000000000000000000000000000000000000000000000000668": "0668",
- "0x0000000000000000000000000000000000000000000000000000000000000672": "0672",
- "0x000000000000000000000000000000000000000000000000000000000000067c": "067c",
- "0x0000000000000000000000000000000000000000000000000000000000000686": "0686",
- "0x0000000000000000000000000000000000000000000000000000000000000690": "0690",
- "0x000000000000000000000000000000000000000000000000000000000000069a": "069a",
- "0x00000000000000000000000000000000000000000000000000000000000006a4": "06a4",
- "0x00000000000000000000000000000000000000000000000000000000000006ae": "06ae",
- "0x00000000000000000000000000000000000000000000000000000000000006b8": "06b8",
- "0x00000000000000000000000000000000000000000000000000000000000006c2": "06c2",
- "0x00000000000000000000000000000000000000000000000000000000000006cc": "06cc",
- "0x00000000000000000000000000000000000000000000000000000000000006d6": "06d6",
- "0x00000000000000000000000000000000000000000000000000000000000006e0": "06e0",
- "0x00000000000000000000000000000000000000000000000000000000000006ea": "06ea",
- "0x00000000000000000000000000000000000000000000000000000000000006f4": "06f4",
- "0x00000000000000000000000000000000000000000000000000000000000006fe": "06fe",
- "0x0000000000000000000000000000000000000000000000000000000000000708": "0708",
- "0x0000000000000000000000000000000000000000000000000000000000000712": "0712",
- "0x000000000000000000000000000000000000000000000000000000000000071c": "071c",
- "0x0000000000000000000000000000000000000000000000000000000000000726": "0726",
- "0x0000000000000000000000000000000000000000000000000000000000000730": "0730",
- "0x000000000000000000000000000000000000000000000000000000000000073a": "073a",
- "0x0000000000000000000000000000000000000000000000000000000000000744": "0744",
- "0x000000000000000000000000000000000000000000000000000000000000074e": "074e",
- "0x0000000000000000000000000000000000000000000000000000000000000758": "0758",
- "0x0000000000000000000000000000000000000000000000000000000000000762": "0762",
- "0x000000000000000000000000000000000000000000000000000000000000076c": "076c",
- "0x0000000000000000000000000000000000000000000000000000000000000776": "0776",
- "0x0000000000000000000000000000000000000000000000000000000000000780": "0780",
- "0x000000000000000000000000000000000000000000000000000000000000078a": "078a",
- "0x0000000000000000000000000000000000000000000000000000000000000794": "0794",
- "0x000000000000000000000000000000000000000000000000000000000000079e": "079e",
- "0x00000000000000000000000000000000000000000000000000000000000007a8": "07a8",
- "0x00000000000000000000000000000000000000000000000000000000000007b2": "07b2",
- "0x00000000000000000000000000000000000000000000000000000000000007bc": "07bc",
- "0x00000000000000000000000000000000000000000000000000000000000007c6": "07c6",
- "0x00000000000000000000000000000000000000000000000000000000000007d0": "07d0",
- "0x00000000000000000000000000000000000000000000000000000000000007da": "07da",
- "0x00000000000000000000000000000000000000000000000000000000000007e4": "07e4",
- "0x00000000000000000000000000000000000000000000000000000000000007ee": "07ee",
- "0x00000000000000000000000000000000000000000000000000000000000007f8": "07f8",
- "0x0000000000000000000000000000000000000000000000000000000000000802": "0802",
- "0x000000000000000000000000000000000000000000000000000000000000080c": "080c",
- "0x0000000000000000000000000000000000000000000000000000000000000816": "0816",
- "0x0000000000000000000000000000000000000000000000000000000000000820": "0820",
- "0x000000000000000000000000000000000000000000000000000000000000082a": "082a",
- "0x0000000000000000000000000000000000000000000000000000000000000834": "0834",
- "0x000000000000000000000000000000000000000000000000000000000000083e": "083e",
- "0x0000000000000000000000000000000000000000000000000000000000000848": "0848",
- "0x0000000000000000000000000000000000000000000000000000000000000852": "0852",
- "0x000000000000000000000000000000000000000000000000000000000000085c": "085c",
- "0x0000000000000000000000000000000000000000000000000000000000000866": "0866",
- "0x0000000000000000000000000000000000000000000000000000000000000870": "0870",
- "0x000000000000000000000000000000000000000000000000000000000000087a": "087a",
- "0x0000000000000000000000000000000000000000000000000000000000000884": "0884",
- "0x000000000000000000000000000000000000000000000000000000000000088e": "088e",
- "0x0000000000000000000000000000000000000000000000000000000000000898": "0898",
- "0x00000000000000000000000000000000000000000000000000000000000008a2": "08a2",
- "0x00000000000000000000000000000000000000000000000000000000000008ac": "08ac",
- "0x00000000000000000000000000000000000000000000000000000000000008b6": "08b6",
- "0x00000000000000000000000000000000000000000000000000000000000008c0": "08c0",
- "0x00000000000000000000000000000000000000000000000000000000000008ca": "08ca",
- "0x00000000000000000000000000000000000000000000000000000000000008d4": "08d4",
- "0x00000000000000000000000000000000000000000000000000000000000008de": "08de",
- "0x00000000000000000000000000000000000000000000000000000000000008e8": "08e8",
- "0x00000000000000000000000000000000000000000000000000000000000008f2": "08f2",
- "0x00000000000000000000000000000000000000000000000000000000000008fc": "08fc",
- "0x0000000000000000000000000000000000000000000000000000000000000906": "0906",
- "0x0000000000000000000000000000000000000000000000000000000000000910": "0910",
- "0x000000000000000000000000000000000000000000000000000000000000091a": "091a",
- "0x0000000000000000000000000000000000000000000000000000000000000924": "0924",
- "0x000000000000000000000000000000000000000000000000000000000000092e": "092e",
- "0x0000000000000000000000000000000000000000000000000000000000000938": "0938",
- "0x0000000000000000000000000000000000000000000000000000000000000942": "0942",
- "0x000000000000000000000000000000000000000000000000000000000000094c": "094c",
- "0x0000000000000000000000000000000000000000000000000000000000000956": "0956",
- "0x0000000000000000000000000000000000000000000000000000000000000960": "0960",
- "0x000000000000000000000000000000000000000000000000000000000000096a": "096a",
- "0x0000000000000000000000000000000000000000000000000000000000000974": "0974",
- "0x000000000000000000000000000000000000000000000000000000000000097e": "097e",
- "0x0000000000000000000000000000000000000000000000000000000000000988": "0988",
- "0x0000000000000000000000000000000000000000000000000000000000000992": "0992",
- "0x000000000000000000000000000000000000000000000000000000000000099c": "099c",
- "0x00000000000000000000000000000000000000000000000000000000000009a6": "09a6",
- "0x00000000000000000000000000000000000000000000000000000000000009b0": "09b0",
- "0x00000000000000000000000000000000000000000000000000000000000009ba": "09ba",
- "0x00000000000000000000000000000000000000000000000000000000000009c4": "09c4",
- "0x00000000000000000000000000000000000000000000000000000000000009ce": "09ce",
- "0x00000000000000000000000000000000000000000000000000000000000009d8": "09d8",
- "0x00000000000000000000000000000000000000000000000000000000000009e2": "09e2",
- "0x00000000000000000000000000000000000000000000000000000000000009ec": "09ec",
- "0x00000000000000000000000000000000000000000000000000000000000009f6": "09f6",
- "0x0000000000000000000000000000000000000000000000000000000000000a00": "0a00",
- "0x0000000000000000000000000000000000000000000000000000000000000a0a": "0a0a",
- "0x0000000000000000000000000000000000000000000000000000000000000a14": "0a14",
- "0x0000000000000000000000000000000000000000000000000000000000000a1e": "0a1e",
- "0x0000000000000000000000000000000000000000000000000000000000000a28": "0a28",
- "0x0000000000000000000000000000000000000000000000000000000000000a32": "0a32",
- "0x0000000000000000000000000000000000000000000000000000000000000a3c": "0a3c",
- "0x0000000000000000000000000000000000000000000000000000000000000a46": "0a46",
- "0x0000000000000000000000000000000000000000000000000000000000000a50": "0a50",
- "0x0000000000000000000000000000000000000000000000000000000000000a5a": "0a5a",
- "0x0000000000000000000000000000000000000000000000000000000000000a64": "0a64",
- "0x0000000000000000000000000000000000000000000000000000000000000a6e": "0a6e",
- "0x0000000000000000000000000000000000000000000000000000000000000a78": "0a78",
- "0x0000000000000000000000000000000000000000000000000000000000000a82": "0a82",
- "0x0000000000000000000000000000000000000000000000000000000000000a8c": "0a8c",
- "0x0000000000000000000000000000000000000000000000000000000000000a96": "0a96",
- "0x0000000000000000000000000000000000000000000000000000000000000aa0": "0aa0",
- "0x0000000000000000000000000000000000000000000000000000000000000aaa": "0aaa",
- "0x0000000000000000000000000000000000000000000000000000000000000ab4": "0ab4",
- "0x0000000000000000000000000000000000000000000000000000000000000abe": "0abe",
- "0x0000000000000000000000000000000000000000000000000000000000000ac8": "0ac8",
- "0x0000000000000000000000000000000000000000000000000000000000000ad2": "0ad2",
- "0x0000000000000000000000000000000000000000000000000000000000000adc": "0adc",
- "0x0000000000000000000000000000000000000000000000000000000000000ae6": "0ae6",
- "0x0000000000000000000000000000000000000000000000000000000000000af0": "0af0",
- "0x0000000000000000000000000000000000000000000000000000000000000afa": "0afa",
- "0x0000000000000000000000000000000000000000000000000000000000000b04": "0b04",
- "0x0000000000000000000000000000000000000000000000000000000000000b0e": "0b0e",
- "0x0000000000000000000000000000000000000000000000000000000000000b18": "0b18",
- "0x0000000000000000000000000000000000000000000000000000000000000b22": "0b22",
- "0x0000000000000000000000000000000000000000000000000000000000000b2c": "0b2c",
- "0x0000000000000000000000000000000000000000000000000000000000000b36": "0b36",
- "0x0000000000000000000000000000000000000000000000000000000000000b40": "0b40",
- "0x0000000000000000000000000000000000000000000000000000000000000b4a": "0b4a",
- "0x0000000000000000000000000000000000000000000000000000000000000b54": "0b54",
- "0x0000000000000000000000000000000000000000000000000000000000000b5e": "0b5e",
- "0x0000000000000000000000000000000000000000000000000000000000000b68": "0b68",
- "0x0000000000000000000000000000000000000000000000000000000000000b72": "0b72",
- "0x0000000000000000000000000000000000000000000000000000000000000b7c": "0b7c",
- "0x0000000000000000000000000000000000000000000000000000000000000b86": "0b86",
- "0x0000000000000000000000000000000000000000000000000000000000000b90": "0b90",
- "0x0000000000000000000000000000000000000000000000000000000000000b9a": "0b9a",
- "0x0000000000000000000000000000000000000000000000000000000000000ba4": "0ba4",
- "0x0000000000000000000000000000000000000000000000000000000000000bae": "0bae",
- "0x0000000000000000000000000000000000000000000000000000000000000bb8": "0bb8",
- "0x0000000000000000000000000000000000000000000000000000000000000bc2": "0bc2",
- "0x0000000000000000000000000000000000000000000000000000000000000bcc": "0bcc",
- "0x0000000000000000000000000000000000000000000000000000000000000bd6": "0bd6",
- "0x0000000000000000000000000000000000000000000000000000000000000be0": "0be0",
- "0x0000000000000000000000000000000000000000000000000000000000000bea": "0bea",
- "0x0000000000000000000000000000000000000000000000000000000000000bf4": "0bf4",
- "0x0000000000000000000000000000000000000000000000000000000000000bfe": "0bfe",
- "0x0000000000000000000000000000000000000000000000000000000000000c08": "0c08",
- "0x0000000000000000000000000000000000000000000000000000000000000c12": "0c12",
- "0x0000000000000000000000000000000000000000000000000000000000000c1c": "0c1c",
- "0x0000000000000000000000000000000000000000000000000000000000000c26": "0c26",
- "0x0000000000000000000000000000000000000000000000000000000000000c30": "0c30",
- "0x0000000000000000000000000000000000000000000000000000000000000c3a": "0c3a",
- "0x0000000000000000000000000000000000000000000000000000000000000c44": "0c44",
- "0x0000000000000000000000000000000000000000000000000000000000000c4e": "0c4e",
- "0x0000000000000000000000000000000000000000000000000000000000000c58": "0c58",
- "0x0000000000000000000000000000000000000000000000000000000000000c62": "0c62",
- "0x0000000000000000000000000000000000000000000000000000000000000c6c": "0c6c",
- "0x0000000000000000000000000000000000000000000000000000000000000c76": "0c76",
- "0x0000000000000000000000000000000000000000000000000000000000000c80": "0c80",
- "0x0000000000000000000000000000000000000000000000000000000000000c8a": "0c8a",
- "0x0000000000000000000000000000000000000000000000000000000000000c94": "0c94",
- "0x0000000000000000000000000000000000000000000000000000000000000c9e": "0c9e",
- "0x0000000000000000000000000000000000000000000000000000000000000ca8": "0ca8",
- "0x0000000000000000000000000000000000000000000000000000000000000cb2": "0cb2",
- "0x0000000000000000000000000000000000000000000000000000000000000cbc": "0cbc",
- "0x0000000000000000000000000000000000000000000000000000000000000cc6": "0cc6",
- "0x0000000000000000000000000000000000000000000000000000000000000cd0": "0cd0",
- "0x0000000000000000000000000000000000000000000000000000000000000cda": "0cda",
- "0x0000000000000000000000000000000000000000000000000000000000000ce4": "0ce4",
- "0x0000000000000000000000000000000000000000000000000000000000000cee": "0cee",
- "0x0000000000000000000000000000000000000000000000000000000000000cf8": "0cf8",
- "0x0000000000000000000000000000000000000000000000000000000000000d02": "0d02",
- "0x0000000000000000000000000000000000000000000000000000000000000d0c": "0d0c",
- "0x0000000000000000000000000000000000000000000000000000000000000d16": "0d16",
- "0x0000000000000000000000000000000000000000000000000000000000000d20": "0d20",
- "0x0000000000000000000000000000000000000000000000000000000000000d2a": "0d2a",
- "0x0000000000000000000000000000000000000000000000000000000000000d34": "0d34",
- "0x0000000000000000000000000000000000000000000000000000000000000d3e": "0d3e",
- "0x0000000000000000000000000000000000000000000000000000000000000d48": "0d48",
- "0x0000000000000000000000000000000000000000000000000000000000000d52": "0d52",
- "0x0000000000000000000000000000000000000000000000000000000000000d5c": "0d5c",
- "0x0000000000000000000000000000000000000000000000000000000000000d66": "0d66",
- "0x0000000000000000000000000000000000000000000000000000000000000d70": "0d70",
- "0x0000000000000000000000000000000000000000000000000000000000000d7a": "0d7a",
- "0x0000000000000000000000000000000000000000000000000000000000000d84": "0d84",
- "0x0000000000000000000000000000000000000000000000000000000000000d8e": "0d8e",
- "0x0000000000000000000000000000000000000000000000000000000000000d98": "0d98",
- "0x0000000000000000000000000000000000000000000000000000000000000da2": "0da2",
- "0x0000000000000000000000000000000000000000000000000000000000000dac": "0dac",
- "0x0000000000000000000000000000000000000000000000000000000000000db6": "0db6",
- "0x0000000000000000000000000000000000000000000000000000000000000dc0": "0dc0",
- "0x0000000000000000000000000000000000000000000000000000000000000dca": "0dca",
- "0x0000000000000000000000000000000000000000000000000000000000000dd4": "0dd4",
- "0x0000000000000000000000000000000000000000000000000000000000000dde": "0dde",
- "0x0000000000000000000000000000000000000000000000000000000000000de8": "0de8",
- "0x0000000000000000000000000000000000000000000000000000000000000df2": "0df2",
- "0x0000000000000000000000000000000000000000000000000000000000000dfc": "0dfc",
- "0x0000000000000000000000000000000000000000000000000000000000000e06": "0e06",
- "0x0000000000000000000000000000000000000000000000000000000000000e10": "0e10",
- "0x0000000000000000000000000000000000000000000000000000000000000e1a": "0e1a",
- "0x0000000000000000000000000000000000000000000000000000000000000e24": "0e24",
- "0x0000000000000000000000000000000000000000000000000000000000000e2e": "0e2e",
- "0x0000000000000000000000000000000000000000000000000000000000000e38": "0e38",
- "0x0000000000000000000000000000000000000000000000000000000000000e42": "0e42",
- "0x0000000000000000000000000000000000000000000000000000000000000e4c": "0e4c",
- "0x0000000000000000000000000000000000000000000000000000000000000e56": "0e56",
- "0x0000000000000000000000000000000000000000000000000000000000000e60": "0e60",
- "0x0000000000000000000000000000000000000000000000000000000000000e6a": "0e6a",
- "0x0000000000000000000000000000000000000000000000000000000000000e74": "0e74",
- "0x0000000000000000000000000000000000000000000000000000000000000e7e": "0e7e",
- "0x0000000000000000000000000000000000000000000000000000000000000e88": "0e88",
- "0x0000000000000000000000000000000000000000000000000000000000000e92": "0e92",
- "0x0000000000000000000000000000000000000000000000000000000000000e9c": "0e9c",
- "0x0000000000000000000000000000000000000000000000000000000000000ea6": "0ea6",
- "0x0000000000000000000000000000000000000000000000000000000000000eb0": "0eb0",
- "0x0000000000000000000000000000000000000000000000000000000000000eba": "0eba",
- "0x0000000000000000000000000000000000000000000000000000000000000ec4": "0ec4",
- "0x0000000000000000000000000000000000000000000000000000000000000ece": "0ece",
- "0x0000000000000000000000000000000000000000000000000000000000000ed8": "0ed8",
- "0x0000000000000000000000000000000000000000000000000000000000000ee2": "0ee2",
- "0x0000000000000000000000000000000000000000000000000000000000000eec": "0eec",
- "0x0000000000000000000000000000000000000000000000000000000000000ef6": "0ef6",
- "0x0000000000000000000000000000000000000000000000000000000000000f00": "0f00",
- "0x0000000000000000000000000000000000000000000000000000000000000f0a": "0f0a",
- "0x0000000000000000000000000000000000000000000000000000000000000f14": "0f14",
- "0x0000000000000000000000000000000000000000000000000000000000000f1e": "0f1e",
- "0x0000000000000000000000000000000000000000000000000000000000000f28": "0f28",
- "0x0000000000000000000000000000000000000000000000000000000000000f32": "0f32",
- "0x0000000000000000000000000000000000000000000000000000000000000f3c": "0f3c",
- "0x0000000000000000000000000000000000000000000000000000000000000f46": "0f46",
- "0x0000000000000000000000000000000000000000000000000000000000000f50": "0f50",
- "0x0000000000000000000000000000000000000000000000000000000000000f5a": "0f5a",
- "0x0000000000000000000000000000000000000000000000000000000000000f64": "0f64",
- "0x0000000000000000000000000000000000000000000000000000000000000f6e": "0f6e",
- "0x0000000000000000000000000000000000000000000000000000000000000f78": "0f78",
- "0x0000000000000000000000000000000000000000000000000000000000000f82": "0f82",
- "0x0000000000000000000000000000000000000000000000000000000000000f8c": "0f8c",
- "0x0000000000000000000000000000000000000000000000000000000000000f96": "0f96",
- "0x0000000000000000000000000000000000000000000000000000000000000fa0": "0fa0",
- "0x0000000000000000000000000000000000000000000000000000000000000faa": "0faa",
- "0x0000000000000000000000000000000000000000000000000000000000000fb4": "0fb4",
- "0x0000000000000000000000000000000000000000000000000000000000000fbe": "0fbe",
- "0x0000000000000000000000000000000000000000000000000000000000000fc8": "0fc8",
- "0x0000000000000000000000000000000000000000000000000000000000000fd2": "0fd2",
- "0x0000000000000000000000000000000000000000000000000000000000000fdc": "0fdc",
- "0x0000000000000000000000000000000000000000000000000000000000000fe6": "0fe6",
- "0x0000000000000000000000000000000000000000000000000000000000000ff0": "0ff0",
- "0x0000000000000000000000000000000000000000000000000000000000000ffa": "0ffa",
- "0x0000000000000000000000000000000000000000000000000000000000001004": "1004",
- "0x000000000000000000000000000000000000000000000000000000000000100e": "100e",
- "0x0000000000000000000000000000000000000000000000000000000000001018": "1018",
- "0x0000000000000000000000000000000000000000000000000000000000001022": "1022",
- "0x000000000000000000000000000000000000000000000000000000000000102c": "102c",
- "0x0000000000000000000000000000000000000000000000000000000000001036": "1036",
- "0x0000000000000000000000000000000000000000000000000000000000001040": "1040",
- "0x000000000000000000000000000000000000000000000000000000000000104a": "104a",
- "0x0000000000000000000000000000000000000000000000000000000000001054": "1054",
- "0x000000000000000000000000000000000000000000000000000000000000105e": "105e",
- "0x0000000000000000000000000000000000000000000000000000000000001068": "1068",
- "0x0000000000000000000000000000000000000000000000000000000000001072": "1072",
- "0x000000000000000000000000000000000000000000000000000000000000107c": "107c",
- "0x0000000000000000000000000000000000000000000000000000000000001086": "1086",
- "0x0000000000000000000000000000000000000000000000000000000000001090": "1090",
- "0x000000000000000000000000000000000000000000000000000000000000109a": "109a",
- "0x00000000000000000000000000000000000000000000000000000000000010a4": "10a4",
- "0x00000000000000000000000000000000000000000000000000000000000010ae": "10ae",
- "0x00000000000000000000000000000000000000000000000000000000000010b8": "10b8",
- "0x00000000000000000000000000000000000000000000000000000000000010c2": "10c2",
- "0x00000000000000000000000000000000000000000000000000000000000010cc": "10cc",
- "0x00000000000000000000000000000000000000000000000000000000000010d6": "10d6",
- "0x00000000000000000000000000000000000000000000000000000000000010e0": "10e0",
- "0x00000000000000000000000000000000000000000000000000000000000010ea": "10ea",
- "0x00000000000000000000000000000000000000000000000000000000000010f4": "10f4",
- "0x00000000000000000000000000000000000000000000000000000000000010fe": "10fe",
- "0x0000000000000000000000000000000000000000000000000000000000001108": "1108",
- "0x0000000000000000000000000000000000000000000000000000000000001112": "1112",
- "0x000000000000000000000000000000000000000000000000000000000000111c": "111c",
- "0x0000000000000000000000000000000000000000000000000000000000001126": "1126",
- "0x0000000000000000000000000000000000000000000000000000000000001130": "1130",
- "0x000000000000000000000000000000000000000000000000000000000000113a": "113a",
- "0x0000000000000000000000000000000000000000000000000000000000001144": "1144",
- "0x000000000000000000000000000000000000000000000000000000000000114e": "114e",
- "0x0000000000000000000000000000000000000000000000000000000000001158": "1158",
- "0x0000000000000000000000000000000000000000000000000000000000001162": "1162",
- "0x000000000000000000000000000000000000000000000000000000000000116c": "116c",
- "0x0000000000000000000000000000000000000000000000000000000000001176": "1176",
- "0x0000000000000000000000000000000000000000000000000000000000001180": "1180",
- "0x000000000000000000000000000000000000000000000000000000000000118a": "118a",
- "0x0000000000000000000000000000000000000000000000000000000000001194": "1194",
- "0x000000000000000000000000000000000000000000000000000000000000119e": "119e",
- "0x00000000000000000000000000000000000000000000000000000000000011a8": "11a8",
- "0x00000000000000000000000000000000000000000000000000000000000011b2": "11b2",
- "0x00000000000000000000000000000000000000000000000000000000000011bc": "11bc",
- "0x00000000000000000000000000000000000000000000000000000000000011c6": "11c6",
- "0x00000000000000000000000000000000000000000000000000000000000011d0": "11d0",
- "0x00000000000000000000000000000000000000000000000000000000000011da": "11da",
- "0x00000000000000000000000000000000000000000000000000000000000011e4": "11e4",
- "0x00000000000000000000000000000000000000000000000000000000000011ee": "11ee",
- "0x00000000000000000000000000000000000000000000000000000000000011f8": "11f8",
- "0x0000000000000000000000000000000000000000000000000000000000001202": "1202",
- "0x000000000000000000000000000000000000000000000000000000000000120c": "120c",
- "0x0000000000000000000000000000000000000000000000000000000000001216": "1216",
- "0x0000000000000000000000000000000000000000000000000000000000001220": "1220",
- "0x000000000000000000000000000000000000000000000000000000000000122a": "122a",
- "0x0000000000000000000000000000000000000000000000000000000000001234": "1234",
- "0x000000000000000000000000000000000000000000000000000000000000123e": "123e",
- "0x0000000000000000000000000000000000000000000000000000000000001248": "1248",
- "0x0000000000000000000000000000000000000000000000000000000000001252": "1252",
- "0x000000000000000000000000000000000000000000000000000000000000125c": "125c",
- "0x0000000000000000000000000000000000000000000000000000000000001266": "1266",
- "0x0000000000000000000000000000000000000000000000000000000000001270": "1270",
- "0x000000000000000000000000000000000000000000000000000000000000127a": "127a",
- "0x0000000000000000000000000000000000000000000000000000000000001284": "1284",
- "0x000000000000000000000000000000000000000000000000000000000000128e": "128e",
- "0x0000000000000000000000000000000000000000000000000000000000001298": "1298",
- "0x00000000000000000000000000000000000000000000000000000000000012a2": "12a2",
- "0x00000000000000000000000000000000000000000000000000000000000012ac": "12ac",
- "0x00000000000000000000000000000000000000000000000000000000000012b6": "12b6",
- "0x00000000000000000000000000000000000000000000000000000000000012c0": "12c0",
- "0x00000000000000000000000000000000000000000000000000000000000012ca": "12ca",
- "0x00000000000000000000000000000000000000000000000000000000000012d4": "12d4",
- "0x00000000000000000000000000000000000000000000000000000000000012de": "12de",
- "0x00000000000000000000000000000000000000000000000000000000000012e8": "12e8",
- "0x00000000000000000000000000000000000000000000000000000000000012f2": "12f2",
- "0x00000000000000000000000000000000000000000000000000000000000012fc": "12fc",
- "0x0000000000000000000000000000000000000000000000000000000000001306": "1306",
- "0x0000000000000000000000000000000000000000000000000000000000001310": "1310",
- "0x000000000000000000000000000000000000000000000000000000000000131a": "131a",
- "0x0000000000000000000000000000000000000000000000000000000000001324": "1324",
- "0x000000000000000000000000000000000000000000000000000000000000132e": "132e",
- "0x0000000000000000000000000000000000000000000000000000000000001338": "1338",
- "0x0000000000000000000000000000000000000000000000000000000000001342": "1342",
- "0x000000000000000000000000000000000000000000000000000000000000134c": "134c",
- "0x0000000000000000000000000000000000000000000000000000000000001356": "1356",
- "0x0000000000000000000000000000000000000000000000000000000000001360": "1360",
- "0x000000000000000000000000000000000000000000000000000000000000136a": "136a",
- "0x0000000000000000000000000000000000000000000000000000000000001374": "1374",
- "0x000000000000000000000000000000000000000000000000000000000000137e": "137e",
- "0x0000000000000000000000000000000000000000000000000000000000001388": "1388",
- "0x0000000000000000000000000000000000000000000000000000000000002347": "83472eda6eb475906aeeb7f09e757ba9f6663b9f6a5bf8611d6306f677f67ebd",
- "0x0000000000000000000000000000000000000000000000000000000000002351": "2c809fbc7e3991c8ab560d1431fa8b6f25be4ab50977f0294dfeca9677866b6e",
- "0x000000000000000000000000000000000000000000000000000000000000235b": "756e335a8778f6aadb2cc18c5bc68892da05a4d8b458eee5ce3335a024000c67",
- "0x0000000000000000000000000000000000000000000000000000000000002365": "4b118bd31ed2c4eeb81dc9e3919e9989994333fe36f147c2930f12c53f0d3c78",
- "0x000000000000000000000000000000000000000000000000000000000000236f": "d0122166752d729620d41114ff5a94d36e5d3e01b449c23844900c023d1650a5",
- "0x0000000000000000000000000000000000000000000000000000000000002379": "60c606c4c44709ac87b367f42d2453744639fc5bee099a11f170de98408c8089",
- "0x0000000000000000000000000000000000000000000000000000000000002383": "6ee04e1c27edad89a8e5a2253e4d9cca06e4f57d063ed4fe7cc1c478bb57eeca",
- "0x000000000000000000000000000000000000000000000000000000000000238d": "36616354a17658eb3c3e8e5adda6253660e3744cb8b213006f04302b723749a8",
- "0x0000000000000000000000000000000000000000000000000000000000002397": "c13802d4378dcb9c616f0c60ea0edd90e6c2dacf61f39ca06add0eaa67473b94",
- "0x00000000000000000000000000000000000000000000000000000000000023a1": "8b345497936c51d077f414534be3f70472e4df101dee8820eaaff91a6624557b",
- "0x00000000000000000000000000000000000000000000000000000000000023ab": "e958485d4b3e47b38014cc4eaeb75f13228072e7b362a56fc3ffe10155882629",
- "0x00000000000000000000000000000000000000000000000000000000000023b5": "3346706b38a2331556153113383581bc6f66f209fdef502f9fc9b6daf6ea555e",
- "0x00000000000000000000000000000000000000000000000000000000000023bf": "346910f7e777c596be32f0dcf46ccfda2efe8d6c5d3abbfe0f76dba7437f5dad",
- "0x00000000000000000000000000000000000000000000000000000000000023c9": "e62a7bd9263534b752176d1ff1d428fcc370a3b176c4a6312b6016c2d5f8d546",
- "0x00000000000000000000000000000000000000000000000000000000000023d3": "ffe267d11268388fd0426a627dedddeb075d68327df9172c0445cd2979ec7e4d",
- "0x00000000000000000000000000000000000000000000000000000000000023dd": "23cc648c9cd82c08214882b7e28e026d6eb56920f90f64731bb09b6acf515427",
- "0x00000000000000000000000000000000000000000000000000000000000023e7": "47c896f5986ec29f58ec60eec56ed176910779e9fc9cf45c3c090126aeb21acd",
- "0x00000000000000000000000000000000000000000000000000000000000023f1": "6d19894928a3ab44077bb85dcb47e0865ce1c4c187bba26bad059aa774c03cfe",
- "0x00000000000000000000000000000000000000000000000000000000000023fb": "efc50f4fc1430b6d5d043065201692a4a02252fef0699394631f5213a5667547",
- "0x0000000000000000000000000000000000000000000000000000000000002405": "3cc9f65fc1f46927eb46fbf6d14bc94af078fe8ff982a984bdd117152cd1549f",
- "0x000000000000000000000000000000000000000000000000000000000000240f": "63eb547e9325bc34fbbbdfda327a71dc929fd8ab6509795e56479e95dbd40a80",
- "0x0000000000000000000000000000000000000000000000000000000000002419": "67317288cf707b0325748c7947e2dda5e8b41e45e62330d00d80e9be403e5c4c",
- "0x0000000000000000000000000000000000000000000000000000000000002423": "7fc37e0d22626f96f345b05516c8a3676b9e1de01d354e5eb9524f6776966885",
- "0x000000000000000000000000000000000000000000000000000000000000242d": "c8c5ffb6f192e9bda046ecd4ebb995af53c9dd6040f4ba8d8db9292c1310e43f",
- "0x0000000000000000000000000000000000000000000000000000000000002437": "e40a9cfd9babe862d482ca0c07c0a4086641d16c066620cb048c6e673c5a4f91",
- "0x0000000000000000000000000000000000000000000000000000000000002441": "e82e7cff48aea45fb3f7b199b0b173497bf4c5ea66ff840e2ec618d7eb3d7470",
- "0x000000000000000000000000000000000000000000000000000000000000244b": "84ceda57767ea709da7ab17897a70da1868c9670931da38f2438519a5249534d",
- "0x0000000000000000000000000000000000000000000000000000000000002455": "e9dcf640383969359c944cff24b75f71740627f596110ee8568fa09f9a06db1c",
- "0x000000000000000000000000000000000000000000000000000000000000245f": "430ef678bb92f1af44dcd77af9c5b59fb87d0fc4a09901a54398ad5b7e19a8f4",
- "0x0000000000000000000000000000000000000000000000000000000000002469": "f7af0b8b729cd17b7826259bc183b196dbd318bd7229d5e8085bf4849c0b12bf",
- "0x0000000000000000000000000000000000000000000000000000000000002473": "e134e19217f1b4c7e11f193561056303a1f67b69dac96ff79a6d0aafa994f7cb",
- "0x000000000000000000000000000000000000000000000000000000000000247d": "9cc58ab1a8cb0e983550e61f754aea1dd4f58ac6482a816dc50658de750de613",
- "0x0000000000000000000000000000000000000000000000000000000000002487": "79c2b067779a94fd3756070885fc8eab5e45033bde69ab17c0173d553df02978",
- "0x0000000000000000000000000000000000000000000000000000000000002491": "d908ef75d05b895600d3f9938cb5259612c71223b68d30469ff657d61c6b1611",
- "0x000000000000000000000000000000000000000000000000000000000000249b": "e0d31906b7c46ac7f38478c0872d3c634f7113d54ef0b57ebfaf7f993959f5a3",
- "0x00000000000000000000000000000000000000000000000000000000000024a5": "2318f5c5e6865200ad890e0a8db21c780a226bec0b2e29af1cb3a0d9b40196ae",
- "0x00000000000000000000000000000000000000000000000000000000000024af": "523997f8d8fed954658f547954fdeceab818b411862647f2b61a3619f6a4d4bc",
- "0x00000000000000000000000000000000000000000000000000000000000024b9": "be3396540ea36c6928cccdcfe6c669666edbbbcd4be5e703f59de0e3c2720da7",
- "0x00000000000000000000000000000000000000000000000000000000000024c3": "2d3fcfd65d0a6881a2e8684d03c2aa27aee6176514d9f6d8ebb3b766f85e1039",
- "0x00000000000000000000000000000000000000000000000000000000000024cd": "7ce0d5c253a7f910cca7416e949ac04fdaec20a518ab6fcbe4a63d8b439a5cfc",
- "0x00000000000000000000000000000000000000000000000000000000000024d7": "4da13d835ea44926ee13f34ce8fcd4b9d3dc65be0a351115cf404234c7fbd256",
- "0x00000000000000000000000000000000000000000000000000000000000024e1": "c5ee7483802009b45feabf4c5f701ec485f27bf7d2c4477b200ac53e210e9844",
- "0x00000000000000000000000000000000000000000000000000000000000024eb": "0fc71295326a7ae8e0776c61be67f3ed8770311df88e186405b8d75bd0be552b",
- "0x00000000000000000000000000000000000000000000000000000000000024f5": "7313b4315dd27586f940f8f2bf8af76825d8f24d2ae2c24d885dcb0cdd8d50f5",
- "0x00000000000000000000000000000000000000000000000000000000000024ff": "2739473baa23a9bca4e8d0f4f221cfa48440b4b73e2bae7386c14caccc6c2059",
- "0x0000000000000000000000000000000000000000000000000000000000002509": "d4da00e33a11ee18f67b25ad5ff574cddcdccaa30e6743e01a531336b16cbf8f",
- "0x0000000000000000000000000000000000000000000000000000000000002513": "e651765d4860f0c46f191212c8193e7c82708e5d8bef1ed6f19bdde577f980cf",
- "0x000000000000000000000000000000000000000000000000000000000000251d": "5b5b49487967b3b60bd859ba2fb13290c6eaf67e97e9f9f9dda935c08564b5f6",
- "0x0000000000000000000000000000000000000000000000000000000000002527": "57b73780cc42a6a36676ce7008459d5ba206389dc9300f1aecbd77c4b90277fa",
- "0x0000000000000000000000000000000000000000000000000000000000002531": "217e8514ea30f1431dc3cd006fe730df721f961cebb5d0b52069d1b4e1ae5d13",
- "0x000000000000000000000000000000000000000000000000000000000000253b": "14b775119c252908bb10b13de9f8ae988302e1ea8b2e7a1b6d3c8ae24ba9396b",
- "0x0000000000000000000000000000000000000000000000000000000000002545": "e736f0b3c5672f76332a38a6c1e66e5f39e0d01f1ddede2c24671f48e78daf63",
- "0x000000000000000000000000000000000000000000000000000000000000254f": "7d112c85b58c64c576d34ea7a7c18287981885892fbf95110e62add156ca572e",
- "0x0000000000000000000000000000000000000000000000000000000000002559": "28fbeedc649ed9d2a6feda6e5a2576949da6812235ebdfd030f8105d012f5074",
- "0x0000000000000000000000000000000000000000000000000000000000002563": "6f7410cf59e390abe233de2a3e3fe022b63b78a92f6f4e3c54aced57b6c3daa6",
- "0x000000000000000000000000000000000000000000000000000000000000256d": "d5edc3d8781deea3b577e772f51949a8866f2aa933149f622f05cde2ebba9adb",
- "0x0000000000000000000000000000000000000000000000000000000000002577": "20308d99bc1e1b1b0717f32b9a3a869f4318f5f0eb4ed81fddd10696c9746c6b",
- "0x0000000000000000000000000000000000000000000000000000000000002581": "91f7a302057a2e21d5e0ef4b8eea75dfb8b37f2c2db05c5a84517aaebc9d5131",
- "0x000000000000000000000000000000000000000000000000000000000000258b": "743e5d0a5be47d489b121edb9f98dad7d0a85fc260909083656fabaf6d404774",
- "0x0000000000000000000000000000000000000000000000000000000000002595": "cdcf99c6e2e7d0951f762e787bdbe0e2b3b320815c9d2be91e9cd0848653e839",
- "0x000000000000000000000000000000000000000000000000000000000000259f": "cc9476183d27810e9738f382c7f2124976735ed89bbafc7dc19c99db8cfa9ad1",
- "0x00000000000000000000000000000000000000000000000000000000000025a9": "f67e5fab2e7cacf5b89acd75ec53b0527d45435adddac6ee7523a345dcbcdceb",
- "0x00000000000000000000000000000000000000000000000000000000000025b3": "e20f8ab522b2f0d12c068043852139965161851ad910b840db53604c8774a579",
- "0x00000000000000000000000000000000000000000000000000000000000025bd": "f982160785861cb970559d980208dd00e6a2ec315f5857df175891b171438eeb",
- "0x00000000000000000000000000000000000000000000000000000000000025c7": "230954c737211b72d5c7dcfe420bb07d5d72f2b4868c5976dd22c00d3df0c0b6",
- "0x00000000000000000000000000000000000000000000000000000000000025d1": "b7743e65d6bbe09d5531f1bc98964f75943d8c13e27527ca6afd40ca069265d4",
- "0x00000000000000000000000000000000000000000000000000000000000025db": "31ac943dc649c639fa6221400183ca827c07b812a6fbfc1795eb835aa280adf3",
- "0x00000000000000000000000000000000000000000000000000000000000025e5": "ded49c937c48d466987a4130f4b6d04ef658029673c3afc99f70f33b552e178d",
- "0x00000000000000000000000000000000000000000000000000000000000025ef": "a0effc449cab515020d2012897155a792bce529cbd8d5a4cf94d0bbf141afeb6",
- "0x00000000000000000000000000000000000000000000000000000000000025f9": "1f36d9c66a0d437d8e49ffaeaa00f341e9630791b374e8bc0c16059c7445721f",
- "0x0000000000000000000000000000000000000000000000000000000000002603": "34f89e6134f26e7110b47ffc942a847d8c03deeed1b33b9c041218c4e1a1a4e6",
- "0x000000000000000000000000000000000000000000000000000000000000260d": "774404c430041ca4a58fdc281e99bf6fcb014973165370556d9e73fdec6d597b",
- "0x0000000000000000000000000000000000000000000000000000000000002617": "d616971210c381584bf4846ab5837b53e062cbbb89d112c758b4bd00ce577f09",
- "0x0000000000000000000000000000000000000000000000000000000000002621": "cdf6383634b0431468f6f5af19a2b7a087478b42489608c64555ea1ae0a7ee19",
- "0x000000000000000000000000000000000000000000000000000000000000262b": "ec22e5df77320b4142c54fceaf2fe7ea30d1a72dc9c969a22acf66858d582b",
- "0x0000000000000000000000000000000000000000000000000000000000002635": "cb32d77facfda4decff9e08df5a5810fa42585fdf96f0db9b63b196116fbb6af",
- "0x000000000000000000000000000000000000000000000000000000000000263f": "6d76316f272f0212123d0b4b21d16835fe6f7a2b4d1960386d8a161da2b7c6a2",
- "0x0000000000000000000000000000000000000000000000000000000000002649": "2de2da72ae329e359b655fc6311a707b06dc930126a27261b0e8ec803bdb5cbf",
- "0x0000000000000000000000000000000000000000000000000000000000002653": "08bed4b39d14dc1e72e80f605573cde6145b12693204f9af18bbc94a82389500",
- "0x000000000000000000000000000000000000000000000000000000000000265d": "e437f0465ac29b0e889ef4f577c939dd39363c08fcfc81ee61aa0b4f55805f69",
- "0x0000000000000000000000000000000000000000000000000000000000002667": "89ca120183cc7085b6d4674d779fc4fbc9de520779bfbc3ebf65f9663cb88080",
- "0x0000000000000000000000000000000000000000000000000000000000002671": "b15d5954c7b78ab09ede922684487c7a60368e82fdc7b5a0916842e58a44422b",
- "0x000000000000000000000000000000000000000000000000000000000000267b": "ad13055a49d2b6a4ffc8b781998ff79086adad2fd6470a0563a43b740128c5f2",
- "0x0000000000000000000000000000000000000000000000000000000000002685": "9e9909e4ed44f5539427ee3bc70ee8b630ccdaea4d0f1ed5337a067e8337119f",
- "0x000000000000000000000000000000000000000000000000000000000000268f": "bf1f3aba184e08d4c650f05fe3d948bdda6c2d6982f277f2cd6b1a60cd4f3dac",
- "0x0000000000000000000000000000000000000000000000000000000000002699": "bb70fe131f94783dba356c8d4d9d319247ef61c768134303f0db85ee3ef0496f",
- "0x00000000000000000000000000000000000000000000000000000000000026a3": "6a81ebd3bde6cc54a2521aa72de29ef191e3b56d94953439a72cafdaa2996da0",
- "0x00000000000000000000000000000000000000000000000000000000000026ad": "4c83e809a52ac52a587d94590c35c71b72742bd15915fca466a9aaec4f2dbfed",
- "0x00000000000000000000000000000000000000000000000000000000000026b7": "268fc70790f00ad0759497585267fbdc92afba63ba01e211faae932f0639854a",
- "0x00000000000000000000000000000000000000000000000000000000000026c1": "7e544f42df99d5666085b70bc57b3ca175be50b7a9643f26f464124df632d562",
- "0x00000000000000000000000000000000000000000000000000000000000026cb": "d59cf5f55903ba577be835706b27d78a50cacb25271f35a5f57fcb88a3b576f3",
- "0x00000000000000000000000000000000000000000000000000000000000026d5": "551cced461be11efdeaf8e47f3a91bb66d532af7294c4461c8009c5833bdbf57",
- "0x00000000000000000000000000000000000000000000000000000000000026df": "c1e0e6907a57eefd12f1f95d28967146c836d72d281e7609de23d0a02351e978",
- "0x00000000000000000000000000000000000000000000000000000000000026e9": "9d580c0ac3a7f00fdc3b135b758ae7c80ab135e907793fcf9621a3a3023ca205",
- "0x00000000000000000000000000000000000000000000000000000000000026f3": "a7fd4dbac4bb62307ac7ad285ffa6a11ec679d950de2bd41839b8a846e239886",
- "0x00000000000000000000000000000000000000000000000000000000000026fd": "6ba7b0ac30a04e11a3116b43700d91359e6b06a49058e543198d4b21e75fb165",
- "0x0000000000000000000000000000000000000000000000000000000000002707": "8835104ed35ffd4db64660b9049e1c0328e502fd4f3744749e69183677b8474b",
- "0x0000000000000000000000000000000000000000000000000000000000002711": "562f276b9f9ed46303e700c8863ad75fadff5fc8df27a90744ea04ad1fe8e801",
- "0x000000000000000000000000000000000000000000000000000000000000271b": "d19f68026d22ae0f60215cfe4a160986c60378f554c763651d872ed82ad69ebb",
- "0x0000000000000000000000000000000000000000000000000000000000002725": "f087a515b4b62d707991988eb912d082b85ecdd52effc9e8a1ddf15a74388860",
- "0x000000000000000000000000000000000000000000000000000000000000272f": "f7e28b7daff5fad40ec1ef6a2b7e9066558126f62309a2ab0d0d775d892a06d6",
- "0x0000000000000000000000000000000000000000000000000000000000002739": "77361844a8f4dd2451e6218d336378b837ba3fab921709708655e3f1ea91a435",
- "0x0000000000000000000000000000000000000000000000000000000000002743": "e3cb33c7b05692a6f25470fbd63ab9c986970190729fab43191379da38bc0d8c",
- "0x000000000000000000000000000000000000000000000000000000000000274d": "c893f9de119ec83fe37b178b5671d63448e9b5cde4de9a88cace3f52c2591194",
- "0x0000000000000000000000000000000000000000000000000000000000002757": "39c96a6461782ac2efbcb5aaac2e133079b86fb29cb5ea69b0101bdad684ef0d",
- "0x0000000000000000000000000000000000000000000000000000000000002761": "72a2724cdf77138638a109f691465e55d32759d3c044a6cb41ab091c574e3bdb",
- "0x000000000000000000000000000000000000000000000000000000000000276b": "178ba15f24f0a8c33eed561d7927979c1215ddec20e1aef318db697ccfad0e03",
- "0x0000000000000000000000000000000000000000000000000000000000002775": "f7b2c01b7c625588c9596972fdebae61db89f0d0f2b21286d4c0fa76683ff946",
- "0x000000000000000000000000000000000000000000000000000000000000277f": "16e43284b041a4086ad1cbab9283d4ad3e8cc7c3a162f60b3df5538344ecdf54",
- "0x0000000000000000000000000000000000000000000000000000000000002789": "0a98ea7f737e17706432eba283d50dde10891b49c3424d46918ed2b6af8ecf90",
- "0x0000000000000000000000000000000000000000000000000000000000002793": "7637225dd61f90c3cb05fae157272985993b34d6c369bfe8372720339fe4ffd2",
- "0x000000000000000000000000000000000000000000000000000000000000279d": "6a7d064bc053c0f437707df7c36b820cca4a2e9653dd1761941af4070f5273b6",
- "0x00000000000000000000000000000000000000000000000000000000000027a7": "91c1e6eec8f7944fd6aafdce5477f45d4f6e29298c9ef628a59e441a5e071fae",
- "0x00000000000000000000000000000000000000000000000000000000000027b1": "a1c227db9bbd2e49934bef01cbb506dd1e1c0671a81aabb1f90a90025980a3c3",
- "0x00000000000000000000000000000000000000000000000000000000000027bb": "8fcfc1af10f3e8671505afadfd459287ae98be634083b5a35a400cc9186694cf",
- "0x00000000000000000000000000000000000000000000000000000000000027c5": "cc1ea9c015bd3a6470669f85c5c13e42c1161fc79704143df347c4a621dff44f",
- "0x00000000000000000000000000000000000000000000000000000000000027cf": "b0a22c625dd0c6534e29bccc9ebf94a550736e2c68140b9afe3ddc7216f797de",
- "0x00000000000000000000000000000000000000000000000000000000000027d9": "92b8e6ca20622e5fd91a8f58d0d4faaf7be48a53ea262e963bcf26a1698f9df3",
- "0x00000000000000000000000000000000000000000000000000000000000027e3": "f6253b8e2f31df6ca7a97086c3b4d49d9cbbbdfc5be731b0c3040a4381161c53",
- "0x00000000000000000000000000000000000000000000000000000000000027ed": "ea8d762903bd24b80037d7ffe80019a086398608ead66208c18f0a5778620e67",
- "0x00000000000000000000000000000000000000000000000000000000000027f7": "543382975e955588ba19809cfe126ea15dc43c0bfe6a43d861d7ad40eac2c2f4",
- "0x0000000000000000000000000000000000000000000000000000000000002801": "095294f7fe3eb90cf23b3127d40842f61b85da2f48f71234fb94d957d865a8a2",
- "0x000000000000000000000000000000000000000000000000000000000000280b": "144c2dd25fd12003ccd2678d69d30245b0222ce2d2bfead687931a7f6688482f",
- "0x0000000000000000000000000000000000000000000000000000000000002815": "7295f7d57a3547b191f55951f548479cbb9a60b47ba38beb8d85c4ccf0e4ae4c",
- "0x000000000000000000000000000000000000000000000000000000000000281f": "9e8e241e13f76a4e6d777a2dc64072de4737ac39272bb4987bcecbf60739ccf4",
- "0x0000000000000000000000000000000000000000000000000000000000002829": "fc753bcea3e720490efded4853ef1a1924665883de46c21039ec43e371e96bb9",
- "0x0000000000000000000000000000000000000000000000000000000000002833": "5f5204c264b5967682836ed773aee0ea209840fe628fd1c8d61702c416b427ca",
- "0x000000000000000000000000000000000000000000000000000000000000283d": "5ba9a0326069e000b65b759236f46e54a0e052f379a876d242740c24f6c47aed",
- "0x0000000000000000000000000000000000000000000000000000000000002847": "b40e9621d5634cd21f70274c345704af2e060c5befaeb2df109a78c7638167c2",
- "0x0000000000000000000000000000000000000000000000000000000000002851": "70e26b74456e6fea452e04f8144be099b0af0e279febdff17dd4cdf9281e12a7",
- "0x000000000000000000000000000000000000000000000000000000000000285b": "43d7158f48fb1f124b2962dff613c5b4b8ea415967f2b528af6e7ae280d658e5",
- "0x0000000000000000000000000000000000000000000000000000000000002865": "b50b2b14efba477dddca9682df1eafc66a9811c9c5bd1ae796abbef27ba14eb4",
- "0x000000000000000000000000000000000000000000000000000000000000286f": "c14936902147e9a121121f424ecd4d90313ce7fc603f3922cebb7d628ab2c8dd",
- "0x0000000000000000000000000000000000000000000000000000000000002879": "86609ed192561602f181a9833573213eb7077ee69d65107fa94f657f33b144d2",
- "0x0000000000000000000000000000000000000000000000000000000000002883": "0a71a6dbc360e176a0f665787ed3e092541c655024d0b136a04ceedf572c57c5",
- "0x000000000000000000000000000000000000000000000000000000000000288d": "a4bcbab632ddd52cb85f039e48c111a521e8944b9bdbaf79dd7c80b20221e4d6",
- "0x0000000000000000000000000000000000000000000000000000000000002897": "2bc468eab4fad397f9136f80179729b54caa2cb47c06b0695aab85cf9813620d",
- "0x00000000000000000000000000000000000000000000000000000000000028a1": "fc7f9a432e6fd69aaf025f64a326ab7221311147dd99d558633579a4d8a0667b",
- "0x00000000000000000000000000000000000000000000000000000000000028ab": "949613bd67fb0a68cf58a22e60e7b9b2ccbabb60d1d58c64c15e27a9dec2fb35",
- "0x00000000000000000000000000000000000000000000000000000000000028b5": "289ddb1aee772ad60043ecf17a882c36a988101af91ac177954862e62012fc0e",
- "0x00000000000000000000000000000000000000000000000000000000000028bf": "bfa48b05faa1a2ee14b3eaed0b75f0d265686b6ce3f2b7fa051b8dc98bc23d6a",
- "0x00000000000000000000000000000000000000000000000000000000000028c9": "7bf49590a866893dc77444d89717942e09acc299eea972e8a7908e9d694a1150",
- "0x00000000000000000000000000000000000000000000000000000000000028d3": "992f76aee242737eb21f14b65827f3ebc42524fb422b17f414f33c35a24092db",
- "0x00000000000000000000000000000000000000000000000000000000000028dd": "da6e4f935d966e90dffc6ac0f6d137d9e9c97d65396627e5486d0089b94076fa",
- "0x00000000000000000000000000000000000000000000000000000000000028e7": "65467514ed80f25b299dcf74fb74e21e9bb929832a349711cf327c2f8b60b57f",
- "0x00000000000000000000000000000000000000000000000000000000000028f1": "cc2ac03d7a26ff16c990c5f67fa03dabda95641a988deec72ed2fe38c0f289d6",
- "0x00000000000000000000000000000000000000000000000000000000000028fb": "096dbe9a0190c6badf79de3747abfd4d5eda3ab95b439922cae7ec0cfcd79290",
- "0x0000000000000000000000000000000000000000000000000000000000002905": "0c659c769744094f60332ec247799d7ed5ae311d5738daa5dcead3f47ca7a8a2",
- "0x000000000000000000000000000000000000000000000000000000000000290f": "9cb8a0d41ede6b951c29182422db215e22aedfa1a3549cd27b960a768f6ed522",
- "0x0000000000000000000000000000000000000000000000000000000000002919": "2510f8256a020f4735e2be224e3bc3e8c14e56f7588315f069630fe24ce2fa26",
- "0x0000000000000000000000000000000000000000000000000000000000002923": "2d3deb2385a2d230512707ece0bc6098ea788e3d5debb3911abe9a710dd332ea",
- "0x000000000000000000000000000000000000000000000000000000000000292d": "1cec4b230f3bccfff7ca197c4a35cb5b95ff7785d064be3628235971b7aff27c",
- "0x0000000000000000000000000000000000000000000000000000000000002937": "18e4a4238d43929180c7a626ae6f8c87a88d723b661549f2f76ff51726833598",
- "0x0000000000000000000000000000000000000000000000000000000000002941": "700e1755641a437c8dc888df24a5d80f80f9eaa0d17ddab17db4eb364432a1f5",
- "0x000000000000000000000000000000000000000000000000000000000000294b": "cad29ceb73b2f3c90d864a2c27a464b36b980458e2d8c4c7f32f70afad707312",
- "0x0000000000000000000000000000000000000000000000000000000000002955": "a85e892063a7fd41d37142ae38037967eb047436c727fcf0bad813d316efe09f",
- "0x000000000000000000000000000000000000000000000000000000000000295f": "040100f17208bcbd9456c62d98846859f7a5efa0e45a5b3a6f0b763b9c700fec",
- "0x0000000000000000000000000000000000000000000000000000000000002969": "49d54a5147de1f5208c509b194af6d64b509398e4f255c20315131e921f7bd04",
- "0x0000000000000000000000000000000000000000000000000000000000002973": "810ff6fcafb9373a4df3e91ab1ca64a2955c9e42ad8af964f829e38e0ea4ee20",
- "0x000000000000000000000000000000000000000000000000000000000000297d": "9b72096b8b672ac6ff5362c56f5d06446d1693c5d2daa94a30755aa636320e78",
- "0x0000000000000000000000000000000000000000000000000000000000002987": "f68bff777db51db5f29afc4afe38bd1bf5cdec29caa0dc52535b529e6d99b742",
- "0x0000000000000000000000000000000000000000000000000000000000002991": "9566690bde717eec59f828a2dba90988fa268a98ed224f8bc02b77bce10443c4",
- "0x000000000000000000000000000000000000000000000000000000000000299b": "d0e821fbd57a4d382edd638b5c1e6deefb81352d41aa97da52db13f330e03097",
- "0x00000000000000000000000000000000000000000000000000000000000029a5": "43f9aa6fa63739abec56c4604874523ac6dabfcc08bb283195072aeb29d38dfe",
- "0x00000000000000000000000000000000000000000000000000000000000029af": "54ebfa924e887a63d643a8277c3394317de0e02e63651b58b6eb0e90df8a20cd",
- "0x00000000000000000000000000000000000000000000000000000000000029b9": "9e414c994ee35162d3b718c47f8435edc2c93394a378cb41037b671366791fc8",
- "0x00000000000000000000000000000000000000000000000000000000000029c3": "4356f072bb235238abefb3330465814821097327842b6e0dc4a0ef95680c4d34",
- "0x00000000000000000000000000000000000000000000000000000000000029cd": "215df775ab368f17ed3f42058861768a3fba25e8d832a00b88559ca5078b8fbc",
- "0x00000000000000000000000000000000000000000000000000000000000029d7": "d17835a18d61605a04d2e50c4f023966a47036e5c59356a0463db90a76f06e3e",
- "0x00000000000000000000000000000000000000000000000000000000000029e1": "875032d74e62dbfd73d4617754d36cd88088d1e5a7c5354bf3e0906c749e6637",
- "0x00000000000000000000000000000000000000000000000000000000000029eb": "6f22ae25f70f4b03a2a2b17f370ace1f2b15d17fc7c2457824348a8f2a1eff9f",
- "0x00000000000000000000000000000000000000000000000000000000000029f5": "f11fdf2cb985ce7472dc7c6b422c3a8bf2dfbbc6b86b15a1fa62cf9ebae8f6cf",
- "0x00000000000000000000000000000000000000000000000000000000000029ff": "bbc97696e588f80fbe0316ad430fd4146a29c19b926248febe757cd9408deddc",
- "0x0000000000000000000000000000000000000000000000000000000000002a09": "71dd15be02efd9f3d5d94d0ed9b5e60a205f439bb46abe6226879e857668881e",
- "0x0000000000000000000000000000000000000000000000000000000000002a13": "b90e98bd91f1f7cc5c4456bb7a8868a2bb2cd3dda4b5dd6463b88728526dceea",
- "0x0000000000000000000000000000000000000000000000000000000000002a1d": "4e80fd3123fda9b404a737c9210ccb0bacc95ef93ac40e06ce9f7511012426c4",
- "0x0000000000000000000000000000000000000000000000000000000000002a27": "afb50d96b2543048dc93045b62357cc18b64d0e103756ce3ad0e04689dd88282",
- "0x0000000000000000000000000000000000000000000000000000000000002a31": "d73341a1c9edd04a890f949ede6cc1e942ad62b63b6a60177f0f692f141a7e95",
- "0x0000000000000000000000000000000000000000000000000000000000002a3b": "c26601e9613493118999d9268b401707e42496944ccdbfa91d5d7b791a6d18f1",
- "0x0000000000000000000000000000000000000000000000000000000000002a45": "fb4619fb12e1b9c4b508797833eef7df65fcf255488660d502def2a7ddceef6d",
- "0x0000000000000000000000000000000000000000000000000000000000002a4f": "d08b7458cd9d52905403f6f4e9dac15ad18bea1f834858bf48ecae36bf854f98",
- "0x0000000000000000000000000000000000000000000000000000000000002a59": "df979da2784a3bb9e07c368094dc640aafc514502a62a58b464e50e5e50a34bd",
- "0x0000000000000000000000000000000000000000000000000000000000002a63": "15855037d4712ce0019f0169dcd58b58493be8373d29decfa80b8df046e3d6ba",
- "0x0000000000000000000000000000000000000000000000000000000000002a6d": "fd1462a68630956a33e4b65c8e171a08a131097bc7faf5d7f90b5503ab30b69c",
- "0x0000000000000000000000000000000000000000000000000000000000002a77": "edad57fee633c4b696e519f84ad1765afbef5d2781b382acd9b8dfcf6cd6d572",
- "0x0000000000000000000000000000000000000000000000000000000000002a81": "c2641ba296c2daa6edf09b63d0f1cfcefd51451fbbc283b6802cbd5392fb145c",
- "0x0000000000000000000000000000000000000000000000000000000000002a8b": "5615d64e1d3a10972cdea4e4b106b4b6e832bc261129f9ab1d10a670383ae446",
- "0x0000000000000000000000000000000000000000000000000000000000002a95": "0757c6141fad938002092ff251a64190b060d0e31c31b08fb56b0f993cc4ef0d",
- "0x0000000000000000000000000000000000000000000000000000000000002a9f": "14ddc31bc9f9c877ae92ca1958e6f3affca7cc3064537d0bbe8ba4d2072c0961",
- "0x0000000000000000000000000000000000000000000000000000000000002aa9": "490b0f08777ad4364f523f94dccb3f56f4aacb2fb4db1bb042a786ecfd248c79",
- "0x0000000000000000000000000000000000000000000000000000000000002ab3": "4a37c0e55f539f2ecafa0ce71ee3d80bc9fe33fb841583073c9f524cc5a2615a",
- "0x0000000000000000000000000000000000000000000000000000000000002abd": "133295fdf94e5e4570e27125807a77272f24622750bcf408be0360ba0dcc89f2",
- "0x0000000000000000000000000000000000000000000000000000000000002ac7": "a73eb87c45c96b121f9ab081c095bff9a49cfe5a374f316e9a6a66096f532972",
- "0x0000000000000000000000000000000000000000000000000000000000002ad1": "9040bc28f6e830ca50f459fc3dac39a6cd261ccc8cd1cca5429d59230c10f34c",
- "0x0000000000000000000000000000000000000000000000000000000000002adb": "ec1d134c49cde6046ee295672a8f11663b6403fb71338181a89dc6bc92f7dea8",
- "0x0000000000000000000000000000000000000000000000000000000000002ae5": "3130a4c80497c65a7ee6ac20f6888a95bd5b05636d6b4bd13d616dcb01591e16",
- "0x0000000000000000000000000000000000000000000000000000000000002aef": "ccdfd5b42f2cbd29ab125769380fc1b18a9d272ac5d3508a6bbe4c82360ebcca",
- "0x0000000000000000000000000000000000000000000000000000000000002af9": "74342c7f25ee7dd1ae6eb9cf4e5ce5bcab56c798aea36b554ccb31a660e123af",
- "0x0000000000000000000000000000000000000000000000000000000000002b03": "f6f75f51a452481c30509e5de96edae82892a61f8c02c88d710dc782b5f01fc7",
- "0x0000000000000000000000000000000000000000000000000000000000002b0d": "7ce6539cc82db9730b8c21b12d6773925ff7d1a46c9e8f6c986ada96351f36e9",
- "0x0000000000000000000000000000000000000000000000000000000000002b17": "1983684da5e48936b761c5e5882bbeb5e42c3a7efe92989281367fa5ab25e918",
- "0x0000000000000000000000000000000000000000000000000000000000002b21": "c564aa993f2b446325ee674146307601dd87eb7409266a97e695e4bb09dd8bf5",
- "0x0000000000000000000000000000000000000000000000000000000000002b2b": "9ca2ff57d59decb7670d5f49bcca68fdaf494ba7dc06214d8e838bfcf7a2824e",
- "0x0000000000000000000000000000000000000000000000000000000000002b35": "6d7b7476cecc036d470a691755f9988409059bd104579c0a2ded58f144236045",
- "0x0000000000000000000000000000000000000000000000000000000000002b3f": "417504d79d00b85a29f58473a7ad643f88e9cdfe5da2ed25a5965411390fda4a",
- "0x0000000000000000000000000000000000000000000000000000000000002b49": "e910eb040bf32e56e9447d63497799419957ed7df2572e89768b9139c6fa6a23",
- "0x0000000000000000000000000000000000000000000000000000000000002b53": "8e462d3d5b17f0157bc100e785e1b8d2ad3262e6f27238fa7e9c62ba29e9c692",
- "0x0000000000000000000000000000000000000000000000000000000000002b5d": "3e6f040dc96b2e05961c4e28df076fa654761f4b0e2e30f5e36b06f65d1893c1",
- "0x0000000000000000000000000000000000000000000000000000000000002b67": "07e71d03691704a4bd83c728529642884fc1b1a8cfeb1ddcbf659c9b71367637",
- "0x0000000000000000000000000000000000000000000000000000000000002b71": "f4d05f5986e4b92a845467d2ae6209ca9b7c6c63ff9cdef3df180660158163ef",
- "0x0000000000000000000000000000000000000000000000000000000000002b7b": "5ca251408392b25af49419f1ecd9338d1f4b5afa536dc579ab54e1e3ee6914d4",
- "0x0000000000000000000000000000000000000000000000000000000000002b85": "e98b64599520cf62e68ce0e2cdf03a21d3712c81fa74b5ade4885b7d8aec531b",
- "0x0000000000000000000000000000000000000000000000000000000000002b8f": "d62ec5a2650450e26aac71a21d45ef795e57c231d28a18d077a01f761bc648fe",
- "0x0000000000000000000000000000000000000000000000000000000000002b99": "4d3fb38cf24faf44f5b37f248553713af2aa9c3d99ddad4a534e49cd06bb8098",
- "0x0000000000000000000000000000000000000000000000000000000000002ba3": "36e90abacae8fbe712658e705ac28fa9d00118ef55fe56ea893633680147148a",
- "0x0000000000000000000000000000000000000000000000000000000000002bad": "164177f08412f7e294fae37457d238c4dd76775263e2c7c9f39e8a7ceca9028a",
- "0x0000000000000000000000000000000000000000000000000000000000002bb7": "aa5a5586bf2f68df5c206dbe45a9498de0a9b5a2ee92235b740971819838a010",
- "0x0000000000000000000000000000000000000000000000000000000000002bc1": "99d001850f513efdc613fb7c8ede12a943ff543c578a54bebbb16daecc56cec5",
- "0x0000000000000000000000000000000000000000000000000000000000002bcb": "30a4501d58b23fc7eee5310f5262783b2dd36a94922d11e5e173ec763be8accb",
- "0x0000000000000000000000000000000000000000000000000000000000002bd5": "a804188a0434260c0825a988483de064ae01d3e50cb111642c4cfb65bfc2dfb7",
- "0x0000000000000000000000000000000000000000000000000000000000002bdf": "c554c79292c950bce95e9ef57136684fffb847188607705454909aa5790edc64",
- "0x0000000000000000000000000000000000000000000000000000000000002be9": "c89e3673025beff5031d48a885098da23d716b743449fd5533a04f25bd2cd203",
- "0x0000000000000000000000000000000000000000000000000000000000002bf3": "44c310142a326a3822abeb9161413f91010858432d27c9185c800c9c2d92aea6",
- "0x0000000000000000000000000000000000000000000000000000000000002bfd": "ae3f497ee4bd619d651097d3e04f50caac1f6af55b31b4cbde4faf1c5ddc21e8",
- "0x0000000000000000000000000000000000000000000000000000000000002c07": "3287d70a7b87db98964e828d5c45a4fa4cd7907be3538a5e990d7a3573ccb9c1",
- "0x0000000000000000000000000000000000000000000000000000000000002c11": "b52bb578e25d833410fcca7aa6f35f79844537361a43192dce8dcbc72d15e09b",
- "0x0000000000000000000000000000000000000000000000000000000000002c1b": "ff8f6f17c0f6d208d27dd8b9147586037086b70baf4f70c3629e73f8f053d34f",
- "0x0000000000000000000000000000000000000000000000000000000000002c25": "70bccc358ad584aacb115076c8aded45961f41920ffedf69ffa0483e0e91fa52",
- "0x0000000000000000000000000000000000000000000000000000000000002c2f": "e3881eba45a97335a6d450cc37e7f82b81d297c111569e38b6ba0c5fb0ae5d71",
- "0x0000000000000000000000000000000000000000000000000000000000002c39": "2217beb48c71769d8bf9caaac2858237552fd68cd4ddefb66d04551e7beaa176",
- "0x0000000000000000000000000000000000000000000000000000000000002c43": "06b56638d2545a02757e7f268b25a0cd3bce792fcb1e88da21b0cc21883b9720",
- "0x0000000000000000000000000000000000000000000000000000000000002c4d": "ebdc8c9e2a85a1fb6582ca30616a685ec8ec25e9c020a65a85671e8b9dacc6eb",
- "0x0000000000000000000000000000000000000000000000000000000000002c57": "738f3edb9d8d273aac79f95f3877fd885e1db732e86115fa3d0da18e6c89e9cf",
- "0x0000000000000000000000000000000000000000000000000000000000002c61": "ae5ccfc8201288b0c5981cdb60e16bc832ac92edc51149bfe40ff4a935a0c13a",
- "0x0000000000000000000000000000000000000000000000000000000000002c6b": "69a7a19c159c0534e50a98e460707c6c280e7e355fb97cf2b5e0fd56c45a0a97",
- "0x0000000000000000000000000000000000000000000000000000000000002c75": "4d2a1e9207a1466593e5903c5481a579e38e247afe5e80bd41d629ac3342e6a4",
- "0x0000000000000000000000000000000000000000000000000000000000002c7f": "d3e7d679c0d232629818cbb94251c24797ce36dd2a45dbe8c77a6a345231c3b3",
- "0x0000000000000000000000000000000000000000000000000000000000002c89": "d1835b94166e1856dddb6eaa1cfdcc6979193f2ff4541ab274738bd48072899c",
- "0x0000000000000000000000000000000000000000000000000000000000002c93": "1f12c89436a94d427a69bca5a080edc328bd2424896f3f37223186b440deb45e",
- "0x0000000000000000000000000000000000000000000000000000000000002c9d": "ccb765890b7107fd98056a257381b6b1d10a83474bbf1bdf8e6b0b8eb9cef2a9",
- "0x0000000000000000000000000000000000000000000000000000000000002ca7": "8bbf4e534dbf4580edc5a973194a725b7283f7b9fbb7d7d8deb386aaceebfa84",
- "0x0000000000000000000000000000000000000000000000000000000000002cb1": "85a0516088f78d837352dcf12547ee3c598dda398e78a9f4d95acfbef19f5e19",
- "0x0000000000000000000000000000000000000000000000000000000000002cbb": "0f669bc7780e2e5719f9c05872a112f6511e7f189a8649cda5d8dda88d6b8ac3",
- "0x0000000000000000000000000000000000000000000000000000000000002cc5": "a7816288f9712fcab6a2b6fbd0b941b8f48c2acb635580ed80c27bed7e840a57",
- "0x0000000000000000000000000000000000000000000000000000000000002ccf": "da5168c8c83ac67dfc2772af49d689f11974e960dee4c4351bac637db1a39e82",
- "0x0000000000000000000000000000000000000000000000000000000000002cd9": "3f720ecec02446f1af948de4eb0f54775562f2d615726375c377114515ac545b",
- "0x0000000000000000000000000000000000000000000000000000000000002ce3": "273830a0087f6cef0fdb42179aa1c6c8c19f7bc83c3dc7aa1a56e4e05ca473ea",
- "0x0000000000000000000000000000000000000000000000000000000000002ced": "7044f700543fd542e87e7cdb94f0126b0f6ad9488d0874a8ac903a72bade34e9",
- "0x0000000000000000000000000000000000000000000000000000000000002cf7": "f63a7ff76bb9713bea8d47831a1510d2c8971accd22a403d5bbfaaa3dc310616",
- "0x0000000000000000000000000000000000000000000000000000000000002d01": "a68dbd9898dd1589501ca3220784c44d41852ad997a270e215539d461ec090f8",
- "0x0000000000000000000000000000000000000000000000000000000000002d0b": "59e501ae3ba9e0c3adafdf0f696d2e6a358e1bec43cbe9b0258c2335dd8d764f",
- "0x0000000000000000000000000000000000000000000000000000000000002d15": "4f19cff0003bdc03c2fee20db950f0efb323be170f0b09c491a20abcf26ecf43",
- "0x0000000000000000000000000000000000000000000000000000000000002d1f": "52b1b89795a8fabd3c8594bd571b44fd72279979aaa1d49ea7105c787f8f5fa6",
- "0x0000000000000000000000000000000000000000000000000000000000002d29": "7c1416bd4838b93bc87990c9dcca108675bafab950dd0faf111d9eddc4e54327",
- "0x0000000000000000000000000000000000000000000000000000000000002d33": "ef87a35bb6e56e7d5a1f804c63c978bbd1c1516c4eb70edad2b8143169262c9f",
- "0x0000000000000000000000000000000000000000000000000000000000002d3d": "e978f25d16f468c0a0b585994d1e912837f55e1cd8849e140f484a2702385ef2",
- "0x0000000000000000000000000000000000000000000000000000000000002d47": "c3e85e9260b6fad139e3c42587cc2df7a9da07fadaacaf2381ca0d4a0c91c819",
- "0x0000000000000000000000000000000000000000000000000000000000002d51": "bd2647c989abfd1d340fd05add92800064ad742cd82be8c2ec5cc7df20eb0351",
- "0x0000000000000000000000000000000000000000000000000000000000002d5b": "99ac5ad7b62dd843abca85e485a6d4331e006ef9d391b0e89fb2eeccef1d29a2",
- "0x0000000000000000000000000000000000000000000000000000000000002d65": "02a4349c3ee7403fe2f23cad9cf2fb6933b1ae37e34c9d414dc4f64516ea9f97",
- "0x0000000000000000000000000000000000000000000000000000000000002d6f": "627b41fdbdf4a95381da5e5186123bf808c119b849dfdd3f515fa8d54c19c771",
- "0x0000000000000000000000000000000000000000000000000000000000002d79": "c087b16d7caa58e1361a7b158159469975f55582a4ef760465703a40123226d7",
- "0x0000000000000000000000000000000000000000000000000000000000002d83": "f7a477c0c27d4890e3fb56eb2dc0386e7409d1c59cab6c7f22b84de45b4c6867",
- "0x0000000000000000000000000000000000000000000000000000000000002d8d": "1cb440b7d88e98ceb953bc46b003fde2150860be05e11b9a5abae2c814a71571",
- "0x0000000000000000000000000000000000000000000000000000000000002d97": "72613e3e30445e37af38976f6bb3e3bf7debbcf70156eb37c5ac4e41834f9dd2",
- "0x0000000000000000000000000000000000000000000000000000000000002da1": "e69e7568b9e70ee7e71ebad9548fc8afad5ff4435df5d55624b39df9e8826c91",
- "0x0000000000000000000000000000000000000000000000000000000000002dab": "c3f1682f65ee45ce7019ee7059d65f8f1b0c0a8f68f94383410f7e6f46f26577",
- "0x0000000000000000000000000000000000000000000000000000000000002db5": "93ee1e4480ed7935097467737e54c595a2a6424cf8eaed5eacc2bf23ce368192",
- "0x0000000000000000000000000000000000000000000000000000000000002dbf": "b07f8855348b496166d3906437b8b76fdf7918f2e87858d8a78b1deece6e2558",
- "0x0000000000000000000000000000000000000000000000000000000000002dc9": "ec60e51de32061c531b80d2c515bfa8f81600b9b50fc02beaf4dc01dd6e0c9ca",
- "0x0000000000000000000000000000000000000000000000000000000000002dd3": "2fc9f34b3ed6b3cabd7b2b65b4a21381ad4419670eed745007f9efa8dd365ef1",
- "0x0000000000000000000000000000000000000000000000000000000000002ddd": "f4af3b701f9b088d23f93bb6d5868370ed1cdcb19532ddd164ed3f411f3e5a95",
- "0x0000000000000000000000000000000000000000000000000000000000002de7": "8272e509366a028b8d6bbae2a411eb3818b5be7dac69104a4e72317e55a9e697",
- "0x0000000000000000000000000000000000000000000000000000000000002df1": "a194d76f417dafe27d02a6044a913c0b494fe893840b5b745386ae6078a44e9c",
- "0x0000000000000000000000000000000000000000000000000000000000002dfb": "a255e59e9a27c16430219b18984594fc1edaf88fe47dd427911020fbc0d92507",
- "0x0000000000000000000000000000000000000000000000000000000000002e05": "7996946b8891ebd0623c7887dd09f50a939f6f29dea4ca3c3630f50ec3c575cb",
- "0x0000000000000000000000000000000000000000000000000000000000002e0f": "b04cbab069405f18839e6c6cf85cc19beeb9ee98c159510fcb67cb84652b7db9",
- "0x0000000000000000000000000000000000000000000000000000000000002e19": "6f241a5e530d1e261ef0f5800d7ff252c33ce148865926e6231d4718f0b9eded",
- "0x0000000000000000000000000000000000000000000000000000000000002e23": "fcfa9f1759f8db6a7e452af747a972cf3b1b493a216dbd32db21f7c2ce279cce",
- "0x0000000000000000000000000000000000000000000000000000000000002e2d": "df880227742710ac4f31c0466a6da7c56ec54caccfdb8f58e5d3f72e40e800f3",
- "0x0000000000000000000000000000000000000000000000000000000000002e37": "adfe28a0f8afc89c371dc7b724c78c2e3677904d03580c7141d32ba32f0ed46f",
- "0x0000000000000000000000000000000000000000000000000000000000002e41": "b264d19d2daf7d5fcf8d2214eba0aacf72cabbc7a2617219e535242258d43a31",
- "0x0000000000000000000000000000000000000000000000000000000000002e4b": "f2207420648dccc4f01992831e219c717076ff3c74fb88a96676bbcfe1e63f38",
- "0x0000000000000000000000000000000000000000000000000000000000002e55": "41e8fae73b31870db8546eea6e11b792e0c9daf74d2fbb6471f4f6c6aaead362",
- "0x0000000000000000000000000000000000000000000000000000000000002e5f": "4e7a5876c1ee2f1833267b5bd85ac35744a258cc3d7171a8a8cd5c87811078a2",
- "0x0000000000000000000000000000000000000000000000000000000000002e69": "8d4a424d1a0ee910ccdfc38c7e7f421780c337232d061e3528e025d74b362315",
- "0x0000000000000000000000000000000000000000000000000000000000002e73": "fa65829d54aba84896370599f041413d50f1acdc8a178211b2960827c1f85cbf",
- "0x0000000000000000000000000000000000000000000000000000000000002e7d": "da5dfc12da14eafad2ac2a1456c241c4683c6e7e40a7c3569bc618cfc9d6dca3",
- "0x0000000000000000000000000000000000000000000000000000000000002e87": "16243e7995312ffa3983c5858c6560b2abc637c481746003b6c2b58c62e9a547",
- "0x0000000000000000000000000000000000000000000000000000000000002e91": "b75f0189b31abbbd88cd32c47ed311c93ec429f1253ee715a1b00d1ca6a1e094",
- "0x0000000000000000000000000000000000000000000000000000000000002e9b": "d087eb94d6347da9322e3904add7ff7dd0fd72b924b917a8e10dae208251b49d",
- "0x0000000000000000000000000000000000000000000000000000000000002ea5": "bc17244b8519292d8fbb455f6253e57ecc16b5803bd58f62b0d94da7f8b2a1d6",
- "0x0000000000000000000000000000000000000000000000000000000000002eaf": "3ff8b39a3c6de6646124497b27e8d4e657d103c72f2001bdd4c554208a0566e3",
- "0x0000000000000000000000000000000000000000000000000000000000002eb9": "4d0f765d2b6a01f0c787bbb13b1360c1624704883e2fd420ea36037fa7e3a563",
- "0x0000000000000000000000000000000000000000000000000000000000002ec3": "f6f1dc891258163196785ce9516a14056cbe823b17eb9b90eeee7a299c1ce0e0",
- "0x0000000000000000000000000000000000000000000000000000000000002ecd": "1dbf19b70c0298507d20fb338cc167d9b07b8747351785047e1a736b42d999d1",
- "0x0000000000000000000000000000000000000000000000000000000000002ed7": "c3b71007b20abbe908fdb7ea11e3a3f0abff3b7c1ced865f82b07f100167de57",
- "0x0000000000000000000000000000000000000000000000000000000000002ee1": "3f45edc424499d0d4bbc0fd5837d1790cb41c08f0269273fdf66d682429c25cc",
- "0x0000000000000000000000000000000000000000000000000000000000002eeb": "cb8f5db9446c485eaae7edbc03e3afed72892fa7f11ad8eb7fa9dffbe3c220eb",
- "0x0000000000000000000000000000000000000000000000000000000000002ef5": "3d151527b5ba165352a450bee69f0afc78cf2ea9645bb5d8f36fb04435f0b67c",
- "0x0000000000000000000000000000000000000000000000000000000000002eff": "dd96b35b4ffabce80d377420a0b00b7fbf0eff6a910210155d22d9bd981be5d3",
- "0x0000000000000000000000000000000000000000000000000000000000002f09": "ace0c30b543d3f92f37eaac45d6f8730fb15fcaaaad4097ea42218abe57cb9f4",
- "0x0000000000000000000000000000000000000000000000000000000000002f13": "f6342dd31867c9bef6ffa06b6cf192db23d0891ed8fe610eb8d1aaa79726da01",
- "0x0000000000000000000000000000000000000000000000000000000000002f1d": "a6589e823979c2c2ac55e034d547b0c63aa02109133575d9f159e8a7677f03cb",
- "0x0000000000000000000000000000000000000000000000000000000000002f27": "9ce48bc641cc1d54ffdb409aab7da1304d5ee08042596b3542ca9737bb2b79a8",
- "0x0000000000000000000000000000000000000000000000000000000000002f31": "a44be801bd978629775c00d70df6d70b76d0ba918595e81415a27d1e3d6fdee9",
- "0x0000000000000000000000000000000000000000000000000000000000002f3b": "ce17f1e7af9f7ea8a99b2780d87b15d8b80a68fb29ea52f962b00fecfc6634e0",
- "0x0000000000000000000000000000000000000000000000000000000000002f45": "4bd91febab8df3770c957560e6185e8af59d2a42078756c525cd7769eb943894",
- "0x0000000000000000000000000000000000000000000000000000000000002f4f": "414c2a52de31de93a3c69531247b016ac578435243073acc516d4ea673c8dd80",
- "0x0000000000000000000000000000000000000000000000000000000000002f59": "647fb60bdf2683bd46b63d6884745782364a5522282ed1dc67d9e17c4aaab17d",
- "0x0000000000000000000000000000000000000000000000000000000000002f63": "fa681ffd0b0dd6f6775e99a681241b86a3a24446bc8a69cdae915701243e3855",
- "0x0000000000000000000000000000000000000000000000000000000000002f6d": "106ca692777b30cb2aa23ca59f5591514b28196ee8e9b06aa2b4deaea30d9ef6",
- "0x0000000000000000000000000000000000000000000000000000000000002f77": "494ac6d09377eb6a07ff759df61c2508e65e5671373d756c82e648bd9086d91a",
- "0x0000000000000000000000000000000000000000000000000000000000002f81": "0ae4ccd2bffa603714cc453bfd92f769dce6c9731c03ac3e2083f35388e6c795",
- "0x0000000000000000000000000000000000000000000000000000000000002f8b": "d860c999490d9836cc00326207393c78445b7fb90b12aa1d3607e3662b3d32cd",
- "0x0000000000000000000000000000000000000000000000000000000000002f95": "9587384f876dfec24da857c0bcdb3ded17f3328f28a4d59aa35ca7c25c8102cf",
- "0x0000000000000000000000000000000000000000000000000000000000002f9f": "4df8093d29bc0ec4e2a82be427771e77a206566194734a73c23477e1a9e451f8",
- "0x0000000000000000000000000000000000000000000000000000000000002fa9": "c56640f78acbd1da07701c365369766f09a19800ba70276f1f1d3cd1cf6e0686",
- "0x0000000000000000000000000000000000000000000000000000000000002fb3": "7173d4210aa525eece6b4b19b16bab23686ff9ac71bb9d16008bb114365e79f2",
- "0x0000000000000000000000000000000000000000000000000000000000002fbd": "89698b41d7ac70e767976a9f72ae6a46701456bc5ad8d146c248548409c90015",
- "0x0000000000000000000000000000000000000000000000000000000000002fc7": "5b605ab5048d9e4a51ca181ac3fa7001ef5d415cb20335b095c54a40c621dbff",
- "0x0000000000000000000000000000000000000000000000000000000000002fd1": "9129a84b729e7f69a5522a7020db57e27bf8cbb6042e030106c0cbd185bf0ab8",
- "0x0000000000000000000000000000000000000000000000000000000000002fdb": "31a63d6d54153ab35fc57068db205a3e68908be238658ca82d8bee9873f82159",
- "0x0000000000000000000000000000000000000000000000000000000000002fe5": "828641bcea1bc6ee1329bc39dca0afddc11e6867f3da13d4bb5170c54158860d",
- "0x0000000000000000000000000000000000000000000000000000000000002fef": "7e0752ddd86339f512ec1b647d3bf4b9b50c45e309ab9e70911da7716454b053",
- "0x0000000000000000000000000000000000000000000000000000000000002ff9": "31d973051189456d5998e05b500da6552138644f8cdbe4ec63f96f21173cb6a1",
- "0x0000000000000000000000000000000000000000000000000000000000003003": "e33e65b3d29c3b55b2d7b584c5d0540eb5c00c9f157287863b0b619339c302f0",
- "0x000000000000000000000000000000000000000000000000000000000000300d": "78d55514bcef24b40c7eb0fbe55f922d4468c194f313898f28ba85d8534df82c",
- "0x0000000000000000000000000000000000000000000000000000000000003017": "2e0f4be4d8adf8690fd64deddbc543f35c5b4f3c3a27b10a77b1fdb8d590f1ee",
- "0x0000000000000000000000000000000000000000000000000000000000003021": "e1b83ea8c4329f421296387826c89100d82bdc2263ffd8eb9368806a55d9b83b",
- "0x000000000000000000000000000000000000000000000000000000000000302b": "4ddad36d7262dd9201c5bdd58523f4724e3b740fddbed2185e32687fecacdf6b",
- "0x0000000000000000000000000000000000000000000000000000000000003035": "156c0674e46cdec70505443c5269d42c7bb14ee6c00f86a23962f08906cbb846",
- "0x000000000000000000000000000000000000000000000000000000000000303f": "dfc56ec6c218a08b471d757e0e7de8dddec9e82f401cb7d77df1f2a9ca54c607",
- "0x0000000000000000000000000000000000000000000000000000000000003049": "395d660f77c4360705cdc0be895907ec183097f749fac18b6eaa0245c1009074",
- "0x0000000000000000000000000000000000000000000000000000000000003053": "84c0060087da2c95dbd517d0f2dd4dfba70691a5952fe4048c310e88e9c06e4f",
- "0x000000000000000000000000000000000000000000000000000000000000305d": "f4df943c52b1d5fb9c1f73294ca743577d83914ec26d6e339b272cdeb62de586",
- "0x0000000000000000000000000000000000000000000000000000000000003067": "0bb47661741695863ef89d5c2b56666772f871be1cc1dccf695bd357e4bb26d6",
- "0x0000000000000000000000000000000000000000000000000000000000003071": "4a1f7691f29900287c6931545884881143ecae44cb26fdd644892844fde65dac",
- "0x000000000000000000000000000000000000000000000000000000000000307b": "9b133cc50cbc46d55ce2910eebaf8a09ab6d4e606062c94aac906da1646bc33f",
- "0x0000000000000000000000000000000000000000000000000000000000003085": "473b076b542da72798f9de31c282cb1dcd76cba2a22adc7391670ffdbc910766",
- "0x000000000000000000000000000000000000000000000000000000000000308f": "225dd472ef6b36a51de5c322a31a9f71c80f0f350432884526d9844bb2e676d3",
- "0x0000000000000000000000000000000000000000000000000000000000003099": "31df97b2c9fc65b5520b89540a42050212e487f46fac67685868f1c3e652a9aa",
- "0x00000000000000000000000000000000000000000000000000000000000030a3": "4416d885f34ad479409bb9e05e8846456a9be7e74655b9a4d7568a8d710aa06a",
- "0x00000000000000000000000000000000000000000000000000000000000030ad": "ae627f8802a46c1357fa42a8290fd1366ea21b8ccec1cc624e42022647c53802",
- "0x00000000000000000000000000000000000000000000000000000000000030b7": "8961e8b83d91487fc32b3d6af26b1d5e7b4010dd8d028fe165187cdfb04e151c",
- "0x00000000000000000000000000000000000000000000000000000000000030c1": "c22e39f021605c6f3d967aef37f0bf40b09d776bac3edb4264d0dc07389b9845",
- "0x00000000000000000000000000000000000000000000000000000000000030cb": "7cfa4c7066c690c12b9e8727551bef5fe05b750ac6637a5af632fce4ceb4e2ce",
- "0x00000000000000000000000000000000000000000000000000000000000030d5": "943d79e4329b86f8e53e8058961955f2b0a205fc3edeea2aae54ba0c22b40c31",
- "0x00000000000000000000000000000000000000000000000000000000000030df": "66598070dab784e48a153bf9c6c3e57d8ca92bed6592f0b9e9abe308a17aedf0",
- "0x00000000000000000000000000000000000000000000000000000000000030e9": "ac8fe4eb91577288510a9bdae0d5a8c40b8225172379cd70988465d8b98cfa70",
- "0x00000000000000000000000000000000000000000000000000000000000030f3": "2b0018a8548e5ce2a6b6b879f56e3236cc69d2efff80f48add54efd53681dfce",
- "0x00000000000000000000000000000000000000000000000000000000000030fd": "823445936237e14452e253a6692290c1be2e1be529ddbeecc35c9f54f7ea9887",
- "0x0000000000000000000000000000000000000000000000000000000000003107": "3051a0d0701d233836b2c802060d6ee629816c856a25a62dc73bb2f2fc93b918",
- "0x0000000000000000000000000000000000000000000000000000000000003111": "44a50fda08d2f7ca96034186475a285a8a570f42891f72d256a52849cb188c85",
- "0x000000000000000000000000000000000000000000000000000000000000311b": "6e60069a12990ef960c0ac825fd0d9eb44aec9eb419d0df0c25d7a1d16c282e7",
- "0x0000000000000000000000000000000000000000000000000000000000003125": "581ddf7753c91af00c894f8d5ab22b4733cfeb4e75c763725ebf46fb889fa76a",
- "0x000000000000000000000000000000000000000000000000000000000000312f": "9a1dfba8b68440fcc9e89b86e2e290367c5e5fb0833b34612d1f4cfc53189526",
- "0x0000000000000000000000000000000000000000000000000000000000003139": "54a623060b74d56f3c0d6793e40a9269c56f90bcd19898855113e5f9e42abc2d",
- "0x0000000000000000000000000000000000000000000000000000000000003143": "1cfeb8cd5d56e1d202b4ec2851f22e99d6ad89af8a4e001eb014b724d2d64924",
- "0x000000000000000000000000000000000000000000000000000000000000314d": "ad223cbf591f71ffd29e2f1c676428643313e3a8e8a7d0b0e623181b3047be92",
- "0x0000000000000000000000000000000000000000000000000000000000003157": "e13f31f026d42cad54958ad2941f133d8bd85ee159f364a633a79472f7843b67",
- "0x0000000000000000000000000000000000000000000000000000000000003161": "b45099ae3bbe17f4417d7d42951bd4425bce65f1db69a354a64fead61b56306d",
- "0x000000000000000000000000000000000000000000000000000000000000316b": "9d2b65379c5561a607df4dae8b36eca78818acec4455eb47cfa437a0b1941707",
- "0x0000000000000000000000000000000000000000000000000000000000003175": "5855b3546d3becda6d5dd78c6440f879340a5734a18b06340576a3ce6a48d9a0",
- "0x000000000000000000000000000000000000000000000000000000000000317f": "d6a61c76ae029bb5bca86d68422c55e8241d9fd9b616556b375c91fb7224b79e",
- "0x0000000000000000000000000000000000000000000000000000000000003189": "96ac5006561083735919ae3cc8d0762a9cba2bdefd4a73b8e69f447f689fba31",
- "0x0000000000000000000000000000000000000000000000000000000000003193": "4ced18f55676b924d39aa7bcd7170bac6ff4fbf00f6a800d1489924c2a091412",
- "0x000000000000000000000000000000000000000000000000000000000000319d": "c95a6a7efdbefa710a525085bcb57ea2bf2d4ae9ebfcee4be3777cfcc3e534ea",
- "0x00000000000000000000000000000000000000000000000000000000000031a7": "2b2917b5b755eb6af226e16781382bd22a907c9c7411c34a248af2b5a0439079",
- "0x00000000000000000000000000000000000000000000000000000000000031b1": "18d5804f2e9ad3f891ecf05e0bfc2142c2a9f7b4de03aebd1cf18067a1ec6490",
- "0x00000000000000000000000000000000000000000000000000000000000031bb": "b47682f0ce3783700cbe5ffbb95d22c943cc74af12b9c79908c5a43f10677478",
- "0x00000000000000000000000000000000000000000000000000000000000031c5": "e4b60e5cfb31d238ec412b0d0e3ad9e1eb00e029c2ded4fea89288f900f7db0e",
- "0x00000000000000000000000000000000000000000000000000000000000031cf": "fc0ea3604298899c10287bba84c02b9ec5d6289c1493e9fc8d58920e4eaef659",
- "0x00000000000000000000000000000000000000000000000000000000000031d9": "4c3301a70611b34e423cf713bda7f6f75bd2070f909681d3e54e3a9a6d202e5a",
- "0x00000000000000000000000000000000000000000000000000000000000031e3": "84a5b4e32a62bf3298d846e64b3896dffbbcc1fafb236df3a047b5223577d07b",
- "0x00000000000000000000000000000000000000000000000000000000000031ed": "ff70b97d34af8e2ae984ada7bc6f21ed294d9b392a903ad8bbb1be8b44083612",
- "0x00000000000000000000000000000000000000000000000000000000000031f7": "73e186de72ef30e4be4aeebe3eaec84222f8a325d2d07cd0bd1a49f3939915ce",
- "0x0000000000000000000000000000000000000000000000000000000000003201": "ed185ec518c0459392b274a3d10554e452577d33ecb72910f613941873e61215",
- "0x000000000000000000000000000000000000000000000000000000000000320b": "5cfbad3e509733bce64e0f6492b3886300758c47a38e9edec4b279074c7966d4",
- "0x0000000000000000000000000000000000000000000000000000000000003215": "867a7ab4c504e836dd175bd6a00e8489f36edaeda95db9ce4acbf9fb8df28926",
- "0x000000000000000000000000000000000000000000000000000000000000321f": "0d01993fd605f101c950c68b4cc2b8096ef7d0009395dec6129f86f195eb2217",
- "0x0000000000000000000000000000000000000000000000000000000000003229": "8e14fd675e72f78bca934e1ffad52b46fd26913063e7e937bce3fa11aed29075",
- "0x0000000000000000000000000000000000000000000000000000000000003233": "4ec1847e4361c22cdecc67633e244b9e6d04ec103f4019137f9ba1ecc90198f4",
- "0x000000000000000000000000000000000000000000000000000000000000323d": "ec69e9bbb0184bf0889df50ec7579fa4029651658d639af456a1f6a7543930ef",
- "0x0000000000000000000000000000000000000000000000000000000000003247": "efdd626048ad0aa6fcf806c7c2ad7b9ae138136f10a3c2001dc5b6c920db1554",
- "0x0000000000000000000000000000000000000000000000000000000000003251": "551de1e4cafd706535d77625558f8d3898173273b4353143e5e1c7e859848d6b",
- "0x000000000000000000000000000000000000000000000000000000000000325b": "137efe559a31d9c5468259102cd8634bba72b0d7a0c7d5bcfc449c5f4bdb997a",
- "0x0000000000000000000000000000000000000000000000000000000000003265": "fb0a1b66acf5f6bc2393564580d74637945891687e61535aae345dca0b0f5e78",
- "0x000000000000000000000000000000000000000000000000000000000000326f": "96eea2615f9111ee8386319943898f15c50c0120b8f3263fab029123c5fff80c",
- "0x0000000000000000000000000000000000000000000000000000000000003279": "68725bebed18cd052386fd6af9b398438c01356223c5cc15f49093b92b673eff",
- "0x0000000000000000000000000000000000000000000000000000000000003283": "e2f1e4557ed105cf3bd8bc51ebaa4446f554dcb38c005619bd9f203f4494f5dd",
- "0x000000000000000000000000000000000000000000000000000000000000328d": "48ef06d84d5ad34fe56ce62e095a34ea4a903bf597a8640868706af7b4de7288",
- "0x0000000000000000000000000000000000000000000000000000000000003297": "5c57714b2a85d0d9331ce1ee539a231b33406ec19adcf1d8f4c88ab8c1f4fbae",
- "0x00000000000000000000000000000000000000000000000000000000000032a1": "204299e7aa8dfe5328a0b863b20b6b4cea53a469d6dc8d4b31c7873848a93f33",
- "0x00000000000000000000000000000000000000000000000000000000000032ab": "b74eea6df3ce54ee9f069bebb188f4023673f8230081811ab78ce1c9719879e5",
- "0x00000000000000000000000000000000000000000000000000000000000032b5": "af5624a3927117b6f1055893330bdf07a64e96041241d3731b9315b5cd6d14d7",
- "0x00000000000000000000000000000000000000000000000000000000000032bf": "c657b0e79c166b6fdb87c67c7fe2b085f52d12c6843b7d6090e8f230d8306cda",
- "0x00000000000000000000000000000000000000000000000000000000000032c9": "a0e08ceff3f3c426ab2c30881eff2c2fc1edf04b28e1fb38e622648224ffbc6b",
- "0x00000000000000000000000000000000000000000000000000000000000032d3": "c9792da588df98731dfcbf54a6264082e791540265acc2b3ccca5cbd5c0c16de",
- "0x00000000000000000000000000000000000000000000000000000000000032dd": "c74f4bb0f324f42c06e7aeacb9446cd5ea500c3b014d5888d467610eafb69297",
- "0x00000000000000000000000000000000000000000000000000000000000032e7": "1acd960a8e1dc68da5b1db467e80301438300e720a450ab371483252529a409b",
- "0x00000000000000000000000000000000000000000000000000000000000032f1": "6cef279ba63cbac953676e889e4fe1b040994f044078196a6ec4e6d868b79aa1",
- "0x00000000000000000000000000000000000000000000000000000000000032fb": "60eb986cb497a0642b684852f009a1da143adb3128764b772daf51f6efaae90a",
- "0x0000000000000000000000000000000000000000000000000000000000003305": "c50024557485d98123c9d0e728db4fc392091f366e1639e752dd677901681acc",
- "0x000000000000000000000000000000000000000000000000000000000000330f": "b860632e22f3e4feb0fdf969b4241442eae0ccf08f345a1cc4bb62076a92d93f",
- "0x0000000000000000000000000000000000000000000000000000000000003319": "21085bf2d264529bd68f206abc87ac741a2b796919eeee6292ed043e36d23edb",
- "0x0000000000000000000000000000000000000000000000000000000000003323": "80052afb1f39f11c67be59aef7fe6551a74f6b7d155a73e3d91b3a18392120a7",
- "0x000000000000000000000000000000000000000000000000000000000000332d": "a3b0793132ed37459f24d6376ecfa8827c4b1d42afcd0a8c60f9066f230d7675",
- "0x0000000000000000000000000000000000000000000000000000000000003337": "e69d353f4bc38681b4be8cd5bbce5eb4e819399688b0b6225b95384b08dcc8b0",
- "0x0000000000000000000000000000000000000000000000000000000000003341": "221e784d42a121cd1d13d111128fcae99330408511609ca8b987cc6eecafefc4",
- "0x000000000000000000000000000000000000000000000000000000000000334b": "dcd669ebef3fb5bebc952ce1c87ae4033b13f37d99cf887022428d024f3a3d2e",
- "0x0000000000000000000000000000000000000000000000000000000000003355": "4dd1eb9319d86a31fd56007317e059808f7a76eead67aecc1f80597344975f46",
- "0x000000000000000000000000000000000000000000000000000000000000335f": "5e1834c653d853d146db4ab6d17509579497c5f4c2f9004598bcd83172f07a5f",
- "0x0000000000000000000000000000000000000000000000000000000000003369": "9f78a30e124d21168645b9196d752a63166a1cf7bbbb9342d0b8fee3363ca8de",
- "0x0000000000000000000000000000000000000000000000000000000000003373": "1f7c1081e4c48cef7d3cb5fd64b05135775f533ae4dabb934ed198c7e97e7dd8",
- "0x000000000000000000000000000000000000000000000000000000000000337d": "4d40a7ec354a68cf405cc57404d76de768ad71446e8951da553c91b06c7c2d51",
- "0x0000000000000000000000000000000000000000000000000000000000003387": "f653da50cdff4733f13f7a5e338290e883bdf04adf3f112709728063ea965d6c"
- },
- "key": "0x37d65eaa92c6bc4c13a5ec45527f0c18ea8932588728769ec7aecfe6d9f32e42"
- },
- "0x00f691ca9e1403d01344ebbaca0201380cacc99c": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7c48e400de1f24b4de94c59068fcd91a028576d13a22f900a7fcbd8f4845bcf4"
- },
- "0x0300100f529a704d19736a8714837adbc934db7f": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x97b25febb46f44607c87a3498088c605086df207c7ddcd8ee718836a516a9153"
- },
- "0x043a718774c572bd8a25adbeb1bfcd5c0256ae11": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4c310e1f5d2f2e03562c4a5c473ae044b9ee19411f07097ced41e85bd99c3364"
- },
- "0x046dc70a4eba21473beb6d9460d880b8cfd66613": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4fd7c8d583447b937576211163a542d945ac8c0a6e22d0c42ac54e2cbaff9281"
- },
- "0x04b85539570fb9501f65453dbfad410a467becdd": {
- "balance": "0",
- "nonce": 1,
- "root": "0x9e53f0a2ddb430d27f6fffa0a68b5f75db1d68e24113dcca6e33918cdae80846",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000019": "19",
- "0x000000000000000000000000000000000000000000000000000000000000001a": "1a",
- "0x000000000000000000000000000000000000000000000000000000000000001b": "1b"
- },
- "key": "0xd84f7711be2f8eca69c742153230995afb483855b7c555b08da330139cdb9579"
- },
- "0x04b8d34e20e604cadb04b9db8f6778c35f45a2d2": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe99460a483f3369006e3edeb356b3653699f246ec71f30568617ebc702058f59"
- },
- "0x04d6c0c946716aac894fc1653383543a91faab60": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x98bb9ba48fda7bb8091271ab0e53d7e0022fb1f1fa8fa00814e193c7d4b91eb3"
- },
- "0x050c9c302e904c7786b69caa9dd5b27a6e571b72": {
- "balance": "0",
- "nonce": 1,
- "root": "0x818eaf5adb56c6728889ba66b6980cd66b41199f0007cdd905ae739405e3c630",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000077": "77",
- "0x0000000000000000000000000000000000000000000000000000000000000078": "78",
- "0x0000000000000000000000000000000000000000000000000000000000000079": "79"
- },
- "key": "0xc3ac56e9e7f2f2c2c089e966d1b83414951586c3afeb86300531dfa350e38929"
- },
- "0x06f647b157b8557a12979ba04cf5ba222b9747cf": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xaf38e0e6a4a4005507b5d3e9470e8ccc0273b74b6971f768cbdf85abeab8a95b"
- },
- "0x075198bfe61765d35f990debe90959d438a943ce": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x1d38ada74301c31f3fd7d92dd5ce52dc37ae633e82ac29c4ef18dfc141298e26"
- },
- "0x075db7ab5778cd5491d3ed7ab64c1ec0818148f3": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xf84223f460140ad56af9836cfa6c1c58c1397abf599c214689bc881066020ff7"
- },
- "0x08037e79bb41c0f1eda6751f0dabb5293ca2d5bf": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xcd07379b0120ad9a9c7fa47e77190be321ab107670f3115fec485bebb467307d"
- },
- "0x087d80f7f182dd44f184aa86ca34488853ebcc04": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x867bc89cf8d5b39f1712fbc77414bbd93012af454c226dcee0fb34ccc0017498"
- },
- "0x08d3b23dbfe8ef7965a8b5e4d9c21feddbc11491": {
- "balance": "0",
- "nonce": 1,
- "root": "0x9a4a33f978d84e0aceb3ac3670c2e2df6c8ae27c189a96ed00b806d10ed7b4ee",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001c6": "01c6",
- "0x00000000000000000000000000000000000000000000000000000000000001c7": "01c7",
- "0x00000000000000000000000000000000000000000000000000000000000001c8": "01c8"
- },
- "key": "0x792cc9f20a61c16646d5b6136693e7789549adb7d8e35503d0004130ea6528b0"
- },
- "0x09b9c1875399cd724b1017f155a193713cb23732": {
- "balance": "0",
- "nonce": 1,
- "root": "0x47fa48e25d3669a9bb190c59938f4be49de2d083696eb939c3b4072ec67e43b1",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000005e": "5e",
- "0x000000000000000000000000000000000000000000000000000000000000005f": "5f",
- "0x0000000000000000000000000000000000000000000000000000000000000060": "60"
- },
- "key": "0x23ddaac09188c12e5d88009afa4a34041175c5531f45be53f1560a1cbfec4e8a"
- },
- "0x0a3aaee7ccfb1a64f6d7bcd46657c27cb1f4569a": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xc7fc033fe9f00d24cb9c479ddc0598e592737c305263d088001d7419d16feffa"
- },
- "0x0badc617ca1bcb1cb1d5272f64b168cbf0e8f86f": {
- "balance": "0",
- "nonce": 1,
- "root": "0xca39f5f4ee3c6b33efe7bc485439f97f9dc62f65852c7a1cdf54fab1e3b70429",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000002d": "2d",
- "0x000000000000000000000000000000000000000000000000000000000000002e": "2e",
- "0x000000000000000000000000000000000000000000000000000000000000002f": "2f"
- },
- "key": "0xc250f30c01f4b7910c2eb8cdcd697cf493f6417bb2ed61d637d625a85a400912"
- },
- "0x0c2c51a0990aee1d73c1228de158688341557508": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x28f25652ec67d8df6a2e33730e5d0983443e3f759792a0128c06756e8eb6c37f"
- },
- "0x0d336bc3778662a1252d29a6f7216055f7a582bf": {
- "balance": "0",
- "nonce": 1,
- "root": "0xa5a91cf9e815fb55df14b3ee8c1325a988cb3b6dd34796c901385c3cc2992073",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000013f": "013f",
- "0x0000000000000000000000000000000000000000000000000000000000000140": "0140",
- "0x0000000000000000000000000000000000000000000000000000000000000141": "0141"
- },
- "key": "0x86a73e3c668eb065ecac3402c6dc912e8eb886788ea147c770f119dcd30780c6"
- },
- "0x0e4aea2bbb2ae557728f2661ee3639360f1d787a": {
- "balance": "0",
- "nonce": 1,
- "root": "0x74ed78eb16016d7ff3a173ab1bbcee9daa8e358a9d6c9be5e84ba6f4a34cf96a",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000d1": "d1",
- "0x00000000000000000000000000000000000000000000000000000000000000d2": "d2",
- "0x00000000000000000000000000000000000000000000000000000000000000d3": "d3"
- },
- "key": "0x517bd5fbe28e4368b0b9fcba13d5e81fb51babdf4ed63bd83885235ee67a8fa0"
- },
- "0x0ef32dec5f88a96c2eb042126e8ab982406e0267": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x181abdd5e212171007e085fdc284a84d42d5bfc160960d881ccb6a10005ff089"
- },
- "0x0ef96a52f4510f82b049ba991c401a8f5eb823e5": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x59312f89c13e9e24c1cb8b103aa39a9b2800348d97a92c2c9e2a78fa02b70025"
- },
- "0x0f228c3ba41142e702ee7306859026c99d3d2df5": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xedd9b1f966f1dfe50234523b479a45e95a1a8ec4a057ba5bfa7b69a13768197c"
- },
- "0x0fdcca8fde6d69ecbc9bfadb056ecf62d1966370": {
- "balance": "0",
- "nonce": 1,
- "root": "0x493f90435402df0907019bffc6dd25a17ce4acd6eb6077ef94c1626f0d77c9f0",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000f9": "f9",
- "0x00000000000000000000000000000000000000000000000000000000000000fa": "fa",
- "0x00000000000000000000000000000000000000000000000000000000000000fb": "fb"
- },
- "key": "0xfb5a31c5cfd33dce2c80a30c5efc28e5f4025624adcc2205a2504a78c57bdd1c"
- },
- "0x0fe037febcc3adf9185b4e2ad4ea43c125f05049": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb7d9d175039df1ba52c734547844f8805252893c029f7dbba9a63f8bce3ee306"
- },
- "0x0fed138ec52bab88db6c068df9125936c7c3e11b": {
- "balance": "0",
- "nonce": 1,
- "root": "0x66eb16071ba379bf0c632fcb52f9175a656bef62adf0bef5349a7f5a6aad5d88",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000176": "0176",
- "0x0000000000000000000000000000000000000000000000000000000000000177": "0177",
- "0x0000000000000000000000000000000000000000000000000000000000000178": "0178"
- },
- "key": "0x255ec86eac03ba59f6dfcaa02128adbb22c561ae0c49e9e62e4fff363750626e"
- },
- "0x102efa1f2e0ad16ada57759b815245b8f8d27ce4": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x9d42947ac5e61285567f65d4b400d90343dbd3192534c4c1f9d941c04f48f17c"
- },
- "0x1037044fabf0421617c47c74681d7cc9c59f136c": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x2290ea88cc63f09ab5e8c989a67e2e06613311801e39c84aae3badd8bb38409c"
- },
- "0x1042d41ee3def49e70df4e6c2be307b8015111e5": {
- "balance": "0",
- "nonce": 1,
- "root": "0xdf3c1bfab8f7e70a8edf94792f91e4b6b2c2aa61caf687e4f6cb689d180adb80",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000095": "95",
- "0x0000000000000000000000000000000000000000000000000000000000000096": "96",
- "0x0000000000000000000000000000000000000000000000000000000000000097": "97"
- },
- "key": "0xc0ce77c6a355e57b89cca643e70450612c0744c9f0f8bf7dee51d6633dc850b1"
- },
- "0x104eb07eb9517a895828ab01a3595d3b94c766d5": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xfab4c6889992a3f4e96b005dfd851021e9e1ec2631a7ccd2a001433e35077968"
- },
- "0x1219c38638722b91f3a909f930d3acc16e309804": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xd63070208c85e91c4c8c942cf52c416f0f3004c392a15f579350168f178dba2e"
- },
- "0x132432ce1ce64304f1d145eba1772f6edd6cdd17": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x729953a43ed6c913df957172680a17e5735143ad767bda8f58ac84ec62fbec5e"
- },
- "0x13dd437fc2ed1cd5d943ac1dd163524c815d305c": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x99e56541f21039c9b7c63655333841a3415de0d27b79d18ade9ec7ecde7a1139"
- },
- "0x14e46043e63d0e3cdcf2530519f4cfaf35058cb2": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x9feaf0bd45df0fbf327c964c243b2fbc2f0a3cb48fedfeea1ae87ac1e66bc02f"
- },
- "0x1534b43c6dfa3695446aaf2aa07d123132cceceb": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x2a248c1755e977920284c8054fceeb20530dc07cd8bbe876f3ce02000818cc3a"
- },
- "0x15af6900147a8730b5ce3e1db6333f33f64ebb2c": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x5264e880ecf7b80afda6cc2a151bac470601ff8e376af91aaf913a36a30c4009"
- },
- "0x16032a66fc011dab75416d2449fe1a3d5f4319d8": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe3c79e424fd3a7e5bf8e0426383abd518604272fda87ecd94e1633d36f55bbb6"
- },
- "0x16c57edf7fa9d9525378b0b81bf8a3ced0620c1c": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xda81833ff053aff243d305449775c3fb1bd7f62c4a3c95dc9fb91b85e032faee"
- },
- "0x17333b15b4a5afd16cac55a104b554fc63cc8731": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4ceaf2371fcfb54a4d8bc1c804d90b06b3c32c9f17112b57c29b30a25cf8ca12"
- },
- "0x17b917f9d79d922b33e41582984712e32b3ad366": {
- "balance": "0",
- "nonce": 1,
- "root": "0x944f095afbd1383e5d0f91ef02895d398f4f76fdb6d86adf4765f25bdc304f5f",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000081": "81",
- "0x0000000000000000000000000000000000000000000000000000000000000082": "82",
- "0x0000000000000000000000000000000000000000000000000000000000000083": "83"
- },
- "key": "0x13cfc46f6bdb7a1c30448d41880d061c3b8d36c55a29f1c0c8d95a8e882b8c25"
- },
- "0x18291b5f568e45ef0f16709b20c810e08750791f": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x315ccc15883d06b4e743f8252c999bf1ee994583ff6114d89c0f3ddee828302b"
- },
- "0x189f40034be7a199f1fa9891668ee3ab6049f82d": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x6225e8f52719d564e8217b5f5260b1d1aac2bcb959e54bc60c5f479116c321b8"
- },
- "0x18ac3e7343f016890c510e93f935261169d9e3f5": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xeba984db32038d7f4d71859a9a2fc6e19dde2e23f34b7cedf0c4bf228c319f17"
- },
- "0x19041ad672875015bc4041c24b581eafc0869aab": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xfc8d513d1615c763865b984ea9c381032c14a983f80e5b2bd90b20b518329ed7"
- },
- "0x19129f84d987b13468846f822882dba0c50ca07d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x2b8d12301a8af18405b3c826b6edcc60e8e034810f00716ca48bebb84c4ce7ab"
- },
- "0x194e49be24c1a94159f127aa9257ded12a0027db": {
- "balance": "0",
- "nonce": 1,
- "root": "0xe0a3d3b839fca0f54745d0c50a048e424c9259f063b7416410a4422eeb7f837e",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000180": "0180",
- "0x0000000000000000000000000000000000000000000000000000000000000181": "0181",
- "0x0000000000000000000000000000000000000000000000000000000000000182": "0182"
- },
- "key": "0xd57eafe6d4c5b91fe7114e199318ab640e55d67a1e9e3c7833253808b7dca75f"
- },
- "0x19581e27de7ced00ff1ce50b2047e7a567c76b1c": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7bac5af423cb5e417fa6c103c7cb9777e80660ce3735ca830c238b0d41610186"
- },
- "0x196d4a4c50eb47562596429fdecb4e3ac6b2a5fd": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4e258aa445a0e2a8704cbc57bbe32b859a502cd6f99190162236300fabd86c4a"
- },
- "0x1a0eae9b9214d9269a4cff4982c45a67f4ca63aa": {
- "balance": "0",
- "nonce": 1,
- "root": "0x5622801b1011de8403e44308bbf89a5809b7ad6586268cd72164523587f9b0e4",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000007c": "7c",
- "0x000000000000000000000000000000000000000000000000000000000000007d": "7d",
- "0x000000000000000000000000000000000000000000000000000000000000007e": "7e"
- },
- "key": "0x6a2c8498657ae4f0f7b1a02492c554f7f8a077e454550727890188f7423ba014"
- },
- "0x1ae59138ad95812304b117ee7b0d502bcb885af5": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xf164775805f47d8970d3282188009d4d7a2da1574fe97e5d7bc9836a2eed1d5b"
- },
- "0x1b16b1df538ba12dc3f97edbb85caa7050d46c14": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x8ee17a1ec4bae15d8650323b996c55d5fa11a14ceec17ff1d77d725183904914"
- },
- "0x1c123d5c0d6c5a22ef480dce944631369fc6ce28": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xa9fd2e3a6de5a9da5badd719bd6e048acefa6d29399d8a99e19fd9626805b60b"
- },
- "0x1c972398125398a3665f212930758ae9518a8c94": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x5d97d758e8800d37b6d452a1b1812d0afedba11f3411a17a8d51ee13a38d73f0"
- },
- "0x1e345d32d0864f75b16bde837543aa44fac35935": {
- "balance": "0",
- "nonce": 1,
- "root": "0xd91acf305934a60c960a93fb00f927ec79308b8a919d2449faede722c2324cb3",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000153": "0153",
- "0x0000000000000000000000000000000000000000000000000000000000000154": "0154",
- "0x0000000000000000000000000000000000000000000000000000000000000155": "0155"
- },
- "key": "0x961508ac3c93b30ee9a5a34a862c9fe1659e570546ac6c2e35da20f6d2bb5393"
- },
- "0x1e8ce8258fb47f55bf2c1473acb89a10074b9d0e": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xfb2ab315988de92dcf6ba848e756676265b56e4b84778a2c955fb2b3c848c51c"
- },
- "0x1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7963685967117ffb6fd019663dc9e782ebb1234a38501bffc2eb5380f8dc303b"
- },
- "0x1f5746736c7741ae3e8fa0c6e947cade81559a86": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4e5bab4ebd077c3bbd8239995455989ea2e95427ddeed47d0618d9773332bb05"
- },
- "0x1f5bde34b4afc686f136c7a3cb6ec376f7357759": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xc3791fc487a84f3731eb5a8129a7e26f357089971657813b48a821f5582514b3"
- },
- "0x2143e52a9d8ad4c55c8fdda755f4889e3e3e7721": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xd9fa858992bc92386a7cebcd748eedd602bf432cb4b31607566bc92b85179624"
- },
- "0x2144780b7d04d82239c6570f84ab66376b63dfc9": {
- "balance": "0",
- "nonce": 1,
- "root": "0x59936c15c454933ebc4989afa77e350f7640301b07341aead5f1b2668eeb1dad",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000db": "db",
- "0x00000000000000000000000000000000000000000000000000000000000000dc": "dc",
- "0x00000000000000000000000000000000000000000000000000000000000000dd": "dd"
- },
- "key": "0xd37b6f5e5f0fa6a1b3fd15c9b3cf0fb595ba245ab912ad8059e672fa55f061b8"
- },
- "0x22694f8f2d0c62f63a25bd0057a80b89084c3b47": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x2369a492b6cddcc0218617a060b40df0e7dda26abe48ba4e4108c532d3f2b84f"
- },
- "0x22b3f17adeb5f2ec22135d275fcc6e29f4989401": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xa3abdaefbb886078dc6c5c72e4bc8d12e117dbbd588236c3fa7e0c69420eb24a"
- },
- "0x23262ad5ae496588bd793910b55ccf178fbd73f9": {
- "balance": "0",
- "nonce": 1,
- "root": "0x3437803101a8040aca273fb734d7965a87f823ff1ef78c7edcaad358eb98dee3",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000171": "0171",
- "0x0000000000000000000000000000000000000000000000000000000000000172": "0172",
- "0x0000000000000000000000000000000000000000000000000000000000000173": "0173"
- },
- "key": "0xd8489fd0ce5e1806b24d1a7ce0e4ba8f0856b87696456539fcbb625a9bed2ccc"
- },
- "0x23b17315554bd2928c1f86dd526f7ee065a9607d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x12e394ad62e51261b4b95c431496e46a39055d7ada7dbf243f938b6d79054630"
- },
- "0x23c86a8aded0ad81f8111bb07e6ec0ffb00ce5bf": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xd72e318c1cea7baf503950c9b1bd67cf7caf2f663061fcde48d379047a38d075"
- },
- "0x23e6931c964e77b02506b08ebf115bad0e1eca66": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x174f1a19ff1d9ef72d0988653f31074cb59e2cf37cd9d2992c7b0dd3d77d84f9"
- },
- "0x24255ef5d941493b9978f3aabb0ed07d084ade19": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7583557e4e3918c95965fb610dc1424976c0eee606151b6dfc13640e69e5cb15"
- },
- "0x245843abef9e72e7efac30138a994bf6301e7e1d": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xfe6e594c507ec0ac14917f7a8032f83cd0c3c58b461d459b822190290852c0e1"
- },
- "0x25261a7e8395b6e798e9b411c962fccc0fb31e38": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x1017b10a7cc3732d729fe1f71ced25e5b7bc73dc62ca61309a8c7e5ac0af2f72"
- },
- "0x2553ec67bc75f75d7de13db86b14290f0f76e342": {
- "balance": "0",
- "nonce": 1,
- "root": "0x8078f3259d8199b7ca39d51e35d5b58d71ff148606731060386d323c5d19182c",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000185": "0185",
- "0x0000000000000000000000000000000000000000000000000000000000000186": "0186",
- "0x0000000000000000000000000000000000000000000000000000000000000187": "0187"
- },
- "key": "0x0f30822f90f33f1d1ba6d1521a00935630d2c81ab12fa03d4a0f4915033134f3"
- },
- "0x2604439a795970de2047e339293a450c0565f625": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x8678559b30b321b0f0420a4a3e8cecfde90c6e56766b78c1723062c93c1f041f"
- },
- "0x26704bf05b1da795939788ef05c8804dcf4b9009": {
- "balance": "0",
- "nonce": 1,
- "root": "0xd60ee4ad5abbe759622fca5c536109b11e85aa2b48c0be2aebf01df597e74dba",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000015d": "015d",
- "0x000000000000000000000000000000000000000000000000000000000000015e": "015e",
- "0x000000000000000000000000000000000000000000000000000000000000015f": "015f"
- },
- "key": "0xd1691564c6a5ab1391f0495634e749b9782de33756b6a058f4a9536c1b37bca6"
- },
- "0x2727d12b98783b2c3641b5672bcfcdf007971d28": {
- "balance": "0",
- "nonce": 1,
- "root": "0x59739ba3b156eb78f8bbb14bbf3dacdebfde95140f586db66f72e3117b94bb67",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000112": "0112",
- "0x0000000000000000000000000000000000000000000000000000000000000113": "0113",
- "0x0000000000000000000000000000000000000000000000000000000000000114": "0114"
- },
- "key": "0x88bf4121c2d189670cb4d0a16e68bdf06246034fd0a59d0d46fb5cec0209831e"
- },
- "0x2795044ce0f83f718bc79c5f2add1e52521978df": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xee9186a01e5e1122b61223b0e6acc6a069c9dcdb7307b0a296421272275f821b"
- },
- "0x27952171c7fcdf0ddc765ab4f4e1c537cb29e5e5": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x0a93a7231976ad485379a3b66c2d8983ba0b2ca87abaf0ca44836b2a06a2b102"
- },
- "0x27abdeddfe8503496adeb623466caa47da5f63ab": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x482814ea8f103c39dcf6ba7e75df37145bde813964d82e81e5d7e3747b95303d"
- },
- "0x281c93990bac2c69cf372c9a3b66c406c86cca82": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x81c0c51e15c9679ef12d02729c09db84220ba007efe7ced37a57132f6f0e83c9"
- },
- "0x2847213288f0988543a76512fab09684131809d9": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe1b86a365b0f1583a07fc014602efc3f7dedfa90c66e738e9850719d34ac194e"
- },
- "0x28969cdfa74a12c82f3bad960b0b000aca2ac329": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x96d7104053877823b058fd9248e0bba2a540328e52ffad9bb18805e89ff579dc"
- },
- "0x2a0ab732b4e9d85ef7dc25303b64ab527c25a4d7": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x5e88e876a3af177e6daafe173b67f186a53f1771a663747f26b278c5acb4c219"
- },
- "0x2aac4746638ae1457010747a5b0fd2380a388f4f": {
- "balance": "0",
- "nonce": 1,
- "root": "0x5a82aff126ffebff76002b1e4de03c40ba494b81cb3fbc528f23e4be35a9afe6",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000004b": "4b",
- "0x000000000000000000000000000000000000000000000000000000000000004c": "4c",
- "0x000000000000000000000000000000000000000000000000000000000000004d": "4d"
- },
- "key": "0x96c43ef9dce3410b78df97be69e7ccef8ed40d6e5bfe6582ea4cd7d577aa4569"
- },
- "0x2bb3295506aa5a21b58f1fd40f3b0f16d6d06bbc": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x303f57a0355c50bf1a0e1cf0fa8f9bdbc8d443b70f2ad93ac1c6b9c1d1fe29a2"
- },
- "0x2c0cd3c60f41d56ed7664dbce39630395614bf4b": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x92d0f0954f4ec68bd32163a2bd7bc69f933c7cdbfc6f3d2457e065f841666b1c"
- },
- "0x2c1287779024c3a2f0924b54816d79b7e378907d": {
- "balance": "0",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x09d6e6745d272389182a510994e2b54d14b731fac96b9c9ef434bc1924315371"
- },
- "0x2c582db705c5721bb3ba59f4ec8e44fb4ef6b920": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe02ec497b66cb57679eb01de1bed2ad385a3d18130441a9d337bd14897e85d39"
- },
- "0x2d389075be5be9f2246ad654ce152cf05990b209": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xa9233a729f0468c9c309c48b82934c99ba1fd18447947b3bc0621adb7a5fc643"
- },
- "0x2d711642b726b04401627ca9fbac32f5c8530fb1": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xfe2149c5c256a5eb2578c013d33e3af6a87a514965c7ddf4a8131e2d978f09f9"
- },
- "0x2e350f8e7f890a9301f33edbf55f38e67e02d72b": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xf33a7b66489679fa665dbfb4e6dd4b673495f853850eedc81d5f28bd2f4bd3b5"
- },
- "0x2e5f413fd8d378ed081a76e1468dad8cbf6e9ed5": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe69f40f00148bf0d4dfa28b3f3f5a0297790555eca01a00e49517c6645096a6c"
- },
- "0x2eb6db4e06119ab31a3acf4f406ccbaa85e39c66": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xaeaf19d38b69be4fb41cc89e4888708daa6b9b1c3f519fa28fe9a0da70cd8697"
- },
- "0x2f01c1c8c735a9a1b89898d3f14bbf61c91bf0fd": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xd2f394b4549b085fb9b9a8b313a874ea660808a4323ab2598ee15ddd1eb7e897"
- },
- "0x2fb64110da9389ce8567938a78f21b79222332f9": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x415ded122ff7b6fe5862f5c443ea0375e372862b9001c5fe527d276a3a420280"
- },
- "0x2fc7b26c1fd501c57e57db3e876dc6ae7af6979b": {
- "balance": "0",
- "nonce": 1,
- "root": "0x3d20fedd270b3771706fe00a580a155439be57e8d550762def10906e83ed58bb",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000009f": "9f",
- "0x00000000000000000000000000000000000000000000000000000000000000a0": "a0",
- "0x00000000000000000000000000000000000000000000000000000000000000a1": "a1"
- },
- "key": "0xb9cddc73dfdacd009e55f27bdfd1cd37eef022ded5ce686ab0ffe890e6bf311e"
- },
- "0x30a5bfa58e128af9e5a4955725d8ad26d4d574a5": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe1eb1e18ae510d0066d60db5c2752e8c33604d4da24c38d2bda07c0cb6ad19e4"
- },
- "0x30c72b4fb390ff1d387821e210f3ab04fbe86d13": {
- "balance": "0",
- "nonce": 1,
- "root": "0xdf97f94bc47471870606f626fb7a0b42eed2d45fcc84dc1200ce62f7831da990",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000d6": "d6",
- "0x00000000000000000000000000000000000000000000000000000000000000d7": "d7",
- "0x00000000000000000000000000000000000000000000000000000000000000d8": "d8"
- },
- "key": "0x005e94bf632e80cde11add7d3447cd4ca93a5f2205d9874261484ae180718bd6"
- },
- "0x311df588ca5f412f970891e4cc3ac23648968ca2": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x974a4800ec4c0e998f581c6ee8c3972530989e97a179c6b2d40b8710c036e7b1"
- },
- "0x312e8fca5ac7dfc591031831bff6fede6ecf12a8": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x64bfba8a4688bdee41c4b998e101567b8b56fea53d30ab85393f2d5b70c5da90"
- },
- "0x32c417b98c3d9bdd37550c0070310526347b4648": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x80cd4a7b601d4ba0cb09e527a246c2b5dd25b6dbf862ac4e87c6b189bfce82d7"
- },
- "0x33afd8244c9c1a37f5bddb3254cd08779a196458": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x210ce6d692a21d75de3764b6c0356c63a51550ebec2c01f56c154c24b1cf8888"
- },
- "0x33fc6e8ad066231eb5527d1a39214c1eb390985d": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x87e33f70e1dd3c6ff68e3b71757d697fbeb20daae7a3cc8a7b1b3aa894592c50"
- },
- "0x360671abc40afd33ae0091e87e589fc320bf9e3d": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x12c1bb3dddf0f06f62d70ed5b7f7db7d89b591b3f23a838062631c4809c37196"
- },
- "0x3632d1763078069ca77b90e27061147a3b17ddc3": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x0463e52cda557221b0b66bd7285b043071df4c2ab146260f4e010970f3a0cccf"
- },
- "0x368b766f1e4d7bf437d2a709577a5210a99002b6": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4845aac9f26fcd628b39b83d1ccb5c554450b9666b66f83aa93a1523f4db0ab6"
- },
- "0x36a9e7f1c95b82ffb99743e0c5c4ce95d83c9a43": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xcac96145454c46255fccca35343d9505164dabe319c17d81fda93cf1171e4c6e"
- },
- "0x38d0bd409abe8d78f9f0e0a03671e44e81c41c27": {
- "balance": "0",
- "nonce": 1,
- "root": "0x23a888c0a464ce461651fc1be2cfa0cb6ba4d1b125abe5b447eeadf9c5adf1f1",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000167": "0167",
- "0x0000000000000000000000000000000000000000000000000000000000000168": "0168",
- "0x0000000000000000000000000000000000000000000000000000000000000169": "0169"
- },
- "key": "0xb58e67c536550fdf7140c8333ca62128df469a7270b16d528bc778909e0ac9a5"
- },
- "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x878040f46b1b4a065e6b82abd35421eb69eededc0c9598b82e3587ae47c8a651"
- },
- "0x3bcc2d6d48ffeade5ac5af3ee7acd7875082e50a": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb5bca5e9ccef948c2431372315acc3b96e098d0e962b0c99d634a0475b670dc3"
- },
- "0x3c204ccddfebae334988367b5cf372387dc49ebd": {
- "balance": "0",
- "nonce": 1,
- "root": "0xc7bf2b34294065afb9a2c15f906cba1f7a1a9f0da34ea9c46603b52cae9028ec",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000194": "0194",
- "0x0000000000000000000000000000000000000000000000000000000000000195": "0195",
- "0x0000000000000000000000000000000000000000000000000000000000000196": "0196"
- },
- "key": "0x5ec55391e89ac4c3cf9e61801cd13609e8757ab6ed08687237b789f666ea781b"
- },
- "0x3c2572436de9a5f3c450071e391c8a9410ba517d": {
- "balance": "0",
- "nonce": 1,
- "root": "0xbfba1bc2ac42655f5a97450be62b9430822232f1ce4998eaf5239b0c243b2b84",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000090": "90",
- "0x0000000000000000000000000000000000000000000000000000000000000091": "91",
- "0x0000000000000000000000000000000000000000000000000000000000000092": "92"
- },
- "key": "0x606059a65065e5f41347f38754e6ddb99b2d709fbff259343d399a4f9832b48f"
- },
- "0x3c5c4713708c72b519144ba8e595a8865505000d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x52d6d2913ae44bca11b5a116021db97c91a13e385ed48ba06628e74201231dba",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001c1": "01c1",
- "0x00000000000000000000000000000000000000000000000000000000000001c2": "01c2",
- "0x00000000000000000000000000000000000000000000000000000000000001c3": "01c3"
- },
- "key": "0x37ddfcbcb4b2498578f90e0fcfef9965dcde4d4dfabe2f2836d2257faa169947"
- },
- "0x3cf2e7052ebd484a8d6fbca579ddb3cf920de9d3": {
- "balance": "0",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xa95c88d7dc0f2373287c3b2407ba8e7419063833c424b06d8bb3b29181bb632e"
- },
- "0x3ee253436fc50e5a136ee01489a318afe2bbd572": {
- "balance": "0",
- "nonce": 1,
- "root": "0xc57604a461c94ecdac12dbb706a52b32913d72253baffb8906e742724ae12449",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001b2": "01b2",
- "0x00000000000000000000000000000000000000000000000000000000000001b3": "01b3",
- "0x00000000000000000000000000000000000000000000000000000000000001b4": "01b4"
- },
- "key": "0xaf7c37d08a73483eff9ef5054477fb5d836a184aa07c3edb4409b9eb22dd56ca"
- },
- "0x3f31becc97226d3c17bf574dd86f39735fe0f0c1": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb40cc623b26a22203675787ca05b3be2c2af34b6b565bab95d43e7057e458684"
- },
- "0x3f79bb7b435b05321651daefd374cdc681dc06fa": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x8c7bfaa19ea367dec5272872114c46802724a27d9b67ea3eed85431df664664e"
- },
- "0x3fba9ae304c21d19f50c23db133073f4f9665fc1": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x0b564e4a0203cbcec8301709a7449e2e7371910778df64c89f48507390f2d129"
- },
- "0x402f57de890877def439a753fcc0c37ac7808ef5": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x5c20f6ee05edbb60beeab752d87412b2f6e12c8feefa2079e6bd989f814ed4da"
- },
- "0x40b7ab67fb92dbcb4ff4e39e1155cad2fa066523": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xd352b05571154d9a2061143fe6df190a740a2d321c59eb94a54acb7f3054e489"
- },
- "0x414a21e525a759e3ffeb22556be6348a92d5a13e": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x15293aec87177f6c88f58bc51274ba75f1331f5cb94f0c973b1deab8b3524dfe"
- },
- "0x417fe11f58b6a2d089826b60722fbed1d2db96dd": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xd5e252ab2fba10107258010f154445cf7dffc42b7d8c5476de9a7adb533d73f1"
- },
- "0x41b45640640c98c953feef23468e0d275515f82f": {
- "balance": "0",
- "nonce": 1,
- "root": "0x82b326641825378faa11c641c916f2e22c01080f487de0463e30d5e32b960f97",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000013a": "013a",
- "0x000000000000000000000000000000000000000000000000000000000000013b": "013b",
- "0x000000000000000000000000000000000000000000000000000000000000013c": "013c"
- },
- "key": "0xc2406cbd93e511ef493ac81ebe2b6a3fbecd05a3ba52d82a23a88eeb9d8604f0"
- },
- "0x426fcdc383c8becb38926ec0569ec4a810105fab": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x6bd9fb206b22c76b4f9630248940855b842c684db89adff0eb9371846ea625a9"
- },
- "0x4340ee1b812acb40a1eb561c019c327b243b92df": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xa13bfef92e05edee891599aa5e447ff2baa1708d9a6473a04ef66ab94f2a11e4"
- },
- "0x44bd7ae60f478fae1061e11a7739f4b94d1daf91": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb66092bc3624d84ff94ee42b097e846baf6142197d2c31245734d56a275c8eb9"
- },
- "0x452705f08c621987b14d5f729ca81829041f6373": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xac7183ebb421005a660509b070d3d47fc4e134cb7379c31dc35dc03ebd02e1cf"
- },
- "0x45dcb3e20af2d8ba583d774404ee8fedcd97672b": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x465311df0bf146d43750ed7d11b0451b5f6d5bfc69b8a216ef2f1c79c93cd848"
- },
- "0x45f83d17e10b34fca01eb8f4454dac34a777d940": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x6dc09fdec00aa9a30dd8db984406a33e3ca15e35222a74773071207a5e56d2c2"
- },
- "0x469542b3ece7ae501372a11c673d7627294a85ca": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x6dbe5551f50400859d14228606bf221beff07238bfa3866454304abb572f9512"
- },
- "0x469dacecdef1d68cb354c4a5c015df7cb6d655bf": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x8b76305d3f00d33f77bd41496b4144fd3d113a2ec032983bd5830a8b73f61cf0"
- },
- "0x46b61db0aac95a332cecadad86e52531e578cf1f": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x5677600b2af87d21fdab2ac8ed39bd1be2f790c04600de0400c1989040d9879c"
- },
- "0x478508483cbb05defd7dcdac355dadf06282a6f2": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x5fc13d7452287b5a8e3c3be9e4f9057b5c2dd82aeaff4ed892c96fc944ec31e7"
- },
- "0x47ce7195b6d53aaa737ff17d57db20d0d4874ef1": {
- "balance": "0",
- "nonce": 1,
- "root": "0x3d0e2ba537f35941068709450f25fee45aaf4dc6ae2ed22ad12e0743ac7c54a7",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000108": "0108",
- "0x0000000000000000000000000000000000000000000000000000000000000109": "0109",
- "0x000000000000000000000000000000000000000000000000000000000000010a": "010a"
- },
- "key": "0x0579e46a5ed8a88504ac7d579b12eb346fbe4fd7e281bdd226b891f8abed4789"
- },
- "0x47dc540c94ceb704a23875c11273e16bb0b8a87a": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x025f478d53bf78add6fa3708d9e061d59bfe14b21329b2a4cf1156d4f81b3d2d"
- },
- "0x47e642c9a2f80499964cfda089e0b1f52ed0f57d": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x05f6de281d8c2b5d98e8e01cd529bd76416b248caf11e0552047c5f1d516aab6"
- },
- "0x4816ce9dd68c07ab1e12b5ddc4dbef38792751c5": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x93843d6fa1fe5709a3035573f61cc06832f0377544d16d3a0725e78a0fa0267c"
- },
- "0x48701721ec0115f04bc7404058f6c0f386946e09": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x12be3bf1f9b1dab5f908ca964115bee3bcff5371f84ede45bc60591b21117c51"
- },
- "0x494d799e953876ac6022c3f7da5e0f3c04b549be": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x04d9aa4f67f8b24d70a0ffd757e82456d9184113106b7d9e8eb6c3e8a8df27ee"
- },
- "0x4a0f1452281bcec5bd90c3dce6162a5995bfe9df": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x5c1d92594d6377fe6423257781b382f94dffcde4fadbf571aa328f6eb18f8fcd"
- },
- "0x4a64a107f0cb32536e5bce6c98c393db21cca7f4": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xf16522fc36907ee1e9948240b0c1d1d105a75cc63b71006f16c20d79ad469bd7"
- },
- "0x4ae81572f06e1b88fd5ced7a1a000945432e83e1": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x2116ab29b4cb8547af547fe472b7ce30713f234ed49cb1801ea6d3cf9c796d57"
- },
- "0x4b227777d4dd1fc61c6f884f48641d02b4d121d3": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x246cc8a2b79a30ec71390d829d0cb37cce1b953e89cb14deae4945526714a71c"
- },
- "0x4ba91e785d2361ddb198bcd71d6038305021a9b8": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x99ce1680f73f2adfa8e6bed135baa3360e3d17f185521918f9341fc236526321"
- },
- "0x4bfa260a661d68110a7a0a45264d2d43af9727de": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x6f358b4e903d31fdd5c05cddaa174296bb30b6b2f72f1ff6410e6c1069198989"
- },
- "0x4dde844b71bcdf95512fb4dc94e84fb67b512ed8": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x5602444769b5fd1ddfca48e3c38f2ecad326fe2433f22b90f6566a38496bd426"
- },
- "0x4f362f9093bb8e7012f466224ff1237c0746d8c8": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xcb6f450b4720c6b36d3a12271e35ace27f1d527d46b073771541ad39cc59398d"
- },
- "0x4f3e7da249f34e3cc8b261a7dc5b2d8e1cd85b78": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4d79fea6c7fef10cb0b5a8b3d85b66836a131bec0b04d891864e6fdb9794af75"
- },
- "0x4fb733bedb74fec8d65bedf056b935189a289e92": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xa02abeb418f26179beafd96457bda8c690c6b1f3fbabac392d0920863edddbc6"
- },
- "0x4fffb6fbd0372228cb5e4d1f033a29f30cb668c8": {
- "balance": "0",
- "nonce": 1,
- "root": "0xcd3e75299e967d5f88d306be905a134343b224d3fd5a861b1a690de0e2dfe1ba",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000b3": "b3",
- "0x00000000000000000000000000000000000000000000000000000000000000b4": "b4",
- "0x00000000000000000000000000000000000000000000000000000000000000b5": "b5"
- },
- "key": "0xf19ee923ed66b7b9264c2644aa20e5268a251b4914ca81b1dffee96ecb074cb1"
- },
- "0x50996999ff63a9a1a07da880af8f8c745a7fe72c": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x0e57ffa6cc6cbd96c1400150417dd9b30d958c58f63c36230a90a02b076f78b5"
- },
- "0x5123198d8a827fe0c788c409e7d2068afde64339": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xa15773c9bfabef49e9825460ed95bf67b22b67d7806c840e0eb546d73c424768"
- },
- "0x526e1ff4cddb5033849a114c54eb71a176f6440c": {
- "balance": "0",
- "nonce": 1,
- "root": "0x834718111121e2058fdb90a51f448028071857e11fbd55d43256174df56af01a",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000c7": "c7",
- "0x00000000000000000000000000000000000000000000000000000000000000c8": "c8",
- "0x00000000000000000000000000000000000000000000000000000000000000c9": "c9"
- },
- "key": "0xb3a33a7f35ca5d08552516f58e9f76219716f9930a3a11ce9ae5db3e7a81445d"
- },
- "0x5371ac01baa0b8aa9cbfcd36a49e0b5f7fb7109d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x385b84d27059a3c78e7ea63a691eeb9c5376f77af11336762f8c18882ff7471a",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000028": "28",
- "0x0000000000000000000000000000000000000000000000000000000000000029": "29",
- "0x000000000000000000000000000000000000000000000000000000000000002a": "2a"
- },
- "key": "0x7a08bb8417e6b18da3ba926568f1022c15553b2b0f1a32f2fd9e5a605469e54f"
- },
- "0x54314225e5efd5b8283d6ec2f7a03d5a92106374": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xcade985c7fb6d371d0c7f7cb40178e7873d623eadcc37545798ec33a04bb2173"
- },
- "0x549abf1ae8db6de0d131a7b2b094c813ec1c6731": {
- "balance": "0",
- "nonce": 1,
- "root": "0x73bffc68a947fa19b7becd45661d22c870fac8dbf2b25703e1bdab5367f29543",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000086": "86",
- "0x0000000000000000000000000000000000000000000000000000000000000087": "87",
- "0x0000000000000000000000000000000000000000000000000000000000000088": "88"
- },
- "key": "0x910fb8b22867289cb57531ad39070ef8dbdbbe7aee941886a0e9f572b63ae9ee"
- },
- "0x5502b2da1a3a08ad258aa08c0c6e0312cf047e64": {
- "balance": "0",
- "nonce": 1,
- "root": "0xf73591e791af4c7c5fa039c33dd9d169cab14b1d9b0ca78bcc4e740d553b1acf",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000f4": "f4",
- "0x00000000000000000000000000000000000000000000000000000000000000f5": "f5",
- "0x00000000000000000000000000000000000000000000000000000000000000f6": "f6"
- },
- "key": "0x1d6ee979097e29141ad6b97ae19bb592420652b7000003c55eb52d5225c3307d"
- },
- "0x553f68e60e9f8ea74c831449525dc1bc4f6fc58e": {
- "balance": "0",
- "nonce": 1,
- "root": "0x14f9f4b9445c7547d5a4671a38b0b12bbc0e7198c3b2934b82b695c8630d4972",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000126": "0126",
- "0x0000000000000000000000000000000000000000000000000000000000000127": "0127",
- "0x0000000000000000000000000000000000000000000000000000000000000128": "0128"
- },
- "key": "0x6ad3ba011e031431dc057c808b85346d58001b85b32a4b5c90ccccea0f82e170"
- },
- "0x56270eccd88bcd5ad8d2b08f82d96cd8dace4eb3": {
- "balance": "0",
- "nonce": 1,
- "root": "0xb0700fe13dbaf94be50bcbec13a7b53e6cba034b29a3daba98fa861f5897213f",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000063": "63",
- "0x0000000000000000000000000000000000000000000000000000000000000064": "64",
- "0x0000000000000000000000000000000000000000000000000000000000000065": "65"
- },
- "key": "0xcd6b3739d4dbce17dafc156790f2a3936eb75ce95e9bba039dd76661f40ea309"
- },
- "0x56d3f289b889e65c4268a1b56b3da2d3860d0afb": {
- "balance": "0",
- "nonce": 0,
- "root": "0x207f6c3e450546b0d1f3bc6a6faf5bfa0bff80396c55d567b834cf0e7c760347",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000000a": "0a",
- "0x000000000000000000000000000000000000000000000000000000000000000b": "0b",
- "0x000000000000000000000000000000000000000000000000000000000000000c": "0c"
- },
- "key": "0xdc9ea08bdea052acab7c990edbb85551f2af3e1f1a236356ab345ac5bcc84562"
- },
- "0x56dc3a6c5ca1e1b773e5fdfc8a92e9a42feaa6e9": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xdbd66b6a89e01c76ae5f8cb0dcd8a24e787f58f015c9b08972bfabefa2eae0d5"
- },
- "0x579ab019e6b461188300c7fb202448d34669e5ff": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x18f4256a59e1b2e01e96ac465e1d14a45d789ce49728f42082289fc25cf32b8d"
- },
- "0x5820871100e656b0d84b950f0a557e37419bf17d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4615e5f5df5b25349a00ad313c6cd0436b6c08ee5826e33a018661997f85ebaa"
- },
- "0x58d77a134c11f45f9573d5c105fa6c8ae9b4237a": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xd9f987fec216556304eba05bcdae47bb736eea5a4183eb3e2c3a5045734ae8c7"
- },
- "0x591317752b32e45c9d44d925a4bcb4898f6b51fb": {
- "balance": "0",
- "nonce": 1,
- "root": "0x89bde89df7f2d83344a503944bb347b847f208df837228bb2cdfd6c3228ca3df",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000011c": "011c",
- "0x000000000000000000000000000000000000000000000000000000000000011d": "011d",
- "0x000000000000000000000000000000000000000000000000000000000000011e": "011e"
- },
- "key": "0x88a5635dabc83e4e021167be484b62cbed0ecdaa9ac282dab2cd9405e97ed602"
- },
- "0x5a6e7a4754af8e7f47fc9493040d853e7b01e39d": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x3e57e37bc3f588c244ffe4da1f48a360fa540b77c92f0c76919ec4ee22b63599"
- },
- "0x5b35d3e1ac7a2c61d247046d38773decf4f2839a": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x55cab9586acb40e66f66147ff3a059cfcbbad785dddd5c0cc31cb43edf98a5d5"
- },
- "0x5c019738b38feae2a8944bd644f7acd5e6f40e5c": {
- "balance": "0",
- "nonce": 1,
- "root": "0xea83389383152270104093ed5dfe34ba403c75308133aa1be8f51ad804b3e9ee",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000103": "0103",
- "0x0000000000000000000000000000000000000000000000000000000000000104": "0104",
- "0x0000000000000000000000000000000000000000000000000000000000000105": "0105"
- },
- "key": "0xbccd85b63dba6300f84c561c5f52ce08a240564421e382e6f550ce0c12f2f632"
- },
- "0x5c04401b6f6a5e318c7b6f3106a6217d20008427": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x6c37093a34016ae687da7aabb18e42009b71edff70a94733c904aea51a4853c1"
- },
- "0x5c23d95614dce3317e7be72de3c81479c3172a8a": {
- "balance": "0",
- "nonce": 1,
- "root": "0x4f446329b5ee3d13d4f6b5e5f210ddc2d90fedba384b950e36a1d19af95c5cb1",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000000f": "0f",
- "0x0000000000000000000000000000000000000000000000000000000000000010": "10",
- "0x0000000000000000000000000000000000000000000000000000000000000011": "11"
- },
- "key": "0x34a715e08b77afd68cde30b62e222542f3db90758370400c94d0563959a1d1a0"
- },
- "0x5c62e091b8c0565f1bafad0dad5934276143ae2c": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x1bf7626cec5330a127e439e68e6ee1a1537e73b2de1aa6d6f7e06bc0f1e9d763"
- },
- "0x5d6bc8f87dd221a9f8c4144a256391979ff6426b": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xcc74930e1ee0e71a8081f247ec47442a3e5d00897966754a5b3ee8beb2c1160c"
- },
- "0x5df7504bc193ee4c3deadede1459eccca172e87c": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4f458f480644b18c0e8207f405b82da7f75c7b3b5a34fe6771a0ecf644677f33"
- },
- "0x5ee0dd4d4840229fab4a86438efbcaf1b9571af9": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x3848b7da914222540b71e398081d04e3849d2ee0d328168a3cc173a1cd4e783b"
- },
- "0x5f4755a4bd689dc90425fb2fdb64a4b191a7264d": {
- "balance": "0",
- "nonce": 1,
- "root": "0xaf867e6cbae810caa924b8b6ac3d8c0891831491a6906dd0be7ad324dcd1533d",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000016c": "016c",
- "0x000000000000000000000000000000000000000000000000000000000000016d": "016d",
- "0x000000000000000000000000000000000000000000000000000000000000016e": "016e"
- },
- "key": "0x1c3f74249a4892081ba0634a819aec9ed25f34c7653f5719b9098487e65ab595"
- },
- "0x5f552da00dfb4d3749d9e62dcee3c918855a86a0": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xd52564daf6d32a6ae29470732726859261f5a7409b4858101bd233ed5cc2f662"
- },
- "0x5f553e0d115af809cfc1396b4823378b2c7cced5": {
- "balance": "0",
- "nonce": 1,
- "root": "0xcc48f8d1c0dd6ec8ab7bbd792d94f6a74c8876b41bc859cee2228e8dad8207a4",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000ae": "ae",
- "0x00000000000000000000000000000000000000000000000000000000000000af": "af",
- "0x00000000000000000000000000000000000000000000000000000000000000b0": "b0"
- },
- "key": "0xe3c2e12be28e2e36dc852e76dd32e091954f99f2a6480853cd7b9e01ec6cd889"
- },
- "0x6096d8459f8e424f514468098e6a0f2a871c815d": {
- "balance": "0",
- "nonce": 1,
- "root": "0xa20e6a21244af8ffccd5442297ad9b7a76ac72d7d8ac9e16f12fcc50e90b734e",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000018f": "018f",
- "0x0000000000000000000000000000000000000000000000000000000000000190": "0190",
- "0x0000000000000000000000000000000000000000000000000000000000000191": "0191"
- },
- "key": "0x67cc0bf5341efbb7c8e1bdbf83d812b72170e6edec0263eeebdea6f107bbef0d"
- },
- "0x60d0debc5c81432ee294b9a06dcf58964224bbc2": {
- "balance": "0",
- "nonce": 1,
- "root": "0x5446b818f4c669669cd3314726ff134cf18c58a9a536df13c700610705a8b7c8",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000041": "41",
- "0x0000000000000000000000000000000000000000000000000000000000000042": "42",
- "0x0000000000000000000000000000000000000000000000000000000000000043": "43"
- },
- "key": "0x395b92f75f8e06b5378a84ba03379f025d785d8b626b2b6a1c84b718244b9a91"
- },
- "0x61774970e93c00a3e206a26c64707d3e33f89972": {
- "balance": "0",
- "nonce": 1,
- "root": "0x869acb929f591c54cb85842a51f296635e7d895798c547a293afe43e7bf7f417",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000006d": "6d",
- "0x000000000000000000000000000000000000000000000000000000000000006e": "6e",
- "0x000000000000000000000000000000000000000000000000000000000000006f": "6f"
- },
- "key": "0x07b49045c401bcc408f983d91a199c908cdf0d646049b5b83629a70b0117e295"
- },
- "0x6269e930eee66e89863db1ff8e4744d65e1fb6bf": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x419809ad1512ed1ab3fb570f98ceb2f1d1b5dea39578583cd2b03e9378bbe418"
- },
- "0x62b67e1f685b7fef51102005dddd27774be3fee3": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xf462aaa112b195c148974ff796a81c0e7f9a972d04e60c178ac109102d593a88"
- },
- "0x6325c46e45d96f775754b39a17d733c4920d0038": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7c463797c90e9ba42b45ae061ffaa6bbd0dad48bb4998f761e81859f2a904a49"
- },
- "0x63eb2d6ec7c526fd386631f71824bad098f39813": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xfdaf2549ea901a469b3e91cd1c4290fab376ef687547046751e10b7b461ff297"
- },
- "0x6510225e743d73828aa4f73a3133818490bd8820": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe6d72f72fd2fc8af227f75ab3ab199f12dfb939bdcff5f0acdac06a90084def8"
- },
- "0x653b3bb3e18ef84d5b1e8ff9884aecf1950c7a1c": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xc2c26fbc0b7893d872fa528d6c235caab9164feb5b54c48381ff3d82c8244e77"
- },
- "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x00aa781aff39a8284ef43790e3a511b2caa50803613c5096bc782e8de08fa4c5"
- },
- "0x65c74c15a686187bb6bbf9958f494fc6b8006803": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x570210539713235b442bbbad50c58bee81b70efd2dad78f99e41a6c462faeb43"
- },
- "0x662fb906c0fb671022f9914d6bba12250ea6adfb": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb58e22a9ece8f9b3fdbaa7d17fe5fc92345df11d6863db4159647d64a34ff10b"
- },
- "0x66378d2edcc2176820e951f080dd6e9e15a0e695": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xa02c8b02efb52fad3056fc96029467937c38c96d922250f6d2c0f77b923c85aa"
- },
- "0x670dc376ecca46823e13bab90acab2004fb1706c": {
- "balance": "0",
- "nonce": 1,
- "root": "0xae440143d21e24a931b6756f6b3d50d337eaf0db3e6c34e36ab46fe2d99ef83e",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000199": "0199",
- "0x000000000000000000000000000000000000000000000000000000000000019a": "019a",
- "0x000000000000000000000000000000000000000000000000000000000000019b": "019b"
- },
- "key": "0xdcda5b5203c2257997a574bdf85b2bea6d04829e8d7e048a709badc0fb99288c"
- },
- "0x6741149452787eb4384ebbd8456643f246217034": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x37e51740ad994839549a56ef8606d71ace79adc5f55c988958d1c450eea5ac2d"
- },
- "0x684888c0ebb17f374298b65ee2807526c066094c": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb062c716d86a832649bccd53e9b11c77fc8a2a00ef0cc0dd2f561688a69d54f7"
- },
- "0x6922e93e3827642ce4b883c756b31abf80036649": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x3be526914a7d688e00adca06a0c47c580cb7aa934115ca26006a1ed5455dd2ce"
- },
- "0x6a632187a3abf9bebb66d43368fccd612f631cbc": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x9de451c4f48bdb56c6df198ff8e1f5e349a84a4dc11de924707718e6ac897aa6"
- },
- "0x6b23c0d5f35d1b11f9b683f0b0a617355deb1127": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x099d5081762b8b265e8ba4cd8e43f08be4715d903a0b1d96b3d9c4e811cbfb33"
- },
- "0x6b2884fef44bd4288621a2cda9f88ca07b480861": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe6c5edf6a0fbdcff100e5ceafb63cba9aea355ba397a93fdb42a1a67b91375f8"
- },
- "0x6c49c19c40a44bbf1cf9d2d8741ec1126e815fc6": {
- "balance": "0",
- "nonce": 1,
- "root": "0xe00c49a65849d05cbf27a4d7788a68bc7b6013ae33411d40bc89282fc064f33d",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001ad": "01ad",
- "0x00000000000000000000000000000000000000000000000000000000000001ae": "01ae",
- "0x00000000000000000000000000000000000000000000000000000000000001af": "01af"
- },
- "key": "0x0304d8eaccf0b942c468074250cbcb625ec5c4688b6b5d17d2a9bdd8dd565d5a"
- },
- "0x6ca60a92cbf88c7f527978dc183a22e774755551": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x52d034ca6ebd21c7ba62a2ad3b6359aa4a1cdc88bdaa64bb2271d898777293ab"
- },
- "0x6cc0ab95752bf25ec58c91b1d603c5eb41b8fbd7": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xaa0ac2f707a3dc131374839d4ee969eeb1cb55adea878f56e7b5b83d187d925c"
- },
- "0x6d09a879576c0d941bea7833fb2285051b10d511": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xaa0ffaa57269b865dccce764bf412de1dff3e7bba22ce319ef09e5907317b3e7"
- },
- "0x6d8b8f27857e10b21c0ff227110d7533cea03d0e": {
- "balance": "0",
- "nonce": 1,
- "root": "0xd3d9839f87c29fb007fd9928d38bbf84ef089f0cd640c838f4a42631e828c667",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000117": "0117",
- "0x0000000000000000000000000000000000000000000000000000000000000118": "0118",
- "0x0000000000000000000000000000000000000000000000000000000000000119": "0119"
- },
- "key": "0xfdbb8ddca8cecfe275da1ea1c36e494536f581d64ddf0c4f2e6dae9c7d891427"
- },
- "0x6e09a59a69b41abca97268b05595c074ad157872": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7a3870cc1ed4fc29e9ab4dd3218dbb239dd32c9bf05bff03e325b7ba68486c47"
- },
- "0x6e3d512a9328fa42c7ca1e20064071f88958ed93": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xc1a6a0bf60ee7b3228ecf6cb7c9e5491fbf62642a3650d73314e976d9eb9a966"
- },
- "0x6e3faf1e27d45fca70234ae8f6f0a734622cff8a": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x97f72ff641eb40ee1f1163544931635acb7550a0d44bfb9f4cc3aeae829b6d7d"
- },
- "0x6f80f6a318ea88bf0115d693f564139a5fb488f6": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe73b3367629c8cb991f244ac073c0863ad1d8d88c2e180dd582cefda2de4415e"
- },
- "0x7021bf21ecdbefcb33d09e4b812a47b273aa1d5c": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb9400acf38453fd206bc18f67ba04f55b807b20e4efc2157909d91d3a9f7bed2"
- },
- "0x706be462488699e89b722822dcec9822ad7d05a7": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x78948842ff476b87544c189ce744d4d924ffd0907107a0dbaa4b71d0514f2225"
- },
- "0x717f8aa2b982bee0e29f573d31df288663e1ce16": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xc3c8e2dc64e67baa83b844263fe31bfe24de17bb72bfed790ab345b97b007816"
- },
- "0x7212449475dcc75d408ad62a9acc121d94288f6d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe333845edc60ed469a894c43ed8c06ec807dafd079b3c948077da56e18436290"
- },
- "0x72dfcfb0c470ac255cde83fb8fe38de8a128188e": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x2fe5767f605b7b821675b223a22e4e5055154f75e7f3041fdffaa02e4787fab8"
- },
- "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f": {
- "balance": "999999999999999999999518871495454239",
- "nonce": 402,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4363d332a0d4df8582a84932729892387c623fe1ec42e2cfcbe85c183ed98e0e"
- },
- "0x75b9236dfe7d0e12eb21b6d175276a7c5d4e851d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xc54ffffcbaa5b566a7cf37386c4ce5a338d558612343caaa99788343d516aa5f"
- },
- "0x77adfc95029e73b173f60e556f915b0cd8850848": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x0993fd5b750fe4414f93c7880b89744abb96f7af1171ed5f47026bdf01df1874"
- },
- "0x788adf954fc28a524008ea1f2d0e87ae8893afdc": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x903f24b3d3d45bc50c082b2e71c7339c7060f633f868db2065ef611885abe37e"
- },
- "0x7a19252e8c9b457eb07f52d0ddbe16820b5b7830": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xab7bdc41a80ae9c8fcb9426ba716d8d47e523f94ffb4b9823512d259c9eca8cd"
- },
- "0x7ace431cb61584cb9b8dc7ec08cf38ac0a2d6496": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x71dee9adfef0940a36336903bd6830964865180b98c0506f9bf7ba8f2740fbf9"
- },
- "0x7c5bd2d144fdde498406edcb9fe60ce65b0dfa5f": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xfcc08928955d4e5e17e17e46d5adbb8011e0a8a74cabbdd3e138c367e89a4428"
- },
- "0x7cb7c4547cf2653590d7a9ace60cc623d25148ad": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x55d0609468d8d4147a942e88cfc5f667daff850788d821889fbb03298924767c"
- },
- "0x7d80ad47bf8699f49853640b12ee55b1f51691f1": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x65cf42efacdee07ed87a1c2de0752a4e3b959f33f9f9f8c77424ba759e01fcf2"
- },
- "0x7da59d0dfbe21f43e842e8afb43e12a6445bbac0": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7c3e44534b1398abc786e4591364c329e976dbde3b3ed3a4d55589de84bcb9a6"
- },
- "0x7dcef881c305fb208500cc9509db689047ed0967": {
- "balance": "0",
- "nonce": 1,
- "root": "0x6d2b8a074c78a0e5a8095d7a010d4961c639c541cf56fbb7049480cc8f199765",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001bc": "01bc",
- "0x00000000000000000000000000000000000000000000000000000000000001bd": "01bd",
- "0x00000000000000000000000000000000000000000000000000000000000001be": "01be"
- },
- "key": "0x68fc814efedf52ac8032da358ddcb61eab4138cb56b536884b86e229c995689c"
- },
- "0x7f2dce06acdeea2633ff324e5cb502ee2a42d979": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe04fdefc4f2eefd22721d5944411b282d0fcb1f9ac218f54793a35bca8199c25"
- },
- "0x7f774bb46e7e342a2d9d0514b27cee622012f741": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x720f25b62fc39426f70eb219c9dd481c1621821c8c0fa5367a1df6e59e3edf59"
- },
- "0x7fd02a3bb5d5926d4981efbf63b66de2a7b1aa63": {
- "balance": "0",
- "nonce": 1,
- "root": "0x7bf542bdaff5bfe3d33c26a88777773b5e525461093c36acb0dab591a319e509",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000032": "32",
- "0x0000000000000000000000000000000000000000000000000000000000000033": "33",
- "0x0000000000000000000000000000000000000000000000000000000000000034": "34"
- },
- "key": "0xfc3d2e27841c0913d10aa11fc4af4793bf376efe3d90ce8360aa392d0ecefa24"
- },
- "0x8074971c7d405ba1e70af34f5af7d564ddc495df": {
- "balance": "0",
- "nonce": 1,
- "root": "0x60fc69100d8e632667c80b94d434008823ed75416b71cbd112b4d0b02f563027",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000a4": "a4",
- "0x00000000000000000000000000000000000000000000000000000000000000a5": "a5",
- "0x00000000000000000000000000000000000000000000000000000000000000a6": "a6"
- },
- "key": "0x0e0e4646090b881949ec9991e48dec768ccd1980896aefd0d51fd56fd5689790"
- },
- "0x8120ff763f8283e574fc767702056b57fcc89003": {
- "balance": "0",
- "nonce": 1,
- "root": "0xa2e7084ba9cec179519c7e8950c66ad3cba8586a60cff9f4d60c188dd621522a",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000037": "37",
- "0x0000000000000000000000000000000000000000000000000000000000000038": "38",
- "0x0000000000000000000000000000000000000000000000000000000000000039": "39"
- },
- "key": "0x48e291f8a256ab15da8401c8cae555d5417a992dff3848926fa5b71655740059"
- },
- "0x8176caac8654abc74a905b137a37ecf7be2a9e95": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xc4bab059ee8f7b36c82ada44d22129671d8f47f254ca6a48fded94a8ff591c88"
- },
- "0x81bda6e29da8c3e4806b64dfa1cd32cd9c8fa70e": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xd5e5e7be8a61bb5bfa271dfc265aa9744dea85de957b6cffff0ecb403f9697db"
- },
- "0x828a91cb304a669deff703bb8506a19eba28e250": {
- "balance": "0",
- "nonce": 1,
- "root": "0x936ac6251848da69a191cc91174e4b7583a12a43d896e243841ea98b65f264ad",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000017b": "017b",
- "0x000000000000000000000000000000000000000000000000000000000000017c": "017c",
- "0x000000000000000000000000000000000000000000000000000000000000017d": "017d"
- },
- "key": "0xea810ea64a420acfa917346a4a02580a50483890cba1d8d1d158d11f1c59ed02"
- },
- "0x82c291ed50c5f02d7e15e655c6353c9278e1bbec": {
- "balance": "0",
- "nonce": 1,
- "root": "0x12de4544640fc8a027e1a912d776b90675bebfd50710c2876b2a24ec9eced367",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000cc": "cc",
- "0x00000000000000000000000000000000000000000000000000000000000000cd": "cd",
- "0x00000000000000000000000000000000000000000000000000000000000000ce": "ce"
- },
- "key": "0xa9970b3744a0e46b248aaf080a001441d24175b5534ad80755661d271b976d67"
- },
- "0x83c7e323d189f18725ac510004fdc2941f8c4a78": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb17ea61d092bd5d77edd9d5214e9483607689cdcc35a30f7ea49071b3be88c64"
- },
- "0x847f88846c35337cbf57e37ffc18316a99ac2f14": {
- "balance": "0",
- "nonce": 1,
- "root": "0x310a2ac83d7e3e4d333102b1f7153bb0416b38427eb2e335dc6632d779a8b4af",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000bd": "bd",
- "0x00000000000000000000000000000000000000000000000000000000000000be": "be",
- "0x00000000000000000000000000000000000000000000000000000000000000bf": "bf"
- },
- "key": "0xbea55c1dc9f4a9fb50cbedc70448a4e162792b9502bb28b936c7e0a2fd7fe41d"
- },
- "0x84873854dba02cf6a765a6277a311301b2656a7f": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x3197690074092fe51694bdb96aaab9ae94dac87f129785e498ab171a363d3b40"
- },
- "0x84e75c28348fb86acea1a93a39426d7d60f4cc46": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x5162f18d40405c59ef279ad71d87fbec2bbfedc57139d56986fbf47daf8bcbf2"
- },
- "0x85f97e04d754c81dac21f0ce857adc81170d08c6": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x2baa718b760c0cbd0ec40a3c6df7f2948b40ba096e6e4b116b636f0cca023bde"
- },
- "0x8642821710100a9a3ab10cd4223278a713318096": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4fbc5fc8df4f0a578c3be3549f1cb3ef135cbcdf75f620c7a1d412462e9b3b94"
- },
- "0x8749e96779cd1b9fa62b2a19870d9efc28acae09": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xa3d8baf7ae7c96b1020753d12154e28cc7206402037c28c49c332a08cf7c4b51"
- },
- "0x87610688d55c08238eacf52864b5a5920a00b764": {
- "balance": "0",
- "nonce": 1,
- "root": "0x2da86eb3d4ffdd895170bc7ef02b69a116fe21ac2ce45a3ed8e0bb8af17cf92b",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000fe": "fe",
- "0x00000000000000000000000000000000000000000000000000000000000000ff": "ff",
- "0x0000000000000000000000000000000000000000000000000000000000000100": "0100"
- },
- "key": "0x80a2c1f38f8e2721079a0de39f187adedcb81b2ab5ae718ec1b8d64e4aa6930e"
- },
- "0x878dedd9474cfa24d91bccc8b771e180cf01ac40": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7e1ef9f8d2fa6d4f8e6717c3dcccff352ea9b8b46b57f6106cdbeed109441799"
- },
- "0x882e7e5d12617c267a72948e716f231fa79e6d51": {
- "balance": "0",
- "nonce": 0,
- "root": "0x491b2cfba976b2e78bd9be3bc15c9964927205fc34c9954a4d61bbe8170ba533",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000005": "05",
- "0x0000000000000000000000000000000000000000000000000000000000000006": "06",
- "0x0000000000000000000000000000000000000000000000000000000000000007": "07"
- },
- "key": "0xd2501ae11a14bf0c2283a24b7e77c846c00a63e71908c6a5e1caff201bad0762"
- },
- "0x88654f0e7be1751967bba901ed70257a3cb79940": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x30ce5b7591126d5464dfb4fc576a970b1368475ce097e244132b06d8cc8ccffe"
- },
- "0x892f60b39450a0e770f00a836761c8e964fd7467": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x74614a0c4ba7d7c70b162dad186b6cc77984ab4070534ad9757e04a5b776dcc8"
- },
- "0x8a5edab282632443219e051e4ade2d1d5bbc671c": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xc251a3acb75a90ff0cdca31da1408a27ef7dcaa42f18e648f2be1a28b35eac32"
- },
- "0x8a817bc42b2e2146dc4ca4dc686db0a4051d2944": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x17984cc4b4aac0492699d37662b53ec2acf8cbe540c968b817061e4ed27026d0"
- },
- "0x8a8950f7623663222542c9469c73be3c4c81bbdf": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xaef83ad0ab332330a20e88cd3b5a4bcf6ac6c175ee780ed4183d11340df17833"
- },
- "0x8ba7e4a56d8d4a4a2fd7d0c8b9e6f032dc76cefb": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x72e962dfe7e2828809f5906996dedeba50950140555b193fceb94f12fd6f0a22"
- },
- "0x8bebc8ba651aee624937e7d897853ac30c95a067": {
- "balance": "1",
- "nonce": 1,
- "root": "0xbe3d75a1729be157e79c3b77f00206db4d54e3ea14375a015451c88ec067c790",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000001": "01",
- "0x0000000000000000000000000000000000000000000000000000000000000002": "02",
- "0x0000000000000000000000000000000000000000000000000000000000000003": "03"
- },
- "key": "0x445cb5c1278fdce2f9cbdb681bdd76c52f8e50e41dbd9e220242a69ba99ac099"
- },
- "0x8cf42eb93b1426f22a30bd22539503bdf838830c": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x0267c643f67b47cac9efacf6fcf0e4f4e1b273a727ded155db60eb9907939eb6"
- },
- "0x8d33f520a3c4cef80d2453aef81b612bfe1cb44c": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb8d9b988ed60dbf5dca3e9d169343ca667498605f34fb6c30b45b2ed0f996f1a"
- },
- "0x8d36bbb3d6fbf24f38ba020d9ceeef5d4562f5f2": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xc13c19f53ce8b6411d6cdaafd8480dfa462ffdf39e2eb68df90181a128d88992"
- },
- "0x8fa24283a8c1cc8a0f76ac69362139a173592567": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xefaff7acc3ad3417517b21a92187d2e63d7a77bc284290ed406d1bc07ab3d885"
- },
- "0x8fb778e47caf2df14eca7a389955ca74ac8f4924": {
- "balance": "0",
- "nonce": 1,
- "root": "0xae2e7f1c933c6ca84ce8be811ef411dee773fb69508056d72448048ea1db5c47",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001ee": "01ee",
- "0x00000000000000000000000000000000000000000000000000000000000001ef": "01ef",
- "0x00000000000000000000000000000000000000000000000000000000000001f0": "01f0"
- },
- "key": "0x4973f6aa8cf5b1190fc95379aa01cff99570ee6b670725880217237fb49e4b24"
- },
- "0x90fd8e600ae1a7c69fa6ef2c537b533ca77366e8": {
- "balance": "0",
- "nonce": 1,
- "root": "0xee9821621aa5ec9ab7d5878b2a995228adcdcacb710df522d2f91b434d3bdc79",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000c2": "c2",
- "0x00000000000000000000000000000000000000000000000000000000000000c3": "c3",
- "0x00000000000000000000000000000000000000000000000000000000000000c4": "c4"
- },
- "key": "0xbfaac98225451c56b2f9aec858cffc1eb253909615f3d9617627c793b938694f"
- },
- "0x913f841dfc8703ae76a4e1b8b84cd67aab15f17a": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xcb54add475a18ea02ab1adf9e2e73da7f23ecd3e92c4fa8ca4e8f588258cb5d3"
- },
- "0x923f800cf288500f8e53f04e4698c9b885dcf030": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb91824b28183c95881ada12404d5ee8af8123689a98054d41aaf4dd5bec50e90"
- },
- "0x9344b07175800259691961298ca11c824e65032d": {
- "balance": "0",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0x8e0388ecf64cfa76b3a6af159f77451519a7f9bb862e4cce24175c791fdcb0df",
- "code": "0x60004381526020014681526020014181526020014881526020014481526020013281526020013481526020016000f3",
- "key": "0x2e6fe1362b3e388184fd7bf08e99e74170b26361624ffd1c5f646da7067b58b6"
- },
- "0x93747f73c18356c6b202f527f552436a0e06116a": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x73cd1b7cd355f3f77c570a01100a616757408bb7abb78fe9ee1262b99688fcc4"
- },
- "0x9380b994c5738f68312f0e517902da81f63cdcfa": {
- "balance": "0",
- "nonce": 1,
- "root": "0x51b829f0f2c3de9cfbd94e47828a89940c329a49cd59540ca3c6d751a8d214d6",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000135": "0135",
- "0x0000000000000000000000000000000000000000000000000000000000000136": "0136",
- "0x0000000000000000000000000000000000000000000000000000000000000137": "0137"
- },
- "key": "0x50d83ef5194d06752cd5594b57e809b135f24eedd124a51137feaaf049bc2efd"
- },
- "0x94d068bff1af651dd9d9c2e75adfb7eec6f66be7": {
- "balance": "0",
- "nonce": 1,
- "root": "0x0754035aa4073381a211342b507de8e775c97c961096e6e2275df0bfcbb3a01c",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000059": "59",
- "0x000000000000000000000000000000000000000000000000000000000000005a": "5a",
- "0x000000000000000000000000000000000000000000000000000000000000005b": "5b"
- },
- "key": "0x0cd2a7c53c76f228ed3aa7a29644b1915fde9ec22e0433808bf5467d914e7c7a"
- },
- "0x956062137518b270d730d4753000896de17c100a": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x5aa3b4a2ebdd402721c3953b724f4fe90900250bb4ef89ce417ec440da318cd6"
- },
- "0x96a1cabb97e1434a6e23e684dd4572e044c243ea": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe7c6828e1fe8c586b263a81aafc9587d313c609c6db8665a42ae1267cd9ade59"
- },
- "0x984c16459ded76438d98ce9b608f175c28a910a0": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4b9f335ce0bdffdd77fdb9830961c5bc7090ae94703d0392d3f0ff10e6a4fbab"
- },
- "0x99a1c0703485b331fa0302d6077b583082e242ea": {
- "balance": "0",
- "nonce": 1,
- "root": "0x2cf292c1e382bdd0e72e126701d7b02484e6e272f4c0d814f5a6fae233fc7935",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000121": "0121",
- "0x0000000000000000000000000000000000000000000000000000000000000122": "0122",
- "0x0000000000000000000000000000000000000000000000000000000000000123": "0123"
- },
- "key": "0x734ee4981754a3f1403c4e8887d35addfb31717d93de3e00ede78368c230861e"
- },
- "0x99d40a710cb552eaaee1599d4040055859b1610d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x946bfb429d90f1b39bb47ada75376a8d90a5778068027d4b8b8514ac13f53eca"
- },
- "0x9a7b7b3a5d50781b4f4768cd7ce223168f6b449b": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xd16e029e8c67c3f330cddaa86f82d31f523028404dfccd16d288645d718eb9da"
- },
- "0x9ae62b6d840756c238b5ce936b910bb99d565047": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x8989651e80c20af78b37fdb693d74ecafc9239426ff1315e1fb7b674dcdbdb75"
- },
- "0x9b3cf956056937dfb6f9e3dc02e3979a4e421c0a": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb1b2c1c59637202bb0e0d21255e44e0df719fe990be05f213b1b813e3d8179d7"
- },
- "0x9bb981f592bc1f9c31db67f30bbf1ff44b649886": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x1ee7e0292fba90d9733f619f976a2655c484adb30135ef0c5153b5a2f32169df"
- },
- "0x9bfb328671c108c9ba4d45734d9f4462d8c9a9cb": {
- "balance": "0",
- "nonce": 1,
- "root": "0xc15b43e5f4853ec8da53ebde03de87b94afce42a9c02f648ad8bdb224604c4ad",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001da": "01da",
- "0x00000000000000000000000000000000000000000000000000000000000001db": "01db",
- "0x00000000000000000000000000000000000000000000000000000000000001dc": "01dc"
- },
- "key": "0xa683478d0c949580d5738b490fac8129275bb6e921dfe5eae37292be3ee281b9"
- },
- "0x9defb0a9e163278be0e05aa01b312ec78cfa3726": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb31919583a759b75e83c14d00d0a89bb36adc452f73cee2933a346ccebaa8e31"
- },
- "0x9e59004e909ff011e5882332e421b6772e68ed10": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x3897cb9b6f68765022f3c74f84a9f2833132858f661f4bc91ccd7a98f4e5b1ee"
- },
- "0x9f50ec6c8a595869d71ce8c3b1c17c02599a5cc3": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x2705244734f69af78e16c74784e1dc921cb8b6a98fe76f577cc441c831e973bf"
- },
- "0xa0794cd73f564baeeda23fa4ce635a3f8ae39621": {
- "balance": "0",
- "nonce": 1,
- "root": "0xfb79021e7fa54b9bd2df64f6db57897d52ae85f7c195af518de48200a1325e2c",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000ef": "ef",
- "0x00000000000000000000000000000000000000000000000000000000000000f0": "f0",
- "0x00000000000000000000000000000000000000000000000000000000000000f1": "f1"
- },
- "key": "0x60535eeb3ffb721c1688b879368c61a54e13f8881bdef6bd4a17b8b92e050e06"
- },
- "0xa12b147dd542518f44f821a4d436066c64932b0d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xae88076d02b19c4d09cb13fca14303687417b632444f3e30fc4880c225867be3"
- },
- "0xa179dbdd51c56d0988551f92535797bcf47ca0e7": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x6d1da4cf1127d654ed731a93105f481b315ecfc2f62b1ccb5f6d2717d6a40f9b"
- },
- "0xa1fce4363854ff888cff4b8e7875d600c2682390": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xad99b5bc38016547d5859f96be59bf18f994314116454def33ebfe9a892c508a"
- },
- "0xa225fe6df11a4f364234dd6a785a17cd38309acb": {
- "balance": "0",
- "nonce": 1,
- "root": "0xc1686045288a5952ad57de0e971bd25007723c9f749f49f391e715c27bf526c8",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000072": "72",
- "0x0000000000000000000000000000000000000000000000000000000000000073": "73",
- "0x0000000000000000000000000000000000000000000000000000000000000074": "74"
- },
- "key": "0x4e0ab2902f57bf2a250c0f87f088acc325d55f2320f2e33abd8e50ba273c9244"
- },
- "0xa25513c7e0f6eaa80a3337ee18081b9e2ed09e00": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xfb9474d0e5538fcd99e8d8d024db335b4e057f4bcd359e85d78f4a5226b33272"
- },
- "0xa5ab782c805e8bfbe34cb65742a0471cf5a53a97": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x6188c4510d25576535a642b15b1dbdb8922fe572b099f504390f923c19799777"
- },
- "0xa64f449891f282b87e566036f981023dba4ed477": {
- "balance": "0",
- "nonce": 1,
- "root": "0x61176dbc05a8537d8de85f82a03b8e1049cea7ad0a9f0e5b60ee15fca6fe0d42",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000012b": "012b",
- "0x000000000000000000000000000000000000000000000000000000000000012c": "012c",
- "0x000000000000000000000000000000000000000000000000000000000000012d": "012d"
- },
- "key": "0x7c1edabb98857d64572f03c64ac803e4a14b1698fccffffd51675d99ee3ba217"
- },
- "0xa6515a495ec7723416665ebb54fc002bf1e9a873": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xbbdc59572cc62c338fb6e027ab00c57cdeed233c8732680a56a5747141d20c7c"
- },
- "0xa6a54695341f038ad15e9e32f1096f5201236512": {
- "balance": "0",
- "nonce": 1,
- "root": "0xe2a72f5bfbeba70fc9ab506237ba27c096a4e96c3968cabf5b1b2fb54431b5cf",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000023": "23",
- "0x0000000000000000000000000000000000000000000000000000000000000024": "24",
- "0x0000000000000000000000000000000000000000000000000000000000000025": "25"
- },
- "key": "0xa87387b50b481431c6ccdb9ae99a54d4dcdd4a3eff75d7b17b4818f7bbfc21e9"
- },
- "0xa8100ae6aa1940d0b663bb31cd466142ebbdbd51": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x02547b56492bfe767f3d18be2aab96441c449cd945770ef7ef8555acc505b2e4"
- },
- "0xa8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x913e2a02a28d71d595d7216a12311f6921a4caf40aeabf0f28edf937f1df72b4"
- },
- "0xa92bb60b61e305ddd888015189d6591b0eab0233": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xdd1589b1fe1d9b4ca947f98ff324de7887af299d5490ed92ae40e95eec944118"
- },
- "0xa956ca63bf28e7da621475d6b077da1ab9812b3a": {
- "balance": "0",
- "nonce": 1,
- "root": "0xa090b66fbca46cb71abd1daa8d419d2c6e291094f52872978dfcb1c31ad7a900",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001e4": "01e4",
- "0x00000000000000000000000000000000000000000000000000000000000001e5": "01e5",
- "0x00000000000000000000000000000000000000000000000000000000000001e6": "01e6"
- },
- "key": "0xaad7b91d085a94c11a2f7e77dc95cfcfc5daf4f509ca4e0c0e493b86c6cbff78"
- },
- "0xaa0d6dfdb7588017c80ea088768a5f3d0cdeacdb": {
- "balance": "0",
- "nonce": 1,
- "root": "0x89ecb0ceeea20ccd7d1b18cf1d35b7a2fd7b76ddc8d627f43304ed8b31b01248",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000144": "0144",
- "0x0000000000000000000000000000000000000000000000000000000000000145": "0145",
- "0x0000000000000000000000000000000000000000000000000000000000000146": "0146"
- },
- "key": "0xb990eaca858ea15fda296f3f47baa2939e8aa8bbccc12ca0c3746d9b5d5fb2ae"
- },
- "0xaa53ff4bb2334faf9f4447197ef69c39c0bb1379": {
- "balance": "0",
- "nonce": 1,
- "root": "0xe547c0050253075b1be4210608bc639cffe70110194c316481235e738be961e7",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000ea": "ea",
- "0x00000000000000000000000000000000000000000000000000000000000000eb": "eb",
- "0x00000000000000000000000000000000000000000000000000000000000000ec": "ec"
- },
- "key": "0xed263a22f0e8be37bcc1873e589c54fe37fdde92902dc75d656997a7158a9d8c"
- },
- "0xaa7225e7d5b0a2552bbb58880b3ec00c286995b8": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x5a4a3feecfc77b402e938e28df0c4cbb874771cb3c5a92524f303cffb82a2862"
- },
- "0xab12a5f97f03edbff03eded9d1a2a1179d2fc69e": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xba1d0afdfee510e8852f24dff964afd824bf36d458cf5f5d45f02f04b7c0b35d"
- },
- "0xab557835ab3e5c43bf34ac9b2ab730c5e0bc9967": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xc9ea69dc9e84712b1349c9b271956cc0cb9473106be92d7a937b29e78e7e970e"
- },
- "0xab9025d4a9f93c65cd4fe978d38526860af0aa62": {
- "balance": "0",
- "nonce": 1,
- "root": "0x4ce79cd9645650f0a00effa86f6fea733cecea9ea26964828ff25cf0577bc974",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000009a": "9a",
- "0x000000000000000000000000000000000000000000000000000000000000009b": "9b",
- "0x000000000000000000000000000000000000000000000000000000000000009c": "9c"
- },
- "key": "0x17350c7adae7f08d7bbb8befcc97234462831638443cd6dfea186cbf5a08b7c7"
- },
- "0xabd693b23d55dec7d0d0cba2ecbc9298dc4edf02": {
- "balance": "0",
- "nonce": 1,
- "root": "0xafd54e81f3e415407f0812a678856f1b4068ed64a08b3f3bf5b2190fcfb2322d",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001b7": "01b7",
- "0x00000000000000000000000000000000000000000000000000000000000001b8": "01b8",
- "0x00000000000000000000000000000000000000000000000000000000000001b9": "01b9"
- },
- "key": "0xbe7d987a9265c0e44e9c5736fb2eb38c41973ce96e5e8e6c3c713f9d50a079ff"
- },
- "0xabe2b033c497e091c1e494c98c178e8aa06bcb00": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x2374954008440ca3d17b1472d34cc52a6493a94fb490d5fb427184d7d5fd1cbf"
- },
- "0xac4d51af4cb7bab4743fa57bc80b144d7a091268": {
- "balance": "0",
- "nonce": 1,
- "root": "0xfb00729a5f4f9a2436b999aa7159497a9cd88d155770f873a818b55052c5f067",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000149": "0149",
- "0x000000000000000000000000000000000000000000000000000000000000014a": "014a",
- "0x000000000000000000000000000000000000000000000000000000000000014b": "014b"
- },
- "key": "0xe42a85d04a1d0d9fe0703020ef98fa89ecdeb241a48de2db73f2feeaa2e49b0f"
- },
- "0xac7d8d5f6be7d251ec843ddbc09095150df59965": {
- "balance": "0",
- "nonce": 1,
- "root": "0xa9580109be2f7d35b5360050c2ced74e5d4dea2f82d46e8d266ed89157636004",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000046": "46",
- "0x0000000000000000000000000000000000000000000000000000000000000047": "47",
- "0x0000000000000000000000000000000000000000000000000000000000000048": "48"
- },
- "key": "0x943f42ad91e8019f75695946d491bb95729f0dfc5dbbb953a7239ac73f208943"
- },
- "0xac9e61d54eb6967e212c06aab15408292f8558c4": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xf2b9bc1163840284f3eb15c539972edad583cda91946f344f4cb57be15af9c8f"
- },
- "0xaceac762ff518b4cf93a6eebbc55987e7b79b2ce": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x1960414a11f8896c7fc4243aba7ed8179b0bc6979b7c25da7557b17f5dee7bf7"
- },
- "0xacfa6b0e008d0208f16026b4d17a4c070e8f9f8d": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x58e416a0dd96454bd2b1fe3138c3642f5dee52e011305c5c3416d97bc8ba5cf0"
- },
- "0xad108e31c9632ad9e20614b3ca40644d32948dbb": {
- "balance": "0",
- "nonce": 1,
- "root": "0x2625f8a23d24a5dff6a79f632b1020593362a6ac622fa5237460bc67b0aa0ed3",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001a3": "01a3",
- "0x00000000000000000000000000000000000000000000000000000000000001a4": "01a4",
- "0x00000000000000000000000000000000000000000000000000000000000001a5": "01a5"
- },
- "key": "0xdce547cc70c79575ef72c061502d6066db1cbce200bd904d5d2b20d4f1cb5963"
- },
- "0xae3f4619b0413d70d3004b9131c3752153074e45": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb1b2fd7758f73e25a2f9e72edde82995b2b32ab798bcffd2c7143f2fc8196fd8"
- },
- "0xae58b7e08e266680e93e46639a2a7e89fde78a6f": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe09e5f27b8a7bf61805df6e5fefc24eb6894281550c2d06250adecfe1e6581d7"
- },
- "0xaf17b30f5ab8e6a4d7a563bdb0194f3e0bd50209": {
- "balance": "0",
- "nonce": 1,
- "root": "0x2434bfc643ec364116cd71519a397662b20c52d1adcff0b830e80a738e19f30e",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000b8": "b8",
- "0x00000000000000000000000000000000000000000000000000000000000000b9": "b9",
- "0x00000000000000000000000000000000000000000000000000000000000000ba": "ba"
- },
- "key": "0x26ce7d83dfb0ab0e7f15c42aeb9e8c0c5dba538b07c8e64b35fb64a37267dd96"
- },
- "0xaf193a8cdcd0e3fb39e71147e59efa5cad40763d": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x1a28912018f78f7e754df6b9fcec33bea25e5a232224db622e0c3343cf079eff"
- },
- "0xaf2c6f1512d1cabedeaf129e0643863c57419732": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xad6a4a6ebd5166c9b5cc8cfbaec176cced40fa88c73d83c67f0c3ed426121ebc"
- },
- "0xb0b2988b6bbe724bacda5e9e524736de0bc7dae4": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x053df2c3b574026812b154a99b13b626220af85cd01bb1693b1d42591054bce6"
- },
- "0xb0ee91ba61e8a3914a7eab120786e9e61bfe4faf": {
- "balance": "0",
- "nonce": 1,
- "root": "0xa14913d548ac1d3f9962a21a569fe52f1436b6d2f5ea4e36de13ea855ede54e0",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000068": "68",
- "0x0000000000000000000000000000000000000000000000000000000000000069": "69",
- "0x000000000000000000000000000000000000000000000000000000000000006a": "6a"
- },
- "key": "0x4bd8ef9873a5e85d4805dbcb0dbf6810e558ea175167549ef80545a9cafbb0e1"
- },
- "0xb12dc850a3b0a3b79fc2255e175241ce20489fe4": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4ccd31891378d2025ef58980481608f11f5b35a988e877652e7cbb0a6127287c"
- },
- "0xb47f70b774d780c3ec5ac411f2f9198293b9df7a": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xdef989cb85107747de11222bd7418411f8f3264855e1939ef6bef9447e42076d"
- },
- "0xb4bc136e1fb4ea0b3340d06b158277c4a8537a13": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb7c2ef96238f635f86f9950700e36368efaaa70e764865dddc43ff6e96f6b346"
- },
- "0xb519be874447e0f0a38ee8ec84ecd2198a9fac77": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x92b13a73440c6421da22e848d23f9af80610085ab05662437d850c97a012d8d3"
- },
- "0xb55a3d332d267493105927b892545d2cd4c83bd6": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xc781c7c3babeb06adfe8f09ecb61dbe0eb671e41f3a1163faac82fdfa2bc83e8"
- },
- "0xb609bc528052bd9669595a35f6eb6a4d7a30ac3d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe6388bfcbbd6000e90a10633c72c43b0b0fed7cf38eab785a71e6f0c5b80a26a"
- },
- "0xb68176634dde4d9402ecb148265db047d17cb4ab": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xf4a1c4554b186a354b3e0c467eef03df9907cd5a5d96086c1a542b9e5160ca78"
- },
- "0xb70654fead634e1ede4518ef34872c9d4f083a53": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7f9726a7b2f5f3a501b2d7b18ec726f25f22c86348fae0f459d882ec5fd7d0c7"
- },
- "0xb71de80778f2783383f5d5a3028af84eab2f18a4": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x64d0de66ea29cbcf7f237dae1c5f883fa6ff0ba52b90f696bb0348224dbc82ce"
- },
- "0xb787c848479278cfdb56950cda545cd45881722d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x1098f06082dc467088ecedb143f9464ebb02f19dc10bd7491b03ba68d751ce45"
- },
- "0xb911abeead298d03c21c6c5ff397cd80eb375d73": {
- "balance": "0",
- "nonce": 1,
- "root": "0x54abcdbc8b04bc9b70e9bd46cb9db9b8eb08cfd4addba4c941dacc34dd28648e",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000054": "54",
- "0x0000000000000000000000000000000000000000000000000000000000000055": "55",
- "0x0000000000000000000000000000000000000000000000000000000000000056": "56"
- },
- "key": "0x873429def7829ff8227e4ef554591291907892fc8f3a1a0667dada3dc2a3eb84"
- },
- "0xb917b7f3d49770d3d2f0ad2f497e5bfe0f25dc5f": {
- "balance": "0",
- "nonce": 1,
- "root": "0x11d4eec7df52cd54e74690a487884e56371976c2b8c49ffc4c8f34831166bf4e",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000162": "0162",
- "0x0000000000000000000000000000000000000000000000000000000000000163": "0163",
- "0x0000000000000000000000000000000000000000000000000000000000000164": "0164"
- },
- "key": "0x65e6b6521e4f1f97e80710581f42063392c9b33e0aeea4081a102a32238992ea"
- },
- "0xb9b85616fc8ed95979a5e31b8968847e7518b165": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x6a5e43139d88da6cfba857e458ae0b5359c3fde36e362b6e5f782a90ce351f14"
- },
- "0xbac9d93678c9b032c393a23e4c013e37641ad850": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x8a8266874b43f78d4097f27b2842132faed7e7e430469eec7354541eb97c3ea0"
- },
- "0xbbeebd879e1dff6918546dc0c179fdde505f2a21": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x170c927130fe8f1db3ae682c22b57f33f54eb987a7902ec251fe5dba358a2b25"
- },
- "0xbbf3f11cb5b43e700273a78d12de55e4a7eab741": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe74ac72f03e8c514c2c75f3c4f54ba31e920374ea7744ef1c33937e64c7d54f1"
- },
- "0xbc5959f43bc6e47175374b6716e53c9a7d72c594": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xfd3a8bacd3b2061cbe54f8d38cf13c5c87a92816937683652886dee936dfae10"
- },
- "0xbceef655b5a034911f1c3718ce056531b45ef03b": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x6c05d8abc81143ce7c7568c98aadfe6561635c049c07b2b4bce3019cef328cb9"
- },
- "0xbd079b0337a29cccd2ec95b395ef5c01e992b6a5": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xf0877d51b7712e08f2a3c96cddf50ff61b8b90f80b8b9817ea613a8a157b0c45"
- },
- "0xbe3eea9a483308cb3134ce068e77b56e7c25af19": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7026c939a9158beedff127a64f07a98b328c3d1770690437afdb21c34560fc57"
- },
- "0xc04b5bb1a5b2eb3e9cd4805420dba5a9d133da5b": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x72d91596112f9d7e61d09ffa7575f3587ad9636172ae09641882761cc369ecc0"
- },
- "0xc18d2be47547904f88a4f46cee75f8f4a94e1807": {
- "balance": "0",
- "nonce": 1,
- "root": "0x9c32ffd5059115bba9aed9174f5ab8b4352e3f51a85dde33000f703c9b9fe7c2",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000018a": "018a",
- "0x000000000000000000000000000000000000000000000000000000000000018b": "018b",
- "0x000000000000000000000000000000000000000000000000000000000000018c": "018c"
- },
- "key": "0xa601eb611972ca80636bc39087a1dae7be5a189b94bda392f84d6ce0d3c866b9"
- },
- "0xc19a797fa1fd590cd2e5b42d1cf5f246e29b9168": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x99dba7e9230d5151cc37ff592fa1592f27c7c81d203760dfaf62ddc9f3a6b8fd"
- },
- "0xc305dd6cfc073cfe5e194fc817536c419410a27d": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x016d92531f4754834b0502de5b0342ceff21cde5bef386a83d2292f4445782c2"
- },
- "0xc337ded6f56c07205fb7b391654d7d463c9e0c72": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7c608293e741d1eb5ae6916c249a87b6540cf0c2369e96d293b1a7b5b9bd8b31"
- },
- "0xc57aa6a4279377063b17c554d3e33a3490e67a9a": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xc192ea2d2bb89e9bb7f17f3a282ebe8d1dd672355b5555f516b99b91799b01f6"
- },
- "0xc5eaec262d853fbdaccca406cdcada6fa6dd0944": {
- "balance": "0",
- "nonce": 1,
- "root": "0x471bf8988ad0d7602d6bd5493c08733096c116ac788b76f22a682bc4558e3aa7",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000158": "0158",
- "0x0000000000000000000000000000000000000000000000000000000000000159": "0159",
- "0x000000000000000000000000000000000000000000000000000000000000015a": "015a"
- },
- "key": "0x580aa878e2f92d113a12c0a3ce3c21972b03dbe80786858d49a72097e2c491a3"
- },
- "0xc7a0a19ea8fc63cc6021af2e11ac0584d75c97b7": {
- "balance": "0",
- "nonce": 1,
- "root": "0xe2a164e2c30cf30391c88ff32a0e202194b08f2a61a9cd2927ea5ed6dfbf1056",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000e5": "e5",
- "0x00000000000000000000000000000000000000000000000000000000000000e6": "e6",
- "0x00000000000000000000000000000000000000000000000000000000000000e7": "e7"
- },
- "key": "0x86d03d0f6bed220d046a4712ec4f451583b276df1aed33f96495d22569dc3485"
- },
- "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x8e11480987056c309d7064ebbd887f086d815353cdbaadb796891ed25f8dcf61"
- },
- "0xc7d4ef05550c226c50cf0d4231ba1566d03fa98d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x3a2985c6ada67e5604b99fa2fc1a302abd0dc241ee7f14c428fa67d476868bb6",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000010d": "010d",
- "0x000000000000000000000000000000000000000000000000000000000000010e": "010e",
- "0x000000000000000000000000000000000000000000000000000000000000010f": "010f"
- },
- "key": "0x5a356862c79afffd6a01af752d950e11490146e4d86dfb8ab1531e9aef4945a1"
- },
- "0xca358758f6d27e6cf45272937977a748fd88391d": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xbccd3d2f920dfb8d70a38c9ccd5ed68c2ef6e3372199381767ce222f13f36c87"
- },
- "0xca87240ef598bd6e4b8f67b3761af07d5f575514": {
- "balance": "0",
- "nonce": 1,
- "root": "0x11f5d399ca8fb7a9af5ad481be60cf61d45493cd20206c9d0a237ce7d7571e5f",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001f3": "01f3",
- "0x00000000000000000000000000000000000000000000000000000000000001f4": "01f4",
- "0x00000000000000000000000000000000000000000000000000000000000001f5": "01f5"
- },
- "key": "0x4b238e08b80378d0815e109f350a08e5d41ec4094df2cfce7bc8b9e3115bda70"
- },
- "0xcb925b74da97bdff2130523c2a788d4beff7b3c3": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe0c5acf66bda927704953fdf7fb4b99e116857121c069eca7fb9bd8acfc25434"
- },
- "0xcccc369c5141675a9e9b1925164f30cdd60992dc": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xfe2511e8a33ac9973b773aaedcb4daa73ae82481fe5a1bf78b41281924260cf5"
- },
- "0xce24f30695b735e48b67467d76f5185ee3c7a0c5": {
- "balance": "0",
- "nonce": 1,
- "root": "0x5442e0279d3f1149de4ce8d9e2d3f01d1854755038ac1a0fae5c48749bf71f20",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001e9": "01e9",
- "0x00000000000000000000000000000000000000000000000000000000000001ea": "01ea",
- "0x00000000000000000000000000000000000000000000000000000000000001eb": "01eb"
- },
- "key": "0x47450e5beefbd5e3a3f80cbbac474bb3db98d5e609aa8d15485c3f0d733dea3a"
- },
- "0xd048d242574c45095c72eaf58d2808778117afcb": {
- "balance": "0",
- "nonce": 1,
- "root": "0x7217cb747054306f826e78aa3fc68fe4441299a337ecea1d62582f2da8a7f336",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001a8": "01a8",
- "0x00000000000000000000000000000000000000000000000000000000000001a9": "01a9",
- "0x00000000000000000000000000000000000000000000000000000000000001aa": "01aa"
- },
- "key": "0xa9656c0192bb27f0ef3f93ecc6cc990dd146da97ac11f3d8d0899fba68d5749a"
- },
- "0xd0752b60adb148ca0b3b4d2591874e2dabd34637": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x625e5c85d5f4b6385574b572709d0f704b097527a251b7c658c0c4441aef2af6"
- },
- "0xd089c853b406be547d8e331d31cbd5c4d472a349": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x389093badcaa24c3a8cbb4461f262fba44c4f178a162664087924e85f3d55710"
- },
- "0xd0918e2e24c5ddc0557a61ca11e055d2ac210fe5": {
- "balance": "0",
- "nonce": 1,
- "root": "0x25b42ec5480843a0328c63bc50eff8595d90f1d1b0afcab2f4a19b888c794f37",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000a9": "a9",
- "0x00000000000000000000000000000000000000000000000000000000000000aa": "aa",
- "0x00000000000000000000000000000000000000000000000000000000000000ab": "ab"
- },
- "key": "0xbaae09901e990935de19456ac6a6c8bc1e339d0b80ca129b8622d989b5c79120"
- },
- "0xd10b36aa74a59bcf4a88185837f658afaf3646ef": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x9fe8b6e43098a4df56e206d479c06480801485dfd8ec3da4ccc3cebf5fba89a1"
- },
- "0xd1211001882d2ce16a8553e449b6c8b7f71e6183": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x61088707d2910974000e63c2d1a376f4480ba19dde19c4e6a757aeb3d62d5439"
- },
- "0xd1347bfa3d09ec56b821e17c905605cd5225069f": {
- "balance": "0",
- "nonce": 1,
- "root": "0x287acc7869421fb9f49a3549b902fb01b7accc032243bd7e1accd8965d95d915",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000019e": "019e",
- "0x000000000000000000000000000000000000000000000000000000000000019f": "019f",
- "0x00000000000000000000000000000000000000000000000000000000000001a0": "01a0"
- },
- "key": "0x5b90bb05df9514b2d8e3a8feb3d6c8c22526b02398f289b42111426edc4fe6cf"
- },
- "0xd20b702303d7d7c8afe50344d66a8a711bae1425": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4d67d989fdb264fa4b2524d306f7b3f70ddce0b723411581d1740407da325462"
- },
- "0xd282cf9c585bb4f6ce71e16b6453b26aa8d34a53": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x0e27113c09de0a0cb0ff268c677aba17d39a3190fe15aec0ff7f54184955cba4"
- },
- "0xd2e2adf7177b7a8afddbc12d1634cf23ea1a7102": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x79afb7a5ffe6ccd537f9adff8287b78f75c37d97ea8a4dd504a08bc09926c3fa"
- },
- "0xd39b94587711196640659ec81855bcf397e419ff": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xa9de128e7d4347403eb97f45e969cd1882dfe22c1abe8857aab3af6d0f9e9b92"
- },
- "0xd48171b7166f5e467abcba12698df579328e637d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x188111c233bf6516bb9da8b5c4c31809a42e8604cd0158d933435cfd8e06e413"
- },
- "0xd4f09e5c5af99a24c7e304ca7997d26cb0090169": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe1068e9986da7636501d8893f67aa94f5d73df849feab36505fd990e2d6240e9"
- },
- "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe5302e42ca6111d3515cbbb2225265077da41d997f069a6c492fa3fcb0fdf284"
- },
- "0xd854d6dd2b74dc45c9b883677584c3ac7854e01a": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x9a1896e612ca43ecb7601990af0c3bc135b9012c50d132769dfb75d0038cc3be"
- },
- "0xd8c50d6282a1ba47f0a23430d177bbfbb72e2b84": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xfc4870c3cd21d694424c88f0f31f75b2426e1530fdea26a14031ccf9baed84c4"
- },
- "0xd917458e88a37b9ae35f72d4cc315ef2020b2418": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x4c2765139cace1d217e238cc7ccfbb751ef200e0eae7ec244e77f37e92dfaee5"
- },
- "0xdbe726e81a7221a385e007ef9e834a975a4b528c": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x5fcd9b6fce3394ad1d44733056b3e5f6306240974a16f9de8e96ebdd14ae06b1"
- },
- "0xdc60d4434411b2608150f68c4c1b818b6208acc2": {
- "balance": "0",
- "nonce": 1,
- "root": "0x27e9b6a54cf0fb188499c508bd96d450946cd6ba1cf76cf5343b5c74450f6690",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001df": "01df",
- "0x00000000000000000000000000000000000000000000000000000000000001e0": "01e0",
- "0x00000000000000000000000000000000000000000000000000000000000001e1": "01e1"
- },
- "key": "0x8510660ad5e3d35a30d4fb7c2615c040f9f698faae2ac48022e366deaeecbe77"
- },
- "0xdd1e2826c0124a6d4f7397a5a71f633928926c06": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xf0a51b55aadfa3cafdd214b0676816e574931a683f51218207c625375884e785"
- },
- "0xdd9ee108e8d5d2e8937e9fd029ec3a6640708af0": {
- "balance": "0",
- "nonce": 1,
- "root": "0x8289b558865f2ca1f54c98b5ff5df95f07c24ec605e247b58c7798605dcd794f",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001cb": "01cb",
- "0x00000000000000000000000000000000000000000000000000000000000001cc": "01cc",
- "0x00000000000000000000000000000000000000000000000000000000000001cd": "01cd"
- },
- "key": "0x2a39afbe88f572c23c90da2d059af3de125f1da5c3753c530dc5619a4857119f"
- },
- "0xde5a6f78116eca62d7fc5ce159d23ae6b889b365": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xbb861b82d884a70666afeb78bbf30cab7fdccf838f4d5ce5f4e5ca1be6be61b1"
- },
- "0xde7d1b721a1e0632b7cf04edf5032c8ecffa9f9a": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x9966a8b4cd856b175855258fa7e412ffef06d9e92b519050fa7ac06d8952ac84"
- },
- "0xdfe052578c96df94fa617102199e66110181ed2c": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x54c12444ede3e2567dd7f4d9a06d4db8c6ab800d5b3863f8ff22a0db6d09bf24"
- },
- "0xe3a71b4caf54df7d2480743c5a6770a1a5a9bcda": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe4d9c31cc9b4a9050bbbf77cc08ac26d134253dcb6fd994275c5c3468f5b7810"
- },
- "0xe3b98a4da31a127d4bde6e43033f66ba274cab0e": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x70aae390a762a4347a4d167a2431874554edf1d77579213e55fea3ec39a1257c"
- },
- "0xe439e4ea04e52cf38d0925f0722d341097378b88": {
- "balance": "0",
- "nonce": 1,
- "root": "0x6c00e091dae3d4226facd6be802c865d5db0f524754d22666406138b54fab0e6",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000008b": "8b",
- "0x000000000000000000000000000000000000000000000000000000000000008c": "8c",
- "0x000000000000000000000000000000000000000000000000000000000000008d": "8d"
- },
- "key": "0x38152bce526b7e1c2bedfc9d297250fcead02818be7806638564377af145103b"
- },
- "0xe43ce33cdb88a2efe8a3d652bfb252fd91a950a7": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xc157e0d637d64b90e2c59bc8bed2acd75696ea1ac6b633661c12ce8f2bce0d62"
- },
- "0xe52c0f008957444c48eba77467eaf2b7c127e3c5": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb888c9946a84be90a9e77539b5ac68a3c459761950a460f3e671b708bb39c41f"
- },
- "0xe5ec19296e6d1518a6a38c1dbc7ad024b8a1a248": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x519abb269c3c5710f1979ca84192e020ba5c838bdd267b2d07436a187f171232"
- },
- "0xe6dddbffde545e58030d4b8ca9e00cfb68975b5d": {
- "balance": "0",
- "nonce": 1,
- "root": "0x2afe93e1b0f26e588d2809127e4360ad7e28cf552498b2bc4847d6bcda738cdb",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000130": "0130",
- "0x0000000000000000000000000000000000000000000000000000000000000131": "0131",
- "0x0000000000000000000000000000000000000000000000000000000000000132": "0132"
- },
- "key": "0xa0f5dc2d18608f8e522ffffd86828e3d792b36d924d5505c614383ddff9be2eb"
- },
- "0xe75db02929f3d5d7c28ecdb064ece929602c06bd": {
- "balance": "0",
- "nonce": 1,
- "root": "0x9eda8eb6ca03d7c4afe47279acc90a45d1b2ca6a11afd95206f8868d20520d06",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000001e": "1e",
- "0x000000000000000000000000000000000000000000000000000000000000001f": "1f",
- "0x0000000000000000000000000000000000000000000000000000000000000020": "20"
- },
- "key": "0x600a7a5f41a67f6f759dcb664198f1c5d9b657fb51a870ce9e234e686dff008e"
- },
- "0xe7b2ceb8674516c4aeb43979808b237656ab3b6b": {
- "balance": "0",
- "nonce": 1,
- "root": "0xcd31ed5d5da79990afed0d993cb725c4e34dd97544b03466ed34212e42c28d68",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000014e": "014e",
- "0x000000000000000000000000000000000000000000000000000000000000014f": "014f",
- "0x0000000000000000000000000000000000000000000000000000000000000150": "0150"
- },
- "key": "0x75d231f57a1a9751f58769d5691f4807ab31ac0e802b1a1f6bfc77f5dff0adbf"
- },
- "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xec3e92967d10ac66eff64a5697258b8acf87e661962b2938a0edcd78788f360d"
- },
- "0xe82c38488eded9fb72a5ed9e039404c537f20b13": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7a2464bc24d90557940e93a3b73308ea354ed7d988be720c545974a17959f93f"
- },
- "0xe920ab4e34595482e98b2c0d16be164c49190546": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xd623b1845175b206c127c08046281c013e4a3316402a771f1b3b77a9831143f5"
- },
- "0xe99c76a6c3b831a926ab623476d2ec14560c09b4": {
- "balance": "0",
- "nonce": 1,
- "root": "0x0fd8e99b1b4ab4eb8c6c2218221ae6978cc67433341ed8a1ad6185d34fa82c61",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000014": "14",
- "0x0000000000000000000000000000000000000000000000000000000000000015": "15",
- "0x0000000000000000000000000000000000000000000000000000000000000016": "16"
- },
- "key": "0x6641e3ed1f264cf275b53bb7012dabecf4c1fca700e3db989e314c24cc167074"
- },
- "0xe9b17e54dba3344a23160cb2b64f88024648c53e": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xb4f179efc346197df9c3a1cb3e95ea743ddde97c27b31ad472d352dba09ee1f5"
- },
- "0xebe708edc62858621542b7354bb478228eb95577": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7bff1b6b56891e66584ced453d09450c2fed9453b1644e8509bef9f9dd081bbb"
- },
- "0xebf37af41b6d7913aed3b9cc650d1e8f58a3d785": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x209b102e507b8dfc6acfe2cf55f4133b9209357af679a6d507e6ee87112bfe10"
- },
- "0xeda8645ba6948855e3b3cd596bbb07596d59c603": {
- "balance": "1000000000000000000000000000000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xabd8afe9fbf5eaa36c506d7c8a2d48a35d013472f8182816be9c833be35e50da"
- },
- "0xef6cbd2161eaea7943ce8693b9824d23d1793ffb": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xce732a5e3b88ae26790aeb390a2bc02c449fdf57665c6d2c2b0dbce338c4377e"
- },
- "0xf031efa58744e97a34555ca98621d4e8a52ceb5f": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x00748bacab20da9ae19dd26a33bd10bbf825e28b3de84fc8fe1d15a21645067f"
- },
- "0xf068ae4089a66c79afe47d6e513f718838d8f73f": {
- "balance": "0",
- "nonce": 1,
- "root": "0x72c89221daedccdd3fbba66c1b081b3634ce89d5a069be97ff7832778f7b023a",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000003c": "3c",
- "0x000000000000000000000000000000000000000000000000000000000000003d": "3d",
- "0x000000000000000000000000000000000000000000000000000000000000003e": "3e"
- },
- "key": "0x37310559ceaade42e45b3e3f05925aadca9e60aeeb9dd60d824875d9e9e71e26"
- },
- "0xf0a279d2276de583ebcd7f69a6532f13349ad656": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x11eb0304c1baa92e67239f6947cb93e485a7db05e2b477e1167a8960458fa8cc"
- },
- "0xf0a5f15ef71424b5d543394ec46c46bfd2817747": {
- "balance": "0",
- "nonce": 1,
- "root": "0xbefe55b606a865c3898ec2093bd160b37c3976011516f43736cac2a9a7ecd4ca",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000000e0": "e0",
- "0x00000000000000000000000000000000000000000000000000000000000000e1": "e1",
- "0x00000000000000000000000000000000000000000000000000000000000000e2": "e2"
- },
- "key": "0xdbea1fd70fe1c93dfef412ce5d8565d87d6843aac044d3a015fc3db4d20a351b"
- },
- "0xf14d90dc2815f1fc7536fc66ca8f73562feeedd1": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xabdc44a9bc7ccf1ce76b942d25cd9d731425cd04989597d7a2e36423e2dac7ee"
- },
- "0xf16ba6fa61da3398815be2a6c0f7cb1351982dbc": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x728325587fa336e318b54298e1701d246c4f90d6094eb95635d8a47f080f4603"
- },
- "0xf1fc98c0060f0d12ae263986be65770e2ae42eae": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xca7ad42d3c4fe14ddb81bf27d4679725a1f6c3f23b688681bb6f24262d63212f"
- },
- "0xf4f97c88c409dcf3789b5b518da3f7d266c48806": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x84c7ee50e102d0abf5750e781c1635d60346f20ab0d5e5f9830db1a592c658ff"
- },
- "0xf5347043ae5fca9412ca2c72aee17a1d3ba37691": {
- "balance": "0",
- "nonce": 1,
- "root": "0xf390264acaf1433c0ea670b2c094a30076641469524ae24f5fddc44e99c5b032",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000004f": "4f",
- "0x0000000000000000000000000000000000000000000000000000000000000050": "50",
- "0x0000000000000000000000000000000000000000000000000000000000000051": "51"
- },
- "key": "0xa5541b637a896d30688a80b7affda987d9597aac7ccd9799c15999a1d7d094e2"
- },
- "0xf57fd44ccea35d9c530ef23f3e55de2f6e5415bf": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x6d4162ce16817e46fa2ddc5e70cee790b80abc3d6f7778cfbaed327c5d2af36c"
- },
- "0xf6152f2ad8a93dc0f8f825f2a8d162d6da46e81f": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x7e839d9fd8a767e90a8b2f48a571f111dd2451bc5910cf2bf3ae79963e47e34d"
- },
- "0xf61ac2a10b7981a12822e3e48671ebd969bce9c2": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xbfe5dee42bddd2860a8ebbcdd09f9c52a588ba38659cf5e74b07d20f396e04d4"
- },
- "0xf7eaadcf76ffcf006a86deb2f17d0b8fe0b211a8": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x1dff76635b74ddba16bba3054cc568eed2571ea6becaabd0592b980463f157e2"
- },
- "0xf83af0ceb5f72a5725ffb7e5a6963647be7d8847": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x662d147a16d7c23a2ba6d3940133e65044a90985e26207501bfca9ae47a2468c"
- },
- "0xf8d20e598df20877e4d826246fc31ffb4615cbc0": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xa248850a2e0d6fe62259d33fc498203389fa754c3bd098163e86946888e455bd"
- },
- "0xf91193b7442e274125c63003ee53f4ce5836f424": {
- "balance": "0",
- "nonce": 1,
- "root": "0xb25f9e4f6f913a4a1e8debf7d4752bfa521d147bb67c69d5855301e76dd80633",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001d5": "01d5",
- "0x00000000000000000000000000000000000000000000000000000000000001d6": "01d6",
- "0x00000000000000000000000000000000000000000000000000000000000001d7": "01d7"
- },
- "key": "0xbfe731f071443795cef55325f32e6e03c8c0d0398671548dfd5bc96b5a6555c0"
- },
- "0xf997ed224012b1323eb2a6a0c0044a956c6b8070": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xbcebc35bfc663ecd6d4410ee2363e5b7741ee953c7d3359aa585095e503d20c8"
- },
- "0xfb7b49bc3178263f3a205349c0e8060f44584500": {
- "balance": "0",
- "nonce": 1,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xa03fe040e4264070290e95ffe06bf9da0006556091f17c5df5abaa041de0c2f7"
- },
- "0xfb95aa98d6e6c5827a57ec17b978d647fcc01d98": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xf63360f8bb23f88b0a564f9e07631c38c73b4074ba4192d6131336ef02ee9cf2"
- },
- "0xfcc8d4cd5a42cca8ac9f9437a6d0ac09f1d08785": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xd3443fa37ee617edc09a9c930be4873c21af2c47c99601d5e20483ce6d01960a"
- },
- "0xfd5e6e8c850fafa2ba2293c851479308c0f0c9e7": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0x1c248f110218eaae2feb51bc82e9dcc2844bf93b88172c52afcb86383d262323"
- },
- "0xfde502858306c235a3121e42326b53228b7ef469": {
- "balance": "1",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe3d7213321be060ae2e1ff70871131ab3e4c9f4214a17fe9441453745c29365b"
- },
- "0xfe1dcd3abfcd6b1655a026e60a05d03a7f71e4b6": {
- "balance": "100000000000",
- "nonce": 0,
- "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "key": "0xe31747e6542bf4351087edfbeb23e225e4217b5fa25d385f33cd024df0c9ae12"
- },
- "0xfe96089d9b79f2d10f3e8b0fb9629aeb6cc7cde6": {
- "balance": "0",
- "nonce": 1,
- "root": "0xcf2123d110997f426821d3e541334e43fdd6b5286c3c33252c24b5f8aafc7aa2",
- "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
- "storage": {
- "0x00000000000000000000000000000000000000000000000000000000000001d0": "01d0",
- "0x00000000000000000000000000000000000000000000000000000000000001d1": "01d1",
- "0x00000000000000000000000000000000000000000000000000000000000001d2": "01d2"
- },
- "key": "0xbf632670b6fa18a8ad174a36180202bfef9a92c2eeda55412460491ae0f6a969"
- }
- }
-}
\ No newline at end of file
diff --git a/cmd/devp2p/internal/ethtest/testdata/newpayload.json b/cmd/devp2p/internal/ethtest/testdata/newpayload.json
deleted file mode 100644
index 7f8c99afa9..0000000000
--- a/cmd/devp2p/internal/ethtest/testdata/newpayload.json
+++ /dev/null
@@ -1,13268 +0,0 @@
-[
- {
- "jsonrpc": "2.0",
- "id": "np72",
- "method": "engine_newPayloadV1",
- "params": [
- {
- "parentHash": "0x9e8a444b740df016941ecc815fe9eebeaa04a047db6569855573a52a8cb78cdd",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x74035b613e4ea1072fd029f35d0fa5b26fbfaa54cabebcec88b9ee07cca321ae",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x48",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x2d0",
- "extraData": "0x",
- "baseFeePerGas": "0x568d2f9",
- "blockHash": "0xf0a50b18d597552b6ad8a711f4ac1f7ab225d59daa74137f689256a16a0ff809",
- "transactions": [
- "0xf86a39840568d2fa8252089444bd7ae60f478fae1061e11a7739f4b94d1daf9101808718e5bb3abd10a0a050fc2310f542cf90b3376f54d296158f5be7ad852db200f9956e3210c0f8125ca04f880fe872915a7843c37147a69758eff0a93cfaf8ce54f36502190e54b6e5c7"
- ],
- "withdrawals": null,
- "blobGasUsed": null,
- "excessBlobGas": null
- }
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np73",
- "method": "engine_newPayloadV1",
- "params": [
- {
- "parentHash": "0xf0a50b18d597552b6ad8a711f4ac1f7ab225d59daa74137f689256a16a0ff809",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x18b68edcdfc835d5db51310e7960eaf0c0afcc5a6611282d2085f3282b2f9e3f",
- "receiptsRoot": "0xabc882591cb5b81b276a4e5cd873e1be7e1b4a69f630d2127f06d63c8db5acb2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x49",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146e8",
- "timestamp": "0x2da",
- "extraData": "0x",
- "baseFeePerGas": "0x4bbd14a",
- "blockHash": "0x662ab680f6b14375e7642874a16a514d1ecffc9921a9d8e143b5ade129ad554b",
- "transactions": [
- "0xf8853a8404bbd14b830146e88080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a027748abc264040530bca00d1cc86b199586c1fe26955cd5e250b97e2b9ca3128a050a822d9df3b63e6911766d4ae8c722f5afee7a6c06a7b5eb73772a5b137ca36"
- ],
- "withdrawals": null,
- "blobGasUsed": null,
- "excessBlobGas": null
- }
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np74",
- "method": "engine_newPayloadV1",
- "params": [
- {
- "parentHash": "0x662ab680f6b14375e7642874a16a514d1ecffc9921a9d8e143b5ade129ad554b",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6fb7295e0a62bff03ddeba56ba643cd817fab6bc8df11309f8e8a3dbcf7d502e",
- "receiptsRoot": "0x7b9d8080a095524251324dc00e77d3ecf4c249c48eebed2e4a5acedc678c70b4",
- "logsBloom": "0x000800000000000000000000000000000900000000000000000000000000c0080000000000000010000000020000000000000004100000000480008020100000000000000000000000000000001000200000000000000010000010000000000000000000000000000000000000000000000000000000000200000000000000800001000000000000000000000000000000000004000000000000000800000000008000000000000001000000000002000000000000000000000000000000080000000000000000200404000000000000000000000000000000000000000000000000080100000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x4a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc61",
- "timestamp": "0x2e4",
- "extraData": "0x",
- "baseFeePerGas": "0x424ad37",
- "blockHash": "0x9981d4e953d402b0b1554ef62ebbeb7760790a5e53191c9753329b6a3eab3d13",
- "transactions": [
- "0xf87c3b840424ad3883011f548080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a050e3677064fe82b08a8fae8cea250fbaf00dbca1b6921cffd311ca17c7979865a051e738138eab4b31f1ba163b8ed2cfd778af98eff583cd5a26fcd9bd673fe027"
- ],
- "withdrawals": null,
- "blobGasUsed": null,
- "excessBlobGas": null
- }
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np75",
- "method": "engine_newPayloadV1",
- "params": [
- {
- "parentHash": "0x9981d4e953d402b0b1554ef62ebbeb7760790a5e53191c9753329b6a3eab3d13",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x65038690e44bf1ee49d47beb6efc7cc84d7f01d2ba645768e3a584a50979b36d",
- "receiptsRoot": "0xf5419129ce2f36d1b2206d4723f3e499691ad9aee741223426cda1b22e601a19",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x4b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36c",
- "timestamp": "0x2ee",
- "extraData": "0x",
- "baseFeePerGas": "0x3a051bc",
- "blockHash": "0xc5e8361f3f3ba7bfbed66940c015f351d498ed34d48f8de6e020ffffbcbbec61",
- "transactions": [
- "0xf8673c8403a051bd83020888808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0dd01417c1ac62f9e593b07848f93c1f5ab729e73a493e22141f6e1c6e8a4f94fa00b9e979c6bae8ab4a90b7b2ba61d590d800e5411bc12be320efc3fb7310506e3"
- ],
- "withdrawals": null,
- "blobGasUsed": null,
- "excessBlobGas": null
- }
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np76",
- "method": "engine_newPayloadV1",
- "params": [
- {
- "parentHash": "0xc5e8361f3f3ba7bfbed66940c015f351d498ed34d48f8de6e020ffffbcbbec61",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3b8d5706f2e3d66bb968de876e2683d75dce76d04118bc0184d6af44fb10196f",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x4c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x2f8",
- "extraData": "0x",
- "baseFeePerGas": "0x32ca5cf",
- "blockHash": "0xcb51fdebc936f135546a0ff78a7ce246aee0a5c73b41b7accdc547825bb97766",
- "transactions": [
- "0x02f86d870c72dd9d5e883e3d0184032ca5d08252089472dfcfb0c470ac255cde83fb8fe38de8a128188e0180c080a0116da1fc19daf120ddc2cc3fa0a834f9c176028e65d5f5d4c86834a0b4fe2a36a017001c3ad456650dd1b28c12f41c94f50b4571da5b62e9f2a95dff4c8c3f61fd"
- ],
- "withdrawals": null,
- "blobGasUsed": null,
- "excessBlobGas": null
- }
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np77",
- "method": "engine_newPayloadV1",
- "params": [
- {
- "parentHash": "0xcb51fdebc936f135546a0ff78a7ce246aee0a5c73b41b7accdc547825bb97766",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3b8d17721b733ce2b6e7607a69fb6bf678dbabcb708f64cb5d211915b3238090",
- "receiptsRoot": "0xabc882591cb5b81b276a4e5cd873e1be7e1b4a69f630d2127f06d63c8db5acb2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x4d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146e8",
- "timestamp": "0x302",
- "extraData": "0x",
- "baseFeePerGas": "0x2c71f92",
- "blockHash": "0x49b74bc0dea88f3125f95f1eb9c0503e90440f7f23b362c4f66269a14a2dcc3e",
- "transactions": [
- "0xf8853e8402c71f93830146e88080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a00cb7fb1bba811ea1948e035550c66840f0491d29d0ae9a6e4726e77a57ca8058a041523fc7133a6473784720a68d7f7f1d54d8a5a1f868640783a0284fb22f4309"
- ],
- "withdrawals": null,
- "blobGasUsed": null,
- "excessBlobGas": null
- }
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np78",
- "method": "engine_newPayloadV2",
- "params": [
- {
- "parentHash": "0x49b74bc0dea88f3125f95f1eb9c0503e90440f7f23b362c4f66269a14a2dcc3e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf21b9b380d6c5833270617a17ea187e1f85a6556f1c1dfaf6bcb0700c88abe24",
- "receiptsRoot": "0xb08f0ccb7116304320035e77c514c9234f2d5a916d68de82ba20f0a24ab6d9e4",
- "logsBloom": "0x00000000000000400000000000200000000000000000000000000000000000000000200010000000000000000000000000000040000400000010000000000020000000000000000000000000000000000000000000000000000000900000000000800000000800000010000008000000000000000000000102000000000000100000080000000100000000000000000000000000000008000000000000008000800800000000000000000000400000000008200000000200200000000000000000000000000000200000000000000000000000000000000000000000000000000000000011000000000000800000000000000000000000000000000000000008",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x4e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x30c",
- "extraData": "0x",
- "baseFeePerGas": "0x26e6e24",
- "blockHash": "0x157062b78da942ff0b0e892142e8230ffdf9330f60c5f82c2d66291a6472fd7c",
- "transactions": [
- "0xf87c3f84026e6e2583011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0fa1ba7a3639ec15944466d72a2e972d5eda143fc54f07aa47ecd56769ba5fbf8a041018f9af7a55685cbfa25d35f353e4bccef32a5e0bcdb373191d34cfed9a8db"
- ],
- "withdrawals": [],
- "blobGasUsed": null,
- "excessBlobGas": null
- }
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np79",
- "method": "engine_newPayloadV2",
- "params": [
- {
- "parentHash": "0x157062b78da942ff0b0e892142e8230ffdf9330f60c5f82c2d66291a6472fd7c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8bb2c279cf46bd7eb856cc00fdce9bb396b21f65da47fdf0f13b41e0c0e0aa7f",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x4f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x316",
- "extraData": "0x",
- "baseFeePerGas": "0x220c283",
- "blockHash": "0x39a05d1b50f4334060d2b37724df159784c5cbfe1a679f3b99d9f725aed4d619",
- "transactions": [
- "0xf86740840220c2848302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0bcd36ef6498fd3ce093febc53b3e35004a9d9200816306515f5ffad98140426fa00656b7e75310845c1d2e47495ed7765d687f0a943a604644d9cf7b97b01f300f"
- ],
- "withdrawals": [],
- "blobGasUsed": null,
- "excessBlobGas": null
- }
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np80",
- "method": "engine_newPayloadV2",
- "params": [
- {
- "parentHash": "0x39a05d1b50f4334060d2b37724df159784c5cbfe1a679f3b99d9f725aed4d619",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x62b57c9d164c28bc924ec89b1fe49adc736ee45e171f759f697899a766e3f7a4",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x50",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x320",
- "extraData": "0x",
- "baseFeePerGas": "0x1dce188",
- "blockHash": "0xa7806a3f4d0f3d523bf65b89164372b524c897688d22d2ef2e218f7abb9cbddb",
- "transactions": [
- "0xf869418401dce189825208945c62e091b8c0565f1bafad0dad5934276143ae2c01808718e5bb3abd10a0a0b82a5be85322581d1e611c5871123983563adb99e97980574d63257ab98807d59fdd49901bf0b0077d71c9922c4bd8449a78e2918c6d183a6653be9aaa334148"
- ],
- "withdrawals": [],
- "blobGasUsed": null,
- "excessBlobGas": null
- }
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np81",
- "method": "engine_newPayloadV2",
- "params": [
- {
- "parentHash": "0xa7806a3f4d0f3d523bf65b89164372b524c897688d22d2ef2e218f7abb9cbddb",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x1820989c0844509c8b60af1baa9030bdcc357bc9462b8612493af9d17c76eb3d",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x51",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x32a",
- "extraData": "0x",
- "baseFeePerGas": "0x1a14dd8",
- "blockHash": "0x7ec45b0f5667acb560d6e0fee704bb74f7738deb2711e5f380e4a9b2528d29c1",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x0",
- "validatorIndex": "0x5",
- "address": "0x4ae81572f06e1b88fd5ced7a1a000945432e83e1",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": null,
- "excessBlobGas": null
- }
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np82",
- "method": "engine_newPayloadV2",
- "params": [
- {
- "parentHash": "0x7ec45b0f5667acb560d6e0fee704bb74f7738deb2711e5f380e4a9b2528d29c1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8145365a52eb3a4b608966d28a8ed05598c13af426c7ab24f28f2bdc7a00b12b",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x52",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x334",
- "extraData": "0x",
- "baseFeePerGas": "0x16d241d",
- "blockHash": "0x8dbcafaa0e32cd9f71f1d5b0f22f549aee0fddce3bda577ac200e24c7dc8ba62",
- "transactions": [
- "0xf8854284016d241e830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a061c5ecaf5f73e89370f5b35c31bce60d04c7417cc70cc897beae6429cb6d3880a02271644378271ec296459da5181507d52bdbd4489600690c32998cdb4b032042"
- ],
- "withdrawals": [],
- "blobGasUsed": null,
- "excessBlobGas": null
- }
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np83",
- "method": "engine_newPayloadV2",
- "params": [
- {
- "parentHash": "0x8dbcafaa0e32cd9f71f1d5b0f22f549aee0fddce3bda577ac200e24c7dc8ba62",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x07cc0bca2e8f3b243635dc6f988372dd2427b6090f1035d06f2eff2e99315170",
- "receiptsRoot": "0xace7ae7e3c226cecca4b33082b19cd1023960138a576ef77fddadcc223b4250a",
- "logsBloom": "0x40000010010000000000000100000c00000001000000000000000000000000000000000200000000000042000000000000001000000000000000000000000000000000000000000000000820040000800000000000004000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000001000800000001000000000000000000000000000000000000000004000004000000000000000410000000000000000000000040000000000000000004000000000000000000000000000400001000000000000000000400000000000000000000200080000000000000000000000010000000040000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x53",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x33e",
- "extraData": "0x",
- "baseFeePerGas": "0x13f998a",
- "blockHash": "0x686c223412a42d17a7fe0fe2a8b15d6181afa366cccd26a0b35a7581c0686721",
- "transactions": [
- "0xf87c4384013f998b83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a01001f6f02c9dac33915eb5d0fe81d88599a29341d84ee6f46b1ef05d270a0c1fa05ea1dbc664d9f4a83b4743bc40579e6b727ff8b5e78c4249bd59aa47c33d770f"
- ],
- "withdrawals": [],
- "blobGasUsed": null,
- "excessBlobGas": null
- }
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np84",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x686c223412a42d17a7fe0fe2a8b15d6181afa366cccd26a0b35a7581c0686721",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe1a71059650ccefaf7d0a407c43a87ccc9fe63a6369a46509074658f714c54ad",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x54",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x348",
- "extraData": "0x",
- "baseFeePerGas": "0x117b7e1",
- "blockHash": "0x8a76d39e76bdf6ccf937b5253ae5c1db1bdc80ca64a71edccd41ba0c35b17b84",
- "transactions": [
- "0xf86744840117b7e28302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0b4a7e6c791f457a428f870b8df8ee0148acac74050aeea658c3dad552a7e8140a0793951ba22a6f628dd86ec8964b09c74e0f77306a28dd276dfe42f40ee76c73c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x83472eda6eb475906aeeb7f09e757ba9f6663b9f6a5bf8611d6306f677f67ebd"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np85",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8a76d39e76bdf6ccf937b5253ae5c1db1bdc80ca64a71edccd41ba0c35b17b84",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x198575d6df4370febe3a96865e4a2280a5caa2f7bd55058b27ea5f3082db8d99",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x55",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x352",
- "extraData": "0x",
- "baseFeePerGas": "0xf4dd4f",
- "blockHash": "0xc0d03736d9e3c2d4e14115f9702497daf53b39875122e51932f4b9b752ba7059",
- "transactions": [
- "0x02f86c870c72dd9d5e883e450183f4dd5082520894a25513c7e0f6eaa80a3337ee18081b9e2ed09e000180c080a0e8ac7cb5028b3e20e8fc1ec90520dab2be89c8f50f4a14e315f6aa2229d33ce8a07c2504ac2e5b2fe4d430db81a923f6cc2d73b8fd71281d9f4e75ee9fc18759b9"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x2c809fbc7e3991c8ab560d1431fa8b6f25be4ab50977f0294dfeca9677866b6e"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np86",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xc0d03736d9e3c2d4e14115f9702497daf53b39875122e51932f4b9b752ba7059",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x90c402a8569aae0c095540a9762aefac4f43df4e97fc7a24df1d4051c555bc2c",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x56",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x35c",
- "extraData": "0x",
- "baseFeePerGas": "0xd64603",
- "blockHash": "0xa7323a02aa9acf63f26368292292d4bcb9dc7ef33296bbd98f423b24db3408bd",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x1",
- "validatorIndex": "0x5",
- "address": "0xde5a6f78116eca62d7fc5ce159d23ae6b889b365",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x756e335a8778f6aadb2cc18c5bc68892da05a4d8b458eee5ce3335a024000c67"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np87",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa7323a02aa9acf63f26368292292d4bcb9dc7ef33296bbd98f423b24db3408bd",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x7e1765cf5abdf835814ee20c9e401b0e99e2b31f2ad8ea14c62ef732c6e63d2d",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x57",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x366",
- "extraData": "0x",
- "baseFeePerGas": "0xbb7d43",
- "blockHash": "0xbbd89c9c2805888d9d1397d066495db1ce1c570e23b5b6f853dc0ff698575a04",
- "transactions": [
- "0xf8844683bb7d44830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a052c928a2062b214d44b9a641faf87e439fbc5a07f571021f0f3c8fd2a2087a57a0650c77ab1cd522a7d3a435058f53636b6ae86d19fd4f691bf61c13fd8b7de69a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4b118bd31ed2c4eeb81dc9e3919e9989994333fe36f147c2930f12c53f0d3c78"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np88",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xbbd89c9c2805888d9d1397d066495db1ce1c570e23b5b6f853dc0ff698575a04",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3ec8183c28814317cb7a7b86633041db40de94b45a47dab5614b21087c308648",
- "receiptsRoot": "0xe2e7a47b1c0009f35c3a46c96e604a459822fe9f02929afa823f2c514f1fbd39",
- "logsBloom": "0x00000000000000000000000000000002000000000000000000000000000000000000000800000000000000000000000200000000008000000000000000000000000000000800000000000000800000000000000000000002000000000100000000000000000000000000000000000000001000000000400000000000000000000000000000000001000000000000000000000000000000000000000000000020000000000000400000000000000100000000000100000000000000000000100200000000000000000000000000000010400000000000000050080004000000400000000010000000800030001000000000000000004000000000000000000a00",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x58",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x370",
- "extraData": "0x",
- "baseFeePerGas": "0xa41aed",
- "blockHash": "0xe67371f91330dd937081250eeda098394453c2ced0b6ffd31a67f8d95261d849",
- "transactions": [
- "0xf87b4783a41aee83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa09799e22509fcf203235570e7ba0df80bad6124b89b812146b50bca27f03161a9a0118a4f264815d7cf1a069009bff736f04369e19e364bd1a409a4c4865ec7d81f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd0122166752d729620d41114ff5a94d36e5d3e01b449c23844900c023d1650a5"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np89",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe67371f91330dd937081250eeda098394453c2ced0b6ffd31a67f8d95261d849",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x07118ca8999c49a924f92b54d21cecad7cbcc27401d16181bbcdee05b613399c",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x59",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x37a",
- "extraData": "0x",
- "baseFeePerGas": "0x8fa090",
- "blockHash": "0x395eda9767326b57bbab88abee96eea91286c412a7297bedc3f1956f56db8b18",
- "transactions": [
- "0xf86648838fa0918302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0fd5a86a96cbf94d2bba5c7fb6efd2bf501dd30c8b37e896ae360b40ab693272aa0331e570a5b3ce2cef67731c331bba3e6de2ede8145dd0719ce6dfcca587c64ba"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x60c606c4c44709ac87b367f42d2453744639fc5bee099a11f170de98408c8089"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np90",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x395eda9767326b57bbab88abee96eea91286c412a7297bedc3f1956f56db8b18",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x0d9d080dde44cc511dc9dc457b9839409e1b3a186e6b9a5ae642b5354acc6cc4",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x5a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x384",
- "extraData": "0x",
- "baseFeePerGas": "0x7dbb15",
- "blockHash": "0x919c92e04181d139a4860cce64252ab9c14a5be9fa6adfc76b4b27f804fce2b9",
- "transactions": [
- "0xf86949837dbb1682520894bbeebd879e1dff6918546dc0c179fdde505f2a2101808718e5bb3abd10a0a002f0119acaae03520f87748a1a855d0ef7ac4d5d1961d8f72f42734b5316a849a0182ad3a9efddba6be75007e91afe800869a18a36a11feee4743dde2ab6cc54d9"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x6ee04e1c27edad89a8e5a2253e4d9cca06e4f57d063ed4fe7cc1c478bb57eeca"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np91",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x919c92e04181d139a4860cce64252ab9c14a5be9fa6adfc76b4b27f804fce2b9",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa5aea2e2c617a5a3a341e01c72fbf960e809dd589b4a988a04d50f6fb666b6c8",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x5b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x38e",
- "extraData": "0x",
- "baseFeePerGas": "0x6e05f1",
- "blockHash": "0x17a574ee7489840acc4a8aecd1d7b540ba9b033b7236c13d0b0a5403ff07f7f3",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x2",
- "validatorIndex": "0x5",
- "address": "0x245843abef9e72e7efac30138a994bf6301e7e1d",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x36616354a17658eb3c3e8e5adda6253660e3744cb8b213006f04302b723749a8"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np92",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x17a574ee7489840acc4a8aecd1d7b540ba9b033b7236c13d0b0a5403ff07f7f3",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd1e927e1a7106591aa46d3e327e9e7d493248786b4c6284bd138d329c6cb1fbb",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x5c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x398",
- "extraData": "0x",
- "baseFeePerGas": "0x604533",
- "blockHash": "0x7848fe02daea45d47101fbe84b6d94576452c2d0cb9261bc346343b5b2df844f",
- "transactions": [
- "0xf8844a83604534830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0667955bfddc6500ad6a0a298d08a0fdeb453d483be41f7496f557039c99d5b8ea06ad5f6871f3d78ea543484d51590454f8a65b5b1b89f58992ff94a02a30c0c93"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc13802d4378dcb9c616f0c60ea0edd90e6c2dacf61f39ca06add0eaa67473b94"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np93",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x7848fe02daea45d47101fbe84b6d94576452c2d0cb9261bc346343b5b2df844f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8d4e68f0a1ad7578b1627d665263c04856efa4eb4938014a8c794547d597f89b",
- "receiptsRoot": "0xa37a62134a71ef21b16f2eee431b806a4d13c0a80a11ddeb5cbb18e3707aecdf",
- "logsBloom": "0x00000000000000000000000002000000000021000000000000000000240000000000000000000000000004000000010000000000000000000000000000000000000008000000000000000000000000000020000000000000000400000400000000000400000000000000000000000000000000000080000004000000000000000000000000000800000000000000000000000000000000000000000000002000000080000002010000420000000000000000000000000040402002000200000000000000000000000000008000000000000000000000000100000000000000000000000000000000000084000000000080000000000000000000040000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x5d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x3a2",
- "extraData": "0x",
- "baseFeePerGas": "0x544364",
- "blockHash": "0x6c5d29870c54d8c4e318523a7ea7fb9756b6633bbdf70dcb1e4659ff3564615b",
- "transactions": [
- "0xf87b4b8354436583011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a09662003f67b0c146ecaa0c074b010d1f27d0803dc1809fd4f6ea80a5f09c34aea0100a5c0fbfdbee733f1baecb893a33ce2d42316303a5ddf1515645dfbb40d103"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x8b345497936c51d077f414534be3f70472e4df101dee8820eaaff91a6624557b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np94",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x6c5d29870c54d8c4e318523a7ea7fb9756b6633bbdf70dcb1e4659ff3564615b",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xbd07ab096fc1b3e50229bcff0fc5fca9e9f7d368e77fe43a71e468b7b0adb133",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x5e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x3ac",
- "extraData": "0x",
- "baseFeePerGas": "0x49bf97",
- "blockHash": "0xe7b8c1ca432a521b1e7f0cf3cb63be25da67e3364cc0b02b0a28e06ba8deed80",
- "transactions": [
- "0xf8664c8349bf988302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa03b3113a7b1919311fbc03ee25c4829b60f07341c72107de061da06eef7ec0856a01bc4eeb29301e1610984ee042f8236863ad78402d3d55c69a6922d67238dde75"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe958485d4b3e47b38014cc4eaeb75f13228072e7b362a56fc3ffe10155882629"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np95",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe7b8c1ca432a521b1e7f0cf3cb63be25da67e3364cc0b02b0a28e06ba8deed80",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4a154c665e5b68adadf9455bd905da607f0279b5d2b4bfb0c1a3db5b6a908d4d",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x5f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x3b6",
- "extraData": "0x",
- "baseFeePerGas": "0x408f22",
- "blockHash": "0xaa62b2faefe50fe1562f3fb5bf96a765ca7c92164465e226fc9a8ba75cabc387",
- "transactions": [
- "0x02f86c870c72dd9d5e883e4d0183408f2382520894d2e2adf7177b7a8afddbc12d1634cf23ea1a71020180c001a08556dcfea479b34675db3fe08e29486fe719c2b22f6b0c1741ecbbdce4575cc6a01cd48009ccafd6b9f1290bbe2ceea268f94101d1d322c787018423ebcbc87ab4"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x3346706b38a2331556153113383581bc6f66f209fdef502f9fc9b6daf6ea555e"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np96",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xaa62b2faefe50fe1562f3fb5bf96a765ca7c92164465e226fc9a8ba75cabc387",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3b2adb11488a7634a20bc6f81bcc0211993fe790f75eeb1f4889a98d1bdbcb37",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x60",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x3c0",
- "extraData": "0x",
- "baseFeePerGas": "0x387e65",
- "blockHash": "0x6a6df67e09c4411bb89664cbc78f78237bb6a2fc299bc6a682cca406feb8dd4d",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x3",
- "validatorIndex": "0x5",
- "address": "0x8d33f520a3c4cef80d2453aef81b612bfe1cb44c",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x346910f7e777c596be32f0dcf46ccfda2efe8d6c5d3abbfe0f76dba7437f5dad"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np97",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x6a6df67e09c4411bb89664cbc78f78237bb6a2fc299bc6a682cca406feb8dd4d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd67c810501ca4f4ee4262e86dcaf793ca75637249bf157dee4800274372f236f",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x61",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x3ca",
- "extraData": "0x",
- "baseFeePerGas": "0x316e99",
- "blockHash": "0xfec8ebc1c3d312ec3537d860b406110aeac3980763165d0026ecab156a377bdf",
- "transactions": [
- "0xf8844e83316e9a830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a036b2adb5bbd4d43198587067bf0b669e00862b0807adb947ee4c9869d79f9d8ca063e0b200645435853dceed29fd3b4c55d94b868a0aa6513ca6bd730705f2c9ef"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe62a7bd9263534b752176d1ff1d428fcc370a3b176c4a6312b6016c2d5f8d546"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np98",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xfec8ebc1c3d312ec3537d860b406110aeac3980763165d0026ecab156a377bdf",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xae82dda9df38bcc8d99e311b63ae055591953577b6b560840658eca24ecacee9",
- "receiptsRoot": "0x675ab823f90b9bdd3d04afb108bc1a1dcd77654a0de4c8a539e355b6d24f29f4",
- "logsBloom": "0x10000000000000000010000000000020000000000008000000000000000000000000000000000000000000020000000000000000000000000000040000010000000000000000000000000000000000000000000000008000000000000000000000000080000110000000000800000002000000800040800000000040000000000000004000000000001000000000000000000000000000000000008000000000000000000000000000000020010080001000000000000000000000000004008000004000008000000000000000040000000400000000000001000000000000000000000008000000000000000000000200000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x62",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x3d4",
- "extraData": "0x",
- "baseFeePerGas": "0x2b4449",
- "blockHash": "0x3124d842afa1334bb72f0a8f058d7d3ad489d6c6bd684f81d3ecdf71d287f517",
- "transactions": [
- "0xf87b4f832b444a83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0824522ae97a912dd75a883798f4f296d960f6a7be8510e2a4a121d85f496da16a008cade93390e31f7b0e6615b4defe3bd4225b7a4d97a7835c02ad0b4d004fb5b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xffe267d11268388fd0426a627dedddeb075d68327df9172c0445cd2979ec7e4d"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np99",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x3124d842afa1334bb72f0a8f058d7d3ad489d6c6bd684f81d3ecdf71d287f517",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x588419f24b32499745bbae81eb1a303d563c31b2743c8621d39b820c2affb3cb",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x63",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x3de",
- "extraData": "0x",
- "baseFeePerGas": "0x25de20",
- "blockHash": "0x53d785a42c58a40edbc18e6bee93d4072a4281c744f697f9b5cae1d0b3bf2962",
- "transactions": [
- "0xf866508325de218302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0744b7f5fb26cc6dd16b1849d0c04236e3b4e993f37e5b91de6e55f5f899450baa0456225c91372bddd4e3a1dde449e59ad62d63f0c850f9b869870ea2621494fd7"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x23cc648c9cd82c08214882b7e28e026d6eb56920f90f64731bb09b6acf515427"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np100",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x53d785a42c58a40edbc18e6bee93d4072a4281c744f697f9b5cae1d0b3bf2962",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xfee7a27147c7984caec35dc4cee4f3a38fee046e5d8f17ce7ec82b982decd9aa",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x64",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x3e8",
- "extraData": "0x",
- "baseFeePerGas": "0x212635",
- "blockHash": "0x96d2a59527aa149efe64eef6b2fbf4722c9c833aba48e0c7cb0cb4033fa1af5e",
- "transactions": [
- "0xf86951832126368252089418ac3e7343f016890c510e93f935261169d9e3f501808718e5bb3abd10a0a099aba91f70df4d53679a578ed17e955f944dc96c7c449506b577ac1288dac6d4a0582c7577f2343dd5a7c7892e723e98122227fca8486debd9a43cd86f65d4448a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x47c896f5986ec29f58ec60eec56ed176910779e9fc9cf45c3c090126aeb21acd"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np101",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x96d2a59527aa149efe64eef6b2fbf4722c9c833aba48e0c7cb0cb4033fa1af5e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb1600603ea31446c716fece48a379fb946eab40182133a8032914e868bb4929e",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x65",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x3f2",
- "extraData": "0x",
- "baseFeePerGas": "0x1d0206",
- "blockHash": "0xf2750d7772a6dcdcad79562ddf2dee24c1c2b7862905024a8468adfb62f8ef14",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x4",
- "validatorIndex": "0x5",
- "address": "0x3f79bb7b435b05321651daefd374cdc681dc06fa",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x6d19894928a3ab44077bb85dcb47e0865ce1c4c187bba26bad059aa774c03cfe"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np102",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf2750d7772a6dcdcad79562ddf2dee24c1c2b7862905024a8468adfb62f8ef14",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd3908889240ecc36175f7ac23e9596230ea200b98ee9c9ca078154288b69c637",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x66",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x3fc",
- "extraData": "0x",
- "baseFeePerGas": "0x1961c6",
- "blockHash": "0x57054aa8d635c98b3b71d24e11e22e9235bc384995b7b7b4acd5ca271d0898b4",
- "transactions": [
- "0xf88452831961c7830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0c43b4e8ddaecaadfc1fd4b35659ced2bbaa2ab24b1cff975685cd35f486a723fa056a91d2ff05b4eae02ee1d87442ec57759e66ec13bfd3ea2655cf4f04b6e863d"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xefc50f4fc1430b6d5d043065201692a4a02252fef0699394631f5213a5667547"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np103",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x57054aa8d635c98b3b71d24e11e22e9235bc384995b7b7b4acd5ca271d0898b4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd66957c43447a6edfb6b9bc9c4e985f28c24e6ce3253c68e5937c31c5d376f94",
- "receiptsRoot": "0xd99d12e61c8e9be69f1eb49cea2f72664c7e569463415b064954bf5e0dbc6a01",
- "logsBloom": "0x00000000000000000000100000000000200000000000000000200000000000000000000000040000000000200000000000000000000000000200000000000000000018000000000000000000010000000000000000000000000000000000100000000000000000000000000000000000000000000000000000800200000000021000000000002000000000002088400000000000000000000000000000000000000000000000000000000010000000000800000080000000000000000000000008000000000000000020000100001000000000080000002000400000000400000000000000002200000000000000000000000000000000000000000020000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x67",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x406",
- "extraData": "0x",
- "baseFeePerGas": "0x16375b",
- "blockHash": "0xf4f1f726bcb9a3db29481be3a2e00c6ab4bf594ae85927414540ec9ede649d4d",
- "transactions": [
- "0xf87b538316375c83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0e59d36f30ed2dfc5eb71433457547f63bf4ad98e0a2181c4373a5e7ddf04d17ea06dce4f88f48f6fd93c2c834537a8baef27bb2965b9e2ce68dc437adb3d657d28"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x3cc9f65fc1f46927eb46fbf6d14bc94af078fe8ff982a984bdd117152cd1549f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np104",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf4f1f726bcb9a3db29481be3a2e00c6ab4bf594ae85927414540ec9ede649d4d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe06685d528d0c69051bcf8a6776d6c96c1f1c203da29851979c037be2faac486",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x68",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x410",
- "extraData": "0x",
- "baseFeePerGas": "0x1371a8",
- "blockHash": "0xc8fe6583a2370fa9bda247532a8fb7845fceea9b54c9e81cda787947bb0ad41d",
- "transactions": [
- "0xf86654831371a98302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0a427e65413948a8a1cf63c15214525d05bffca4667149c6a4019513defe57e6ba02819aa7d6a404a7f0194ef3ba7ec45b876f4226b278ebbcfa4012a90a1af3905"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x63eb547e9325bc34fbbbdfda327a71dc929fd8ab6509795e56479e95dbd40a80"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np105",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xc8fe6583a2370fa9bda247532a8fb7845fceea9b54c9e81cda787947bb0ad41d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x32d5d07d12d91b8b4392872b740f46492fea678e9f5dc334c21101767bd54833",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x69",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x41a",
- "extraData": "0x",
- "baseFeePerGas": "0x11056d",
- "blockHash": "0xb30b266de816c61ef16e4abfc94fbed8b4032710f4275407df2bf716a1f0bbd7",
- "transactions": [
- "0x02f86c870c72dd9d5e883e55018311056e82520894de7d1b721a1e0632b7cf04edf5032c8ecffa9f9a0180c080a02a6c70afb68bff0d4e452f17042700e1ea43c10fc75e55d842344c1eb55e2e97a027c64f6f48cfa60dc47bfb2063f9f742a0a4f284d6b65cb394871caca2928cde"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x67317288cf707b0325748c7947e2dda5e8b41e45e62330d00d80e9be403e5c4c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np106",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb30b266de816c61ef16e4abfc94fbed8b4032710f4275407df2bf716a1f0bbd7",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf89d6d5f7a16d98062e1ef668ee9a1819b0634bd768ece2fc2b687f8968dc373",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x6a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x424",
- "extraData": "0x",
- "baseFeePerGas": "0xee50e",
- "blockHash": "0x35221530b572a05628d99d8ca9434287c581e30473f83d612cbbfb7f394c587b",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x5",
- "validatorIndex": "0x5",
- "address": "0x189f40034be7a199f1fa9891668ee3ab6049f82d",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7fc37e0d22626f96f345b05516c8a3676b9e1de01d354e5eb9524f6776966885"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np107",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x35221530b572a05628d99d8ca9434287c581e30473f83d612cbbfb7f394c587b",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xaf4107a57da519d24d0c0e3ae6a5c81f3958ddc49e3f1c2792154b47d58d79a1",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x6b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x42e",
- "extraData": "0x",
- "baseFeePerGas": "0xd086d",
- "blockHash": "0xe3981baf40fc5dac54055fab95177a854a37ff2627208247697d5627b8ae3c35",
- "transactions": [
- "0xf88456830d086e830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a04c088a3642c3cfad977a0927e6d694bd26be96246f127f03d37fe2b494b99da2a00ef5b6e7aca1ac95ef964978a7ec4bb66688fbb7abace43f90f0c344196379e5"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc8c5ffb6f192e9bda046ecd4ebb995af53c9dd6040f4ba8d8db9292c1310e43f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np108",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe3981baf40fc5dac54055fab95177a854a37ff2627208247697d5627b8ae3c35",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x9afc46d870489ac06cac1ea0b65c417d8e0086f0fb828dd92dca30da737c827b",
- "receiptsRoot": "0x9b9c6d15a59d6b1c222cc63abe6aa28d734463877a3c34d4b3d9e80b768b77aa",
- "logsBloom": "0x00000000000000000000000000000080000000000002000000000002000000000000004000000000000000000000010000000000000000000000000000000000000400000000000000100000000000000000200000000000000000000200000000000000000008000010000000000000000080000000000200000008000400000000000000000400000000000000000008000000001000000001000000000000000000000000008000000200000000000000000008400000000000000000000000001000000000000000000000001000010000000020000000040000000000000000000000000000000200080000000000000000000000040000000200000400",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x6c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x438",
- "extraData": "0x",
- "baseFeePerGas": "0xb684d",
- "blockHash": "0x54fcc3af800dbeae5c45ac8acba05313bd8d4c1bb06502702a14a225259367aa",
- "transactions": [
- "0xf87b57830b684e83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a06789a9252207970001fd703c22b2b7e5c0388bf018bc070a0469129f80cc5d63a048de0e437b02a8dd3a783892ad1691a1062cd73ddd35c481d9632f5158650317"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe40a9cfd9babe862d482ca0c07c0a4086641d16c066620cb048c6e673c5a4f91"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np109",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x54fcc3af800dbeae5c45ac8acba05313bd8d4c1bb06502702a14a225259367aa",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x02324f55d0548cb8743857fe938f91e6f15bfbe94654aadde56c59f83083980a",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x6d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x442",
- "extraData": "0x",
- "baseFeePerGas": "0x9fbe4",
- "blockHash": "0x62bb35defc0aac7bfbe789de02062f7ac622e9e354cfea5dceeccb792a61bae3",
- "transactions": [
- "0xf866588309fbe58302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa07e3ef87807ccd797a0020fade1b7d65a7b190fbe40a6f8bdc35cd6a3a6fbed73a0283ad99e27eb389ca3b389bce3c29b3c711b74b6ecd05b290c7be33389830fab"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe82e7cff48aea45fb3f7b199b0b173497bf4c5ea66ff840e2ec618d7eb3d7470"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np110",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x62bb35defc0aac7bfbe789de02062f7ac622e9e354cfea5dceeccb792a61bae3",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x9932915761c4c894fc50819df189e875d3b025a7c045406fe415abe61d0e3086",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x6e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x44c",
- "extraData": "0x",
- "baseFeePerGas": "0x8bd6c",
- "blockHash": "0x2c4731fbb4f4adae94723c078548c510649e8973dfdb229fd6031b1b06eb75c0",
- "transactions": [
- "0xf869598308bd6d825208941b16b1df538ba12dc3f97edbb85caa7050d46c1401808718e5bb3abd109fa0abbde17fddcc6495e854f86ae50052db04671ae3b6f502d45ba1363ae68ee62ca03aa20e294b56797a930e48eda73a4b036b0d9389893806f65af26b05f303100f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x84ceda57767ea709da7ab17897a70da1868c9670931da38f2438519a5249534d"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np111",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x2c4731fbb4f4adae94723c078548c510649e8973dfdb229fd6031b1b06eb75c0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2849b35fb3ec8146f637be768e3eaefda559928f8bb35753584d5b326a400ff5",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x6f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x456",
- "extraData": "0x",
- "baseFeePerGas": "0x7a5e7",
- "blockHash": "0x76b385d3f8a4b6e66ea8c246ed7c6275ad164d028ec5a986f9524bfe7437dcc7",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x6",
- "validatorIndex": "0x5",
- "address": "0x65c74c15a686187bb6bbf9958f494fc6b8006803",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe9dcf640383969359c944cff24b75f71740627f596110ee8568fa09f9a06db1c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np112",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x76b385d3f8a4b6e66ea8c246ed7c6275ad164d028ec5a986f9524bfe7437dcc7",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2f24b6182543c677e7d1cab81bc020033c64e034571a20ecd632e252c8f202b3",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x70",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x460",
- "extraData": "0x",
- "baseFeePerGas": "0x6b12b",
- "blockHash": "0x33385ec44cfd01ba27c927a3ebe607a27e55fd8e89965af09b991a7cdc127dbc",
- "transactions": [
- "0xf8845a8306b12c830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0bf8a8863f63a16d43652b12e54dc61bd71c8ab86d88aebb756c6e420fca56a1aa01f62e0032c57f1629ee82b4fefb8d6c59a85c5c2889b1671ce0713581e773b6e"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x430ef678bb92f1af44dcd77af9c5b59fb87d0fc4a09901a54398ad5b7e19a8f4"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np113",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x33385ec44cfd01ba27c927a3ebe607a27e55fd8e89965af09b991a7cdc127dbc",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6d6c9c24ef7d93db6ba57324fb6f3604b09611301e12d250162c2b2b50871625",
- "receiptsRoot": "0x257c29f688aaf63db2244378182225d104d84cfbd188c82b92323623d11574e9",
- "logsBloom": "0x00000000000000000000080040000000000000000000000000008000000000000000000000000000000000000001000000000000000000000040000000040010000100000000000000400000000000000000020000000000000000800000000400000000000000000000000040000000000002000100400000000000000200000000000000000000000008000000010000000000000800000000000000000000000080000000000000000000000000000000080400000000000000000000400000000000010000000004000000000000000000000010020000000000000000000000000000000100000000040000000000000000000000200000001800000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x71",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x46a",
- "extraData": "0x",
- "baseFeePerGas": "0x5db80",
- "blockHash": "0x66ad7aaacf3efede70dda0c82629af2046e67b96713cf3cf02a9a2613ca25b6f",
- "transactions": [
- "0xf87b5b8305db8183011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0f893fcd21c2a882bc3968ea3c41dd37a8dbfbf07a34a8694a49fdd8081996e25a0502578b516e04b1939fdad45fd0688e636d57f59826a8e252b63f496b919d91c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf7af0b8b729cd17b7826259bc183b196dbd318bd7229d5e8085bf4849c0b12bf"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np114",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x66ad7aaacf3efede70dda0c82629af2046e67b96713cf3cf02a9a2613ca25b6f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x61c50266ae62e14edea48c9238f79f6369fd44e7f3d6519c7139aa1e87ee13ba",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x72",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x474",
- "extraData": "0x",
- "baseFeePerGas": "0x52063",
- "blockHash": "0x00fd70a53be9c85c986d3dd87f46e079e4ce4a4a3dd95c1e497457c50bacbe2d",
- "transactions": [
- "0xf8665c830520648302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0961de3e3657fdc49c722cc23de35eaf41de51c3aab3ca9a09b3d358fc19195aca060ee48b2fad3f3798111a93038fcb5c9c9791daf3c6acbaf70134fd182b5c663"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe134e19217f1b4c7e11f193561056303a1f67b69dac96ff79a6d0aafa994f7cb"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np115",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x00fd70a53be9c85c986d3dd87f46e079e4ce4a4a3dd95c1e497457c50bacbe2d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2bebf2f158ec1b8c7be21ef7c47c63fa5a3eb2292f409f365b40fa41bacb351e",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x73",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x47e",
- "extraData": "0x",
- "baseFeePerGas": "0x47cdc",
- "blockHash": "0xbb9f244470573774df6fca785d3e11e6bd1b896213cacd43cdfcb131f806ca4c",
- "transactions": [
- "0x02f86c870c72dd9d5e883e5d0183047cdd82520894043a718774c572bd8a25adbeb1bfcd5c0256ae110180c001a02ae4b3f6fa0e08145814f9e8da8305b9ca422e0da5508a7ae82e21f17d8c1196a077a6ea7a39bbfe93f6b43a48be83fa6f9363775a5bdb956c8d36d567216ea648"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9cc58ab1a8cb0e983550e61f754aea1dd4f58ac6482a816dc50658de750de613"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np116",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xbb9f244470573774df6fca785d3e11e6bd1b896213cacd43cdfcb131f806ca4c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3b359e20c5966cdcbb7b0298480621892d43f8efa58488b3548d84cf2ee514c1",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x74",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x488",
- "extraData": "0x",
- "baseFeePerGas": "0x3ed55",
- "blockHash": "0x6d18b9bca4ee00bd7dc6ec4eb269cd4ba0aceb83a12520e5b825b827cb875fd9",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x7",
- "validatorIndex": "0x5",
- "address": "0xe3b98a4da31a127d4bde6e43033f66ba274cab0e",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x79c2b067779a94fd3756070885fc8eab5e45033bde69ab17c0173d553df02978"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np117",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x6d18b9bca4ee00bd7dc6ec4eb269cd4ba0aceb83a12520e5b825b827cb875fd9",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x9776b87f7c94469bd3f80d7d9b639dace4981230bbb7c14df9326aafe66f3da4",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x75",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x492",
- "extraData": "0x",
- "baseFeePerGas": "0x36fab",
- "blockHash": "0xcef84ea2c6fac4a2af80a594bbe5a40bf5f5285efe67fab7ceb858844c593ae9",
- "transactions": [
- "0xf8845e83036fac830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a08315d9fb30662071b05a4e38240e4b85b8e240c0c3e190f27ada50678236c6e7a00ee07dc873780f17ac9d0c7b3d434f89be92231cfca042ca5f23d3f3d7346861"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd908ef75d05b895600d3f9938cb5259612c71223b68d30469ff657d61c6b1611"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np118",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xcef84ea2c6fac4a2af80a594bbe5a40bf5f5285efe67fab7ceb858844c593ae9",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xcd5cc668a3b28217e9fd05ddaea82d453a6a7394770a888b7d88013a4c9bcb22",
- "receiptsRoot": "0xe35b2accd70b81901c8d0c931a12687e493a489ed7b82d78ade199815c466d5f",
- "logsBloom": "0x0000000000000000000000000000000000000a00000000000000000000000000000000000000000000018000000000000000000000000000008000000000000048000000000000004000000000000000000008000000000000000000000020000000000000000002201010000000000000000400000000200000000000000000000000000000000000000000200000000000a200000001000000000000000000000000200000000000000000000400040000000000000000000000800000000000000000001800000000000802000000000000000000000080000000000000000000000000000000000000000000000000400000010800000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x76",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x49c",
- "extraData": "0x",
- "baseFeePerGas": "0x301f5",
- "blockHash": "0x7b65cb3becfab6b30f0d643095b11c6853a33ca064a272f1326adb74e876e305",
- "transactions": [
- "0xf87b5f830301f683011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0a3952a3372b48d4ef804b20a0ff5bbd5440156de3b71d37024356a3c1c5205d8a02ff03cae2dc449ca7ed7d25c91f99b17f0bafcdaf0ecc6e20bdeb80895c83e82"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe0d31906b7c46ac7f38478c0872d3c634f7113d54ef0b57ebfaf7f993959f5a3"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np119",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x7b65cb3becfab6b30f0d643095b11c6853a33ca064a272f1326adb74e876e305",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xdd592cc191ae4ba2be51a47d5056c2f0ba8799c74445ea3f294e0fc95a973f16",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x77",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x4a6",
- "extraData": "0x",
- "baseFeePerGas": "0x2a1e1",
- "blockHash": "0x5d089bec3bbf3a0c83c7796afaa1ae4d21df034a3e33a6acb80e700e19bcaab0",
- "transactions": [
- "0xf866608302a1e28302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0fd1714b8a15fa8a4e3ffe824632ec26f1daa6ce681e92845d1c1dfe60f032b4ea074bd5a60859bd735bbc70c9531a3ff48421f5c3b87e144406ee37ef78b8fda37"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x2318f5c5e6865200ad890e0a8db21c780a226bec0b2e29af1cb3a0d9b40196ae"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np120",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5d089bec3bbf3a0c83c7796afaa1ae4d21df034a3e33a6acb80e700e19bcaab0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4b5122bd4713cd58711f405c4bd9a0e924347ffce532693cce1dd51f36094676",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x78",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x4b0",
- "extraData": "0x",
- "baseFeePerGas": "0x24dea",
- "blockHash": "0x02c9511703f78db34f67541d80704165d8a698726ef2cbcfbdc257bcf51594dd",
- "transactions": [
- "0xf8696183024deb825208942d711642b726b04401627ca9fbac32f5c8530fb101808718e5bb3abd109fa0b4d70622cd8182ff705beb3dfa5ffa4b8c9e4b6ad5ad00a14613e28b076443f6a0676eb97410d3d70cfa78513f5ac156b9797abbecc7a8c69df814135947dc7d42"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x523997f8d8fed954658f547954fdeceab818b411862647f2b61a3619f6a4d4bc"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np121",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x02c9511703f78db34f67541d80704165d8a698726ef2cbcfbdc257bcf51594dd",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x18484e0a8e7bcccf7fbf4f6c7e1eff4b4a8c5b5e0ba7c2f2b27da315a0a06f97",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x79",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x4ba",
- "extraData": "0x",
- "baseFeePerGas": "0x20438",
- "blockHash": "0x1edbbce4143b5cb30e707564f7ada75afe632e72b13d7de14224e3ed0044a403",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x8",
- "validatorIndex": "0x5",
- "address": "0xa1fce4363854ff888cff4b8e7875d600c2682390",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xbe3396540ea36c6928cccdcfe6c669666edbbbcd4be5e703f59de0e3c2720da7"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np122",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1edbbce4143b5cb30e707564f7ada75afe632e72b13d7de14224e3ed0044a403",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6c921d64a95659dd6c62a919f2df9da2fda7cb8ec519aeb3b50ffb4e635dc561",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x7a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x4c4",
- "extraData": "0x",
- "baseFeePerGas": "0x1c3b1",
- "blockHash": "0x38e1ce2b062e29a9dbe5f29a5fc2b3c47bf2eed39c98d2b2689a2e01650e97ca",
- "transactions": [
- "0xf884628301c3b2830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0f48d056f98b681d69f84fcde715c63b1669b11563164d7c17e03e5d3a4641a0fa010fce327ee99c5206995065cbb134d5458143a34cbc64b326476aeef47ae482a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x2d3fcfd65d0a6881a2e8684d03c2aa27aee6176514d9f6d8ebb3b766f85e1039"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np123",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x38e1ce2b062e29a9dbe5f29a5fc2b3c47bf2eed39c98d2b2689a2e01650e97ca",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x09df4733053f80da4904bce8d847883472e20bc3b1378eb1579e2e3df44d3948",
- "receiptsRoot": "0x03ecb1b96e21ef88b48a9f1a85a170bdb0406e26918c7b14b9602e6f9a7e6937",
- "logsBloom": "0x00000004000000000000002000000000000000004000000000000000000000000000400000400000000000000000010000080000000024404000000000000000000000000000000800000000020000000001000100000080000000000000000000000000000800000000000000000000000014000000000000000000000000001000000000000002000000100000000000000000000000000000040000000000000000000000000000040000020000000000000000200000000000000000000000000000000000000000000480010000000000000000000000040000000000000000000000000008000000000000000020000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x7b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x4ce",
- "extraData": "0x",
- "baseFeePerGas": "0x18b5b",
- "blockHash": "0xda82bddbddc44bf3ce23eb1f6f94ae987861720b6b180176080919015b1e4e90",
- "transactions": [
- "0xf87b6383018b5c83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0b223787310f8ba4f9271d98c8bfc4f7e926ced7773cab6b5c856fb4c43b6dad5a07d0edf043f5b767ffd513479a43cbdc3dcbd18f254e3eb11043d4d7aa4dd7445"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7ce0d5c253a7f910cca7416e949ac04fdaec20a518ab6fcbe4a63d8b439a5cfc"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np124",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xda82bddbddc44bf3ce23eb1f6f94ae987861720b6b180176080919015b1e4e90",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x15da947afcb1ba68f9fe2328e500881a302de649bd7d37f6e969bf7ec1aca37d",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x7c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x4d8",
- "extraData": "0x",
- "baseFeePerGas": "0x15a06",
- "blockHash": "0x8948407592d9c816f63c7194fa010c12115bee74e86c3b7d9e6ca30589830f21",
- "transactions": [
- "0xf8666483015a078302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa037c41575c8abba9465870babe53a436d036974edf6a9de15d40fff1b4cca7552a07e815124c036ad7c603e7faa56d1d9e517d60cee33c1e47122a303e42d59b6fa"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4da13d835ea44926ee13f34ce8fcd4b9d3dc65be0a351115cf404234c7fbd256"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np125",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8948407592d9c816f63c7194fa010c12115bee74e86c3b7d9e6ca30589830f21",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa085ae940536d1e745cf78acd4001cb88fbc1e939151193c4e792cb659fe1aa0",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x7d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x4e2",
- "extraData": "0x",
- "baseFeePerGas": "0x12ee9",
- "blockHash": "0x5f66e4813f2b86dc401a90a05aafd8a2c38f6f1241e8a947bf54d679014a06a5",
- "transactions": [
- "0x02f86c870c72dd9d5e883e650183012eea82520894d10b36aa74a59bcf4a88185837f658afaf3646ef0180c080a0882e961b849dc71672ce1014a55792da7aa8a43b07175d2b7452302c5b3cac2aa041356d00a158aa670c1a280b28b3bc8bb9d194a159c05812fa0a545f5b4bc57b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc5ee7483802009b45feabf4c5f701ec485f27bf7d2c4477b200ac53e210e9844"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np126",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5f66e4813f2b86dc401a90a05aafd8a2c38f6f1241e8a947bf54d679014a06a5",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xfb39354666f43e8f8b88f105333d6f595054b2e1b0019f89bf5dbddf7ec9a0ab",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x7e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x4ec",
- "extraData": "0x",
- "baseFeePerGas": "0x10912",
- "blockHash": "0x1b452f327c51d7a41d706af9b74ac14ff50b74dcef77fdb94333a8f5c86436a8",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x9",
- "validatorIndex": "0x5",
- "address": "0x7ace431cb61584cb9b8dc7ec08cf38ac0a2d6496",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x0fc71295326a7ae8e0776c61be67f3ed8770311df88e186405b8d75bd0be552b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np127",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1b452f327c51d7a41d706af9b74ac14ff50b74dcef77fdb94333a8f5c86436a8",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb042b6a0d783d5e3757a9799dbc66d75515d0a511e5157650048a883a48d7c75",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x7f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x4f6",
- "extraData": "0x",
- "baseFeePerGas": "0xe7f0",
- "blockHash": "0x4831cdabfa81a5a7c4a8bb9fee309515e2d60dd5e754dfef4456794385771161",
- "transactions": [
- "0xf8836682e7f1830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0e5232243797a918b702f03aa9ccf4e944ff52293e7f5b7b1cb6874047f064ed6a02ae2cefc3e4fdb15fb4172d6fe04c7d54a312d077dcd15f91bf5f7047c10d079"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7313b4315dd27586f940f8f2bf8af76825d8f24d2ae2c24d885dcb0cdd8d50f5"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np128",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x4831cdabfa81a5a7c4a8bb9fee309515e2d60dd5e754dfef4456794385771161",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x0400502ad286f8ca3e6e362d38ec9f2119eddc480e9af1ec646bc48e5451a379",
- "receiptsRoot": "0xdcfb036965921ecaf598a6a02e3fb77784da94be9ed9aeee279d085a20342e47",
- "logsBloom": "0x00000002000041000000000200000200400000000000000008000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00080000000000000000000000000000000000000000000400000000000000008000000000000000000000014800000000000000000000000000000000000000000000000000000000000080000000000008000000000000000000000000000008000000000000000000000100000000000000000200000000000000000000000000000000000000030000800000000000000000000001000000002000000000000000020000400005002000004000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x80",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x500",
- "extraData": "0x",
- "baseFeePerGas": "0xcb03",
- "blockHash": "0xfadcdb29ddbfaed75902beaecb3b9e859bf4faefe78591baf8ac9c99faec09d2",
- "transactions": [
- "0xf87a6782cb0483011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa07e94803268c610035c580891ef0c6edd5c21babd8a2bb54d22373e982db9bf46a0375bc266e5e65f0a899b2299ddddbdc0e0d7d40c21e6d254d664abd7d0698076"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x2739473baa23a9bca4e8d0f4f221cfa48440b4b73e2bae7386c14caccc6c2059"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np129",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xfadcdb29ddbfaed75902beaecb3b9e859bf4faefe78591baf8ac9c99faec09d2",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x1f1fc8702bf538caf0df25f854999a44a7583b4339011bc24dadcee848e3daf5",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x81",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x50a",
- "extraData": "0x",
- "baseFeePerGas": "0xb1ae",
- "blockHash": "0x5bc61ce8add484ead933542e385d4592d82aac6d47b46dcb2451390b884b8c3d",
- "transactions": [
- "0xf8656882b1af8302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a064097d6048ea289fa6b8a002f4a7d53d8381ee46bf0dadd3ac1befa477cef309a0300f780844db5eaa99ff65752886da8b671329d7c12db4e65dd7f525abe9b1d8"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd4da00e33a11ee18f67b25ad5ff574cddcdccaa30e6743e01a531336b16cbf8f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np130",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5bc61ce8add484ead933542e385d4592d82aac6d47b46dcb2451390b884b8c3d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb04a7bb7f21e64f23bd415ee3ad1dc8a191975c86e0f0d43a92a4204a32ac090",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x82",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x514",
- "extraData": "0x",
- "baseFeePerGas": "0x9b8b",
- "blockHash": "0x30fcf7ed7c580b55b92289383259c5c1d380d54c1f527bfdc8b062af1e898b8f",
- "transactions": [
- "0xf86869829b8c82520894a5ab782c805e8bfbe34cb65742a0471cf5a53a9701808718e5bb3abd10a0a078e180a6afd88ae67d063c032ffa7e1ee629ec053306ce2c0eb305b2fb98245ea07563e1d27126c9294391a71da19044cb964fd6c093e8bc2a606b6cb5a0a604ac"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe651765d4860f0c46f191212c8193e7c82708e5d8bef1ed6f19bdde577f980cf"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np131",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x30fcf7ed7c580b55b92289383259c5c1d380d54c1f527bfdc8b062af1e898b8f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xfd2a1032389a1b7c6221d287a69e56a32d8a618396b8ef829601a9bcb3e91cce",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x83",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x51e",
- "extraData": "0x",
- "baseFeePerGas": "0x881d",
- "blockHash": "0x8b3a8443b32d2085952d89ca1b1ecb7574b37483cb38e71b150c00d001fea498",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0xa",
- "validatorIndex": "0x5",
- "address": "0x5ee0dd4d4840229fab4a86438efbcaf1b9571af9",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x5b5b49487967b3b60bd859ba2fb13290c6eaf67e97e9f9f9dda935c08564b5f6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np132",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8b3a8443b32d2085952d89ca1b1ecb7574b37483cb38e71b150c00d001fea498",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x91120613028234db2b47071a122f6ff291d837abe46f1f79830276fd23934c56",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x84",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x528",
- "extraData": "0x",
- "baseFeePerGas": "0x771a",
- "blockHash": "0xc9a9cc06b8a5d6edad0116a50740cb23d1cb130f6c3052bae9f69a20abf639c3",
- "transactions": [
- "0xf8836a82771b830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0a295fe01d21a6f8ffd36f8415e00da318f965a12155808a0d3b51c2c1914cf65a055022813f479686f077e227f3b00dc983081ad361dd8c8240b84d1cf86721ccf"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x57b73780cc42a6a36676ce7008459d5ba206389dc9300f1aecbd77c4b90277fa"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np133",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xc9a9cc06b8a5d6edad0116a50740cb23d1cb130f6c3052bae9f69a20abf639c3",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x1ec4000ab57cb0fec41b7221fff5ad7ec0dd4a042a739349045110b8116650c8",
- "receiptsRoot": "0x870c88b91d896f4d6c0d6d8d9924dee345e36915e9244af9785f4ca1fea5fda3",
- "logsBloom": "0x000000000008000000004000000000000000000000000000000000000000000400000000080000000000000000000000000000000000000000000000000c0000000000000000000002000000080000000000000000000004000000000000000000000000000000000000000000020000000400000000010000000040000000000000000000000000000004000000800008000100000202000000000000040000000000000000002000000000200000100000000000010000000000000001010000000000000000000000100000100000000401000000000000000000000000000000000000000000000000000000410000000800000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x85",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x532",
- "extraData": "0x",
- "baseFeePerGas": "0x6840",
- "blockHash": "0x4d61445a8ece151e7938bc9c2f4f819a10afddf32c0f2600d62281ecd6b1af69",
- "transactions": [
- "0xf87a6b82684183011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa09ce0e0b4fb662dd87cf69350e376568655ce9436941c42e7815a0688db3d8281a037208359ff73e2b9389d9d6e32df5203a0239e5dbbf016e87b3714c122ff081f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x217e8514ea30f1431dc3cd006fe730df721f961cebb5d0b52069d1b4e1ae5d13"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np134",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x4d61445a8ece151e7938bc9c2f4f819a10afddf32c0f2600d62281ecd6b1af69",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb078e743044057e03f894971bfc3dca4dc78990d5cba60c7c979182c419528cf",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x86",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x53c",
- "extraData": "0x",
- "baseFeePerGas": "0x5b3e",
- "blockHash": "0xadcc471cc18ae64a1ece9ef42013441477843c72962bcc0f1291df9dc8906324",
- "transactions": [
- "0xf8656c825b3f8302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0fd01a89a43af89dfba5de6077a24873a459ee0c8de3beaa03e444bb712fdbebda04f920e07882701d12f9016e32bfe5859d3c1bf971e844c6fcd336953190a8aad"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x14b775119c252908bb10b13de9f8ae988302e1ea8b2e7a1b6d3c8ae24ba9396b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np135",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xadcc471cc18ae64a1ece9ef42013441477843c72962bcc0f1291df9dc8906324",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x5ed1a679a1844883bb7c09f1349702b93a298fc8a77885f18810230f0322d292",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x87",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x546",
- "extraData": "0x",
- "baseFeePerGas": "0x4fe0",
- "blockHash": "0xd2e3126fb4b0cc3e1e98f8f2201e7a27192a721136d12c808f32a4ff0994601b",
- "transactions": [
- "0x02f86b870c72dd9d5e883e6d01824fe1825208944bfa260a661d68110a7a0a45264d2d43af9727de0180c001a00bb105cab879992d2769014717857e3c9f036abf31aa59aed2c2da524d938ff8a03b5386a238de98973ff1a9cafa80c90cdcbdfdb4ca0e59ff2f48c925f0ea872e"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe736f0b3c5672f76332a38a6c1e66e5f39e0d01f1ddede2c24671f48e78daf63"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np136",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xd2e3126fb4b0cc3e1e98f8f2201e7a27192a721136d12c808f32a4ff0994601b",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd4db74075dc9ae020d6016214314a7602a834c72ec99e34396e1d326aa112a27",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x88",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x550",
- "extraData": "0x",
- "baseFeePerGas": "0x45e6",
- "blockHash": "0xa503a85bc5c12d4108445d5eab6518f1e4ccaeab30434202b53204a9378419fa",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0xb",
- "validatorIndex": "0x5",
- "address": "0x4f362f9093bb8e7012f466224ff1237c0746d8c8",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7d112c85b58c64c576d34ea7a7c18287981885892fbf95110e62add156ca572e"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np137",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa503a85bc5c12d4108445d5eab6518f1e4ccaeab30434202b53204a9378419fa",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xfd5f001adc20a6ab7bcb9cd5ce2ea1de26d9ecc573a7b595d2f6d682cf006610",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x89",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x55a",
- "extraData": "0x",
- "baseFeePerGas": "0x3d2a",
- "blockHash": "0xe0b036f2df5813e2e265d606ee533cd46924a8a7de2988e0e872c8b92c26399c",
- "transactions": [
- "0xf8836e823d2b830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0e853c07d5aba01cfcacc3a4191551d7b47d2e90aba323bd29b5b552147bc4055a03a7e1dee0d461376b43ac4c0dd1a85cc94e9fa64aa8effec98c026293e47240a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x28fbeedc649ed9d2a6feda6e5a2576949da6812235ebdfd030f8105d012f5074"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np138",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe0b036f2df5813e2e265d606ee533cd46924a8a7de2988e0e872c8b92c26399c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3bf11932c08c5317c7463697409eba5a6904575cc03593cb0eac6c82093d79b7",
- "receiptsRoot": "0x3ef7cc7ec86f1ace231cdf7c7fadaf27ae84ad4afdd5f2261b60d5be03794001",
- "logsBloom": "0x00000000000000000000080000000000000000000000000000000000000000000000000010000000004000008000000000000000000000000000000080001000000020000000000000000000000000000000000000000000000010000010200000040220000000000000000000010001000000800000000000400000002000000000000000000000400000000000000800000000000400000000000000080000500000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000004002000000000008000000000002000000400000000000000000000000000002000000000002000000000000002000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x8a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x564",
- "extraData": "0x",
- "baseFeePerGas": "0x358a",
- "blockHash": "0xfcca6f4e35f290be297bf6403b84c99d1a7b6d78299b5e2690d915bf834e85da",
- "transactions": [
- "0xf87a6f82358b83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0c28b8f557aaf82e47d9e1425824709427513131908ac636f142990468e40909ea05fe11510da000868cfe1a05bdf689a8c1954c87afeb9ef2defbed3075458a6ad"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x6f7410cf59e390abe233de2a3e3fe022b63b78a92f6f4e3c54aced57b6c3daa6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np139",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xfcca6f4e35f290be297bf6403b84c99d1a7b6d78299b5e2690d915bf834e85da",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe8258bde0dceac7f4b4734c8fa80fe5be662ae7238d9beb9669bc3ae4699efa8",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x8b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x56e",
- "extraData": "0x",
- "baseFeePerGas": "0x2edc",
- "blockHash": "0x762df3955fc857f4c97acb59e4d7b69779986e20e3a8ea6bc5219dfd9e5a3d7e",
- "transactions": [
- "0xf86570822edd8302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a02206472edd9c816508c6711c004500028a4a6a206caf23b20c6828dd60e1533fa0186dc116a92a8455d1cb92ed4b599c3f7cade6cf59da63b1aef46936c3a507e9"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd5edc3d8781deea3b577e772f51949a8866f2aa933149f622f05cde2ebba9adb"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np140",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x762df3955fc857f4c97acb59e4d7b69779986e20e3a8ea6bc5219dfd9e5a3d7e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x9ff9a193050e74dfa00105084fa236099def4aa7993691c911db0a3f93422aeb",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x8c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x578",
- "extraData": "0x",
- "baseFeePerGas": "0x2906",
- "blockHash": "0xffe6c202961ee6b5098db912c7203b49aa3b303b4482234371b49f7ef7a95f84",
- "transactions": [
- "0xf86871822907825208949defb0a9e163278be0e05aa01b312ec78cfa372601808718e5bb3abd109fa04adf7509b10551a97f2cb6262c331096d354c6c8742aca384e63986006b8ac93a0581250d189e9e1557ccc88190cff66de404c99754b4eb3c94bb3c6ce89157281"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x20308d99bc1e1b1b0717f32b9a3a869f4318f5f0eb4ed81fddd10696c9746c6b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np141",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xffe6c202961ee6b5098db912c7203b49aa3b303b4482234371b49f7ef7a95f84",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf63dc083849dc5e722a7ca08620f43fc5cd558669664a485a3933b4dae3b84f4",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x8d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x582",
- "extraData": "0x",
- "baseFeePerGas": "0x23e6",
- "blockHash": "0xfa0dcd8b9d6e1c42eeea7bb90a311dd8b7215d858b6c4fb0f64ee01f2be00cfe",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0xc",
- "validatorIndex": "0x5",
- "address": "0x075198bfe61765d35f990debe90959d438a943ce",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x91f7a302057a2e21d5e0ef4b8eea75dfb8b37f2c2db05c5a84517aaebc9d5131"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np142",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xfa0dcd8b9d6e1c42eeea7bb90a311dd8b7215d858b6c4fb0f64ee01f2be00cfe",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6222bb96d397776358dd71f14580f5464202313769960ec680c50d9ccc2fa778",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x8e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x58c",
- "extraData": "0x",
- "baseFeePerGas": "0x1f6a",
- "blockHash": "0xe501e9f498cd6b1a6d22c96a556c9218e3a7960eea3e9ab4ac2760cc09fdca0d",
- "transactions": [
- "0xf88372821f6b830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa067091ae37d21fdc5f9eed2877bddb24e52f69e80af27a89608b6fba1c5053f32a04817ab7dc0c3eaac266b08a1683c34fcd43098c6219ea5771d35fa3387b705a1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x743e5d0a5be47d489b121edb9f98dad7d0a85fc260909083656fabaf6d404774"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np143",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe501e9f498cd6b1a6d22c96a556c9218e3a7960eea3e9ab4ac2760cc09fdca0d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xbe8a51adbc81161927f0b6f3e562cd046f1894145010a1b3d77394780478df3c",
- "receiptsRoot": "0x8c32e3da3725025cad909cb977e252fd127d54c4f4da3852d18ef3976bfe4610",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000001000000000000004000000000000000000000000000800000000000000000000028000000020008000000008000000000000000000000000010000000000080000100000400100000000000000000000000100000000010000000000000000000000000000004000000000000000000008000000000080008000000000000000000000000000000000000000000080002800000000000120000000000004000000000000000000000004000000400000002000800000020000000080000000000000008000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x8f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x596",
- "extraData": "0x",
- "baseFeePerGas": "0x1b7f",
- "blockHash": "0xdb3eb92355d58f317e762879ec891a76e0d9ba32a43f0a70f862af93780ef078",
- "transactions": [
- "0xf87a73821b8083011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0de521643ceaf711d0d3b6cda406ef8fba599658fccc750139851846435eba8afa057f5427948ca8d46609925641f81f72115860c16228821020b8020846a4c3158"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xcdcf99c6e2e7d0951f762e787bdbe0e2b3b320815c9d2be91e9cd0848653e839"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np144",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xdb3eb92355d58f317e762879ec891a76e0d9ba32a43f0a70f862af93780ef078",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb7933a921b5acf566cc2b8edb815d81a221222a0ac36dac609927aa75744daaf",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x90",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x5a0",
- "extraData": "0x",
- "baseFeePerGas": "0x1811",
- "blockHash": "0x6718dc62462698e0df2188c40596275679d2b8a49ab6fd6532a3d7c37efd30a6",
- "transactions": [
- "0xf865748218128302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0afbda9fa76936bc6be4d26905bc000b4b14cae781a8e3acb69675b6c5be20835a03858ad4e7e694bf0da56994a1e5f855ff845bae344de14109ae46607aa4172ca"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xcc9476183d27810e9738f382c7f2124976735ed89bbafc7dc19c99db8cfa9ad1"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np145",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x6718dc62462698e0df2188c40596275679d2b8a49ab6fd6532a3d7c37efd30a6",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa8a6a6386a956afbc3163f2ccdcaeffeb9b12c10d4bb40f2ef67bcb6df7cf64c",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x91",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x5aa",
- "extraData": "0x",
- "baseFeePerGas": "0x1512",
- "blockHash": "0x891051fb49d284166b72a30c29b63bfe59994c9db2d89e54ca0791b4dfdb68fb",
- "transactions": [
- "0x02f86b870c72dd9d5e883e7501821513825208947da59d0dfbe21f43e842e8afb43e12a6445bbac00180c080a06ca026ba6084e875f3ae5220bc6beb1cdb34e8415b4082a23dd2a0f7c13f81eca0568da83b9f5855b786ac46fb241eee56b6165c3cc350d604e155aca72b0e0eb1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf67e5fab2e7cacf5b89acd75ec53b0527d45435adddac6ee7523a345dcbcdceb"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np146",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x891051fb49d284166b72a30c29b63bfe59994c9db2d89e54ca0791b4dfdb68fb",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x9ee7ad908d7c553d62d14ecd6a1e9eac6ed728f9a0d0dd8aa8db149e6e803262",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x92",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x5b4",
- "extraData": "0x",
- "baseFeePerGas": "0x1271",
- "blockHash": "0x2ef94fa352357c07d9be6e271d8096b2cbf7dcae9bad922e95bc7c7c24375e7c",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0xd",
- "validatorIndex": "0x5",
- "address": "0x956062137518b270d730d4753000896de17c100a",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe20f8ab522b2f0d12c068043852139965161851ad910b840db53604c8774a579"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np147",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x2ef94fa352357c07d9be6e271d8096b2cbf7dcae9bad922e95bc7c7c24375e7c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x14111c2a0f5c36f6b8ea455b9b897ab921a0f530aaee00447af56ffc35940e32",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x93",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x5be",
- "extraData": "0x",
- "baseFeePerGas": "0x1023",
- "blockHash": "0x406fbf5c2aa4db48fce6fe0041d09a3387c2c18c57a4fb77eca5d073586ca3ea",
- "transactions": [
- "0xf88376821024830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa08e5e1207971ec2479337fa7c80f843dd80d51224eb9f9d8c37b1758d3d5acae4a04d2f89fb9005dc18fa4c72e8b1b4e611f90ca9c5e346b6201dfe4b83ec39c519"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf982160785861cb970559d980208dd00e6a2ec315f5857df175891b171438eeb"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np148",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x406fbf5c2aa4db48fce6fe0041d09a3387c2c18c57a4fb77eca5d073586ca3ea",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc43ae2200cea3bdd1b211157150bd773118c818669e2650659ef3807ac7d2c29",
- "receiptsRoot": "0x1f4bdefd1b3ded1be79051fe46e6e09f4543d4c983fdc21dee02b1e43fb34959",
- "logsBloom": "0x00000000000000000000000000000110000000000002000000000000000000020008000000000000000800001000000000000000000000000020000010000400000000000000000000001000000000000000000000000000000020000000000000101000000000800000000000000000080000000000000000000000000000010000080000080000800000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000200000020000000000000000000000000002000001000000000040002000000024000000000280000000000000000000000000020000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x94",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x5c8",
- "extraData": "0x",
- "baseFeePerGas": "0xe20",
- "blockHash": "0x34ca9a29c1cef7e8011dcce6240c1e36ee8e64643fc0ed98cb436d2f9a21baa2",
- "transactions": [
- "0xf87a77820e2183011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0b5b7b281fbe78ca0f9819a9015997a42ee896462db5ea7de089cd7e2cf84b346a02bc85175e51da947f89f947c30d7c1d77daa6e654a0007e56de98812039a76bd"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x230954c737211b72d5c7dcfe420bb07d5d72f2b4868c5976dd22c00d3df0c0b6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np149",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x34ca9a29c1cef7e8011dcce6240c1e36ee8e64643fc0ed98cb436d2f9a21baa2",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x21cafe51bfa7793c9a02f20282b59cbb5156dce1e252ab61f98fdd5cdecf8495",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x95",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x5d2",
- "extraData": "0x",
- "baseFeePerGas": "0xc5d",
- "blockHash": "0xed939dcec9a20516bd7bb357af132b884efb9f6a6fc2bc04d4a1e5063f653031",
- "transactions": [
- "0xf86578820c5e8302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0371194d9f0d8b28bc888d45cc571dd73c9dd620d54184b9776256d5e07049350a05f7bfb7cdccb54a2f0ea01374f1474e694daa1b128076bdc33efcee9bc0d56a7"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb7743e65d6bbe09d5531f1bc98964f75943d8c13e27527ca6afd40ca069265d4"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np150",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xed939dcec9a20516bd7bb357af132b884efb9f6a6fc2bc04d4a1e5063f653031",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x503c44cab4d6c0010c3493e219249f1e30cfff1979b9da7268fd1121af73d872",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x96",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x5dc",
- "extraData": "0x",
- "baseFeePerGas": "0xad3",
- "blockHash": "0x136665ab7316f05d4419e1f96315d3386b85ec0baeed10c0233f6e4148815746",
- "transactions": [
- "0xf86879820ad48252089484873854dba02cf6a765a6277a311301b2656a7f01808718e5bb3abd10a0a0ab3202c9ba5532322b9d4eb7f4bdf19369f04c97f008cf407a2668f5353e8a1fa05affa251c8d29f1741d26b42a8720c416f7832593cd3b64dff1311a337799e8f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x31ac943dc649c639fa6221400183ca827c07b812a6fbfc1795eb835aa280adf3"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np151",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x136665ab7316f05d4419e1f96315d3386b85ec0baeed10c0233f6e4148815746",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2e257bca2ea424f7c304c42fc35b14c8d3fd46c9066c7f895f775a2065a14bab",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x97",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x5e6",
- "extraData": "0x",
- "baseFeePerGas": "0x979",
- "blockHash": "0xefc08cafa0b7c0e0bc67c0dbd563a855ba55f389d947bd9c524be5ef789505ba",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0xe",
- "validatorIndex": "0x5",
- "address": "0x2a0ab732b4e9d85ef7dc25303b64ab527c25a4d7",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xded49c937c48d466987a4130f4b6d04ef658029673c3afc99f70f33b552e178d"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np152",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xefc08cafa0b7c0e0bc67c0dbd563a855ba55f389d947bd9c524be5ef789505ba",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa124fe0abd3682da7263262172c9d2c57fb42d4f131cbc9f24ddea0ec1505e48",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x98",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x5f0",
- "extraData": "0x",
- "baseFeePerGas": "0x84a",
- "blockHash": "0xb7a12ba1b0cd24019d0b9864ed28c0d460425eb1bd32837538d99da90f5c65b7",
- "transactions": [
- "0xf8837a82084b830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0be58da9e68f28cf1dd209a610214982ba767249f3b92cd8c0fb3850a9ee194d6a0613f59eec6c092b6d2fc55de85bc67b21c261dc48f1ddb74af3aac438b27ccd5"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa0effc449cab515020d2012897155a792bce529cbd8d5a4cf94d0bbf141afeb6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np153",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb7a12ba1b0cd24019d0b9864ed28c0d460425eb1bd32837538d99da90f5c65b7",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3c05bdceef0bdc9f676a3a0c00151f975e469e5bb08ab08f3eed090987119672",
- "receiptsRoot": "0x73faa109b88bfbf7e2a71c36d556d9286c0a26988680cbe3058f045fd361b3b0",
- "logsBloom": "0x00004000000800000000000000000000000000000000000000000000000000000004000000080000000000000800000000000000500000000000000000000200000000001000000800000000000002008000080000000000000000000000000000000000000000000008000200000000000000000000000000000001000000000000000000101000004000000000000000000000000000000000000000000000000000000080000000000000000000008200000000000080000000000000000000000000000000000800000000000000000000000400000080020002000000001040000000000000000000000000004000000000000000008000008000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x99",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x5fa",
- "extraData": "0x",
- "baseFeePerGas": "0x742",
- "blockHash": "0x0292db163d287eeb39bd22b82c483c9b83a9103a0c425a4f3954ef2330cc1718",
- "transactions": [
- "0xf87a7b82074383011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0b9eb0510fdc334dde88b8ac75869aa2dd53988191ae1df94b7b926eae9b18050a00cbd9e12b7185723ed407175a7a70fa5cc0dbc4014b3040a9ade24a4eb97c8c1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x1f36d9c66a0d437d8e49ffaeaa00f341e9630791b374e8bc0c16059c7445721f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np154",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x0292db163d287eeb39bd22b82c483c9b83a9103a0c425a4f3954ef2330cc1718",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc2e93862e26d4df238b2b83a3ee0e008f25123aa211d83906fcd77bc9fd226ab",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x9a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x604",
- "extraData": "0x",
- "baseFeePerGas": "0x65b",
- "blockHash": "0xaeab3fe4b09329235bd8a0399db4d944fe1b247a91055c7de7f53703c94357ea",
- "transactions": [
- "0xf8657c82065c8302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0e5959821e9fe4b896ef2559fe6524aadead228d89f923061b6d2d340f6b9307fa02ed2929f37d24a57229f7a579aaab2d9551e71b0822895e91f04e7824da9a861"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x34f89e6134f26e7110b47ffc942a847d8c03deeed1b33b9c041218c4e1a1a4e6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np155",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xaeab3fe4b09329235bd8a0399db4d944fe1b247a91055c7de7f53703c94357ea",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x0c94e7ea002f7b3bcc5100783e1e792160fb73ff4e836cd295e34423ff72f2a6",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x9b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x60e",
- "extraData": "0x",
- "baseFeePerGas": "0x591",
- "blockHash": "0xcc221bd9ee16f8302994c688cd7cc18313e686cf21f29edea5da5ac08a28a9b6",
- "transactions": [
- "0x02f86b870c72dd9d5e883e7d01820592825208948d36bbb3d6fbf24f38ba020d9ceeef5d4562f5f20180c001a0f9075613b9069dab277505c54e8381b0bb91032f688a6fe036ef83f016771897a04cb4fc2e695439af564635863f0855e1f40865997663d900bc2ab572e78a70a2"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x774404c430041ca4a58fdc281e99bf6fcb014973165370556d9e73fdec6d597b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np156",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xcc221bd9ee16f8302994c688cd7cc18313e686cf21f29edea5da5ac08a28a9b6",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x04ba5addea7916f0483658ea884c052ea6d759eeda62b9b47ee307bd46525bb0",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x9c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x618",
- "extraData": "0x",
- "baseFeePerGas": "0x4df",
- "blockHash": "0x8c922bb4a1c7aad6fdc09082e5c90427d0643ffd281d0154cdd71a372108c5da",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0xf",
- "validatorIndex": "0x5",
- "address": "0x6e3faf1e27d45fca70234ae8f6f0a734622cff8a",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd616971210c381584bf4846ab5837b53e062cbbb89d112c758b4bd00ce577f09"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np157",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8c922bb4a1c7aad6fdc09082e5c90427d0643ffd281d0154cdd71a372108c5da",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3ae465791b7ce8492961c071fc50b34434552a1ab36c1854fbc308f55729e827",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x9d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x622",
- "extraData": "0x",
- "baseFeePerGas": "0x444",
- "blockHash": "0x1a883eed15a2f61dc157140d45f50e4bc6cc08ead08adf3ff0804ec9f1104c8a",
- "transactions": [
- "0xf8837e820445830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0140e450a0bc12c61bdf6acca1a56178466d88014d00a4a09c1088ce184128327a07daad374bb0d7fe879212bd7bdc8d454b4996bd7bebd6f6d0d4636ec7df28d0b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xcdf6383634b0431468f6f5af19a2b7a087478b42489608c64555ea1ae0a7ee19"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np158",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1a883eed15a2f61dc157140d45f50e4bc6cc08ead08adf3ff0804ec9f1104c8a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe01f0f54fba649cdc0d6da6a9f519b6918149d82f134845e99847ff7b362b050",
- "receiptsRoot": "0x36340e11a5f180862d423a676049d1c934b8d27940fdd50dc8704563ffd27b0f",
- "logsBloom": "0x00000000000000008000000000800080000000000000000018040000000100100000000000010000000000000000000000000000000000000000000000010000000080080000800000000000010000000010000000000802000000000000000000000000001000000000004000000000000000000000004000000000000000004000000000000000000000000000000000000000000000401000000000010000000000000000000000000000000080000000000000000000000040000240000000000000000000000001000000000000000000000000100000000080000040000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x9e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x62c",
- "extraData": "0x",
- "baseFeePerGas": "0x3bc",
- "blockHash": "0x5efcd9acd57f0652b1aa46406cf889b0da1f05e34fa9b642f7dec1bd924f3fd0",
- "transactions": [
- "0xf87a7f8203bd83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0331dd2ec5bf4bddde96cacb8a28ed1cc577d4a2289bae6da0e6ef3c9b1287fc3a04c2925895dfbed2b00ac9a2040371970da1a7fd333dc1e551e2e268c56717c79"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x00ec22e5df77320b4142c54fceaf2fe7ea30d1a72dc9c969a22acf66858d582b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np159",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5efcd9acd57f0652b1aa46406cf889b0da1f05e34fa9b642f7dec1bd924f3fd0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa6e1d00e54b539beb170e510a8594fdd73ad2bf8e695a0f052291454ee1f3ade",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x9f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x636",
- "extraData": "0x",
- "baseFeePerGas": "0x345",
- "blockHash": "0x97570840bed5a39a4580302a64cbaf7ed55bcc82e9296502c4873d84f8384004",
- "transactions": [
- "0xf86681808203468302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0f4a1b0681bb3c513fa757b560ef9cf0f004b8da91d920e157506ebb60d0d3954a0738da3b003ce68a9b4032770c0fe6481f54ea43baba54cad7153369486728790"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xcb32d77facfda4decff9e08df5a5810fa42585fdf96f0db9b63b196116fbb6af"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np160",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x97570840bed5a39a4580302a64cbaf7ed55bcc82e9296502c4873d84f8384004",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x9277b9454326e993436cef0b9a2e775cff46439f3d683da55a983e9850943a20",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xa0",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x640",
- "extraData": "0x",
- "baseFeePerGas": "0x2dd",
- "blockHash": "0x4b01a4f9f924e7e386d2c94653c80bab2e3069d744ab107dd181d9b5f5d176d0",
- "transactions": [
- "0xf86981818202de82520894c19a797fa1fd590cd2e5b42d1cf5f246e29b916801808718e5bb3abd109fa0857754afc3330f54a3e6400f502ad4a850a968671b641e271dcb9f68aacea291a07d8f3fb2f3062c39d4271535a7d02960be9cb5a0a8de0baef2211604576369bf"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x6d76316f272f0212123d0b4b21d16835fe6f7a2b4d1960386d8a161da2b7c6a2"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np161",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x4b01a4f9f924e7e386d2c94653c80bab2e3069d744ab107dd181d9b5f5d176d0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc9f74f81ace1e39dd67d9903221e22f1558da032968a4aaff354eaa92289f5c6",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xa1",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x64a",
- "extraData": "0x",
- "baseFeePerGas": "0x282",
- "blockHash": "0x9431a8d1844da9cc43e8b338de21722e23f78ed5b46391a6d924595759773286",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x10",
- "validatorIndex": "0x5",
- "address": "0x8a8950f7623663222542c9469c73be3c4c81bbdf",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x2de2da72ae329e359b655fc6311a707b06dc930126a27261b0e8ec803bdb5cbf"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np162",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x9431a8d1844da9cc43e8b338de21722e23f78ed5b46391a6d924595759773286",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x853c0a8e4e964cc857f2dd40b10de2cefb2294a7da4d83d7b1da2f9581ee0961",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xa2",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x654",
- "extraData": "0x",
- "baseFeePerGas": "0x232",
- "blockHash": "0x604f361dbc1085fb70812b618e53035d4747c3969a96620e4c179a93be5d124d",
- "transactions": [
- "0xf8848182820233830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa01a7b8af754eba43e369957a413a3fef1255659f2bd05f902b29ee213c3989d46a00ca88ac892d58fdb0d9bd7640ca797280081275886cc2ac155a814eb498e7d7b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x08bed4b39d14dc1e72e80f605573cde6145b12693204f9af18bbc94a82389500"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np163",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x604f361dbc1085fb70812b618e53035d4747c3969a96620e4c179a93be5d124d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd89e02bde63bf214ad6a3bc94f3b092bc2a1fbc13f172049c854ecb070630fe6",
- "receiptsRoot": "0x596413315e1e3fd6fc21e4ce81e618b76ad2bf7babfa040c822a5bcbffeb63be",
- "logsBloom": "0x00080000001044010000000800000000000000000010000000040000000020000000800000000040000000000000000001008000000000800000000000000000000000001000000000020000080000000000000000000000000000000000000002000044000000000000000000000000000000000000000000000000000000000000002000000000000000800000000000000000000000000000000000104000800000000000000004000004000002000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000800020000000000000000000040000000000000000020",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xa3",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x65e",
- "extraData": "0x",
- "baseFeePerGas": "0x1ec",
- "blockHash": "0x00979cd18ef128aa75a51ad8606b381ce53f72c37d17bc6c6613d8de722abcfa",
- "transactions": [
- "0xf87b81838201ed83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa06e6e8187c035f2788ba44e3f47b4102a1f263ae2f601b2fbfa9e2cdc3b0c22b1a06c229eebca1bdda1aba424cd8cf296f386cf2d50a6add950fd6cb34aac442c5a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe437f0465ac29b0e889ef4f577c939dd39363c08fcfc81ee61aa0b4f55805f69"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np164",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x00979cd18ef128aa75a51ad8606b381ce53f72c37d17bc6c6613d8de722abcfa",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe2672f9ae97aeaeb22f42c389301a3b79ad6c47ad88c54e18e1d7a4ed5e9c903",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xa4",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x668",
- "extraData": "0x",
- "baseFeePerGas": "0x1af",
- "blockHash": "0xcabf8c1b47839908f6eb28261876b52404f3f8787c94d8aadc0aca721ff35d13",
- "transactions": [
- "0xf86681848201b08302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa08ab61fe0265afe289954f7c2af8e070f3c40dda39e6cb6ff5c798fc7bc87b55ba00a8a440a7ba5a04a7bb73b093e94734dda228d33a43c640d719aef5ea5e81764"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x89ca120183cc7085b6d4674d779fc4fbc9de520779bfbc3ebf65f9663cb88080"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np165",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xcabf8c1b47839908f6eb28261876b52404f3f8787c94d8aadc0aca721ff35d13",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4d9cd7b52c0daaec9a019730c237a2c3424f5d5a004c8bc9fa23997f3ec33768",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xa5",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x672",
- "extraData": "0x",
- "baseFeePerGas": "0x17a",
- "blockHash": "0x6dcec039f7777c1fd96bbdd342e0ed787211132f753cf73a59847dc6cb30a6ff",
- "transactions": [
- "0x02f86c870c72dd9d5e883e81850182017b825208946922e93e3827642ce4b883c756b31abf800366490180c080a089e6d36baf81743f164397205ded9e5b3c807e943610d5b9adb9cfeb71b90299a03d56c57f842a92a5eb71c8f9f394fe106d993960421c711498013806957fdcaf"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb15d5954c7b78ab09ede922684487c7a60368e82fdc7b5a0916842e58a44422b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np166",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x6dcec039f7777c1fd96bbdd342e0ed787211132f753cf73a59847dc6cb30a6ff",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x03629dac3f669a8262e8246d46bac9acfb7cbca336d02e90c081561fa0b22aba",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xa6",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x67c",
- "extraData": "0x",
- "baseFeePerGas": "0x14b",
- "blockHash": "0x760da169c77450231e6a0d2dd4aad67de84633eb6918fc8607a3a709eea07bef",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x11",
- "validatorIndex": "0x5",
- "address": "0xfe1dcd3abfcd6b1655a026e60a05d03a7f71e4b6",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xad13055a49d2b6a4ffc8b781998ff79086adad2fd6470a0563a43b740128c5f2"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np167",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x760da169c77450231e6a0d2dd4aad67de84633eb6918fc8607a3a709eea07bef",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4f5e79d4af5565b3b53649b1ddc3a03209cb583e7beb03db8b32924c641e6912",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xa7",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x686",
- "extraData": "0x",
- "baseFeePerGas": "0x122",
- "blockHash": "0xfcb210229cb48baf3d535e48a7577041268eadd6027942084a56dbec8f8423a9",
- "transactions": [
- "0xf8848186820123830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0b2aafb3e2678dd48e6f31874bd478778480815c9d110ec8cc77a42f7d52999daa00705b1266fc1087167cc531caa9d2e0a0c8779e4ad5020d9d3a16500bf5b96a1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9e9909e4ed44f5539427ee3bc70ee8b630ccdaea4d0f1ed5337a067e8337119f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np168",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xfcb210229cb48baf3d535e48a7577041268eadd6027942084a56dbec8f8423a9",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8c6c100b7c75ced82b38315fd50c5439478a7ee256073ce17b845e0815912eab",
- "receiptsRoot": "0xf8f8c85b17ada66c06f8e41b58b45213619bb309a197896adbaff4e9139967b1",
- "logsBloom": "0x80000000000000000000000000000000800000000004008000200000000000000002820000000000000000000000000000000000000040020400000000000000000000000200000000000000000000000000000040000400000000000000000000000000000000000000000000000000000000000000100000000000000000000000000040080000000000000000000000000000000000200000000000000080000200000000000000000000000000000000000000000000000000000100000003000200000000000000000000000000000000000000200000000000000000000000004000000004000000040001010000000080400000000000000040000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xa8",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x690",
- "extraData": "0x",
- "baseFeePerGas": "0xfe",
- "blockHash": "0x796a4e02d1da9c86b1a2e7b2ef1d82e1ebdac143ec7ff4a67dae2b241b22c3c1",
- "transactions": [
- "0xf87a818781ff83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0b1e7ca73ef581fc880deb34aa6cf7958f6ce110efd121d48fb2292a747864815a02bf94b17dc034d8934b885faa269a9430a755ebfb4c6e87378376a094704f464"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xbf1f3aba184e08d4c650f05fe3d948bdda6c2d6982f277f2cd6b1a60cd4f3dac"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np169",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x796a4e02d1da9c86b1a2e7b2ef1d82e1ebdac143ec7ff4a67dae2b241b22c3c1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x9f527744fd44cf4c2ba60fe62d25d4f19e64c034cbf24785e0128d5fafa19e2a",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xa9",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x69a",
- "extraData": "0x",
- "baseFeePerGas": "0xdf",
- "blockHash": "0x29a0d081e8aec6b2dcb307d73ca48d7d50e434617daf0e81fd28b35be9c7995d",
- "transactions": [
- "0xf865818881e08302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0c583bd1010c1e4158466575fb0c09ff710a5ff07c8f7a6e7960d90bffef8bd34a059ea0ba5c6fc64aad73252c780de287599d3100d80f7b1d3201b4865d82c0cad"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xbb70fe131f94783dba356c8d4d9d319247ef61c768134303f0db85ee3ef0496f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np170",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x29a0d081e8aec6b2dcb307d73ca48d7d50e434617daf0e81fd28b35be9c7995d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x45c5f07a7d94c320222f43c12b04081fdbe870be18a2b76f7122bd7f4554118b",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xaa",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x6a4",
- "extraData": "0x",
- "baseFeePerGas": "0xc4",
- "blockHash": "0xe878e98d05f60a8fd741a4aaab17a91c538f21552ac41922fe2b755e4f0e534c",
- "transactions": [
- "0xf868818981c582520894bceef655b5a034911f1c3718ce056531b45ef03b01808718e5bb3abd109fa0626dfd18ca500eedb8b439667d9b8d965da2f2d8ffcd36a5c5b60b9a05a52d9fa07271175e4b74032edeb9b678ffb5e460edb2986652e45ff9123aece5f6c66838"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x6a81ebd3bde6cc54a2521aa72de29ef191e3b56d94953439a72cafdaa2996da0"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np171",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe878e98d05f60a8fd741a4aaab17a91c538f21552ac41922fe2b755e4f0e534c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf4a19b9765604687783462dbf36a0063ada2ba7babb4dd1c4857b2449565a41d",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xab",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x6ae",
- "extraData": "0x",
- "baseFeePerGas": "0xac",
- "blockHash": "0xc3f33c71274b456303efd80efacba7d5fccb0ed278ee24e5594a38c45a294315",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x12",
- "validatorIndex": "0x5",
- "address": "0x087d80f7f182dd44f184aa86ca34488853ebcc04",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4c83e809a52ac52a587d94590c35c71b72742bd15915fca466a9aaec4f2dbfed"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np172",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xc3f33c71274b456303efd80efacba7d5fccb0ed278ee24e5594a38c45a294315",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4f9e280291036fb6cd64598fe0517d64d6da264d07d7fc3b8d664221d7af9021",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xac",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x6b8",
- "extraData": "0x",
- "baseFeePerGas": "0x97",
- "blockHash": "0xd785018f59628b9f13cc2d4a45e0b4b3af183acce4e5752346e79dbcdf7de4e5",
- "transactions": [
- "0xf883818a8198830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a05f47b0ab77130dcc8f7143a2afaace6a2d1f82e25839cb9adee5aaebfe7dc681a05af90b75de35c90709b83861d8fdfd7805a89b1e76a4bdd5987e578ba72fc37e"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x268fc70790f00ad0759497585267fbdc92afba63ba01e211faae932f0639854a"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np173",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xd785018f59628b9f13cc2d4a45e0b4b3af183acce4e5752346e79dbcdf7de4e5",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe01cadedc509806ea9cd7475312a3768de034d1c849abadc46237b8cd4163179",
- "receiptsRoot": "0x15dc68f6de1b068b96d32dbc11a048b915e7d62bd3662689ae5c095bb6ddab37",
- "logsBloom": "0x00000100000000004000000004000000000000000000000000000000000000000000000004000000018004000000000000000000000000000002000000000000000020002000400000002000020000000100000000000000000080010000400000000000000200000000040000000000000000000000010000002000000000000000000000000004040000000000000000000000000000000000000000004000000000000000000000080000004000000000000000000000001000000000000100000800040000000000000000000000000000000000000000000000000000000000000000400000000000004001000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xad",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x6c2",
- "extraData": "0x",
- "baseFeePerGas": "0x85",
- "blockHash": "0xbcff8f4e8c3d70d310900cd8246c3456e237ab8ea9fc036601995404b141e3bb",
- "transactions": [
- "0xf87a818b818683011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa04a74ea0833e42d624ba0d9b589a16e05feae1c2dee89abfb29df95b650d3e756a037135f3e24572eb9d927a02c0c4eee7fd5d8a181e2384ef3b3b04c49c9dbbbe1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7e544f42df99d5666085b70bc57b3ca175be50b7a9643f26f464124df632d562"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np174",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xbcff8f4e8c3d70d310900cd8246c3456e237ab8ea9fc036601995404b141e3bb",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa862687747ffc388414ee5953589a70f2161a130886348157257a52347be9157",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xae",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x6cc",
- "extraData": "0x",
- "baseFeePerGas": "0x75",
- "blockHash": "0x943b23302ffed329664d45fee15ca334c92aa6195b22cb44c7fdd5bdbbe4e7d4",
- "transactions": [
- "0xf864818c768302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a024414367540c94b1bd3ce29dd0b4ee6bdece373f9417e96f0ef8d632e82c4ecba031dae9539e84f7351a5b92f1246dfd909dd5a383011fbd44bb8e87fb6870189b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd59cf5f55903ba577be835706b27d78a50cacb25271f35a5f57fcb88a3b576f3"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np175",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x943b23302ffed329664d45fee15ca334c92aa6195b22cb44c7fdd5bdbbe4e7d4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd70339e1158ecc97dc7db86b3177202ffa3dcba386fd52e54e6fe8b728003154",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xaf",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x6d6",
- "extraData": "0x",
- "baseFeePerGas": "0x67",
- "blockHash": "0xd2a0fc154d0bb77b346c7bb3532d24581bc1a5b5bf9ced18b419a6309ff84351",
- "transactions": [
- "0x02f86a870c72dd9d5e883e818d0168825208945a6e7a4754af8e7f47fc9493040d853e7b01e39d0180c001a08c62285d8318f84e669d3a135f99bbfe054422c48e44c5b9ce95891f87a37122a028e75a73707ee665c58ff54791b62bd43a79de1522918f4f13f00ed4bd82b71b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x551cced461be11efdeaf8e47f3a91bb66d532af7294c4461c8009c5833bdbf57"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np176",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xd2a0fc154d0bb77b346c7bb3532d24581bc1a5b5bf9ced18b419a6309ff84351",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x1bc27508b52de3a750cc928dd89954462b4e4dbfb60707442e60b4b23aabb816",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xb0",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x6e0",
- "extraData": "0x",
- "baseFeePerGas": "0x5b",
- "blockHash": "0xe3072603b13de812d2c58ece96eeb4f32ff7e3e93c8b9121dd18f0682a750970",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x13",
- "validatorIndex": "0x5",
- "address": "0xf4f97c88c409dcf3789b5b518da3f7d266c48806",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc1e0e6907a57eefd12f1f95d28967146c836d72d281e7609de23d0a02351e978"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np177",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe3072603b13de812d2c58ece96eeb4f32ff7e3e93c8b9121dd18f0682a750970",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x78497ebf1fbf03732772a8c96b2fe6902af5ab844e49f2685763b4366ce8ddf6",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xb1",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x6ea",
- "extraData": "0x",
- "baseFeePerGas": "0x50",
- "blockHash": "0x996acbdde853cdc1e21426f4e53d07c09a13ed50798ee071582f24cc1014e238",
- "transactions": [
- "0xf882818e51830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0fd5ea8b7df5c3ecd87220b8ad7d15198722d94a64b0e8e099c8c7384c1d08a33a039707925aba6dad8d06c162fd292df0bf03033b7b6d1204ae4be0ce6f487fa71"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9d580c0ac3a7f00fdc3b135b758ae7c80ab135e907793fcf9621a3a3023ca205"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np178",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x996acbdde853cdc1e21426f4e53d07c09a13ed50798ee071582f24cc1014e238",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x197c4166e7f8f68ee6965c87c8ce720bee776a7b7119870371e6262bc913468d",
- "receiptsRoot": "0x7c66f99e4434aa19cdf8845c495068fa5be336b71978d6fa90966129f300218a",
- "logsBloom": "0x00000000000000000000000000400200000000000000800000000000000000008000008000000000000000000000000000000000000000000040000004000041004000000000000000000000000800000000000000000000000000000000080100000000000000000000000020000000004200000000001000000002000000100008080200000004000000000000200000000000000010000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000800000000200000000000000000000100002000000000000000000002000000000000000000100000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xb2",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x6f4",
- "extraData": "0x",
- "baseFeePerGas": "0x47",
- "blockHash": "0xf00d6a4f13579131abcd2c856040cf9295caed200698d7cf7a1574690b36b0bf",
- "transactions": [
- "0xf879818f4883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a03e0f9aa0ca6ec8b4f9e7fccd9b710c0de4414618726e298b36816cd6d689a89aa07d3950b5ebbaa58f5c4e0bc0571499d9d58d563ce2c039664cf210815e43d0e5"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa7fd4dbac4bb62307ac7ad285ffa6a11ec679d950de2bd41839b8a846e239886"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np179",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf00d6a4f13579131abcd2c856040cf9295caed200698d7cf7a1574690b36b0bf",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf56610f73e08c2ccaaa314c23bc79022214919c02d450cab12975da3546b68fd",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xb3",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x6fe",
- "extraData": "0x",
- "baseFeePerGas": "0x3f",
- "blockHash": "0x5711092388b2fd00bf4234aca7eede2bdc9329ea12e2777893d9001f4f2c8468",
- "transactions": [
- "0xf8648190408302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0f41a67e92f032c43cc601daa205026cc5a97affb0f92064991122a1aa92428dfa0237053c462847907c840ada5076caab16adc071da181e9277926a310adcb8e3d"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x6ba7b0ac30a04e11a3116b43700d91359e6b06a49058e543198d4b21e75fb165"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np180",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5711092388b2fd00bf4234aca7eede2bdc9329ea12e2777893d9001f4f2c8468",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xfa57370da0cc72170d7838b8f8198b0ebd949e629ca3a09795b9c344dead4af5",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xb4",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x708",
- "extraData": "0x",
- "baseFeePerGas": "0x38",
- "blockHash": "0xb58807a37c03cf3b0f1c9104cfd96f6cb02b1e08e0eecdd369cac48d0003b517",
- "transactions": [
- "0xf8678191398252089427952171c7fcdf0ddc765ab4f4e1c537cb29e5e501808718e5bb3abd109fa076a045602a7de6b1414bdc881a321db0ce5255e878a65513bad6ac3b7f473aa7a01a33017b5bcf6e059de612293db8e62b4c4a3414a7ba057c08dd6172fb78a86c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x8835104ed35ffd4db64660b9049e1c0328e502fd4f3744749e69183677b8474b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np181",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb58807a37c03cf3b0f1c9104cfd96f6cb02b1e08e0eecdd369cac48d0003b517",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6d3f029e56f9ee3db9ed8f9156cd853fb1fcafe05475ec8c2a4dd337a5e3e20e",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xb5",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x712",
- "extraData": "0x",
- "baseFeePerGas": "0x32",
- "blockHash": "0x56b5aa12ccfcbd86737fe279608cb7585fbc1e48ddfcdac859bb959f4d3aa92a",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x14",
- "validatorIndex": "0x5",
- "address": "0x892f60b39450a0e770f00a836761c8e964fd7467",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x562f276b9f9ed46303e700c8863ad75fadff5fc8df27a90744ea04ad1fe8e801"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np182",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x56b5aa12ccfcbd86737fe279608cb7585fbc1e48ddfcdac859bb959f4d3aa92a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x58a6332c9e7b85155106515f20355c54bb03c6682024baa694cbaff31c3b84ff",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xb6",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x71c",
- "extraData": "0x",
- "baseFeePerGas": "0x2c",
- "blockHash": "0xb0d7fbd46bd67d4c3fa51d0e1b1defaf69237d0f6e2049486c907b049b47e01c",
- "transactions": [
- "0xf88281922d830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa01ae40537174a716b5f33d153e9251ae8c1d72852da25823f6d954b9dbc5740cca02ff07812990e0645cab5c9d89028f7255f50d0eee5bee334b3ba10d71485c421"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd19f68026d22ae0f60215cfe4a160986c60378f554c763651d872ed82ad69ebb"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np183",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb0d7fbd46bd67d4c3fa51d0e1b1defaf69237d0f6e2049486c907b049b47e01c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x55d4e87d040358926c84414b854fc47a75b9963df75e359a2182464c51201088",
- "receiptsRoot": "0x1fccfe93768ce1ed60d0f83cbc8bef650cb1d056c35a4b233ae41a1b8219f92d",
- "logsBloom": "0x00000080000000000000000000000000000000000000004000000000000010000000000000000000000000000000014000800000000000000100102000000000000000000000020000000000200000000000000000100000000000200000002000000000000000000000002000000000000000000000000000000000000000001000002000400020040000000000000200000000000000000000000000000000000000002000000000000000000000100000000000022000000000000000000000000000000004000000080000000000000000000000000004004000000000040002000040000000000000000000000000000000000000000000000000100000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xb7",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x726",
- "extraData": "0x",
- "baseFeePerGas": "0x27",
- "blockHash": "0x66011454670d5664e8e555d01d612c70cadabfb6a4a317f375495ef3daa9d1b4",
- "transactions": [
- "0xf87981932883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa02d1dcc844efba97a51917ab3d79f837680f42e2e76ab51b4b630cbe9a6e4e10ea03d3f624c82de14b23b0c5553621cc9a4c649cd856a616f5a91bad8bf0c0d1709"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf087a515b4b62d707991988eb912d082b85ecdd52effc9e8a1ddf15a74388860"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np184",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x66011454670d5664e8e555d01d612c70cadabfb6a4a317f375495ef3daa9d1b4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd3ec16ab633987e17a4e8c573014b1fc9919f004b3cb80da11280d1caad1fe3e",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xb8",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x730",
- "extraData": "0x",
- "baseFeePerGas": "0x23",
- "blockHash": "0x36e1e3513460407c80dfcfab2d2826ea432dadb99aa7415f9cffcf56faf27f94",
- "transactions": [
- "0xf8648194248302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a01e5301a3386e11893c0275367ac5d31fea88f31731e66ee769bfddc3486cff1aa0203dbf8bbfa9df2d635e1889d51e06611e8c2a769609908aeb5e97decb03b141"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf7e28b7daff5fad40ec1ef6a2b7e9066558126f62309a2ab0d0d775d892a06d6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np185",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x36e1e3513460407c80dfcfab2d2826ea432dadb99aa7415f9cffcf56faf27f94",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x692ddd6938f00a07474233619f579b30c1eaaef353a2b0cc24b47d7898aa5c49",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xb9",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x73a",
- "extraData": "0x",
- "baseFeePerGas": "0x1f",
- "blockHash": "0x44e05b6820cf1d7cf9cd2148d6f71a6a649c9a829b861539d2c950f701e27260",
- "transactions": [
- "0x02f86a870c72dd9d5e883e819501208252089404d6c0c946716aac894fc1653383543a91faab600180c080a0039c18634a9f085ba0cd63685a54ef8f5c5b648856382896c7b0812ee603cd8aa05ecfde61ea3757f59f0d8f0c77df00c0e68392eea1d8b76e726cb94fb5052b8a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x77361844a8f4dd2451e6218d336378b837ba3fab921709708655e3f1ea91a435"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np186",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x44e05b6820cf1d7cf9cd2148d6f71a6a649c9a829b861539d2c950f701e27260",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x9eac86abf4371646a564bb6df622644682e5de5bf01fed388ccaf10700e46e88",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xba",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x744",
- "extraData": "0x",
- "baseFeePerGas": "0x1c",
- "blockHash": "0xcc3b1096f3ce63881c77751baec2048561baa2dc84ea0ef9d3a5515061aa74e0",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x15",
- "validatorIndex": "0x5",
- "address": "0x281c93990bac2c69cf372c9a3b66c406c86cca82",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe3cb33c7b05692a6f25470fbd63ab9c986970190729fab43191379da38bc0d8c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np187",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xcc3b1096f3ce63881c77751baec2048561baa2dc84ea0ef9d3a5515061aa74e0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xff13e99ee95ffe82139758f33a816389654a5c73169b82983de9cf2f1f3dbd9f",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xbb",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x74e",
- "extraData": "0x",
- "baseFeePerGas": "0x19",
- "blockHash": "0x871cb66f77db23f8e70541a647329c5ca9b6d40afd3950d48df4915f300e664a",
- "transactions": [
- "0xf88281961a830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0276782d84f5f6ab0805be5e57923747bae9fa2b06ed4b45bcc364bdb4f09eca1a0484f9fc2a31a4b5f24ba33da54649e6a3261c0bee52d91576246bb54698c1535"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc893f9de119ec83fe37b178b5671d63448e9b5cde4de9a88cace3f52c2591194"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np188",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x871cb66f77db23f8e70541a647329c5ca9b6d40afd3950d48df4915f300e664a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x522c1eb0c4d1332668a2e3676efd54899579d85fd4e7007fd228702d9c964baa",
- "receiptsRoot": "0x90d4e326daf1e15e41687f281f8e638992c4cdfbe590eb4956fd943aa39f1bba",
- "logsBloom": "0x48000040000000000000000000004000000000000000000000400000000000002000000000000000000000000000000018000000000000000000002000000000000000000000100000002000000800000000000000000000000000002000000000000000000000000000000000000000040000020000040000000000000000000000000101000000000000000000010000000000040000000000000000000000008000000000000000000000800000000000201008000000000000001000000000000010000000000000100000000000000000000000040100000000000000000008000000000000000000000000000000000000004000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xbc",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x758",
- "extraData": "0x",
- "baseFeePerGas": "0x16",
- "blockHash": "0x174a8681a0d28b9a3d49afb279714acb2bfe4a3abfe490522bb3d899d3c71c8d",
- "transactions": [
- "0xf87981971783011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0870548904b9e901c294fd1c04a6cff92fbb40491e00a1ffcbc551c6c5eba2db3a0524ff53000a94b71aef3a2c516354bc5d7fdb3f236d4647020762a56d9bd2fbf"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x39c96a6461782ac2efbcb5aaac2e133079b86fb29cb5ea69b0101bdad684ef0d"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np189",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x174a8681a0d28b9a3d49afb279714acb2bfe4a3abfe490522bb3d899d3c71c8d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xfb0eecb29a002997c00e0f67a77d21dd4fa07f2db85e3e362af4bbfcb69b6c12",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xbd",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x762",
- "extraData": "0x",
- "baseFeePerGas": "0x14",
- "blockHash": "0x1b56a73d407c9a5e222c2097149c2f2cbb480a70437ee41779974b8ab968a8e1",
- "transactions": [
- "0xf8648198158302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0111d3d32f82c89fc830943a4aa0b20e013886491e06acede59ea4252b3366c05a07b9f9199ecdb210151db8a50c74fa1488b198db4e5dda3ad1fa003b70d9bd03a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x72a2724cdf77138638a109f691465e55d32759d3c044a6cb41ab091c574e3bdb"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np190",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1b56a73d407c9a5e222c2097149c2f2cbb480a70437ee41779974b8ab968a8e1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x36fce9409ec76cfda58bd4145be0289d761c81131ed0102347b96127fd0888e2",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xbe",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x76c",
- "extraData": "0x",
- "baseFeePerGas": "0x12",
- "blockHash": "0x07d1571c1d0fbaf6cd5c2fa18e868d6dfc2aa56f7ee3bd5aaf61fa816d775ee9",
- "transactions": [
- "0xf86781991382520894478508483cbb05defd7dcdac355dadf06282a6f201808718e5bb3abd109fa0910304dbb7d545a9c528785d26bf9e4c06d4c84fdb1b8d38bc6ee28f3db06178a02ffc39c46a66af7b3af96e1e016a62ca92fc5e7e6b9dbe631acbdc325b7230a1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x178ba15f24f0a8c33eed561d7927979c1215ddec20e1aef318db697ccfad0e03"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np191",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x07d1571c1d0fbaf6cd5c2fa18e868d6dfc2aa56f7ee3bd5aaf61fa816d775ee9",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd5d1fc871c3a4694da0e9a9f453c0e6f4c8f38fbef45db36c67cd354e22eb303",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xbf",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x776",
- "extraData": "0x",
- "baseFeePerGas": "0x10",
- "blockHash": "0xda1708aede1e87f052ee6e9637f879462b613e4cbddacb18aa49907b55094ce4",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x16",
- "validatorIndex": "0x5",
- "address": "0xb12dc850a3b0a3b79fc2255e175241ce20489fe4",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf7b2c01b7c625588c9596972fdebae61db89f0d0f2b21286d4c0fa76683ff946"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np192",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xda1708aede1e87f052ee6e9637f879462b613e4cbddacb18aa49907b55094ce4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4d19a2ce0d61642b6420c9f23ea32bb72ebe24384ed110394d7e5ca98589f055",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xc0",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x780",
- "extraData": "0x",
- "baseFeePerGas": "0xe",
- "blockHash": "0x082079039cffbdf78a5cc86fddb47d96c888e0e90b092f9e0591e0099086cc45",
- "transactions": [
- "0xf882819a0f830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa02356373d8d8ca7c15e547e717f7327ab0d803867cfabedf8d75e4d1cb264862ca011a3879ae15ab356e9558926382b7fa68b5c5a5c5b127b6f5176523dfe0ae986"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x16e43284b041a4086ad1cbab9283d4ad3e8cc7c3a162f60b3df5538344ecdf54"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np193",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x082079039cffbdf78a5cc86fddb47d96c888e0e90b092f9e0591e0099086cc45",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd67263b379522c5059bb0a7164b9cd3fa70697e4012b3b5c519ecf888dbc5700",
- "receiptsRoot": "0xc1c820ad9bde8ce9524a7fa712d4849dc2f9f9553e8c00f1fe6c41323e31fbf7",
- "logsBloom": "0x00000000000000000000000000000000000000000080000000000200000040000000000000000000000000000000000000000000000000000000001000000000000000000000000000001002000004020000000000000000000011000000000000000080000082000082080000000404000000080010000000000000000000000000100000010000000000000400000000000000000000000000000000400402000000000000000000000000000000000000000000200000000000002000000004000000400000002000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000800000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xc1",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x78a",
- "extraData": "0x",
- "baseFeePerGas": "0xd",
- "blockHash": "0xe1207296a903bee61a02dd94d685640d76ab57ea96dd5789819583e35f2d7eb3",
- "transactions": [
- "0xf879819b0e83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa03423551e59962468cb263c416cb4025c462624b8c8c687177571976c345a8d20a0190d3ab5979e300998fc96429a75c50e1c195115cada83e01fb14a28f2e294de"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x0a98ea7f737e17706432eba283d50dde10891b49c3424d46918ed2b6af8ecf90"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np194",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe1207296a903bee61a02dd94d685640d76ab57ea96dd5789819583e35f2d7eb3",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2111d275b4901e864fcded894a9d9a046f9077d8f6c5af65a72c2243a32dbeaa",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xc2",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x794",
- "extraData": "0x",
- "baseFeePerGas": "0xc",
- "blockHash": "0x8fd42cbdbbe1b8de72a5bb13684131e04572585077e0d61a0dfbb38d72ef309f",
- "transactions": [
- "0xf864819c0d8302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0b4dac384ec258b1a752856b3fcda42244c3e648577bf52d74f25313b3327bf1ca02f7b54b9475768335aab1778fd7ec882f3adbc9e78d4d04a0b78e93e4d41a76b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7637225dd61f90c3cb05fae157272985993b34d6c369bfe8372720339fe4ffd2"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np195",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8fd42cbdbbe1b8de72a5bb13684131e04572585077e0d61a0dfbb38d72ef309f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2efd726637cb91156021ac4ae337a87f9a1f28efd620de55b77faef0d3b84b22",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xc3",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x79e",
- "extraData": "0x",
- "baseFeePerGas": "0xb",
- "blockHash": "0x326484b702b3c743f907227c8aad8733b1a6b7fda510512fe4fec0380bfbc0f1",
- "transactions": [
- "0x02f86a870c72dd9d5e883e819d010c82520894ae3f4619b0413d70d3004b9131c3752153074e450180c001a07cb73f8bf18eacc2c753098683a80208ac92089492d43bc0349e3ca458765c54a03bf3eb6da85497e7865d119fde3718cdac76e73109384a997000c0b153401677"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x6a7d064bc053c0f437707df7c36b820cca4a2e9653dd1761941af4070f5273b6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np196",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x326484b702b3c743f907227c8aad8733b1a6b7fda510512fe4fec0380bfbc0f1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xeba72457992e05a38b43a77a78ba648857cec13beb5412b632f6623521fe248d",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xc4",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x7a8",
- "extraData": "0x",
- "baseFeePerGas": "0xa",
- "blockHash": "0x6a40d1d491a8624685fa20d913a684f691f1281da37059d527241526c965874d",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x17",
- "validatorIndex": "0x5",
- "address": "0xd1211001882d2ce16a8553e449b6c8b7f71e6183",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x91c1e6eec8f7944fd6aafdce5477f45d4f6e29298c9ef628a59e441a5e071fae"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np197",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x6a40d1d491a8624685fa20d913a684f691f1281da37059d527241526c965874d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8713a1c42af83625ae9515312298d02425330b20a14b7040ec38f0655cb65317",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xc5",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x7b2",
- "extraData": "0x",
- "baseFeePerGas": "0x9",
- "blockHash": "0x25702b83ea77e2ad219178c026a506fa7a9c3f625b023963bc9c13c0d5cfeb14",
- "transactions": [
- "0xf882819e0a830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa02ed567eed3a763f56fe05c1e44575993df5b6cf67e093e0e9b5ec069ecaf76a2a04891e566e0d136b24d62ffe17f2bfaa0736a68f97b91e298b31897c790b2ed28"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa1c227db9bbd2e49934bef01cbb506dd1e1c0671a81aabb1f90a90025980a3c3"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np198",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x25702b83ea77e2ad219178c026a506fa7a9c3f625b023963bc9c13c0d5cfeb14",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2250f011d079600d76d5905dca93324f2fceb110390e8a7e7177569bd8ec73fd",
- "receiptsRoot": "0x8027ec2e573bf62c00695cb9a0f67e28e4cce8dc44dc641d7388e4864d8ff78a",
- "logsBloom": "0x00080000100000000000100000000840000000000000000000000000000000000000000000000000000000000000000000000000080080000080000000000000000000004000000000000000000000000000000000000000000000000000000200000000000000100100000000008001000000000000000000800000000000020010000000000000000000000000001000800000200000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000012000000000000000000040800000040004000000040000800001000000000000000000000000000000010000100000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xc6",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x7bc",
- "extraData": "0x",
- "baseFeePerGas": "0x8",
- "blockHash": "0xa752bd3886362e9e5e57dba077628fedbfbca6b2a657df205ad20d739b035c22",
- "transactions": [
- "0xf879819f0983011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0c362dc6d498fcbd0eab0518a012a348d87fe4f2e53f7843f350662c43258609ba026d83d49fd9654704da7435b3400713ed7909a7203d6c55b8d43dd1e9fe67226"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x8fcfc1af10f3e8671505afadfd459287ae98be634083b5a35a400cc9186694cf"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np199",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa752bd3886362e9e5e57dba077628fedbfbca6b2a657df205ad20d739b035c22",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa8faa1ccb44b8d8d3ad926bdcb75a9e9fd18fa77728ef12aa9c4ba7be1906d3f",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xc7",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x7c6",
- "extraData": "0x",
- "baseFeePerGas": "0x8",
- "blockHash": "0x5d80c24a7a87ae0ab200b864029fbfe7bb750ba0a01c07191b7f52330d2c79ad",
- "transactions": [
- "0xf86481a0098302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a08683c22fc25a5413b758a32c5a6515b1b055541ad523ae4159c4d04c3f864260a06c8f2e1e929e9df95158a161e793ae162e1e4297f8042bf9358dcc119f5545e5"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xcc1ea9c015bd3a6470669f85c5c13e42c1161fc79704143df347c4a621dff44f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np200",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5d80c24a7a87ae0ab200b864029fbfe7bb750ba0a01c07191b7f52330d2c79ad",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe4f7f192080fd853f053608561854cdb68eb8de9eda499fd7ad840ca729487d3",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xc8",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x7d0",
- "extraData": "0x",
- "baseFeePerGas": "0x8",
- "blockHash": "0x0fd7e67081119b73ebe7ae0483ce2154a2dfb8c503545d231e2af1f8942406ae",
- "transactions": [
- "0xf86781a109825208947c5bd2d144fdde498406edcb9fe60ce65b0dfa5f01808718e5bb3abd109fa015f510b05236b83a9370eb084e66272f93b4b646e225bdef016b01b3ac406391a03b4a2b683af1cb3ecae367c8a8e59c76c259ce2c5c5ffd1dc81de5066879e4b8"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb0a22c625dd0c6534e29bccc9ebf94a550736e2c68140b9afe3ddc7216f797de"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np201",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x0fd7e67081119b73ebe7ae0483ce2154a2dfb8c503545d231e2af1f8942406ae",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x5188152524460d35f0c837dab28ac48f6aac93a75ecbb0bcb4af6a9c95e18a67",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xc9",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x7da",
- "extraData": "0x",
- "baseFeePerGas": "0x8",
- "blockHash": "0x3043a03ed3369ba0dfdddac07cae4ca805dbbb0b411b3f5dd5e66198928a715b",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x18",
- "validatorIndex": "0x5",
- "address": "0x4fb733bedb74fec8d65bedf056b935189a289e92",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x92b8e6ca20622e5fd91a8f58d0d4faaf7be48a53ea262e963bcf26a1698f9df3"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np202",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x3043a03ed3369ba0dfdddac07cae4ca805dbbb0b411b3f5dd5e66198928a715b",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x09f47830b792bc39aa6b0c12b7024fa34d561ff9e0d32c27eab5127239799bb0",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xca",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x7e4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x9178b45b38e39c3e3f4bc590a301254543eedb5b146bed0900465b194aaf94e8",
- "transactions": [
- "0xf88281a208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a03b50dfd68a93199762b4b47c08ca4c9f67d99e772f3fec9843a4e1c3ae4d6963a070a7b2cc31e53de9d1fa14f55f28b212979bd83bbd9e9097e65845e05a9ee40f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf6253b8e2f31df6ca7a97086c3b4d49d9cbbbdfc5be731b0c3040a4381161c53"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np203",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x9178b45b38e39c3e3f4bc590a301254543eedb5b146bed0900465b194aaf94e8",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6a0d6e0a749247b4271d54ddfd2732ceb5b377c1db1ac40aa1d2339d3a143aaa",
- "receiptsRoot": "0x189141497b4062bfbe61a7fb2f96cc8a95543e38c077c9150b740f8d01a313a8",
- "logsBloom": "0x00000000000000000000040040000000000000000000080000000000004000000000000000004000000000008000000000000000000080000002008001000000000000000010000000000080000000000000000000200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000020000000000000000000000800040000000000000000400000000000000000400001000000004000001000000000020000000000010000000000000000000000000000000000000000008000000000010000100000000000000001000000010000000000000800000000000000202000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xcb",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x7ee",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x9a575aa75a5f08a27533140141ffc7ed7d6e981da97316baf296dd1f8d1007d7",
- "transactions": [
- "0xf87881a30883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109f9f3c7a9aedd154caa41f602593b4bc78db1101336a81095174d4487dd8338878a0458e45144a4d1a634950ae79ac251065204776baa96a3f94c6d71a00323fe9b4"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xea8d762903bd24b80037d7ffe80019a086398608ead66208c18f0a5778620e67"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np204",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x9a575aa75a5f08a27533140141ffc7ed7d6e981da97316baf296dd1f8d1007d7",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xda96365c5a33f358ed732463139254c4f186e899ad00b05d9a30ff39d4d1a27d",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xcc",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x7f8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb35f9d9c454a03adc1eeeaa9fef20caeb8f9445663a4768d18bc0bc1790650b1",
- "transactions": [
- "0xf86481a4088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0a82c39f1be580d16334c133165d5ceb8d9942b184ecccea09e73ff45120ac523a04432d6958bb18882f9f07e851abe454039a5b38d61fd975c7da486a834107204"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x543382975e955588ba19809cfe126ea15dc43c0bfe6a43d861d7ad40eac2c2f4"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np205",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb35f9d9c454a03adc1eeeaa9fef20caeb8f9445663a4768d18bc0bc1790650b1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2258c0e37e5bedab21f7ea2f65190d1d51f781743653168d02181c8f16246c71",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xcd",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x802",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x97f4a4e64ede52b5dfd694236e783d130206d111cf6a5eb83a3bb9a230dfd952",
- "transactions": [
- "0x02f86a870c72dd9d5e883e81a50108825208949a7b7b3a5d50781b4f4768cd7ce223168f6b449b0180c080a04f3e818870a240e585d8990561b00ad3538cf64a189d0f5703a9431bc8fd5f25a0312f64dd9ab223877e94c71d83cb3e7fe359b96250d6a3c7253238979dd2f32a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x095294f7fe3eb90cf23b3127d40842f61b85da2f48f71234fb94d957d865a8a2"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np206",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x97f4a4e64ede52b5dfd694236e783d130206d111cf6a5eb83a3bb9a230dfd952",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xda2ecb481078839fd39c044b3fceae6468338266d9572da0f2281e58b9596914",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xce",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x80c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb3c2c9a5de90f0637203e60288b50ecb21d17a2437cccf553d2424321fa112d4",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x19",
- "validatorIndex": "0x5",
- "address": "0xc337ded6f56c07205fb7b391654d7d463c9e0c72",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x144c2dd25fd12003ccd2678d69d30245b0222ce2d2bfead687931a7f6688482f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np207",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb3c2c9a5de90f0637203e60288b50ecb21d17a2437cccf553d2424321fa112d4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf0f20309e2cec2fb6af448c58c40e206b788241bb88e62a8e7479aadc6bfa94e",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xcf",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x816",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x9e63e1a7df1b726901e3139cfb429592ef8d2107aa566bcae5f3b8e21f99f0da",
- "transactions": [
- "0xf88281a608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa079aa26a33abe2e9504cfc6552c6b39434478b081f5cbbb613269d64980edaf93a079ffe44aec63b05644681b948ea0e5a996e106f3e074a90991c963ff3e7a8aa6"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7295f7d57a3547b191f55951f548479cbb9a60b47ba38beb8d85c4ccf0e4ae4c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np208",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x9e63e1a7df1b726901e3139cfb429592ef8d2107aa566bcae5f3b8e21f99f0da",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x177fc88f477d3dd466f7cac43b50d4b2b77fd468ef479177ed562d2401acd6c0",
- "receiptsRoot": "0xd1458a51a7ca8d2c87390d85d986956f392bdd634ffbe4d5a7e2b09a142ce514",
- "logsBloom": "0x00200000000000000000000000000000000000000400000000400000000000000000100400000000000000000010108000000000000000000000200800000000000004000000000000000002000000000000000000000000000000020002000408000021000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000010000000000002000000000000000000000400000000000000000000020000000000000000000000800000000000080000000000000000000000800000810002000000000400000000000000000000000000000000000000000000020000000000000000000000010080000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xd0",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x820",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x4e8e6e31a8922b68a96992288e49ab9716dd37f1da1ae5b22391bc62d61ac75a",
- "transactions": [
- "0xf87981a70883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0969f6d3d90ca6b62cbda31ed28b7522b297d847e9aa41e0eae0b9f70c9de1e01a0274e038abf0b9f2fba70485f52e4566901af94c9645b22a46b19aebb53b4c25d"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9e8e241e13f76a4e6d777a2dc64072de4737ac39272bb4987bcecbf60739ccf4"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np209",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x4e8e6e31a8922b68a96992288e49ab9716dd37f1da1ae5b22391bc62d61ac75a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x55980d8ac0e8bfd779b40795a6d125a712db70daa937ace1f22a5fcd5fd2dfa6",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xd1",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x82a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xaf3e413fc388e1a5508f683df5806fe31d29f5df4552ccf2d6c6662816fae5fd",
- "transactions": [
- "0xf86481a8088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa04973c2a9d2fcff13428e8a3b3f0979185222cad34366777db8dfc6438cdac357a0128ad521391c000e18211ad8ffa45b41962fca43be83a50ce299d3bd4407f44b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xfc753bcea3e720490efded4853ef1a1924665883de46c21039ec43e371e96bb9"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np210",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xaf3e413fc388e1a5508f683df5806fe31d29f5df4552ccf2d6c6662816fae5fd",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x522d0f5f8de1ef5b02ad61a3bff28c2bd0ce74abca03116e21f8af6e564d7fd2",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xd2",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x834",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa5b31d7aaa42b7be0c35a0fa375718d25441f90296550c10325a3e0f4d63217c",
- "transactions": [
- "0xf86781a9088252089485f97e04d754c81dac21f0ce857adc81170d08c601808718e5bb3abd109fa0547e9550b5c687a2eb89c66ea85e7cd06aa776edd3b6e3e696676e22a90382b0a028cb3ab4ef2761a5b530f4e05ef50e5fc957cfbc0342f98b04aa2882eec906b2"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x5f5204c264b5967682836ed773aee0ea209840fe628fd1c8d61702c416b427ca"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np211",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa5b31d7aaa42b7be0c35a0fa375718d25441f90296550c10325a3e0f4d63217c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xda7dd7f5babcf1b3c407e141b4ea76932922489f13265a468fb6ab88891ff588",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xd3",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x83e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa1ffa80abb4f7f92b3932aa0ca90de5bb4a2908866b3d6727b05d5d41139e003",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x1a",
- "validatorIndex": "0x5",
- "address": "0x28969cdfa74a12c82f3bad960b0b000aca2ac329",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x5ba9a0326069e000b65b759236f46e54a0e052f379a876d242740c24f6c47aed"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np212",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa1ffa80abb4f7f92b3932aa0ca90de5bb4a2908866b3d6727b05d5d41139e003",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb6724f1d73bee909624707836e66ffbb21b568dd5bd697668ce18a4ae31818a4",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xd4",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x848",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x9a77bcf7bf0d7e6cebeb8c60b4c36538b4fab0e633b9683ba589981c293a009c",
- "transactions": [
- "0xf88281aa08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0e582e9d64ed6f95da074eaeb70ca1e47e8627bb7cd4e34d5aab01ff49ee6dd90a022cc32cc7c3030b0b47f1f69911311acd2ae3e95f19f766b69ebb67804676262"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb40e9621d5634cd21f70274c345704af2e060c5befaeb2df109a78c7638167c2"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np213",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x9a77bcf7bf0d7e6cebeb8c60b4c36538b4fab0e633b9683ba589981c293a009c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6a1c08c9dfcc48c37e349407f37f9c10d9d4c4b1d6c28d30af2630679c74ea96",
- "receiptsRoot": "0x730ab6f592da8dfc7815bcba110f6de8dd0343aa932f55b589ff99d83b9ec358",
- "logsBloom": "0x00000000000000000000000000000000000000200000000400000000000000002008008000100100000800000000000020000000000000000000000000000000800001000000002000000000000000800000010000000000000000420008000004000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000004000000000000008000000000000000000000000000000000000000000000000000000400010000000000004000000000000008000000840000000000000000040000000000000000000000000000120000001000000100000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xd5",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x852",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xecb42acc218101eb9c6d883a333d07c7736d7ed0b233f3730f5b9c9a75314cf5",
- "transactions": [
- "0xf87981ab0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a08747d48d3358eb47195c17f67f22af5eca1177fba591b82b8b626058a347b2e5a0420e02657efee51f73f95017b354b1bca2850269a5de7b307a280c63830f3333"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x70e26b74456e6fea452e04f8144be099b0af0e279febdff17dd4cdf9281e12a7"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np214",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xecb42acc218101eb9c6d883a333d07c7736d7ed0b233f3730f5b9c9a75314cf5",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x67ca707e9bd81330c2fb9060e88ce0b0905c85c9be26ae4779874f3892ebab0c",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xd6",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x85c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x1191fbb4f2692461fc0ae4aa7141a1743a345c101dc9db157bc7ad3072fe1e9d",
- "transactions": [
- "0xf86481ac088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a03752a40997c9b7b9c5dfd48f88990ddc727517540c403dadcb7476b8a4a9d4f6a0780178975646114017be4b06fae0689a979a45166f810604f76934239b0a2b9e"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x43d7158f48fb1f124b2962dff613c5b4b8ea415967f2b528af6e7ae280d658e5"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np215",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1191fbb4f2692461fc0ae4aa7141a1743a345c101dc9db157bc7ad3072fe1e9d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3b5ca86f1650f79fb42d74e523dc4e631989a3175023ced9a239e9bcc2c15a8e",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xd7",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x866",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x9b9e271d571b730c9e6acd133c99eba1ccd8b8174ffe080540fc3b1a5625943a",
- "transactions": [
- "0x02f869870c72dd9d5e883e81ad010882520894414a21e525a759e3ffeb22556be6348a92d5a13e0180c001a0047b3309af68dd86089494d30d3356a69a33aa30945e1f52a924298f3167ab669fb8b7bd6670a8bbcb89555528ff5719165363988aad1905a90a26c02633f8b9"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb50b2b14efba477dddca9682df1eafc66a9811c9c5bd1ae796abbef27ba14eb4"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np216",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x9b9e271d571b730c9e6acd133c99eba1ccd8b8174ffe080540fc3b1a5625943a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc1ab95016db7b79d93ee0303af69ce00bdb090d39e20a739d280beb3e301c9d5",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xd8",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x870",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x4e27c497c83c3d06d4b209e7d5068920d7e22bb3c959daa4be5485d6ab0cce54",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x1b",
- "validatorIndex": "0x5",
- "address": "0xaf193a8cdcd0e3fb39e71147e59efa5cad40763d",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc14936902147e9a121121f424ecd4d90313ce7fc603f3922cebb7d628ab2c8dd"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np217",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x4e27c497c83c3d06d4b209e7d5068920d7e22bb3c959daa4be5485d6ab0cce54",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf8c17319b995ce543f9ace79aab7f7c928b36facae4e6e0dd50991f95bed1542",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xd9",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x87a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xdf05b4a3aff6236d0d3c1ee058b874309c37005a2bbb41a37432b470ed49e678",
- "transactions": [
- "0xf88281ae08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa05a8e9e2a3556016a65d5b99849bd44cd6ab17cfb15d7850356c9b491357f0611a01f7d3c43fe1759b4ec768275e918e12dae75db56a5d2140d1403ef3df41f56df"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x86609ed192561602f181a9833573213eb7077ee69d65107fa94f657f33b144d2"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np218",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xdf05b4a3aff6236d0d3c1ee058b874309c37005a2bbb41a37432b470ed49e678",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x05bd7288ee80780a92b234fec2f8bb5bb4d0425721ddbf89d866c62b288f6bff",
- "receiptsRoot": "0xbebbd614564d81a64e904001523ad2e17a94b946d6dfc779928ec9048cf9a3f7",
- "logsBloom": "0x40000000000020000000000040000000000000000000001000000000000000021000000000004008000000000002000001000100000000000000002000000000000400000000000008002000000000000000100000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000100000400000000000000000000000000000000000000000000000000000020000000000010040000002000000000000000000000000000000000000000000000000020000000000200000000000200000000000000011000000000201400000000000001000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xda",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x884",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf9a9d8409219172c2a602cfb9eadffdeb13a68c55a48e048a19c3b17d85e3b46",
- "transactions": [
- "0xf87981af0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0b3a49ddc2fc9f12cb1dc0a67623d5a1a6a1b5bf59a8f1736c9f0ab3b564250d3a05fc1ca6dab6b9337827afb55342af8a51fae064157e9c78b76dacd66bbea55d1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x0a71a6dbc360e176a0f665787ed3e092541c655024d0b136a04ceedf572c57c5"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np219",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf9a9d8409219172c2a602cfb9eadffdeb13a68c55a48e048a19c3b17d85e3b46",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8236fb6bc66022c43d12c08612fd031d8b42852bef9a2dec04c1bc4b83cba489",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xdb",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x88e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf69983460a4d977eceea022607df6db15b3d8103f78e58d73eeac3593053dbc6",
- "transactions": [
- "0xf86481b0088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa08a2bbd86fd1bb42e548fa4b4c4710f6c6ed03b4700f9e3a213bc70d17f016a3ca076d8bf736d722af615228680c31acd9815b9380a8bc5895cddb2361170274a7f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa4bcbab632ddd52cb85f039e48c111a521e8944b9bdbaf79dd7c80b20221e4d6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np220",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf69983460a4d977eceea022607df6db15b3d8103f78e58d73eeac3593053dbc6",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x1d9d412ef451097aa53e4fc8f67393acfd520382a1c4cfa6c99e2fb180a661db",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xdc",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x898",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xecea5d6aa092dc29520fcd6cd44102c571c415fd5d641e978af4933c476020a6",
- "transactions": [
- "0xf86781b10882520894fb95aa98d6e6c5827a57ec17b978d647fcc01d9801808718e5bb3abd10a0a0c71a69f756a2ef145f1fb1c9b009ff10af72ba0ee80ce59269708f917878bfb0a03bfe6a6c41b3fe72e8e12c2927ee5df6d3d37bd94346a2398d4fcf80e1028dde"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x2bc468eab4fad397f9136f80179729b54caa2cb47c06b0695aab85cf9813620d"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np221",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xecea5d6aa092dc29520fcd6cd44102c571c415fd5d641e978af4933c476020a6",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x830dfc2fb9acb72d3c03a6181b026becbcdca1abf4ab584b2dd00c48fd2f6a62",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xdd",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x8a2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xbc664826810922530f7e9876cd57ef0185f2f5f9bbafb8ee9f6db2d6e67be311",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x1c",
- "validatorIndex": "0x5",
- "address": "0x2795044ce0f83f718bc79c5f2add1e52521978df",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xfc7f9a432e6fd69aaf025f64a326ab7221311147dd99d558633579a4d8a0667b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np222",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xbc664826810922530f7e9876cd57ef0185f2f5f9bbafb8ee9f6db2d6e67be311",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x7492f26a06f6b66d802f0ac93de1640ec7001652e4f9498afa5d279c1c405ccd",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xde",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x8ac",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb908ac3bd269a873b62219e78d5f36fdfd6fb7c9393ad50c624b4e8fd045b794",
- "transactions": [
- "0xf88281b208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa09765f880d3815c484a796d3fd4c1791ab32f501ba8167bfd55cde417b868e459a0310fdd4d8d953cf38b27fa32ad6e8922ef0d5bd7ba3e61539dd18942669187f1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x949613bd67fb0a68cf58a22e60e7b9b2ccbabb60d1d58c64c15e27a9dec2fb35"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np223",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb908ac3bd269a873b62219e78d5f36fdfd6fb7c9393ad50c624b4e8fd045b794",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x1e515c524c17bcb3f8a1e8bd65c8403ae534c5c2c2fc0bddce2e69942c57028a",
- "receiptsRoot": "0x336f567c728ef05cbd3f71c4a9e9195b8e9cd61f8f040fdd6583daf0580a0551",
- "logsBloom": "0x00000000000000000000000000000000000000000000400000000000002000080000080000000000000000000000000000000000000000000000000000000000008000000040000030040000000000800000000006000000000008010001000000004000000000000020000000000000000000000000000000000000040000000400080000000000000000020000000000000040000020000000000000000000000020000001000000000000000000000000100000000000010000000000000001000000000000000000000002000000000000800000000000000200000000000000000000000000000000000020000000000000000000001000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xdf",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x8b6",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x2e8980e0390ae8503a42316b0e8ceb3bbe99245131ab69115f2b5555d4ac1f4e",
- "transactions": [
- "0xf87981b30883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0cdd0a69ca9a6c3977ae1734d40175aa0720a866ff9353ce4aadfd8a4cd762e53a0290a5ac57e2f318959aaadec811bf9f8017191594476415923ddafef9a25de7c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x289ddb1aee772ad60043ecf17a882c36a988101af91ac177954862e62012fc0e"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np224",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x2e8980e0390ae8503a42316b0e8ceb3bbe99245131ab69115f2b5555d4ac1f4e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa0a11d77a69e2c62b3cc952c07b650c8f13be0d6860ddf5ba26ef560cefd2000",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xe0",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x8c0",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xcd2f03e81d096f1c361b6b0a1d28ae2c0ec1d42a90909026754f3759717a65db",
- "transactions": [
- "0xf86481b4088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0e55768f282e2db5f2e48da696a07d1bff5687ca7fa5941800d02a1c49a4781b4a00eb30d56234ac991413000037e0f7fb87c8c08b88ae75aa33cb316714b638e1b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xbfa48b05faa1a2ee14b3eaed0b75f0d265686b6ce3f2b7fa051b8dc98bc23d6a"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np225",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xcd2f03e81d096f1c361b6b0a1d28ae2c0ec1d42a90909026754f3759717a65db",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd8287e5675676595007edfbfff082b9f6f86f21bb0371e336ca22e12c6218f68",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xe1",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x8ca",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x2a2c4240cf6512959534cdaf586119243f718b4ff992ad851a61211a1ea744d8",
- "transactions": [
- "0x02f86a870c72dd9d5e883e81b5010882520894f031efa58744e97a34555ca98621d4e8a52ceb5f0180c001a099b1b125ecb6df9a13deec5397266d4f19f7b87e067ef95a2bc8aba7b9822348a056e2ee0d8be47d342fe36c22d4a9be2f26136dba3bd79fa6fe47900e93e40bf3"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7bf49590a866893dc77444d89717942e09acc299eea972e8a7908e9d694a1150"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np226",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x2a2c4240cf6512959534cdaf586119243f718b4ff992ad851a61211a1ea744d8",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x1e3c75d8db0bd225181cc77b2ec19c7033a35ba033f036a97ba8b683d57d0909",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xe2",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x8d4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x1fb4e86909057635bfe8d130d4d606c1e9a32bd5e8da002df510861246633a96",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x1d",
- "validatorIndex": "0x5",
- "address": "0x30a5bfa58e128af9e5a4955725d8ad26d4d574a5",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x992f76aee242737eb21f14b65827f3ebc42524fb422b17f414f33c35a24092db"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np227",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1fb4e86909057635bfe8d130d4d606c1e9a32bd5e8da002df510861246633a96",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xacca3ad17c81310c870a9cf0df50479973bd92ade4a46b61a2012fa87c7b8a0f",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xe3",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x8de",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x6f03c5c20de46ba707f29a6219e4902bc719b5f9e700c9182d76345fa8b86177",
- "transactions": [
- "0xf88281b608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa05147ab82c47d0c6f6298c21b54a83bc404088dcf119f5719034a1154f2c69acaa035070fffcba987b70efcfc6efbf5a43974de5e11331879bbfbfe7556915da7b2"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xda6e4f935d966e90dffc6ac0f6d137d9e9c97d65396627e5486d0089b94076fa"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np228",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x6f03c5c20de46ba707f29a6219e4902bc719b5f9e700c9182d76345fa8b86177",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x0468ebde6657b86a2f1561ae8ef57c6cbe23b7dc08cc0ad823ea3831388e1691",
- "receiptsRoot": "0x591e45121efd9a319ad048f68a35db27c69b829a65d0c7817224a1c5071ab327",
- "logsBloom": "0x00000005000000000010000000080000000000000000000000000008200000004000002080000001000000000000000000010000000000080000000000000000000000000000800000000000000000000000000000000000000000000000000b00000200000000000000000000200000000000200001400000000000100000000000000000000400000000000000000000000000000000000000000000000000000002008000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000020000000010000080000000000000114000000000000000000000040000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xe4",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x8e8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x8c7ac6681ed2a5020837149f8953a2762227b7bb41f2f46bc0c33508190c3e72",
- "transactions": [
- "0xf87981b70883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa04ccccf5fa7c7ed5b48d30bee3e8b61c99f8ff9ddecff89747e5685b059d70fa7a042982d8d2a54f9a055fd75df65488462a0ceae67b8a80966427c5d7ea1cf563b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x65467514ed80f25b299dcf74fb74e21e9bb929832a349711cf327c2f8b60b57f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np229",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8c7ac6681ed2a5020837149f8953a2762227b7bb41f2f46bc0c33508190c3e72",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x9f5936ddc444db8ba3787be50038f195ddb86663f39b62d556f7700334f441d1",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xe5",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x8f2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x01bb09f016e5dfda9ef7170f45fe4b648dd3761b26c83c18bb0eea828bbc8663",
- "transactions": [
- "0xf86481b8088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa07cc4f254afaef8c4953d8a30221c41a50b92629846448a90a62ebdc76de8b2eea073f46d5c867c718486a68dfdf1cd471d65caa8a2495faba0f0a19ca704201e1b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xcc2ac03d7a26ff16c990c5f67fa03dabda95641a988deec72ed2fe38c0f289d6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np230",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x01bb09f016e5dfda9ef7170f45fe4b648dd3761b26c83c18bb0eea828bbc8663",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x57dc2fdfe5e59055a9effb9660cfc7af5e87d25a03c9f90ce99ee320996a1991",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xe6",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x8fc",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x15d41d78de758ec47434a48dc695897705ad5990ac584d2a51d8b7a51419abe0",
- "transactions": [
- "0xf86781b908825208940a3aaee7ccfb1a64f6d7bcd46657c27cb1f4569a01808718e5bb3abd109fa0d2aa10777b7c398921921258eeecaff46668278fd6f814ea4edb06f2a1076353a0542ef4ed484a1403494238e418bb8d613012871710e72dde77bb1fa877f1fae3"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x096dbe9a0190c6badf79de3747abfd4d5eda3ab95b439922cae7ec0cfcd79290"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np231",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x15d41d78de758ec47434a48dc695897705ad5990ac584d2a51d8b7a51419abe0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc6a8588f5fa71465604ccee5244d5c72a296994fb2bf1be478b664bc2aa77c39",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xe7",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x906",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa3b4d9f55cfc3ed49c694fa2a634b73f397d5847b73b340d123b2111ba5adc71",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x1e",
- "validatorIndex": "0x5",
- "address": "0xd0752b60adb148ca0b3b4d2591874e2dabd34637",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x0c659c769744094f60332ec247799d7ed5ae311d5738daa5dcead3f47ca7a8a2"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np232",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa3b4d9f55cfc3ed49c694fa2a634b73f397d5847b73b340d123b2111ba5adc71",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x38cdb4e70eb9771bab194d9310b56dbfcba5d9912cd827406fff94bddf8549d3",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xe8",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x910",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x4ff6fbd3afcc33972501397c65fe211d7f0bf85a3bde8b31e4b6836375d09098",
- "transactions": [
- "0xf88281ba08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a06f8db09016d87e96d45d0835a60822fb305336ab1d792944f6f0aa909b73c9d7a01da7c6ba739bf780143672031e860f222149e1e6314171737fee23537a1e7f0c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9cb8a0d41ede6b951c29182422db215e22aedfa1a3549cd27b960a768f6ed522"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np233",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x4ff6fbd3afcc33972501397c65fe211d7f0bf85a3bde8b31e4b6836375d09098",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xbf1db5dc400fd491fad1abd61287f081ebd7398c76f20ecc0a6c9afb30ba5508",
- "receiptsRoot": "0xed257fe243a1ffa922e5a62e40ffb504d403afc1d870fdcacd7f0aaf714e9ca1",
- "logsBloom": "0x200000000000000000000000000000000000000000000000000009000000800000000000104010000000000000000000000000000000000000000100000000080008000000000000000000800000000000000000000000000008000000000000400000000000004040000000000000000000002000000000080004010000000000000000100000000000000000000040000000000000000000000080010000000000000002000000020c0000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000000400080000000400000000000080000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xe9",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x91a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf1364f41ffcf3f76e045b1634e4f62db38f5c053edfa7d0a13d87299896ddff9",
- "transactions": [
- "0xf87981bb0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0ef0e59c1798c0a7645f75f893cf81eae4aff9f49159b7365b8d4e907367f91f6a0095a58cb4d8be1816acf8b4e11f9d9b2a03d3f392eee1f19bea70b50ed151584"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x2510f8256a020f4735e2be224e3bc3e8c14e56f7588315f069630fe24ce2fa26"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np234",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf1364f41ffcf3f76e045b1634e4f62db38f5c053edfa7d0a13d87299896ddff9",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x5b75a7bfd5eb4c649cb36b69c5ccf86fecb002188d9e0f36c0fdbc8a160e4ac6",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xea",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x924",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa2474d57b356b865a29ccfb79623d9a34ed84db9f056da5dd4e963f816baa180",
- "transactions": [
- "0xf86481bc088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a078dfab2121885d4181d63c7088757f7feb65131b155ad74541de35c055c31ec3a005cccd843ec8a535a567451c3b5034e05bac10f9328c63aa0b4893ee4f910ba2"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x2d3deb2385a2d230512707ece0bc6098ea788e3d5debb3911abe9a710dd332ea"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np235",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa2474d57b356b865a29ccfb79623d9a34ed84db9f056da5dd4e963f816baa180",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3f130c3409ad205204d14e6b5be4ccf2e65559d39cc98dfc265e1436990e5964",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xeb",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x92e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x9a195498e43997a5769957e54f0fa6f56d8442e54f8a26efafbf89130446fd4d",
- "transactions": [
- "0x02f86a870c72dd9d5e883e81bd010882520894f8d20e598df20877e4d826246fc31ffb4615cbc00180c001a0c982933a25dd67a6d0b714f50be154f841a72970b3ed52d0d12c143e6a273350a07a9635960c75551def5d050beee4014e4fef2353c39d300e649c199eebc8fd5e"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x1cec4b230f3bccfff7ca197c4a35cb5b95ff7785d064be3628235971b7aff27c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np236",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x9a195498e43997a5769957e54f0fa6f56d8442e54f8a26efafbf89130446fd4d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x1ad56a036d6b544ee8f96f2d3e72dfdb360fa3c81edef33dd9e9fc1779d174a4",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xec",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x938",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xca48eaf8da077241a7938435cf1576b2628c65afea7b1aa2665c74573e352205",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x1f",
- "validatorIndex": "0x5",
- "address": "0x45f83d17e10b34fca01eb8f4454dac34a777d940",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x18e4a4238d43929180c7a626ae6f8c87a88d723b661549f2f76ff51726833598"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np237",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xca48eaf8da077241a7938435cf1576b2628c65afea7b1aa2665c74573e352205",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf43c19d64439e20deb920de4efbb248d44d4f43d0dfecd11350501bc1a4bf240",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xed",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x942",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xd6a5ae0ebd55680da60432b756f7914f8fb8bbcead368348e3b7f07c8cfa501e",
- "transactions": [
- "0xf88281be08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa06ba7d56fdfaf77a1a66bfef9529419b73d68fc1aa9edef961ac3a8898f04e5caa054635ee7b91858d97e66944311c81fd4f57d328ee4fbdf8ce730633909a75f01"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x700e1755641a437c8dc888df24a5d80f80f9eaa0d17ddab17db4eb364432a1f5"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np238",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xd6a5ae0ebd55680da60432b756f7914f8fb8bbcead368348e3b7f07c8cfa501e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x05a62e01803a967ff89e7e9febf8d50b1b3092aab5580c7f85f465e7d70fef3f",
- "receiptsRoot": "0x294eca38bb21bd8afeb2e5f59d0d4625058d237e2109428dfb41b97138478318",
- "logsBloom": "0x00000040000000001000000000008000000000000000200000000000000000000000008000000000000000020000000040000000000000000000000004000000000000000000800000000000000000000000000000000080000000000000001000000000400000000400000000000000000000000000000000000000000000000880000000000400002000000040000000000000000000000000000810000100000080000080000000000000080000000000000001000000000000000000000000000000080000002000000000000010000000000000000010000000000000002000000000800000000400000000000000000000080000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xee",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x94c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x06466f86e40c982578b247579fa1fa5773d6169e77a79a625950c4aa16ce88b1",
- "transactions": [
- "0xf87981bf0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0548377761079f73162f83bdc2cfb09dcde9e08c8db66d4d983f1856c5145fe6fa06b2bd1223fbb1b72016150f57bc7ae1f8cce5c0fd301bb9216bb804c89bf0a97"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xcad29ceb73b2f3c90d864a2c27a464b36b980458e2d8c4c7f32f70afad707312"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np239",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x06466f86e40c982578b247579fa1fa5773d6169e77a79a625950c4aa16ce88b1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xbca1fef6bcfcbb170b7b349f92a3b92fe03296dac1fd64ccda295c496a261a16",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xef",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x956",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x74b00e695ebf3210bda9ad8b3aa1523475d922fd556e551cfd606ebcf807d681",
- "transactions": [
- "0xf86481c0088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa08cfe044eb5748d538f72e560c45c7a01f94f4b7c6e9b1245bade89c0d97f9932a02b21fe651e5fb05d1f8de320dcf8cc037b2c0e989793f6b445f397c77f42a4f0"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa85e892063a7fd41d37142ae38037967eb047436c727fcf0bad813d316efe09f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np240",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x74b00e695ebf3210bda9ad8b3aa1523475d922fd556e551cfd606ebcf807d681",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x82a80ad266f2a1539a79b2dcf8827aabedcc1deeb6cfb4869a8ed2ea26923726",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xf0",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x960",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xd908ab400c351cee493619c9b0b56c6ae4d90bd6e995e59ac9302a7b20c13fc3",
- "transactions": [
- "0xf86781c10882520894fde502858306c235a3121e42326b53228b7ef46901808718e5bb3abd10a0a03d79397e88a64f6c2ca58b5ec7ba305012e619331946e60d6ab7c40e84bf1a34a04278773d2796a0944f6bedadea3794b7ad6a18ffd01496aabf597d4a7cf75e17"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x040100f17208bcbd9456c62d98846859f7a5efa0e45a5b3a6f0b763b9c700fec"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np241",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xd908ab400c351cee493619c9b0b56c6ae4d90bd6e995e59ac9302a7b20c13fc3",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x59b60dbf89d7c0e705c1e05f6d861bfb38bec347663df6063be9eb020e49972a",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xf1",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x96a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x13fdff4106d52399ab52ee5d1e6a03097f6db6de8066597f88be7a797a183cb7",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x20",
- "validatorIndex": "0x5",
- "address": "0xd4f09e5c5af99a24c7e304ca7997d26cb0090169",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x49d54a5147de1f5208c509b194af6d64b509398e4f255c20315131e921f7bd04"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np242",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x13fdff4106d52399ab52ee5d1e6a03097f6db6de8066597f88be7a797a183cb7",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x1e5d7390e70d057c7dc29e173e338e7285e276a108eaecf3164dc734ce2fd9b5",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xf2",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x974",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x9cfff0339ca5c7928180f0d37f080f2c8cc4c00bfa2b6be3754b9d228219779f",
- "transactions": [
- "0xf88281c208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0057b9bf7b2b99c50cf16c0b995e2846ba833edc03f6efc1b97566022651cabeca0237b38f74a2a8c39a2c344ef2d7fe811c37cd20ed2f4d47bfc38d896f3c9db75"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x810ff6fcafb9373a4df3e91ab1ca64a2955c9e42ad8af964f829e38e0ea4ee20"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np243",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x9cfff0339ca5c7928180f0d37f080f2c8cc4c00bfa2b6be3754b9d228219779f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8725e2687d45a52ad320e82b90e009b1aa5effe7ebfe994116afa25daa09468f",
- "receiptsRoot": "0x2f9d61b38064fb9da0bb0f93ff73e1021c62ba761714e96a6674cd927bde4f9c",
- "logsBloom": "0x00000000000800000000000000000000001000000000000000000000000000010000000000000000000000000000000000000000000000040000000000000000000000000010000000008000400000000000600000000000000000000800000140000000000080000000000000000000000200000000000000000000000000000000000000000180000000000000000000000000000000000000000000001000000000000000000100020000000000000001020000000000000080000000000000080000000000000000040000000000000000000000000000024080200000000000000000040000000208000000000000010000000000000000001000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xf3",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x97e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x0c71dc4665ac65f63a44434a3d55ffc285af6ec8b90b4ddfd4b4001add0e93c0",
- "transactions": [
- "0xf87981c30883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa017b61104ac6d28f1262b3750475b328dfd50f8496e0772bf19047d9d1ee9e56da01aed9f9280926e68fb66065edcf80320cab6f6d7c7af4bc8d9d007e1ea6a168d"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9b72096b8b672ac6ff5362c56f5d06446d1693c5d2daa94a30755aa636320e78"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np244",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x0c71dc4665ac65f63a44434a3d55ffc285af6ec8b90b4ddfd4b4001add0e93c0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc5f9b1665244a32dc0885794d5aaf3ce0b464eed1208412ca14abcfe4b908f64",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xf4",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x988",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x1f7b85304f578a197b65ce6f6f9e0c90cf680cdb3f35a95d10ea0a32238df606",
- "transactions": [
- "0xf86481c4088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0a93d446ef64bccf6c88d5285e78e7625fd5c9ac9c8aa11ad45db01b95b6694a5a0761620f10b11ee3cc1932adf95133349f5107aed7b8c150192fa89665ecd7552"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf68bff777db51db5f29afc4afe38bd1bf5cdec29caa0dc52535b529e6d99b742"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np245",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1f7b85304f578a197b65ce6f6f9e0c90cf680cdb3f35a95d10ea0a32238df606",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x5bacfe50ff7f0200bc1a4ea28e3fbe1a269ea7cbdbe7fb5d83bde19774c92e7e",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xf5",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x992",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x8f3a666d3d090603513d1e31ac73c5b47a7fe8279c7359a3bad523a8fd414a96",
- "transactions": [
- "0x02f86a870c72dd9d5e883e81c501088252089427abdeddfe8503496adeb623466caa47da5f63ab0180c001a0deade75f98612138653ca1c81d8cc74eeda3e46ecf43c1f8fde86428a990ae25a065f40f1aaf4d29268956348b7cc7fa054133ccb1522a045873cb43a9ffa25283"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9566690bde717eec59f828a2dba90988fa268a98ed224f8bc02b77bce10443c4"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np246",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8f3a666d3d090603513d1e31ac73c5b47a7fe8279c7359a3bad523a8fd414a96",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x1c407d215d7fa96b64c583107e028bcf1e789783c39c37482326b4d4dd522e05",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xf6",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x99c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf1191b23680ae545b3ad4ffb3fd05209a7adefefc71e30970d1a4c72c383b5df",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x21",
- "validatorIndex": "0x5",
- "address": "0xb0b2988b6bbe724bacda5e9e524736de0bc7dae4",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd0e821fbd57a4d382edd638b5c1e6deefb81352d41aa97da52db13f330e03097"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np247",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf1191b23680ae545b3ad4ffb3fd05209a7adefefc71e30970d1a4c72c383b5df",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x16a2c4f318277ea20b75f32c7c986673d92c14098e36dde553e451f131c21a66",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xf7",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x9a6",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x2e34605bbfd5f548e1e9003c8d573e41a9286968bec837ba1f2b7780e3337288",
- "transactions": [
- "0xf88281c608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa02648ce9c5825b33559225aada97c08de484ab8282549d90cfc1e086052c22be8a02054d7eeb1e8bf4ab25b2581ccb0b0a3500625cf7a0315860202eb2eaf094f9c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x43f9aa6fa63739abec56c4604874523ac6dabfcc08bb283195072aeb29d38dfe"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np248",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x2e34605bbfd5f548e1e9003c8d573e41a9286968bec837ba1f2b7780e3337288",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x291c5ca9a114bdb7bf296b4ff4182b930dc869905eaa1219cbb5188e8feaa9ab",
- "receiptsRoot": "0x9f35106348d01548df28e681773a27cffe40648e4d923974e4b87903f578da11",
- "logsBloom": "0x00000001000000000000000800000000000000000000000000000000100000000000000200080000000000080001000000000000000000000000000001000000000202000000000000000000000000000002000002000000000000040000000000000000000000000200800000000000800002000000000000000000008000000000000000000000000400008000000000008000000000000000000002000000000000000000000010000000000000000000000000000000000000100000000000000000000000000000000181000000800000000000000000000000002000200000000000000000000000000280000000000000000000000000040000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xf8",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x9b0",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x22d7e31bcd496b70c0256f88d985be54cd46604897969a5edde95d8d75e2fc6a",
- "transactions": [
- "0xf87981c70883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a09f49a6018e3736ea3599def5663a57cfe19cb3f27bfdd80657503262a5bcfc87a02a26782058025cfe1205be964cc9ac31cdf510a8a9f867bff2317275b13ed02c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x54ebfa924e887a63d643a8277c3394317de0e02e63651b58b6eb0e90df8a20cd"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np249",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x22d7e31bcd496b70c0256f88d985be54cd46604897969a5edde95d8d75e2fc6a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x359fe6cc7b7596b4455fdc075bc490d3697d4366c39c40dd6fc935da0ceac7e7",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xf9",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x9ba",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x1767170da9f173007588517f005241a12087642444518ce31bcf3ad27de4efcf",
- "transactions": [
- "0xf86481c8088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa043e1ad9aa519d9a1e8a15918ee6bbc0fd98061db6058597bd984098600495f96a01d5edd1b3fc3b45ff2a17a9c7eee3ad4c75e24fc090a4a0e48f39da49e7ad263"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9e414c994ee35162d3b718c47f8435edc2c93394a378cb41037b671366791fc8"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np250",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1767170da9f173007588517f005241a12087642444518ce31bcf3ad27de4efcf",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc73008737d0cfdbec09b3074d48f44e406f0598003eab9a1f4c733de38512855",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xfa",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x9c4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x163dc4f5b453d5fb626263184121f08cdb616a75e2f8ef978d38e91f5b995ee6",
- "transactions": [
- "0xf86781c90882520894aa7225e7d5b0a2552bbb58880b3ec00c286995b801808718e5bb3abd109fa00968ae76ffc10f7b50ca349156119aaf1d81a8772683d1c3ed005147f4682694a060f5f10a015e8685a3099140c2cc3ba0dc69026df97fb46748008c08978d162a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4356f072bb235238abefb3330465814821097327842b6e0dc4a0ef95680c4d34"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np251",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x163dc4f5b453d5fb626263184121f08cdb616a75e2f8ef978d38e91f5b995ee6",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x693db83454936d0dacd29b34de3d2c49dc469bbe4337faec428b028e0d967642",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xfb",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x9ce",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x8f9b318e4cd81ddd537dff3fcfe099d3609b357f3a4f2aed390edc103a5aa7a6",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x22",
- "validatorIndex": "0x5",
- "address": "0x04b8d34e20e604cadb04b9db8f6778c35f45a2d2",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x215df775ab368f17ed3f42058861768a3fba25e8d832a00b88559ca5078b8fbc"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np252",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8f9b318e4cd81ddd537dff3fcfe099d3609b357f3a4f2aed390edc103a5aa7a6",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd358fe0baedc04a81fdaf6cdfc71c2c874291e47d16dd51cc032f0678078a009",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xfc",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x9d8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x23a585160ac1b5428ad1dea7e732b641ace396c4135dbf899ab2559f869bb5fb",
- "transactions": [
- "0xf88281ca08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0941941ac43420c855cda955414a23d3bad4d0f2bfbeda999250f2f87d228878da0357223781ec5d666a8d5e8088721e9952f00a762d5fc078133bea6bc657c947e"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd17835a18d61605a04d2e50c4f023966a47036e5c59356a0463db90a76f06e3e"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np253",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x23a585160ac1b5428ad1dea7e732b641ace396c4135dbf899ab2559f869bb5fb",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xcb19946b2b5a905882151fff9a12cce6e4c3be46f7da6b67263b0cc781fbe80a",
- "receiptsRoot": "0x9b15dea2f021c6c74dc60deea77fd6a1ce29c9efc2596cbaaf73ef60370a03e3",
- "logsBloom": "0x0000000000000100800000000000000000800000000000010000000000000000000000000000000000000000000080000000000000000000000000400000000000002000000000000000000000000000000000000000000000000000100008000000000000000000000000000000000020000000000000a004200000000000800000000000000000000000000000100000000000000000000000000440000000000000001001000010000000010000004000000000000000000000200000000000000000000000000000000000000000000400000000000000000000000200000000000000000440000000000120000c00000001000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xfd",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x9e2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x706168d939a58a0dd048595d1c88fe1735dbeee42111dfbb2adee0ea9ef1d77b",
- "transactions": [
- "0xf87981cb0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa06fb97cf9fb9b8f7159a9dc549e412001ca969f0dafc3c9294b0e081741aa3d9aa003ed12873ddb354ccf7b0f8e511136ff335a8e4ff6bb7f93ce19e097970c9774"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x875032d74e62dbfd73d4617754d36cd88088d1e5a7c5354bf3e0906c749e6637"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np254",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x706168d939a58a0dd048595d1c88fe1735dbeee42111dfbb2adee0ea9ef1d77b",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x907ae262cf7f9a93ecd0d1522c6a093ffe39594b65ec185c5059dfa7b3394371",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xfe",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x9ec",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xffd5337b506a04e2362e4a34847711bf688591ceb3ac4b7da257072ecef36a55",
- "transactions": [
- "0xf86481cc088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a082f832d1212a980978d5716dca8820344200eb6967b24adb2bd112a896b4dda3a0393b965bcf272398cdd6de788c3aa929a67a42466883a472538fb1dad06c07ef"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x6f22ae25f70f4b03a2a2b17f370ace1f2b15d17fc7c2457824348a8f2a1eff9f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np255",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xffd5337b506a04e2362e4a34847711bf688591ceb3ac4b7da257072ecef36a55",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc39a9999ffd22de07bcf6a6a16b5cf1da7675dcb135e3503111a1dd50913cf0c",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0xff",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x9f6",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xcbf2f33d5616ea98f1b1cf12bdd145d35b4a928e4cb8b0fa41a6bd788ca3cbd2",
- "transactions": [
- "0x02f86a870c72dd9d5e883e81cd010882520894a8100ae6aa1940d0b663bb31cd466142ebbdbd510180c080a054eafef27c71a73357c888f788f1936378929e1cdb226a205644dc1e2d68f32ba059af490b8ef4a4e98a282d9046655fc8818758e2af8ace2489927aaa3890fda3"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf11fdf2cb985ce7472dc7c6b422c3a8bf2dfbbc6b86b15a1fa62cf9ebae8f6cf"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np256",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xcbf2f33d5616ea98f1b1cf12bdd145d35b4a928e4cb8b0fa41a6bd788ca3cbd2",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x979018c4d3a004db4c94102d34d495dd3a4dc9c3c4bcd27d1a001f8095384208",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x100",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xa00",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x01b45ed6ccf0908b2e4b513eeea6aa86514677cb6d6d06d936e1871fc422daca",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x23",
- "validatorIndex": "0x5",
- "address": "0x47dc540c94ceb704a23875c11273e16bb0b8a87a",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xbbc97696e588f80fbe0316ad430fd4146a29c19b926248febe757cd9408deddc"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np257",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x01b45ed6ccf0908b2e4b513eeea6aa86514677cb6d6d06d936e1871fc422daca",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x55e1fa04203cc0edebab3501d9552eaf0ac3bba421bf3480a50e1549cd479dc5",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x101",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xa0a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x48f84c09e8d4bd8effd3865e8b3ac4202cb0dc0fb72299f35c8bad4558b895dc",
- "transactions": [
- "0xf88281ce08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a08a7526f8f209ff44329b503a7d726f569b861894584401651a83668be3971cbfa040314bdfa618ead4fa21933ed3a8af7e814620e3befa914828b981b391096441"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x71dd15be02efd9f3d5d94d0ed9b5e60a205f439bb46abe6226879e857668881e"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np258",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x48f84c09e8d4bd8effd3865e8b3ac4202cb0dc0fb72299f35c8bad4558b895dc",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8d05cad792af190bb84ad7a0bebd232c433cf16b90cffea9f4f824d562ec0eb5",
- "receiptsRoot": "0x7b32e50058711e6aa1981f911bb5fb6bd05182c7e7850480874c3754788e5ee2",
- "logsBloom": "0x000000000000000000000000000000000400000000000000000000000200000000000000000000000000000000002000000000000040000000000000000000800000000000000000000080080000000000040000000002002000002000008000000008000100000000000400000000000000000000000000000000000000200000000000002000000000002000000000004000000000000000000000000000020000000000000000010800000001000000000000000000000000000000000000000c0000010000000000000000000000000000000000000020000000000040000000000000000000000000300000000000000000000800008000000000400000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x102",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xa14",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xed832bf95db43a650d06fac15b9b6474b7d82d03b27bd43835eee199c95b64f1",
- "transactions": [
- "0xf87981cf0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0fa1c9705b3794f376d02943123846aaae435a6590ddb802e16e91f87ae13c910a0609129061ec7d065ea3c154152c452f76a7894f2459c42c33675af6a20c9ad3c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb90e98bd91f1f7cc5c4456bb7a8868a2bb2cd3dda4b5dd6463b88728526dceea"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np259",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xed832bf95db43a650d06fac15b9b6474b7d82d03b27bd43835eee199c95b64f1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x06ffd1eba12cda277819f77a9a89a4f78265f7aed5158dc51332218976856e82",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x103",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xa1e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x65f5a3780beee8d82281e7fe3e82b81dae2a14ef861e9df584590dd429b8d632",
- "transactions": [
- "0xf86481d0088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa07de64020fd82a08d2737ded6967d6a6095c02858161988f0626bad7dd2238057a00ad64af462ef2241d4e4c0da1dc108871126cf2aa2b82afd98d7069fc79d9085"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4e80fd3123fda9b404a737c9210ccb0bacc95ef93ac40e06ce9f7511012426c4"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np260",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x65f5a3780beee8d82281e7fe3e82b81dae2a14ef861e9df584590dd429b8d632",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3d72e9a90b2dbfc909c697987538e4e9a8f2b127a783109fbb869bf3760bd7a0",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x104",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xa28",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xcab55b4abc18bcf8e1b24ae34df180dc00edeadc072fa2e52ed54f2b09c6367f",
- "transactions": [
- "0xf86781d10882520894a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e01808718e5bb3abd109fa004c1d18013fb8b0554b8aaa549ee64a5a33c98edd5e51257447b4dd3b37f2adea05e3a37e5ddec2893b3fd38c4983b356c26dab5abb8b8ba6f56ac1ab9e747268b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xafb50d96b2543048dc93045b62357cc18b64d0e103756ce3ad0e04689dd88282"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np261",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xcab55b4abc18bcf8e1b24ae34df180dc00edeadc072fa2e52ed54f2b09c6367f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8c514217bbc30325a9d832e82e0f1816cff5d7fed0868f80269eb801957b22a0",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x105",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xa32",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x687b7f705112cf8d76b18d5ab3bc59fab146131c4b8efa05a38b42a14bcb251c",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x24",
- "validatorIndex": "0x5",
- "address": "0xbc5959f43bc6e47175374b6716e53c9a7d72c594",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd73341a1c9edd04a890f949ede6cc1e942ad62b63b6a60177f0f692f141a7e95"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np262",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x687b7f705112cf8d76b18d5ab3bc59fab146131c4b8efa05a38b42a14bcb251c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x32fc9182d259ea7090be7140ec35dee534b5e755af25c3a41b2fe23452cd75ae",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x106",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xa3c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x59763420efabb84b6d4ae2b2a34f6db6108950debfe1feba4f706ad5227eca5f",
- "transactions": [
- "0xf88281d208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0010b2ab5421f3fe86f38332dd1c862ddcfc711b2255d8f2a677985d3858b643aa025f4fec49790d44c9b50ed1bea3c5700de165dc239173328e0d0c045f0dd4558"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc26601e9613493118999d9268b401707e42496944ccdbfa91d5d7b791a6d18f1"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np263",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x59763420efabb84b6d4ae2b2a34f6db6108950debfe1feba4f706ad5227eca5f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xdbed2b577f83fcb221ae85377d9c4f41b8ca95de085a3a697098ceaa937d23f8",
- "receiptsRoot": "0xf4e79fec628d38bdc719707be2f797b74efbc9468ba5a3ae9415877e11c21db4",
- "logsBloom": "0x00000000000008004000000000000000000000000000000010800000000000000040000000000000020000000000800410800000008000040000000000000000000000000000000000040000040000000000000000000000000000001000000000020000000000000400200000000100002000000000000000000000000000000008000010000000000000000020004400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000008000000000000080010000000000000000000000000000000200000000000020000000000000000000000000000020000800000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x107",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xa46",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf95bd5a6a4d1d51c8f00e6421bb1ecdb2a4b19222261aa412dcb4c371eea1af5",
- "transactions": [
- "0xf87981d30883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0aa1f3a14b2bee05c15deffd1fcbad6d16deb140557251b04ddb61574fa8c70d8a0614a539b7fe8c276d26cabc1ff36c88c3f6b9cf3bc8836309a1d3f46626b5153"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xfb4619fb12e1b9c4b508797833eef7df65fcf255488660d502def2a7ddceef6d"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np264",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf95bd5a6a4d1d51c8f00e6421bb1ecdb2a4b19222261aa412dcb4c371eea1af5",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2eb443ed50d07a6b1dbb2c154cc221cfb0475593b39ca2d3569224ea7a08030e",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x108",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xa50",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x68bd9ab4e0b622e480296f040ad58d1b7f048c712ad5b46c7a596265d5f8e9fc",
- "transactions": [
- "0xf86481d4088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0533560fb23c458df00902dbacef307e98096d91f179c49458d99e2eecaeaf3d3a0314508cba155f195ff77eff1a25ed4f454a07b404ac82d3ea73796bd9af3128d"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd08b7458cd9d52905403f6f4e9dac15ad18bea1f834858bf48ecae36bf854f98"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np265",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x68bd9ab4e0b622e480296f040ad58d1b7f048c712ad5b46c7a596265d5f8e9fc",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6e68dd5ff68bf8a325446716e5bc1629a4e77167c3b5c9249ac2e440b35dea9b",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x109",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xa5a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xfd61bbebf4026ea51b90fafefc671dc4540e83436c83eb9bc51e6b2b15db5dc9",
- "transactions": [
- "0x02f86a870c72dd9d5e883e81d5010882520894ac9e61d54eb6967e212c06aab15408292f8558c40180c001a0898d514a1f15103335e066d0625c4ec34a69a03480d67dcb3d3fe0f4f932100aa07e130fed862c1482467d112f64fb59e005068b52c291003c908b625b4993e20e"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xdf979da2784a3bb9e07c368094dc640aafc514502a62a58b464e50e5e50a34bd"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np266",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xfd61bbebf4026ea51b90fafefc671dc4540e83436c83eb9bc51e6b2b15db5dc9",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4783eb369238bf2856e00bbc632735adf5ea404b766a0a70c27913314e170bac",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x10a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xa64",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xaa8b392a2333d1f8a498c60f1c9884705d0bff7dd5a524b5a119f547b0d6579c",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x25",
- "validatorIndex": "0x5",
- "address": "0xc04b5bb1a5b2eb3e9cd4805420dba5a9d133da5b",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x15855037d4712ce0019f0169dcd58b58493be8373d29decfa80b8df046e3d6ba"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np267",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xaa8b392a2333d1f8a498c60f1c9884705d0bff7dd5a524b5a119f547b0d6579c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd0b9db5bce164e65b476f578ff93039bad1be78c8d1f595ff8496c2f7a67fea4",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x10b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xa6e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa33f601ca31d93d804b269042c783f9a6f79857919289dbb935e81ba1fed86ea",
- "transactions": [
- "0xf88281d608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa03329c0816ba8af740dd07a393681abfd26c3f0a121cdfa2390607d0d1832e741a051d0d0b427004563def4552ee51b81a2ca1f41bb48e8b9ae20615381c353d9b3"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xfd1462a68630956a33e4b65c8e171a08a131097bc7faf5d7f90b5503ab30b69c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np268",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa33f601ca31d93d804b269042c783f9a6f79857919289dbb935e81ba1fed86ea",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xcb8d1404a32030e577a2628884f57433fe91b36b838f8576471bc36d87784132",
- "receiptsRoot": "0x65c1a0ac45edc227576188f00c72612cd6c4d27cdac8d997bc6c9f499d21565c",
- "logsBloom": "0x00000000020000000000000000000001000000000000000000000000402000000000000001000010000000000000000000000000000000000000000000000000000000000800040080000100000006000000000000000000000008000000000000000000000000000001000000000000001000040000000000000000000000000000000000000000080000100000000000000100200000000000000000000000000000000000080000000000000000000040000000000000000000000001000000000040000000000000000000000000000000000100000000000000000100002000000000200000000000000000008000000000000000008010000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x10c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xa78",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x295de1a3c0821f092b15b4e51f02dd17ab7f1753f22f97c88a2081f9a19ffa01",
- "transactions": [
- "0xf87981d70883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0310faf1dfcbc5597e207ab627226d2deeea1eedec7ffd8e68740fb76545586d1a01919f4683f202d4ccb3ab524d89d11119e7115645707333703d70f6fbe3c610d"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xedad57fee633c4b696e519f84ad1765afbef5d2781b382acd9b8dfcf6cd6d572"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np269",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x295de1a3c0821f092b15b4e51f02dd17ab7f1753f22f97c88a2081f9a19ffa01",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x0199e03e7400c428fb1bba7126f4eb3a12becd96c4458bff54952e5535b4a3d0",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x10d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xa82",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x494693083463dc335450802ab50c97022e63c21e326ff7cebd7870802411db3e",
- "transactions": [
- "0xf86481d8088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0ea5ad6553fb67639cec694e6697ac7b718bd7044fcdf5608fa64f6058e67db93a03953b5792d7d9ef7fc602fbe260e7a290760e8adc634f99ab1896e2c0d55afcb"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc2641ba296c2daa6edf09b63d0f1cfcefd51451fbbc283b6802cbd5392fb145c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np270",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x494693083463dc335450802ab50c97022e63c21e326ff7cebd7870802411db3e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xad6e3dc4bf8e680448a8a6292fc7b9f69129c16eb7d853992c13ce0c91e7d1ce",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x10e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xa8c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xc54e865454d4ba4a092904e151d7afdc9b7b7ef9723dee0325ee075eb6a9a5c0",
- "transactions": [
- "0xf86781d90882520894653b3bb3e18ef84d5b1e8ff9884aecf1950c7a1c01808718e5bb3abd109fa0f1c5d5e335842170288da2c7c7af6856ea0b566d2b4ab4b00a19cb94144d466ca02043677d1c397a96a2f8a355431a59a0d5c40fc053e9c45b6872464f3c77c5dc"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x5615d64e1d3a10972cdea4e4b106b4b6e832bc261129f9ab1d10a670383ae446"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np271",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xc54e865454d4ba4a092904e151d7afdc9b7b7ef9723dee0325ee075eb6a9a5c0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4347088d10fe319fb00e8eee17f1b872f2e044cbe1cb797657294404bf370e30",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x10f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xa96",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xc33055476392adfe03f3bd812f9bb09b7184dc8d58beefab62db84ee34860bed",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x26",
- "validatorIndex": "0x5",
- "address": "0x24255ef5d941493b9978f3aabb0ed07d084ade19",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x0757c6141fad938002092ff251a64190b060d0e31c31b08fb56b0f993cc4ef0d"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np272",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xc33055476392adfe03f3bd812f9bb09b7184dc8d58beefab62db84ee34860bed",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa9c73e0cd551b43953f3b13ee9c65436102e647a83bfefa9443ad27733d0371c",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x110",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xaa0",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x39f74e3f7d2c3f4ab7e89f3b597535ffebd200abe4b1aa67f721ffaa13cbc2b4",
- "transactions": [
- "0xf88281da08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0972f048bcd4f8e2678a209e354570de7452fa342744fab1e44b7af67b2484d9ea0076f82074ff9697256d2661ad9f9a7321ff54fa3100ecc479166286a9a22ada5"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x14ddc31bc9f9c877ae92ca1958e6f3affca7cc3064537d0bbe8ba4d2072c0961"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np273",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x39f74e3f7d2c3f4ab7e89f3b597535ffebd200abe4b1aa67f721ffaa13cbc2b4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf003762d896629dcd3a92a67ee13b96b080f4a3e71402a1dcbf9f444377329b5",
- "receiptsRoot": "0x4d68fb9bfae6768b9578f5a63f455867ea5993ec2261fad2a25b45794d092f7c",
- "logsBloom": "0x00000000000000000001000000000000000000000000000000000000000000000000000080000000000000100000008000000000000000800000000000000000000000000000000000000000000000400000000040000000240001100000000000000000000000000800000000000000000000000000000000060000000000000000000000000000040000000000002000000000000000080000000200000000000000000000000800000040000000040000000000000000000000000000100800000000000800100000000000000000000000000000002000800000000000000000000800000000014000040000000800000000000400000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x111",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xaaa",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x23408e1ac73e1dd9c3a735776a73b4c79249e5a9eb62ec9f9012f7f6c11ba7d0",
- "transactions": [
- "0xf87981db0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a08883be3af4b0a273883412ad320e6dcace1f505d9b20194e8f9e2e092c8d5ce4a03da92647d3d92d2868d5b9c479d98faf263e78eb67f259101a65ff56ee1eccbf"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x490b0f08777ad4364f523f94dccb3f56f4aacb2fb4db1bb042a786ecfd248c79"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np274",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x23408e1ac73e1dd9c3a735776a73b4c79249e5a9eb62ec9f9012f7f6c11ba7d0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x741d337861f144fc811cfac1db596e3bedb837b0fb090a3d013e5492bf02b233",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x112",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xab4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xc7578d8b738ac9f5ab97605ce1c8101160faa615feeb8fc43282d8bd6ae450ac",
- "transactions": [
- "0xf86481dc088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0bcd2b139343048e9174e86251017c9b7c4da9fc36e4a84cf98eaf3855561f8e3a01c25a7b3ff3ebd7d9cbed5aa65515f8ba06fb8860d0764a98591da24e7d1c842"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4a37c0e55f539f2ecafa0ce71ee3d80bc9fe33fb841583073c9f524cc5a2615a"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np275",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xc7578d8b738ac9f5ab97605ce1c8101160faa615feeb8fc43282d8bd6ae450ac",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe1ce5b13d3189869321889bb12feb5da33a621bf0dbc4612b370a4b6973201f7",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x113",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xabe",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x0bd8ca5ecbf0c960433cbe52bec31810c325088860cd911a1df20174fd30243a",
- "transactions": [
- "0x02f86a870c72dd9d5e883e81dd010882520894d8c50d6282a1ba47f0a23430d177bbfbb72e2b840180c001a04330fe20e8b84e751616253b9bccc5ff2d896e00593bfbef92e81e72b4d98a85a07977b87c7eca1f6a8e4a535cb26860e32487c6b4b826623a7390df521b21eac7"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x133295fdf94e5e4570e27125807a77272f24622750bcf408be0360ba0dcc89f2"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np276",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x0bd8ca5ecbf0c960433cbe52bec31810c325088860cd911a1df20174fd30243a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x76aa5a1d0fc7c2f7e01a8c515f018e30afb794badc14b5d8e3651096458947a0",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x114",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xac8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x604c3b8dbc400712146239b5b6e70426361e47c118c6fff4c1761554c3ad2e47",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x27",
- "validatorIndex": "0x5",
- "address": "0xdbe726e81a7221a385e007ef9e834a975a4b528c",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa73eb87c45c96b121f9ab081c095bff9a49cfe5a374f316e9a6a66096f532972"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np277",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x604c3b8dbc400712146239b5b6e70426361e47c118c6fff4c1761554c3ad2e47",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xaad6081261920a2bddee7ad943a54ceebdb32edf169b206bd185bd957c029389",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x115",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xad2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x3dbceccc7aefcec187b98fc34ab00c1be2753676f6201a1e5e1356b5ce09c309",
- "transactions": [
- "0xf88281de08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a092ec956d91708337ef4625bb87caed7a2bab63e40c8e65e8c9ee79a89b525b53a02bfff0c6dadfbf70dbd9fb2d75a12414d808ee6cce90826132d63f8ef2ce96b5"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9040bc28f6e830ca50f459fc3dac39a6cd261ccc8cd1cca5429d59230c10f34c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np278",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x3dbceccc7aefcec187b98fc34ab00c1be2753676f6201a1e5e1356b5ce09c309",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xac5c584edba5f948690abb0f1c0f9bef685dec896c8f6c5c66ef8dd65810d53e",
- "receiptsRoot": "0xdd1d7486ff21ad1c1e17b4d06cf0af6b4a32f650ac495deff2aae6cb73338de3",
- "logsBloom": "0x00000000000000000000002000000200400000000082000000000000020100000000000000000000000000000000000000000000000000088000000000000010000000000000000000000800000800000000000000000000000000000000000000000000100000000004001004880000000000000000000000000000000000480000000000000000002000000000801000000000000000000000000000000080000010000000800000000000000000000000000000000000000000000000000040000000000000000000000000008010000100000000000100000000000000000000000000000000000000000000000000000000000000200000000010000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x116",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xadc",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe69bddf40ecef2219c3ce0f27015125fb42d2339c75675f8e0dc587246cf617c",
- "transactions": [
- "0xf87981df0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa099b6473bcd99e0f32d82c046bad2e1824a8468bae8347768d907768e2fe64a2ba051f3f8b7323eab23d5543c8e372e4e184bc3ee108eab5455b89d40d9cbc23008"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xec1d134c49cde6046ee295672a8f11663b6403fb71338181a89dc6bc92f7dea8"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np279",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe69bddf40ecef2219c3ce0f27015125fb42d2339c75675f8e0dc587246cf617c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x909007de8369b2fd9597dd7b84ab31e36b949026383fa8957befdba94703689b",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x117",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xae6",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x3f0eb43bfa229f0449d1b975632be01a69ed6c63eda12fb61bf83a2f8cde3c87",
- "transactions": [
- "0xf86481e0088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0d8414a9d94412185c316893b53c874ae28ad6c0d67910ec66b39051f7842408ea05329ebb7080c9a6ae9372e8004706b78f7465746c3492816b6255fcba4d84979"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x3130a4c80497c65a7ee6ac20f6888a95bd5b05636d6b4bd13d616dcb01591e16"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np280",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x3f0eb43bfa229f0449d1b975632be01a69ed6c63eda12fb61bf83a2f8cde3c87",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4dcb18dbea7ec4b9dc13b208172da29eb275e2095a6f8c6aeee59d62d5c9dd76",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x118",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xaf0",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x12c3c44447da5af2e83d37224a825c26890db2483d5732e4bac08b87fe3ce5fa",
- "transactions": [
- "0xf86781e10882520894b519be874447e0f0a38ee8ec84ecd2198a9fac7701808718e5bb3abd109fa0cfbd9ff7eeb9aef477970dcba479f89c7573e6167d16d0882ead77b20aaee690a01e34175b1b1758a581ca13f2ca021698933b1e8269c70fcb94c5e4aa39ee9b8e"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xccdfd5b42f2cbd29ab125769380fc1b18a9d272ac5d3508a6bbe4c82360ebcca"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np281",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x12c3c44447da5af2e83d37224a825c26890db2483d5732e4bac08b87fe3ce5fa",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xcbbdc9e51f0cde277f8f0ba02544d4d2be87cb7a5853a501524d760b00ec5e57",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x119",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xafa",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x2ca033d3c29586c8a38da6008d4a446814d845565ed5955418b125fdbe4602e0",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x28",
- "validatorIndex": "0x5",
- "address": "0xae58b7e08e266680e93e46639a2a7e89fde78a6f",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x74342c7f25ee7dd1ae6eb9cf4e5ce5bcab56c798aea36b554ccb31a660e123af"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np282",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x2ca033d3c29586c8a38da6008d4a446814d845565ed5955418b125fdbe4602e0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa5f40d100045883afd309122196cd37e687124adc5ec4c609e9d4ea9e8050be1",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x11a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xb04",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x38ae7bdbc3e96e43871baeea0577a4a6e40dd3b4d2c6fea0b50d63e24dd24382",
- "transactions": [
- "0xf88281e208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a02a4dd1a40886d389cecff4ca095a57e2f1e924b8d0e80e95c67961bec5af4b34a00adc6e41c4fe22eb93c7bc6ac529c405a8beb3b75d3f82a24029c560d293bee1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf6f75f51a452481c30509e5de96edae82892a61f8c02c88d710dc782b5f01fc7"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np283",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x38ae7bdbc3e96e43871baeea0577a4a6e40dd3b4d2c6fea0b50d63e24dd24382",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x7a69e46d9beb12acb2476f649cf7fa7d31624c8b521351b533e302290b7ce166",
- "receiptsRoot": "0x8f6545857c380d6f9aefa3a76d16cc79ce6d3e8d951a9041f19d57cbde82f55f",
- "logsBloom": "0x00000800000000000004000000000001000000000040000000000800025000000000000000000000000000020000000000000000000080000008000000000000000000000000000000000000000041000000000008000000000000800000000000000000000000000080000000000000000080000000000000000000000000000000000000000000000000000010000000000000000000000000040000000000000040000000200000000081000400000000800000000010000000000000000000800000000000001000000000000000000000200000000000000000000008000000000000000000000000000000000000000080000004010000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x11b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xb0e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xbf711951f526479f4c5a6a945594daacff51aacb288122fc4eea157e7f26c46b",
- "transactions": [
- "0xf87981e30883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0ac71118aff6dbdfd117ed52c41169a3c1eec7c7b137fed7ec058a48916198f2da05b684d53b4cc1cdafdba987f894eb9c42da47785983593ee1318f8a79f83eff7"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7ce6539cc82db9730b8c21b12d6773925ff7d1a46c9e8f6c986ada96351f36e9"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np284",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xbf711951f526479f4c5a6a945594daacff51aacb288122fc4eea157e7f26c46b",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2d7b3e2f3ea5d7c34423a2461c1f17a4639b72a0a2f4715757ca44018b416be0",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x11c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xb18",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf5882e396311b698818e2e02c699c77a0865ea6320dc69499197aaf8fd8e6daa",
- "transactions": [
- "0xf86481e4088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa088575e3574fdfafb5c288b553973607350d846bd81b304beddaa6ef3dd349eada03cacc2455d5296189c0fc6890380a3c405b96cecfc45dc04a7f7dafe76be64c9"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x1983684da5e48936b761c5e5882bbeb5e42c3a7efe92989281367fa5ab25e918"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np285",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf5882e396311b698818e2e02c699c77a0865ea6320dc69499197aaf8fd8e6daa",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xdc0d40e96eaa22025544b17cc122fab8f236a1a5d0bfa1a07a6ea680fc31661c",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x11d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xb22",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x0fabca07111b96e64ef425173cb375ed75f3e1b8ee34eed7593fe8930c9f487d",
- "transactions": [
- "0x02f86a870c72dd9d5e883e81e5010882520894af2c6f1512d1cabedeaf129e0643863c574197320180c001a0c23170a740ba640770aca9fb699a2799d072b2466c97f126a834d86bdb22f516a03f242217b60ab672f352ae51249a8876a034ee51b6b4ad4a41b4d300c48e79f4"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc564aa993f2b446325ee674146307601dd87eb7409266a97e695e4bb09dd8bf5"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np286",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x0fabca07111b96e64ef425173cb375ed75f3e1b8ee34eed7593fe8930c9f487d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6d0b749b8735df89c9d0bd4fff2d180d87a7ff86301fc157573ff0e774a942fc",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x11e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xb2c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x29d8373309b28aa3b206208c60bf6be454db83f0d5c4140604ec288251b4c5aa",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x29",
- "validatorIndex": "0x5",
- "address": "0x5df7504bc193ee4c3deadede1459eccca172e87c",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9ca2ff57d59decb7670d5f49bcca68fdaf494ba7dc06214d8e838bfcf7a2824e"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np287",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x29d8373309b28aa3b206208c60bf6be454db83f0d5c4140604ec288251b4c5aa",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x06f453054ff02cd966887e3e22bf509aacb23ee18ca302b612f10d2fb473cfa3",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x11f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xb36",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x84b99bc78800f925e5ba4da02f58581a21a3ae711a6306147ff4379435e655ee",
- "transactions": [
- "0xf88281e608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0bac48741d1f314ffaab63f07d4e7a0bc34c68dde478b439f4bca7dcf0b0a1493a036448a9a4150cad5f24411e8a9bbe89096d555ad08818e90d524bbad8b380b7a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x6d7b7476cecc036d470a691755f9988409059bd104579c0a2ded58f144236045"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np288",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x84b99bc78800f925e5ba4da02f58581a21a3ae711a6306147ff4379435e655ee",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb45e7c8ace763c55943f9c73da1319566234dad9d29651d6b08227eb88c9c4fe",
- "receiptsRoot": "0x490106e6f82f2847cc9eb542a9836943df09d8a6b2e4a4fafba322228449195a",
- "logsBloom": "0x40000000000000000000100000000000000000000002000000000000000000000008000000000100000000400000000000000000000040000000000000040000000000000000004000002000000000000200000000000000000204000000000000000000000100000000000000000008000000000000000002000000200000000000000000000000000000000000000000000000008000000000000000010800000000000000004200000000000040008000000100000000000000000000000000000000000010000000000000000000000000000000080000400000000000000000000000000000000000000000000000000000040000200000000004800000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x120",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xb40",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xc7104befaf82feba7ad56db858cc6743e8ac2af4b6a1a0949c9c1ba51c0fe869",
- "transactions": [
- "0xf87981e70883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa017d70f5a57065bf0973a62206ec4a9b7f1f329904de722faf30fff8e2dca5719a006d0438164dd0ff38d669ebaa44dd53cec0b81d8cfe855a9aedee94b3b1f724d"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x417504d79d00b85a29f58473a7ad643f88e9cdfe5da2ed25a5965411390fda4a"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np289",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xc7104befaf82feba7ad56db858cc6743e8ac2af4b6a1a0949c9c1ba51c0fe869",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4c863fc026d042a28f4ee149361f77c9dae309e18ea2497255ae91f8c41e0055",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x121",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xb4a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x38c868f4adbaf9c38505eee26eb316eb5065c194df8aeed5c605f8c309d4b68a",
- "transactions": [
- "0xf86481e8088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0428b809dd6147da7fc27a9520ae39b6a361b8f646b4eae45b3b32e3e406d766ea00c794c60066a8d4e435ba368662d9a6c0ffdd57ec6c49fdb0c2d4c07a69875cf"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe910eb040bf32e56e9447d63497799419957ed7df2572e89768b9139c6fa6a23"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np290",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x38c868f4adbaf9c38505eee26eb316eb5065c194df8aeed5c605f8c309d4b68a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4849e0698f5f4b970db7b185d122842a6f842611058a838fe4c48bf3c63b89b6",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x122",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xb54",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x962c229b0020efff007766682c8af73f38bc87fa2a83cf4a520b1e6706ced05e",
- "transactions": [
- "0xf86781e90882520894b70654fead634e1ede4518ef34872c9d4f083a5301808718e5bb3abd10a0a0953d5aa69077225dba6a0333ea4d69a05f652e0d2abb8df492a7e6a9d0cdbe3da004e41cb847aa131b9bb1e19cb3dd5f7a6cc2ac8b7f459ab8c3061380d41721ff"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x8e462d3d5b17f0157bc100e785e1b8d2ad3262e6f27238fa7e9c62ba29e9c692"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np291",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x962c229b0020efff007766682c8af73f38bc87fa2a83cf4a520b1e6706ced05e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6334127515360bcab6eb39030e54b05d61d464576fb4f99fbece693ffa600610",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x123",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xb5e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xd8f175dd35dd4a5d97e51309a5fdeb6e713aef85c25c9e2d661075535cf8d8c1",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x2a",
- "validatorIndex": "0x5",
- "address": "0xb71de80778f2783383f5d5a3028af84eab2f18a4",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x3e6f040dc96b2e05961c4e28df076fa654761f4b0e2e30f5e36b06f65d1893c1"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np292",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xd8f175dd35dd4a5d97e51309a5fdeb6e713aef85c25c9e2d661075535cf8d8c1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6a53dd10b53014df9fed6a4ae0fee8fc21111c58421916e9c770906b7676cbaf",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x124",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xb68",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x56a449bf5c7dba876a8f68b55d9dbbb06c0dddd3c5f586ec4a95317a0f00c79d",
- "transactions": [
- "0xf88281ea08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a04efd756d15757c98077f04c9f50a22f7e74b1f28f970614a6824b4a406c11d0ba01c4bc3461a415a9c4dbfd4406c3c684a5427ce1490c93d7a9f5e43891dedc709"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x07e71d03691704a4bd83c728529642884fc1b1a8cfeb1ddcbf659c9b71367637"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np293",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x56a449bf5c7dba876a8f68b55d9dbbb06c0dddd3c5f586ec4a95317a0f00c79d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x82f613ee711de05f2cc6a4a107500bdd5045f1ba99ce2738222f343f6081efe6",
- "receiptsRoot": "0x2c3a6865afbff0ff9319c72cb9974b085dfe9a34eb9b34e0f4bc267272a883ca",
- "logsBloom": "0x00000800000000000000004000010000000000000000000000000000000000000180000000000000800000400000000000001000000000000000100000000000000000000000000008000400008000000000000000000000001000000004000001000000000000000008000000000000000000000000000000000000000000000000000000000000090800000000000000004000000000000100000000002400000000000800000000000000000000000000000000000000000000000000000000000000000000000000200001000000000000000000000000000000000000002000000000000000000200000040000000000008008000000000000000022000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x125",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xb72",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x45a502a5a428913c585b13dbdd0857fbf4ffc3e928b942b5e96c98aced1a1736",
- "transactions": [
- "0xf87981eb0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a03cbaa69de647fe3ea352a6e71bab2ee53555fb8ab88c5e68efe28f2e5d687b9ea063c88d4e12b282eb4075d28f2fc6f36c7017ed0d91e36dbfd9d63a358e96abac"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf4d05f5986e4b92a845467d2ae6209ca9b7c6c63ff9cdef3df180660158163ef"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np294",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x45a502a5a428913c585b13dbdd0857fbf4ffc3e928b942b5e96c98aced1a1736",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x291d2f7ab3a39d6c34a1b1c66e69262273221f6a8b2bac448e37e64da2330694",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x126",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xb7c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x00f4447478e16a0e4dbe26e2398381d77367268754921e89d20bb152c1648910",
- "transactions": [
- "0xf86481ec088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0aa81d6aa3b28238a33a52a3e3b5f00fa2300402a222f10c0e7451318b3f81e25a0223f13ffcec992f0ed7592df411b58352aad6d277dd16e7d0a55e5ab5702a18a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x5ca251408392b25af49419f1ecd9338d1f4b5afa536dc579ab54e1e3ee6914d4"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np295",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x00f4447478e16a0e4dbe26e2398381d77367268754921e89d20bb152c1648910",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe3e06a047edd89fc5a4f9ee475d8e10ace0a0bae37ad4df6613a6077870fcae4",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x127",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xb86",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x1480b67138d2eb8359bf102ee31219dea9776af6c7fed33e8f4847ce943365c4",
- "transactions": [
- "0x02f86a870c72dd9d5e883e81ed010882520894be3eea9a483308cb3134ce068e77b56e7c25af190180c080a0190737acd3a2a298d5a6f96a60ced561e536dd9d676c8494bc6d71e8b8a90b60a02c407a67004643eba03f80965fea491c4a6c25d90d5a9fd53c6a61b62971e7c5"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe98b64599520cf62e68ce0e2cdf03a21d3712c81fa74b5ade4885b7d8aec531b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np296",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1480b67138d2eb8359bf102ee31219dea9776af6c7fed33e8f4847ce943365c4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8d04702ac0333be2a1e6ae46e4aa31fe4fe23f5458c6899a7fd8800d24162bc5",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x128",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xb90",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x5b6e5684623ac4835ad30948dca710bb10d4bf48695089a4eca9e472300f37d7",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x2b",
- "validatorIndex": "0x5",
- "address": "0x1c972398125398a3665f212930758ae9518a8c94",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd62ec5a2650450e26aac71a21d45ef795e57c231d28a18d077a01f761bc648fe"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np297",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5b6e5684623ac4835ad30948dca710bb10d4bf48695089a4eca9e472300f37d7",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb59802d3b42a67087c2362fe27807e97ea95f8894d734e3711d61768b0779cc5",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x129",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xb9a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x5903dfb3ecee5d8bc0e0cc0208b17dfc9a0dc86de2eaaee48da23ea0877b6c87",
- "transactions": [
- "0xf88281ee08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a01a3bb1f736220feefc5706b013d9cd88f2e5d5c1ee3398b15ba14e84ed6a12c9a078068efcdcd82d92408e849bb10f551cc406e796ff1d2e7d20e06a273d27dfdf"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4d3fb38cf24faf44f5b37f248553713af2aa9c3d99ddad4a534e49cd06bb8098"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np298",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5903dfb3ecee5d8bc0e0cc0208b17dfc9a0dc86de2eaaee48da23ea0877b6c87",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x18be7053419eb1d23d487c6a3df27d208a2f8973d17b6b3e78417df0d3ab1644",
- "receiptsRoot": "0xa7318d908cd687d0e6d982ec99a33a54b0cb9d1bbe3782f31ae731231e79039f",
- "logsBloom": "0x00000000000000000000000400000000000000000000000000000000000000000000000000000008000000000000000000000000040000000000800000000000000000000000000800000010000000110000000000000000000020000000000200000000000000000000000004000000001000000000000000000000000000040100000000000000000000000000200000000800040000080040000000004000000000000000200000000000000204000000000000000000000100000000400008008000080000000100000000000000000000000000000000000000000001000000000000000000000000000000001000000000000000000100000000800000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x12a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xba4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x19f2a0716399f123d47e625de34fb2d6fbeadc26b2993e89504e73db85248052",
- "transactions": [
- "0xf87981ef0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0dc80fe6320cc01dd2ab63a42dd099e2fa5e0a640e6ccdf8ed634ca0c7382bd9fa04b356107e6a61d8852e7dc24f02691a9bd203564fed22da46bc9d9cd560c3dd4"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x36e90abacae8fbe712658e705ac28fa9d00118ef55fe56ea893633680147148a"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np299",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x19f2a0716399f123d47e625de34fb2d6fbeadc26b2993e89504e73db85248052",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf704271ace032c151b512221e777247a677847e2588ffb6fdea3de9af775b059",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x12b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xbae",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x2d68907fbe46b2958a1e07b483359dd1e1ac8a6fa0b13e0a9c012cb5de4bf458",
- "transactions": [
- "0xf86481f0088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa06074cb58acfc1417684962272c546809696c6d2110b75735b19852066839a38ea03bd4f9b9b32c074215420391000ce0358e01e65745d7a6aa5513c4f857dd6579"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x164177f08412f7e294fae37457d238c4dd76775263e2c7c9f39e8a7ceca9028a"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np300",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x2d68907fbe46b2958a1e07b483359dd1e1ac8a6fa0b13e0a9c012cb5de4bf458",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x0d6f0609afeda40249aad175bb482c3560b6f0e2fb612addd06c6f3953662531",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x12c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xbb8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe7554d8e76e3ae2d92eceade591334e211020b97e176762c99573ba526c7fdc6",
- "transactions": [
- "0xf86781f1088252089408037e79bb41c0f1eda6751f0dabb5293ca2d5bf01808718e5bb3abd109fa0e3edf14f32e7cacb36fd116b5381fac6b12325a5908dcec2b8e2c6b5517f5ec5a051429c4c1e479fa018b7907e7e3b02a448e968368a5ce9e2ea807525d363f85e"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xaa5a5586bf2f68df5c206dbe45a9498de0a9b5a2ee92235b740971819838a010"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np301",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe7554d8e76e3ae2d92eceade591334e211020b97e176762c99573ba526c7fdc6",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4ebd469b936b8d119664429fa99c55d75c007d4d12b7eb4db058248fa52b7f46",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x12d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xbc2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x20cae70a3b0dbe466c0cb52294f4a0fcc2fdae8e8e23a070cfa0ebe6a9fabab9",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x2c",
- "validatorIndex": "0x5",
- "address": "0x1c123d5c0d6c5a22ef480dce944631369fc6ce28",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x99d001850f513efdc613fb7c8ede12a943ff543c578a54bebbb16daecc56cec5"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np302",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x20cae70a3b0dbe466c0cb52294f4a0fcc2fdae8e8e23a070cfa0ebe6a9fabab9",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4e0e374db1e769d72af232e15f83b61024ab42a410b4088ad54ae31fb7ab24c2",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x12e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xbcc",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x8088940507cc523f7c12bcec9729eed01e631ccef6faa8a6413a89d77f109c0b",
- "transactions": [
- "0xf88281f208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a03f816a6f00b46ffee7ae7dc0a8472c822003d7f175c03fc883435b5303662e29a053e91a9fcfb952b9d2ee2d3017e3d02c8988bb4abcb9c343b66d90094e9b9817"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x30a4501d58b23fc7eee5310f5262783b2dd36a94922d11e5e173ec763be8accb"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np303",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8088940507cc523f7c12bcec9729eed01e631ccef6faa8a6413a89d77f109c0b",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x5cd39242444b2f075de43272eb00a7435191e5d07d4da17022f05f91167f8a71",
- "receiptsRoot": "0x8c5ae4043b8c3ac3c3faf57678b01a0a80043b682d0a8ae2681dc5c892d7a562",
- "logsBloom": "0x00000000000000008000808000000040000000000008000000010000000100000000000040000000000000000000001000000000000000000000000000000000100004000000000000800000000000000008008000000008000000000000000020000000000000000000000000000000000000040000000400000000000000000002000000000000000000000000000000000060000000000000000010000000000000000000001020000000080000400000000000000000000000000000000000000400100000000000000000000000200000400000000000000000800000000000000000000000000000000000000010000000004000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x12f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xbd6",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x3cfeeb3c000dbf1a34a7d601bacf17a26ab0618b14a821b61f847d10d41dd47d",
- "transactions": [
- "0xf87981f30883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0cdff6973fabfb503b56e50264fa9d542805c351a2cf282d14e9a7e3f90df3bcea03fc2b2ef3d6e5c8d141f20dab6ea64a6ad2f7c5ab3da95c98cff7a73429036a1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa804188a0434260c0825a988483de064ae01d3e50cb111642c4cfb65bfc2dfb7"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np304",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x3cfeeb3c000dbf1a34a7d601bacf17a26ab0618b14a821b61f847d10d41dd47d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb8480fa4b2321e09e390c660f11ec0d4466411bae4a7016975b2b4fd843260dd",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x130",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xbe0",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xcb128d5be67707747d086abaf2a724879f3a54b7ca2bda6844678eb52a2d225f",
- "transactions": [
- "0xf86481f4088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0ceb79cfa45773ae766de6daf76c67f63fbf14c7cd3853b6cd9ba8cd7cd1608baa019c783f138465d2c59039c902cc9b90cbff0e71a09672939e2373390b1f8c4c5"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc554c79292c950bce95e9ef57136684fffb847188607705454909aa5790edc64"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np305",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xcb128d5be67707747d086abaf2a724879f3a54b7ca2bda6844678eb52a2d225f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x022e2901949be09d1a92be5055ced3cd0770b41c850daf830834dc7da22c9af3",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x131",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xbea",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x36ddc7075c24073ea0b9b997ebf4a82596f13b41a831293600aaf876d5d1e0e0",
- "transactions": [
- "0x02f86a870c72dd9d5e883e81f5010882520894f16ba6fa61da3398815be2a6c0f7cb1351982dbc0180c001a08dac03d829e6f8eab08661cd070c8a58eed41467ad9e526bb3b9c939e3fd4482a02ac7208f150195c44c455ddeea0bbe104b9121fef5cba865311940f4de428eec"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc89e3673025beff5031d48a885098da23d716b743449fd5533a04f25bd2cd203"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np306",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x36ddc7075c24073ea0b9b997ebf4a82596f13b41a831293600aaf876d5d1e0e0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xec2a36c595c95a6b095a795e22415b66f5875f243697e72c945361b4f440c3bc",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x132",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xbf4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x90eae29a9b788583ec3624dac546f4372b97d2b1b58edbcca1b9f82e62b0d3c6",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x2d",
- "validatorIndex": "0x5",
- "address": "0x7f774bb46e7e342a2d9d0514b27cee622012f741",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x44c310142a326a3822abeb9161413f91010858432d27c9185c800c9c2d92aea6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np307",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x90eae29a9b788583ec3624dac546f4372b97d2b1b58edbcca1b9f82e62b0d3c6",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x427bbc009fe03135af46fb83f7cdcf27c022159be37615c8caceff14061d2f1f",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x133",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xbfe",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xdce2eeeafbf4e8ff4dbfa786434262fe7881254d7abcea2eabca03f5af5aa250",
- "transactions": [
- "0xf88281f608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa07b4f78cff0cb04bb8cb3d81e0aabef7b54c34db7438322bc8c1554448a37b027a00b760535ea891c9b4af5c70ac5726b3829418f5b21632aa8dda9ed2a91a7e30f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xae3f497ee4bd619d651097d3e04f50caac1f6af55b31b4cbde4faf1c5ddc21e8"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np308",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xdce2eeeafbf4e8ff4dbfa786434262fe7881254d7abcea2eabca03f5af5aa250",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4b11a079f7e911f563ce2c7a0bcda57feaea847b827bfceb4b0f0a1fde490e41",
- "receiptsRoot": "0x2cea15106bcab9c8122ea9fc8d7b5ace9f0650a79134ad9732b933221eb0c440",
- "logsBloom": "0x000000020000080000000000000000000000000000000000800000000000040000000001000000000000000000000001010000000010000000000000800000000000000000020008000080000000000000000000000000000000000080080000000000000000000000000200000100000000000000000000000002001000000000000000000800200000000000000000000000000000002000000000020020000008000000000000000000000000000000000000000000000000000000000100000000000004c0000000000000000000000010000000000000200000000000000000000000000010000000000004000200000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x134",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xc08",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xd619d2e9c151c94d9610527d55ab721a092f2566b79a92821e4c7c8a106cce4f",
- "transactions": [
- "0xf87981f70883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a03d6fef2d466b342db8155272b9e676d55fdc0fedab7d1fce3b3be54459203a44a016b740412be1021d3f480fbf75fa6733d5a233489a0e1cf72bf56c8b37a0ef80"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x3287d70a7b87db98964e828d5c45a4fa4cd7907be3538a5e990d7a3573ccb9c1"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np309",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xd619d2e9c151c94d9610527d55ab721a092f2566b79a92821e4c7c8a106cce4f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x0d7fe7c7c5e17180dd3c5d11953d20c0df05569d83f29789680311e835d44c92",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x135",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xc12",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x722090df82f4d2bf93cc1d092239e427a1ed045284bc56b5aa142b02d2cb3955",
- "transactions": [
- "0xf86481f8088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0b82807e311788292f679bc187111f494eb67171b03e417afdfb54e17f53b9ecfa05d9e1261b6bd95693c5e7859fa6e9ac0f380083750f46dec3f5058026c00aa54"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb52bb578e25d833410fcca7aa6f35f79844537361a43192dce8dcbc72d15e09b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np310",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x722090df82f4d2bf93cc1d092239e427a1ed045284bc56b5aa142b02d2cb3955",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x97742ddf818bf71e18497c37e9532561f45ff6f209555d67e694ec0cec856e7e",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x136",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xc1c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x81f5ce1e85499179e132dbe7b9eb21403c7f3df276820c668ed86a018065dbfa",
- "transactions": [
- "0xf86781f9088252089417333b15b4a5afd16cac55a104b554fc63cc873101808718e5bb3abd109fa0f2179ec11444804bb595a6a2f569ea474b66e654ff8d6d162ec6ed565f83c1aaa0657ed11774d5d4bb0ed0eb1206d1d254735434a0c267912713099336c2dc147a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xff8f6f17c0f6d208d27dd8b9147586037086b70baf4f70c3629e73f8f053d34f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np311",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x81f5ce1e85499179e132dbe7b9eb21403c7f3df276820c668ed86a018065dbfa",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x5feed3f1d6bc9de7faac7b8c1d3cfe80d29fbf205455bc25ac4c94ff5f514ca3",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x137",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xc26",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x685678cda85d28dbe24cd7ef896866decc88be80af44933953112194baeb70df",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x2e",
- "validatorIndex": "0x5",
- "address": "0x06f647b157b8557a12979ba04cf5ba222b9747cf",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x70bccc358ad584aacb115076c8aded45961f41920ffedf69ffa0483e0e91fa52"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np312",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x685678cda85d28dbe24cd7ef896866decc88be80af44933953112194baeb70df",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xde4840156998638689e0d07c0c706d3f79031636ae0d810638ecdd66c85516f4",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x138",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xc30",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xabbd38fb9a670e62ceca6b3f5cb525834dc1208cd8bc51b3a855932951e34ee3",
- "transactions": [
- "0xf88281fa08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa06193bab90c2a0e05f830df90babae78be711ea74e7fa7da80fb57bf1eac7b01ba007568dc41c59c9a3e9f4c46ad8bac850ecee5fdbe8add1a840db65266062453c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe3881eba45a97335a6d450cc37e7f82b81d297c111569e38b6ba0c5fb0ae5d71"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np313",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xabbd38fb9a670e62ceca6b3f5cb525834dc1208cd8bc51b3a855932951e34ee3",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6fc93047d0ff562c8abee419aecf2b174b1c382f506dedcbb5ba04955cd985c7",
- "receiptsRoot": "0xcd59afd93dd989872aa9f89197f533f1c6a90364b872e145f50ff782af2b758b",
- "logsBloom": "0x00000000000000000000000001000000000000000000000010000000000000000000000800000000000000000000000004011000000000400000001000000000004000000000000000080000000080000000000000004000800000000400001000000000000000000008000000800004000000000000000000000000080008000000000040000000000000000000000000000020000001000000000000000000000400000000000000000300000000000000000000000000000000400000000000000000000000000000000000000000000400000000000000000000000000000010000000000000001000000000000000010000000000000000400000000040",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x139",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xc3a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x323e57df6d8869c18eac5a0746e2e3fa96645813704b4af06659dfea08d2473c",
- "transactions": [
- "0xf87981fb0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0465ab07ff3930a9a8f24c5108701be4a0475480d72147e12305f9d67017af925a07b3dd5fbeae129ce4ea30381c15b2afd9be701e4969422415e07ecea3df82db1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x2217beb48c71769d8bf9caaac2858237552fd68cd4ddefb66d04551e7beaa176"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np314",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x323e57df6d8869c18eac5a0746e2e3fa96645813704b4af06659dfea08d2473c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xcae6ffdf3092bcb2ebdc66df86177bce69bf2f5921e5c4d482d94f2fd5f6649b",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x13a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xc44",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x36c686b156ca6fb1280730a2f86acfd8bcee71bb9666a473d00f0c7813fe5a2c",
- "transactions": [
- "0xf86481fc088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0d92908e16f6965c17390bafa5649b05b9150b6db7cb63fccfa3d8ccc1f18ec7fa04082aba5936ac8d14c3f78d12f12d9437b575cebd82337c4499f2176afb74cba"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x06b56638d2545a02757e7f268b25a0cd3bce792fcb1e88da21b0cc21883b9720"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np315",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x36c686b156ca6fb1280730a2f86acfd8bcee71bb9666a473d00f0c7813fe5a2c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x1220b41d89a79f31d67f2373ea8563b54fb61661818e9aab06059361fc1412ca",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x13b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xc4e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe5456434219d6d602162c56859d7a24895a28aac0958bd46bef986d7d8cab2e0",
- "transactions": [
- "0x02f86a870c72dd9d5e883e81fd010882520894d20b702303d7d7c8afe50344d66a8a711bae14250180c001a067bed94b25c4f3ab70b3aae5cd44c648c9807cdf086299e77cf2977b9bce8244a076661b80df9b49579fce2e2201a51b08ecc4eb503d5f5517ecb20156fde7ec5a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xebdc8c9e2a85a1fb6582ca30616a685ec8ec25e9c020a65a85671e8b9dacc6eb"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np316",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe5456434219d6d602162c56859d7a24895a28aac0958bd46bef986d7d8cab2e0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x65c692f846c2dc380a912a71c1387fec7221a2b0fffae2451370c30ed15350d1",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x13c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xc58",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa0f3387ab2dd15ebc6dc9522d5d0ee33f01548722c7fde856fb0f4f00fc6a7a1",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x2f",
- "validatorIndex": "0x5",
- "address": "0xcccc369c5141675a9e9b1925164f30cdd60992dc",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x738f3edb9d8d273aac79f95f3877fd885e1db732e86115fa3d0da18e6c89e9cf"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np317",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa0f3387ab2dd15ebc6dc9522d5d0ee33f01548722c7fde856fb0f4f00fc6a7a1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3dc5f82b5983ab440abc575ac26ea2f4962c8c31f7e8721b537ea53d385827d5",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x13d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xc62",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf0da8bf67d04b148efa37b1c72f83bad458c873c35390e45853916d2a6011efa",
- "transactions": [
- "0xf88281fe08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0f5f035f73b86709cffa1134edc422e41e8ec49f3455943045c8571f4f12e8f6fa0659c80c0802ca16b9c71c90a8c1d7c32580b8dc2e33eb246d05e9c4920314a31"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xae5ccfc8201288b0c5981cdb60e16bc832ac92edc51149bfe40ff4a935a0c13a"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np318",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf0da8bf67d04b148efa37b1c72f83bad458c873c35390e45853916d2a6011efa",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb0a0edf94f736c11dfd920d0d386b5857441067979baff670d45380f5ce9c2b2",
- "receiptsRoot": "0xbe0275e0c21d0b23665e6d0b34bbb1669b585dfb6ef89c0903dcf8586ec86d00",
- "logsBloom": "0x00000020000000000000000000000000000100000000000000000000000040000000001000000000000040000000001000000000000000000000000000000000000000000000000000000000000001000000000000000400000000000002000000000000000000000000000000000000004800000000000000000000000000000000000020000000001004000000000004000000000000000100000800000401008000000000000000000800000000000100000000200000000000002000000000000000020002000000000000000000000000000000000000000200004002000004000000000000000000080200000000000000000000000000010000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x13e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xc6c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x9b47d293dedc13b8b02e999ebaf1bf25c233229acf97e7ff9e9491ffbdbcf859",
- "transactions": [
- "0xf87981ff0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a03b9f00d5731e51c973193cb6169cb8024b864d02e5347f287f8de4807e343922a04763ef63ac8ddc3fab7ccc70a4890b69fc944f330f5dd92f1b0266aaa6730eb6"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x69a7a19c159c0534e50a98e460707c6c280e7e355fb97cf2b5e0fd56c45a0a97"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np319",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x9b47d293dedc13b8b02e999ebaf1bf25c233229acf97e7ff9e9491ffbdbcf859",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe7a75428fc4aadb70c1e0ac2ae59a54df93458845525804742ae02a83d4f235e",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x13f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xc76",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa2c25b920f18b7c73332a155d3ab99a4a88b6454f70c1bdfddfcbfe50311c702",
- "transactions": [
- "0xf865820100088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa08c4b5e491ee67e169155453cdfc9f7ee6f122aeda5d73caf8337d6c29be1be3ca06b9a4038e45c6b5e858787dda6d1fe8d3c502a42996b4fe1abd2de1b834cf5fe"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4d2a1e9207a1466593e5903c5481a579e38e247afe5e80bd41d629ac3342e6a4"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np320",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa2c25b920f18b7c73332a155d3ab99a4a88b6454f70c1bdfddfcbfe50311c702",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xda3147e8c80cfa63013d1700016a432d64c00213231ac510ab15f7011eea14e8",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x140",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xc80",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xde65dcf316b36cd1d205e6df4a905df46ceedb163133ebffbab07fb6225d246d",
- "transactions": [
- "0xf8688201010882520894dd1e2826c0124a6d4f7397a5a71f633928926c0601808718e5bb3abd109fa01f5208621cee9149c99848d808ee0fa8d57b358afbd39dc594f383b7f525f4c6a01960c6254e869f06cfa3263972aa8e7cc79aec12caa728515c420d35b1336c0e"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd3e7d679c0d232629818cbb94251c24797ce36dd2a45dbe8c77a6a345231c3b3"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np321",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xde65dcf316b36cd1d205e6df4a905df46ceedb163133ebffbab07fb6225d246d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x05dcc2c2d7e87e4e1d836888d7158131800d123c6b2de255ba83054dfa109b02",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x141",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xc8a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf2fb525ebc86939eeafb51c320f9793182f89f7bc58ad12900362db56d9d4322",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x30",
- "validatorIndex": "0x5",
- "address": "0xacfa6b0e008d0208f16026b4d17a4c070e8f9f8d",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd1835b94166e1856dddb6eaa1cfdcc6979193f2ff4541ab274738bd48072899c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np322",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf2fb525ebc86939eeafb51c320f9793182f89f7bc58ad12900362db56d9d4322",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x5efe08d743bbae45240fc20d02ab6e38e923dedc1027cf7bc3caff52a138dc06",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x142",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xc94",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x815a67d4526461c4d40a205f5e8cbd11964bd0ed1079edc334250475a0efe1f2",
- "transactions": [
- "0xf88382010208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0f8cf692109b242d13af60f7def7e34fc16e4589de28a3fc445e83fece028b046a07ab0d98800bffd516adf4a56b048f67b4d5ffcf438c8463d82a0fe41509f51e6"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x1f12c89436a94d427a69bca5a080edc328bd2424896f3f37223186b440deb45e"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np323",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x815a67d4526461c4d40a205f5e8cbd11964bd0ed1079edc334250475a0efe1f2",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe6408a88797a6a4177fdb082766f6f35cd304745d96ceec7ba85908cf887ba77",
- "receiptsRoot": "0xf0fa46b5337f820bd96b8bf1a50706c91cf6e2d8a9bb0fd9859f0f80d60009e3",
- "logsBloom": "0x00400000000000080000000060000000000000020000000000100000100000040000040000000004000010000000000400000000000001020400000000000000000000000000000000000000000000000000000000000100000000000000400000000000020000800000100000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000014000000008000000000000000000000000800000000004000000000000000000000000000000020000000000010000800000000000000000000000000000000800000000000000000000000000000000000000000000400000000010000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x143",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xc9e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xc80438a37c405d0d3748ca7c92fb89f010ba9b06bd2136b919b563978f1ae6c1",
- "transactions": [
- "0xf87a8201030883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa04d42d5415cbd9d939ef53ef60dbdffb80d016dc6e0704059b94ea4c1d398a2c6a06276655ceed05dd6ed9d6adcb9bb38bf699ae5f7ad1d8e47871404cd3ca98a00"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xccb765890b7107fd98056a257381b6b1d10a83474bbf1bdf8e6b0b8eb9cef2a9"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np324",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xc80438a37c405d0d3748ca7c92fb89f010ba9b06bd2136b919b563978f1ae6c1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x38475f9f9a763356a2e995dd7ff0e2b3376078bd3048aa3d25bfec5257e1cf3f",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x144",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xca8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x1efad9b7aa7d15c849d6055ea15823066111fed8860177b6b0be3ed187a22664",
- "transactions": [
- "0xf865820104088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0654811f90e5259072ba79ea3e5a6ca7bfe8659e198ded895d149d1fc2bfe0167a052842cb4b3a0b0f2d722ec25a5c948bb2b78c3cd2d750303a5869a8812f17eed"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x8bbf4e534dbf4580edc5a973194a725b7283f7b9fbb7d7d8deb386aaceebfa84"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np325",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1efad9b7aa7d15c849d6055ea15823066111fed8860177b6b0be3ed187a22664",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xda41e628e9aa8c362284b556f48a4e3f9e3e0daec75c7950cd5d4ea75b9f8223",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x145",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xcb2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x8cfb3cab3103d0431ed161ebec0a29ffce5b82e8fa5b00520169a8be360b9054",
- "transactions": [
- "0x02f86b870c72dd9d5e883e8201050108825208941219c38638722b91f3a909f930d3acc16e3098040180c001a063adb9abb5014935b3dbf8c31059d6f1d9e12068a3f13bd3465db2b5a7f27f98a056f0f5bed39985d0921989b132e9638472405a2b1ba757e22df3276ca9b527fa"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x85a0516088f78d837352dcf12547ee3c598dda398e78a9f4d95acfbef19f5e19"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np326",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8cfb3cab3103d0431ed161ebec0a29ffce5b82e8fa5b00520169a8be360b9054",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xbcdb535ac430393001427eab3b9ff8330ae1c997c2631196da62db6c3c5a5a08",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x146",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xcbc",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xacef7ee8af09f4b94fc20d862eb2426993ad2e2807e22be468143ea8cb585d0f",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x31",
- "validatorIndex": "0x5",
- "address": "0x6a632187a3abf9bebb66d43368fccd612f631cbc",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x0f669bc7780e2e5719f9c05872a112f6511e7f189a8649cda5d8dda88d6b8ac3"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np327",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xacef7ee8af09f4b94fc20d862eb2426993ad2e2807e22be468143ea8cb585d0f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf54751e3cc778e70000823cc9800dbecaf86c60afe48ddd4f942c9c26f606d6f",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x147",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xcc6",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x61642769719bcfbed733fd6b7c2cd51038dc1404f0e77f50c330ac8c9629b8c4",
- "transactions": [
- "0xf88382010608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0af7d5214c1fa8aff20cfd3e89d0db2ff361cf5c23dae0823c6719d9bd3c3a996a0581c85fafb49fa0753c67f65e6ad04871fab4a72a9bf5d9ab3bd7aa33b230225"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa7816288f9712fcab6a2b6fbd0b941b8f48c2acb635580ed80c27bed7e840a57"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np328",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x61642769719bcfbed733fd6b7c2cd51038dc1404f0e77f50c330ac8c9629b8c4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xaf3502d0a6862e2cde40bbf084cba5e582a0ba3b3bc0beec6791a712c3d171e3",
- "receiptsRoot": "0x52236ae99e7647366a3e31ba24153828332656ea5d242e422ffca1dbf576701d",
- "logsBloom": "0x00000000000000004000000000000000000000001010000000000000000008000040000000000000000000000000000000020000200000000080000000000000000000200000000000000021000000000000400000000020000000000000000000000000000080000200000102000000000000000000000000000002000000000000000000000000000000000000000800000000000000000000000088000000800000000000000000000000000000000000020200004000000004000000000000000000002000000000000000000000020000002000080000000000000000000000402000000000000000000000000000000000000000000000000000000008",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x148",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xcd0",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x3acbeee2cb8786a166d6caf512afc82b72ed1ccbfbe39dd32dd53f842046866a",
- "transactions": [
- "0xf87a8201070883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a015a81314b3c04efc725ff998badcf9278fb668561e5f9cdd42336845be60ec6ea04c593cfd5526eaf42203a3e6b5020e612ddd4053fa3123f51ae02bf8dde98eb3"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xda5168c8c83ac67dfc2772af49d689f11974e960dee4c4351bac637db1a39e82"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np329",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x3acbeee2cb8786a166d6caf512afc82b72ed1ccbfbe39dd32dd53f842046866a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2a4691469da94625b4626e0a10273a2854e342a71b0711acebc46c8553eb8f0e",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x149",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xcda",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x1c012e1db133493333b09aff51ca8a110b148221aaf1f28c3d21b41382b0d058",
- "transactions": [
- "0xf865820108088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0f9f0dcc20f1b62b8c567ac92dc1fbf50908f8bcd504fff3a342de336052e66bea00d38043fb1b141dc3fa2b97eaf09bc490be62e1cf7c40b670503ce0fbd8f6dce"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x3f720ecec02446f1af948de4eb0f54775562f2d615726375c377114515ac545b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np330",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1c012e1db133493333b09aff51ca8a110b148221aaf1f28c3d21b41382b0d058",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x44248f33cb76fe58bf53afa7a07e7b3d1d1efb1dcde8379ba1719d987a4cb83e",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x14a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xce4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x4e325a3f368a7235db02d7e604501ef2b416494a13136c23026e9dd3a3f38547",
- "transactions": [
- "0xf86882010908825208941f5746736c7741ae3e8fa0c6e947cade81559a8601808718e5bb3abd109fa0edd3402a6c7a96114e4c8520d7bf3f06c00d9f24ee08de4c8afdbf05b4487b7da068cd4cf2242a8df916b3594055ee05551b77021bbea9b9eb9740f9a8e6466d80"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x273830a0087f6cef0fdb42179aa1c6c8c19f7bc83c3dc7aa1a56e4e05ca473ea"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np331",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x4e325a3f368a7235db02d7e604501ef2b416494a13136c23026e9dd3a3f38547",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x30f652c6dbb2b9b0f66b7031f6fd0a8c163866de7b7f33c3e8a0d1f9b37a6d20",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x14b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xcee",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb1a056033a59f165c7df49320a7a67b1fdf266039f12ca8cd2ca8b904425dadf",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x32",
- "validatorIndex": "0x5",
- "address": "0x984c16459ded76438d98ce9b608f175c28a910a0",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7044f700543fd542e87e7cdb94f0126b0f6ad9488d0874a8ac903a72bade34e9"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np332",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb1a056033a59f165c7df49320a7a67b1fdf266039f12ca8cd2ca8b904425dadf",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x7ef2bb0e7090f0d465ded8b1064d0aafb5da43bc603b3ae8e39b678616f22f04",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x14c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xcf8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x961da5e8745e0e4ae8287d73382c5b0d651110a7c7f900abf5f04b3e114b4776",
- "transactions": [
- "0xf88382010a08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0b67083c09c180ffba5ddc095999eaacd6d2cec077395c58d882c7a0706954896a02aaa853bfdbcdac9eefd90ff627107b5ca67b0c3969f3a770a4545a3b9d01514"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf63a7ff76bb9713bea8d47831a1510d2c8971accd22a403d5bbfaaa3dc310616"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np333",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x961da5e8745e0e4ae8287d73382c5b0d651110a7c7f900abf5f04b3e114b4776",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xff5f5d4ea4c9cb2944bea27f92a309b59ac66d45d231125258186ad3fcd58b61",
- "receiptsRoot": "0xd5a4c662356c2fb912cf7df7798aabe0c8598dd3918c2c7e05db6619b76d855e",
- "logsBloom": "0x00000000044004000000000000000100000000000000001000000000800000000000000000000000000000001000000000000002000101000002000000000000080000100000000000000000000000000000000000000200000000000000000010000000000000000000000100000800800000000000000000004000000800000000020000001000000002000000000000000000000000000000000000000000000000000000000000000100200000000000000000000000000200200080000000000000000000000000000002000000200000000080000000000008000000000000000000400000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x14d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xd02",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa966ce90648fa40427896d7206976e783f96979437cbb3aed9cc9b050675763c",
- "transactions": [
- "0xf87a82010b0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0e65e3fb877a256ecdcf4de6dc51df2bd755e14acad6b24c68e7168dbdfcf77b5a017ffeb5a31596ad459195610c5c5e3f348468dab79d930d49cddc0601cd5a965"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa68dbd9898dd1589501ca3220784c44d41852ad997a270e215539d461ec090f8"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np334",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa966ce90648fa40427896d7206976e783f96979437cbb3aed9cc9b050675763c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc8b1d4c2863741606d2cb870ed951e27495def1661f5192eef61cea97b8cd79d",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x14e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xd0c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x266c92734d3a74137a12e4f6af6fe2cc401992b473d8af9121edbf3a78e4cf8a",
- "transactions": [
- "0xf86582010c088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa041e92995e25443285655d748126496dbe98874a5cee8a1f0e58ea9f6a650f862a07feb73712a079a889322fcb61999780dab187d69eef21757af3eb0c9825f64c1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x59e501ae3ba9e0c3adafdf0f696d2e6a358e1bec43cbe9b0258c2335dd8d764f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np335",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x266c92734d3a74137a12e4f6af6fe2cc401992b473d8af9121edbf3a78e4cf8a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x53e02e88b716b3d80f9cac4ea6e30497d8a5e0f2dc4df131a20a9ffb78fe8cda",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x14f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xd16",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xebbfb2910659e643ff415b200900100e8e116b6d84a3e8e17b87d3e93dcdf3be",
- "transactions": [
- "0x02f86b870c72dd9d5e883e82010d0108825208949ae62b6d840756c238b5ce936b910bb99d5650470180c080a0025cc19f12be3ff2a51342412dc152953e8e8b61c9c3858c9d476cc214be4e30a0193960b0d01b790ef99b9a39b7475d18e83499f1635fc0a3868fc67c4da5b2c3"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4f19cff0003bdc03c2fee20db950f0efb323be170f0b09c491a20abcf26ecf43"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np336",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xebbfb2910659e643ff415b200900100e8e116b6d84a3e8e17b87d3e93dcdf3be",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6be6c01d240a951a6adb298d9cb4e7c9e5e8960540de958b4b458fcfa489bf36",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x150",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xd20",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x1f86807324e8cce9f4294076c96c4b2007acb0d2aba5c9ad2695e68aad468f8c",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x33",
- "validatorIndex": "0x5",
- "address": "0x2847213288f0988543a76512fab09684131809d9",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x52b1b89795a8fabd3c8594bd571b44fd72279979aaa1d49ea7105c787f8f5fa6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np337",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1f86807324e8cce9f4294076c96c4b2007acb0d2aba5c9ad2695e68aad468f8c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd2cd6e558f19ab03db7ee9677a850741b4f1f763c3de94539a16d54c27f6cac0",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x151",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xd2a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x7cec5c4064e153c1c3adeda621a8764ebd7a693aa70891ef0bc7b6f95e64ae7b",
- "transactions": [
- "0xf88382010e08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a057a97e1fae6dc03c4a29ad01b4d2ebea7069f1bef844b28b92875346d4454c46a01f5821fcf724aa6b0a3b082a6462e5f191a3c5659ba1b66b82cd42cf3175ba59"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7c1416bd4838b93bc87990c9dcca108675bafab950dd0faf111d9eddc4e54327"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np338",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x7cec5c4064e153c1c3adeda621a8764ebd7a693aa70891ef0bc7b6f95e64ae7b",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe1531cb938cfb7009f343d7ce9de03c63fe99878807b1ec8954b3a29a2d630f1",
- "receiptsRoot": "0xa8c44170e431c7d7adf58109a7dbb58eeb38a19244c8a866311ef3a45fd13dfd",
- "logsBloom": "0x00000000000000000000000000002000000000000000000000000000000080000000002000000000000000000000000000000000008000010000000000000000000000000000000000000000000000000800000040000420000400000000000000000000000000000000000000000000000000000000004000000000000000000200000018000000040000008400000000000000000000000000000001000000201000000010000001000400000000000000000000000000000002002000000000000400000000000000000000000000000000001000000000000000000000000000000000000080000000000004100000101000001000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x152",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xd34",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x11bd9e6153d072615b7e129ce56e720c40c048dd37afb5fdbfff09f994ae4a13",
- "transactions": [
- "0xf87a82010f0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0de79b818723588fa8952e0d007ef1e1db2240b355f4f0f69f2af9df6b3408407a00962c062cd7fc4b8bf627bab2c0a00349d7b1bfc6f7875ca3a18967ad30ff219"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xef87a35bb6e56e7d5a1f804c63c978bbd1c1516c4eb70edad2b8143169262c9f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np339",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x11bd9e6153d072615b7e129ce56e720c40c048dd37afb5fdbfff09f994ae4a13",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd35f874d00597dfb19f0363bbab78f3356e12ec8b4ee89f2883285139d7a3c29",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x153",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xd3e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf7122487788d84678b120512a25b1393417a66e19db5b507d471dd17628a84ea",
- "transactions": [
- "0xf865820110088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa083a20e0b736688ba1f10440def989495ff253a281368f0ca21154d327c0468b8a0119312bdfeff761612ef529e4066bd28b4ed46895e5b67593fb0a3a897d3aa16"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe978f25d16f468c0a0b585994d1e912837f55e1cd8849e140f484a2702385ef2"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np340",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf7122487788d84678b120512a25b1393417a66e19db5b507d471dd17628a84ea",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xfa5b72ef0354b0b53f973b5285234c441e1bbf86d26374dd3856b36627d5caa3",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x154",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xd48",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb1d88e8bd186bb264de8def507f6a5876ec6f3af27be936763dfd39213ab07e8",
- "transactions": [
- "0xf8688201110882520894b55a3d332d267493105927b892545d2cd4c83bd601808718e5bb3abd10a0a073cc84153b8891468325ac12743faf7e373b78dbf8b9f856cb2622c7b4fd10e1a0388714fe9d2f85a88b962e213cbe1fa3c4a9823cea051cf91c607ecbd90093d8"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc3e85e9260b6fad139e3c42587cc2df7a9da07fadaacaf2381ca0d4a0c91c819"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np341",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb1d88e8bd186bb264de8def507f6a5876ec6f3af27be936763dfd39213ab07e8",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xac6b9759a537d44a1629532184219d1f658f68745491b27e81c87361e72ad602",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x155",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xd52",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x70dad5a0db225381e8f841db9d8adf9a350051128cc22c0e5a00ad990c592b0d",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x34",
- "validatorIndex": "0x5",
- "address": "0x1037044fabf0421617c47c74681d7cc9c59f136c",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xbd2647c989abfd1d340fd05add92800064ad742cd82be8c2ec5cc7df20eb0351"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np342",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x70dad5a0db225381e8f841db9d8adf9a350051128cc22c0e5a00ad990c592b0d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe579eb979cbfd580c19ef8583f73a0fda902ee0895903a767d544ade95c50baa",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x156",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xd5c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb9b47ee8f7c38e7e1f69148756182d3da3a7d0c123948d2c56e5268357fced99",
- "transactions": [
- "0xf88382011208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0874d69f306b86e76465f6f0ad314cadee41f0f0d1844d35408201c3b2f690de0a0698f29877cb7dec8ee91a42a74f0f5270cbb391836fdaeda1e0876d3c16177b9"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x99ac5ad7b62dd843abca85e485a6d4331e006ef9d391b0e89fb2eeccef1d29a2"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np343",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb9b47ee8f7c38e7e1f69148756182d3da3a7d0c123948d2c56e5268357fced99",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf9106c3c4fcc77588a382ba0c2f605f6e07fcc418edac1cdd7de3b0e70f81b9f",
- "receiptsRoot": "0x07a001dcc7eec5d1e8aa3508d61fcf5d511b4f9b766801b63319aa423ef08c3f",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000010000800000000000000000000840000004000000000080000010000000000000000000000000000000000000000000000020000000000000000008000010000000000000000000000000000000100000000108000000000000210000000000100000000000000000000002000000408000000000030000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200008800008000008000000000000000400000100000000000000008000000000000000000000080000000000000000000001010000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x157",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xd66",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xde78022135caa19aa76718718d5de70d69e3f2488ff6769aee87c1d765237214",
- "transactions": [
- "0xf87a8201130883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa084f91b21758f4c28d386fa99e8b7e126d27a1f9e293e5df2683057e09a9c6a2fa051772044b702ac375f615dc0d6aaa8c1d38c3ac2a830539d2ab62935c5132921"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x02a4349c3ee7403fe2f23cad9cf2fb6933b1ae37e34c9d414dc4f64516ea9f97"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np344",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xde78022135caa19aa76718718d5de70d69e3f2488ff6769aee87c1d765237214",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x19268b0f7992afe0cf1f3c0ac73b371ed7d9e79dddf0435b72bc45e1682a9c74",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x158",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xd70",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x8123c0650f836341cace6e65f0826a678974333748bc91a93d569224d63f832a",
- "transactions": [
- "0xf865820114088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0904e2a23972254826c8f3f5efa2d39122f980811cb9dd3e5d2869618d458856aa00fd104e760443aa8abcbdfbf2263d45a32a7aec32e59548b3e73575bc21f0243"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x627b41fdbdf4a95381da5e5186123bf808c119b849dfdd3f515fa8d54c19c771"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np345",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8123c0650f836341cace6e65f0826a678974333748bc91a93d569224d63f832a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3ef70ee0614b3ae112271af4be70033c61a89f337aa527b8657df19422d94913",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x159",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xd7a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xc74bc2976b5c5cbcfd64757534333c98d56bcac3109fc4504e3c324801f27530",
- "transactions": [
- "0x02f86b870c72dd9d5e883e820115010882520894b68176634dde4d9402ecb148265db047d17cb4ab0180c080a09f3175e9aa2fe2332600b71de0b0977c7c60ccbeee66ea360226326817f2d59ba06a870e0876002f789b3203f4a33d5e621ac67051704e1f2260b80d816260b3e6"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc087b16d7caa58e1361a7b158159469975f55582a4ef760465703a40123226d7"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np346",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xc74bc2976b5c5cbcfd64757534333c98d56bcac3109fc4504e3c324801f27530",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xbbec06f293095304adb3f03ba055fd08a691c89d5de1ade4c1ed31b9c6672989",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x15a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xd84",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x60a82197fb6b3b7d9a4912ec6ac783460863e449f48c28d68a45b4d4bf0a99f4",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x35",
- "validatorIndex": "0x5",
- "address": "0x8cf42eb93b1426f22a30bd22539503bdf838830c",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf7a477c0c27d4890e3fb56eb2dc0386e7409d1c59cab6c7f22b84de45b4c6867"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np347",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x60a82197fb6b3b7d9a4912ec6ac783460863e449f48c28d68a45b4d4bf0a99f4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x169c28a15311ed314bc0a4529aaddacc79d5fd6becdaaae69276079408d57eda",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x15b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xd8e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xefbb190d45953f5e6292e14fc50b51539bca514890f94eda3e3ba2553417303a",
- "transactions": [
- "0xf88382011608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a065a20271c4b6acc45c7e172465adcdc218b164c0936999de9bdd37c4a4c63fd0a003792daae8ab2be81df0df962c26697830d30af560c8a85a0fba05e5cfc82d66"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x1cb440b7d88e98ceb953bc46b003fde2150860be05e11b9a5abae2c814a71571"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np348",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xefbb190d45953f5e6292e14fc50b51539bca514890f94eda3e3ba2553417303a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x704fde0fccaf5957d60018e958bfb8cc7bb7e77eed37cee3bdcdcca280b3b1fb",
- "receiptsRoot": "0x0016ae7d40181cb711af89f17dc40dfb53384c5ef535847ae4982b1d58bfadd1",
- "logsBloom": "0x00000000000000000000000004800000000000000000000000000000000200000000000000000000000000008000000020000000000200000000000000000000000000000000000000000000000000000000000000004000000000000008000000000008010000000000100008000000000020000000000400000080000000080000000000040000000080000000000002000000000000000000000000001000000000200000000000800100000000000000000040000008000000000000000000000040200000000000000000000000000000000000000000000000020000000000200000020000001008000001000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x15c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xd98",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xac7efb8f8fa8949755e520c30b52d9c292eb7e46eb8cac907f1267f72de81237",
- "transactions": [
- "0xf87a8201170883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0a7fe70291d9f18d3daffb9c6845116569c9be21f8b04c47235999ad35c20a079a03ad45b41a4993ea744bb28012bae4998ad6e97da464162d4ce51810e442e3ccc"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x72613e3e30445e37af38976f6bb3e3bf7debbcf70156eb37c5ac4e41834f9dd2"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np349",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xac7efb8f8fa8949755e520c30b52d9c292eb7e46eb8cac907f1267f72de81237",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x898ac18f3ec544e0908e3a1c5434515aa421b796a41501b0474375f49fba30c8",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x15d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xda2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x498a0d50858ecbfd2fe317843b04c02a00dfa8c2ee6a0e3641947439f0eb7dba",
- "transactions": [
- "0xf865820118088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0027208b707b49c8686502030a1029e738d91a7c0bf9dff86bb90ccda2e5fc158a04b1d06ac6269fc336d1e6d0bac45e82b7d47ca4c271c7fed3bd1c6599b4bd0c6"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe69e7568b9e70ee7e71ebad9548fc8afad5ff4435df5d55624b39df9e8826c91"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np350",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x498a0d50858ecbfd2fe317843b04c02a00dfa8c2ee6a0e3641947439f0eb7dba",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3a29d14904f05f088f4aede9ab588a53f6a54db4f43cd77f0227445a0d7c8386",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x15e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xdac",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xac94cbd2aa423a9fc3dd35e9918a288b31a6b6127f829ef08b3d106212d5c005",
- "transactions": [
- "0xf8688201190882520894dfe052578c96df94fa617102199e66110181ed2c01808718e5bb3abd109fa0020ee6a1ada31c18eac485e0281a56fc6d8c4152213d0629e6d8dd325adb60b1a00f72e01c463b98817219db62e689416c510866450efc878a6035e9346a70795f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc3f1682f65ee45ce7019ee7059d65f8f1b0c0a8f68f94383410f7e6f46f26577"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np351",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xac94cbd2aa423a9fc3dd35e9918a288b31a6b6127f829ef08b3d106212d5c005",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x693ec0330efa3e07b25a9a758d30a43389876e03846885dda5cdb009ff0e2674",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x15f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xdb6",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x5c72e42631163c4ff7bb5a0e0051317b4b432609769052e2efe6043155ead48c",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x36",
- "validatorIndex": "0x5",
- "address": "0x6b2884fef44bd4288621a2cda9f88ca07b480861",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x93ee1e4480ed7935097467737e54c595a2a6424cf8eaed5eacc2bf23ce368192"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np352",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5c72e42631163c4ff7bb5a0e0051317b4b432609769052e2efe6043155ead48c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc25a9e84540d654be4abb3e8581cd2cc7cf97e54895e7a62d08eb78431d3f244",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x160",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xdc0",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf3760efebd2ee1fbbda6bfff5aded8bb4ac38928857a4b22edab12bda293a2d7",
- "transactions": [
- "0xf88382011a08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a00df7ffb1778e645f4fc3b0e2236b34c038c43aacbbc43abc8d710c3fc33901e5a00d7d3d9cbc790b2e206b30639a4b55c1d2f3c2ea18c058a5085f16d72b50455b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb07f8855348b496166d3906437b8b76fdf7918f2e87858d8a78b1deece6e2558"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np353",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf3760efebd2ee1fbbda6bfff5aded8bb4ac38928857a4b22edab12bda293a2d7",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x911acb703f25c08267716b25fc43b19bf4ce43a053393e6f1dce78c1cba8c485",
- "receiptsRoot": "0x758b6a000deb6b7275c48ea96b2cbf580372445f0bc5b285eb764ed1800e8747",
- "logsBloom": "0x00000000000005001000000000000000000000000000908000000200420000000000020000000000000000004000800010000000000000000200000000000000004000000002000000000000000080000000000000000000040000000000000000000000100400000000400000000000000000000000010000000400000000000000010000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000200000000000000000000000020000820000800000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x161",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xdca",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x9584dd2f0e20e3b4c274103aa168c495888b69ef8de7fe40cf413b6964c8393d",
- "transactions": [
- "0xf87a82011b0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0c6d3e03aa8b0625a3225e077addb3cf47c9d061148da25021b22a0746083cc11a06176a93c704e6c5088e9d18cbaca7eab1de348207c2ba50083934c4e215a079d"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xec60e51de32061c531b80d2c515bfa8f81600b9b50fc02beaf4dc01dd6e0c9ca"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np354",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x9584dd2f0e20e3b4c274103aa168c495888b69ef8de7fe40cf413b6964c8393d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xaca595525f5aa4f17314e44a3fdc0dae0f4037a1ee0a12bfb1bec7b9219f8d6c",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x162",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xdd4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x55a29172dc5a0a9d27b1778bec1c1591c0c8ec114d322fe60f5a39258e1783a0",
- "transactions": [
- "0xf86582011c088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0ad6f8d4d86d80157b67311edc959413ac3f525a5ec6334cc826125dfb1908b05a02e91a1d46e2df7c7eb4dc92224252298c66dbbf321fbb6c827a6e2d348277298"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x2fc9f34b3ed6b3cabd7b2b65b4a21381ad4419670eed745007f9efa8dd365ef1"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np355",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x55a29172dc5a0a9d27b1778bec1c1591c0c8ec114d322fe60f5a39258e1783a0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa307681299c7c385c512cbf83195ee62d35d29487665eb57cf2698c1b3e82066",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x163",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xdde",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb99cdd27bfb2535b0247fef5fe8097fc4e60f2a1c54a9adb3243192dafe1e657",
- "transactions": [
- "0x02f86b870c72dd9d5e883e82011d01088252089433fc6e8ad066231eb5527d1a39214c1eb390985d0180c001a0167190e2e0fed95ab5c7265a53f25a92d659e1d46eb9ecbac193e7151b82ec1ca0269353e9c5ef331135563e2983279669220687652e7f231725303ccf7d2a8ebd"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf4af3b701f9b088d23f93bb6d5868370ed1cdcb19532ddd164ed3f411f3e5a95"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np356",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb99cdd27bfb2535b0247fef5fe8097fc4e60f2a1c54a9adb3243192dafe1e657",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb36926502e2ee904451fa5970a453aebe89f5bc25cd8c1dcae196810968617c1",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x164",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xde8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xbdd33f47e688a8c88c0bb8514d3eff12f6f1ca570d3ae31aab000689d8dd4af3",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x37",
- "validatorIndex": "0x5",
- "address": "0xf6152f2ad8a93dc0f8f825f2a8d162d6da46e81f",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x8272e509366a028b8d6bbae2a411eb3818b5be7dac69104a4e72317e55a9e697"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np357",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xbdd33f47e688a8c88c0bb8514d3eff12f6f1ca570d3ae31aab000689d8dd4af3",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x67558b87a732daed74e1b9ed7aef6326aabe984df466494d2fc59d9ea951c6c6",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x165",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xdf2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x60fbbf44b7687b97e348c42a24637f027125b00a39e5e63995405da84de95ce0",
- "transactions": [
- "0xf88382011e08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0b20886ab8d36222d79bf9dad933333062a51e71dbd6de720f872874edb727276a05f68ff1bcbb8019f43e4e37a481075cc5565512eb56d34ccb707e8aec00a4204"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa194d76f417dafe27d02a6044a913c0b494fe893840b5b745386ae6078a44e9c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np358",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x60fbbf44b7687b97e348c42a24637f027125b00a39e5e63995405da84de95ce0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x15bdc9a6fcc0d4d133bc86adbda378e2110d51fc60304207240f24f60d4fc99d",
- "receiptsRoot": "0xf9f06ad2e1bbf826b5cbeabfd01d508c4d7bc0781b946c5afc105a2e20d9155a",
- "logsBloom": "0x0020000200000000000004000000000000000000010000001000000000000400000000000000008000000000000400000000a820000000000000000004000001001000000800000000000000000000000000000000000000100020000002000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000040000000000000000000002000000000000000000000000008000000000000000000000000000000000000000000004000000000000000000000000000000000140000000000000800000000000010000000000000000000000004000000000010000000000004401000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x166",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xdfc",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb32a72eff6c1fed26a63381d9de7254e9a85e9c459fad22c037e8a11eb95d04f",
- "transactions": [
- "0xf87a82011f0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0c35e2924126964cdf4a8847f4cb4a870f24a4654de527a3dc9fad248d338aab6a00d9292c8e92050bebef84a83b3deacddf95a33015a3d284b578cb0f1621c5a70"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa255e59e9a27c16430219b18984594fc1edaf88fe47dd427911020fbc0d92507"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np359",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb32a72eff6c1fed26a63381d9de7254e9a85e9c459fad22c037e8a11eb95d04f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x21d7cc2931eed33ddb03977b7d99c97ac378c41ed2ac25331478cd1fbd583e7a",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x167",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xe06",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x31483924290768786929b9836507966e24a775f86f3724200851b2eaa262ac36",
- "transactions": [
- "0xf865820120088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0aab9710502eb45f06f5470674b88b22c30fdc865a22c86a7095f355629fb6d11a01d905abe10e39ed037ad29a46a81d0af6d52d9de2d7bef20e7b02db8c1cf13a0"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7996946b8891ebd0623c7887dd09f50a939f6f29dea4ca3c3630f50ec3c575cb"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np360",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x31483924290768786929b9836507966e24a775f86f3724200851b2eaa262ac36",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x128ac2d4c23be8773c460ed383defee0e767a4fe0a55e9f600a60e0fe051735b",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x168",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xe10",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xdfabceebb90036f92ea3e859b9fcadd8642f00dcdf45278c09d93fb56d320b04",
- "transactions": [
- "0xf8688201210882520894662fb906c0fb671022f9914d6bba12250ea6adfb01808718e5bb3abd10a0a0d3a858be3712102b61ec73c8317d1e557043f308869f4a04e3a4578e2d9aa7e7a0202a5f044cc84da719ec69b7985345b2ef82cf6b0357976e99e46b38c77fe613"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb04cbab069405f18839e6c6cf85cc19beeb9ee98c159510fcb67cb84652b7db9"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np361",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xdfabceebb90036f92ea3e859b9fcadd8642f00dcdf45278c09d93fb56d320b04",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa8f8fd676089911db9824cafe64222a854d4767d0cc5fded3fa1643f735afd80",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x169",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xe1a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa7dab2cd20b59a5961ff34f49d421a579c939d6898b084ae4db8971604df1380",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x38",
- "validatorIndex": "0x5",
- "address": "0x8fa24283a8c1cc8a0f76ac69362139a173592567",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x6f241a5e530d1e261ef0f5800d7ff252c33ce148865926e6231d4718f0b9eded"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np362",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa7dab2cd20b59a5961ff34f49d421a579c939d6898b084ae4db8971604df1380",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb19cdea25a29e5ba5bf0a69180560c2bcf35823b81d82d8b97499ad1cc22873b",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x16a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xe24",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x0f9c87bb2b9d07ca411420399c22658ea7be36c5bd1fbbf1c759592959cc3a94",
- "transactions": [
- "0xf88382012208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa034e8481ee12e75836d1e4cc88aef813a6bc8247b73aeb7a466a1ce95bca6e5fea07585402e69f5856a5724a9e83a9bf9cf77bc92cc619489f9903f09b8c3530f24"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xfcfa9f1759f8db6a7e452af747a972cf3b1b493a216dbd32db21f7c2ce279cce"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np363",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x0f9c87bb2b9d07ca411420399c22658ea7be36c5bd1fbbf1c759592959cc3a94",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x09f1a8d40ad941a3c47fd34c32682a0058f79387d467a7ebb5d957455aab9fb6",
- "receiptsRoot": "0xde87ab5715c2af5f977bcf679cd4e771796d49365c3111487aba12fdb69483a2",
- "logsBloom": "0x00800000000000000000000040000000000000000000000000000000000000000000000000080000000000000000000000000000008000000000000000000000000000002000000000000000000000000001020000000000000000000104000004000000000000000000000000000000000000000000800001000000040000000000000002000000000000000001000000000008400000000000000100000000000000000000001000000000000000040000000000000000010200000000000000000000000000080000000000000000000020002000000020000100400000000000000000000040000000000000100000010000000000000001000040000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x16b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xe2e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xcdbbd78682fb1c3e75c9821acce03f6fd048226147e7041d84952c6aa3c18b5e",
- "transactions": [
- "0xf87a8201230883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0317931eb522b3488621079d412251962cc5a02794939e3a3b0c94c92df0b4da5a001348209aa47bc1a55590243d5168b2beb06c929b46104d144ba526070b2e5ea"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xdf880227742710ac4f31c0466a6da7c56ec54caccfdb8f58e5d3f72e40e800f3"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np364",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xcdbbd78682fb1c3e75c9821acce03f6fd048226147e7041d84952c6aa3c18b5e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x96f076c6c4d61d649b8f9c4290ff81fad55bfebe6e171f2d2bedb4b941977873",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x16c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xe38",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xab15226c228033c1118398e475d860a1ea7534e4d620ae9ceb2893fa3a73ff7a",
- "transactions": [
- "0xf865820124088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0886d94140ef16f0079167a92ea5577d300a4e87982588af41676d8d9a7a7f043a0388a734d4f7a8eb510a5e7aba3141505773bd329a70ff438be40d7b378fdafa6"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xadfe28a0f8afc89c371dc7b724c78c2e3677904d03580c7141d32ba32f0ed46f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np365",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xab15226c228033c1118398e475d860a1ea7534e4d620ae9ceb2893fa3a73ff7a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x208cc1a739ecf1c8aed87a70e4f580b28d06f7dba19ef679a4b809870c0e66a4",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x16d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xe42",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe3c3b2311857f76f1031d8384102288970bf25ab710e5e8ca3e7fee19ea3fcde",
- "transactions": [
- "0x02f86b870c72dd9d5e883e820125010882520894f1fc98c0060f0d12ae263986be65770e2ae42eae0180c080a06563737b6bfddfb8bc5ec084651a8e51e3b95fe6ed4361065c988acaf764f210a00a96a1747559028cd02304adb52867678419ebef0f66012733fea03ee4eae43b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb264d19d2daf7d5fcf8d2214eba0aacf72cabbc7a2617219e535242258d43a31"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np366",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe3c3b2311857f76f1031d8384102288970bf25ab710e5e8ca3e7fee19ea3fcde",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf4a7f460684eacde84218991911d63333e89a5a8fe5293e43b2b283209bb7297",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x16e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xe4c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf1f80c035c0860545aeb848923615c5bb8cbd15305ddc6a87b9d9a4d509a8d5c",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x39",
- "validatorIndex": "0x5",
- "address": "0x19041ad672875015bc4041c24b581eafc0869aab",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf2207420648dccc4f01992831e219c717076ff3c74fb88a96676bbcfe1e63f38"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np367",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf1f80c035c0860545aeb848923615c5bb8cbd15305ddc6a87b9d9a4d509a8d5c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x44f6e5c8fd3452b71ade752a742ca9f61626aeeaa20e89d47fe414d1df414745",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x16f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xe56",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xaa0d0fadd5774766ac1a78447bd5ef9f5a816c9068d28097c78d02737ce7f05a",
- "transactions": [
- "0xf88382012608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a00d5ce478373461565e41764365499cc4a43519643829503796c5453e1bc7ff0ea03ef00a5fe608838a9156d394317734b358ac026af08b33c2aabfea8e9d485dfa"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x41e8fae73b31870db8546eea6e11b792e0c9daf74d2fbb6471f4f6c6aaead362"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np368",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xaa0d0fadd5774766ac1a78447bd5ef9f5a816c9068d28097c78d02737ce7f05a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x7fd199408596db163d237e6d25f64b90ac2bc04158524e8baac5d55f881bb52b",
- "receiptsRoot": "0x8d3f058248d263db5e6d6d78ddf91fd2ec0183f2bdf3e9e142af87a53388e526",
- "logsBloom": "0x00000000000000000000000000000100000200008000000000000000000000000000400000000000000000000000000000000000010008000000000000000000000020000600000000000020000002000010000000000000000000000000000000000000080000000020200000000000000000000000000000000001000000000000000000800000002000000800000000000000010000000000000000000000000000000000000000000000004000000000008000000000000000000000000000000000040000000000000000000000200000000000000000000000401000000009800000000010000000000000000000000000000000000000808000000800",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x170",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xe60",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x4b263e57c931fa090da8bc6890c9d6fc2ad2dd5a66bb3a5563cc477735893a96",
- "transactions": [
- "0xf87a8201270883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a008faafda0a060040eca56f846ecbd6a399914482c31359f1ec04c98cc476ce82a04d2b02adc2c947898fa00cbedb4532f471cb5eb92ee19a30697ddd0c713132e3"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4e7a5876c1ee2f1833267b5bd85ac35744a258cc3d7171a8a8cd5c87811078a2"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np369",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x4b263e57c931fa090da8bc6890c9d6fc2ad2dd5a66bb3a5563cc477735893a96",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2a2360860a67f9187f50f56201c50d2309c961a2b408072e7c3d069c8c1216cd",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x171",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xe6a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x0adc9e078ab6f0799b5cbc8e46e53a0d96d4fe4ba0b6ff75088445c304000226",
- "transactions": [
- "0xf865820128088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0da49c9575be5d906d247a5f4f0574e76d1edb1368dbdda1b4a5b58fba3fca82da00fa1c561fc766acefeeabf085384962f2599b3ca6b02996962095eed297df611"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x8d4a424d1a0ee910ccdfc38c7e7f421780c337232d061e3528e025d74b362315"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np370",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x0adc9e078ab6f0799b5cbc8e46e53a0d96d4fe4ba0b6ff75088445c304000226",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x971bbdee0e408ff826563636c5eccce30540c1cba590880849a72ac21f74a4e4",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x172",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xe74",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x1636ca42281a5e77303d2d1095d71b2c59f0b175c98a3adb9630cd6463d2be04",
- "transactions": [
- "0xf8688201290882520894a92bb60b61e305ddd888015189d6591b0eab023301808718e5bb3abd109fa0626bd8978288bcf1d7719926fba91597d6aa8ead945c89044693d780523a05dda0074494ccf5362aa73db798940296b77b80a7ec6037f5ed2c946094b9df8a2347"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xfa65829d54aba84896370599f041413d50f1acdc8a178211b2960827c1f85cbf"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np371",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1636ca42281a5e77303d2d1095d71b2c59f0b175c98a3adb9630cd6463d2be04",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2a239ffb7957e73c3eebeb33b01444599ddcd5861f1dfb4bbe31584061f11389",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x173",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xe7e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xbf62c63fdcd8b0648bfec616e9270243233b47c513a9519932cb82d70ed5c2be",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x3a",
- "validatorIndex": "0x5",
- "address": "0x2bb3295506aa5a21b58f1fd40f3b0f16d6d06bbc",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xda5dfc12da14eafad2ac2a1456c241c4683c6e7e40a7c3569bc618cfc9d6dca3"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np372",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xbf62c63fdcd8b0648bfec616e9270243233b47c513a9519932cb82d70ed5c2be",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xadbba859a71886f49ccd216fbc6c51a42a7a6eff927970b298d4e0f6e2a9597d",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x174",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xe88",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x349a0919fb81864d824dd7345c583a9fb5c99ef0bd9c549be68b10e72e7c8c2a",
- "transactions": [
- "0xf88382012a08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa085c885407da43158c33afe4c9d10a846d4cf5bb820c70f019ff8b6ee9dfb027ba077c0e90a4a029bea55eadf3b0d39261b6204a5c1b8e5e80838ebeef5c9fd456c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x16243e7995312ffa3983c5858c6560b2abc637c481746003b6c2b58c62e9a547"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np373",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x349a0919fb81864d824dd7345c583a9fb5c99ef0bd9c549be68b10e72e7c8c2a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe5a5661f0d0f149de13c6a68eadbb59e31cb30cf6e18629346fe80789b1f3fbc",
- "receiptsRoot": "0x97965a7b5cca18575c284022cd83e7efb8af6fcf19595c26001b159771ffb0ce",
- "logsBloom": "0x80000000000000000000000100000000000000000000000000000010000008100180000000000000200040000000000002000000000000000000000040000000000000000000000000000000000100000000000000000000000000400000020020000000000000000000000000000000000008000000000000000000000000000000000000002000000000000000000000000000000000048200000000000000000000000000000000000000000000000000000000000000000000000100000800000000000000000000000000000000000000000000000000000000440000000000000000121400000000000000000000040001000020000000000040000200",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x175",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xe92",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x90c6119a5ecf366ff337473422f9872fddac4e2b193a2e0a065cf7de60644992",
- "transactions": [
- "0xf87a82012b0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa03e8b18cd5d8c796e69f450a4c00e75d7e2d38cf9d25dd19e2033fbd56fbf4b84a0175ca19057500b32a52b668251a0aec6c8f3e1e92dec9c6741a13ffe3fb214cc"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb75f0189b31abbbd88cd32c47ed311c93ec429f1253ee715a1b00d1ca6a1e094"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np374",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x90c6119a5ecf366ff337473422f9872fddac4e2b193a2e0a065cf7de60644992",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x0a82334be200ef303c1c3b95b92b6f397df138b7e6eb23d830fb306996f1c79b",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x176",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xe9c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb023fb820fb7f3cc5b8c8ffec71401eae32858e7f5e69ffbdbdd71751bf1c23d",
- "transactions": [
- "0xf86582012c088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0519fcc6ae02e4901d4ccfcd2b0560f06bf13478b459310ddaae39f44b7ed1394a03b529b53be6c0451a4b644f5031746cb1db62cfbe43b962da26aff507d4293ef"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd087eb94d6347da9322e3904add7ff7dd0fd72b924b917a8e10dae208251b49d"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np375",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb023fb820fb7f3cc5b8c8ffec71401eae32858e7f5e69ffbdbdd71751bf1c23d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8e7778cdef2ec78802c7431cdd44768e4a4f6d9c6cc494ae02dc20c10bc6eead",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x177",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xea6",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xafe3e6ffafc8cd84d8aa5f81d7b622b3e18df979dbffb44601eb239bc22132bf",
- "transactions": [
- "0x02f86b870c72dd9d5e883e82012d010882520894469542b3ece7ae501372a11c673d7627294a85ca0180c080a09add65921c40226ee4a686b9fa70c7582eba8c033ccc9c27775c6bc33c9232fba021a6e73ccb2f16e540594b4acbba2c852a3e853742359fcbc772880879fe1197"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xbc17244b8519292d8fbb455f6253e57ecc16b5803bd58f62b0d94da7f8b2a1d6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np376",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xafe3e6ffafc8cd84d8aa5f81d7b622b3e18df979dbffb44601eb239bc22132bf",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x0b7ff239a80d7ca996fe534cf3d36898e55e3b4dbd6c130cc433dfb10d83c2dd",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x178",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xeb0",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x2b7573e48bca65c866e82401d2160b5bcaec5f8cd92fba6354d2fa8c50128e2c",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x3b",
- "validatorIndex": "0x5",
- "address": "0x23c86a8aded0ad81f8111bb07e6ec0ffb00ce5bf",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x3ff8b39a3c6de6646124497b27e8d4e657d103c72f2001bdd4c554208a0566e3"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np377",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x2b7573e48bca65c866e82401d2160b5bcaec5f8cd92fba6354d2fa8c50128e2c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x5cac010e2605b327b97a4ef6f78d4c65554588283336081d8ef497a3860fdbde",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x179",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xeba",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x77b6c58098c59ec84605e8f12c7fbe8a358d52adf77948577ce7396ae18aaac3",
- "transactions": [
- "0xf88382012e08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a015118995d271e570428c3c349d49390af0fd81d3217f90159fc25b9d0791d6efa018c1a844d5d3523ce37308f0cd2e46e8d6ef99a9eb750e7325ca2c67d59aaf85"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4d0f765d2b6a01f0c787bbb13b1360c1624704883e2fd420ea36037fa7e3a563"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np378",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x77b6c58098c59ec84605e8f12c7fbe8a358d52adf77948577ce7396ae18aaac3",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe908771dea594628e0f4d2b5d3354bbc6f9cfa04a97249657a74b792c3254b77",
- "receiptsRoot": "0x8dc461a171023c5f8e3f5d78e0842291fbe7b0a502495a334a1bc98337a8a1b4",
- "logsBloom": "0x00000004000000000000000000002000000000000000000000000100080000000000000020000000000020000000000000200100000000000000000010000000000000000000000008001000000000000000040200000000000000000000020000000000080000000000000000000000000000000000000100000000000000000000000000010000000000000000200000000400000000010000120000000010000008000000000000000000100000000000000000080000000200000000000000000800000000000400010000000000000000000000000000000000000000000004000000000000004000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x17a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xec4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x891853e3e9dd73b513556fa241d000aa63fecc5452cf39b3cc756619e9cea7b4",
- "transactions": [
- "0xf87a82012f0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0d0666f18210bb986b7239269bfbd56336376ed77bb97b56e15df7647c1f06fe3a0718dc6abdefe863e76f0c3c356364d456d34d399b20ed93b61ed93a77bccbe80"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf6f1dc891258163196785ce9516a14056cbe823b17eb9b90eeee7a299c1ce0e0"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np379",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x891853e3e9dd73b513556fa241d000aa63fecc5452cf39b3cc756619e9cea7b4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x197f321622808ee71925004345aaf99ac87a833c97ee852265b6d8be5c0656fe",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x17b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xece",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x8d3b2038418a6d5e44a3f5aef149d7d76a20f3ebd5aa3c9d4565ddaa94d00c07",
- "transactions": [
- "0xf865820130088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa02f7e9b19c96e60b8bd18eaadf71b049e0f204d42e826667e5b741041663c1963a01ff9a63ae688fc0c05047b819d1b8326c55f60b62f84658814bf35c63b3e5c65"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x1dbf19b70c0298507d20fb338cc167d9b07b8747351785047e1a736b42d999d1"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np380",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8d3b2038418a6d5e44a3f5aef149d7d76a20f3ebd5aa3c9d4565ddaa94d00c07",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x19c0d6f1bcdcb2c419bb69ed7f176bd58c4833c057faede354566c4e6d6e9f20",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x17c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xed8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa63604362866798edab2056c5ddadc63dc1490c6f13bf5dd54008e1e0f64ecd1",
- "transactions": [
- "0xf86882013108825208947f2dce06acdeea2633ff324e5cb502ee2a42d97901808718e5bb3abd109fa0fd195ea41804b21ffffdbca38fd49a9874371e51e81642917d001d201a943e24a0542bca46a2dc92fddb9abffcf2b3e78dc491d6e95040692e6d1446a6b487a42a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc3b71007b20abbe908fdb7ea11e3a3f0abff3b7c1ced865f82b07f100167de57"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np381",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa63604362866798edab2056c5ddadc63dc1490c6f13bf5dd54008e1e0f64ecd1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6c634927494436f7c4daaee4ea5c99813ec3066af379315b031f40fdf12c74d8",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x17d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xee2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x2187bb0b54e92e3bc6f0da1665631a818ac120ad68aa9674277d542f1e542f44",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x3c",
- "validatorIndex": "0x5",
- "address": "0x96a1cabb97e1434a6e23e684dd4572e044c243ea",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x3f45edc424499d0d4bbc0fd5837d1790cb41c08f0269273fdf66d682429c25cc"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np382",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x2187bb0b54e92e3bc6f0da1665631a818ac120ad68aa9674277d542f1e542f44",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x04f641173e82bbe7455a3acd37242315859a80d9b4a19a56997645e31a1d1097",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x17e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xeec",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xdd46cd98c3f0f31bf7b060263fa47e9b0aa1c4e4c7206af16ad3a01dac3bff5f",
- "transactions": [
- "0xf88382013208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a08bc9a47ee84ed9389b94c57e8c7014515fefd3e891eff0e1deac8cb1266cfb05a06612fac81c3e0a0b905873bb3f9137f9f8ae952344a174e4d425564b31851350"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xcb8f5db9446c485eaae7edbc03e3afed72892fa7f11ad8eb7fa9dffbe3c220eb"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np383",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xdd46cd98c3f0f31bf7b060263fa47e9b0aa1c4e4c7206af16ad3a01dac3bff5f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2cc62d5cb6ca1b74dd31ced44a51655d15f0c67d9e8b4560584124ea91649145",
- "receiptsRoot": "0x7288150e98b9056465e864af6976d5ec6de80da74cee77596b9a67de235177ac",
- "logsBloom": "0x000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000040000000000008200000000000000000000000000000000000000000000000041000000000000000000000010000000800c0000000000000000400001000000000000001610000000080000200080000000000008000000001000000800000000000200000000008000000000000000000000000040000000002000000000080000000000000000000000000000000000000000000000000000000000000000000000000008000000000200000000040000800080",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x17f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xef6",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x808dd663054b022868554929395cf380b27661a0ae7333a92d69160769afbbbe",
- "transactions": [
- "0xf87a8201330883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0f1dbbd841499d2a51db61a05cf4a7a5650fd83eafe8516d0ad49e99db40c0d13a0542104414214add483f5e7397e9b98e95d336d60ff2b661eabfc8125548df848"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x3d151527b5ba165352a450bee69f0afc78cf2ea9645bb5d8f36fb04435f0b67c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np384",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x808dd663054b022868554929395cf380b27661a0ae7333a92d69160769afbbbe",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf88d2d5d961b54872a1475e17a9107724ba2cd0ca28cb7320aad2f903dc74deb",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x180",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xf00",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x86bca890ff8f5be8c986745f38ef4a87ce167fcaacc0de928f4c8db469bba94a",
- "transactions": [
- "0xf865820134088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0922834adc69ced79913745b4a53a63ff0b0d73552c658f63c35b74fe831f1990a072af738962b2108e1e3e534c88145aa55764f2908bdbce0a4433ef88e3fbfb0c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xdd96b35b4ffabce80d377420a0b00b7fbf0eff6a910210155d22d9bd981be5d3"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np385",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x86bca890ff8f5be8c986745f38ef4a87ce167fcaacc0de928f4c8db469bba94a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x248cbc35df3f48575474369a9105962a22bff30f3e973711545bb9cae1e06dff",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x181",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xf0a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x83132e862eb410579a38d85bbec7fdd5b890647bc9ccc2ad881361a9389cd3fa",
- "transactions": [
- "0x02f86b870c72dd9d5e883e8201350108825208943bcc2d6d48ffeade5ac5af3ee7acd7875082e50a0180c080a03931e5e7d02ed045834da39a409083c260fbc96dc256c1d927f1704147eeaeb6a0215269010bb3e7dd8f03d71db3e617985b447c2e0dd6fc0939c125db43039d0f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xace0c30b543d3f92f37eaac45d6f8730fb15fcaaaad4097ea42218abe57cb9f4"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np386",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x83132e862eb410579a38d85bbec7fdd5b890647bc9ccc2ad881361a9389cd3fa",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x899d1787e12b4ee7d5e497ac1b07d460146316edd86d589dd357e4e39e6e50a5",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x182",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xf14",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb2b948b9139c380319a045813000f17a02153426ae3db02065a7bc6fb1b3d41e",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x3d",
- "validatorIndex": "0x5",
- "address": "0xfd5e6e8c850fafa2ba2293c851479308c0f0c9e7",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf6342dd31867c9bef6ffa06b6cf192db23d0891ed8fe610eb8d1aaa79726da01"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np387",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb2b948b9139c380319a045813000f17a02153426ae3db02065a7bc6fb1b3d41e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6fd59459f6805b1c3f35cd672f058d3f4215b8ba06217056195a249529106097",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x183",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xf1e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xec59612429465042cb5bfe00c2720e2b06608cc0befdf12185f61213dede36a3",
- "transactions": [
- "0xf88382013608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa02f68ef0be353bceb12bd978567947ea2ade48f275f8488d4d9089a6a5df54ecaa01ea605cad7ded16c6744be5446342cef46c0f802938d30db72ee4e35eb0ee726"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa6589e823979c2c2ac55e034d547b0c63aa02109133575d9f159e8a7677f03cb"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np388",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xec59612429465042cb5bfe00c2720e2b06608cc0befdf12185f61213dede36a3",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x87aa8da72c4f54683d4ddfe7592b17518075332583bf40a0af34b072e1b8d5ca",
- "receiptsRoot": "0x6b2a7f9df51def8b942a27f69021bd8954a4d01182bc78fe20171ec738d6a1cd",
- "logsBloom": "0x00010000004000000000000000000000000000040000000020000000000000000000000100208000000000000004000000000000000000000000000000000000000000000000000020000000000002000000000000000000020000000000000048000000000000000000004810000000201000000000000000000000000000000000000000000008000000000000010000000000000000000000000080004000000000000000040000000000020000000000000010000000000000000000040000000080001000000400000000000000000000000000000000000000000000000000000000000000000000080000000000000020000200004000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x184",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xf28",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x18a50573c6144ce2d2c185b146827fbde1568f647d6bcc2c2556df64a00d3462",
- "transactions": [
- "0xf87a8201370883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a036602b451fdd27281014a28c261ac59feabe8c6730619162c51ccd6452e0efcfa01dbbc3cb987dd50dbb59072a156ce01b7825d252e5855249afbda11fd763436e"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9ce48bc641cc1d54ffdb409aab7da1304d5ee08042596b3542ca9737bb2b79a8"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np389",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x18a50573c6144ce2d2c185b146827fbde1568f647d6bcc2c2556df64a00d3462",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4970ca728c597509e3afb689227e843d5da3be74aea9719a756d65db2694b152",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x185",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xf32",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x3ad7ba10baedb1b98556cd20670c57f2f3a4aa0ddfbf76c9a2cbbcec188dada5",
- "transactions": [
- "0xf865820138088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a09a9bf09cafb07d6a97b972a3b405a1dd30dcd6945d9adda6cf921c211bc046e1a03c97b3b08d67e3ccfcb8408e39d2e0971761c1905fbd7028fb52a1f163fb92f3"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa44be801bd978629775c00d70df6d70b76d0ba918595e81415a27d1e3d6fdee9"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np390",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x3ad7ba10baedb1b98556cd20670c57f2f3a4aa0ddfbf76c9a2cbbcec188dada5",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc5da7efe2ca6d0468002914ea2c334be08121fb5450b4a1b74baf08e65115192",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x186",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xf3c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa2deafade520007dd7d127c439290f2bac7a2027b80ff616ccf8ce62eeba6506",
- "transactions": [
- "0xf8688201390882520894f83af0ceb5f72a5725ffb7e5a6963647be7d884701808718e5bb3abd109fa0a38cf9766454bd02d4f06f5bd214f5fe9e53b7a299eda5c7523060704fcdb751a067c33351f6f7bbd9de5b5435f6cadc10ba5e94f3cbcc40ee53496c782f99d71f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xce17f1e7af9f7ea8a99b2780d87b15d8b80a68fb29ea52f962b00fecfc6634e0"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np391",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa2deafade520007dd7d127c439290f2bac7a2027b80ff616ccf8ce62eeba6506",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x7f1f4d793182771fbacb9ef07a0736edbe4aa2417bf775c7b499b35ad791575a",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x187",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xf46",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xfce102ce6fa4701cfa7ca7c4aae937b79190e29b55a453e67f31adece99c4f92",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x3e",
- "validatorIndex": "0x5",
- "address": "0xf997ed224012b1323eb2a6a0c0044a956c6b8070",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4bd91febab8df3770c957560e6185e8af59d2a42078756c525cd7769eb943894"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np392",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xfce102ce6fa4701cfa7ca7c4aae937b79190e29b55a453e67f31adece99c4f92",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x58f87e8c7ffa26035df5258225c492a17f353b2d33420e0ac5b5413f0c29be1a",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x188",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xf50",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x5aff5c82ef6756d97e6caaf6bc6084f4091ed2503b88083a0c4b0484f6e9525d",
- "transactions": [
- "0xf88382013a08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0e60cd99574bb50b626cf0b20d73ece21858aba52609136e6e2dc420a9fdc00eea00aeff0a4419c24268d9784a1ae211927004d8dbbbda3c47c0d0e2d32178ce8f4"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x414c2a52de31de93a3c69531247b016ac578435243073acc516d4ea673c8dd80"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np393",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5aff5c82ef6756d97e6caaf6bc6084f4091ed2503b88083a0c4b0484f6e9525d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x14a7327b3cff203afe17f16aca0470fbe12cfac971c79ef9bd5b3ef71bce5591",
- "receiptsRoot": "0x3b0559fd9e27f69f8a378d27e3b5a82f18881f307f49ec63f89ad4bae18a1ee6",
- "logsBloom": "0x00001000800000000000400040000000000010002000000000004000000000000000000000000000000000000000000000000000000000040000000020000000000000000000000000000000000001800000000200000000000000000000000021000000000000000000000000000000000000000000000000002000000000020000000008000002000000000000000000000000000000000000000000080100000000000000000000000000000020000000000040000000000000000000000000000000000000000020000000000000000001000000000000000200000000000000000000004000000000000000000004000080000000020000001000a00008",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x189",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xf5a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb22e30af8a7f23e2b73275e505b5c6f482357576c82e3d718b0c4c33914d97e6",
- "transactions": [
- "0xf87a82013b0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa061705b5163977bf95976fb0d2f44c1c581d19de8f68084001ed516813a7f5785a07daeb176a18749f11e1cec56a72e988c8362c2e15b86a9c5ae3e2cb2ddde0ce2"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x647fb60bdf2683bd46b63d6884745782364a5522282ed1dc67d9e17c4aaab17d"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np394",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb22e30af8a7f23e2b73275e505b5c6f482357576c82e3d718b0c4c33914d97e6",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x02eb8f611a78bed4123c7b1ec6ca3148dee547538828183756744882a58b6993",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x18a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xf64",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x9a348ddcb5d7c63d344358308acfd52c1be4432de1bdd02a4c1483521b95d7e0",
- "transactions": [
- "0xf86582013c088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0463d74275ffee97deea0603bdab389823c88c03997f176d4c349514d78d4dbc4a06b9796eed221b40094ded3ec3fa9bdbf097561ac3f8a142fef5e2c894a8296de"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xfa681ffd0b0dd6f6775e99a681241b86a3a24446bc8a69cdae915701243e3855"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np395",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x9a348ddcb5d7c63d344358308acfd52c1be4432de1bdd02a4c1483521b95d7e0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe5d836ff1dc0a199a799bdb1aa945580acf9e06c96bd6b88cbc60903e5904b9c",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x18b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xf6e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x584b00c97139674af12f17a4a4828e59951c7f7d0c4fae83d5711ce5e582fdca",
- "transactions": [
- "0x02f86b870c72dd9d5e883e82013d010882520894469dacecdef1d68cb354c4a5c015df7cb6d655bf0180c001a06faf4090490862eba3c27dfe0a030a442ccc89d4478eca3ed09039386554f07ba0656f741b64c54808ac5a6956540d3f7aaec811bf4efa7239a0ca0c7fb410b4d6"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x106ca692777b30cb2aa23ca59f5591514b28196ee8e9b06aa2b4deaea30d9ef6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np396",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x584b00c97139674af12f17a4a4828e59951c7f7d0c4fae83d5711ce5e582fdca",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8fc7b0893f25c43c0dd53f57c7f98653e86d2570923f1831840c09c7c728efab",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x18c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xf78",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x8e2b4e77e4fd7ab14ffaca65bc3a0868f14ce792ffe5f26cc0cc4abf8ebc5cd4",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x3f",
- "validatorIndex": "0x5",
- "address": "0x6d09a879576c0d941bea7833fb2285051b10d511",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x494ac6d09377eb6a07ff759df61c2508e65e5671373d756c82e648bd9086d91a"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np397",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8e2b4e77e4fd7ab14ffaca65bc3a0868f14ce792ffe5f26cc0cc4abf8ebc5cd4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb87cec8c84db91856e9ae32af116b449b8cb1d61cae190a182aebfb85d691e8f",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x18d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xf82",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x657f16f62e12433129b4b3f80e92eee4a65d1cb6e8b847ce632d32cb79ba5abe",
- "transactions": [
- "0xf88382013e08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0065cd2e05815fd9bf6e9aced9947d0c43feed03d4bd010ce93828c5e45a9b483a019449b8fc18e639f9c1d7b0adbd3941622d1f2e8127b82993e0f8bb9cdc2999f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x0ae4ccd2bffa603714cc453bfd92f769dce6c9731c03ac3e2083f35388e6c795"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np398",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x657f16f62e12433129b4b3f80e92eee4a65d1cb6e8b847ce632d32cb79ba5abe",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe154fbe6ca3c192310dea977b202b7e57523be45dfb36cf46816f7b1b86c910b",
- "receiptsRoot": "0x09e88b070a05aab53918792ba761837b32e299692e1ee33a27d3b654a45ea25f",
- "logsBloom": "0x00000001000000000400000000001000000008120000000220000000000400000000008000000000000000002000000000000000000000000000000000000000020000008000000000000000000004000000000000000000000000000000000080000000000000000000000000010000000000000200000000000000004004000000000010000000000001000008000000000000000000000000000000000008000000100000000000000000000000000010000000000000000000000000001000000000000000000000000000000010200000000004000010040000100000000000000000000000000000000000000000000000000000000000020000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x18e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xf8c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x677cd475087726e83d09edba4d2e6cdcaa5f1b9f5e7c26260ff6ebf4dd86a6aa",
- "transactions": [
- "0xf87a82013f0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a017bd3457b4b843b788bd719c6e49a5efad177ca349fa23ee93130c68a6c123a6a0595becbedbd04d964a7e8ca826f50061e1b1f16bea32c966670f7dbcc63dbbff"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd860c999490d9836cc00326207393c78445b7fb90b12aa1d3607e3662b3d32cd"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np399",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x677cd475087726e83d09edba4d2e6cdcaa5f1b9f5e7c26260ff6ebf4dd86a6aa",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x771db9f41d228f8d3e1a33889cc04468bb9691860cbdbf28203d90713eed1fb1",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x18f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xf96",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf60f85724891ffc25eb8c5c596e55846df4032b2edb35d0fc6ac64870db6b42f",
- "transactions": [
- "0xf865820140088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0db06597d4b08ca3fef9b08c69896cef6505785b448bfd0e051ebc7616a2f5a1aa07ca5051c69a0dcb5fae23ba89cb806d860072426d2e450eda056e9e9d8ee360c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9587384f876dfec24da857c0bcdb3ded17f3328f28a4d59aa35ca7c25c8102cf"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np400",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf60f85724891ffc25eb8c5c596e55846df4032b2edb35d0fc6ac64870db6b42f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd210aa806d0d5c95200a88fcc329357fb03782cc236bdc5f184c80246391162f",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x190",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xfa0",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe7a757335322c1008ee83083154c9a787ea3d93efce41c1b32882c8a6ea3a14f",
- "transactions": [
- "0xf8688201410882520894f14d90dc2815f1fc7536fc66ca8f73562feeedd101808718e5bb3abd109fa04a18131d30b0344910cae7c41ee5c1c23171c40292d34e9a82c9c7cef3d3836aa0598a3835ad1903c3d7ad158c57ff0db10e12d8acbef318ddd0514f671a08ce94"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4df8093d29bc0ec4e2a82be427771e77a206566194734a73c23477e1a9e451f8"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np401",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe7a757335322c1008ee83083154c9a787ea3d93efce41c1b32882c8a6ea3a14f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf77d84bb9077b7805492805f09aaeac8fdd72dadaba54464256d1b9633d7313d",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x191",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xfaa",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x32976c704b12fd1ec0e6a409b89c8d3d5d0802f676bfd1848ae07cbb612f0289",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x40",
- "validatorIndex": "0x5",
- "address": "0x13dd437fc2ed1cd5d943ac1dd163524c815d305c",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc56640f78acbd1da07701c365369766f09a19800ba70276f1f1d3cd1cf6e0686"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np402",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x32976c704b12fd1ec0e6a409b89c8d3d5d0802f676bfd1848ae07cbb612f0289",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8c45d111367d1e2766e18c8ef100cb4cbdd1db4171d269d0dee91b7789bf302e",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x192",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xfb4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x4cbab31c513775bdd5b7f91a153fff77cf1602430cedcebec80bedf0b6533658",
- "transactions": [
- "0xf88382014208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0bab2abc49f4f65119331667d5bd95daefb8eec437cb7950b46f1b9a890efd4b7a065396085f5f690d669006b05bab15614816e44cf88bf49fcdf0a5857f364e6a1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7173d4210aa525eece6b4b19b16bab23686ff9ac71bb9d16008bb114365e79f2"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np403",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x4cbab31c513775bdd5b7f91a153fff77cf1602430cedcebec80bedf0b6533658",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xade6dd841f231dcce74ab564f55972731c7eb4a0b5c3ec1a64bb979f754b786c",
- "receiptsRoot": "0x424252c901f76c684b72e2637c97666a35b4020fe9fd8add1bd00fc83cf57512",
- "logsBloom": "0x08000000000000000010000000000010002000000000000000000000040000200000000000000000001000000000020000000000000000000000000000000400010000000000000000000000000000000000000000000000000000000000000020400000000008100000040000000000000014000000028000000000000001000008000000000000000000000000000100000000001000000000000000000000000000020000000000000000000000000000000000000000000000000000800000000000080000000000000000000000000000000000000080000000000000001000000200800002000000000000000040000000000000000000000400000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x193",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xfbe",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x64bfcedbb6b431f370027c5e2414fa70536e4cadaedca69d960d815570b1a514",
- "transactions": [
- "0xf87a8201430883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0097f470d08b374cc1ea0e0ecfb841f22e6f105c4989a6a41f23619320011f4dba06c843174399416f4a98ee5b5170a4330fbc487cc1bdc4e67f8eb3ca279fa8415"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x89698b41d7ac70e767976a9f72ae6a46701456bc5ad8d146c248548409c90015"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np404",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x64bfcedbb6b431f370027c5e2414fa70536e4cadaedca69d960d815570b1a514",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x96e966680b69cd6f8f3c95b0bfcaa337959db055f2b4329813dd02f9e5350742",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x194",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xfc8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x4a13ab52191afd567f4587bee39174c54ca458576730a03854abfad2aca2e0da",
- "transactions": [
- "0xf865820144088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a09fd0702bca1c10269dcf83862a9f07981858a8a1579f3ed68642fdc8b77478cda027b1f49755229583c844b747c040251c2671dcfe83fa26df37d4bbfb54635864"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x5b605ab5048d9e4a51ca181ac3fa7001ef5d415cb20335b095c54a40c621dbff"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np405",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x4a13ab52191afd567f4587bee39174c54ca458576730a03854abfad2aca2e0da",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x7fa007461e28a3bd63c35eb625b4c122197ed1d63a00b0a0959652cb745c034d",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x195",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0xfd2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x3c7adb6035b88d99e1113b076cd7ee852294e0f651e87e779f93b9625f50f173",
- "transactions": [
- "0x02f86b870c72dd9d5e883e820145010882520894360671abc40afd33ae0091e87e589fc320bf9e3d0180c080a09b0a44741dc7e6cb0f88199ca38f15034fab4164d9055788834e8123b7264c87a02c38a3ecda52aebc3725c65ee1cd0461a8d706ddfc9ed27d156cf50b61ef5069"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9129a84b729e7f69a5522a7020db57e27bf8cbb6042e030106c0cbd185bf0ab8"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np406",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x3c7adb6035b88d99e1113b076cd7ee852294e0f651e87e779f93b9625f50f173",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3d03d9ffcd17834d8b99988eb8c1c9f36b8e627f50e2d850a6538d7610ba8457",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x196",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0xfdc",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xda2511fe0f2d0c7384fdfaa42ba9d93127690645ed7f3bb5b48ab3bf31550561",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x41",
- "validatorIndex": "0x5",
- "address": "0x6510225e743d73828aa4f73a3133818490bd8820",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x31a63d6d54153ab35fc57068db205a3e68908be238658ca82d8bee9873f82159"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np407",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xda2511fe0f2d0c7384fdfaa42ba9d93127690645ed7f3bb5b48ab3bf31550561",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xeb5feebaa9bd10619704d66efc97f95338c3e02dcebc2710be462faa47ddfc63",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x197",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0xfe6",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x32704763870e0504f0386bb2e87511ccb2d033c83e9ef57a72327f5d23fd3996",
- "transactions": [
- "0xf88382014608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0e767d5dbf82d8857bccd947a04354b0023b0e283098f75e4d7d79348c24dca95a00a4d04094359f0817637570cf1ed12dcd2614da2e845751734d67175839a3903"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x828641bcea1bc6ee1329bc39dca0afddc11e6867f3da13d4bb5170c54158860d"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np408",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x32704763870e0504f0386bb2e87511ccb2d033c83e9ef57a72327f5d23fd3996",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xaadc011ce89c8dd628f56494b7f19d8cf66c1555b3cb6b38fd6e31c908e83804",
- "receiptsRoot": "0x0c78f3779ab455eed4ce5e60071fff80a3d289a33fd656e17017d53978fada5d",
- "logsBloom": "0x00000000000000020000000040000000000080010000000000000000000000010000000000000000000000000000000000000000000000000000000004000000000000000000000000000001000000000000008001000000000000000000000000000000000000001000000000002000000000000000000000000000002000000000000000000000000000000810001000000004000000000000000000000000000000000040008000200000000000400000000000000000000800000000001000000000000000000000040100000000000000001000000000000000108000000000000000020000800000002000000100000000000000002000000000004000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x198",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0xff0",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x16f96f705d6378a460f67690c9df7ba0b0130dfb7bda8d79ac2ffe9fdee84606",
- "transactions": [
- "0xf87a8201470883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a00eab4059563c228f12cd79cdc77c5594af5bb5f9778dab439aead79a99c7da9aa010476536728e9bf977ad4c2cc25fb7d5587869148789e9fd6bf40d65b9e94bbb"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7e0752ddd86339f512ec1b647d3bf4b9b50c45e309ab9e70911da7716454b053"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np409",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x16f96f705d6378a460f67690c9df7ba0b0130dfb7bda8d79ac2ffe9fdee84606",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x0ed00985c27ccb9453093f70f7cae8594259e64c8962ee22121019210fe01824",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x199",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0xffa",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x70c71163387d8226f299ed02fd7f266f79d708f11ea9133d28a6b13ee751e259",
- "transactions": [
- "0xf865820148088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0310416be8b0e49ec34116f9c8eb4dd4d4dc6e39e5c97ccb94ac96e8cd21a7333a029b7a950def860ab8bfd4e49e5f34bc731344ab60770ea27f656e64e6b2f90de"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x31d973051189456d5998e05b500da6552138644f8cdbe4ec63f96f21173cb6a1"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np410",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x70c71163387d8226f299ed02fd7f266f79d708f11ea9133d28a6b13ee751e259",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x7ff6b18a2c62836e16cad9956e08422a430c268cda51f219422b628491066c6e",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x19a",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x1004",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x67c274a189945d313dccd5b9cb4b7fd47614b59c716a4ed0944d8a1429781e78",
- "transactions": [
- "0xf8688201490882520894579ab019e6b461188300c7fb202448d34669e5ff01808718e5bb3abd10a0a0de600e017080351550412ac87f184ec2c3f672e08f1c362ab58b94631e8864dca047d41b8691a1f7f8818e59ad473451a0edfc88826a6b808f84f56baed90d5634"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe33e65b3d29c3b55b2d7b584c5d0540eb5c00c9f157287863b0b619339c302f0"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np411",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x67c274a189945d313dccd5b9cb4b7fd47614b59c716a4ed0944d8a1429781e78",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x95d1e2783fcf975ce0a79a05166ad33628065812d76f1f92f88d8f77f5a49e88",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x19b",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x100e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x7ae0486d0457d3261e308c1074c7a206e11f3a41a8b3b49ff379d0998a62278c",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x42",
- "validatorIndex": "0x5",
- "address": "0xd282cf9c585bb4f6ce71e16b6453b26aa8d34a53",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x78d55514bcef24b40c7eb0fbe55f922d4468c194f313898f28ba85d8534df82c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np412",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x7ae0486d0457d3261e308c1074c7a206e11f3a41a8b3b49ff379d0998a62278c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa1e185a2970fcd9903cadff06453ace3bff731a5295334d332c3fafd1d50033a",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x19c",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x1018",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb075a9e715b341d481dfad3f02ff0a123aa8043d4ae24d5f0574a7249cc00bcf",
- "transactions": [
- "0xf88382014a08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa06222a14090e09278dc92b9002ee33b54e5bbbecd9afe56fa18d00dfe761ce8a1a06e8ec220dc8219ae16f46f3a4696fc8b4046fd33fa41efb473222fc058d65ed4"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x2e0f4be4d8adf8690fd64deddbc543f35c5b4f3c3a27b10a77b1fdb8d590f1ee"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np413",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb075a9e715b341d481dfad3f02ff0a123aa8043d4ae24d5f0574a7249cc00bcf",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x19a70ab3d8102a74b87887d95a29fe82ce4d4ab36fe3f57f336ded8bd0a7b3d6",
- "receiptsRoot": "0x2ac314ac40ad6f04e3ec1fc2b315d4ce6eb64537ae9bf3fad670a0a1df1e5e3a",
- "logsBloom": "0x00000001008000000040000000000000000000000000000000000000000002000000000000000000000000200000000000001000000000002000000000000000001008000000002000000000000000000000000000000000000000000000000000000080000000000000008000080000002100000000000000000200000000000100000000000002040000000000000000000000000000000000200003000000000000004000000000000000000000020000000000000000000000000000000000040000000002000000002200000000000000000000000000000001000000004000000000000000000000000000000200000000100000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x19d",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x1022",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x936ce32cab37d0a985a937a8d3c7191ec7f48a10d524d04289d59efa4ca4e581",
- "transactions": [
- "0xf87a82014b0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a07af33005afb5f1b38c17ed2bb2b83a0c1d0d6ecd30ab4e32091582d5a3eceb28a008bfc076226d8ebf0a2c86c5ea5f65ea1f1d0cb7b7036b2049444c2fcfb55031"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe1b83ea8c4329f421296387826c89100d82bdc2263ffd8eb9368806a55d9b83b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np414",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x936ce32cab37d0a985a937a8d3c7191ec7f48a10d524d04289d59efa4ca4e581",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x0e4a2aebaaa31e943227335fd579582b6ed68abaa2706294b038ccb00ceae64f",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x19e",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x102c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xd352dfead0be49f8a1f2f7954f90df4b3e4383f8adb54062abd8041b0a0878fd",
- "transactions": [
- "0xf86582014c088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa05e26cfc612b47c55ae5a521eca26d4adbeaefe893bf1b0226cd121cbd7cdb45aa00be4c1040e89e1db4b10b4f36b38ef682de4f3308fd65d4f39346ffcf016cfdb"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4ddad36d7262dd9201c5bdd58523f4724e3b740fddbed2185e32687fecacdf6b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np415",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xd352dfead0be49f8a1f2f7954f90df4b3e4383f8adb54062abd8041b0a0878fd",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc149cc44783e5dc5c6be9d4facfc2e9d3d31dff27f8495ea3fc2acfc22310516",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x19f",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x1036",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xddf15ae692657c7be84b2e663acd7d669dc84a83622c9bbca07aba3a8461d8a6",
- "transactions": [
- "0x02f86b870c72dd9d5e883e82014d01088252089488654f0e7be1751967bba901ed70257a3cb799400180c001a0a79b0ff9846673061d1b90a17cd8bd9e7c7f62b99b39fbe4749777d3ed4544e0a0750ecfe9895402861ebea87e9b483b2c116bc2d4920329aa1c29efb9dcdf47e6"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x156c0674e46cdec70505443c5269d42c7bb14ee6c00f86a23962f08906cbb846"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np416",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xddf15ae692657c7be84b2e663acd7d669dc84a83622c9bbca07aba3a8461d8a6",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x39d41e6a842119b876ef50fcce4e677b2760950f191f0b17ac11bb61f5d271b0",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1a0",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x1040",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x5647e4a4349ab2ed23ddc1f61244c94f194735701ad4041ea62bc578654fecdb",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x43",
- "validatorIndex": "0x5",
- "address": "0xa179dbdd51c56d0988551f92535797bcf47ca0e7",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xdfc56ec6c218a08b471d757e0e7de8dddec9e82f401cb7d77df1f2a9ca54c607"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np417",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5647e4a4349ab2ed23ddc1f61244c94f194735701ad4041ea62bc578654fecdb",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6f8f7979fade5692d7fd5e0f6253e0e3082614421af4bcfbd63c12f2df06876f",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1a1",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x104a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb50098d59b2351e10448f5560aff3f933bb24fed7101cda025bcdd5308fb4631",
- "transactions": [
- "0xf88382014e08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0fea6631902fceb5662ca53076387bbbb0e0fd9bcac1df121172fd29bd6700434a0632755563256841b198d853ee1861224df35abe91c6d15ca60cb3f660ce05e2d"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x395d660f77c4360705cdc0be895907ec183097f749fac18b6eaa0245c1009074"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np418",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb50098d59b2351e10448f5560aff3f933bb24fed7101cda025bcdd5308fb4631",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x26b3aa514e4bfed98a760b1cc6d5c7c855232ecac4f00826049369385376458b",
- "receiptsRoot": "0xa3ea729352d4252acd6b48dcc940d3acfe0d657ca5d3091eda1ae882c7c14776",
- "logsBloom": "0x00000080200000000000000000030000000000000000000008000000000000002000000400000400000000000080802000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000800000000000002000000080000000000000000000000000010000000800000000000000000000000000000200000000000000000080000000000000001000000000000000000000004000080000100100000000000000000200000000000040040000000000000000000040000000000100010080000000000000000000000000010000000000000000000000000000000000000000000000000040000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1a2",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x1054",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xd87426372101b44c6fb40defa47f5e64ced815cf6bcbe830367d328e52fa3bd5",
- "transactions": [
- "0xf87a82014f0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa08ded8700920cf761c49ef0831076f10597be8fe624b891585941b1a1d145a18fa05640b1e1c59257bc6b6352be6bb6a7862a541b3fca52da28912b08b8072b57e5"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x84c0060087da2c95dbd517d0f2dd4dfba70691a5952fe4048c310e88e9c06e4f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np419",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xd87426372101b44c6fb40defa47f5e64ced815cf6bcbe830367d328e52fa3bd5",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x730477c9b8be2e32598ff45ddf03837963e5d2fcd5c8c07d23b47b385c22d4b7",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1a3",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x105e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xac9d6592b309e9e3ec0d899eda9ccd7d508e846553ac4a87da8b420c99173211",
- "transactions": [
- "0xf865820150088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0bb5b1c9e4a9e86b6381ce83f476e3efb45b847315ec3e27e1536539ba2290f42a07eee4b7b9b0d0dc1b873baf519a668f4605ccbb82ad619acb74598535a35bdd1"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf4df943c52b1d5fb9c1f73294ca743577d83914ec26d6e339b272cdeb62de586"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np420",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xac9d6592b309e9e3ec0d899eda9ccd7d508e846553ac4a87da8b420c99173211",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xef5088187720800d3dec63e4e25560c839cad852b7a795fd9e9876ee2a02b16a",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1a4",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x1068",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x834b28c2883caaa276a3a0f2603da1bb8171001967787b96071588f296b7671b",
- "transactions": [
- "0xf868820151088252089447e642c9a2f80499964cfda089e0b1f52ed0f57d01808718e5bb3abd109fa0c37c23a91d6abced211855a2d6d5e383f54aa6ff40c26abc5f27a22cdafa5618a0190f82ff101eabad8b9c7041006dcb3e3a9a85c814938bef8ec7d1aa63fa5892"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x0bb47661741695863ef89d5c2b56666772f871be1cc1dccf695bd357e4bb26d6"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np421",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x834b28c2883caaa276a3a0f2603da1bb8171001967787b96071588f296b7671b",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8fa327b5c3e6a5036585a3b751910d613c3d2b6b56b0a5c1da7727ce50d4cb57",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1a5",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x1072",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x1232a401598e285a5e94aaa0644787458ac9e410b4b50cbc103523f2d2d4c198",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x44",
- "validatorIndex": "0x5",
- "address": "0x494d799e953876ac6022c3f7da5e0f3c04b549be",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4a1f7691f29900287c6931545884881143ecae44cb26fdd644892844fde65dac"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np422",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1232a401598e285a5e94aaa0644787458ac9e410b4b50cbc103523f2d2d4c198",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa5eef4d5746f0409111e198bb292fd06bf9ac9a14dc734ca636005246e713e5c",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1a6",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x107c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x271fd072d8e81da656b1f06548d486ce23f9fd399e070d3a01a3bd28c2d4eb7c",
- "transactions": [
- "0xf88382015208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0435a46c3720f21ff83b01b3d6e88f602e45dee024e69f7df083e47ee400fa063a020b2e545bea301a0322157c61d6f8bdee62066305c627c1c10fb9eb1fbdf0fed"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9b133cc50cbc46d55ce2910eebaf8a09ab6d4e606062c94aac906da1646bc33f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np423",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x271fd072d8e81da656b1f06548d486ce23f9fd399e070d3a01a3bd28c2d4eb7c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x5486d8d4c4159eb6389774b47a76d5e347e3b31ecf92c08eda9e261e3106f0cc",
- "receiptsRoot": "0xc0c07d0984b850e6ccc2e081d26ec135c42d526e9bb51a6c1987784d659c07d5",
- "logsBloom": "0x00000000000000000000000000000200000000000020000000400000000000000000000000000000000000100000000000000000000400000000000000200010000000000a00000008000000000200000000000000000200000000000000000000000000000000000000000000000001000000000000000000000000000000000000000806000000000000000048000000000000002000000040000500001000000002000000000000000000000000000000000000000000000000000000000000000000000000000000800000000800002008000000000000000000000000000000020000100010000000000000000000000000000000000000000010000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1a7",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x1086",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x966f75efe4cd3d4171d4dd7dbe65453d3fae561f5af4d67142cc15ad53dae212",
- "transactions": [
- "0xf87a8201530883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a015ae0fac40a467ff5ad10fe01c838c564f0d30707c8b02be656345842959fedda07a3d9842f721d8cb4494a2df6ff689c4c19e44c8c81f013d1f969624d49850b2"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x473b076b542da72798f9de31c282cb1dcd76cba2a22adc7391670ffdbc910766"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np424",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x966f75efe4cd3d4171d4dd7dbe65453d3fae561f5af4d67142cc15ad53dae212",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa9339a9c149937412b8c9d01a85c7af270578af9eebb80ad2cf208764c40e608",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1a8",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x1090",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x92a740edd1bceefb2f497e906a5f53bc10928c909069ba76b34663dabfc01f91",
- "transactions": [
- "0xf865820154088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0c14791fa1c6907f6279226a31c5f287c93702ba72f19fb9999b93b8ad612b36fa0371a0819796295976ab02fcafbe818a711cf6485a21d038dcb72b5000f04d63d"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x225dd472ef6b36a51de5c322a31a9f71c80f0f350432884526d9844bb2e676d3"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np425",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x92a740edd1bceefb2f497e906a5f53bc10928c909069ba76b34663dabfc01f91",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xac3cc175fd0ba02252342155b4d9dd7fb790eb49b667058912b43f5bd6e939d5",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1a9",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x109a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x5a7a3b8f0d389c13d810588336964f1a94b29184e3d9bc751eb64ef4635ad0f5",
- "transactions": [
- "0x02f86b870c72dd9d5e883e820155010882520894d854d6dd2b74dc45c9b883677584c3ac7854e01a0180c080a07a17de801de3309b57dd86df30b61553d5c04071581d243f33f43c4d64930e09a075f7e820212e8f96d7583c66548719db621537fe20f7568d5ee62176881b70e8"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x31df97b2c9fc65b5520b89540a42050212e487f46fac67685868f1c3e652a9aa"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np426",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5a7a3b8f0d389c13d810588336964f1a94b29184e3d9bc751eb64ef4635ad0f5",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe677d652ba3a8822155791a1d1491ee57497ebfa49e3e38c909752dd8067a9e8",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1aa",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x10a4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf963480776054d809830c23d97833cfbf2971fc0fa04a6fe4974ea25a761f8c9",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x45",
- "validatorIndex": "0x5",
- "address": "0xb4bc136e1fb4ea0b3340d06b158277c4a8537a13",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4416d885f34ad479409bb9e05e8846456a9be7e74655b9a4d7568a8d710aa06a"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np427",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf963480776054d809830c23d97833cfbf2971fc0fa04a6fe4974ea25a761f8c9",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x08414161950ff53f6f053f2886c473a22eb595a0052de01fd24c7af1bc27a5ac",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1ab",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x10ae",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe8c8baed11565acb9d54e46ed79327292e07686ada5cd14fb02558ac39c518ec",
- "transactions": [
- "0xf88382015608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa02f6b9a47dcc55d9130085e0dfd615fee0acea46517280eea07dff8ee6afd40e3a01fc33c02a467db6d30ccf56ad8b5bb32fd49ad9a7866db580e7a581987518921"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xae627f8802a46c1357fa42a8290fd1366ea21b8ccec1cc624e42022647c53802"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np428",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe8c8baed11565acb9d54e46ed79327292e07686ada5cd14fb02558ac39c518ec",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x5afe7e66edc543cc377a33069ba58d5788801f1ef0f370d69ff71db5f63b6b88",
- "receiptsRoot": "0xb278e6670351b21cd1c267f24972d7868327ae82ef7a3b377af968b4c6659925",
- "logsBloom": "0xc0000000000000000020000000000000000000001000000001000000000020000000000000000004000008000000000000000000000000000000000000000000000000001000000000000000800010000000000000000001000000000000000000000000008000000000000000000201000001800000000000000000000000000000000001000840080000000000040000100000000000000000000000000000000000000000000000000000000800000000000000000000000000020000000000002000000000000000000000000040000000000000001000000400000000010000000000000000008000000000000000000000000000100000020000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1ac",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x10b8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xedf9debf0ac1be313a1f9e6f0121d36c284e2c7962acac1fa5c8aae207c07b34",
- "transactions": [
- "0xf87a8201570883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa06cbb3f84663bf7369864941fe566b1beb8d5db0095cbd49ebfdee89c164031e6a0461b62f4b01d15206e95e6c7bfe9364456d8b7edd446d1b488a2688c47b83775"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x8961e8b83d91487fc32b3d6af26b1d5e7b4010dd8d028fe165187cdfb04e151c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np429",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xedf9debf0ac1be313a1f9e6f0121d36c284e2c7962acac1fa5c8aae207c07b34",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf1c25b007a4c84577aa49389214e8b8b63f81cb20b61095db784cd8e781fbdcc",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1ad",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x10c2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x94a14e5fafedb96bffc4624affb9a20762f447e5abb90865c4418a539743932e",
- "transactions": [
- "0xf865820158088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0a285aa615fe480c778997ca57059b8ddec5cee0e5a94ec05cd028a03d04aadaba07549f0c6ded9fe03eb40b413803b8f02d9dc51591e29977d12a204518648008e"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc22e39f021605c6f3d967aef37f0bf40b09d776bac3edb4264d0dc07389b9845"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np430",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x94a14e5fafedb96bffc4624affb9a20762f447e5abb90865c4418a539743932e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x401f1feec84dc7c894bb9f03dd52b5af121262ab2f6bd29e6de4e96c1ed67870",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1ae",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x10cc",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x855b2ccb1c00d717f49ec7074cee1f781edfc072eeef44012e18613a9172fc9d",
- "transactions": [
- "0xf8688201590882520894c305dd6cfc073cfe5e194fc817536c419410a27d01808718e5bb3abd109fa0163f29bc7be2e8fe3c6347fe4de06fa7330e3a3049c0e9dcded1795ff1c1e810a04ea7492a5e457fd21252166f5a5d5d9d5e5c7a19da2c7fd4a822bf60156b91a9"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x7cfa4c7066c690c12b9e8727551bef5fe05b750ac6637a5af632fce4ceb4e2ce"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np431",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x855b2ccb1c00d717f49ec7074cee1f781edfc072eeef44012e18613a9172fc9d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc97f5e63e102992e2a849afad97481ea818d213707de515acd9c2bc246cdf65f",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1af",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x10d6",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x4155e12dee1bb9ed17527871568425b8eb672004a2e2c19cb1947004fc5f0b0e",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x46",
- "validatorIndex": "0x5",
- "address": "0x368b766f1e4d7bf437d2a709577a5210a99002b6",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x943d79e4329b86f8e53e8058961955f2b0a205fc3edeea2aae54ba0c22b40c31"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np432",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x4155e12dee1bb9ed17527871568425b8eb672004a2e2c19cb1947004fc5f0b0e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x9c177f669a297c904a6a6ad51765a5916a0e0a3d9858b289e70bf054b370d685",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1b0",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x10e0",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xd660a48f06384f7ee4402d24193c76d2f4a00b85ca53ae9883b4ee3c07260586",
- "transactions": [
- "0xf88382015a08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa078d6fdbc4224106e1f59483aff597485ed0eebf922317913522a0693727b5ee8a035876b3170b9a88dc391f83dcac8088aeb65233613c74d8f50f1d1d3b1ce842f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x66598070dab784e48a153bf9c6c3e57d8ca92bed6592f0b9e9abe308a17aedf0"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np433",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xd660a48f06384f7ee4402d24193c76d2f4a00b85ca53ae9883b4ee3c07260586",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x98d101f68f7aa5bb170cfdd60281d7a5c3ae335ab03c0f87bdb5e72cc022d55f",
- "receiptsRoot": "0x1919995eb19582a49f7b79b55e7ec75fae399916006f29e4177543d99cc2a5e3",
- "logsBloom": "0x00000000000040000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000080000040004000001000000008000000000000000000000000000000000000000000000000000000000800000000000000080000001000000000000080000000000400020000400000000000000000000000000000000000000000000001000000000000000000000000000000000000000000012000400000000000002000000000000000200000000100000000000000000000000000000000000000000000000000000000004004000000000000002000000000000002010000004000014000000000000080810000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1b1",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x10ea",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x73404b62b42dbc6a6604152b87426e852cc3b34847f45f27c0fca1f3a619f84a",
- "transactions": [
- "0xf87a82015b0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a09fb0d3ddf1fce9562d227b3cd6c35ac2e89f39141823d94cda0e6efb4519c715a06925af0950104623efa7954872196fe6d539eb269263a17db3740652382d100f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xac8fe4eb91577288510a9bdae0d5a8c40b8225172379cd70988465d8b98cfa70"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np434",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x73404b62b42dbc6a6604152b87426e852cc3b34847f45f27c0fca1f3a619f84a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x7d06044c1009a2320b83bdfe22ffe7b8ffa6fa1f65d5e42f7c1588417a8ff421",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1b2",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x10f4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x9832bc48443f86a5809f75ad91caa04101363a43b300cef39918deaae8594e08",
- "transactions": [
- "0xf86582015c088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0aa24c6fb2c99f1ce21f7ffd84e87fb6f81ff76cebe06fb5c0871294a353210dfa0350602877ed48896e8b4124b35c0c47da66c17fc0d553d9248ca1de942114306"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x2b0018a8548e5ce2a6b6b879f56e3236cc69d2efff80f48add54efd53681dfce"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np435",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x9832bc48443f86a5809f75ad91caa04101363a43b300cef39918deaae8594e08",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x03d23380eb6a02b52fcfeb82c0fefd180c014e72a7f48f2627237e7bda6d5610",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1b3",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x10fe",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe5e23a0fd4a2515c0e1292823b094a1aeec3ed64db400675b591fc077bf34c3f",
- "transactions": [
- "0x02f86b870c72dd9d5e883e82015d0108825208942143e52a9d8ad4c55c8fdda755f4889e3e3e77210180c001a0673c5473955d0d26d49b25b82af905ee33ba365178f44dc4ac39221efec23c88a017f46fc9b15ba0c1ea78d4d9f773582d94f61f6471f2918cb0598f33eb9bc89b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x823445936237e14452e253a6692290c1be2e1be529ddbeecc35c9f54f7ea9887"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np436",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe5e23a0fd4a2515c0e1292823b094a1aeec3ed64db400675b591fc077bf34c3f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf8829f712e0ea692e266ae3c78400816c5f5bc1d75a3bff3816f7fef71b2044c",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1b4",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x1108",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x6e26197c94723ba471d049f6082abd0a6e684225b2ee9d8fa675b18ef11492c1",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x47",
- "validatorIndex": "0x5",
- "address": "0x5123198d8a827fe0c788c409e7d2068afde64339",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x3051a0d0701d233836b2c802060d6ee629816c856a25a62dc73bb2f2fc93b918"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np437",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x6e26197c94723ba471d049f6082abd0a6e684225b2ee9d8fa675b18ef11492c1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc66ecc1bdb4fa4b85c0b383d4db20fdaa2cba32973260dc444abb43e8536e93a",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1b5",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x1112",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb5f0ca3b4503c50b8eab9c63a95b209426af616a5b0d8468e63246c3f590caac",
- "transactions": [
- "0xf88382015e08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0179370023b242bccf25d4899c2f29936353b5f1c37a8f7c665e55b75f80bf297a018a66d1d2ef7072f7fc54af07d15edc14ecf5a71f510be740c090f0815178ff2"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x44a50fda08d2f7ca96034186475a285a8a570f42891f72d256a52849cb188c85"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np438",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb5f0ca3b4503c50b8eab9c63a95b209426af616a5b0d8468e63246c3f590caac",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa9b50e298c6a4bbd23a659ab24a3a7426b1087497561c39de2f1bf27da019b83",
- "receiptsRoot": "0x8f45041560ebf83ec428723c6d69db271346e4c5a1b234b56efe318d549187cb",
- "logsBloom": "0x00000000000400400000000000041000000000000004000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000202000000000000000000000000000080000000000000000000000010000000040000000004000004800000000000000400000000020000400000000000000000008000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000800002000000001000000000000800002000000100000000000000000000000000000000004000009000000000008000000080000000000000000000000000000000900",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1b6",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x111c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xfe8e1ceca43818cb8f2e4fc94ead6cea53a8fd515af2bc67a39a15584ec3cd86",
- "transactions": [
- "0xf87a82015f0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0354b9d4a470abdae9da30183321b96b5fd09bc96c1ebd3137b3c6350c21e8de2a026877262b14edc851e17cba052b022dd1038fd51ef65ecbaff09dd07186f035a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x6e60069a12990ef960c0ac825fd0d9eb44aec9eb419d0df0c25d7a1d16c282e7"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np439",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xfe8e1ceca43818cb8f2e4fc94ead6cea53a8fd515af2bc67a39a15584ec3cd86",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xad6a72de336a98aec47ed431bf7d39d537741125313255629633cba91b0097bd",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1b7",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x1126",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xfd02d6b4d954d36af8829bf98464c0cc410de1e28216e45ac5e90fc1fc5780d3",
- "transactions": [
- "0xf865820160088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa09c6b3542e181028aad33517584cd16e92836f975955abdcbf1205b6250c921d4a040816d88e011c2d3073502523867b94987fa0781793a7857ff2453ec2d121444"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x581ddf7753c91af00c894f8d5ab22b4733cfeb4e75c763725ebf46fb889fa76a"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np440",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xfd02d6b4d954d36af8829bf98464c0cc410de1e28216e45ac5e90fc1fc5780d3",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x863de67ea016127a436ee6670f8642bd5ab997ce75361c3cce667abbe90b7283",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1b8",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x1130",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe0c31051877e8d3f6f625498659eff12247ded622d4155f6fd4a498852e46192",
- "transactions": [
- "0xf86882016108825208940fe037febcc3adf9185b4e2ad4ea43c125f0504901808718e5bb3abd10a0a0654dc39f93a879b9aec58ace2fdbd5c47e383cae2d14f1a49f6ec93d539be892a070505a0ef2e83f057e9844dbd56eda0949197f0c4a2b6d0f2979db1710fca4ed"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9a1dfba8b68440fcc9e89b86e2e290367c5e5fb0833b34612d1f4cfc53189526"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np441",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe0c31051877e8d3f6f625498659eff12247ded622d4155f6fd4a498852e46192",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x66989995258d8db8bd3b8eac83c7762c50323b8f21f1aaddf3ad0208afc6318d",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1b9",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x113a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe9da2b3df6fbc520bf3a80b36bd3437210880763ea7acbf422076049724a14ac",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x48",
- "validatorIndex": "0x5",
- "address": "0xd39b94587711196640659ec81855bcf397e419ff",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x54a623060b74d56f3c0d6793e40a9269c56f90bcd19898855113e5f9e42abc2d"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np442",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe9da2b3df6fbc520bf3a80b36bd3437210880763ea7acbf422076049724a14ac",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf37b2d059d8764938039410fc2581f4793fb4f9c66abf4f8a32276dd60334f4d",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1ba",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x1144",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xeafce24dfb100daa2a1ee55da0030d8e057fc943b96b6e7f321af98b47e8107e",
- "transactions": [
- "0xf88382016208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0bf7859d7e53ab582f4189f50f06832f2fa9763498350b739d7a677b34df97861a03ab21050f73bda7c737cef08e6a77edc9766aa0ef14dfdfc22fbcfdb6771825e"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x1cfeb8cd5d56e1d202b4ec2851f22e99d6ad89af8a4e001eb014b724d2d64924"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np443",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xeafce24dfb100daa2a1ee55da0030d8e057fc943b96b6e7f321af98b47e8107e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x23eacf2b963df64726e41314251669bf12f3925de3933e0b713863d1a7a6fc6b",
- "receiptsRoot": "0xc97de406788b669a824183dab763b8caa8988371aea1f18b96e6b1f9abdee729",
- "logsBloom": "0x04000000200100000000002000000204000000000000000000000000000008000800000000000000000000000000000001000080000000400000000000000000000000000000000000000000000000000000400000100000000000004000040000000000000000001000000000000000080000000000000000200000000000000000000000000000000000008000000000000000000000000000040000000000000000040100000000000000000000000000000000010000080000000000000000001000002000000000000400000100000000000004000040020000000000000000000000000000000000000000000010000010000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1bb",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x114e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa53dc7dc3ac37fdd69bedd119e5113397594ab4171b7c010913864890dbd7f96",
- "transactions": [
- "0xf87a8201630883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0332397d6a00a7d2a3453bf053c8d158774d82d6ea252c2d564bbd48f9e882418a01187aef824b2759cba8c1574666919b77889353a9905720170518b03b38cc71d"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xad223cbf591f71ffd29e2f1c676428643313e3a8e8a7d0b0e623181b3047be92"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np444",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa53dc7dc3ac37fdd69bedd119e5113397594ab4171b7c010913864890dbd7f96",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x71e7debe9374beede2414966d6eb2c2eadf548c293ba65821869bc274709badb",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1bc",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x1158",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x48640726ce7b39f951f82d46cfd4f8d71c93534109a0f93810c41289f6c97d2e",
- "transactions": [
- "0xf865820164088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0b7296876d0713a392d440d71244cda1a3ecb09009a2f4d0ae5d26a398a8bee92a04dd844c3b7cbf88f10b080a3a0fd8a0e21e8d3041450c69786efe9ee7af18dcc"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe13f31f026d42cad54958ad2941f133d8bd85ee159f364a633a79472f7843b67"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np445",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x48640726ce7b39f951f82d46cfd4f8d71c93534109a0f93810c41289f6c97d2e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x58a574089cbd9986bf63c3ee8e0e8d400e9b97b8d1280166f7505de051f4c661",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1bd",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x1162",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x40fa37188938bd349b17c8738f79a071533e0c0f6eaf4b1d6d6614fcae9925d6",
- "transactions": [
- "0x02f86b870c72dd9d5e883e820165010882520894046dc70a4eba21473beb6d9460d880b8cfd666130180c080a09a954eff1b0e590a3a78b724b687c6ab944181990998780d56cc3593c704996ea0418db96b5dc1057f6acb018244f82ed6ece03d88c07f6ae767eaebe3b7ac9387"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb45099ae3bbe17f4417d7d42951bd4425bce65f1db69a354a64fead61b56306d"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np446",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x40fa37188938bd349b17c8738f79a071533e0c0f6eaf4b1d6d6614fcae9925d6",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xbd0820c57ebb5be91343940d7197af10c1d95a23a1b99bc5fa1a77997849273c",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1be",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x116c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xeebf24886684542e08624e438bfad2c52eded1a4924aef3fd58d60ed6eaa1d19",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x49",
- "validatorIndex": "0x5",
- "address": "0x6ca60a92cbf88c7f527978dc183a22e774755551",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9d2b65379c5561a607df4dae8b36eca78818acec4455eb47cfa437a0b1941707"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np447",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xeebf24886684542e08624e438bfad2c52eded1a4924aef3fd58d60ed6eaa1d19",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xbc2acbe23d81c5bec8c73c20cfbb12be681cc92fa399ed4a44e7a91fb433c577",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1bf",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x1176",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x837fc89a9611fa0b6a0d2f5a7dec3e06eda2ea3ee84bc6ce214c432b243c256f",
- "transactions": [
- "0xf88382016608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0daffe9dd6ca6d33e1a44ce5725c7e795639c4bd4a36cfb18d520c9fc892b7ca5a01286dcff57cb583238854ca89346c969387d982ca7e14cbd82413855fdda282a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x5855b3546d3becda6d5dd78c6440f879340a5734a18b06340576a3ce6a48d9a0"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np448",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x837fc89a9611fa0b6a0d2f5a7dec3e06eda2ea3ee84bc6ce214c432b243c256f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x95fea999be7fc8cfa0e1c8a9a10dc33d073417bf87ff698edab332c6e18ecc60",
- "receiptsRoot": "0xcf29f818a1be0922fc0576d2500603f4e9ab8a9e251986d891170f993f0c8f0a",
- "logsBloom": "0x00000000000000000000000004010001000020000000000000040000000000000000000000000000000000000001000000000080001000000000000000000400000000000800000000000000000000000000400004000000000000008000000000000000000000000000000000000000000010000000000000000040000008000000000000000000000000000000000020000004020000000000000000000002000208200000000000080000000000000000000000000000000080000020000000000001200000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000010018000100000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1c0",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x1180",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x05505959a8095b30ab40f55294926448248b48b0430ce33332c7b748e956aafa",
- "transactions": [
- "0xf87a8201670883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0745918999757459ef7ab7145b734444d0437fa7b3939a6ca2a07652a727d1ef9a0074b0898accddb3ac54941b1fce130c31edd3d838dfefd506668cd989f4c5389"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xd6a61c76ae029bb5bca86d68422c55e8241d9fd9b616556b375c91fb7224b79e"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np449",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x05505959a8095b30ab40f55294926448248b48b0430ce33332c7b748e956aafa",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa4269875f0bd6dc1360830e3e07eae0956700e8c3aa69cd61b423abf51bfce54",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1c1",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x118a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x57095cf08428bbd1fff32a14f1a811750ff2de206ee3ea1d6f6f18f7a2606d30",
- "transactions": [
- "0xf865820168088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa01f0e57c3b6f3908a7afb46717ef32caf9b73c4a4b2f48b09e0fcbea02ae716e1a017c79cab83300efab682d0c0438b23b49136a17e22560e75d32014c5951b4fd4"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x96ac5006561083735919ae3cc8d0762a9cba2bdefd4a73b8e69f447f689fba31"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np450",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x57095cf08428bbd1fff32a14f1a811750ff2de206ee3ea1d6f6f18f7a2606d30",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd315f1048882fde9bc00a0bae351ab3229cec00efa7ef4b61fd5c1be40619f81",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1c2",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x1194",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe6d3cb3da9e188604d0e8bc2f03a0df4fefa836f9bf4b679e54e97138f72dd08",
- "transactions": [
- "0xf8688201690882520894104eb07eb9517a895828ab01a3595d3b94c766d501808718e5bb3abd10a0a0597dbb3f69603be721ae0f2a63eeee9f008829ff273b54243673f9ea192ddc0aa01f7dd04defb45af840d46a950b8bede0b3ce8a718004c1ca2f3bbd4efcbd7563"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4ced18f55676b924d39aa7bcd7170bac6ff4fbf00f6a800d1489924c2a091412"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np451",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe6d3cb3da9e188604d0e8bc2f03a0df4fefa836f9bf4b679e54e97138f72dd08",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3222feed7d40d321811eb16ac78aaa0561580b176e0605bfecc30427a7702996",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1c3",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x119e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x465bd8f010df142744fc22da07b631a4e2d11ae75bca1608f7592548c420178b",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x4a",
- "validatorIndex": "0x5",
- "address": "0x102efa1f2e0ad16ada57759b815245b8f8d27ce4",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc95a6a7efdbefa710a525085bcb57ea2bf2d4ae9ebfcee4be3777cfcc3e534ea"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np452",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x465bd8f010df142744fc22da07b631a4e2d11ae75bca1608f7592548c420178b",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x96bcc6f26c5f94c33c57d1614edd2b385e36d9972250c79758eeaeb09927c0a8",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1c4",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x11a8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xc7131bb27a6e1395d028d543cfd6f9e71ec4f2d2ecbc44cef53b5b626e01cad9",
- "transactions": [
- "0xf88382016a08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a03fc929c6e9476221ddd5f2f5093981cc13f4b8206ee3454720f06c0bd5c95caba038f23a2c21ba59155127a15502ddd731f30d6f94c6aafde8e73fbe39237766a2"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x2b2917b5b755eb6af226e16781382bd22a907c9c7411c34a248af2b5a0439079"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np453",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xc7131bb27a6e1395d028d543cfd6f9e71ec4f2d2ecbc44cef53b5b626e01cad9",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x168c847144cfea8b88e6ec4f673ebddbf18331bde8002e044b1d1df7408edf04",
- "receiptsRoot": "0x4ff26b781abcaf6d8a14f4f5283feeee87038dbcb46b9987d6042a01b1b07f9a",
- "logsBloom": "0x00000000000400000000000000800000000000002000008000200000020000000000000000000000000040000000000000000000000000000000000000800000000000000020000000000000000000000000000000000000400000000000000000000000000000000000000000800400000000000000000000000400020000000000000000800000000010000000000000004000000000000000800000000000000000001000000000000000800000000000000004010000000000000004000000000000000000000000008000000000000000000000000004000020010000000008000000000000000000000000000000100100000010000020000004000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1c5",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x11b2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x6d6eba2abd0851251651f038c9bcd8b21c56e6cefc95adb259a2b0c3ae4f158d",
- "transactions": [
- "0xf87a82016b0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa07061a8a3f917f765ec8aef5e4ad237d377c0131f63f31da7bdc6af9942a1bc4aa051bf3e7c6676f2fbde507834995f4e269113adf35b98bc71cd22d9c168692f5c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x18d5804f2e9ad3f891ecf05e0bfc2142c2a9f7b4de03aebd1cf18067a1ec6490"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np454",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x6d6eba2abd0851251651f038c9bcd8b21c56e6cefc95adb259a2b0c3ae4f158d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x7e75fe29c17414bea5febf41c577c117b57c1a731aa7a18b6c5d2ba9e3bc27dd",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1c6",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x11bc",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x5cfbc66c760f871b8cf6d87140887788db0622a0f54274737f9cd043b156f50c",
- "transactions": [
- "0xf86582016c088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0ec3fe55b96a9d14e22fc0a8aa5991138ba954245754c0e0dda2b5b7dbb6711caa0296a6b87da18224fac7c922e2a7f0ec41330a6f510934a1e0e3c6a65dd72dfcb"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb47682f0ce3783700cbe5ffbb95d22c943cc74af12b9c79908c5a43f10677478"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np455",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5cfbc66c760f871b8cf6d87140887788db0622a0f54274737f9cd043b156f50c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xdf26695268f674fc809ad21c323bcab53727af440302b923eec2d46ee3cd7aa3",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1c7",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x11c6",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x8f4a24fc6a150744744d03371d34758cf69d4216538804395397ed081692c7fb",
- "transactions": [
- "0x02f86b870c72dd9d5e883e82016d01088252089446b61db0aac95a332cecadad86e52531e578cf1f0180c080a0774ced5c8674413b351ae8ac3b96705d1d3db10deae39134572be985f16c008ba06f3e4b250f84fcf95ae85946da8a1c79f922a211dbe516fcfcff0180911429b8"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe4b60e5cfb31d238ec412b0d0e3ad9e1eb00e029c2ded4fea89288f900f7db0e"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np456",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x8f4a24fc6a150744744d03371d34758cf69d4216538804395397ed081692c7fb",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x358b2d72362d209f8c7131a484e49caff1dda8f550fe6103be80ac369cfe49fc",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1c8",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x11d0",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xafcf58746fc811dd74a0e4a66d91efbb00b2ab2c96680e132234a947798abf7a",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x4b",
- "validatorIndex": "0x5",
- "address": "0xfcc8d4cd5a42cca8ac9f9437a6d0ac09f1d08785",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xfc0ea3604298899c10287bba84c02b9ec5d6289c1493e9fc8d58920e4eaef659"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np457",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xafcf58746fc811dd74a0e4a66d91efbb00b2ab2c96680e132234a947798abf7a",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x2dd7146f049ba679aae26c42d1da7f6660ea964a7b227509e5296a9d0170e93e",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1c9",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x11da",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x5346eb38677572982317e96be00144f1600800e5a738c875522183ad74f408d4",
- "transactions": [
- "0xf88382016e08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa038214a2cc756a0ffe043200d5e12183223f81912c0156df732c3b1d85bc2a237a0744a52bf9fca64223bc279e589d21b9fda190325bf3b576f41a792ccbec5bc08"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4c3301a70611b34e423cf713bda7f6f75bd2070f909681d3e54e3a9a6d202e5a"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np458",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5346eb38677572982317e96be00144f1600800e5a738c875522183ad74f408d4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x62b1bdf3b4a63f480b24af9f3b55dc6ad6e52bb81caa13b286960694b3b600b0",
- "receiptsRoot": "0x25a0fc424c07569fb4229958de04f1d6497b3d8b6a78757f42963f95c354e2b1",
- "logsBloom": "0x10001020000000000000000000000000000000000000000100000100000000000000000000000000000000800000000000000000000000000000000040000000000000000000000000000000020000080000000000000000400000000000000000001400000000010006000000000000000000800200800000000000000000000000000000002000000000000000000080000000000000000000000001000000000000000000000000800000000000000000000000000000000000000000000000080000000008004000000080000000000000000000000000000000000000000200000000020000000000000000400080000008004000000400000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1ca",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x11e4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x83f464b150683ab5ce359179f4f9d6e960049959d2ec46a4ae7a07af2de41a6c",
- "transactions": [
- "0xf87a82016f0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa05e304ec406ec4c83644417e1e58b49757d3ac78da5c5280fbda19b1f149137daa035b73caa8da3b6ce0e5f1b014c127f93f7be595f104cd933b5ff07549fd1812b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x84a5b4e32a62bf3298d846e64b3896dffbbcc1fafb236df3a047b5223577d07b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np459",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x83f464b150683ab5ce359179f4f9d6e960049959d2ec46a4ae7a07af2de41a6c",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x5614ae860626ff1e044740a53f3cb5126f72002928c034aecbdfe4291ce73b91",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1cb",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x11ee",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x3c1ccfa2b5f88830245f76a22fa29ce22fb5b284de5937ff66adc67a445bf5c5",
- "transactions": [
- "0xf865820170088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a05d0d172a5fb9787aa2ee5205e5986de935984adf6030d5668be0e31332f7b145a022c4c7a89391e8f4508095fc5c1ed16aa0c08da6790be108240dc64763d42dae"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xff70b97d34af8e2ae984ada7bc6f21ed294d9b392a903ad8bbb1be8b44083612"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np460",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x3c1ccfa2b5f88830245f76a22fa29ce22fb5b284de5937ff66adc67a445bf5c5",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x715b0d1e4306032fa54c79f84599828d98bc84ed9cdb52a407e58730b4c112db",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1cc",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x11f8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xfc7412d30ba5b6f5b319b07e51296906a42fdae50a88c1f90016d487b1df41f6",
- "transactions": [
- "0xf86882017108825208948a817bc42b2e2146dc4ca4dc686db0a4051d294401808718e5bb3abd10a0a0a755d1c641b8965ea140ad348135496fc412ffa43a72bbd2c7c0e26b814a75f1a067d81cca370b6ea40ccd2ad3662d16fa36bd380845bee04c55c6531455d0687d"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x73e186de72ef30e4be4aeebe3eaec84222f8a325d2d07cd0bd1a49f3939915ce"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np461",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xfc7412d30ba5b6f5b319b07e51296906a42fdae50a88c1f90016d487b1df41f6",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8c6710fa12f6392a52eaa92d776fe1c24245dd52883ff2276547e65c34952eeb",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1cd",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x1202",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xdad167dfa9bb65a470a36a3996f0587d645b3fbfe9e3522a1436f1dd6a3a37f3",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x4c",
- "validatorIndex": "0x5",
- "address": "0x48701721ec0115f04bc7404058f6c0f386946e09",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xed185ec518c0459392b274a3d10554e452577d33ecb72910f613941873e61215"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np462",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xdad167dfa9bb65a470a36a3996f0587d645b3fbfe9e3522a1436f1dd6a3a37f3",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x8c73a23f75ee594dacc63d24a5d5655a1ccbeead972dba58ad86787c44442c6c",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1ce",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x120c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xc50795e72a34041bdabf74a87f77d78f3a07f2005396dcf9925b08a8a686bd61",
- "transactions": [
- "0xf88382017208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0567311948632a5f4d53e0491aa8e7f939a3e0da38be1db4b6c757422de3f8bf6a01134e092948e423c7f8867c02822c95f3ce21b6d4e8d3666e2cf47ca88ad7499"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x5cfbad3e509733bce64e0f6492b3886300758c47a38e9edec4b279074c7966d4"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np463",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xc50795e72a34041bdabf74a87f77d78f3a07f2005396dcf9925b08a8a686bd61",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb6a995ce6f848e4f2f2ad8ced5491859a5d0a3b6767108f3ce5cfcb33303349f",
- "receiptsRoot": "0x5bb341cd099f8898164b032e64db73752f528a10e8d9c60c9b4fff08af32dcf5",
- "logsBloom": "0x000002040000000000000000000000000000000000000000200000000000000000000000000000000000000000000300000000000000000000010020000000080000000000000000000000000000000000000000000200000000000000201000000000000000080000000000000000000000000000000040100000000010000080100000002000000000000000004000000008a0000000100000000000400000000000000000200000000000200400000000000000000000000000000000000000000000000000200000000000000002000000000000000000000000000000000000000000000000030000000000000200000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1cf",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x1216",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x69a26219f28581c8898c2790cf785e3f2b0081a416d51722d85b5ac313d5f36d",
- "transactions": [
- "0xf87a8201730883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a06092eab6a3d9e41841ad4b9c97154ac35269c852606da6dd04940a1a055fa979a052a6e3e769e27310acdef840cb1182f4a2b6b08583b01cb8325c98253feaf7aa"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x867a7ab4c504e836dd175bd6a00e8489f36edaeda95db9ce4acbf9fb8df28926"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np464",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x69a26219f28581c8898c2790cf785e3f2b0081a416d51722d85b5ac313d5f36d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf54cc52e78b0ea88b082230970d262fc78070bff347c000f60c53400d111a59c",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1d0",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x1220",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x3ed11b20d6eced6314897749d304a677d345ce9343fe964143548980ea71615e",
- "transactions": [
- "0xf865820174088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0342c58642563f78afdb5cf7b9fbc935268a8fd81a5bd7997c33f61cdff8fb9c2a07466870d997603b5dd7755f151b76f056d4948ae82372b05babc01b9addaad19"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x0d01993fd605f101c950c68b4cc2b8096ef7d0009395dec6129f86f195eb2217"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np465",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x3ed11b20d6eced6314897749d304a677d345ce9343fe964143548980ea71615e",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x5b583ecaeffb409a488709df2c592c932e93a9b954bb5b62c36739324ae7d89c",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1d1",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x122a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x20ca98d23c09a37aa1805c3989ca7a7bfff9ade344de4575f5063a10c60510ca",
- "transactions": [
- "0x02f86b870c72dd9d5e883e82017501088252089423e6931c964e77b02506b08ebf115bad0e1eca660180c080a06263b1d5b9028231af73bfa386be8fc770e11f60137428378137c34f12c2c242a02b340f5b45217d9b914921a191ce5f7ba67af038e3b3c2c72aaca471412b02f7"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x8e14fd675e72f78bca934e1ffad52b46fd26913063e7e937bce3fa11aed29075"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np466",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x20ca98d23c09a37aa1805c3989ca7a7bfff9ade344de4575f5063a10c60510ca",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xdaf72de0a7092d2a2a6d31336c138ab45852ca65398578fbc435b3c591fa7c3a",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1d2",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x1234",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xd1c6165f74a48fb1da29dde0ec4588f1b5708d1b810696ab128a6db9ce08a1eb",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x4d",
- "validatorIndex": "0x5",
- "address": "0x706be462488699e89b722822dcec9822ad7d05a7",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4ec1847e4361c22cdecc67633e244b9e6d04ec103f4019137f9ba1ecc90198f4"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np467",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xd1c6165f74a48fb1da29dde0ec4588f1b5708d1b810696ab128a6db9ce08a1eb",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb9f6529424870d0fbfe7d70438762f3ccf9d2f212d3e42c837f6e9218d72451a",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1d3",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x123e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xee2b973ebc00c239bf4fd6c382cc78890065370286476ae02a9b1bd76788f810",
- "transactions": [
- "0xf88382017608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0e42b1ec38a455f867d421d170e634c86f8a84a2cb00ec5024f343667042f303ea067797c75de08e6eafd819d4c408324fba318e16b378b7dedbc0708056aebb696"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xec69e9bbb0184bf0889df50ec7579fa4029651658d639af456a1f6a7543930ef"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np468",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xee2b973ebc00c239bf4fd6c382cc78890065370286476ae02a9b1bd76788f810",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3017b68d781fb29ccbca4c6ff597a9e18d6cee4f02974dbb32f04b5a7f519271",
- "receiptsRoot": "0x00fbb0bcdb236cd79dbbefe84d42f31ee3274cc5e9116ffb0d70301b983dbd52",
- "logsBloom": "0x00000000010008200000000000000000200400000000000000000000022000000000000000000000000000000000000000000000000800000000000000000000000000200080000002000000000000000000000000008000000000000000000000000800080000000004004000000000000000001000000000000000000000000010000000000200000002000000000000010000000000000004000000000000000000000400000000000000000000000040000000000000000000000080000000000200000000000000000000000108000000000000000000000020010000000000000000000000000000000000000000000000000000000040000040000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1d4",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x1248",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x66a71dd383d4ead0e00787a06fcfb3c75c36fa72b5d98f39dc37ca129315b8d9",
- "transactions": [
- "0xf87a8201770883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa01975b5adb5e05e7dbaf63d31d34e5dfb802c4ca28127176811ada2b0a9411be6a02b9cd65ba817631163e95275ec2bd5319edeef4f74eb6efb32150a523282db16"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xefdd626048ad0aa6fcf806c7c2ad7b9ae138136f10a3c2001dc5b6c920db1554"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np469",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x66a71dd383d4ead0e00787a06fcfb3c75c36fa72b5d98f39dc37ca129315b8d9",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x7da79133a491b6c2566dc329ed006ee0010fe59b515fbce5589eda0f31dd091b",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1d5",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x1252",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x7f166dd54e16fcd0e302579768e0bb090b06f4e35cba5b48b0b5c42e367c0832",
- "transactions": [
- "0xf865820178088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa02a73665ddc16b8e231ef04b5f0ad8afa56248db6f43222848032c72e97a807b8a00a17dda1a1d0ba616354fda9e86c836bcb002c7e54153be4cc95776446c6b2a5"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x551de1e4cafd706535d77625558f8d3898173273b4353143e5e1c7e859848d6b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np470",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x7f166dd54e16fcd0e302579768e0bb090b06f4e35cba5b48b0b5c42e367c0832",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xcbeab9491879fdd48e387106f31e983546cff3f4795ff5190722d2ac1f3792b6",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1d6",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x125c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xeedbf487ab11603d1a8e08d672886d16cd318bc421a358d199df281a473ac7b0",
- "transactions": [
- "0xf8688201790882520894878dedd9474cfa24d91bccc8b771e180cf01ac4001808718e5bb3abd109fa0515a62775619f55c366d080a7c397ea42dcfd2fdcce1862ef98dab875077f367a023756d4f3bd644dde1c25f8cde45fbea557dacf0492bbecb409f6b2cdacbb9b8"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x137efe559a31d9c5468259102cd8634bba72b0d7a0c7d5bcfc449c5f4bdb997a"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np471",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xeedbf487ab11603d1a8e08d672886d16cd318bc421a358d199df281a473ac7b0",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x60452d4fa157207a12986fb9c810855fe19a2492ad046335ec9b4fe41e48de19",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1d7",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x1266",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe2cefda7c9752d4706e180cf9228524bd767f36f6380f0c6255498abedc66ce7",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x4e",
- "validatorIndex": "0x5",
- "address": "0xe5ec19296e6d1518a6a38c1dbc7ad024b8a1a248",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xfb0a1b66acf5f6bc2393564580d74637945891687e61535aae345dca0b0f5e78"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np472",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe2cefda7c9752d4706e180cf9228524bd767f36f6380f0c6255498abedc66ce7",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x0b580cdca4b5a562a85801f2e45bd99e764124b9715915fd4bfc6f6eb483ef96",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1d8",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x1270",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x35f103c6c3cfc385bf9f512f7b4d7903e314b60cb715df196cf574391b8506df",
- "transactions": [
- "0xf88382017a08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa05c8cad8eec0edc7394b3bace08088ee19b7eacb754b0a5695fc52a0cd17c19f6a0033d27e9eeb87fa5ae4868a14d0b66d941f0ffa3a3781e60cbb751bab7b507da"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x96eea2615f9111ee8386319943898f15c50c0120b8f3263fab029123c5fff80c"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np473",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x35f103c6c3cfc385bf9f512f7b4d7903e314b60cb715df196cf574391b8506df",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd08b438590148463c602be8f8899fd6c2cb42972fe2df0e71cb42ebefea3f404",
- "receiptsRoot": "0x307ca5ba4dfd34e9f362cea8e1f54ff58f9318a35cf7e1ae24823d41572d7742",
- "logsBloom": "0x00000000000000000000000000000000800000000000000000008000000000000000000000040000000000000000100000000000000000000000000000000001000000000000000000000400000000000000000000000000300000000001000000002040000000000000008000000000000000000000000000000000000100000010000000000000000401000000000000000000000000000000000000000080000000000058400000000400000800000000000000000000000000000000000001000000000000000000000000004000000000000100100000000000000000000000000000000200400000000000100000000000002000040000000000100000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1d9",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x127a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x1f50e2662ba03c36242e9717f767077fd0d1659ed1a5e2e5024bf1a9de6303f1",
- "transactions": [
- "0xf87a82017b0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa06cfb2ecb740895c1bdd352c502898651d83d35cb17ec4a0b30b04fe190a05758a02606cabbaa5b1d57ff9da73837cff8cbd03f242b83880f8cf3ba6f0ee907d538"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x68725bebed18cd052386fd6af9b398438c01356223c5cc15f49093b92b673eff"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np474",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x1f50e2662ba03c36242e9717f767077fd0d1659ed1a5e2e5024bf1a9de6303f1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6d86e3351111e6c2d4eafc36553273c03636a22fae54a9e076be2e7cb0cdf9d7",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1da",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x1284",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa3baf412ffd440d9baceb4d19fc213652de91fee569633fb5f8f77b737dd23f3",
- "transactions": [
- "0xf86582017c088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a044380da66c7033fceaa15191e7549bd08fed4c16f96cf1282b2f39bccaad1ff0a00d036ed4649f8300b82a534b03a19b4547784997b61328ba41dd7fa5380de99b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe2f1e4557ed105cf3bd8bc51ebaa4446f554dcb38c005619bd9f203f4494f5dd"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np475",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa3baf412ffd440d9baceb4d19fc213652de91fee569633fb5f8f77b737dd23f3",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4e2eff0a0a0cfaa9726ffd557089d4a85855fabe4b81334326bd400289f5ed12",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1db",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x128e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa63c5dedb28356376c60a58b8b766be086203e9b8d9c016e0863fd4e8cf42a06",
- "transactions": [
- "0x02f86b870c72dd9d5e883e82017d01088252089445dcb3e20af2d8ba583d774404ee8fedcd97672b0180c001a0d3b69c226bf73db84babb6185a83b0dd491467adfc01d279df4c09d5d2d3fba4a0368ddb772caa32963df97961cf8ef0db33e0df5945000f0e39d9a288bd73ee30"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x48ef06d84d5ad34fe56ce62e095a34ea4a903bf597a8640868706af7b4de7288"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np476",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa63c5dedb28356376c60a58b8b766be086203e9b8d9c016e0863fd4e8cf42a06",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x3de8e5ff6961615b029591cbe9ea51723c809d965421da4f3f8ae26ffe59d69d",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1dc",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x1298",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xbcf5e09e90541f9a8e36eca4ce43a64e1e05e93f4aba193be8e2da860b5ba0bc",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x4f",
- "validatorIndex": "0x5",
- "address": "0x2e350f8e7f890a9301f33edbf55f38e67e02d72b",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x5c57714b2a85d0d9331ce1ee539a231b33406ec19adcf1d8f4c88ab8c1f4fbae"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np477",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xbcf5e09e90541f9a8e36eca4ce43a64e1e05e93f4aba193be8e2da860b5ba0bc",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x6eb0d2ff3e3dd2cdaad61b121b06afcf7863f34152ecbdf8b8773604630a56b3",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1dd",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x12a2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xd5c167589a4663ae0585e5fff8fe256f35baaa26843df17dedcf6040709d6257",
- "transactions": [
- "0xf88382017e08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a0939d9f6f260f24b45073aeabe00660f617f1dbfcf522cd6c90ef189dfc9dbfa0a02dfd90c6f1a6822039b8fbd5bff435e939882da970ed1b58a4639eddcb79b23b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x204299e7aa8dfe5328a0b863b20b6b4cea53a469d6dc8d4b31c7873848a93f33"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np478",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xd5c167589a4663ae0585e5fff8fe256f35baaa26843df17dedcf6040709d6257",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xfadd61dbce8d90cae8144c1b2297209079517cb13f3a4e60a6c8f2ea7b4d3770",
- "receiptsRoot": "0x3ec27c047700a74288e3ee48062fed9fbba71b1704febedea9f4e9e3a92faabf",
- "logsBloom": "0x00100000000000000000000040004000000000000800008080000000000000100000000000000001000000000000000000000000000004000008000008200000002000004000000400000000000000000000000008000000000000000000004000000000000000000000000040000000800004000000000000400000000000000000001000000000000000000410010000000000000000000400000000020000000000000000000100000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010080000000000000000100000000000800000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1de",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x12ac",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xb061affdd716a0d4c5d081a1c3659d0201dce5c698ae942440565ca789e55b00",
- "transactions": [
- "0xf87a82017f0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0dffee1543462b1d024b5d54728f2e3284d90d8fd24b94fd96bd027b4ca51e768a02ed5ddd2050f1b7bcbc123e31fb0536fbf1661a8f7541c7a10729e8a505cc080"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb74eea6df3ce54ee9f069bebb188f4023673f8230081811ab78ce1c9719879e5"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np479",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xb061affdd716a0d4c5d081a1c3659d0201dce5c698ae942440565ca789e55b00",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x931dde8f1566d5b88162261e5f8c8fede3f14bfab1c11934aae8f2a38aca7b36",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1df",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x12b6",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xd8fd694b37ff2f40373350baa6cbf326e675330a7d070dedf57065b72304aece",
- "transactions": [
- "0xf865820180088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0c2e07d6867be2220a74a18404d2b9b9adb2f6b1764907aaec954f46e0b9fd18aa01504fbbb49a910d6469e64741d99ea5031c14d4721e488998ef2f594022f34e2"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xaf5624a3927117b6f1055893330bdf07a64e96041241d3731b9315b5cd6d14d7"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np480",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xd8fd694b37ff2f40373350baa6cbf326e675330a7d070dedf57065b72304aece",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x452e515470ad9f96543d5a469c85e77c4f675f70a56662537491b01528898b99",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1e0",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x12c0",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xee3a60bb251ec04e27e020f297aa6f159dad08673e76b280e67114583478aec9",
- "transactions": [
- "0xf868820181088252089450996999ff63a9a1a07da880af8f8c745a7fe72c01808718e5bb3abd109fa0f06ad492cdd04b44f321abe9cb98e5977f03909173e4b6361f50d44c080f9d6aa07fdc23c04fab8e0a576e6896b13a661b2dcb256cf8ca42fa21f0f370097a53a4"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc657b0e79c166b6fdb87c67c7fe2b085f52d12c6843b7d6090e8f230d8306cda"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np481",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xee3a60bb251ec04e27e020f297aa6f159dad08673e76b280e67114583478aec9",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa424a562451b0728dc1451b83451fb65f9cad240a6e12ae45314a3c0fc49c4bd",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1e1",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x12ca",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe261b4fbd07d32f5f19564c572258acbe4be1a6b2ea03a57ccbb94e254f37cd5",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x50",
- "validatorIndex": "0x5",
- "address": "0xc57aa6a4279377063b17c554d3e33a3490e67a9a",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa0e08ceff3f3c426ab2c30881eff2c2fc1edf04b28e1fb38e622648224ffbc6b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np482",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe261b4fbd07d32f5f19564c572258acbe4be1a6b2ea03a57ccbb94e254f37cd5",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x5a1ad989a90bb48e30208fafcd5131d4dec171928eb27a8ab446df6086df0f94",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1e2",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x12d4",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe8f039d9e217e95c5622ac64609dcaaa54abbf24376fe6c65a29d2b50060cff1",
- "transactions": [
- "0xf88382018208830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd10a0a085873eb64b12c743e5652beb56056bd656368a87247a72b159667d4755d7a714a0134397c5062d25029e41def2275efe8c56e466e3a1547d3525533e29641d203f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc9792da588df98731dfcbf54a6264082e791540265acc2b3ccca5cbd5c0c16de"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np483",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe8f039d9e217e95c5622ac64609dcaaa54abbf24376fe6c65a29d2b50060cff1",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x54928b5673094b4ce9833ecf8c1490381f0317ac2e9d51f47673e386b82ae93d",
- "receiptsRoot": "0xeda5fd4b20fab5a0732205bfe235b5b212cfa5eb525752ae8b9bb0ca224262ec",
- "logsBloom": "0x04000000000420002000000000000000020000000000000000000000000000000000000000000000000000100000000040000102000000000000000080000000008000000000000000000000900000000000000000000000040000000000000000000000000000000000100000100000000000001000010000000000000000010000000000000001000040000000000000000000000000000100000000000000000000000020010000000008000000000002000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000080000000400000000000010000000000000000000000000000000002020000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1e3",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x12de",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x4b31828b7c27c371fdbc62a7b0b6807d1050d15ad53736f73c4063b391aa8b91",
- "transactions": [
- "0xf87a8201830883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a05c87beb281558e43744b39a1d0b62e75dfb5ea245fd2d66c657ff053fa5c45e1a077a1c629133272d7fef83436c8f67f327fc77bedea95009b3d569a5f03485b50"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc74f4bb0f324f42c06e7aeacb9446cd5ea500c3b014d5888d467610eafb69297"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np484",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x4b31828b7c27c371fdbc62a7b0b6807d1050d15ad53736f73c4063b391aa8b91",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf92302c8ac6987ab39ddc9a7413f552337da61d611a086900a5e47b9b3c1422f",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1e4",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x12e8",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x56c5997ee01e4a2bad320a6af0120843f01908c525450d04458eca33799e7958",
- "transactions": [
- "0xf865820184088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0ef66b5859d5e5be7e02ce0b7d103b957ceba18d69047aec94746e87945b7230ba071c5785cce709e44dd94db5684b4e552e343a44862fba233c49a3fa99b0d63f9"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x1acd960a8e1dc68da5b1db467e80301438300e720a450ab371483252529a409b"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np485",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x56c5997ee01e4a2bad320a6af0120843f01908c525450d04458eca33799e7958",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x89822c6bc267d77690ae905ebc8dbe9426f9a83764224d4bc9624104881db28e",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1e5",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x12f2",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xa5d5571bc983cefbe29844e1914f948256b70833f1e99d8dcb0282e1f9dbbfef",
- "transactions": [
- "0x02f86b870c72dd9d5e883e820185010882520894913f841dfc8703ae76a4e1b8b84cd67aab15f17a0180c080a0d4b8d15fc05f29b58f0459b336dc48b142e8d14572edad06e346aa7728491ce8a064c8078691ba1c4bb110f6dff74e26d3c0df2505940558746a1c617091ddc61a"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x6cef279ba63cbac953676e889e4fe1b040994f044078196a6ec4e6d868b79aa1"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np486",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xa5d5571bc983cefbe29844e1914f948256b70833f1e99d8dcb0282e1f9dbbfef",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xe88ebfc2a7990356801a2e5a308418fa8fe4445548fafe8227f4382f64ad8597",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1e6",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x12fc",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x686566b93e0b0c5d08d2de9e0547a5639e6878d15c59baab066c48365ce7e350",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x51",
- "validatorIndex": "0x5",
- "address": "0x311df588ca5f412f970891e4cc3ac23648968ca2",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x60eb986cb497a0642b684852f009a1da143adb3128764b772daf51f6efaae90a"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np487",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x686566b93e0b0c5d08d2de9e0547a5639e6878d15c59baab066c48365ce7e350",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xb852ee14e385a383f894d49c4dabd2d0704216e924283102b9b281ae5306a291",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1e7",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x1306",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xc005c46cb9de70c37edd02e3ae623bb8b6e4160674fafbbd34a802f85d2725b6",
- "transactions": [
- "0xf88382018608830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0ddc578e5c190613c2dc0ce34585e98c512fc9b4ae877b0b3f9b85e01a36b90b5a044c7152f99374ce61bb3b9ebb9ec9e5c4f623faa9b8972cf80f891fd45be9bbf"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xc50024557485d98123c9d0e728db4fc392091f366e1639e752dd677901681acc"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np488",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xc005c46cb9de70c37edd02e3ae623bb8b6e4160674fafbbd34a802f85d2725b6",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa3f2cdabc9ec81196b1930e223115ab39e3aa82a3267c2eab58dfcd4ac28879d",
- "receiptsRoot": "0xa98965822a3cbebe261b9e53038a23e30a7a9ea1878b91ee19c2b9ae55907433",
- "logsBloom": "0x0000000000000000000000000000000c000000000000000000000000000000000000000000002000000000800000000008000000000000000000000000000000000000000000200200000000002004000000000000000000000000000000000000000000000000000000020000040000000000080000000000004000000000000000000000000000000000000000100000000200000000000000200000000800040000000000000000000000441000000000000000000000000000000000004020400000000000000000000800000000000000002000000000040000000000000000000000000000000000000000000100000000000000400100000200000010",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1e8",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x1310",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xabe558d433bc22296ae2fc7412d05672f2ec66c7940ef6a76f9bb22aa09b219d",
- "transactions": [
- "0xf87a8201870883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a09d84bd49c461dee138a01ba1116ba5a0866c4d398db99b3b6e8ec5119ddaf31da046d87610c10b340e616174c09a5addfb8ef7f1b64dcadf4edd14af37ec74a55c"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xb860632e22f3e4feb0fdf969b4241442eae0ccf08f345a1cc4bb62076a92d93f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np489",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xabe558d433bc22296ae2fc7412d05672f2ec66c7940ef6a76f9bb22aa09b219d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x39ebb75595ae4b664d792fdf4b702a8a4cec3fb1fa62debd297075d3543e05af",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1e9",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x131a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x5591e9a74a56e9765790e3088a82c8e6e39ef0d75071afe13fa51c9b130413db",
- "transactions": [
- "0xf865820188088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a06ffd1874ec840566ae82b8a15038ee44b5241705bdb421b459c17100d1300d1aa0121f314d9f41658c831f52b82d4a13b333413d68809cea260e790de9283a434b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x21085bf2d264529bd68f206abc87ac741a2b796919eeee6292ed043e36d23edb"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np490",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5591e9a74a56e9765790e3088a82c8e6e39ef0d75071afe13fa51c9b130413db",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xa3d5920be7fa102b7b35c191800c65c8b8806bd7c8c04cdc0342a3d28aeafa3c",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1ea",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x1324",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x38cee342db6a91998dd73c4d25bca6d8730977aaa19f0a092d47c00ff10c4edb",
- "transactions": [
- "0xf8688201890882520894b47f70b774d780c3ec5ac411f2f9198293b9df7a01808718e5bb3abd10a0a0d33c0cd7f521603ea8deaa363ab591627f5af193759f0aeb8cd9fe4f22a4dd5ca0667bb0ee041403cba2e562882bb9afc43bd560af3c95136c7bf4f1e361355316"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x80052afb1f39f11c67be59aef7fe6551a74f6b7d155a73e3d91b3a18392120a7"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np491",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x38cee342db6a91998dd73c4d25bca6d8730977aaa19f0a092d47c00ff10c4edb",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xf1034fb8a7585c73d7df19cae6b0581d6836278bd57d05fa19f18c6501eace46",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1eb",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x132e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x669efe3cceb25caf14b93a424eaa152070686561e028d50b8adbf87d45f4d18f",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x52",
- "validatorIndex": "0x5",
- "address": "0x3f31becc97226d3c17bf574dd86f39735fe0f0c1",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xa3b0793132ed37459f24d6376ecfa8827c4b1d42afcd0a8c60f9066f230d7675"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np492",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x669efe3cceb25caf14b93a424eaa152070686561e028d50b8adbf87d45f4d18f",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x9b830dad01831671e183f743996cc400135e0b324f1270468af08b37e83b8b17",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1ec",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x1338",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x92932a0312ff65482174399e2cd29656c7051fa3747e47a906b54207c4fd1a92",
- "transactions": [
- "0xf88382018a08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0e94663b4e19d1c2f86adde879e4cb965b7eda513a542ba26136b7010aae11681a03e7d58f3bef3bba01e70b75c70bc0d070f95bba8994c9f12705f2a5281160f47"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xe69d353f4bc38681b4be8cd5bbce5eb4e819399688b0b6225b95384b08dcc8b0"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np493",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x92932a0312ff65482174399e2cd29656c7051fa3747e47a906b54207c4fd1a92",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xc616c572be45daa3d7eae2481876e5d8f753631f976d4da110a6ad29bdfad30f",
- "receiptsRoot": "0x78902fbbd0a8ab65f6b731f1145a5f6f467f9fdae375707236cff65e050bbfeb",
- "logsBloom": "0x00000000002000000000080000000000800000000000000000800000000100000000000000000000000000000000000000000000000004000000000010000000000040000000000010000000000400000000000000000000000000080000000000020000000000000000000000000000000000000000000010000000000000000000000000008000000000000000000000000000000000400000000001000040000000000000000000000000000000000000000040000000040000000880000000008020000000800000008000000000000040020180000000000000000000400800000000000000000000000080000200000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1ed",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x1342",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x52b55abe0e252ea389cc21f01782fd70ca4e4ef6031883f6b79c097de33964d4",
- "transactions": [
- "0xf87a82018b0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0fbd0141af6d135ce0949d33ba4beba57e9b7f388c37e9725b762cb61e8db17dea05ecd43ff335efc34b06551202c4223fc39e1c842d4edfad8e46f19bc7a93f57f"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x221e784d42a121cd1d13d111128fcae99330408511609ca8b987cc6eecafefc4"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np494",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x52b55abe0e252ea389cc21f01782fd70ca4e4ef6031883f6b79c097de33964d4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x7e626fcfe3b1ca7a31dc26a08fbc503c7a85876a64a22a270ec99ef534566c45",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1ee",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x134c",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x5370ce9fa467f03411f240030b4a0b9fcbb05c5b97b09356d071ade6548767e8",
- "transactions": [
- "0xf86582018c088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a05a02d5d03439ebbdf2c3b2d98305dda7adbed1ce5549c474b4b9e4f7200d4beaa016d123a1de79c4a654c1d1ab2169ee672c66922fa036e951c60fec9fe4643ee9"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xdcd669ebef3fb5bebc952ce1c87ae4033b13f37d99cf887022428d024f3a3d2e"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np495",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x5370ce9fa467f03411f240030b4a0b9fcbb05c5b97b09356d071ade6548767e8",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x9d90c0fd0677204966d6fdbcafcfacc7fe93a465748d2ce8afbc76b6d9b9bbe1",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1ef",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x1356",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x58488c77f4726356a586e999547ffa283a73f17058064f3f56eeb02a5f67b4b4",
- "transactions": [
- "0x02f86b870c72dd9d5e883e82018d0108825208946e3d512a9328fa42c7ca1e20064071f88958ed930180c080a0990aa3c805c666109799583317176d55a73d96137ff886be719a36537d577e3da05d1244d8c33e85b49e2061112549e616b166a1860b07f00ff963a0b37c29bcaa"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4dd1eb9319d86a31fd56007317e059808f7a76eead67aecc1f80597344975f46"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np496",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x58488c77f4726356a586e999547ffa283a73f17058064f3f56eeb02a5f67b4b4",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x32f6d8bc2270e39de3a25c3d8d7b31595eef7d3eb5122eece96edf18a7b8290f",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1f0",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x0",
- "timestamp": "0x1360",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xe521dace14e46c9d8491f262d38c1741f6fa385466a68c7ceadd08c1515600d3",
- "transactions": [],
- "withdrawals": [
- {
- "index": "0x53",
- "validatorIndex": "0x5",
- "address": "0x6cc0ab95752bf25ec58c91b1d603c5eb41b8fbd7",
- "amount": "0x64"
- }
- ],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x5e1834c653d853d146db4ab6d17509579497c5f4c2f9004598bcd83172f07a5f"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np497",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xe521dace14e46c9d8491f262d38c1741f6fa385466a68c7ceadd08c1515600d3",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0x4e1202b318372f0cacbc989e0aa420c4280dcb8ecd7c3bb05c645bf9fb27d54e",
- "receiptsRoot": "0x18ff29662320d2c1d830d59b45b908cc2e4b65c1df400d3b8492ba583a1e3342",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1f1",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x146ec",
- "timestamp": "0x136a",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x3464afae6c8c9839a124b8dba3d363e646b61c9160a61b1c231c67a6a72daff5",
- "transactions": [
- "0xf88382018e08830146ec8080ae43600052600060205260405b604060002060208051600101905281526020016102408110600b57506102006040f38718e5bb3abd109fa0d9866a4e71a4efbccc717617f5c712557608513ce8b49f6e24fc06e0d717b7b6a056d3c051f6dbe09a1c94e23499ba8014f74e123caa3252068ee67e8f25e1e323"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x9f78a30e124d21168645b9196d752a63166a1cf7bbbb9342d0b8fee3363ca8de"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np498",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x3464afae6c8c9839a124b8dba3d363e646b61c9160a61b1c231c67a6a72daff5",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xd04a20f359c38d0cb7a31e5e7b002251c15e0242b864964ddbe9642d1c8f7e30",
- "receiptsRoot": "0xe40714733f96bc282c17b688a91dfb6d070114fc7bc3f095887afa3567af588c",
- "logsBloom": "0x00400000000001400400000000000000020000000000000000000000400000000000000000400000000000000000000000040100000000800000000000000000000000000000010000000000000000080000000000000000008100000000000000000000000000000000000000200000300000008000000000000010002000000000000000008000000000000000000000000000000000000000100000000000000000000000000000000004000000000000100001000000480000000000000000000000000000000000000000000000000000440000000000000000000010000000000100000000000000000000000000000000000000000000000000800000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1f2",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0xfc65",
- "timestamp": "0x1374",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0xf7ad3df877f1a7ac6d94087db3f3e01a80264b0909e681bf9c7d21879df0df5d",
- "transactions": [
- "0xf87a82018f0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0dd12539d461aa41247581166cecdf2eb60a75ac780929c9e6b982d9625aadc1fa06b813ce4e36c5147759f90672f6e239fab2851a63ac3b998ead89c0ead85589b"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x1f7c1081e4c48cef7d3cb5fd64b05135775f533ae4dabb934ed198c7e97e7dd8"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np499",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0xf7ad3df877f1a7ac6d94087db3f3e01a80264b0909e681bf9c7d21879df0df5d",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xbd38c27a1fad5fb839aad98a9c6719652d1714351f24d786b23bf23076b31ba6",
- "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1f3",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x1d36e",
- "timestamp": "0x137e",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x96a73007443980c5e0985dfbb45279aa496dadea16918ad42c65c0bf8122ec39",
- "transactions": [
- "0xf865820190088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a012969b1c46cb1b69a3fdf15b8bbccc1574572b79b38bf81803c91b0384309545a06d1c09143ad2bfeccbb04d63441058c83b60a5cbfdad87db36421dfcf008cd16"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0x4d40a7ec354a68cf405cc57404d76de768ad71446e8951da553c91b06c7c2d51"
- ]
- },
- {
- "jsonrpc": "2.0",
- "id": "np500",
- "method": "engine_newPayloadV3",
- "params": [
- {
- "parentHash": "0x96a73007443980c5e0985dfbb45279aa496dadea16918ad42c65c0bf8122ec39",
- "feeRecipient": "0x0000000000000000000000000000000000000000",
- "stateRoot": "0xea4c1f4d9fa8664c22574c5b2f948a78c4b1a753cebc1861e7fb5b1aa21c5a94",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "blockNumber": "0x1f4",
- "gasLimit": "0x47e7c40",
- "gasUsed": "0x5208",
- "timestamp": "0x1388",
- "extraData": "0x",
- "baseFeePerGas": "0x7",
- "blockHash": "0x36a166f0dcd160fc5e5c61c9a7c2d7f236d9175bf27f43aaa2150e291f092ef7",
- "transactions": [
- "0xf868820191088252089415af6900147a8730b5ce3e1db6333f33f64ebb2c01808718e5bb3abd109fa085b3c275e830c2034a4666e3a57c8640a8e5e7b7c8d0687467e205c037b4c5d7a052e2aa8b60be142eee26f197b1e0a983f8df844c770881d820dfc4d1bb3d9adc"
- ],
- "withdrawals": [],
- "blobGasUsed": "0x0",
- "excessBlobGas": "0x0"
- },
- [],
- "0xf653da50cdff4733f13f7a5e338290e883bdf04adf3f112709728063ea965d6c"
- ]
- }
-]
\ No newline at end of file
diff --git a/cmd/devp2p/internal/ethtest/testdata/txinfo.json b/cmd/devp2p/internal/ethtest/testdata/txinfo.json
deleted file mode 100644
index 8e1d917fb7..0000000000
--- a/cmd/devp2p/internal/ethtest/testdata/txinfo.json
+++ /dev/null
@@ -1,3018 +0,0 @@
-{
- "deploy-callenv": {
- "contract": "0x9344b07175800259691961298ca11c824e65032d",
- "block": "0x1"
- },
- "deploy-callme": {
- "contract": "0x17e7eedce4ac02ef114a7ed9fe6e2f33feba1667",
- "block": "0x2"
- },
- "randomcode": null,
- "randomlogs": null,
- "randomstorage": null,
- "uncles": {
- "11": {
- "hashes": [
- "0x900edfd7e6de8a4a4ae18d2e7df829de69427e06eb9a381c3fe1e3002a750d75"
- ]
- },
- "16": {
- "hashes": [
- "0x750eda0129037fbbcfcbfd6362a60ffbbc53a3f14ba9259cf2ac7f02da2a827c"
- ]
- },
- "21": {
- "hashes": [
- "0x763d1a545e23079b4796461f2146cd3b24cc45ceab6e932db010bd2736e45403"
- ]
- },
- "26": {
- "hashes": [
- "0x98180f6103a7e303444de4e152e81539ad614d0cd755e0e655715ab676d11e32"
- ]
- },
- "31": {
- "hashes": [
- "0x04a8c9b6d23b2ada25bff618036c08bf6428fb35b89bce694607fac697f470e3"
- ]
- },
- "36": {
- "hashes": [
- "0x9225da0395e14243f1e626b330ea8fe6afde356e50e8448936a29e1c203d661d"
- ]
- },
- "41": {
- "hashes": [
- "0x74a80b9b13a264aff16e9156de67474c916de966327e9e1666fc2027e1bf63ad"
- ]
- },
- "46": {
- "hashes": [
- "0xcf2bddf3649c7af6e9c8592aa5fad693f39f46369749e1c7127848d4ae9ff1ec"
- ]
- },
- "51": {
- "hashes": [
- "0xeb31c29a94de8cf2fc3d0b80023b716fb5d31cc24d695d606eef2389705ade45"
- ]
- },
- "56": {
- "hashes": [
- "0xb3a6af7632306e2dbd56b3bbf0e77d7b5c199053f348c74ce938afae615cd4fe"
- ]
- },
- "6": {
- "hashes": [
- "0x97186bc5df663e72934212ab5a7b4449f07f12f44b267e119817791fe0ed66c5"
- ]
- },
- "61": {
- "hashes": [
- "0x3a2cf075f456fcf264293a32d41f72506ad8cf9697d6b6d8ab3d8258cdaa90bd"
- ]
- },
- "66": {
- "hashes": [
- "0x94d338db2e75740d17df19b0d8a111d5d68b2dfa38819b88929190b4b08b5993"
- ]
- },
- "71": {
- "hashes": [
- "0xe9938f6ac90bc4dfdea315ed630b03ad9392b264d362ee1e1b2703fb3db5047a"
- ]
- }
- },
- "valuetransfer": [
- {
- "block": "0x7",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "nonce": "0x5",
- "to": "0xca358758f6d27e6cf45272937977a748fd88391d",
- "gas": "0x5208",
- "gasPrice": "0x1",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x1c",
- "r": "0x7252efaed5a8dbefd451c8e39a3940dc5c6a1e81899e0252e892af3060fd90ed",
- "s": "0x30b6bd9550c9685a1175cece7f680732ac7d3d5445160f8d9309ec1ddba414be",
- "hash": "0xd04f2bb15db6c40aaf1dcb5babc47914b5f6033b2925cb9daa3c0e0dab493fcb"
- }
- },
- {
- "block": "0xc",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x9",
- "to": "0xef6cbd2161eaea7943ce8693b9824d23d1793ffb",
- "gas": "0x5208",
- "gasPrice": "0x1",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x1160803ff1253dead1d84d68a06cb92fcbb265ddb0edb9a5200b28b8c834ce6b",
- "s": "0x4f1f42c91a7b177f696fc1890de6936097c205f9dcd1d17a4a83ac4d93d84d9c",
- "hash": "0x778450f223b07f789e343c18207a3388c01070c2f6a89506f2db4c656bc1a37f"
- }
- },
- {
- "block": "0x11",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xd",
- "to": "0x4a64a107f0cb32536e5bce6c98c393db21cca7f4",
- "gas": "0x5208",
- "gasPrice": "0x1",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0xea20f9d952a58697ffb40cefcab9627f552c9658b3181498fd706418f89a3360",
- "s": "0x4988596c88fe69f7d032df8e6f515a618a2c2e30f330febb3b548eb4fc1e8ca2",
- "hash": "0xc2cffc70d847fbe50a53d618de21a24629b97e8dd4c1bcbf73979b2a48ee16df"
- }
- },
- {
- "block": "0x16",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x11",
- "to": "0x7cb7c4547cf2653590d7a9ace60cc623d25148ad",
- "gas": "0x5208",
- "gasPrice": "0x1",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0x5f315b1989161bf29054e9e030a05b05b3d7efb4c60e39531b96af1690913f91",
- "s": "0x6f1d8de5adad6f76ed0d2b4c6885d3a5502c12dae1d124b310e8c8856bd22099",
- "hash": "0xfa9cd1e12446cd8c23fc76b0ae9beba0ebdc021aa87726b6febcd5ba4a504f01"
- }
- },
- {
- "block": "0x1b",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x15",
- "to": "0x77adfc95029e73b173f60e556f915b0cd8850848",
- "gas": "0x5208",
- "gasPrice": "0x1",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x148500c79a2f0d59158458da4e3b2a5ace441bf314942243c9e05da3457d394e",
- "s": "0x2a83c5f921ffddd3c0b2a05999f820d1d03bce9ac9810941bb286c4db4ce9939",
- "hash": "0xbfeeb9406545ede112801fe48aeaf30c8e2384739e8e585f1c0e726689abc4b8"
- }
- },
- {
- "block": "0x20",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x19",
- "to": "0x36a9e7f1c95b82ffb99743e0c5c4ce95d83c9a43",
- "gas": "0x5208",
- "gasPrice": "0x1",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x14346079d6d3690f923625efde8933b2ad99c2bfda9310983a21b60e3c261d3c",
- "s": "0x501ae278f370f3c0283fb04f966b6c501cbee0ad4c784f4187e38fcc38a9ccbb",
- "hash": "0x792614188c26e2f348ac3223813794c60de97b83a298e84f4bae51dda6de140c"
- }
- },
- {
- "block": "0x25",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x1d",
- "to": "0xbbf3f11cb5b43e700273a78d12de55e4a7eab741",
- "gas": "0x5208",
- "gasPrice": "0x1",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x86bc86521cc6091198253d75caf394a8e23fd4fb82b48236d29f81a95aeebec5",
- "s": "0xae9de4ac4265e3f415514905d8f8c747c959771080fa031dc5fd9b7333ffc28",
- "hash": "0xc44716fcd212d538b2d143ddec3003b209667bfc977e209e7da1e8bf3c5223b8"
- }
- },
- {
- "block": "0x2a",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x21",
- "to": "0x684888c0ebb17f374298b65ee2807526c066094c",
- "gas": "0x5208",
- "gasPrice": "0x1",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0x88fa9d9bbc92e44b8edcda67ee23aca611deac4cec336b215fb72547a1d0e07e",
- "s": "0x297c4d7054cb545bee5221a70454b6270e098f39f91bf25c0526aa8c0a0a441c",
- "hash": "0xc97ceb5b227ade5363592a68c39dcf1788abbf67b2440934b1ae11cf4b19417c"
- }
- },
- {
- "block": "0x2f",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x25",
- "to": "0x8a5edab282632443219e051e4ade2d1d5bbc671c",
- "gas": "0x5208",
- "gasPrice": "0x1",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0x649b4ad4dcf07bcfba3dd7afd2ce220d0ae463c1bcc891ab1fcae84eca6fcc69",
- "s": "0x5c69b0ad46c90eee811e4b71ce0aed22f479c207bee813dac8cce07e5a65adae",
- "hash": "0xaf340a1b347c756a11e331e771d37d9205eada520f4f0d8d27f725d7c196aed1"
- }
- },
- {
- "block": "0x34",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x29",
- "to": "0x4b227777d4dd1fc61c6f884f48641d02b4d121d3",
- "gas": "0x5208",
- "gasPrice": "0x1",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0x7d015036540013eb6aa141a2475fa1dd88d3bee57a67beaf6ef5de8f40969601",
- "s": "0x4dc750a08f793ff3105479e7919508d14abe56748698375046b995d86267b18c",
- "hash": "0x07a2a98ac904bcf4c17a773426b34d2b3120af65b12f9bfd437d48c175f364eb"
- }
- },
- {
- "block": "0x39",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x2d",
- "to": "0x19581e27de7ced00ff1ce50b2047e7a567c76b1c",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x27f555e9",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0xde8b08caa214d0087ffd11206d485cb5cde6a6b6a76b390f53d94a8c16691593",
- "s": "0x14dfe16ec3e37b8c6d3257deaf987b70b0776b97e4213c1f912c367e7d558370",
- "yParity": "0x1",
- "hash": "0xa883c918fb6e392a2448ef21051482bfcbeb5d26b7ebfad2a010a40e188cb43b"
- }
- },
- {
- "block": "0x3e",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x31",
- "to": "0x62b67e1f685b7fef51102005dddd27774be3fee3",
- "gas": "0x5208",
- "gasPrice": "0x14847701",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x6797c616a0fe0fad65b6020fc658541fd25577a3f0e7de47a65690ab81c7a34b",
- "s": "0x115e6d138f23c97d35422f53aa98d666877d513dbe5d4d8c4654500ead1f4f8f",
- "hash": "0xb2203865a1a1eace5b82c5154f369d86de851d8c5cd6a19e187f437a1ae28e94"
- }
- },
- {
- "block": "0x43",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x35",
- "to": "0x6b23c0d5f35d1b11f9b683f0b0a617355deb1127",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0xa88fcba",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0xdc3f3d86de44ee4dd795ff8ab480f4f5273c8ca61edb4c7561a369c80fbbb983",
- "s": "0x43a90e087a6f5ba014e17316ec63b97a5a9ada19ab78177c87cb39ded9b37b0d",
- "yParity": "0x0",
- "hash": "0x647d637e54f1de1216cdfd83477a067308365c837c6c317febc9d3593907c7cc"
- }
- },
- {
- "block": "0x48",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x39",
- "to": "0x44bd7ae60f478fae1061e11a7739f4b94d1daf91",
- "gas": "0x5208",
- "gasPrice": "0x568d2fa",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0x50fc2310f542cf90b3376f54d296158f5be7ad852db200f9956e3210c0f8125c",
- "s": "0x4f880fe872915a7843c37147a69758eff0a93cfaf8ce54f36502190e54b6e5c7",
- "hash": "0x77050c3fb6b1212cf2f739f781b024b210177b3bcbd5b62e2b3c00f1d41764d1"
- }
- },
- {
- "block": "0x4c",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x3d",
- "to": "0x72dfcfb0c470ac255cde83fb8fe38de8a128188e",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x32ca5d0",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x116da1fc19daf120ddc2cc3fa0a834f9c176028e65d5f5d4c86834a0b4fe2a36",
- "s": "0x17001c3ad456650dd1b28c12f41c94f50b4571da5b62e9f2a95dff4c8c3f61fd",
- "yParity": "0x0",
- "hash": "0x3e4639389b6a41ff157523860ffc77eb3e66a31aee867eb4148dcc5ee8b3c66f"
- }
- },
- {
- "block": "0x50",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x41",
- "to": "0x5c62e091b8c0565f1bafad0dad5934276143ae2c",
- "gas": "0x5208",
- "gasPrice": "0x1dce189",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0xb82a5be85322581d1e611c5871123983563adb99e97980574d63257ab98807d5",
- "s": "0xdd49901bf0b0077d71c9922c4bd8449a78e2918c6d183a6653be9aaa334148",
- "hash": "0x9c9de14ea0ce069a4df1c658e70e48aa7baaf64fddd4ab31bf4cb6d5550a4691"
- }
- },
- {
- "block": "0x55",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x45",
- "to": "0xa25513c7e0f6eaa80a3337ee18081b9e2ed09e00",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0xf4dd50",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0xe8ac7cb5028b3e20e8fc1ec90520dab2be89c8f50f4a14e315f6aa2229d33ce8",
- "s": "0x7c2504ac2e5b2fe4d430db81a923f6cc2d73b8fd71281d9f4e75ee9fc18759b9",
- "yParity": "0x0",
- "hash": "0xff5e3c25f68d57ee002b3b39229ffba0879390475a00fa67a679b707997df530"
- }
- },
- {
- "block": "0x5a",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x49",
- "to": "0xbbeebd879e1dff6918546dc0c179fdde505f2a21",
- "gas": "0x5208",
- "gasPrice": "0x7dbb16",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0x2f0119acaae03520f87748a1a855d0ef7ac4d5d1961d8f72f42734b5316a849",
- "s": "0x182ad3a9efddba6be75007e91afe800869a18a36a11feee4743dde2ab6cc54d9",
- "hash": "0xd696adb31daca7c3121e65d11dc00e5d5fdb72c227c701a2925dc19a46fbd43e"
- }
- },
- {
- "block": "0x5f",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x4d",
- "to": "0xd2e2adf7177b7a8afddbc12d1634cf23ea1a7102",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x408f23",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x8556dcfea479b34675db3fe08e29486fe719c2b22f6b0c1741ecbbdce4575cc6",
- "s": "0x1cd48009ccafd6b9f1290bbe2ceea268f94101d1d322c787018423ebcbc87ab4",
- "yParity": "0x1",
- "hash": "0x385b9f1ba5dbbe419dcbbbbf0840b76b941f3c216d383ec9deb9b1a323ee0cea"
- }
- },
- {
- "block": "0x64",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x51",
- "to": "0x18ac3e7343f016890c510e93f935261169d9e3f5",
- "gas": "0x5208",
- "gasPrice": "0x212636",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0x99aba91f70df4d53679a578ed17e955f944dc96c7c449506b577ac1288dac6d4",
- "s": "0x582c7577f2343dd5a7c7892e723e98122227fca8486debd9a43cd86f65d4448a",
- "hash": "0xd622bf64af8b9bd305e0c86152721b0711b6d24abe3748e2a8cd3a3245f6f878"
- }
- },
- {
- "block": "0x69",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x55",
- "to": "0xde7d1b721a1e0632b7cf04edf5032c8ecffa9f9a",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x11056e",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x2a6c70afb68bff0d4e452f17042700e1ea43c10fc75e55d842344c1eb55e2e97",
- "s": "0x27c64f6f48cfa60dc47bfb2063f9f742a0a4f284d6b65cb394871caca2928cde",
- "yParity": "0x0",
- "hash": "0x47efc21f94ef1ef4e9a7d76d9370713acdf8c2b822ad35409566b9251fb0bf5c"
- }
- },
- {
- "block": "0x6e",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x59",
- "to": "0x1b16b1df538ba12dc3f97edbb85caa7050d46c14",
- "gas": "0x5208",
- "gasPrice": "0x8bd6d",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0xabbde17fddcc6495e854f86ae50052db04671ae3b6f502d45ba1363ae68ee62c",
- "s": "0x3aa20e294b56797a930e48eda73a4b036b0d9389893806f65af26b05f303100f",
- "hash": "0xcf4a0a2b8229fa2f772a90fdef00d073c821c8f56d93bce703007fc5eb528e71"
- }
- },
- {
- "block": "0x73",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x5d",
- "to": "0x043a718774c572bd8a25adbeb1bfcd5c0256ae11",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x47cdd",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x2ae4b3f6fa0e08145814f9e8da8305b9ca422e0da5508a7ae82e21f17d8c1196",
- "s": "0x77a6ea7a39bbfe93f6b43a48be83fa6f9363775a5bdb956c8d36d567216ea648",
- "yParity": "0x1",
- "hash": "0xded7c87461fb84ffd49426b474741c2eace8982edf07af918bf8794415742384"
- }
- },
- {
- "block": "0x78",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x61",
- "to": "0x2d711642b726b04401627ca9fbac32f5c8530fb1",
- "gas": "0x5208",
- "gasPrice": "0x24deb",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0xb4d70622cd8182ff705beb3dfa5ffa4b8c9e4b6ad5ad00a14613e28b076443f6",
- "s": "0x676eb97410d3d70cfa78513f5ac156b9797abbecc7a8c69df814135947dc7d42",
- "hash": "0x9e2b47fc494a2285f98c89949878e11f7c6d47d24ae95bdab2801333ea8d11a7"
- }
- },
- {
- "block": "0x7d",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x65",
- "to": "0xd10b36aa74a59bcf4a88185837f658afaf3646ef",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x12eea",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x882e961b849dc71672ce1014a55792da7aa8a43b07175d2b7452302c5b3cac2a",
- "s": "0x41356d00a158aa670c1a280b28b3bc8bb9d194a159c05812fa0a545f5b4bc57b",
- "yParity": "0x0",
- "hash": "0x240efcc882536fad14fcd34be50b508cb4c39b39f1493b8d64682760505b6cf7"
- }
- },
- {
- "block": "0x82",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x69",
- "to": "0xa5ab782c805e8bfbe34cb65742a0471cf5a53a97",
- "gas": "0x5208",
- "gasPrice": "0x9b8c",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0x78e180a6afd88ae67d063c032ffa7e1ee629ec053306ce2c0eb305b2fb98245e",
- "s": "0x7563e1d27126c9294391a71da19044cb964fd6c093e8bc2a606b6cb5a0a604ac",
- "hash": "0xa28d808cbc5ef9e82cd5023ea542fab4052895618b8627c000bb8cc8ccc2e693"
- }
- },
- {
- "block": "0x87",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x6d",
- "to": "0x4bfa260a661d68110a7a0a45264d2d43af9727de",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x4fe1",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0xbb105cab879992d2769014717857e3c9f036abf31aa59aed2c2da524d938ff8",
- "s": "0x3b5386a238de98973ff1a9cafa80c90cdcbdfdb4ca0e59ff2f48c925f0ea872e",
- "yParity": "0x1",
- "hash": "0x83adc66f82e98155384ae9ef0e5be253eba9be959a50bcb48a7a3e6df97d6996"
- }
- },
- {
- "block": "0x8c",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x71",
- "to": "0x9defb0a9e163278be0e05aa01b312ec78cfa3726",
- "gas": "0x5208",
- "gasPrice": "0x2907",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x4adf7509b10551a97f2cb6262c331096d354c6c8742aca384e63986006b8ac93",
- "s": "0x581250d189e9e1557ccc88190cff66de404c99754b4eb3c94bb3c6ce89157281",
- "hash": "0x8e285b12f0ec16977055c8bc17008411883af1b5b33883a8128e50ed3e585685"
- }
- },
- {
- "block": "0x91",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x75",
- "to": "0x7da59d0dfbe21f43e842e8afb43e12a6445bbac0",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x1513",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x6ca026ba6084e875f3ae5220bc6beb1cdb34e8415b4082a23dd2a0f7c13f81ec",
- "s": "0x568da83b9f5855b786ac46fb241eee56b6165c3cc350d604e155aca72b0e0eb1",
- "yParity": "0x0",
- "hash": "0x41ca48c0312c6d3fc433f9fd363281dae924885f73ab7466f9e8c97d6ea3b993"
- }
- },
- {
- "block": "0x96",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x79",
- "to": "0x84873854dba02cf6a765a6277a311301b2656a7f",
- "gas": "0x5208",
- "gasPrice": "0xad4",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0xab3202c9ba5532322b9d4eb7f4bdf19369f04c97f008cf407a2668f5353e8a1f",
- "s": "0x5affa251c8d29f1741d26b42a8720c416f7832593cd3b64dff1311a337799e8f",
- "hash": "0x7527f1a2c9cad727c70ca0d2117fc52dbfff87962411d0b821e7418a42abd273"
- }
- },
- {
- "block": "0x9b",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x7d",
- "to": "0x8d36bbb3d6fbf24f38ba020d9ceeef5d4562f5f2",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x592",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0xf9075613b9069dab277505c54e8381b0bb91032f688a6fe036ef83f016771897",
- "s": "0x4cb4fc2e695439af564635863f0855e1f40865997663d900bc2ab572e78a70a2",
- "yParity": "0x1",
- "hash": "0xab2e87692b96ba3083b497227a9a17671bc5eee7ff12d50b850f442a4cdcd8b5"
- }
- },
- {
- "block": "0xa0",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x81",
- "to": "0xc19a797fa1fd590cd2e5b42d1cf5f246e29b9168",
- "gas": "0x5208",
- "gasPrice": "0x2de",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x857754afc3330f54a3e6400f502ad4a850a968671b641e271dcb9f68aacea291",
- "s": "0x7d8f3fb2f3062c39d4271535a7d02960be9cb5a0a8de0baef2211604576369bf",
- "hash": "0x64f8f0ad9c6526cb33e626626a25b8660a546aefa002692e46cd4d0331cd26ed"
- }
- },
- {
- "block": "0xa5",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x85",
- "to": "0x6922e93e3827642ce4b883c756b31abf80036649",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x17b",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x89e6d36baf81743f164397205ded9e5b3c807e943610d5b9adb9cfeb71b90299",
- "s": "0x3d56c57f842a92a5eb71c8f9f394fe106d993960421c711498013806957fdcaf",
- "yParity": "0x0",
- "hash": "0x33b886e4c1c43507a08f0da97d083aa507cf905a90c17ffe20a2a24296f2db31"
- }
- },
- {
- "block": "0xaa",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x89",
- "to": "0xbceef655b5a034911f1c3718ce056531b45ef03b",
- "gas": "0x5208",
- "gasPrice": "0xc5",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x626dfd18ca500eedb8b439667d9b8d965da2f2d8ffcd36a5c5b60b9a05a52d9f",
- "s": "0x7271175e4b74032edeb9b678ffb5e460edb2986652e45ff9123aece5f6c66838",
- "hash": "0xe92638806137815555a0ffe5cc4c2b63b29171fd6f2473736201d8c3c3dbb748"
- }
- },
- {
- "block": "0xaf",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x8d",
- "to": "0x5a6e7a4754af8e7f47fc9493040d853e7b01e39d",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x68",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x8c62285d8318f84e669d3a135f99bbfe054422c48e44c5b9ce95891f87a37122",
- "s": "0x28e75a73707ee665c58ff54791b62bd43a79de1522918f4f13f00ed4bd82b71b",
- "yParity": "0x1",
- "hash": "0x3f9133ad0b7430b124cc4b1213bc3fa72be41a58584ca05e8d863ec728890873"
- }
- },
- {
- "block": "0xb4",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x91",
- "to": "0x27952171c7fcdf0ddc765ab4f4e1c537cb29e5e5",
- "gas": "0x5208",
- "gasPrice": "0x39",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x76a045602a7de6b1414bdc881a321db0ce5255e878a65513bad6ac3b7f473aa7",
- "s": "0x1a33017b5bcf6e059de612293db8e62b4c4a3414a7ba057c08dd6172fb78a86c",
- "hash": "0x201f5041569d4dd9e5cc533867f1864daf1a7ee1a424d703d7aa8a43b07b491d"
- }
- },
- {
- "block": "0xb9",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x95",
- "to": "0x04d6c0c946716aac894fc1653383543a91faab60",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x20",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x39c18634a9f085ba0cd63685a54ef8f5c5b648856382896c7b0812ee603cd8a",
- "s": "0x5ecfde61ea3757f59f0d8f0c77df00c0e68392eea1d8b76e726cb94fb5052b8a",
- "yParity": "0x0",
- "hash": "0xf83394fd19018fd54a5004121bc780995f99cb47832ddb11f7c50bf507606202"
- }
- },
- {
- "block": "0xbe",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x99",
- "to": "0x478508483cbb05defd7dcdac355dadf06282a6f2",
- "gas": "0x5208",
- "gasPrice": "0x13",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x910304dbb7d545a9c528785d26bf9e4c06d4c84fdb1b8d38bc6ee28f3db06178",
- "s": "0x2ffc39c46a66af7b3af96e1e016a62ca92fc5e7e6b9dbe631acbdc325b7230a1",
- "hash": "0x586f6726554ffef84726c93123de9fb1f0194dfd55ed7ca3ceae67e27b1f4fef"
- }
- },
- {
- "block": "0xc3",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x9d",
- "to": "0xae3f4619b0413d70d3004b9131c3752153074e45",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0xc",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x7cb73f8bf18eacc2c753098683a80208ac92089492d43bc0349e3ca458765c54",
- "s": "0x3bf3eb6da85497e7865d119fde3718cdac76e73109384a997000c0b153401677",
- "yParity": "0x1",
- "hash": "0xadfacbcb99b52f33c74cbd7c45d1f0d31efc4a3f025f9832cf28e666c79c8e4c"
- }
- },
- {
- "block": "0xc8",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xa1",
- "to": "0x7c5bd2d144fdde498406edcb9fe60ce65b0dfa5f",
- "gas": "0x5208",
- "gasPrice": "0x9",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x15f510b05236b83a9370eb084e66272f93b4b646e225bdef016b01b3ac406391",
- "s": "0x3b4a2b683af1cb3ecae367c8a8e59c76c259ce2c5c5ffd1dc81de5066879e4b8",
- "hash": "0xed00ce6bd533009ddfb39d7735f1e2c468a231cf4c5badb59d1e1234c5fe3794"
- }
- },
- {
- "block": "0xcd",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xa5",
- "to": "0x9a7b7b3a5d50781b4f4768cd7ce223168f6b449b",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x4f3e818870a240e585d8990561b00ad3538cf64a189d0f5703a9431bc8fd5f25",
- "s": "0x312f64dd9ab223877e94c71d83cb3e7fe359b96250d6a3c7253238979dd2f32a",
- "yParity": "0x0",
- "hash": "0x883c915c1ef312df1e499ef78d09767a374706d8ec89af9c65c46acd675bf817"
- }
- },
- {
- "block": "0xd2",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xa9",
- "to": "0x85f97e04d754c81dac21f0ce857adc81170d08c6",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x547e9550b5c687a2eb89c66ea85e7cd06aa776edd3b6e3e696676e22a90382b0",
- "s": "0x28cb3ab4ef2761a5b530f4e05ef50e5fc957cfbc0342f98b04aa2882eec906b2",
- "hash": "0x27d83955c23134e42c9beaa88332f770d09e589354c1047870328b7a2f8612c9"
- }
- },
- {
- "block": "0xd7",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xad",
- "to": "0x414a21e525a759e3ffeb22556be6348a92d5a13e",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x47b3309af68dd86089494d30d3356a69a33aa30945e1f52a924298f3167ab66",
- "s": "0xb8b7bd6670a8bbcb89555528ff5719165363988aad1905a90a26c02633f8b9",
- "yParity": "0x1",
- "hash": "0xb75adb0bd26a8060f67c947b699471d71a66c61f2b8c6903a776c3eca7ad731e"
- }
- },
- {
- "block": "0xdc",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xb1",
- "to": "0xfb95aa98d6e6c5827a57ec17b978d647fcc01d98",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0xc71a69f756a2ef145f1fb1c9b009ff10af72ba0ee80ce59269708f917878bfb0",
- "s": "0x3bfe6a6c41b3fe72e8e12c2927ee5df6d3d37bd94346a2398d4fcf80e1028dde",
- "hash": "0x0301d78cc4bc0330c468026de4671377a07560c2356293c2af44334e6424361a"
- }
- },
- {
- "block": "0xe1",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xb5",
- "to": "0xf031efa58744e97a34555ca98621d4e8a52ceb5f",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x99b1b125ecb6df9a13deec5397266d4f19f7b87e067ef95a2bc8aba7b9822348",
- "s": "0x56e2ee0d8be47d342fe36c22d4a9be2f26136dba3bd79fa6fe47900e93e40bf3",
- "yParity": "0x1",
- "hash": "0x6e07cf26de1881f062629d9efa026c55b9e8084082086e974ddeb66654cd9530"
- }
- },
- {
- "block": "0xe6",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xb9",
- "to": "0x0a3aaee7ccfb1a64f6d7bcd46657c27cb1f4569a",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0xd2aa10777b7c398921921258eeecaff46668278fd6f814ea4edb06f2a1076353",
- "s": "0x542ef4ed484a1403494238e418bb8d613012871710e72dde77bb1fa877f1fae3",
- "hash": "0xd77aeb22fbd8f99b75c970995d226b6985f2dcac6f22d65aa5d492d66e90f53f"
- }
- },
- {
- "block": "0xeb",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xbd",
- "to": "0xf8d20e598df20877e4d826246fc31ffb4615cbc0",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0xc982933a25dd67a6d0b714f50be154f841a72970b3ed52d0d12c143e6a273350",
- "s": "0x7a9635960c75551def5d050beee4014e4fef2353c39d300e649c199eebc8fd5e",
- "yParity": "0x1",
- "hash": "0x597bc815e8b0c315e692257aabe4ecfce7055fa3659f02dd8444c7d58c9055f3"
- }
- },
- {
- "block": "0xf0",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xc1",
- "to": "0xfde502858306c235a3121e42326b53228b7ef469",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0x3d79397e88a64f6c2ca58b5ec7ba305012e619331946e60d6ab7c40e84bf1a34",
- "s": "0x4278773d2796a0944f6bedadea3794b7ad6a18ffd01496aabf597d4a7cf75e17",
- "hash": "0xe9c1c01813ee52f2a9b8aa63e200714c7527315caf55d054890c10acc73c6cec"
- }
- },
- {
- "block": "0xf5",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xc5",
- "to": "0x27abdeddfe8503496adeb623466caa47da5f63ab",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0xdeade75f98612138653ca1c81d8cc74eeda3e46ecf43c1f8fde86428a990ae25",
- "s": "0x65f40f1aaf4d29268956348b7cc7fa054133ccb1522a045873cb43a9ffa25283",
- "yParity": "0x1",
- "hash": "0x2beff883cd58f8d155069d608dfc47f730a07f1ed361987b008c17a4b8b84a4b"
- }
- },
- {
- "block": "0xfa",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xc9",
- "to": "0xaa7225e7d5b0a2552bbb58880b3ec00c286995b8",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x968ae76ffc10f7b50ca349156119aaf1d81a8772683d1c3ed005147f4682694",
- "s": "0x60f5f10a015e8685a3099140c2cc3ba0dc69026df97fb46748008c08978d162a",
- "hash": "0x084d5438c574a2332976d95cfae552edb797001b5af69eacf4486538ab4bdbd2"
- }
- },
- {
- "block": "0xff",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xcd",
- "to": "0xa8100ae6aa1940d0b663bb31cd466142ebbdbd51",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x54eafef27c71a73357c888f788f1936378929e1cdb226a205644dc1e2d68f32b",
- "s": "0x59af490b8ef4a4e98a282d9046655fc8818758e2af8ace2489927aaa3890fda3",
- "yParity": "0x0",
- "hash": "0xecce661913425dbe38e2d30e7ec20ead32185d76f516525148d2647ee94aac8e"
- }
- },
- {
- "block": "0x104",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xd1",
- "to": "0xa8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x4c1d18013fb8b0554b8aaa549ee64a5a33c98edd5e51257447b4dd3b37f2ade",
- "s": "0x5e3a37e5ddec2893b3fd38c4983b356c26dab5abb8b8ba6f56ac1ab9e747268b",
- "hash": "0x0d903532e3740a8fb644943befee0187e6180eb31a327afc73e042ec314c02cc"
- }
- },
- {
- "block": "0x109",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xd5",
- "to": "0xac9e61d54eb6967e212c06aab15408292f8558c4",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x898d514a1f15103335e066d0625c4ec34a69a03480d67dcb3d3fe0f4f932100a",
- "s": "0x7e130fed862c1482467d112f64fb59e005068b52c291003c908b625b4993e20e",
- "yParity": "0x1",
- "hash": "0xdd62d8c48dd14b156b3ea74d123fe3ddd7bc7700d0f189df3761ec7a8d65d1e9"
- }
- },
- {
- "block": "0x10e",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xd9",
- "to": "0x653b3bb3e18ef84d5b1e8ff9884aecf1950c7a1c",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0xf1c5d5e335842170288da2c7c7af6856ea0b566d2b4ab4b00a19cb94144d466c",
- "s": "0x2043677d1c397a96a2f8a355431a59a0d5c40fc053e9c45b6872464f3c77c5dc",
- "hash": "0x284452da997f42dbe0e511078f5005514fdeda8d0905439fe2f3a5ecc3aec1ac"
- }
- },
- {
- "block": "0x113",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xdd",
- "to": "0xd8c50d6282a1ba47f0a23430d177bbfbb72e2b84",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x4330fe20e8b84e751616253b9bccc5ff2d896e00593bfbef92e81e72b4d98a85",
- "s": "0x7977b87c7eca1f6a8e4a535cb26860e32487c6b4b826623a7390df521b21eac7",
- "yParity": "0x1",
- "hash": "0xd667f29e2cccf282a82791cb46f9181ad04c8179bc11af957c499b3627907a6f"
- }
- },
- {
- "block": "0x118",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xe1",
- "to": "0xb519be874447e0f0a38ee8ec84ecd2198a9fac77",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0xcfbd9ff7eeb9aef477970dcba479f89c7573e6167d16d0882ead77b20aaee690",
- "s": "0x1e34175b1b1758a581ca13f2ca021698933b1e8269c70fcb94c5e4aa39ee9b8e",
- "hash": "0x935596bc447ea87dca90e3bac15f679129af2c813abe1657811f70dcafe660c2"
- }
- },
- {
- "block": "0x11d",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xe5",
- "to": "0xaf2c6f1512d1cabedeaf129e0643863c57419732",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0xc23170a740ba640770aca9fb699a2799d072b2466c97f126a834d86bdb22f516",
- "s": "0x3f242217b60ab672f352ae51249a8876a034ee51b6b4ad4a41b4d300c48e79f4",
- "yParity": "0x1",
- "hash": "0xc659a1be386492afe2ca97cbbe9d1645763b502030c17e3acf9d539e22b74093"
- }
- },
- {
- "block": "0x122",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xe9",
- "to": "0xb70654fead634e1ede4518ef34872c9d4f083a53",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0x953d5aa69077225dba6a0333ea4d69a05f652e0d2abb8df492a7e6a9d0cdbe3d",
- "s": "0x4e41cb847aa131b9bb1e19cb3dd5f7a6cc2ac8b7f459ab8c3061380d41721ff",
- "hash": "0x6f7f93620049c80ba6429e3c2f7563f7048f725f245c22bcc6de438fd394bb7e"
- }
- },
- {
- "block": "0x127",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xed",
- "to": "0xbe3eea9a483308cb3134ce068e77b56e7c25af19",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x190737acd3a2a298d5a6f96a60ced561e536dd9d676c8494bc6d71e8b8a90b60",
- "s": "0x2c407a67004643eba03f80965fea491c4a6c25d90d5a9fd53c6a61b62971e7c5",
- "yParity": "0x0",
- "hash": "0xe48311c620199dfc77bc280caa0a1bcbbd00457b079a7154a6f8bc229beb41f1"
- }
- },
- {
- "block": "0x12c",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xf1",
- "to": "0x08037e79bb41c0f1eda6751f0dabb5293ca2d5bf",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0xe3edf14f32e7cacb36fd116b5381fac6b12325a5908dcec2b8e2c6b5517f5ec5",
- "s": "0x51429c4c1e479fa018b7907e7e3b02a448e968368a5ce9e2ea807525d363f85e",
- "hash": "0xa960e3583c41a164dc743eac939626f891f20f7dfdf71f204c2f84ca1087ae90"
- }
- },
- {
- "block": "0x131",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xf5",
- "to": "0xf16ba6fa61da3398815be2a6c0f7cb1351982dbc",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x8dac03d829e6f8eab08661cd070c8a58eed41467ad9e526bb3b9c939e3fd4482",
- "s": "0x2ac7208f150195c44c455ddeea0bbe104b9121fef5cba865311940f4de428eec",
- "yParity": "0x1",
- "hash": "0xc7ccef252840e9fc1821f2c2eb0ca8c9508ff3f4c23f85322e09dd9313849694"
- }
- },
- {
- "block": "0x136",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xf9",
- "to": "0x17333b15b4a5afd16cac55a104b554fc63cc8731",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0xf2179ec11444804bb595a6a2f569ea474b66e654ff8d6d162ec6ed565f83c1aa",
- "s": "0x657ed11774d5d4bb0ed0eb1206d1d254735434a0c267912713099336c2dc147a",
- "hash": "0x45ed5258df6ecd5ba8b99db384e39d22c193662830e79f972547d81e3857cc70"
- }
- },
- {
- "block": "0x13b",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0xfd",
- "to": "0xd20b702303d7d7c8afe50344d66a8a711bae1425",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x67bed94b25c4f3ab70b3aae5cd44c648c9807cdf086299e77cf2977b9bce8244",
- "s": "0x76661b80df9b49579fce2e2201a51b08ecc4eb503d5f5517ecb20156fde7ec5a",
- "yParity": "0x1",
- "hash": "0xa3b085cc524be64d822be105f3bb92c05c773cb93bffc774ba9aac21f9603ce6"
- }
- },
- {
- "block": "0x140",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x101",
- "to": "0xdd1e2826c0124a6d4f7397a5a71f633928926c06",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x1f5208621cee9149c99848d808ee0fa8d57b358afbd39dc594f383b7f525f4c6",
- "s": "0x1960c6254e869f06cfa3263972aa8e7cc79aec12caa728515c420d35b1336c0e",
- "hash": "0x34671329e36adeee3261ea7313388804f481e6a0e2f77cce6961aed112498803"
- }
- },
- {
- "block": "0x145",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x105",
- "to": "0x1219c38638722b91f3a909f930d3acc16e309804",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x63adb9abb5014935b3dbf8c31059d6f1d9e12068a3f13bd3465db2b5a7f27f98",
- "s": "0x56f0f5bed39985d0921989b132e9638472405a2b1ba757e22df3276ca9b527fa",
- "yParity": "0x1",
- "hash": "0x7bfa3e961b16291e9ee2f4dc0b6489bb0b12ff7a6ed6491c100dd1041472ff9e"
- }
- },
- {
- "block": "0x14a",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x109",
- "to": "0x1f5746736c7741ae3e8fa0c6e947cade81559a86",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0xedd3402a6c7a96114e4c8520d7bf3f06c00d9f24ee08de4c8afdbf05b4487b7d",
- "s": "0x68cd4cf2242a8df916b3594055ee05551b77021bbea9b9eb9740f9a8e6466d80",
- "hash": "0x90ea391ff615d345ad4e35e53af26e283fc2fd9ecb3221a9610fb2a376c38caf"
- }
- },
- {
- "block": "0x14f",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x10d",
- "to": "0x9ae62b6d840756c238b5ce936b910bb99d565047",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x25cc19f12be3ff2a51342412dc152953e8e8b61c9c3858c9d476cc214be4e30",
- "s": "0x193960b0d01b790ef99b9a39b7475d18e83499f1635fc0a3868fc67c4da5b2c3",
- "yParity": "0x0",
- "hash": "0xa1ea0831d6727a0e7316822d3cc3815f1e2ba71e124fcd8b886610d5d42fd5ff"
- }
- },
- {
- "block": "0x154",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x111",
- "to": "0xb55a3d332d267493105927b892545d2cd4c83bd6",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0x73cc84153b8891468325ac12743faf7e373b78dbf8b9f856cb2622c7b4fd10e1",
- "s": "0x388714fe9d2f85a88b962e213cbe1fa3c4a9823cea051cf91c607ecbd90093d8",
- "hash": "0xd30ff6e59e0e1278dab8083cb01e1e66900adc72cc4263cbdffc98e08a728b89"
- }
- },
- {
- "block": "0x159",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x115",
- "to": "0xb68176634dde4d9402ecb148265db047d17cb4ab",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x9f3175e9aa2fe2332600b71de0b0977c7c60ccbeee66ea360226326817f2d59b",
- "s": "0x6a870e0876002f789b3203f4a33d5e621ac67051704e1f2260b80d816260b3e6",
- "yParity": "0x0",
- "hash": "0x5565d4f07ad007f4bfe27837904f2ce365cff6c036aa5169df651f217944b1f4"
- }
- },
- {
- "block": "0x15e",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x119",
- "to": "0xdfe052578c96df94fa617102199e66110181ed2c",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x20ee6a1ada31c18eac485e0281a56fc6d8c4152213d0629e6d8dd325adb60b1",
- "s": "0xf72e01c463b98817219db62e689416c510866450efc878a6035e9346a70795f",
- "hash": "0x9055a34f1c764ce297f1bce6c94680a0e8d532debeb6af642c956122f4c7d079"
- }
- },
- {
- "block": "0x163",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x11d",
- "to": "0x33fc6e8ad066231eb5527d1a39214c1eb390985d",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x167190e2e0fed95ab5c7265a53f25a92d659e1d46eb9ecbac193e7151b82ec1c",
- "s": "0x269353e9c5ef331135563e2983279669220687652e7f231725303ccf7d2a8ebd",
- "yParity": "0x1",
- "hash": "0x0aa77f1fa0e9ab541616fb3104788109f84010d4b410508e5779f052ee49c5b9"
- }
- },
- {
- "block": "0x168",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x121",
- "to": "0x662fb906c0fb671022f9914d6bba12250ea6adfb",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0xd3a858be3712102b61ec73c8317d1e557043f308869f4a04e3a4578e2d9aa7e7",
- "s": "0x202a5f044cc84da719ec69b7985345b2ef82cf6b0357976e99e46b38c77fe613",
- "hash": "0x01bdc2fb7f53293c98e430dc42b1ef18773493f0f1bd03460eb45e438168048d"
- }
- },
- {
- "block": "0x16d",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x125",
- "to": "0xf1fc98c0060f0d12ae263986be65770e2ae42eae",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x6563737b6bfddfb8bc5ec084651a8e51e3b95fe6ed4361065c988acaf764f210",
- "s": "0xa96a1747559028cd02304adb52867678419ebef0f66012733fea03ee4eae43b",
- "yParity": "0x0",
- "hash": "0x36cf0f21e046b484333889a22e4880ad05807f2922340e6e822591cfa5138815"
- }
- },
- {
- "block": "0x172",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x129",
- "to": "0xa92bb60b61e305ddd888015189d6591b0eab0233",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x626bd8978288bcf1d7719926fba91597d6aa8ead945c89044693d780523a05dd",
- "s": "0x74494ccf5362aa73db798940296b77b80a7ec6037f5ed2c946094b9df8a2347",
- "hash": "0x8cb5e311a3e79a31c06afaecbbf9c814759f039f55b06ead4e8a1c2933766c8c"
- }
- },
- {
- "block": "0x177",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x12d",
- "to": "0x469542b3ece7ae501372a11c673d7627294a85ca",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x9add65921c40226ee4a686b9fa70c7582eba8c033ccc9c27775c6bc33c9232fb",
- "s": "0x21a6e73ccb2f16e540594b4acbba2c852a3e853742359fcbc772880879fe1197",
- "yParity": "0x0",
- "hash": "0x55c8ee8da8d54305ca22c9d7b4226539a60741ed599327d33013f8d0385c61bd"
- }
- },
- {
- "block": "0x17c",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x131",
- "to": "0x7f2dce06acdeea2633ff324e5cb502ee2a42d979",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0xfd195ea41804b21ffffdbca38fd49a9874371e51e81642917d001d201a943e24",
- "s": "0x542bca46a2dc92fddb9abffcf2b3e78dc491d6e95040692e6d1446a6b487a42a",
- "hash": "0x3964c50008f0dce6974ef2c088a84207191eb56ab4ac86cbf5d149a661ecb479"
- }
- },
- {
- "block": "0x181",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x135",
- "to": "0x3bcc2d6d48ffeade5ac5af3ee7acd7875082e50a",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x3931e5e7d02ed045834da39a409083c260fbc96dc256c1d927f1704147eeaeb6",
- "s": "0x215269010bb3e7dd8f03d71db3e617985b447c2e0dd6fc0939c125db43039d0f",
- "yParity": "0x0",
- "hash": "0x23583194a4443b0144115327770bf71f645283515ca26fc775dd23244a876e83"
- }
- },
- {
- "block": "0x186",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x139",
- "to": "0xf83af0ceb5f72a5725ffb7e5a6963647be7d8847",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0xa38cf9766454bd02d4f06f5bd214f5fe9e53b7a299eda5c7523060704fcdb751",
- "s": "0x67c33351f6f7bbd9de5b5435f6cadc10ba5e94f3cbcc40ee53496c782f99d71f",
- "hash": "0x41019c72018f2f499368e96aed89293b24873f611018c3787eeb81a0a01b667b"
- }
- },
- {
- "block": "0x18b",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x13d",
- "to": "0x469dacecdef1d68cb354c4a5c015df7cb6d655bf",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x6faf4090490862eba3c27dfe0a030a442ccc89d4478eca3ed09039386554f07b",
- "s": "0x656f741b64c54808ac5a6956540d3f7aaec811bf4efa7239a0ca0c7fb410b4d6",
- "yParity": "0x1",
- "hash": "0x054500013715ec41cb39492f2856925c7f22f80fd22365f19de8124b14e77e90"
- }
- },
- {
- "block": "0x190",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x141",
- "to": "0xf14d90dc2815f1fc7536fc66ca8f73562feeedd1",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x4a18131d30b0344910cae7c41ee5c1c23171c40292d34e9a82c9c7cef3d3836a",
- "s": "0x598a3835ad1903c3d7ad158c57ff0db10e12d8acbef318ddd0514f671a08ce94",
- "hash": "0x1b562d975247f54df92dc775c61ef8fb004714fd57d0c804dd64e44be2f10cb5"
- }
- },
- {
- "block": "0x195",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x145",
- "to": "0x360671abc40afd33ae0091e87e589fc320bf9e3d",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x9b0a44741dc7e6cb0f88199ca38f15034fab4164d9055788834e8123b7264c87",
- "s": "0x2c38a3ecda52aebc3725c65ee1cd0461a8d706ddfc9ed27d156cf50b61ef5069",
- "yParity": "0x0",
- "hash": "0x3e3bec1253082bf314cb1155ef241912bc842b8ced86b70e5e3b24585a130d66"
- }
- },
- {
- "block": "0x19a",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x149",
- "to": "0x579ab019e6b461188300c7fb202448d34669e5ff",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0xde600e017080351550412ac87f184ec2c3f672e08f1c362ab58b94631e8864dc",
- "s": "0x47d41b8691a1f7f8818e59ad473451a0edfc88826a6b808f84f56baed90d5634",
- "hash": "0x519fbf530d16289510ebb27b099ad16ad03e72227497db7a62e6c0e89d3a708a"
- }
- },
- {
- "block": "0x19f",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x14d",
- "to": "0x88654f0e7be1751967bba901ed70257a3cb79940",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0xa79b0ff9846673061d1b90a17cd8bd9e7c7f62b99b39fbe4749777d3ed4544e0",
- "s": "0x750ecfe9895402861ebea87e9b483b2c116bc2d4920329aa1c29efb9dcdf47e6",
- "yParity": "0x1",
- "hash": "0x6364bf260fee1aea143ec4a4c596d64e15252f8fa4c7ab7ae69d51ff4cbd343b"
- }
- },
- {
- "block": "0x1a4",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x151",
- "to": "0x47e642c9a2f80499964cfda089e0b1f52ed0f57d",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0xc37c23a91d6abced211855a2d6d5e383f54aa6ff40c26abc5f27a22cdafa5618",
- "s": "0x190f82ff101eabad8b9c7041006dcb3e3a9a85c814938bef8ec7d1aa63fa5892",
- "hash": "0x2ee70986d957daba62588ac40c9bf75f6707a34dc5ef5897ae7cd3998f2e05bc"
- }
- },
- {
- "block": "0x1a9",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x155",
- "to": "0xd854d6dd2b74dc45c9b883677584c3ac7854e01a",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x7a17de801de3309b57dd86df30b61553d5c04071581d243f33f43c4d64930e09",
- "s": "0x75f7e820212e8f96d7583c66548719db621537fe20f7568d5ee62176881b70e8",
- "yParity": "0x0",
- "hash": "0xbaf8e87ba94a0d70e37443c4475b2525806827b3ae964b30eb4dad7936b2eb6e"
- }
- },
- {
- "block": "0x1ae",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x159",
- "to": "0xc305dd6cfc073cfe5e194fc817536c419410a27d",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x163f29bc7be2e8fe3c6347fe4de06fa7330e3a3049c0e9dcded1795ff1c1e810",
- "s": "0x4ea7492a5e457fd21252166f5a5d5d9d5e5c7a19da2c7fd4a822bf60156b91a9",
- "hash": "0x4a84eeb0addd194ae92631aa43ed4f4fece16258bcbbc91de6324e20bde0f914"
- }
- },
- {
- "block": "0x1b3",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x15d",
- "to": "0x2143e52a9d8ad4c55c8fdda755f4889e3e3e7721",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0x673c5473955d0d26d49b25b82af905ee33ba365178f44dc4ac39221efec23c88",
- "s": "0x17f46fc9b15ba0c1ea78d4d9f773582d94f61f6471f2918cb0598f33eb9bc89b",
- "yParity": "0x1",
- "hash": "0x01b1e85401ca88bc02c33956d0bfeea9ec0b6c916f1478d4eae39818e999cb74"
- }
- },
- {
- "block": "0x1b8",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x161",
- "to": "0x0fe037febcc3adf9185b4e2ad4ea43c125f05049",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0x654dc39f93a879b9aec58ace2fdbd5c47e383cae2d14f1a49f6ec93d539be892",
- "s": "0x70505a0ef2e83f057e9844dbd56eda0949197f0c4a2b6d0f2979db1710fca4ed",
- "hash": "0xf8c7948d4418ad9948d7352c6c21dcb5b7f72664dfcfe553dfc444df7afc9c0b"
- }
- },
- {
- "block": "0x1bd",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x165",
- "to": "0x046dc70a4eba21473beb6d9460d880b8cfd66613",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x9a954eff1b0e590a3a78b724b687c6ab944181990998780d56cc3593c704996e",
- "s": "0x418db96b5dc1057f6acb018244f82ed6ece03d88c07f6ae767eaebe3b7ac9387",
- "yParity": "0x0",
- "hash": "0xf09a7e0da3b14049923d019fb5d457531ddaa4456cf84124a17479b0bfd6261b"
- }
- },
- {
- "block": "0x1c2",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x169",
- "to": "0x104eb07eb9517a895828ab01a3595d3b94c766d5",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0x597dbb3f69603be721ae0f2a63eeee9f008829ff273b54243673f9ea192ddc0a",
- "s": "0x1f7dd04defb45af840d46a950b8bede0b3ce8a718004c1ca2f3bbd4efcbd7563",
- "hash": "0x00c458459a2d2f501907a6a4122fba7ae70fb3ef632676e492912231022f80c8"
- }
- },
- {
- "block": "0x1c7",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x16d",
- "to": "0x46b61db0aac95a332cecadad86e52531e578cf1f",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x774ced5c8674413b351ae8ac3b96705d1d3db10deae39134572be985f16c008b",
- "s": "0x6f3e4b250f84fcf95ae85946da8a1c79f922a211dbe516fcfcff0180911429b8",
- "yParity": "0x0",
- "hash": "0x6603c100a34224ddb8aaeb9e234f0c611d40a5df807de68803b71e0ff0f3aea8"
- }
- },
- {
- "block": "0x1cc",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x171",
- "to": "0x8a817bc42b2e2146dc4ca4dc686db0a4051d2944",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0xa755d1c641b8965ea140ad348135496fc412ffa43a72bbd2c7c0e26b814a75f1",
- "s": "0x67d81cca370b6ea40ccd2ad3662d16fa36bd380845bee04c55c6531455d0687d",
- "hash": "0x46e00cb4ede9be515c8910a31881df229ebb2804722ad9d6723e1101a87f1889"
- }
- },
- {
- "block": "0x1d1",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x175",
- "to": "0x23e6931c964e77b02506b08ebf115bad0e1eca66",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x6263b1d5b9028231af73bfa386be8fc770e11f60137428378137c34f12c2c242",
- "s": "0x2b340f5b45217d9b914921a191ce5f7ba67af038e3b3c2c72aaca471412b02f7",
- "yParity": "0x0",
- "hash": "0xa5b751caaaff89a472fb427c17ac7637b4a9de7cda34beaaf891516278655479"
- }
- },
- {
- "block": "0x1d6",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x179",
- "to": "0x878dedd9474cfa24d91bccc8b771e180cf01ac40",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x515a62775619f55c366d080a7c397ea42dcfd2fdcce1862ef98dab875077f367",
- "s": "0x23756d4f3bd644dde1c25f8cde45fbea557dacf0492bbecb409f6b2cdacbb9b8",
- "hash": "0x2e232fb6d73423c9dcaff38257d36fcad74a2c627a70030b43a0bed36d136625"
- }
- },
- {
- "block": "0x1db",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x17d",
- "to": "0x45dcb3e20af2d8ba583d774404ee8fedcd97672b",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x1",
- "r": "0xd3b69c226bf73db84babb6185a83b0dd491467adfc01d279df4c09d5d2d3fba4",
- "s": "0x368ddb772caa32963df97961cf8ef0db33e0df5945000f0e39d9a288bd73ee30",
- "yParity": "0x1",
- "hash": "0xc80615944f9bfeb945b7416052667eec0a78b2f3beb7c2811ebb9e9210e45c4c"
- }
- },
- {
- "block": "0x1e0",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x181",
- "to": "0x50996999ff63a9a1a07da880af8f8c745a7fe72c",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0xf06ad492cdd04b44f321abe9cb98e5977f03909173e4b6361f50d44c080f9d6a",
- "s": "0x7fdc23c04fab8e0a576e6896b13a661b2dcb256cf8ca42fa21f0f370097a53a4",
- "hash": "0x8c1f1466ce25a97e88ab37bc9b5362eaf95fb523fb80d176429fa41c2fa2d629"
- }
- },
- {
- "block": "0x1e5",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x185",
- "to": "0x913f841dfc8703ae76a4e1b8b84cd67aab15f17a",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0xd4b8d15fc05f29b58f0459b336dc48b142e8d14572edad06e346aa7728491ce8",
- "s": "0x64c8078691ba1c4bb110f6dff74e26d3c0df2505940558746a1c617091ddc61a",
- "yParity": "0x0",
- "hash": "0x969e178ea1a76626b96bf06e207edb6299c36c6a14e46462960832feb93f6d42"
- }
- },
- {
- "block": "0x1ea",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x189",
- "to": "0xb47f70b774d780c3ec5ac411f2f9198293b9df7a",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd10a0",
- "r": "0xd33c0cd7f521603ea8deaa363ab591627f5af193759f0aeb8cd9fe4f22a4dd5c",
- "s": "0x667bb0ee041403cba2e562882bb9afc43bd560af3c95136c7bf4f1e361355316",
- "hash": "0xa35c19e4e8154c35656544b92e88fb62c4210e38f09608248e2a99841ac99964"
- }
- },
- {
- "block": "0x1ef",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x2",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x18d",
- "to": "0x6e3d512a9328fa42c7ca1e20064071f88958ed93",
- "gas": "0x5208",
- "gasPrice": null,
- "maxPriorityFeePerGas": "0x1",
- "maxFeePerGas": "0x8",
- "value": "0x1",
- "input": "0x",
- "accessList": [],
- "v": "0x0",
- "r": "0x990aa3c805c666109799583317176d55a73d96137ff886be719a36537d577e3d",
- "s": "0x5d1244d8c33e85b49e2061112549e616b166a1860b07f00ff963a0b37c29bcaa",
- "yParity": "0x0",
- "hash": "0xeb282a48d309db881eead661ee7c64696b2699fa7c431d39a573ecaa0bc31052"
- }
- },
- {
- "block": "0x1f4",
- "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f",
- "tx": {
- "type": "0x0",
- "chainId": "0xc72dd9d5e883e",
- "nonce": "0x191",
- "to": "0x15af6900147a8730b5ce3e1db6333f33f64ebb2c",
- "gas": "0x5208",
- "gasPrice": "0x8",
- "maxPriorityFeePerGas": null,
- "maxFeePerGas": null,
- "value": "0x1",
- "input": "0x",
- "v": "0x18e5bb3abd109f",
- "r": "0x85b3c275e830c2034a4666e3a57c8640a8e5e7b7c8d0687467e205c037b4c5d7",
- "s": "0x52e2aa8b60be142eee26f197b1e0a983f8df844c770881d820dfc4d1bb3d9adc",
- "hash": "0x22e616c85493bcd23147d1c9f5dd081b32daf5c7b3e824f61b5fc1bd34a47e67"
- }
- }
- ],
- "withdrawals": {
- "101": {
- "withdrawals": [
- {
- "index": "0x4",
- "validatorIndex": "0x5",
- "address": "0x3f79bb7b435b05321651daefd374cdc681dc06fa",
- "amount": "0x64"
- }
- ]
- },
- "106": {
- "withdrawals": [
- {
- "index": "0x5",
- "validatorIndex": "0x5",
- "address": "0x189f40034be7a199f1fa9891668ee3ab6049f82d",
- "amount": "0x64"
- }
- ]
- },
- "111": {
- "withdrawals": [
- {
- "index": "0x6",
- "validatorIndex": "0x5",
- "address": "0x65c74c15a686187bb6bbf9958f494fc6b8006803",
- "amount": "0x64"
- }
- ]
- },
- "116": {
- "withdrawals": [
- {
- "index": "0x7",
- "validatorIndex": "0x5",
- "address": "0xe3b98a4da31a127d4bde6e43033f66ba274cab0e",
- "amount": "0x64"
- }
- ]
- },
- "121": {
- "withdrawals": [
- {
- "index": "0x8",
- "validatorIndex": "0x5",
- "address": "0xa1fce4363854ff888cff4b8e7875d600c2682390",
- "amount": "0x64"
- }
- ]
- },
- "126": {
- "withdrawals": [
- {
- "index": "0x9",
- "validatorIndex": "0x5",
- "address": "0x7ace431cb61584cb9b8dc7ec08cf38ac0a2d6496",
- "amount": "0x64"
- }
- ]
- },
- "131": {
- "withdrawals": [
- {
- "index": "0xa",
- "validatorIndex": "0x5",
- "address": "0x5ee0dd4d4840229fab4a86438efbcaf1b9571af9",
- "amount": "0x64"
- }
- ]
- },
- "136": {
- "withdrawals": [
- {
- "index": "0xb",
- "validatorIndex": "0x5",
- "address": "0x4f362f9093bb8e7012f466224ff1237c0746d8c8",
- "amount": "0x64"
- }
- ]
- },
- "141": {
- "withdrawals": [
- {
- "index": "0xc",
- "validatorIndex": "0x5",
- "address": "0x075198bfe61765d35f990debe90959d438a943ce",
- "amount": "0x64"
- }
- ]
- },
- "146": {
- "withdrawals": [
- {
- "index": "0xd",
- "validatorIndex": "0x5",
- "address": "0x956062137518b270d730d4753000896de17c100a",
- "amount": "0x64"
- }
- ]
- },
- "151": {
- "withdrawals": [
- {
- "index": "0xe",
- "validatorIndex": "0x5",
- "address": "0x2a0ab732b4e9d85ef7dc25303b64ab527c25a4d7",
- "amount": "0x64"
- }
- ]
- },
- "156": {
- "withdrawals": [
- {
- "index": "0xf",
- "validatorIndex": "0x5",
- "address": "0x6e3faf1e27d45fca70234ae8f6f0a734622cff8a",
- "amount": "0x64"
- }
- ]
- },
- "161": {
- "withdrawals": [
- {
- "index": "0x10",
- "validatorIndex": "0x5",
- "address": "0x8a8950f7623663222542c9469c73be3c4c81bbdf",
- "amount": "0x64"
- }
- ]
- },
- "166": {
- "withdrawals": [
- {
- "index": "0x11",
- "validatorIndex": "0x5",
- "address": "0xfe1dcd3abfcd6b1655a026e60a05d03a7f71e4b6",
- "amount": "0x64"
- }
- ]
- },
- "171": {
- "withdrawals": [
- {
- "index": "0x12",
- "validatorIndex": "0x5",
- "address": "0x087d80f7f182dd44f184aa86ca34488853ebcc04",
- "amount": "0x64"
- }
- ]
- },
- "176": {
- "withdrawals": [
- {
- "index": "0x13",
- "validatorIndex": "0x5",
- "address": "0xf4f97c88c409dcf3789b5b518da3f7d266c48806",
- "amount": "0x64"
- }
- ]
- },
- "181": {
- "withdrawals": [
- {
- "index": "0x14",
- "validatorIndex": "0x5",
- "address": "0x892f60b39450a0e770f00a836761c8e964fd7467",
- "amount": "0x64"
- }
- ]
- },
- "186": {
- "withdrawals": [
- {
- "index": "0x15",
- "validatorIndex": "0x5",
- "address": "0x281c93990bac2c69cf372c9a3b66c406c86cca82",
- "amount": "0x64"
- }
- ]
- },
- "191": {
- "withdrawals": [
- {
- "index": "0x16",
- "validatorIndex": "0x5",
- "address": "0xb12dc850a3b0a3b79fc2255e175241ce20489fe4",
- "amount": "0x64"
- }
- ]
- },
- "196": {
- "withdrawals": [
- {
- "index": "0x17",
- "validatorIndex": "0x5",
- "address": "0xd1211001882d2ce16a8553e449b6c8b7f71e6183",
- "amount": "0x64"
- }
- ]
- },
- "201": {
- "withdrawals": [
- {
- "index": "0x18",
- "validatorIndex": "0x5",
- "address": "0x4fb733bedb74fec8d65bedf056b935189a289e92",
- "amount": "0x64"
- }
- ]
- },
- "206": {
- "withdrawals": [
- {
- "index": "0x19",
- "validatorIndex": "0x5",
- "address": "0xc337ded6f56c07205fb7b391654d7d463c9e0c72",
- "amount": "0x64"
- }
- ]
- },
- "211": {
- "withdrawals": [
- {
- "index": "0x1a",
- "validatorIndex": "0x5",
- "address": "0x28969cdfa74a12c82f3bad960b0b000aca2ac329",
- "amount": "0x64"
- }
- ]
- },
- "216": {
- "withdrawals": [
- {
- "index": "0x1b",
- "validatorIndex": "0x5",
- "address": "0xaf193a8cdcd0e3fb39e71147e59efa5cad40763d",
- "amount": "0x64"
- }
- ]
- },
- "221": {
- "withdrawals": [
- {
- "index": "0x1c",
- "validatorIndex": "0x5",
- "address": "0x2795044ce0f83f718bc79c5f2add1e52521978df",
- "amount": "0x64"
- }
- ]
- },
- "226": {
- "withdrawals": [
- {
- "index": "0x1d",
- "validatorIndex": "0x5",
- "address": "0x30a5bfa58e128af9e5a4955725d8ad26d4d574a5",
- "amount": "0x64"
- }
- ]
- },
- "231": {
- "withdrawals": [
- {
- "index": "0x1e",
- "validatorIndex": "0x5",
- "address": "0xd0752b60adb148ca0b3b4d2591874e2dabd34637",
- "amount": "0x64"
- }
- ]
- },
- "236": {
- "withdrawals": [
- {
- "index": "0x1f",
- "validatorIndex": "0x5",
- "address": "0x45f83d17e10b34fca01eb8f4454dac34a777d940",
- "amount": "0x64"
- }
- ]
- },
- "241": {
- "withdrawals": [
- {
- "index": "0x20",
- "validatorIndex": "0x5",
- "address": "0xd4f09e5c5af99a24c7e304ca7997d26cb0090169",
- "amount": "0x64"
- }
- ]
- },
- "246": {
- "withdrawals": [
- {
- "index": "0x21",
- "validatorIndex": "0x5",
- "address": "0xb0b2988b6bbe724bacda5e9e524736de0bc7dae4",
- "amount": "0x64"
- }
- ]
- },
- "251": {
- "withdrawals": [
- {
- "index": "0x22",
- "validatorIndex": "0x5",
- "address": "0x04b8d34e20e604cadb04b9db8f6778c35f45a2d2",
- "amount": "0x64"
- }
- ]
- },
- "256": {
- "withdrawals": [
- {
- "index": "0x23",
- "validatorIndex": "0x5",
- "address": "0x47dc540c94ceb704a23875c11273e16bb0b8a87a",
- "amount": "0x64"
- }
- ]
- },
- "261": {
- "withdrawals": [
- {
- "index": "0x24",
- "validatorIndex": "0x5",
- "address": "0xbc5959f43bc6e47175374b6716e53c9a7d72c594",
- "amount": "0x64"
- }
- ]
- },
- "266": {
- "withdrawals": [
- {
- "index": "0x25",
- "validatorIndex": "0x5",
- "address": "0xc04b5bb1a5b2eb3e9cd4805420dba5a9d133da5b",
- "amount": "0x64"
- }
- ]
- },
- "271": {
- "withdrawals": [
- {
- "index": "0x26",
- "validatorIndex": "0x5",
- "address": "0x24255ef5d941493b9978f3aabb0ed07d084ade19",
- "amount": "0x64"
- }
- ]
- },
- "276": {
- "withdrawals": [
- {
- "index": "0x27",
- "validatorIndex": "0x5",
- "address": "0xdbe726e81a7221a385e007ef9e834a975a4b528c",
- "amount": "0x64"
- }
- ]
- },
- "281": {
- "withdrawals": [
- {
- "index": "0x28",
- "validatorIndex": "0x5",
- "address": "0xae58b7e08e266680e93e46639a2a7e89fde78a6f",
- "amount": "0x64"
- }
- ]
- },
- "286": {
- "withdrawals": [
- {
- "index": "0x29",
- "validatorIndex": "0x5",
- "address": "0x5df7504bc193ee4c3deadede1459eccca172e87c",
- "amount": "0x64"
- }
- ]
- },
- "291": {
- "withdrawals": [
- {
- "index": "0x2a",
- "validatorIndex": "0x5",
- "address": "0xb71de80778f2783383f5d5a3028af84eab2f18a4",
- "amount": "0x64"
- }
- ]
- },
- "296": {
- "withdrawals": [
- {
- "index": "0x2b",
- "validatorIndex": "0x5",
- "address": "0x1c972398125398a3665f212930758ae9518a8c94",
- "amount": "0x64"
- }
- ]
- },
- "301": {
- "withdrawals": [
- {
- "index": "0x2c",
- "validatorIndex": "0x5",
- "address": "0x1c123d5c0d6c5a22ef480dce944631369fc6ce28",
- "amount": "0x64"
- }
- ]
- },
- "306": {
- "withdrawals": [
- {
- "index": "0x2d",
- "validatorIndex": "0x5",
- "address": "0x7f774bb46e7e342a2d9d0514b27cee622012f741",
- "amount": "0x64"
- }
- ]
- },
- "311": {
- "withdrawals": [
- {
- "index": "0x2e",
- "validatorIndex": "0x5",
- "address": "0x06f647b157b8557a12979ba04cf5ba222b9747cf",
- "amount": "0x64"
- }
- ]
- },
- "316": {
- "withdrawals": [
- {
- "index": "0x2f",
- "validatorIndex": "0x5",
- "address": "0xcccc369c5141675a9e9b1925164f30cdd60992dc",
- "amount": "0x64"
- }
- ]
- },
- "321": {
- "withdrawals": [
- {
- "index": "0x30",
- "validatorIndex": "0x5",
- "address": "0xacfa6b0e008d0208f16026b4d17a4c070e8f9f8d",
- "amount": "0x64"
- }
- ]
- },
- "326": {
- "withdrawals": [
- {
- "index": "0x31",
- "validatorIndex": "0x5",
- "address": "0x6a632187a3abf9bebb66d43368fccd612f631cbc",
- "amount": "0x64"
- }
- ]
- },
- "331": {
- "withdrawals": [
- {
- "index": "0x32",
- "validatorIndex": "0x5",
- "address": "0x984c16459ded76438d98ce9b608f175c28a910a0",
- "amount": "0x64"
- }
- ]
- },
- "336": {
- "withdrawals": [
- {
- "index": "0x33",
- "validatorIndex": "0x5",
- "address": "0x2847213288f0988543a76512fab09684131809d9",
- "amount": "0x64"
- }
- ]
- },
- "341": {
- "withdrawals": [
- {
- "index": "0x34",
- "validatorIndex": "0x5",
- "address": "0x1037044fabf0421617c47c74681d7cc9c59f136c",
- "amount": "0x64"
- }
- ]
- },
- "346": {
- "withdrawals": [
- {
- "index": "0x35",
- "validatorIndex": "0x5",
- "address": "0x8cf42eb93b1426f22a30bd22539503bdf838830c",
- "amount": "0x64"
- }
- ]
- },
- "351": {
- "withdrawals": [
- {
- "index": "0x36",
- "validatorIndex": "0x5",
- "address": "0x6b2884fef44bd4288621a2cda9f88ca07b480861",
- "amount": "0x64"
- }
- ]
- },
- "356": {
- "withdrawals": [
- {
- "index": "0x37",
- "validatorIndex": "0x5",
- "address": "0xf6152f2ad8a93dc0f8f825f2a8d162d6da46e81f",
- "amount": "0x64"
- }
- ]
- },
- "361": {
- "withdrawals": [
- {
- "index": "0x38",
- "validatorIndex": "0x5",
- "address": "0x8fa24283a8c1cc8a0f76ac69362139a173592567",
- "amount": "0x64"
- }
- ]
- },
- "366": {
- "withdrawals": [
- {
- "index": "0x39",
- "validatorIndex": "0x5",
- "address": "0x19041ad672875015bc4041c24b581eafc0869aab",
- "amount": "0x64"
- }
- ]
- },
- "371": {
- "withdrawals": [
- {
- "index": "0x3a",
- "validatorIndex": "0x5",
- "address": "0x2bb3295506aa5a21b58f1fd40f3b0f16d6d06bbc",
- "amount": "0x64"
- }
- ]
- },
- "376": {
- "withdrawals": [
- {
- "index": "0x3b",
- "validatorIndex": "0x5",
- "address": "0x23c86a8aded0ad81f8111bb07e6ec0ffb00ce5bf",
- "amount": "0x64"
- }
- ]
- },
- "381": {
- "withdrawals": [
- {
- "index": "0x3c",
- "validatorIndex": "0x5",
- "address": "0x96a1cabb97e1434a6e23e684dd4572e044c243ea",
- "amount": "0x64"
- }
- ]
- },
- "386": {
- "withdrawals": [
- {
- "index": "0x3d",
- "validatorIndex": "0x5",
- "address": "0xfd5e6e8c850fafa2ba2293c851479308c0f0c9e7",
- "amount": "0x64"
- }
- ]
- },
- "391": {
- "withdrawals": [
- {
- "index": "0x3e",
- "validatorIndex": "0x5",
- "address": "0xf997ed224012b1323eb2a6a0c0044a956c6b8070",
- "amount": "0x64"
- }
- ]
- },
- "396": {
- "withdrawals": [
- {
- "index": "0x3f",
- "validatorIndex": "0x5",
- "address": "0x6d09a879576c0d941bea7833fb2285051b10d511",
- "amount": "0x64"
- }
- ]
- },
- "401": {
- "withdrawals": [
- {
- "index": "0x40",
- "validatorIndex": "0x5",
- "address": "0x13dd437fc2ed1cd5d943ac1dd163524c815d305c",
- "amount": "0x64"
- }
- ]
- },
- "406": {
- "withdrawals": [
- {
- "index": "0x41",
- "validatorIndex": "0x5",
- "address": "0x6510225e743d73828aa4f73a3133818490bd8820",
- "amount": "0x64"
- }
- ]
- },
- "411": {
- "withdrawals": [
- {
- "index": "0x42",
- "validatorIndex": "0x5",
- "address": "0xd282cf9c585bb4f6ce71e16b6453b26aa8d34a53",
- "amount": "0x64"
- }
- ]
- },
- "416": {
- "withdrawals": [
- {
- "index": "0x43",
- "validatorIndex": "0x5",
- "address": "0xa179dbdd51c56d0988551f92535797bcf47ca0e7",
- "amount": "0x64"
- }
- ]
- },
- "421": {
- "withdrawals": [
- {
- "index": "0x44",
- "validatorIndex": "0x5",
- "address": "0x494d799e953876ac6022c3f7da5e0f3c04b549be",
- "amount": "0x64"
- }
- ]
- },
- "426": {
- "withdrawals": [
- {
- "index": "0x45",
- "validatorIndex": "0x5",
- "address": "0xb4bc136e1fb4ea0b3340d06b158277c4a8537a13",
- "amount": "0x64"
- }
- ]
- },
- "431": {
- "withdrawals": [
- {
- "index": "0x46",
- "validatorIndex": "0x5",
- "address": "0x368b766f1e4d7bf437d2a709577a5210a99002b6",
- "amount": "0x64"
- }
- ]
- },
- "436": {
- "withdrawals": [
- {
- "index": "0x47",
- "validatorIndex": "0x5",
- "address": "0x5123198d8a827fe0c788c409e7d2068afde64339",
- "amount": "0x64"
- }
- ]
- },
- "441": {
- "withdrawals": [
- {
- "index": "0x48",
- "validatorIndex": "0x5",
- "address": "0xd39b94587711196640659ec81855bcf397e419ff",
- "amount": "0x64"
- }
- ]
- },
- "446": {
- "withdrawals": [
- {
- "index": "0x49",
- "validatorIndex": "0x5",
- "address": "0x6ca60a92cbf88c7f527978dc183a22e774755551",
- "amount": "0x64"
- }
- ]
- },
- "451": {
- "withdrawals": [
- {
- "index": "0x4a",
- "validatorIndex": "0x5",
- "address": "0x102efa1f2e0ad16ada57759b815245b8f8d27ce4",
- "amount": "0x64"
- }
- ]
- },
- "456": {
- "withdrawals": [
- {
- "index": "0x4b",
- "validatorIndex": "0x5",
- "address": "0xfcc8d4cd5a42cca8ac9f9437a6d0ac09f1d08785",
- "amount": "0x64"
- }
- ]
- },
- "461": {
- "withdrawals": [
- {
- "index": "0x4c",
- "validatorIndex": "0x5",
- "address": "0x48701721ec0115f04bc7404058f6c0f386946e09",
- "amount": "0x64"
- }
- ]
- },
- "466": {
- "withdrawals": [
- {
- "index": "0x4d",
- "validatorIndex": "0x5",
- "address": "0x706be462488699e89b722822dcec9822ad7d05a7",
- "amount": "0x64"
- }
- ]
- },
- "471": {
- "withdrawals": [
- {
- "index": "0x4e",
- "validatorIndex": "0x5",
- "address": "0xe5ec19296e6d1518a6a38c1dbc7ad024b8a1a248",
- "amount": "0x64"
- }
- ]
- },
- "476": {
- "withdrawals": [
- {
- "index": "0x4f",
- "validatorIndex": "0x5",
- "address": "0x2e350f8e7f890a9301f33edbf55f38e67e02d72b",
- "amount": "0x64"
- }
- ]
- },
- "481": {
- "withdrawals": [
- {
- "index": "0x50",
- "validatorIndex": "0x5",
- "address": "0xc57aa6a4279377063b17c554d3e33a3490e67a9a",
- "amount": "0x64"
- }
- ]
- },
- "486": {
- "withdrawals": [
- {
- "index": "0x51",
- "validatorIndex": "0x5",
- "address": "0x311df588ca5f412f970891e4cc3ac23648968ca2",
- "amount": "0x64"
- }
- ]
- },
- "491": {
- "withdrawals": [
- {
- "index": "0x52",
- "validatorIndex": "0x5",
- "address": "0x3f31becc97226d3c17bf574dd86f39735fe0f0c1",
- "amount": "0x64"
- }
- ]
- },
- "496": {
- "withdrawals": [
- {
- "index": "0x53",
- "validatorIndex": "0x5",
- "address": "0x6cc0ab95752bf25ec58c91b1d603c5eb41b8fbd7",
- "amount": "0x64"
- }
- ]
- },
- "81": {
- "withdrawals": [
- {
- "index": "0x0",
- "validatorIndex": "0x5",
- "address": "0x4ae81572f06e1b88fd5ced7a1a000945432e83e1",
- "amount": "0x64"
- }
- ]
- },
- "86": {
- "withdrawals": [
- {
- "index": "0x1",
- "validatorIndex": "0x5",
- "address": "0xde5a6f78116eca62d7fc5ce159d23ae6b889b365",
- "amount": "0x64"
- }
- ]
- },
- "91": {
- "withdrawals": [
- {
- "index": "0x2",
- "validatorIndex": "0x5",
- "address": "0x245843abef9e72e7efac30138a994bf6301e7e1d",
- "amount": "0x64"
- }
- ]
- },
- "96": {
- "withdrawals": [
- {
- "index": "0x3",
- "validatorIndex": "0x5",
- "address": "0x8d33f520a3c4cef80d2453aef81b612bfe1cb44c",
- "amount": "0x64"
- }
- ]
- }
- }
-}
\ No newline at end of file
diff --git a/cmd/devp2p/internal/ethtest/transaction.go b/cmd/devp2p/internal/ethtest/transaction.go
deleted file mode 100644
index e6ce37aae3..0000000000
--- a/cmd/devp2p/internal/ethtest/transaction.go
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package ethtest
-
-import (
- "errors"
- "fmt"
- "os"
- "time"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
-)
-
-// sendTxs sends the given transactions to the node and
-// expects the node to accept and propagate them.
-func (s *Suite) sendTxs(txs []*types.Transaction) error {
- // Open sending conn.
- sendConn, err := s.dial()
- if err != nil {
- return err
- }
- defer sendConn.Close()
- if err = sendConn.peer(s.chain, nil); err != nil {
- return fmt.Errorf("peering failed: %v", err)
- }
-
- // Open receiving conn.
- recvConn, err := s.dial()
- if err != nil {
- return err
- }
- defer recvConn.Close()
- if err = recvConn.peer(s.chain, nil); err != nil {
- return fmt.Errorf("peering failed: %v", err)
- }
-
- if err = sendConn.Write(ethProto, eth.TransactionsMsg, eth.TransactionsPacket(txs)); err != nil {
- return fmt.Errorf("failed to write message to connection: %v", err)
- }
-
- var (
- got = make(map[common.Hash]bool)
- end = time.Now().Add(timeout)
- )
-
- // Wait for the transaction announcements, make sure all txs ar propagated.
- for time.Now().Before(end) {
- msg, err := recvConn.ReadEth()
- if err != nil {
- return fmt.Errorf("failed to read from connection: %w", err)
- }
- switch msg := msg.(type) {
- case *eth.TransactionsPacket:
- for _, tx := range *msg {
- got[tx.Hash()] = true
- }
- case *eth.NewPooledTransactionHashesPacket68:
- for _, hash := range msg.Hashes {
- got[hash] = true
- }
- default:
- return fmt.Errorf("unexpected eth wire msg: %s", pretty.Sdump(msg))
- }
-
- // Check if all txs received.
- allReceived := func() bool {
- for _, tx := range txs {
- if !got[tx.Hash()] {
- return false
- }
- }
- return true
- }
- if allReceived() {
- return nil
- }
- }
-
- return fmt.Errorf("timed out waiting for txs")
-}
-
-func (s *Suite) sendInvalidTxs(txs []*types.Transaction) error {
- // Open sending conn.
- sendConn, err := s.dial()
- if err != nil {
- return err
- }
- defer sendConn.Close()
- if err = sendConn.peer(s.chain, nil); err != nil {
- return fmt.Errorf("peering failed: %v", err)
- }
- sendConn.SetDeadline(time.Now().Add(timeout))
-
- // Open receiving conn.
- recvConn, err := s.dial()
- if err != nil {
- return err
- }
- defer recvConn.Close()
- if err = recvConn.peer(s.chain, nil); err != nil {
- return fmt.Errorf("peering failed: %v", err)
- }
- recvConn.SetDeadline(time.Now().Add(timeout))
-
- if err = sendConn.Write(ethProto, eth.TransactionsMsg, txs); err != nil {
- return fmt.Errorf("failed to write message to connection: %w", err)
- }
-
- // Make map of invalid txs.
- invalids := make(map[common.Hash]struct{})
- for _, tx := range txs {
- invalids[tx.Hash()] = struct{}{}
- }
-
- // Get repsonses.
- recvConn.SetReadDeadline(time.Now().Add(timeout))
- for {
- msg, err := recvConn.ReadEth()
- if errors.Is(err, os.ErrDeadlineExceeded) {
- // Successful if no invalid txs are propagated before timeout.
- return nil
- } else if err != nil {
- return fmt.Errorf("failed to read from connection: %w", err)
- }
-
- switch msg := msg.(type) {
- case *eth.TransactionsPacket:
- for _, tx := range txs {
- if _, ok := invalids[tx.Hash()]; ok {
- return fmt.Errorf("received bad tx: %s", tx.Hash())
- }
- }
- case *eth.NewPooledTransactionHashesPacket68:
- for _, hash := range msg.Hashes {
- if _, ok := invalids[hash]; ok {
- return fmt.Errorf("received bad tx: %s", hash)
- }
- }
- default:
- return fmt.Errorf("unexpected eth message: %v", pretty.Sdump(msg))
- }
- }
-}
diff --git a/cmd/devp2p/internal/v4test/discv4tests.go b/cmd/devp2p/internal/v4test/discv4tests.go
deleted file mode 100644
index 3afcfd0698..0000000000
--- a/cmd/devp2p/internal/v4test/discv4tests.go
+++ /dev/null
@@ -1,519 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package v4test
-
-import (
- "bytes"
- "crypto/rand"
- "errors"
- "fmt"
- "net"
- "time"
-
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/utesting"
- "github.com/ethereum/go-ethereum/p2p/discover/v4wire"
-)
-
-const (
- expiration = 20 * time.Second
- wrongPacket = 66
- macSize = 256 / 8
-)
-
-var (
- // Remote node under test
- Remote string
- // Listen1 is the IP where the first tester is listening, port will be assigned
- Listen1 string = "127.0.0.1"
- // Listen2 is the IP where the second tester is listening, port will be assigned
- // Before running the test, you may have to `sudo ifconfig lo0 add 127.0.0.2` (on MacOS at least)
- Listen2 string = "127.0.0.2"
-)
-
-type pingWithJunk struct {
- Version uint
- From, To v4wire.Endpoint
- Expiration uint64
- JunkData1 uint
- JunkData2 []byte
-}
-
-func (req *pingWithJunk) Name() string { return "PING/v4" }
-func (req *pingWithJunk) Kind() byte { return v4wire.PingPacket }
-
-type pingWrongType struct {
- Version uint
- From, To v4wire.Endpoint
- Expiration uint64
-}
-
-func (req *pingWrongType) Name() string { return "WRONG/v4" }
-func (req *pingWrongType) Kind() byte { return wrongPacket }
-
-func futureExpiration() uint64 {
- return uint64(time.Now().Add(expiration).Unix())
-}
-
-// BasicPing just sends a PING packet and expects a response.
-func BasicPing(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
-
- pingHash := te.send(te.l1, &v4wire.Ping{
- Version: 4,
- From: te.localEndpoint(te.l1),
- To: te.remoteEndpoint(),
- Expiration: futureExpiration(),
- })
- if err := te.checkPingPong(pingHash); err != nil {
- t.Fatal(err)
- }
-}
-
-// checkPingPong verifies that the remote side sends both a PONG with the
-// correct hash, and a PING.
-// The two packets do not have to be in any particular order.
-func (te *testenv) checkPingPong(pingHash []byte) error {
- var (
- pings int
- pongs int
- )
- for i := 0; i < 2; i++ {
- reply, _, err := te.read(te.l1)
- if err != nil {
- return err
- }
- switch reply.Kind() {
- case v4wire.PongPacket:
- if err := te.checkPong(reply, pingHash); err != nil {
- return err
- }
- pongs++
- case v4wire.PingPacket:
- pings++
- default:
- return fmt.Errorf("expected PING or PONG, got %v %v", reply.Name(), reply)
- }
- }
- if pongs == 1 && pings == 1 {
- return nil
- }
- return fmt.Errorf("expected 1 PING (got %d) and 1 PONG (got %d)", pings, pongs)
-}
-
-// checkPong verifies that reply is a valid PONG matching the given ping hash,
-// and a PING. The two packets do not have to be in any particular order.
-func (te *testenv) checkPong(reply v4wire.Packet, pingHash []byte) error {
- if reply == nil {
- return errors.New("expected PONG reply, got nil")
- }
- if reply.Kind() != v4wire.PongPacket {
- return fmt.Errorf("expected PONG reply, got %v %v", reply.Name(), reply)
- }
- pong := reply.(*v4wire.Pong)
- if !bytes.Equal(pong.ReplyTok, pingHash) {
- return fmt.Errorf("PONG reply token mismatch: got %x, want %x", pong.ReplyTok, pingHash)
- }
- if want := te.localEndpoint(te.l1); !want.IP.Equal(pong.To.IP) || want.UDP != pong.To.UDP {
- return fmt.Errorf("PONG 'to' endpoint mismatch: got %+v, want %+v", pong.To, want)
- }
- if v4wire.Expired(pong.Expiration) {
- return fmt.Errorf("PONG is expired (%v)", pong.Expiration)
- }
- return nil
-}
-
-// PingWrongTo sends a PING packet with wrong 'to' field and expects a PONG response.
-func PingWrongTo(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
-
- wrongEndpoint := v4wire.Endpoint{IP: net.ParseIP("192.0.2.0")}
- pingHash := te.send(te.l1, &v4wire.Ping{
- Version: 4,
- From: te.localEndpoint(te.l1),
- To: wrongEndpoint,
- Expiration: futureExpiration(),
- })
- if err := te.checkPingPong(pingHash); err != nil {
- t.Fatal(err)
- }
-}
-
-// PingWrongFrom sends a PING packet with wrong 'from' field and expects a PONG response.
-func PingWrongFrom(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
-
- wrongEndpoint := v4wire.Endpoint{IP: net.ParseIP("192.0.2.0")}
- pingHash := te.send(te.l1, &v4wire.Ping{
- Version: 4,
- From: wrongEndpoint,
- To: te.remoteEndpoint(),
- Expiration: futureExpiration(),
- })
-
- if err := te.checkPingPong(pingHash); err != nil {
- t.Fatal(err)
- }
-}
-
-// PingExtraData This test sends a PING packet with additional data at the end and expects a PONG
-// response. The remote node should respond because EIP-8 mandates ignoring additional
-// trailing data.
-func PingExtraData(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
-
- pingHash := te.send(te.l1, &pingWithJunk{
- Version: 4,
- From: te.localEndpoint(te.l1),
- To: te.remoteEndpoint(),
- Expiration: futureExpiration(),
- JunkData1: 42,
- JunkData2: []byte{9, 8, 7, 6, 5, 4, 3, 2, 1},
- })
-
- if err := te.checkPingPong(pingHash); err != nil {
- t.Fatal(err)
- }
-}
-
-// This test sends a PING packet with additional data and wrong 'from' field
-// and expects a PONG response.
-func PingExtraDataWrongFrom(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
-
- wrongEndpoint := v4wire.Endpoint{IP: net.ParseIP("192.0.2.0")}
- req := pingWithJunk{
- Version: 4,
- From: wrongEndpoint,
- To: te.remoteEndpoint(),
- Expiration: futureExpiration(),
- JunkData1: 42,
- JunkData2: []byte{9, 8, 7, 6, 5, 4, 3, 2, 1},
- }
- pingHash := te.send(te.l1, &req)
- if err := te.checkPingPong(pingHash); err != nil {
- t.Fatal(err)
- }
-}
-
-// This test sends a PING packet with an expiration in the past.
-// The remote node should not respond.
-func PingPastExpiration(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
-
- te.send(te.l1, &v4wire.Ping{
- Version: 4,
- From: te.localEndpoint(te.l1),
- To: te.remoteEndpoint(),
- Expiration: -futureExpiration(),
- })
-
- reply, _, _ := te.read(te.l1)
- if reply != nil {
- t.Fatalf("Expected no reply, got %v %v", reply.Name(), reply)
- }
-}
-
-// This test sends an invalid packet. The remote node should not respond.
-func WrongPacketType(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
-
- te.send(te.l1, &pingWrongType{
- Version: 4,
- From: te.localEndpoint(te.l1),
- To: te.remoteEndpoint(),
- Expiration: futureExpiration(),
- })
-
- reply, _, _ := te.read(te.l1)
- if reply != nil {
- t.Fatalf("Expected no reply, got %v %v", reply.Name(), reply)
- }
-}
-
-// This test verifies that the default behaviour of ignoring 'from' fields is unaffected by
-// the bonding process. After bonding, it pings the target with a different from endpoint.
-func BondThenPingWithWrongFrom(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
-
- bond(t, te)
-
- wrongEndpoint := v4wire.Endpoint{IP: net.ParseIP("192.0.2.0")}
- pingHash := te.send(te.l1, &v4wire.Ping{
- Version: 4,
- From: wrongEndpoint,
- To: te.remoteEndpoint(),
- Expiration: futureExpiration(),
- })
-
-waitForPong:
- for {
- reply, _, err := te.read(te.l1)
- if err != nil {
- t.Fatal(err)
- }
- switch reply.Kind() {
- case v4wire.PongPacket:
- if err := te.checkPong(reply, pingHash); err != nil {
- t.Fatal(err)
- }
- break waitForPong
- case v4wire.FindnodePacket:
- // FINDNODE from the node is acceptable here since the endpoint
- // verification was performed earlier.
- default:
- t.Fatalf("Expected PONG, got %v %v", reply.Name(), reply)
- }
- }
-}
-
-// This test just sends FINDNODE. The remote node should not reply
-// because the endpoint proof has not completed.
-func FindnodeWithoutEndpointProof(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
-
- req := v4wire.Findnode{Expiration: futureExpiration()}
- rand.Read(req.Target[:])
- te.send(te.l1, &req)
-
- for {
- reply, _, _ := te.read(te.l1)
- if reply == nil {
- // No response, all good
- break
- }
- if reply.Kind() == v4wire.PingPacket {
- continue // A ping is ok, just ignore it
- }
- t.Fatalf("Expected no reply, got %v %v", reply.Name(), reply)
- }
-}
-
-// BasicFindnode sends a FINDNODE request after performing the endpoint
-// proof. The remote node should respond.
-func BasicFindnode(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
- bond(t, te)
-
- findnode := v4wire.Findnode{Expiration: futureExpiration()}
- rand.Read(findnode.Target[:])
- te.send(te.l1, &findnode)
-
- reply, _, err := te.read(te.l1)
- if err != nil {
- t.Fatal("read find nodes", err)
- }
- if reply.Kind() != v4wire.NeighborsPacket {
- t.Fatalf("Expected neighbors, got %v %v", reply.Name(), reply)
- }
-}
-
-// This test sends an unsolicited NEIGHBORS packet after the endpoint proof, then sends
-// FINDNODE to read the remote table. The remote node should not return the node contained
-// in the unsolicited NEIGHBORS packet.
-func UnsolicitedNeighbors(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
- bond(t, te)
-
- // Send unsolicited NEIGHBORS response.
- fakeKey, _ := crypto.GenerateKey()
- encFakeKey := v4wire.EncodePubkey(&fakeKey.PublicKey)
- neighbors := v4wire.Neighbors{
- Expiration: futureExpiration(),
- Nodes: []v4wire.Node{{
- ID: encFakeKey,
- IP: net.IP{1, 2, 3, 4},
- UDP: 30303,
- TCP: 30303,
- }},
- }
- te.send(te.l1, &neighbors)
-
- // Check if the remote node included the fake node.
- te.send(te.l1, &v4wire.Findnode{
- Expiration: futureExpiration(),
- Target: encFakeKey,
- })
-
- reply, _, err := te.read(te.l1)
- if err != nil {
- t.Fatal("read find nodes", err)
- }
- if reply.Kind() != v4wire.NeighborsPacket {
- t.Fatalf("Expected neighbors, got %v %v", reply.Name(), reply)
- }
- nodes := reply.(*v4wire.Neighbors).Nodes
- if contains(nodes, encFakeKey) {
- t.Fatal("neighbors response contains node from earlier unsolicited neighbors response")
- }
-}
-
-// This test sends FINDNODE with an expiration timestamp in the past.
-// The remote node should not respond.
-func FindnodePastExpiration(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
- bond(t, te)
-
- findnode := v4wire.Findnode{Expiration: -futureExpiration()}
- rand.Read(findnode.Target[:])
- te.send(te.l1, &findnode)
-
- for {
- reply, _, _ := te.read(te.l1)
- if reply == nil {
- return
- } else if reply.Kind() == v4wire.NeighborsPacket {
- t.Fatal("Unexpected NEIGHBORS response for expired FINDNODE request")
- }
- }
-}
-
-// bond performs the endpoint proof with the remote node.
-func bond(t *utesting.T, te *testenv) {
- pingHash := te.send(te.l1, &v4wire.Ping{
- Version: 4,
- From: te.localEndpoint(te.l1),
- To: te.remoteEndpoint(),
- Expiration: futureExpiration(),
- })
-
- var gotPing, gotPong bool
- for !gotPing || !gotPong {
- req, hash, err := te.read(te.l1)
- if err != nil {
- t.Fatal(err)
- }
- switch req.(type) {
- case *v4wire.Ping:
- te.send(te.l1, &v4wire.Pong{
- To: te.remoteEndpoint(),
- ReplyTok: hash,
- Expiration: futureExpiration(),
- })
- gotPing = true
- case *v4wire.Pong:
- if err := te.checkPong(req, pingHash); err != nil {
- t.Fatal(err)
- }
- gotPong = true
- }
- }
-}
-
-// This test attempts to perform a traffic amplification attack against a
-// 'victim' endpoint using FINDNODE. In this attack scenario, the attacker
-// attempts to complete the endpoint proof non-interactively by sending a PONG
-// with mismatching reply token from the 'victim' endpoint. The attack works if
-// the remote node does not verify the PONG reply token field correctly. The
-// attacker could then perform traffic amplification by sending many FINDNODE
-// requests to the discovery node, which would reply to the 'victim' address.
-func FindnodeAmplificationInvalidPongHash(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
-
- // Send PING to start endpoint verification.
- te.send(te.l1, &v4wire.Ping{
- Version: 4,
- From: te.localEndpoint(te.l1),
- To: te.remoteEndpoint(),
- Expiration: futureExpiration(),
- })
-
- var gotPing, gotPong bool
- for !gotPing || !gotPong {
- req, _, err := te.read(te.l1)
- if err != nil {
- t.Fatal(err)
- }
- switch req.(type) {
- case *v4wire.Ping:
- // Send PONG from this node ID, but with invalid ReplyTok.
- te.send(te.l1, &v4wire.Pong{
- To: te.remoteEndpoint(),
- ReplyTok: make([]byte, macSize),
- Expiration: futureExpiration(),
- })
- gotPing = true
- case *v4wire.Pong:
- gotPong = true
- }
- }
-
- // Now send FINDNODE. The remote node should not respond because our
- // PONG did not reference the PING hash.
- findnode := v4wire.Findnode{Expiration: futureExpiration()}
- rand.Read(findnode.Target[:])
- te.send(te.l1, &findnode)
-
- // If we receive a NEIGHBORS response, the attack worked and the test fails.
- reply, _, _ := te.read(te.l1)
- if reply != nil && reply.Kind() == v4wire.NeighborsPacket {
- t.Error("Got neighbors")
- }
-}
-
-// This test attempts to perform a traffic amplification attack using FINDNODE.
-// The attack works if the remote node does not verify the IP address of FINDNODE
-// against the endpoint verification proof done by PING/PONG.
-func FindnodeAmplificationWrongIP(t *utesting.T) {
- te := newTestEnv(Remote, Listen1, Listen2)
- defer te.close()
-
- // Do the endpoint proof from the l1 IP.
- bond(t, te)
-
- // Now send FINDNODE from the same node ID, but different IP address.
- // The remote node should not respond.
- findnode := v4wire.Findnode{Expiration: futureExpiration()}
- rand.Read(findnode.Target[:])
- te.send(te.l2, &findnode)
-
- // If we receive a NEIGHBORS response, the attack worked and the test fails.
- reply, _, _ := te.read(te.l2)
- if reply != nil {
- t.Error("Got NEIGHORS response for FINDNODE from wrong IP")
- }
-}
-
-var AllTests = []utesting.Test{
- {Name: "Ping/Basic", Fn: BasicPing},
- {Name: "Ping/WrongTo", Fn: PingWrongTo},
- {Name: "Ping/WrongFrom", Fn: PingWrongFrom},
- {Name: "Ping/ExtraData", Fn: PingExtraData},
- {Name: "Ping/ExtraDataWrongFrom", Fn: PingExtraDataWrongFrom},
- {Name: "Ping/PastExpiration", Fn: PingPastExpiration},
- {Name: "Ping/WrongPacketType", Fn: WrongPacketType},
- {Name: "Ping/BondThenPingWithWrongFrom", Fn: BondThenPingWithWrongFrom},
- {Name: "Findnode/WithoutEndpointProof", Fn: FindnodeWithoutEndpointProof},
- {Name: "Findnode/BasicFindnode", Fn: BasicFindnode},
- {Name: "Findnode/UnsolicitedNeighbors", Fn: UnsolicitedNeighbors},
- {Name: "Findnode/PastExpiration", Fn: FindnodePastExpiration},
- {Name: "Amplification/InvalidPongHash", Fn: FindnodeAmplificationInvalidPongHash},
- {Name: "Amplification/WrongIP", Fn: FindnodeAmplificationWrongIP},
-}
diff --git a/cmd/devp2p/internal/v4test/framework.go b/cmd/devp2p/internal/v4test/framework.go
deleted file mode 100644
index 9286594181..0000000000
--- a/cmd/devp2p/internal/v4test/framework.go
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package v4test
-
-import (
- "crypto/ecdsa"
- "fmt"
- "net"
- "time"
-
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p/discover/v4wire"
- "github.com/ethereum/go-ethereum/p2p/enode"
-)
-
-const waitTime = 300 * time.Millisecond
-
-type testenv struct {
- l1, l2 net.PacketConn
- key *ecdsa.PrivateKey
- remote *enode.Node
- remoteAddr *net.UDPAddr
-}
-
-func newTestEnv(remote string, listen1, listen2 string) *testenv {
- l1, err := net.ListenPacket("udp", fmt.Sprintf("%v:0", listen1))
- if err != nil {
- panic(err)
- }
- l2, err := net.ListenPacket("udp", fmt.Sprintf("%v:0", listen2))
- if err != nil {
- panic(err)
- }
- key, err := crypto.GenerateKey()
- if err != nil {
- panic(err)
- }
- node, err := enode.Parse(enode.ValidSchemes, remote)
- if err != nil {
- panic(err)
- }
- if node.IP() == nil || node.UDP() == 0 {
- var ip net.IP
- var tcpPort, udpPort int
- if ip = node.IP(); ip == nil {
- ip = net.ParseIP("127.0.0.1")
- }
- if tcpPort = node.TCP(); tcpPort == 0 {
- tcpPort = 30303
- }
- if udpPort = node.TCP(); udpPort == 0 {
- udpPort = 30303
- }
- node = enode.NewV4(node.Pubkey(), ip, tcpPort, udpPort)
- }
- addr := &net.UDPAddr{IP: node.IP(), Port: node.UDP()}
- return &testenv{l1, l2, key, node, addr}
-}
-
-func (te *testenv) close() {
- te.l1.Close()
- te.l2.Close()
-}
-
-func (te *testenv) send(c net.PacketConn, req v4wire.Packet) []byte {
- packet, hash, err := v4wire.Encode(te.key, req)
- if err != nil {
- panic(fmt.Errorf("can't encode %v packet: %v", req.Name(), err))
- }
- if _, err := c.WriteTo(packet, te.remoteAddr); err != nil {
- panic(fmt.Errorf("can't send %v: %v", req.Name(), err))
- }
- return hash
-}
-
-func (te *testenv) read(c net.PacketConn) (v4wire.Packet, []byte, error) {
- buf := make([]byte, 2048)
- if err := c.SetReadDeadline(time.Now().Add(waitTime)); err != nil {
- return nil, nil, err
- }
- n, _, err := c.ReadFrom(buf)
- if err != nil {
- return nil, nil, err
- }
- p, _, hash, err := v4wire.Decode(buf[:n])
- return p, hash, err
-}
-
-func (te *testenv) localEndpoint(c net.PacketConn) v4wire.Endpoint {
- addr := c.LocalAddr().(*net.UDPAddr)
- return v4wire.Endpoint{
- IP: addr.IP.To4(),
- UDP: uint16(addr.Port),
- TCP: 0,
- }
-}
-
-func (te *testenv) remoteEndpoint() v4wire.Endpoint {
- return v4wire.NewEndpoint(te.remoteAddr, 0)
-}
-
-func contains(ns []v4wire.Node, key v4wire.Pubkey) bool {
- for _, n := range ns {
- if n.ID == key {
- return true
- }
- }
- return false
-}
diff --git a/cmd/devp2p/internal/v5test/discv5tests.go b/cmd/devp2p/internal/v5test/discv5tests.go
deleted file mode 100644
index 56624a0ca8..0000000000
--- a/cmd/devp2p/internal/v5test/discv5tests.go
+++ /dev/null
@@ -1,377 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package v5test
-
-import (
- "bytes"
- "net"
- "sync"
- "time"
-
- "github.com/ethereum/go-ethereum/internal/utesting"
- "github.com/ethereum/go-ethereum/p2p/discover/v5wire"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/netutil"
-)
-
-// Suite is the discv5 test suite.
-type Suite struct {
- Dest *enode.Node
- Listen1, Listen2 string // listening addresses
-}
-
-func (s *Suite) listen1(log logger) (*conn, net.PacketConn) {
- c := newConn(s.Dest, log)
- l := c.listen(s.Listen1)
- return c, l
-}
-
-func (s *Suite) listen2(log logger) (*conn, net.PacketConn, net.PacketConn) {
- c := newConn(s.Dest, log)
- l1, l2 := c.listen(s.Listen1), c.listen(s.Listen2)
- return c, l1, l2
-}
-
-func (s *Suite) AllTests() []utesting.Test {
- return []utesting.Test{
- {Name: "Ping", Fn: s.TestPing},
- {Name: "PingLargeRequestID", Fn: s.TestPingLargeRequestID},
- {Name: "PingMultiIP", Fn: s.TestPingMultiIP},
- {Name: "PingHandshakeInterrupted", Fn: s.TestPingHandshakeInterrupted},
- {Name: "TalkRequest", Fn: s.TestTalkRequest},
- {Name: "FindnodeZeroDistance", Fn: s.TestFindnodeZeroDistance},
- {Name: "FindnodeResults", Fn: s.TestFindnodeResults},
- }
-}
-
-// TestPing sends PING and expects a PONG response.
-func (s *Suite) TestPing(t *utesting.T) {
- conn, l1 := s.listen1(t)
- defer conn.close()
-
- ping := &v5wire.Ping{ReqID: conn.nextReqID()}
- switch resp := conn.reqresp(l1, ping).(type) {
- case *v5wire.Pong:
- checkPong(t, resp, ping, l1)
- default:
- t.Fatal("expected PONG, got", resp.Name())
- }
-}
-
-func checkPong(t *utesting.T, pong *v5wire.Pong, ping *v5wire.Ping, c net.PacketConn) {
- if !bytes.Equal(pong.ReqID, ping.ReqID) {
- t.Fatalf("wrong request ID %x in PONG, want %x", pong.ReqID, ping.ReqID)
- }
- if !pong.ToIP.Equal(laddr(c).IP) {
- t.Fatalf("wrong destination IP %v in PONG, want %v", pong.ToIP, laddr(c).IP)
- }
- if int(pong.ToPort) != laddr(c).Port {
- t.Fatalf("wrong destination port %v in PONG, want %v", pong.ToPort, laddr(c).Port)
- }
-}
-
-// TestPingLargeRequestID sends PING with a 9-byte request ID, which isn't allowed by the spec.
-// The remote node should not respond.
-func (s *Suite) TestPingLargeRequestID(t *utesting.T) {
- conn, l1 := s.listen1(t)
- defer conn.close()
-
- ping := &v5wire.Ping{ReqID: make([]byte, 9)}
- switch resp := conn.reqresp(l1, ping).(type) {
- case *v5wire.Pong:
- t.Errorf("PONG response with unknown request ID %x", resp.ReqID)
- case *readError:
- if resp.err == v5wire.ErrInvalidReqID {
- t.Error("response with oversized request ID")
- } else if !netutil.IsTimeout(resp.err) {
- t.Error(resp)
- }
- }
-}
-
-// TestPingMultiIP establishes a session from one IP as usual. The session is then reused
-// on another IP, which shouldn't work. The remote node should respond with WHOAREYOU for
-// the attempt from a different IP.
-func (s *Suite) TestPingMultiIP(t *utesting.T) {
- conn, l1, l2 := s.listen2(t)
- defer conn.close()
-
- // Create the session on l1.
- ping := &v5wire.Ping{ReqID: conn.nextReqID()}
- resp := conn.reqresp(l1, ping)
- if resp.Kind() != v5wire.PongMsg {
- t.Fatal("expected PONG, got", resp)
- }
- checkPong(t, resp.(*v5wire.Pong), ping, l1)
-
- // Send on l2. This reuses the session because there is only one codec.
- ping2 := &v5wire.Ping{ReqID: conn.nextReqID()}
- conn.write(l2, ping2, nil)
- switch resp := conn.read(l2).(type) {
- case *v5wire.Pong:
- t.Fatalf("remote responded to PING from %v for session on IP %v", laddr(l2).IP, laddr(l1).IP)
- case *v5wire.Whoareyou:
- t.Logf("got WHOAREYOU for new session as expected")
- resp.Node = s.Dest
- conn.write(l2, ping2, resp)
- default:
- t.Fatal("expected WHOAREYOU, got", resp)
- }
-
- // Catch the PONG on l2.
- switch resp := conn.read(l2).(type) {
- case *v5wire.Pong:
- checkPong(t, resp, ping2, l2)
- default:
- t.Fatal("expected PONG, got", resp)
- }
-
- // Try on l1 again.
- ping3 := &v5wire.Ping{ReqID: conn.nextReqID()}
- conn.write(l1, ping3, nil)
- switch resp := conn.read(l1).(type) {
- case *v5wire.Pong:
- t.Fatalf("remote responded to PING from %v for session on IP %v", laddr(l1).IP, laddr(l2).IP)
- case *v5wire.Whoareyou:
- t.Logf("got WHOAREYOU for new session as expected")
- default:
- t.Fatal("expected WHOAREYOU, got", resp)
- }
-}
-
-// TestPingHandshakeInterrupted starts a handshake, but doesn't finish it and sends a second ordinary message
-// packet instead of a handshake message packet. The remote node should respond with
-// another WHOAREYOU challenge for the second packet.
-func (s *Suite) TestPingHandshakeInterrupted(t *utesting.T) {
- conn, l1 := s.listen1(t)
- defer conn.close()
-
- // First PING triggers challenge.
- ping := &v5wire.Ping{ReqID: conn.nextReqID()}
- conn.write(l1, ping, nil)
- switch resp := conn.read(l1).(type) {
- case *v5wire.Whoareyou:
- t.Logf("got WHOAREYOU for PING")
- default:
- t.Fatal("expected WHOAREYOU, got", resp)
- }
-
- // Send second PING.
- ping2 := &v5wire.Ping{ReqID: conn.nextReqID()}
- switch resp := conn.reqresp(l1, ping2).(type) {
- case *v5wire.Pong:
- checkPong(t, resp, ping2, l1)
- default:
- t.Fatal("expected WHOAREYOU, got", resp)
- }
-}
-
-// TestTalkRequest sends TALKREQ and expects an empty TALKRESP response.
-func (s *Suite) TestTalkRequest(t *utesting.T) {
- conn, l1 := s.listen1(t)
- defer conn.close()
-
- // Non-empty request ID.
- id := conn.nextReqID()
- resp := conn.reqresp(l1, &v5wire.TalkRequest{ReqID: id, Protocol: "test-protocol"})
- switch resp := resp.(type) {
- case *v5wire.TalkResponse:
- if !bytes.Equal(resp.ReqID, id) {
- t.Fatalf("wrong request ID %x in TALKRESP, want %x", resp.ReqID, id)
- }
- if len(resp.Message) > 0 {
- t.Fatalf("non-empty message %x in TALKRESP", resp.Message)
- }
- default:
- t.Fatal("expected TALKRESP, got", resp.Name())
- }
-
- // Empty request ID.
- resp = conn.reqresp(l1, &v5wire.TalkRequest{Protocol: "test-protocol"})
- switch resp := resp.(type) {
- case *v5wire.TalkResponse:
- if len(resp.ReqID) > 0 {
- t.Fatalf("wrong request ID %x in TALKRESP, want empty byte array", resp.ReqID)
- }
- if len(resp.Message) > 0 {
- t.Fatalf("non-empty message %x in TALKRESP", resp.Message)
- }
- default:
- t.Fatal("expected TALKRESP, got", resp.Name())
- }
-}
-
-// TestFindnodeZeroDistance checks that the remote node returns itself for FINDNODE with distance zero.
-func (s *Suite) TestFindnodeZeroDistance(t *utesting.T) {
- conn, l1 := s.listen1(t)
- defer conn.close()
-
- nodes, err := conn.findnode(l1, []uint{0})
- if err != nil {
- t.Fatal(err)
- }
- if len(nodes) != 1 {
- t.Fatalf("remote returned more than one node for FINDNODE [0]")
- }
- if nodes[0].ID() != conn.remote.ID() {
- t.Errorf("ID of response node is %v, want %v", nodes[0].ID(), conn.remote.ID())
- }
-}
-
-// TestFindnodeResults pings the node under test from multiple nodes. After waiting for them to be
-// accepted into the remote table, the test checks that they are returned by FINDNODE.
-func (s *Suite) TestFindnodeResults(t *utesting.T) {
- // Create bystanders.
- nodes := make([]*bystander, 5)
- added := make(chan enode.ID, len(nodes))
- for i := range nodes {
- nodes[i] = newBystander(t, s, added)
- defer nodes[i].close()
- }
-
- // Get them added to the remote table.
- timeout := 60 * time.Second
- timeoutCh := time.After(timeout)
- for count := 0; count < len(nodes); {
- select {
- case id := <-added:
- t.Logf("bystander node %v added to remote table", id)
- count++
- case <-timeoutCh:
- t.Errorf("remote added %d bystander nodes in %v, need %d to continue", count, timeout, len(nodes))
- t.Logf("this can happen if the node has a non-empty table from previous runs")
- return
- }
- }
- t.Logf("all %d bystander nodes were added", len(nodes))
-
- // Collect our nodes by distance.
- var dists []uint
- expect := make(map[enode.ID]*enode.Node)
- for _, bn := range nodes {
- n := bn.conn.localNode.Node()
- expect[n.ID()] = n
- d := uint(enode.LogDist(n.ID(), s.Dest.ID()))
- if !containsUint(dists, d) {
- dists = append(dists, d)
- }
- }
-
- // Send FINDNODE for all distances.
- conn, l1 := s.listen1(t)
- defer conn.close()
- foundNodes, err := conn.findnode(l1, dists)
- if err != nil {
- t.Fatal(err)
- }
- t.Logf("remote returned %d nodes for distance list %v", len(foundNodes), dists)
- for _, n := range foundNodes {
- delete(expect, n.ID())
- }
- if len(expect) > 0 {
- t.Errorf("missing %d nodes in FINDNODE result", len(expect))
- t.Logf("this can happen if the test is run multiple times in quick succession")
- t.Logf("and the remote node hasn't removed dead nodes from previous runs yet")
- } else {
- t.Logf("all %d expected nodes were returned", len(nodes))
- }
-}
-
-// A bystander is a node whose only purpose is filling a spot in the remote table.
-type bystander struct {
- dest *enode.Node
- conn *conn
- l net.PacketConn
-
- addedCh chan enode.ID
- done sync.WaitGroup
-}
-
-func newBystander(t *utesting.T, s *Suite, added chan enode.ID) *bystander {
- conn, l := s.listen1(t)
- conn.setEndpoint(l) // bystander nodes need IP/port to get pinged
- bn := &bystander{
- conn: conn,
- l: l,
- dest: s.Dest,
- addedCh: added,
- }
- bn.done.Add(1)
- go bn.loop()
- return bn
-}
-
-// id returns the node ID of the bystander.
-func (bn *bystander) id() enode.ID {
- return bn.conn.localNode.ID()
-}
-
-// close shuts down loop.
-func (bn *bystander) close() {
- bn.conn.close()
- bn.done.Wait()
-}
-
-// loop answers packets from the remote node until quit.
-func (bn *bystander) loop() {
- defer bn.done.Done()
-
- var (
- lastPing time.Time
- wasAdded bool
- )
- for {
- // Ping the remote node.
- if !wasAdded && time.Since(lastPing) > 10*time.Second {
- bn.conn.reqresp(bn.l, &v5wire.Ping{
- ReqID: bn.conn.nextReqID(),
- ENRSeq: bn.dest.Seq(),
- })
- lastPing = time.Now()
- }
- // Answer packets.
- switch p := bn.conn.read(bn.l).(type) {
- case *v5wire.Ping:
- bn.conn.write(bn.l, &v5wire.Pong{
- ReqID: p.ReqID,
- ENRSeq: bn.conn.localNode.Seq(),
- ToIP: bn.dest.IP(),
- ToPort: uint16(bn.dest.UDP()),
- }, nil)
- wasAdded = true
- bn.notifyAdded()
- case *v5wire.Findnode:
- bn.conn.write(bn.l, &v5wire.Nodes{ReqID: p.ReqID, RespCount: 1}, nil)
- wasAdded = true
- bn.notifyAdded()
- case *v5wire.TalkRequest:
- bn.conn.write(bn.l, &v5wire.TalkResponse{ReqID: p.ReqID}, nil)
- case *readError:
- if !netutil.IsTemporaryError(p.err) {
- bn.conn.logf("shutting down: %v", p.err)
- return
- }
- }
- }
-}
-
-func (bn *bystander) notifyAdded() {
- if bn.addedCh != nil {
- bn.addedCh <- bn.id()
- bn.addedCh = nil
- }
-}
diff --git a/cmd/devp2p/internal/v5test/framework.go b/cmd/devp2p/internal/v5test/framework.go
deleted file mode 100644
index 10856a50bc..0000000000
--- a/cmd/devp2p/internal/v5test/framework.go
+++ /dev/null
@@ -1,263 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package v5test
-
-import (
- "bytes"
- "crypto/ecdsa"
- "encoding/binary"
- "fmt"
- "net"
- "time"
-
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p/discover/v5wire"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
-)
-
-// readError represents an error during packet reading.
-// This exists to facilitate type-switching on the result of conn.read.
-type readError struct {
- err error
-}
-
-func (p *readError) Kind() byte { return 99 }
-func (p *readError) Name() string { return fmt.Sprintf("error: %v", p.err) }
-func (p *readError) Error() string { return p.err.Error() }
-func (p *readError) Unwrap() error { return p.err }
-func (p *readError) RequestID() []byte { return nil }
-func (p *readError) SetRequestID([]byte) {}
-
-func (p *readError) AppendLogInfo(ctx []interface{}) []interface{} { return ctx }
-
-// readErrorf creates a readError with the given text.
-func readErrorf(format string, args ...interface{}) *readError {
- return &readError{fmt.Errorf(format, args...)}
-}
-
-// This is the response timeout used in tests.
-const waitTime = 300 * time.Millisecond
-
-// conn is a connection to the node under test.
-type conn struct {
- localNode *enode.LocalNode
- localKey *ecdsa.PrivateKey
- remote *enode.Node
- remoteAddr *net.UDPAddr
- listeners []net.PacketConn
-
- log logger
- codec *v5wire.Codec
- idCounter uint32
-}
-
-type logger interface {
- Logf(string, ...interface{})
-}
-
-// newConn sets up a connection to the given node.
-func newConn(dest *enode.Node, log logger) *conn {
- key, err := crypto.GenerateKey()
- if err != nil {
- panic(err)
- }
- db, err := enode.OpenDB("")
- if err != nil {
- panic(err)
- }
- ln := enode.NewLocalNode(db, key)
-
- return &conn{
- localKey: key,
- localNode: ln,
- remote: dest,
- remoteAddr: &net.UDPAddr{IP: dest.IP(), Port: dest.UDP()},
- codec: v5wire.NewCodec(ln, key, mclock.System{}, nil),
- log: log,
- }
-}
-
-func (tc *conn) setEndpoint(c net.PacketConn) {
- tc.localNode.SetStaticIP(laddr(c).IP)
- tc.localNode.SetFallbackUDP(laddr(c).Port)
-}
-
-func (tc *conn) listen(ip string) net.PacketConn {
- l, err := net.ListenPacket("udp", fmt.Sprintf("%v:0", ip))
- if err != nil {
- panic(err)
- }
- tc.listeners = append(tc.listeners, l)
- return l
-}
-
-// close shuts down all listeners and the local node.
-func (tc *conn) close() {
- for _, l := range tc.listeners {
- l.Close()
- }
- tc.localNode.Database().Close()
-}
-
-// nextReqID creates a request id.
-func (tc *conn) nextReqID() []byte {
- id := make([]byte, 4)
- tc.idCounter++
- binary.BigEndian.PutUint32(id, tc.idCounter)
- return id
-}
-
-// reqresp performs a request/response interaction on the given connection.
-// The request is retried if a handshake is requested.
-func (tc *conn) reqresp(c net.PacketConn, req v5wire.Packet) v5wire.Packet {
- reqnonce := tc.write(c, req, nil)
- switch resp := tc.read(c).(type) {
- case *v5wire.Whoareyou:
- if resp.Nonce != reqnonce {
- return readErrorf("wrong nonce %x in WHOAREYOU (want %x)", resp.Nonce[:], reqnonce[:])
- }
- resp.Node = tc.remote
- tc.write(c, req, resp)
- return tc.read(c)
- default:
- return resp
- }
-}
-
-// findnode sends a FINDNODE request and waits for its responses.
-func (tc *conn) findnode(c net.PacketConn, dists []uint) ([]*enode.Node, error) {
- var (
- findnode = &v5wire.Findnode{ReqID: tc.nextReqID(), Distances: dists}
- reqnonce = tc.write(c, findnode, nil)
- first = true
- total uint8
- results []*enode.Node
- )
- for n := 1; n > 0; {
- switch resp := tc.read(c).(type) {
- case *v5wire.Whoareyou:
- // Handle handshake.
- if resp.Nonce == reqnonce {
- resp.Node = tc.remote
- tc.write(c, findnode, resp)
- } else {
- return nil, fmt.Errorf("unexpected WHOAREYOU (nonce %x), waiting for NODES", resp.Nonce[:])
- }
- case *v5wire.Ping:
- // Handle ping from remote.
- tc.write(c, &v5wire.Pong{
- ReqID: resp.ReqID,
- ENRSeq: tc.localNode.Seq(),
- }, nil)
- case *v5wire.Nodes:
- // Got NODES! Check request ID.
- if !bytes.Equal(resp.ReqID, findnode.ReqID) {
- return nil, fmt.Errorf("NODES response has wrong request id %x", resp.ReqID)
- }
- // Check total count. It should be greater than one
- // and needs to be the same across all responses.
- if first {
- if resp.RespCount == 0 || resp.RespCount > 6 {
- return nil, fmt.Errorf("invalid NODES response count %d (not in (0,7))", resp.RespCount)
- }
- total = resp.RespCount
- n = int(total) - 1
- first = false
- } else {
- n--
- if resp.RespCount != total {
- return nil, fmt.Errorf("invalid NODES response count %d (!= %d)", resp.RespCount, total)
- }
- }
- // Check nodes.
- nodes, err := checkRecords(resp.Nodes)
- if err != nil {
- return nil, fmt.Errorf("invalid node in NODES response: %v", err)
- }
- results = append(results, nodes...)
- default:
- return nil, fmt.Errorf("expected NODES, got %v", resp)
- }
- }
- return results, nil
-}
-
-// write sends a packet on the given connection.
-func (tc *conn) write(c net.PacketConn, p v5wire.Packet, challenge *v5wire.Whoareyou) v5wire.Nonce {
- packet, nonce, err := tc.codec.Encode(tc.remote.ID(), tc.remoteAddr.String(), p, challenge)
- if err != nil {
- panic(fmt.Errorf("can't encode %v packet: %v", p.Name(), err))
- }
- if _, err := c.WriteTo(packet, tc.remoteAddr); err != nil {
- tc.logf("Can't send %s: %v", p.Name(), err)
- } else {
- tc.logf(">> %s", p.Name())
- }
- return nonce
-}
-
-// read waits for an incoming packet on the given connection.
-func (tc *conn) read(c net.PacketConn) v5wire.Packet {
- buf := make([]byte, 1280)
- if err := c.SetReadDeadline(time.Now().Add(waitTime)); err != nil {
- return &readError{err}
- }
- n, fromAddr, err := c.ReadFrom(buf)
- if err != nil {
- return &readError{err}
- }
- _, _, p, err := tc.codec.Decode(buf[:n], fromAddr.String())
- if err != nil {
- return &readError{err}
- }
- tc.logf("<< %s", p.Name())
- return p
-}
-
-// logf prints to the test log.
-func (tc *conn) logf(format string, args ...interface{}) {
- if tc.log != nil {
- tc.log.Logf("(%s) %s", tc.localNode.ID().TerminalString(), fmt.Sprintf(format, args...))
- }
-}
-
-func laddr(c net.PacketConn) *net.UDPAddr {
- return c.LocalAddr().(*net.UDPAddr)
-}
-
-func checkRecords(records []*enr.Record) ([]*enode.Node, error) {
- nodes := make([]*enode.Node, len(records))
- for i := range records {
- n, err := enode.New(enode.ValidSchemes, records[i])
- if err != nil {
- return nil, err
- }
- nodes[i] = n
- }
- return nodes, nil
-}
-
-func containsUint(ints []uint, x uint) bool {
- for i := range ints {
- if ints[i] == x {
- return true
- }
- }
- return false
-}
diff --git a/cmd/devp2p/keycmd.go b/cmd/devp2p/keycmd.go
deleted file mode 100644
index 98d7bd76ae..0000000000
--- a/cmd/devp2p/keycmd.go
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "errors"
- "fmt"
- "net"
-
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/urfave/cli/v2"
-)
-
-var (
- keyCommand = &cli.Command{
- Name: "key",
- Usage: "Operations on node keys",
- Subcommands: []*cli.Command{
- keyGenerateCommand,
- keyToIDCommand,
- keyToNodeCommand,
- keyToRecordCommand,
- },
- }
- keyGenerateCommand = &cli.Command{
- Name: "generate",
- Usage: "Generates node key files",
- ArgsUsage: "keyfile",
- Action: genkey,
- }
- keyToIDCommand = &cli.Command{
- Name: "to-id",
- Usage: "Creates a node ID from a node key file",
- ArgsUsage: "keyfile",
- Action: keyToID,
- Flags: []cli.Flag{},
- }
- keyToNodeCommand = &cli.Command{
- Name: "to-enode",
- Usage: "Creates an enode URL from a node key file",
- ArgsUsage: "keyfile",
- Action: keyToURL,
- Flags: []cli.Flag{hostFlag, tcpPortFlag, udpPortFlag},
- }
- keyToRecordCommand = &cli.Command{
- Name: "to-enr",
- Usage: "Creates an ENR from a node key file",
- ArgsUsage: "keyfile",
- Action: keyToRecord,
- Flags: []cli.Flag{hostFlag, tcpPortFlag, udpPortFlag},
- }
-)
-
-var (
- hostFlag = &cli.StringFlag{
- Name: "ip",
- Usage: "IP address of the node",
- Value: "127.0.0.1",
- }
- tcpPortFlag = &cli.IntFlag{
- Name: "tcp",
- Usage: "TCP port of the node",
- Value: 30303,
- }
- udpPortFlag = &cli.IntFlag{
- Name: "udp",
- Usage: "UDP port of the node",
- Value: 30303,
- }
-)
-
-func genkey(ctx *cli.Context) error {
- if ctx.NArg() != 1 {
- return errors.New("need key file as argument")
- }
- file := ctx.Args().Get(0)
-
- key, err := crypto.GenerateKey()
- if err != nil {
- return fmt.Errorf("could not generate key: %v", err)
- }
- return crypto.SaveECDSA(file, key)
-}
-
-func keyToID(ctx *cli.Context) error {
- n, err := makeRecord(ctx)
- if err != nil {
- return err
- }
- fmt.Println(n.ID())
- return nil
-}
-
-func keyToURL(ctx *cli.Context) error {
- n, err := makeRecord(ctx)
- if err != nil {
- return err
- }
- fmt.Println(n.URLv4())
- return nil
-}
-
-func keyToRecord(ctx *cli.Context) error {
- n, err := makeRecord(ctx)
- if err != nil {
- return err
- }
- fmt.Println(n.String())
- return nil
-}
-
-func makeRecord(ctx *cli.Context) (*enode.Node, error) {
- if ctx.NArg() != 1 {
- return nil, errors.New("need key file as argument")
- }
-
- var (
- file = ctx.Args().Get(0)
- host = ctx.String(hostFlag.Name)
- tcp = ctx.Int(tcpPortFlag.Name)
- udp = ctx.Int(udpPortFlag.Name)
- )
- key, err := crypto.LoadECDSA(file)
- if err != nil {
- return nil, err
- }
-
- var r enr.Record
- if host != "" {
- ip := net.ParseIP(host)
- if ip == nil {
- return nil, fmt.Errorf("invalid IP address %q", host)
- }
- r.Set(enr.IP(ip))
- }
- if udp != 0 {
- r.Set(enr.UDP(udp))
- }
- if tcp != 0 {
- r.Set(enr.TCP(tcp))
- }
-
- if err := enode.SignV4(&r, key); err != nil {
- return nil, err
- }
- return enode.New(enode.ValidSchemes, &r)
-}
diff --git a/cmd/devp2p/main.go b/cmd/devp2p/main.go
deleted file mode 100644
index 8461a8b9b5..0000000000
--- a/cmd/devp2p/main.go
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2019 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "fmt"
- "os"
-
- "github.com/ethereum/go-ethereum/internal/debug"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/urfave/cli/v2"
-)
-
-var app = flags.NewApp("go-ethereum devp2p tool")
-
-func init() {
- app.Flags = append(app.Flags, debug.Flags...)
- app.Before = func(ctx *cli.Context) error {
- flags.MigrateGlobalFlags(ctx)
- return debug.Setup(ctx)
- }
- app.After = func(ctx *cli.Context) error {
- debug.Exit()
- return nil
- }
- app.CommandNotFound = func(ctx *cli.Context, cmd string) {
- fmt.Fprintf(os.Stderr, "No such command: %s\n", cmd)
- os.Exit(1)
- }
-
- // Add subcommands.
- app.Commands = []*cli.Command{
- enrdumpCommand,
- keyCommand,
- discv4Command,
- discv5Command,
- dnsCommand,
- nodesetCommand,
- rlpxCommand,
- }
-}
-
-func main() {
- exit(app.Run(os.Args))
-}
-
-// commandHasFlag returns true if the current command supports the given flag.
-func commandHasFlag(ctx *cli.Context, flag cli.Flag) bool {
- names := flag.Names()
- set := make(map[string]struct{}, len(names))
- for _, name := range names {
- set[name] = struct{}{}
- }
- for _, fn := range ctx.FlagNames() {
- if _, ok := set[fn]; ok {
- return true
- }
- }
- return false
-}
-
-// getNodeArg handles the common case of a single node descriptor argument.
-func getNodeArg(ctx *cli.Context) *enode.Node {
- if ctx.NArg() < 1 {
- exit("missing node as command-line argument")
- }
- n, err := parseNode(ctx.Args().First())
- if err != nil {
- exit(err)
- }
- return n
-}
-
-func exit(err interface{}) {
- if err == nil {
- os.Exit(0)
- }
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
-}
diff --git a/cmd/devp2p/nodeset.go b/cmd/devp2p/nodeset.go
deleted file mode 100644
index 7360dc5bcf..0000000000
--- a/cmd/devp2p/nodeset.go
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2019 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "bytes"
- "encoding/json"
- "fmt"
- "os"
- "time"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "golang.org/x/exp/slices"
-)
-
-const jsonIndent = " "
-
-// nodeSet is the nodes.json file format. It holds a set of node records
-// as a JSON object.
-type nodeSet map[enode.ID]nodeJSON
-
-type nodeJSON struct {
- Seq uint64 `json:"seq"`
- N *enode.Node `json:"record"`
-
- // The score tracks how many liveness checks were performed. It is incremented by one
- // every time the node passes a check, and halved every time it doesn't.
- Score int `json:"score,omitempty"`
- // These two track the time of last successful contact.
- FirstResponse time.Time `json:"firstResponse,omitempty"`
- LastResponse time.Time `json:"lastResponse,omitempty"`
- // This one tracks the time of our last attempt to contact the node.
- LastCheck time.Time `json:"lastCheck,omitempty"`
-}
-
-func loadNodesJSON(file string) nodeSet {
- var nodes nodeSet
- if err := common.LoadJSON(file, &nodes); err != nil {
- exit(err)
- }
- return nodes
-}
-
-func writeNodesJSON(file string, nodes nodeSet) {
- nodesJSON, err := json.MarshalIndent(nodes, "", jsonIndent)
- if err != nil {
- exit(err)
- }
- if file == "-" {
- os.Stdout.Write(nodesJSON)
- return
- }
- if err := os.WriteFile(file, nodesJSON, 0644); err != nil {
- exit(err)
- }
-}
-
-// nodes returns the node records contained in the set.
-func (ns nodeSet) nodes() []*enode.Node {
- result := make([]*enode.Node, 0, len(ns))
- for _, n := range ns {
- result = append(result, n.N)
- }
- // Sort by ID.
- slices.SortFunc(result, func(a, b *enode.Node) int {
- return bytes.Compare(a.ID().Bytes(), b.ID().Bytes())
- })
- return result
-}
-
-// add ensures the given nodes are present in the set.
-func (ns nodeSet) add(nodes ...*enode.Node) {
- for _, n := range nodes {
- v := ns[n.ID()]
- v.N = n
- v.Seq = n.Seq()
- ns[n.ID()] = v
- }
-}
-
-// topN returns the top n nodes by score as a new set.
-func (ns nodeSet) topN(n int) nodeSet {
- if n >= len(ns) {
- return ns
- }
-
- byscore := make([]nodeJSON, 0, len(ns))
- for _, v := range ns {
- byscore = append(byscore, v)
- }
- slices.SortFunc(byscore, func(a, b nodeJSON) int {
- if a.Score > b.Score {
- return -1
- }
- if a.Score < b.Score {
- return 1
- }
- return 0
- })
- result := make(nodeSet, n)
- for _, v := range byscore[:n] {
- result[v.N.ID()] = v
- }
- return result
-}
-
-// verify performs integrity checks on the node set.
-func (ns nodeSet) verify() error {
- for id, n := range ns {
- if n.N.ID() != id {
- return fmt.Errorf("invalid node %v: ID does not match ID %v in record", id, n.N.ID())
- }
- if n.N.Seq() != n.Seq {
- return fmt.Errorf("invalid node %v: 'seq' does not match seq %d from record", id, n.N.Seq())
- }
- }
- return nil
-}
diff --git a/cmd/devp2p/nodesetcmd.go b/cmd/devp2p/nodesetcmd.go
deleted file mode 100644
index 6fbc185ad8..0000000000
--- a/cmd/devp2p/nodesetcmd.go
+++ /dev/null
@@ -1,274 +0,0 @@
-// Copyright 2019 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "errors"
- "fmt"
- "net"
- "sort"
- "strconv"
- "strings"
- "time"
-
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/forkid"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/urfave/cli/v2"
-)
-
-var (
- nodesetCommand = &cli.Command{
- Name: "nodeset",
- Usage: "Node set tools",
- Subcommands: []*cli.Command{
- nodesetInfoCommand,
- nodesetFilterCommand,
- },
- }
- nodesetInfoCommand = &cli.Command{
- Name: "info",
- Usage: "Shows statistics about a node set",
- Action: nodesetInfo,
- ArgsUsage: "",
- }
- nodesetFilterCommand = &cli.Command{
- Name: "filter",
- Usage: "Filters a node set",
- Action: nodesetFilter,
- ArgsUsage: " filters..",
-
- SkipFlagParsing: true,
- }
-)
-
-func nodesetInfo(ctx *cli.Context) error {
- if ctx.NArg() < 1 {
- return errors.New("need nodes file as argument")
- }
-
- ns := loadNodesJSON(ctx.Args().First())
- fmt.Printf("Set contains %d nodes.\n", len(ns))
- showAttributeCounts(ns)
- return nil
-}
-
-// showAttributeCounts prints the distribution of ENR attributes in a node set.
-func showAttributeCounts(ns nodeSet) {
- attrcount := make(map[string]int)
- var attrlist []interface{}
- for _, n := range ns {
- r := n.N.Record()
- attrlist = r.AppendElements(attrlist[:0])[1:]
- for i := 0; i < len(attrlist); i += 2 {
- key := attrlist[i].(string)
- attrcount[key]++
- }
- }
-
- var keys []string
- var maxlength int
- for key := range attrcount {
- keys = append(keys, key)
- if len(key) > maxlength {
- maxlength = len(key)
- }
- }
- sort.Strings(keys)
- fmt.Println("ENR attribute counts:")
- for _, key := range keys {
- fmt.Printf("%s%s: %d\n", strings.Repeat(" ", maxlength-len(key)+1), key, attrcount[key])
- }
-}
-
-func nodesetFilter(ctx *cli.Context) error {
- if ctx.NArg() < 1 {
- return errors.New("need nodes file as argument")
- }
- // Parse -limit.
- limit, err := parseFilterLimit(ctx.Args().Tail())
- if err != nil {
- return err
- }
- // Parse the filters.
- filter, err := andFilter(ctx.Args().Tail())
- if err != nil {
- return err
- }
-
- // Load nodes and apply filters.
- ns := loadNodesJSON(ctx.Args().First())
- result := make(nodeSet)
- for id, n := range ns {
- if filter(n) {
- result[id] = n
- }
- }
- if limit >= 0 {
- result = result.topN(limit)
- }
- writeNodesJSON("-", result)
- return nil
-}
-
-type nodeFilter func(nodeJSON) bool
-
-type nodeFilterC struct {
- narg int
- fn func([]string) (nodeFilter, error)
-}
-
-var filterFlags = map[string]nodeFilterC{
- "-limit": {1, trueFilter}, // needed to skip over -limit
- "-ip": {1, ipFilter},
- "-min-age": {1, minAgeFilter},
- "-eth-network": {1, ethFilter},
- "-les-server": {0, lesFilter},
- "-snap": {0, snapFilter},
-}
-
-// parseFilters parses nodeFilters from args.
-func parseFilters(args []string) ([]nodeFilter, error) {
- var filters []nodeFilter
- for len(args) > 0 {
- fc, ok := filterFlags[args[0]]
- if !ok {
- return nil, fmt.Errorf("invalid filter %q", args[0])
- }
- if len(args)-1 < fc.narg {
- return nil, fmt.Errorf("filter %q wants %d arguments, have %d", args[0], fc.narg, len(args)-1)
- }
- filter, err := fc.fn(args[1 : 1+fc.narg])
- if err != nil {
- return nil, fmt.Errorf("%s: %v", args[0], err)
- }
- filters = append(filters, filter)
- args = args[1+fc.narg:]
- }
- return filters, nil
-}
-
-// parseFilterLimit parses the -limit option in args. It returns -1 if there is no limit.
-func parseFilterLimit(args []string) (int, error) {
- limit := -1
- for i, arg := range args {
- if arg == "-limit" {
- if i == len(args)-1 {
- return -1, errors.New("-limit requires an argument")
- }
- n, err := strconv.Atoi(args[i+1])
- if err != nil {
- return -1, fmt.Errorf("invalid -limit %q", args[i+1])
- }
- limit = n
- }
- }
- return limit, nil
-}
-
-// andFilter parses node filters in args and returns a single filter that requires all
-// of them to match.
-func andFilter(args []string) (nodeFilter, error) {
- checks, err := parseFilters(args)
- if err != nil {
- return nil, err
- }
- f := func(n nodeJSON) bool {
- for _, filter := range checks {
- if !filter(n) {
- return false
- }
- }
- return true
- }
- return f, nil
-}
-
-func trueFilter(args []string) (nodeFilter, error) {
- return func(n nodeJSON) bool { return true }, nil
-}
-
-func ipFilter(args []string) (nodeFilter, error) {
- _, cidr, err := net.ParseCIDR(args[0])
- if err != nil {
- return nil, err
- }
- f := func(n nodeJSON) bool { return cidr.Contains(n.N.IP()) }
- return f, nil
-}
-
-func minAgeFilter(args []string) (nodeFilter, error) {
- minage, err := time.ParseDuration(args[0])
- if err != nil {
- return nil, err
- }
- f := func(n nodeJSON) bool {
- age := n.LastResponse.Sub(n.FirstResponse)
- return age >= minage
- }
- return f, nil
-}
-
-func ethFilter(args []string) (nodeFilter, error) {
- var filter forkid.Filter
- switch args[0] {
- case "mainnet":
- filter = forkid.NewStaticFilter(params.MainnetChainConfig, core.DefaultGenesisBlock().ToBlock())
- case "goerli":
- filter = forkid.NewStaticFilter(params.GoerliChainConfig, core.DefaultGoerliGenesisBlock().ToBlock())
- case "sepolia":
- filter = forkid.NewStaticFilter(params.SepoliaChainConfig, core.DefaultSepoliaGenesisBlock().ToBlock())
- case "holesky":
- filter = forkid.NewStaticFilter(params.HoleskyChainConfig, core.DefaultHoleskyGenesisBlock().ToBlock())
- default:
- return nil, fmt.Errorf("unknown network %q", args[0])
- }
-
- f := func(n nodeJSON) bool {
- var eth struct {
- ForkID forkid.ID
- Tail []rlp.RawValue `rlp:"tail"`
- }
- if n.N.Load(enr.WithEntry("eth", ð)) != nil {
- return false
- }
- return filter(eth.ForkID) == nil
- }
- return f, nil
-}
-
-func lesFilter(args []string) (nodeFilter, error) {
- f := func(n nodeJSON) bool {
- var les struct {
- Tail []rlp.RawValue `rlp:"tail"`
- }
- return n.N.Load(enr.WithEntry("les", &les)) == nil
- }
- return f, nil
-}
-
-func snapFilter(args []string) (nodeFilter, error) {
- f := func(n nodeJSON) bool {
- var snap struct {
- Tail []rlp.RawValue `rlp:"tail"`
- }
- return n.N.Load(enr.WithEntry("snap", &snap)) == nil
- }
- return f, nil
-}
diff --git a/cmd/devp2p/rlpxcmd.go b/cmd/devp2p/rlpxcmd.go
deleted file mode 100644
index aa7d065818..0000000000
--- a/cmd/devp2p/rlpxcmd.go
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "errors"
- "fmt"
- "net"
-
- "github.com/ethereum/go-ethereum/cmd/devp2p/internal/ethtest"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/rlpx"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/urfave/cli/v2"
-)
-
-var (
- rlpxCommand = &cli.Command{
- Name: "rlpx",
- Usage: "RLPx Commands",
- Subcommands: []*cli.Command{
- rlpxPingCommand,
- rlpxEthTestCommand,
- rlpxSnapTestCommand,
- },
- }
- rlpxPingCommand = &cli.Command{
- Name: "ping",
- Usage: "ping ",
- Action: rlpxPing,
- }
- rlpxEthTestCommand = &cli.Command{
- Name: "eth-test",
- Usage: "Runs eth protocol tests against a node",
- ArgsUsage: "",
- Action: rlpxEthTest,
- Flags: []cli.Flag{
- testPatternFlag,
- testTAPFlag,
- testChainDirFlag,
- testNodeFlag,
- testNodeJWTFlag,
- testNodeEngineFlag,
- },
- }
- rlpxSnapTestCommand = &cli.Command{
- Name: "snap-test",
- Usage: "Runs snap protocol tests against a node",
- ArgsUsage: "",
- Action: rlpxSnapTest,
- Flags: []cli.Flag{
- testPatternFlag,
- testTAPFlag,
- testChainDirFlag,
- testNodeFlag,
- testNodeJWTFlag,
- testNodeEngineFlag,
- },
- }
-)
-
-func rlpxPing(ctx *cli.Context) error {
- n := getNodeArg(ctx)
- fd, err := net.Dial("tcp", fmt.Sprintf("%v:%d", n.IP(), n.TCP()))
- if err != nil {
- return err
- }
- conn := rlpx.NewConn(fd, n.Pubkey())
- ourKey, _ := crypto.GenerateKey()
- _, err = conn.Handshake(ourKey)
- if err != nil {
- return err
- }
- code, data, _, err := conn.Read()
- if err != nil {
- return err
- }
- switch code {
- case 0:
- var h ethtest.Hello
- if err := rlp.DecodeBytes(data, &h); err != nil {
- return fmt.Errorf("invalid handshake: %v", err)
- }
- fmt.Printf("%+v\n", h)
- case 1:
- var msg []p2p.DiscReason
- if rlp.DecodeBytes(data, &msg); len(msg) == 0 {
- return errors.New("invalid disconnect message")
- }
- return fmt.Errorf("received disconnect message: %v", msg[0])
- default:
- return fmt.Errorf("invalid message code %d, expected handshake (code zero)", code)
- }
- return nil
-}
-
-// rlpxEthTest runs the eth protocol test suite.
-func rlpxEthTest(ctx *cli.Context) error {
- p := cliTestParams(ctx)
- suite, err := ethtest.NewSuite(p.node, p.chainDir, p.engineAPI, p.jwt)
- if err != nil {
- exit(err)
- }
- return runTests(ctx, suite.EthTests())
-}
-
-// rlpxSnapTest runs the snap protocol test suite.
-func rlpxSnapTest(ctx *cli.Context) error {
- p := cliTestParams(ctx)
- suite, err := ethtest.NewSuite(p.node, p.chainDir, p.engineAPI, p.jwt)
- if err != nil {
- exit(err)
- }
- return runTests(ctx, suite.SnapTests())
-}
-
-type testParams struct {
- node *enode.Node
- engineAPI string
- jwt string
- chainDir string
-}
-
-func cliTestParams(ctx *cli.Context) *testParams {
- nodeStr := ctx.String(testNodeFlag.Name)
- if nodeStr == "" {
- exit(fmt.Errorf("missing -%s", testNodeFlag.Name))
- }
- node, err := parseNode(nodeStr)
- if err != nil {
- exit(err)
- }
- p := testParams{
- node: node,
- engineAPI: ctx.String(testNodeEngineFlag.Name),
- jwt: ctx.String(testNodeJWTFlag.Name),
- chainDir: ctx.String(testChainDirFlag.Name),
- }
- if p.engineAPI == "" {
- exit(fmt.Errorf("missing -%s", testNodeEngineFlag.Name))
- }
- if p.jwt == "" {
- exit(fmt.Errorf("missing -%s", testNodeJWTFlag.Name))
- }
- if p.chainDir == "" {
- exit(fmt.Errorf("missing -%s", testChainDirFlag.Name))
- }
- return &p
-}
diff --git a/cmd/devp2p/runtest.go b/cmd/devp2p/runtest.go
deleted file mode 100644
index 7e3723c641..0000000000
--- a/cmd/devp2p/runtest.go
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "os"
-
- "github.com/ethereum/go-ethereum/cmd/devp2p/internal/v4test"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/internal/utesting"
- "github.com/ethereum/go-ethereum/log"
- "github.com/urfave/cli/v2"
-)
-
-var (
- testPatternFlag = &cli.StringFlag{
- Name: "run",
- Usage: "Pattern of test suite(s) to run",
- Category: flags.TestingCategory,
- }
- testTAPFlag = &cli.BoolFlag{
- Name: "tap",
- Usage: "Output test results in TAP format",
- Category: flags.TestingCategory,
- }
-
- // for eth/snap tests
- testChainDirFlag = &cli.StringFlag{
- Name: "chain",
- Usage: "Test chain directory (required)",
- Category: flags.TestingCategory,
- }
- testNodeFlag = &cli.StringFlag{
- Name: "node",
- Usage: "Peer-to-Peer endpoint (ENR) of the test node (required)",
- Category: flags.TestingCategory,
- }
- testNodeJWTFlag = &cli.StringFlag{
- Name: "jwtsecret",
- Usage: "JWT secret for the engine API of the test node (required)",
- Category: flags.TestingCategory,
- Value: "0x7365637265747365637265747365637265747365637265747365637265747365",
- }
- testNodeEngineFlag = &cli.StringFlag{
- Name: "engineapi",
- Usage: "Engine API endpoint of the test node (required)",
- Category: flags.TestingCategory,
- }
-
- // These two are specific to the discovery tests.
- testListen1Flag = &cli.StringFlag{
- Name: "listen1",
- Usage: "IP address of the first tester",
- Value: v4test.Listen1,
- Category: flags.TestingCategory,
- }
- testListen2Flag = &cli.StringFlag{
- Name: "listen2",
- Usage: "IP address of the second tester",
- Value: v4test.Listen2,
- Category: flags.TestingCategory,
- }
-)
-
-func runTests(ctx *cli.Context, tests []utesting.Test) error {
- // Filter test cases.
- if ctx.IsSet(testPatternFlag.Name) {
- tests = utesting.MatchTests(tests, ctx.String(testPatternFlag.Name))
- }
- // Disable logging unless explicitly enabled.
- if !ctx.IsSet("verbosity") && !ctx.IsSet("vmodule") {
- log.SetDefault(log.NewLogger(log.DiscardHandler()))
- }
- // Run the tests.
- var run = utesting.RunTests
- if ctx.Bool(testTAPFlag.Name) {
- run = utesting.RunTAP
- }
- results := run(tests, os.Stdout)
- if utesting.CountFailures(results) > 0 {
- os.Exit(1)
- }
- return nil
-}
diff --git a/cmd/ethkey/README.md b/cmd/ethkey/README.md
deleted file mode 100644
index bfddd14677..0000000000
--- a/cmd/ethkey/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-ethkey
-======
-
-ethkey is a simple command-line tool for working with Ethereum keyfiles.
-
-
-# Usage
-
-### `ethkey generate`
-
-Generate a new keyfile.
-If you want to use an existing private key to use in the keyfile, it can be
-specified by setting `--privatekey` with the location of the file containing the
-private key.
-
-
-### `ethkey inspect `
-
-Print various information about the keyfile.
-Private key information can be printed by using the `--private` flag;
-make sure to use this feature with great caution!
-
-
-### `ethkey signmessage `
-
-Sign the message with a keyfile.
-It is possible to refer to a file containing the message.
-To sign a message contained in a file, use the `--msgfile` flag.
-
-
-### `ethkey verifymessage `
-
-Verify the signature of the message.
-It is possible to refer to a file containing the message.
-To sign a message contained in a file, use the --msgfile flag.
-
-
-### `ethkey changepassword `
-
-Change the password of a keyfile.
-use the `--newpasswordfile` to point to the new password file.
-
-
-## Passwords
-
-For every command that uses a keyfile, you will be prompted to provide the
-password for decrypting the keyfile. To avoid this message, it is possible
-to pass the password by using the `--passwordfile` flag pointing to a file that
-contains the password.
-
-## JSON
-
-In case you need to output the result in a JSON format, you shall by using the `--json` flag.
diff --git a/cmd/ethkey/changepassword.go b/cmd/ethkey/changepassword.go
deleted file mode 100644
index 4298e2b834..0000000000
--- a/cmd/ethkey/changepassword.go
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2018 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "fmt"
- "os"
- "strings"
-
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/urfave/cli/v2"
-)
-
-var newPassphraseFlag = &cli.StringFlag{
- Name: "newpasswordfile",
- Usage: "the file that contains the new password for the keyfile",
-}
-
-var commandChangePassphrase = &cli.Command{
- Name: "changepassword",
- Usage: "change the password on a keyfile",
- ArgsUsage: "",
- Description: `
-Change the password of a keyfile.`,
- Flags: []cli.Flag{
- passphraseFlag,
- newPassphraseFlag,
- },
- Action: func(ctx *cli.Context) error {
- keyfilepath := ctx.Args().First()
-
- // Read key from file.
- keyjson, err := os.ReadFile(keyfilepath)
- if err != nil {
- utils.Fatalf("Failed to read the keyfile at '%s': %v", keyfilepath, err)
- }
-
- // Decrypt key with passphrase.
- passphrase := getPassphrase(ctx, false)
- key, err := keystore.DecryptKey(keyjson, passphrase)
- if err != nil {
- utils.Fatalf("Error decrypting key: %v", err)
- }
-
- // Get a new passphrase.
- fmt.Println("Please provide a new password")
- var newPhrase string
- if passFile := ctx.String(newPassphraseFlag.Name); passFile != "" {
- content, err := os.ReadFile(passFile)
- if err != nil {
- utils.Fatalf("Failed to read new password file '%s': %v", passFile, err)
- }
- newPhrase = strings.TrimRight(string(content), "\r\n")
- } else {
- newPhrase = utils.GetPassPhrase("", true)
- }
-
- // Encrypt the key with the new passphrase.
- newJson, err := keystore.EncryptKey(key, newPhrase, keystore.StandardScryptN, keystore.StandardScryptP)
- if err != nil {
- utils.Fatalf("Error encrypting with new password: %v", err)
- }
-
- // Then write the new keyfile in place of the old one.
- if err := os.WriteFile(keyfilepath, newJson, 0600); err != nil {
- utils.Fatalf("Error writing new keyfile to disk: %v", err)
- }
-
- // Don't print anything. Just return successfully,
- // producing a positive exit code.
- return nil
- },
-}
diff --git a/cmd/ethkey/generate.go b/cmd/ethkey/generate.go
deleted file mode 100644
index 60d8b3c779..0000000000
--- a/cmd/ethkey/generate.go
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "crypto/ecdsa"
- "fmt"
- "os"
- "path/filepath"
-
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/google/uuid"
- "github.com/urfave/cli/v2"
-)
-
-type outputGenerate struct {
- Address string
- AddressEIP55 string
-}
-
-var (
- privateKeyFlag = &cli.StringFlag{
- Name: "privatekey",
- Usage: "file containing a raw private key to encrypt",
- }
- lightKDFFlag = &cli.BoolFlag{
- Name: "lightkdf",
- Usage: "use less secure scrypt parameters",
- }
-)
-
-var commandGenerate = &cli.Command{
- Name: "generate",
- Usage: "generate new keyfile",
- ArgsUsage: "[ ]",
- Description: `
-Generate a new keyfile.
-
-If you want to encrypt an existing private key, it can be specified by setting
---privatekey with the location of the file containing the private key.
-`,
- Flags: []cli.Flag{
- passphraseFlag,
- jsonFlag,
- privateKeyFlag,
- lightKDFFlag,
- },
- Action: func(ctx *cli.Context) error {
- // Check if keyfile path given and make sure it doesn't already exist.
- keyfilepath := ctx.Args().First()
- if keyfilepath == "" {
- keyfilepath = defaultKeyfileName
- }
- if _, err := os.Stat(keyfilepath); err == nil {
- utils.Fatalf("Keyfile already exists at %s.", keyfilepath)
- } else if !os.IsNotExist(err) {
- utils.Fatalf("Error checking if keyfile exists: %v", err)
- }
-
- var privateKey *ecdsa.PrivateKey
- var err error
- if file := ctx.String(privateKeyFlag.Name); file != "" {
- // Load private key from file.
- privateKey, err = crypto.LoadECDSA(file)
- if err != nil {
- utils.Fatalf("Can't load private key: %v", err)
- }
- } else {
- // If not loaded, generate random.
- privateKey, err = crypto.GenerateKey()
- if err != nil {
- utils.Fatalf("Failed to generate random private key: %v", err)
- }
- }
-
- // Create the keyfile object with a random UUID.
- UUID, err := uuid.NewRandom()
- if err != nil {
- utils.Fatalf("Failed to generate random uuid: %v", err)
- }
- key := &keystore.Key{
- Id: UUID,
- Address: crypto.PubkeyToAddress(privateKey.PublicKey),
- PrivateKey: privateKey,
- }
-
- // Encrypt key with passphrase.
- passphrase := getPassphrase(ctx, true)
- scryptN, scryptP := keystore.StandardScryptN, keystore.StandardScryptP
- if ctx.Bool(lightKDFFlag.Name) {
- scryptN, scryptP = keystore.LightScryptN, keystore.LightScryptP
- }
- keyjson, err := keystore.EncryptKey(key, passphrase, scryptN, scryptP)
- if err != nil {
- utils.Fatalf("Error encrypting key: %v", err)
- }
-
- // Store the file to disk.
- if err := os.MkdirAll(filepath.Dir(keyfilepath), 0700); err != nil {
- utils.Fatalf("Could not create directory %s", filepath.Dir(keyfilepath))
- }
- if err := os.WriteFile(keyfilepath, keyjson, 0600); err != nil {
- utils.Fatalf("Failed to write keyfile to %s: %v", keyfilepath, err)
- }
-
- // Output some information.
- out := outputGenerate{
- Address: key.Address.Hex(),
- }
- if ctx.Bool(jsonFlag.Name) {
- mustPrintJSON(out)
- } else {
- fmt.Println("Address:", out.Address)
- }
- return nil
- },
-}
diff --git a/cmd/ethkey/inspect.go b/cmd/ethkey/inspect.go
deleted file mode 100644
index 29b1c13e85..0000000000
--- a/cmd/ethkey/inspect.go
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "encoding/hex"
- "fmt"
- "os"
-
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/urfave/cli/v2"
-)
-
-type outputInspect struct {
- Address string
- PublicKey string
- PrivateKey string
-}
-
-var (
- privateFlag = &cli.BoolFlag{
- Name: "private",
- Usage: "include the private key in the output",
- }
-)
-
-var commandInspect = &cli.Command{
- Name: "inspect",
- Usage: "inspect a keyfile",
- ArgsUsage: "",
- Description: `
-Print various information about the keyfile.
-
-Private key information can be printed by using the --private flag;
-make sure to use this feature with great caution!`,
- Flags: []cli.Flag{
- passphraseFlag,
- jsonFlag,
- privateFlag,
- },
- Action: func(ctx *cli.Context) error {
- keyfilepath := ctx.Args().First()
-
- // Read key from file.
- keyjson, err := os.ReadFile(keyfilepath)
- if err != nil {
- utils.Fatalf("Failed to read the keyfile at '%s': %v", keyfilepath, err)
- }
-
- // Decrypt key with passphrase.
- passphrase := getPassphrase(ctx, false)
- key, err := keystore.DecryptKey(keyjson, passphrase)
- if err != nil {
- utils.Fatalf("Error decrypting key: %v", err)
- }
-
- // Output all relevant information we can retrieve.
- showPrivate := ctx.Bool(privateFlag.Name)
- out := outputInspect{
- Address: key.Address.Hex(),
- PublicKey: hex.EncodeToString(
- crypto.FromECDSAPub(&key.PrivateKey.PublicKey)),
- }
- if showPrivate {
- out.PrivateKey = hex.EncodeToString(crypto.FromECDSA(key.PrivateKey))
- }
-
- if ctx.Bool(jsonFlag.Name) {
- mustPrintJSON(out)
- } else {
- fmt.Println("Address: ", out.Address)
- fmt.Println("Public key: ", out.PublicKey)
- if showPrivate {
- fmt.Println("Private key: ", out.PrivateKey)
- }
- }
- return nil
- },
-}
diff --git a/cmd/ethkey/main.go b/cmd/ethkey/main.go
deleted file mode 100644
index 25c0d104f6..0000000000
--- a/cmd/ethkey/main.go
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "fmt"
- "os"
-
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/urfave/cli/v2"
-)
-
-const (
- defaultKeyfileName = "keyfile.json"
-)
-
-var app *cli.App
-
-func init() {
- app = flags.NewApp("Ethereum key manager")
- app.Commands = []*cli.Command{
- commandGenerate,
- commandInspect,
- commandChangePassphrase,
- commandSignMessage,
- commandVerifyMessage,
- }
-}
-
-// Commonly used command line flags.
-var (
- passphraseFlag = &cli.StringFlag{
- Name: "passwordfile",
- Usage: "the file that contains the password for the keyfile",
- }
- jsonFlag = &cli.BoolFlag{
- Name: "json",
- Usage: "output JSON instead of human-readable format",
- }
-)
-
-func main() {
- if err := app.Run(os.Args); err != nil {
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
- }
-}
diff --git a/cmd/ethkey/message.go b/cmd/ethkey/message.go
deleted file mode 100644
index 6b8dec03cd..0000000000
--- a/cmd/ethkey/message.go
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "encoding/hex"
- "fmt"
- "os"
-
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/urfave/cli/v2"
-)
-
-type outputSign struct {
- Signature string
-}
-
-var msgfileFlag = &cli.StringFlag{
- Name: "msgfile",
- Usage: "file containing the message to sign/verify",
-}
-
-var commandSignMessage = &cli.Command{
- Name: "signmessage",
- Usage: "sign a message",
- ArgsUsage: " ",
- Description: `
-Sign the message with a keyfile.
-
-To sign a message contained in a file, use the --msgfile flag.
-`,
- Flags: []cli.Flag{
- passphraseFlag,
- jsonFlag,
- msgfileFlag,
- },
- Action: func(ctx *cli.Context) error {
- message := getMessage(ctx, 1)
-
- // Load the keyfile.
- keyfilepath := ctx.Args().First()
- keyjson, err := os.ReadFile(keyfilepath)
- if err != nil {
- utils.Fatalf("Failed to read the keyfile at '%s': %v", keyfilepath, err)
- }
-
- // Decrypt key with passphrase.
- passphrase := getPassphrase(ctx, false)
- key, err := keystore.DecryptKey(keyjson, passphrase)
- if err != nil {
- utils.Fatalf("Error decrypting key: %v", err)
- }
-
- signature, err := crypto.Sign(accounts.TextHash(message), key.PrivateKey)
- if err != nil {
- utils.Fatalf("Failed to sign message: %v", err)
- }
- out := outputSign{Signature: hex.EncodeToString(signature)}
- if ctx.Bool(jsonFlag.Name) {
- mustPrintJSON(out)
- } else {
- fmt.Println("Signature:", out.Signature)
- }
- return nil
- },
-}
-
-type outputVerify struct {
- Success bool
- RecoveredAddress string
- RecoveredPublicKey string
-}
-
-var commandVerifyMessage = &cli.Command{
- Name: "verifymessage",
- Usage: "verify the signature of a signed message",
- ArgsUsage: " ",
- Description: `
-Verify the signature of the message.
-It is possible to refer to a file containing the message.`,
- Flags: []cli.Flag{
- jsonFlag,
- msgfileFlag,
- },
- Action: func(ctx *cli.Context) error {
- addressStr := ctx.Args().First()
- signatureHex := ctx.Args().Get(1)
- message := getMessage(ctx, 2)
-
- if !common.IsHexAddress(addressStr) {
- utils.Fatalf("Invalid address: %s", addressStr)
- }
- address := common.HexToAddress(addressStr)
- signature, err := hex.DecodeString(signatureHex)
- if err != nil {
- utils.Fatalf("Signature encoding is not hexadecimal: %v", err)
- }
-
- recoveredPubkey, err := crypto.SigToPub(accounts.TextHash(message), signature)
- if err != nil || recoveredPubkey == nil {
- utils.Fatalf("Signature verification failed: %v", err)
- }
- recoveredPubkeyBytes := crypto.FromECDSAPub(recoveredPubkey)
- recoveredAddress := crypto.PubkeyToAddress(*recoveredPubkey)
- success := address == recoveredAddress
-
- out := outputVerify{
- Success: success,
- RecoveredPublicKey: hex.EncodeToString(recoveredPubkeyBytes),
- RecoveredAddress: recoveredAddress.Hex(),
- }
- if ctx.Bool(jsonFlag.Name) {
- mustPrintJSON(out)
- } else {
- if out.Success {
- fmt.Println("Signature verification successful!")
- } else {
- fmt.Println("Signature verification failed!")
- }
- fmt.Println("Recovered public key:", out.RecoveredPublicKey)
- fmt.Println("Recovered address:", out.RecoveredAddress)
- }
- return nil
- },
-}
-
-func getMessage(ctx *cli.Context, msgarg int) []byte {
- if file := ctx.String(msgfileFlag.Name); file != "" {
- if ctx.NArg() > msgarg {
- utils.Fatalf("Can't use --msgfile and message argument at the same time.")
- }
- msg, err := os.ReadFile(file)
- if err != nil {
- utils.Fatalf("Can't read message file: %v", err)
- }
- return msg
- } else if ctx.NArg() == msgarg+1 {
- return []byte(ctx.Args().Get(msgarg))
- }
- utils.Fatalf("Invalid number of arguments: want %d, got %d", msgarg+1, ctx.NArg())
- return nil
-}
diff --git a/cmd/ethkey/message_test.go b/cmd/ethkey/message_test.go
deleted file mode 100644
index 389bb8c8ea..0000000000
--- a/cmd/ethkey/message_test.go
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2018 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "path/filepath"
- "testing"
-)
-
-func TestMessageSignVerify(t *testing.T) {
- t.Parallel()
- tmpdir := t.TempDir()
-
- keyfile := filepath.Join(tmpdir, "the-keyfile")
- message := "test message"
-
- // Create the key.
- generate := runEthkey(t, "generate", "--lightkdf", keyfile)
- generate.Expect(`
-!! Unsupported terminal, password will be echoed.
-Password: {{.InputLine "foobar"}}
-Repeat password: {{.InputLine "foobar"}}
-`)
- _, matches := generate.ExpectRegexp(`Address: (0x[0-9a-fA-F]{40})\n`)
- address := matches[1]
- generate.ExpectExit()
-
- // Sign a message.
- sign := runEthkey(t, "signmessage", keyfile, message)
- sign.Expect(`
-!! Unsupported terminal, password will be echoed.
-Password: {{.InputLine "foobar"}}
-`)
- _, matches = sign.ExpectRegexp(`Signature: ([0-9a-f]+)\n`)
- signature := matches[1]
- sign.ExpectExit()
-
- // Verify the message.
- verify := runEthkey(t, "verifymessage", address, signature, message)
- _, matches = verify.ExpectRegexp(`
-Signature verification successful!
-Recovered public key: [0-9a-f]+
-Recovered address: (0x[0-9a-fA-F]{40})
-`)
- recovered := matches[1]
- verify.ExpectExit()
-
- if recovered != address {
- t.Error("recovered address doesn't match generated key")
- }
-}
diff --git a/cmd/ethkey/run_test.go b/cmd/ethkey/run_test.go
deleted file mode 100644
index 73506e5da1..0000000000
--- a/cmd/ethkey/run_test.go
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2018 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "fmt"
- "os"
- "testing"
-
- "github.com/ethereum/go-ethereum/internal/cmdtest"
- "github.com/ethereum/go-ethereum/internal/reexec"
-)
-
-type testEthkey struct {
- *cmdtest.TestCmd
-}
-
-// spawns ethkey with the given command line args.
-func runEthkey(t *testing.T, args ...string) *testEthkey {
- tt := new(testEthkey)
- tt.TestCmd = cmdtest.NewTestCmd(t, tt)
- tt.Run("ethkey-test", args...)
- return tt
-}
-
-func TestMain(m *testing.M) {
- // Run the app if we've been exec'd as "ethkey-test" in runEthkey.
- reexec.Register("ethkey-test", func() {
- if err := app.Run(os.Args); err != nil {
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
- }
- os.Exit(0)
- })
- // check if we have been reexec'd
- if reexec.Init() {
- return
- }
- os.Exit(m.Run())
-}
diff --git a/cmd/ethkey/utils.go b/cmd/ethkey/utils.go
deleted file mode 100644
index 2821145089..0000000000
--- a/cmd/ethkey/utils.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "encoding/json"
- "fmt"
- "os"
- "strings"
-
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/urfave/cli/v2"
-)
-
-// getPassphrase obtains a passphrase given by the user. It first checks the
-// --passfile command line flag and ultimately prompts the user for a
-// passphrase.
-func getPassphrase(ctx *cli.Context, confirmation bool) string {
- // Look for the --passwordfile flag.
- passphraseFile := ctx.String(passphraseFlag.Name)
- if passphraseFile != "" {
- content, err := os.ReadFile(passphraseFile)
- if err != nil {
- utils.Fatalf("Failed to read password file '%s': %v",
- passphraseFile, err)
- }
- return strings.TrimRight(string(content), "\r\n")
- }
-
- // Otherwise prompt the user for the passphrase.
- return utils.GetPassPhrase("", confirmation)
-}
-
-// mustPrintJSON prints the JSON encoding of the given object and
-// exits the program with an error message when the marshaling fails.
-func mustPrintJSON(jsonObject interface{}) {
- str, err := json.MarshalIndent(jsonObject, "", " ")
- if err != nil {
- utils.Fatalf("Failed to marshal JSON object: %v", err)
- }
- fmt.Println(string(str))
-}
diff --git a/cmd/evm/README.md b/cmd/evm/README.md
deleted file mode 100644
index 25647c18a9..0000000000
--- a/cmd/evm/README.md
+++ /dev/null
@@ -1,626 +0,0 @@
-# EVM tool
-
-The EVM tool provides a few useful subcommands to facilitate testing at the EVM
-layer.
-
-* transition tool (`t8n`) : a stateless state transition utility
-* transaction tool (`t9n`) : a transaction validation utility
-* block builder tool (`b11r`): a block assembler utility
-
-## State transition tool (`t8n`)
-
-
-The `evm t8n` tool is a stateless state transition utility. It is a utility
-which can
-
-1. Take a prestate, including
- - Accounts,
- - Block context information,
- - Previous blockshashes (*optional)
-2. Apply a set of transactions,
-3. Apply a mining-reward (*optional),
-4. And generate a post-state, including
- - State root, transaction root, receipt root,
- - Information about rejected transactions,
- - Optionally: a full or partial post-state dump
-
-### Specification
-
-The idea is to specify the behaviour of this binary very _strict_, so that other
-node implementors can build replicas based on their own state-machines, and the
-state generators can swap between a \`geth\`-based implementation and a \`parityvm\`-based
-implementation.
-
-#### Command line params
-
-Command line params that need to be supported are
-
-```
- --input.alloc value (default: "alloc.json")
- --input.env value (default: "env.json")
- --input.txs value (default: "txs.json")
- --output.alloc value (default: "alloc.json")
- --output.basedir value
- --output.body value
- --output.result value (default: "result.json")
- --state.chainid value (default: 1)
- --state.fork value (default: "GrayGlacier")
- --state.reward value (default: 0)
- --trace.memory (default: false)
- --trace.nomemory (default: true)
- --trace.noreturndata (default: true)
- --trace.nostack (default: false)
- --trace.returndata (default: false)
-```
-#### Objects
-
-The transition tool uses JSON objects to read and write data related to the transition operation. The
-following object definitions are required.
-
-##### `alloc`
-
-The `alloc` object defines the prestate that transition will begin with.
-
-```go
-// Map of address to account definition.
-type Alloc map[common.Address]Account
-// Genesis account. Each field is optional.
-type Account struct {
- Code []byte `json:"code"`
- Storage map[common.Hash]common.Hash `json:"storage"`
- Balance *big.Int `json:"balance"`
- Nonce uint64 `json:"nonce"`
- SecretKey []byte `json:"secretKey"`
-}
-```
-
-##### `env`
-
-The `env` object defines the environmental context in which the transition will
-take place.
-
-```go
-type Env struct {
- // required
- CurrentCoinbase common.Address `json:"currentCoinbase"`
- CurrentGasLimit uint64 `json:"currentGasLimit"`
- CurrentNumber uint64 `json:"currentNumber"`
- CurrentTimestamp uint64 `json:"currentTimestamp"`
- Withdrawals []*Withdrawal `json:"withdrawals"`
- // optional
- CurrentDifficulty *big.Int `json:"currentDifficulty"`
- CurrentRandom *big.Int `json:"currentRandom"`
- CurrentBaseFee *big.Int `json:"currentBaseFee"`
- ParentDifficulty *big.Int `json:"parentDifficulty"`
- ParentGasUsed uint64 `json:"parentGasUsed"`
- ParentGasLimit uint64 `json:"parentGasLimit"`
- ParentTimestamp uint64 `json:"parentTimestamp"`
- BlockHashes map[uint64]common.Hash `json:"blockHashes"`
- ParentUncleHash common.Hash `json:"parentUncleHash"`
- Ommers []Ommer `json:"ommers"`
-}
-type Ommer struct {
- Delta uint64 `json:"delta"`
- Address common.Address `json:"address"`
-}
-type Withdrawal struct {
- Index uint64 `json:"index"`
- ValidatorIndex uint64 `json:"validatorIndex"`
- Recipient common.Address `json:"recipient"`
- Amount *big.Int `json:"amount"`
-}
-```
-
-##### `txs`
-
-The `txs` object is an array of any of the transaction types: `LegacyTx`,
-`AccessListTx`, or `DynamicFeeTx`.
-
-```go
-type LegacyTx struct {
- Nonce uint64 `json:"nonce"`
- GasPrice *big.Int `json:"gasPrice"`
- Gas uint64 `json:"gas"`
- To *common.Address `json:"to"`
- Value *big.Int `json:"value"`
- Data []byte `json:"data"`
- V *big.Int `json:"v"`
- R *big.Int `json:"r"`
- S *big.Int `json:"s"`
- SecretKey *common.Hash `json:"secretKey"`
-}
-type AccessList []AccessTuple
-type AccessTuple struct {
- Address common.Address `json:"address" gencodec:"required"`
- StorageKeys []common.Hash `json:"storageKeys" gencodec:"required"`
-}
-type AccessListTx struct {
- ChainID *big.Int `json:"chainId"`
- Nonce uint64 `json:"nonce"`
- GasPrice *big.Int `json:"gasPrice"`
- Gas uint64 `json:"gas"`
- To *common.Address `json:"to"`
- Value *big.Int `json:"value"`
- Data []byte `json:"data"`
- AccessList AccessList `json:"accessList"`
- V *big.Int `json:"v"`
- R *big.Int `json:"r"`
- S *big.Int `json:"s"`
- SecretKey *common.Hash `json:"secretKey"`
-}
-type DynamicFeeTx struct {
- ChainID *big.Int `json:"chainId"`
- Nonce uint64 `json:"nonce"`
- GasTipCap *big.Int `json:"maxPriorityFeePerGas"`
- GasFeeCap *big.Int `json:"maxFeePerGas"`
- Gas uint64 `json:"gas"`
- To *common.Address `json:"to"`
- Value *big.Int `json:"value"`
- Data []byte `json:"data"`
- AccessList AccessList `json:"accessList"`
- V *big.Int `json:"v"`
- R *big.Int `json:"r"`
- S *big.Int `json:"s"`
- SecretKey *common.Hash `json:"secretKey"`
-}
-```
-
-##### `result`
-
-The `result` object is output after a transition is executed. It includes
-information about the post-transition environment.
-
-```go
-type ExecutionResult struct {
- StateRoot common.Hash `json:"stateRoot"`
- TxRoot common.Hash `json:"txRoot"`
- ReceiptRoot common.Hash `json:"receiptsRoot"`
- LogsHash common.Hash `json:"logsHash"`
- Bloom types.Bloom `json:"logsBloom"`
- Receipts types.Receipts `json:"receipts"`
- Rejected []*rejectedTx `json:"rejected,omitempty"`
- Difficulty *big.Int `json:"currentDifficulty"`
- GasUsed uint64 `json:"gasUsed"`
- BaseFee *big.Int `json:"currentBaseFee,omitempty"`
-}
-```
-
-#### Error codes and output
-
-All logging should happen against the `stderr`.
-There are a few (not many) errors that can occur, those are defined below.
-
-##### EVM-based errors (`2` to `9`)
-
-- Other EVM error. Exit code `2`
-- Failed configuration: when a non-supported or invalid fork was specified. Exit code `3`.
-- Block history is not supplied, but needed for a `BLOCKHASH` operation. If `BLOCKHASH`
- is invoked targeting a block which history has not been provided for, the program will
- exit with code `4`.
-
-##### IO errors (`10`-`20`)
-
-- Invalid input json: the supplied data could not be marshalled.
- The program will exit with code `10`
-- IO problems: failure to load or save files, the program will exit with code `11`
-
-```
-# This should exit with 3
-./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --state.fork=Frontier+1346 2>/dev/null
-exitcode:3 OK
-```
-#### Forks
-### Basic usage
-
-The chain configuration to be used for a transition is specified via the
-`--state.fork` CLI flag. A list of possible values and configurations can be
-found in [`tests/init.go`](../../tests/init.go).
-
-#### Examples
-##### Basic usage
-
-Invoking it with the provided example files
-```
-./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --state.fork=Berlin
-```
-Two resulting files:
-
-`alloc.json`:
-```json
-{
- "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192": {
- "balance": "0xfeed1a9d",
- "nonce": "0x1"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x5ffd4878be161d74",
- "nonce": "0xac"
- },
- "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0xa410"
- }
-}
-```
-`result.json`:
-```json
-{
- "stateRoot": "0x84208a19bc2b46ada7445180c1db162be5b39b9abc8c0a54b05d32943eae4e13",
- "txRoot": "0xc4761fd7b87ff2364c7c60b6c5c8d02e522e815328aaea3f20e3b7b7ef52c42d",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [
- {
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0x5208",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x5208",
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x0"
- }
- ],
- "rejected": [
- {
- "index": 1,
- "error": "nonce too low: address 0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192, tx: 0 state: 1"
- }
- ],
- "currentDifficulty": "0x20000",
- "gasUsed": "0x5208"
-}
-```
-
-We can make them spit out the data to e.g. `stdout` like this:
-```
-./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --output.result=stdout --output.alloc=stdout --state.fork=Berlin
-```
-Output:
-```json
-{
- "alloc": {
- "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192": {
- "balance": "0xfeed1a9d",
- "nonce": "0x1"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x5ffd4878be161d74",
- "nonce": "0xac"
- },
- "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0xa410"
- }
- },
- "result": {
- "stateRoot": "0x84208a19bc2b46ada7445180c1db162be5b39b9abc8c0a54b05d32943eae4e13",
- "txRoot": "0xc4761fd7b87ff2364c7c60b6c5c8d02e522e815328aaea3f20e3b7b7ef52c42d",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [
- {
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0x5208",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x5208",
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x0"
- }
- ],
- "rejected": [
- {
- "index": 1,
- "error": "nonce too low: address 0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192, tx: 0 state: 1"
- }
- ],
- "currentDifficulty": "0x20000",
- "gasUsed": "0x5208"
- }
-}
-```
-
-#### About Ommers
-
-Mining rewards and ommer rewards might need to be added. This is how those are applied:
-
-- `block_reward` is the block mining reward for the miner (`0xaa`), of a block at height `N`.
-- For each ommer (mined by `0xbb`), with blocknumber `N-delta`
- - (where `delta` is the difference between the current block and the ommer)
- - The account `0xbb` (ommer miner) is awarded `(8-delta)/ 8 * block_reward`
- - The account `0xaa` (block miner) is awarded `block_reward / 32`
-
-To make `t8n` apply these, the following inputs are required:
-
-- `--state.reward`
- - For ethash, it is `5000000000000000000` `wei`,
- - If this is not defined, mining rewards are not applied,
- - A value of `0` is valid, and causes accounts to be 'touched'.
-- For each ommer, the tool needs to be given an `address\` and a `delta`. This
- is done via the `ommers` field in `env`.
-
-Note: the tool does not verify that e.g. the normal uncle rules apply,
-and allows e.g two uncles at the same height, or the uncle-distance. This means that
-the tool allows for negative uncle reward (distance > 8)
-
-Example:
-`./testdata/5/env.json`:
-```json
-{
- "currentCoinbase": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "currentDifficulty": "0x20000",
- "currentGasLimit": "0x750a163df65e8a",
- "currentNumber": "1",
- "currentTimestamp": "1000",
- "ommers": [
- {"delta": 1, "address": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" },
- {"delta": 2, "address": "0xcccccccccccccccccccccccccccccccccccccccc" }
- ]
-}
-```
-When applying this, using a reward of `0x08`
-Output:
-```json
-{
- "alloc": {
- "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": {
- "balance": "0x88"
- },
- "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb": {
- "balance": "0x70"
- },
- "0xcccccccccccccccccccccccccccccccccccccccc": {
- "balance": "0x60"
- }
- }
-}
-```
-#### Future EIPS
-
-It is also possible to experiment with future eips that are not yet defined in a hard fork.
-Example, putting EIP-1344 into Frontier:
-```
-./evm t8n --state.fork=Frontier+1344 --input.pre=./testdata/1/pre.json --input.txs=./testdata/1/txs.json --input.env=/testdata/1/env.json
-```
-
-#### Block history
-
-The `BLOCKHASH` opcode requires blockhashes to be provided by the caller, inside the `env`.
-If a required blockhash is not provided, the exit code should be `4`:
-Example where blockhashes are provided:
-```
-./evm t8n --input.alloc=./testdata/3/alloc.json --input.txs=./testdata/3/txs.json --input.env=./testdata/3/env.json --trace --state.fork=Berlin
-
-```
-
-```
-cat trace-0-0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81.jsonl | grep BLOCKHASH -C2
-```
-```
-{"pc":0,"op":96,"gas":"0x5f58ef8","gasCost":"0x3","memSize":0,"stack":[],"depth":1,"refund":0,"opName":"PUSH1"}
-{"pc":2,"op":64,"gas":"0x5f58ef5","gasCost":"0x14","memSize":0,"stack":["0x1"],"depth":1,"refund":0,"opName":"BLOCKHASH"}
-{"pc":3,"op":0,"gas":"0x5f58ee1","gasCost":"0x0","memSize":0,"stack":["0xdac58aa524e50956d0c0bae7f3f8bb9d35381365d07804dd5b48a5a297c06af4"],"depth":1,"refund":0,"opName":"STOP"}
-{"output":"","gasUsed":"0x17"}
-```
-
-In this example, the caller has not provided the required blockhash:
-```
-./evm t8n --input.alloc=./testdata/4/alloc.json --input.txs=./testdata/4/txs.json --input.env=./testdata/4/env.json --trace --state.fork=Berlin
-ERROR(4): getHash(3) invoked, blockhash for that block not provided
-```
-Error code: 4
-
-#### Chaining
-
-Another thing that can be done, is to chain invocations:
-```
-./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --state.fork=Berlin --output.alloc=stdout | ./evm t8n --input.alloc=stdin --input.env=./testdata/1/env.json --input.txs=./testdata/1/txs.json --state.fork=Berlin
-
-```
-What happened here, is that we first applied two identical transactions, so the second one was rejected.
-Then, taking the poststate alloc as the input for the next state, we tried again to include
-the same two transactions: this time, both failed due to too low nonce.
-
-In order to meaningfully chain invocations, one would need to provide meaningful new `env`, otherwise the
-actual blocknumber (exposed to the EVM) would not increase.
-
-#### Transactions in RLP form
-
-It is possible to provide already-signed transactions as input to, using an `input.txs` which ends with the `rlp` suffix.
-The input format for RLP-form transactions is _identical_ to the _output_ format for block bodies. Therefore, it's fully possible
-to use the evm to go from `json` input to `rlp` input.
-
-The following command takes **json** the transactions in `./testdata/13/txs.json` and signs them. After execution, they are output to `signed_txs.rlp`.:
-```
-./evm t8n --state.fork=London --input.alloc=./testdata/13/alloc.json --input.txs=./testdata/13/txs.json --input.env=./testdata/13/env.json --output.result=alloc_jsontx.json --output.body=signed_txs.rlp
-INFO [12-27|09:25:11.102] Trie dumping started root=e4b924..6aef61
-INFO [12-27|09:25:11.102] Trie dumping complete accounts=3 elapsed="275.66µs"
-INFO [12-27|09:25:11.102] Wrote file file=alloc.json
-INFO [12-27|09:25:11.103] Wrote file file=alloc_jsontx.json
-INFO [12-27|09:25:11.103] Wrote file file=signed_txs.rlp
-```
-
-The `output.body` is the rlp-list of transactions, encoded in hex and placed in a string a'la `json` encoding rules:
-```
-cat signed_txs.rlp
-"0xf8d2b86702f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904b86702f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9"
-```
-
-We can use `rlpdump` to check what the contents are:
-```
-rlpdump -hex $(cat signed_txs.rlp | jq -r )
-[
- 02f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904,
- 02f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9,
-]
-```
-Now, we can now use those (or any other already signed transactions), as input, like so:
-```
-./evm t8n --state.fork=London --input.alloc=./testdata/13/alloc.json --input.txs=./signed_txs.rlp --input.env=./testdata/13/env.json --output.result=alloc_rlptx.json
-INFO [12-27|09:25:11.187] Trie dumping started root=e4b924..6aef61
-INFO [12-27|09:25:11.187] Trie dumping complete accounts=3 elapsed="123.676µs"
-INFO [12-27|09:25:11.187] Wrote file file=alloc.json
-INFO [12-27|09:25:11.187] Wrote file file=alloc_rlptx.json
-```
-You might have noticed that the results from these two invocations were stored in two separate files.
-And we can now finally check that they match.
-```
-cat alloc_jsontx.json | jq .stateRoot && cat alloc_rlptx.json | jq .stateRoot
-"0xe4b924a6adb5959fccf769d5b7bb2f6359e26d1e76a2443c5a91a36d826aef61"
-"0xe4b924a6adb5959fccf769d5b7bb2f6359e26d1e76a2443c5a91a36d826aef61"
-```
-
-## Transaction tool
-
-The transaction tool is used to perform static validity checks on transactions such as:
-* intrinsic gas calculation
-* max values on integers
-* fee semantics, such as `maxFeePerGas < maxPriorityFeePerGas`
-* newer tx types on old forks
-
-### Examples
-
-```
-./evm t9n --state.fork Homestead --input.txs testdata/15/signed_txs.rlp
-[
- {
- "error": "transaction type not supported",
- "hash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476"
- },
- {
- "error": "transaction type not supported",
- "hash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a"
- }
-]
-```
-```
-./evm t9n --state.fork London --input.txs testdata/15/signed_txs.rlp
-[
- {
- "address": "0xd02d72e067e77158444ef2020ff2d325f929b363",
- "hash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476",
- "intrinsicGas": "0x5208"
- },
- {
- "address": "0xd02d72e067e77158444ef2020ff2d325f929b363",
- "hash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a",
- "intrinsicGas": "0x5208"
- }
-]
-```
-## Block builder tool (b11r)
-
-The `evm b11r` tool is used to assemble and seal full block rlps.
-
-### Specification
-
-#### Command line params
-
-Command line params that need to be supported are:
-
-```
- --input.header value `stdin` or file name of where to find the block header to use. (default: "header.json")
- --input.ommers value `stdin` or file name of where to find the list of ommer header RLPs to use.
- --input.txs value `stdin` or file name of where to find the transactions list in RLP form. (default: "txs.rlp")
- --output.basedir value Specifies where output files are placed. Will be created if it does not exist.
- --output.block value Determines where to put the alloc of the post-state. (default: "block.json")
- - into the file
- `stdout` - into the stdout output
- `stderr` - into the stderr output
- --seal.clique value Seal block with Clique. `stdin` or file name of where to find the Clique sealing data.
- --seal.ethash Seal block with ethash. (default: false)
- --seal.ethash.dir value Path to ethash DAG. If none exists, a new DAG will be generated.
- --seal.ethash.mode value Defines the type and amount of PoW verification an ethash engine makes. (default: "normal")
- --verbosity value Sets the verbosity level. (default: 3)
-```
-
-#### Objects
-
-##### `header`
-
-The `header` object is a consensus header.
-
-```go=
-type Header struct {
- ParentHash common.Hash `json:"parentHash"`
- OmmerHash *common.Hash `json:"sha3Uncles"`
- Coinbase *common.Address `json:"miner"`
- Root common.Hash `json:"stateRoot" gencodec:"required"`
- TxHash *common.Hash `json:"transactionsRoot"`
- ReceiptHash *common.Hash `json:"receiptsRoot"`
- Bloom types.Bloom `json:"logsBloom"`
- Difficulty *big.Int `json:"difficulty"`
- Number *big.Int `json:"number" gencodec:"required"`
- GasLimit uint64 `json:"gasLimit" gencodec:"required"`
- GasUsed uint64 `json:"gasUsed"`
- Time uint64 `json:"timestamp" gencodec:"required"`
- Extra []byte `json:"extraData"`
- MixDigest common.Hash `json:"mixHash"`
- Nonce *types.BlockNonce `json:"nonce"`
- BaseFee *big.Int `json:"baseFeePerGas"`
-}
-```
-#### `ommers`
-
-The `ommers` object is a list of RLP-encoded ommer blocks in hex
-representation.
-
-```go=
-type Ommers []string
-```
-
-#### `txs`
-
-The `txs` object is a list of RLP-encoded transactions in hex representation.
-
-```go=
-type Txs []string
-```
-
-#### `clique`
-
-The `clique` object provides the necessary information to complete a clique
-seal of the block.
-
-```go=
-var CliqueInfo struct {
- Key *common.Hash `json:"secretKey"`
- Voted *common.Address `json:"voted"`
- Authorize *bool `json:"authorize"`
- Vanity common.Hash `json:"vanity"`
-}
-```
-
-#### `output`
-
-The `output` object contains two values, the block RLP and the block hash.
-
-```go=
-type BlockInfo struct {
- Rlp []byte `json:"rlp"`
- Hash common.Hash `json:"hash"`
-}
-```
-
-## A Note on Encoding
-
-The encoding of values for `evm` utility attempts to be relatively flexible. It
-generally supports hex-encoded or decimal-encoded numeric values, and
-hex-encoded byte values (like `common.Address`, `common.Hash`, etc). When in
-doubt, the [`execution-apis`](https://github.com/ethereum/execution-apis) way
-of encoding should always be accepted.
-
-## Testing
-
-There are many test cases in the [`cmd/evm/testdata`](./testdata) directory.
-These fixtures are used to power the `t8n` tests in
-[`t8n_test.go`](./t8n_test.go). The best way to verify correctness of new `evm`
-implementations is to execute these and verify the output and error codes match
-the expected values.
-
diff --git a/cmd/evm/blockrunner.go b/cmd/evm/blockrunner.go
deleted file mode 100644
index c5d836e0ea..0000000000
--- a/cmd/evm/blockrunner.go
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2023 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "encoding/json"
- "errors"
- "fmt"
- "os"
- "regexp"
- "sort"
-
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/eth/tracers/logger"
- "github.com/ethereum/go-ethereum/tests"
- "github.com/urfave/cli/v2"
-)
-
-var RunFlag = &cli.StringFlag{
- Name: "run",
- Value: ".*",
- Usage: "Run only those tests matching the regular expression.",
-}
-
-var blockTestCommand = &cli.Command{
- Action: blockTestCmd,
- Name: "blocktest",
- Usage: "Executes the given blockchain tests",
- ArgsUsage: "",
- Flags: []cli.Flag{RunFlag},
-}
-
-func blockTestCmd(ctx *cli.Context) error {
- if len(ctx.Args().First()) == 0 {
- return errors.New("path-to-test argument required")
- }
-
- var tracer vm.EVMLogger
- // Configure the EVM logger
- if ctx.Bool(MachineFlag.Name) {
- tracer = logger.NewJSONLogger(&logger.Config{
- EnableMemory: !ctx.Bool(DisableMemoryFlag.Name),
- DisableStack: ctx.Bool(DisableStackFlag.Name),
- DisableStorage: ctx.Bool(DisableStorageFlag.Name),
- EnableReturnData: !ctx.Bool(DisableReturnDataFlag.Name),
- }, os.Stderr)
- }
- // Load the test content from the input file
- src, err := os.ReadFile(ctx.Args().First())
- if err != nil {
- return err
- }
- var tests map[string]tests.BlockTest
- if err = json.Unmarshal(src, &tests); err != nil {
- return err
- }
- re, err := regexp.Compile(ctx.String(RunFlag.Name))
- if err != nil {
- return fmt.Errorf("invalid regex -%s: %v", RunFlag.Name, err)
- }
-
- // Run them in order
- var keys []string
- for key := range tests {
- keys = append(keys, key)
- }
- sort.Strings(keys)
- for _, name := range keys {
- if !re.MatchString(name) {
- continue
- }
- test := tests[name]
- if err := test.Run(false, rawdb.HashScheme, tracer, func(res error, chain *core.BlockChain) {
- if ctx.Bool(DumpFlag.Name) {
- if state, _ := chain.State(); state != nil {
- fmt.Println(string(state.Dump(nil)))
- }
- }
- }); err != nil {
- return fmt.Errorf("test %v: %w", name, err)
- }
- }
- return nil
-}
diff --git a/cmd/evm/compiler.go b/cmd/evm/compiler.go
deleted file mode 100644
index c071834b59..0000000000
--- a/cmd/evm/compiler.go
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "errors"
- "fmt"
- "os"
-
- "github.com/ethereum/go-ethereum/cmd/evm/internal/compiler"
-
- "github.com/urfave/cli/v2"
-)
-
-var compileCommand = &cli.Command{
- Action: compileCmd,
- Name: "compile",
- Usage: "Compiles easm source to evm binary",
- ArgsUsage: "",
-}
-
-func compileCmd(ctx *cli.Context) error {
- debug := ctx.Bool(DebugFlag.Name)
-
- if len(ctx.Args().First()) == 0 {
- return errors.New("filename required")
- }
-
- fn := ctx.Args().First()
- src, err := os.ReadFile(fn)
- if err != nil {
- return err
- }
-
- bin, err := compiler.Compile(fn, src, debug)
- if err != nil {
- return err
- }
- fmt.Println(bin)
- return nil
-}
diff --git a/cmd/evm/disasm.go b/cmd/evm/disasm.go
deleted file mode 100644
index b1f35cbaf5..0000000000
--- a/cmd/evm/disasm.go
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "errors"
- "fmt"
- "os"
- "strings"
-
- "github.com/ethereum/go-ethereum/core/asm"
- "github.com/urfave/cli/v2"
-)
-
-var disasmCommand = &cli.Command{
- Action: disasmCmd,
- Name: "disasm",
- Usage: "Disassembles evm binary",
- ArgsUsage: "",
-}
-
-func disasmCmd(ctx *cli.Context) error {
- var in string
- switch {
- case len(ctx.Args().First()) > 0:
- fn := ctx.Args().First()
- input, err := os.ReadFile(fn)
- if err != nil {
- return err
- }
- in = string(input)
- case ctx.IsSet(InputFlag.Name):
- in = ctx.String(InputFlag.Name)
- default:
- return errors.New("missing filename or --input value")
- }
-
- code := strings.TrimSpace(in)
- fmt.Printf("%v\n", code)
- return asm.PrintDisassembled(code)
-}
diff --git a/cmd/evm/internal/compiler/compiler.go b/cmd/evm/internal/compiler/compiler.go
deleted file mode 100644
index 54981b6697..0000000000
--- a/cmd/evm/internal/compiler/compiler.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package compiler
-
-import (
- "errors"
- "fmt"
-
- "github.com/ethereum/go-ethereum/core/asm"
-)
-
-func Compile(fn string, src []byte, debug bool) (string, error) {
- compiler := asm.NewCompiler(debug)
- compiler.Feed(asm.Lex(src, debug))
-
- bin, compileErrors := compiler.Compile()
- if len(compileErrors) > 0 {
- // report errors
- for _, err := range compileErrors {
- fmt.Printf("%s:%v\n", fn, err)
- }
- return "", errors.New("compiling failed")
- }
- return bin, nil
-}
diff --git a/cmd/evm/internal/t8ntool/block.go b/cmd/evm/internal/t8ntool/block.go
deleted file mode 100644
index a2dc473437..0000000000
--- a/cmd/evm/internal/t8ntool/block.go
+++ /dev/null
@@ -1,340 +0,0 @@
-// Copyright 2021 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package t8ntool
-
-import (
- "crypto/ecdsa"
- "encoding/json"
- "errors"
- "fmt"
- "math/big"
- "os"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/consensus/clique"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/urfave/cli/v2"
-)
-
-//go:generate go run github.com/fjl/gencodec -type header -field-override headerMarshaling -out gen_header.go
-type header struct {
- ParentHash common.Hash `json:"parentHash"`
- OmmerHash *common.Hash `json:"sha3Uncles"`
- Coinbase *common.Address `json:"miner"`
- Root common.Hash `json:"stateRoot" gencodec:"required"`
- TxHash *common.Hash `json:"transactionsRoot"`
- ReceiptHash *common.Hash `json:"receiptsRoot"`
- Bloom types.Bloom `json:"logsBloom"`
- Difficulty *big.Int `json:"difficulty"`
- Number *big.Int `json:"number" gencodec:"required"`
- GasLimit uint64 `json:"gasLimit" gencodec:"required"`
- GasUsed uint64 `json:"gasUsed"`
- Time uint64 `json:"timestamp" gencodec:"required"`
- Extra []byte `json:"extraData"`
- MixDigest common.Hash `json:"mixHash"`
- Nonce *types.BlockNonce `json:"nonce"`
- BaseFee *big.Int `json:"baseFeePerGas" rlp:"optional"`
- WithdrawalsHash *common.Hash `json:"withdrawalsRoot" rlp:"optional"`
- BlobGasUsed *uint64 `json:"blobGasUsed" rlp:"optional"`
- ExcessBlobGas *uint64 `json:"excessBlobGas" rlp:"optional"`
- ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot" rlp:"optional"`
-}
-
-type headerMarshaling struct {
- Difficulty *math.HexOrDecimal256
- Number *math.HexOrDecimal256
- GasLimit math.HexOrDecimal64
- GasUsed math.HexOrDecimal64
- Time math.HexOrDecimal64
- Extra hexutil.Bytes
- BaseFee *math.HexOrDecimal256
- BlobGasUsed *math.HexOrDecimal64
- ExcessBlobGas *math.HexOrDecimal64
-}
-
-type bbInput struct {
- Header *header `json:"header,omitempty"`
- OmmersRlp []string `json:"ommers,omitempty"`
- TxRlp string `json:"txs,omitempty"`
- Withdrawals []*types.Withdrawal `json:"withdrawals,omitempty"`
- Clique *cliqueInput `json:"clique,omitempty"`
-
- Ethash bool `json:"-"`
- Txs []*types.Transaction `json:"-"`
- Ommers []*types.Header `json:"-"`
-}
-
-type cliqueInput struct {
- Key *ecdsa.PrivateKey
- Voted *common.Address
- Authorize *bool
- Vanity common.Hash
-}
-
-// UnmarshalJSON implements json.Unmarshaler interface.
-func (c *cliqueInput) UnmarshalJSON(input []byte) error {
- var x struct {
- Key *common.Hash `json:"secretKey"`
- Voted *common.Address `json:"voted"`
- Authorize *bool `json:"authorize"`
- Vanity common.Hash `json:"vanity"`
- }
- if err := json.Unmarshal(input, &x); err != nil {
- return err
- }
- if x.Key == nil {
- return errors.New("missing required field 'secretKey' for cliqueInput")
- }
- if ecdsaKey, err := crypto.ToECDSA(x.Key[:]); err != nil {
- return err
- } else {
- c.Key = ecdsaKey
- }
- c.Voted = x.Voted
- c.Authorize = x.Authorize
- c.Vanity = x.Vanity
- return nil
-}
-
-// ToBlock converts i into a *types.Block
-func (i *bbInput) ToBlock() *types.Block {
- header := &types.Header{
- ParentHash: i.Header.ParentHash,
- UncleHash: types.EmptyUncleHash,
- Coinbase: common.Address{},
- Root: i.Header.Root,
- TxHash: types.EmptyTxsHash,
- ReceiptHash: types.EmptyReceiptsHash,
- Bloom: i.Header.Bloom,
- Difficulty: common.Big0,
- Number: i.Header.Number,
- GasLimit: i.Header.GasLimit,
- GasUsed: i.Header.GasUsed,
- Time: i.Header.Time,
- Extra: i.Header.Extra,
- MixDigest: i.Header.MixDigest,
- BaseFee: i.Header.BaseFee,
- WithdrawalsHash: i.Header.WithdrawalsHash,
- BlobGasUsed: i.Header.BlobGasUsed,
- ExcessBlobGas: i.Header.ExcessBlobGas,
- ParentBeaconRoot: i.Header.ParentBeaconBlockRoot,
- }
-
- // Fill optional values.
- if i.Header.OmmerHash != nil {
- header.UncleHash = *i.Header.OmmerHash
- } else if len(i.Ommers) != 0 {
- // Calculate the ommer hash if none is provided and there are ommers to hash
- header.UncleHash = types.CalcUncleHash(i.Ommers)
- }
- if i.Header.Coinbase != nil {
- header.Coinbase = *i.Header.Coinbase
- }
- if i.Header.TxHash != nil {
- header.TxHash = *i.Header.TxHash
- }
- if i.Header.ReceiptHash != nil {
- header.ReceiptHash = *i.Header.ReceiptHash
- }
- if i.Header.Nonce != nil {
- header.Nonce = *i.Header.Nonce
- }
- if i.Header.Difficulty != nil {
- header.Difficulty = i.Header.Difficulty
- }
- return types.NewBlockWithHeader(header).WithBody(i.Txs, i.Ommers).WithWithdrawals(i.Withdrawals)
-}
-
-// SealBlock seals the given block using the configured engine.
-func (i *bbInput) SealBlock(block *types.Block) (*types.Block, error) {
- switch {
- case i.Clique != nil:
- return i.sealClique(block)
- default:
- return block, nil
- }
-}
-
-// sealClique seals the given block using clique.
-func (i *bbInput) sealClique(block *types.Block) (*types.Block, error) {
- // If any clique value overwrites an explicit header value, fail
- // to avoid silently building a block with unexpected values.
- if i.Header.Extra != nil {
- return nil, NewError(ErrorConfig, errors.New("sealing with clique will overwrite provided extra data"))
- }
- header := block.Header()
- if i.Clique.Voted != nil {
- if i.Header.Coinbase != nil {
- return nil, NewError(ErrorConfig, errors.New("sealing with clique and voting will overwrite provided coinbase"))
- }
- header.Coinbase = *i.Clique.Voted
- }
- if i.Clique.Authorize != nil {
- if i.Header.Nonce != nil {
- return nil, NewError(ErrorConfig, errors.New("sealing with clique and voting will overwrite provided nonce"))
- }
- if *i.Clique.Authorize {
- header.Nonce = [8]byte{}
- } else {
- header.Nonce = [8]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
- }
- }
- // Extra is fixed 32 byte vanity and 65 byte signature
- header.Extra = make([]byte, 32+65)
- copy(header.Extra[0:32], i.Clique.Vanity.Bytes()[:])
-
- // Sign the seal hash and fill in the rest of the extra data
- h := clique.SealHash(header)
- sighash, err := crypto.Sign(h[:], i.Clique.Key)
- if err != nil {
- return nil, err
- }
- copy(header.Extra[32:], sighash)
- block = block.WithSeal(header)
- return block, nil
-}
-
-// BuildBlock constructs a block from the given inputs.
-func BuildBlock(ctx *cli.Context) error {
- baseDir, err := createBasedir(ctx)
- if err != nil {
- return NewError(ErrorIO, fmt.Errorf("failed creating output basedir: %v", err))
- }
- inputData, err := readInput(ctx)
- if err != nil {
- return err
- }
- block := inputData.ToBlock()
- block, err = inputData.SealBlock(block)
- if err != nil {
- return err
- }
- return dispatchBlock(ctx, baseDir, block)
-}
-
-func readInput(ctx *cli.Context) (*bbInput, error) {
- var (
- headerStr = ctx.String(InputHeaderFlag.Name)
- ommersStr = ctx.String(InputOmmersFlag.Name)
- withdrawalsStr = ctx.String(InputWithdrawalsFlag.Name)
- txsStr = ctx.String(InputTxsRlpFlag.Name)
- cliqueStr = ctx.String(SealCliqueFlag.Name)
- inputData = &bbInput{}
- )
- if headerStr == stdinSelector || ommersStr == stdinSelector || txsStr == stdinSelector || cliqueStr == stdinSelector {
- decoder := json.NewDecoder(os.Stdin)
- if err := decoder.Decode(inputData); err != nil {
- return nil, NewError(ErrorJson, fmt.Errorf("failed unmarshaling stdin: %v", err))
- }
- }
- if cliqueStr != stdinSelector && cliqueStr != "" {
- var clique cliqueInput
- if err := readFile(cliqueStr, "clique", &clique); err != nil {
- return nil, err
- }
- inputData.Clique = &clique
- }
- if headerStr != stdinSelector {
- var env header
- if err := readFile(headerStr, "header", &env); err != nil {
- return nil, err
- }
- inputData.Header = &env
- }
- if ommersStr != stdinSelector && ommersStr != "" {
- var ommers []string
- if err := readFile(ommersStr, "ommers", &ommers); err != nil {
- return nil, err
- }
- inputData.OmmersRlp = ommers
- }
- if withdrawalsStr != stdinSelector && withdrawalsStr != "" {
- var withdrawals []*types.Withdrawal
- if err := readFile(withdrawalsStr, "withdrawals", &withdrawals); err != nil {
- return nil, err
- }
- inputData.Withdrawals = withdrawals
- }
- if txsStr != stdinSelector {
- var txs string
- if err := readFile(txsStr, "txs", &txs); err != nil {
- return nil, err
- }
- inputData.TxRlp = txs
- }
- // Deserialize rlp txs and ommers
- var (
- ommers = []*types.Header{}
- txs = []*types.Transaction{}
- )
- if inputData.TxRlp != "" {
- if err := rlp.DecodeBytes(common.FromHex(inputData.TxRlp), &txs); err != nil {
- return nil, NewError(ErrorRlp, fmt.Errorf("unable to decode transaction from rlp data: %v", err))
- }
- inputData.Txs = txs
- }
- for _, str := range inputData.OmmersRlp {
- type extblock struct {
- Header *types.Header
- Txs []*types.Transaction
- Ommers []*types.Header
- }
- var ommer *extblock
- if err := rlp.DecodeBytes(common.FromHex(str), &ommer); err != nil {
- return nil, NewError(ErrorRlp, fmt.Errorf("unable to decode ommer from rlp data: %v", err))
- }
- ommers = append(ommers, ommer.Header)
- }
- inputData.Ommers = ommers
-
- return inputData, nil
-}
-
-// dispatchBlock writes the output data to either stderr or stdout, or to the specified
-// files
-func dispatchBlock(ctx *cli.Context, baseDir string, block *types.Block) error {
- raw, _ := rlp.EncodeToBytes(block)
- type blockInfo struct {
- Rlp hexutil.Bytes `json:"rlp"`
- Hash common.Hash `json:"hash"`
- }
- enc := blockInfo{
- Rlp: raw,
- Hash: block.Hash(),
- }
- b, err := json.MarshalIndent(enc, "", " ")
- if err != nil {
- return NewError(ErrorJson, fmt.Errorf("failed marshalling output: %v", err))
- }
- switch dest := ctx.String(OutputBlockFlag.Name); dest {
- case "stdout":
- os.Stdout.Write(b)
- os.Stdout.WriteString("\n")
- case "stderr":
- os.Stderr.Write(b)
- os.Stderr.WriteString("\n")
- default:
- if err := saveFile(baseDir, dest, enc); err != nil {
- return err
- }
- }
- return nil
-}
diff --git a/cmd/evm/internal/t8ntool/execution.go b/cmd/evm/internal/t8ntool/execution.go
deleted file mode 100644
index b654cb2196..0000000000
--- a/cmd/evm/internal/t8ntool/execution.go
+++ /dev/null
@@ -1,398 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package t8ntool
-
-import (
- "fmt"
- "math/big"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/consensus/ethash"
- "github.com/ethereum/go-ethereum/consensus/misc"
- "github.com/ethereum/go-ethereum/consensus/misc/eip4844"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie"
- "golang.org/x/crypto/sha3"
-)
-
-type Prestate struct {
- Env stEnv `json:"env"`
- Pre core.GenesisAlloc `json:"pre"`
-}
-
-// ExecutionResult contains the execution status after running a state test, any
-// error that might have occurred and a dump of the final state if requested.
-type ExecutionResult struct {
- StateRoot common.Hash `json:"stateRoot"`
- TxRoot common.Hash `json:"txRoot"`
- ReceiptRoot common.Hash `json:"receiptsRoot"`
- LogsHash common.Hash `json:"logsHash"`
- Bloom types.Bloom `json:"logsBloom" gencodec:"required"`
- Receipts types.Receipts `json:"receipts"`
- Rejected []*rejectedTx `json:"rejected,omitempty"`
- Difficulty *math.HexOrDecimal256 `json:"currentDifficulty" gencodec:"required"`
- GasUsed math.HexOrDecimal64 `json:"gasUsed"`
- BaseFee *math.HexOrDecimal256 `json:"currentBaseFee,omitempty"`
- WithdrawalsRoot *common.Hash `json:"withdrawalsRoot,omitempty"`
- CurrentExcessBlobGas *math.HexOrDecimal64 `json:"currentExcessBlobGas,omitempty"`
- CurrentBlobGasUsed *math.HexOrDecimal64 `json:"blobGasUsed,omitempty"`
-}
-
-type ommer struct {
- Delta uint64 `json:"delta"`
- Address common.Address `json:"address"`
-}
-
-//go:generate go run github.com/fjl/gencodec -type stEnv -field-override stEnvMarshaling -out gen_stenv.go
-type stEnv struct {
- Coinbase common.Address `json:"currentCoinbase" gencodec:"required"`
- Difficulty *big.Int `json:"currentDifficulty"`
- Random *big.Int `json:"currentRandom"`
- ParentDifficulty *big.Int `json:"parentDifficulty"`
- ParentBaseFee *big.Int `json:"parentBaseFee,omitempty"`
- ParentGasUsed uint64 `json:"parentGasUsed,omitempty"`
- ParentGasLimit uint64 `json:"parentGasLimit,omitempty"`
- GasLimit uint64 `json:"currentGasLimit" gencodec:"required"`
- Number uint64 `json:"currentNumber" gencodec:"required"`
- Timestamp uint64 `json:"currentTimestamp" gencodec:"required"`
- ParentTimestamp uint64 `json:"parentTimestamp,omitempty"`
- BlockHashes map[math.HexOrDecimal64]common.Hash `json:"blockHashes,omitempty"`
- Ommers []ommer `json:"ommers,omitempty"`
- Withdrawals []*types.Withdrawal `json:"withdrawals,omitempty"`
- BaseFee *big.Int `json:"currentBaseFee,omitempty"`
- ParentUncleHash common.Hash `json:"parentUncleHash"`
- ExcessBlobGas *uint64 `json:"currentExcessBlobGas,omitempty"`
- ParentExcessBlobGas *uint64 `json:"parentExcessBlobGas,omitempty"`
- ParentBlobGasUsed *uint64 `json:"parentBlobGasUsed,omitempty"`
- ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot"`
-}
-
-type stEnvMarshaling struct {
- Coinbase common.UnprefixedAddress
- Difficulty *math.HexOrDecimal256
- Random *math.HexOrDecimal256
- ParentDifficulty *math.HexOrDecimal256
- ParentBaseFee *math.HexOrDecimal256
- ParentGasUsed math.HexOrDecimal64
- ParentGasLimit math.HexOrDecimal64
- GasLimit math.HexOrDecimal64
- Number math.HexOrDecimal64
- Timestamp math.HexOrDecimal64
- ParentTimestamp math.HexOrDecimal64
- BaseFee *math.HexOrDecimal256
- ExcessBlobGas *math.HexOrDecimal64
- ParentExcessBlobGas *math.HexOrDecimal64
- ParentBlobGasUsed *math.HexOrDecimal64
-}
-
-type rejectedTx struct {
- Index int `json:"index"`
- Err string `json:"error"`
-}
-
-// Apply applies a set of transactions to a pre-state
-func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
- txIt txIterator, miningReward int64,
- getTracerFn func(txIndex int, txHash common.Hash) (vm.EVMLogger, error)) (*state.StateDB, *ExecutionResult, []byte, error) {
- // Capture errors for BLOCKHASH operation, if we haven't been supplied the
- // required blockhashes
- var hashError error
- getHash := func(num uint64) common.Hash {
- if pre.Env.BlockHashes == nil {
- hashError = fmt.Errorf("getHash(%d) invoked, no blockhashes provided", num)
- return common.Hash{}
- }
- h, ok := pre.Env.BlockHashes[math.HexOrDecimal64(num)]
- if !ok {
- hashError = fmt.Errorf("getHash(%d) invoked, blockhash for that block not provided", num)
- }
- return h
- }
- var (
- statedb = MakePreState(rawdb.NewMemoryDatabase(), pre.Pre)
- signer = types.MakeSigner(chainConfig, new(big.Int).SetUint64(pre.Env.Number), pre.Env.Timestamp)
- gaspool = new(core.GasPool)
- blockHash = common.Hash{0x13, 0x37}
- rejectedTxs []*rejectedTx
- includedTxs types.Transactions
- gasUsed = uint64(0)
- blobGasUsed = uint64(0)
- receipts = make(types.Receipts, 0)
- txIndex = 0
- )
- gaspool.AddGas(pre.Env.GasLimit)
- vmContext := vm.BlockContext{
- CanTransfer: core.CanTransfer,
- Transfer: core.Transfer,
- Coinbase: pre.Env.Coinbase,
- BlockNumber: new(big.Int).SetUint64(pre.Env.Number),
- Time: pre.Env.Timestamp,
- Difficulty: pre.Env.Difficulty,
- GasLimit: pre.Env.GasLimit,
- GetHash: getHash,
- }
- // If currentBaseFee is defined, add it to the vmContext.
- if pre.Env.BaseFee != nil {
- vmContext.BaseFee = new(big.Int).Set(pre.Env.BaseFee)
- }
- // If random is defined, add it to the vmContext.
- if pre.Env.Random != nil {
- rnd := common.BigToHash(pre.Env.Random)
- vmContext.Random = &rnd
- }
- // Calculate the BlobBaseFee
- var excessBlobGas uint64
- if pre.Env.ExcessBlobGas != nil {
- excessBlobGas := *pre.Env.ExcessBlobGas
- vmContext.BlobBaseFee = eip4844.CalcBlobFee(excessBlobGas)
- } else {
- // If it is not explicitly defined, but we have the parent values, we try
- // to calculate it ourselves.
- parentExcessBlobGas := pre.Env.ParentExcessBlobGas
- parentBlobGasUsed := pre.Env.ParentBlobGasUsed
- if parentExcessBlobGas != nil && parentBlobGasUsed != nil {
- excessBlobGas = eip4844.CalcExcessBlobGas(*parentExcessBlobGas, *parentBlobGasUsed)
- vmContext.BlobBaseFee = eip4844.CalcBlobFee(excessBlobGas)
- }
- }
- // If DAO is supported/enabled, we need to handle it here. In geth 'proper', it's
- // done in StateProcessor.Process(block, ...), right before transactions are applied.
- if chainConfig.DAOForkSupport &&
- chainConfig.DAOForkBlock != nil &&
- chainConfig.DAOForkBlock.Cmp(new(big.Int).SetUint64(pre.Env.Number)) == 0 {
- misc.ApplyDAOHardFork(statedb)
- }
- if beaconRoot := pre.Env.ParentBeaconBlockRoot; beaconRoot != nil {
- evm := vm.NewEVM(vmContext, vm.TxContext{}, statedb, chainConfig, vmConfig)
- core.ProcessBeaconBlockRoot(*beaconRoot, evm, statedb)
- }
-
- for i := 0; txIt.Next(); i++ {
- tx, err := txIt.Tx()
- if err != nil {
- log.Warn("rejected tx", "index", i, "error", err)
- rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()})
- continue
- }
- if tx.Type() == types.BlobTxType && vmContext.BlobBaseFee == nil {
- errMsg := "blob tx used but field env.ExcessBlobGas missing"
- log.Warn("rejected tx", "index", i, "hash", tx.Hash(), "error", errMsg)
- rejectedTxs = append(rejectedTxs, &rejectedTx{i, errMsg})
- continue
- }
- msg, err := core.TransactionToMessage(tx, signer, pre.Env.BaseFee)
- if err != nil {
- log.Warn("rejected tx", "index", i, "hash", tx.Hash(), "error", err)
- rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()})
- continue
- }
- txBlobGas := uint64(0)
- if tx.Type() == types.BlobTxType {
- txBlobGas = uint64(params.BlobTxBlobGasPerBlob * len(tx.BlobHashes()))
- if used, max := blobGasUsed+txBlobGas, uint64(params.MaxBlobGasPerBlock); used > max {
- err := fmt.Errorf("blob gas (%d) would exceed maximum allowance %d", used, max)
- log.Warn("rejected tx", "index", i, "err", err)
- rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()})
- continue
- }
- }
- tracer, err := getTracerFn(txIndex, tx.Hash())
- if err != nil {
- return nil, nil, nil, err
- }
- vmConfig.Tracer = tracer
- statedb.SetTxContext(tx.Hash(), txIndex)
-
- var (
- txContext = core.NewEVMTxContext(msg)
- snapshot = statedb.Snapshot()
- prevGas = gaspool.Gas()
- )
- evm := vm.NewEVM(vmContext, txContext, statedb, chainConfig, vmConfig)
-
- // (ret []byte, usedGas uint64, failed bool, err error)
- msgResult, err := core.ApplyMessage(evm, msg, gaspool)
- if err != nil {
- statedb.RevertToSnapshot(snapshot)
- log.Info("rejected tx", "index", i, "hash", tx.Hash(), "from", msg.From, "error", err)
- rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()})
- gaspool.SetGas(prevGas)
- continue
- }
- includedTxs = append(includedTxs, tx)
- if hashError != nil {
- return nil, nil, nil, NewError(ErrorMissingBlockhash, hashError)
- }
- blobGasUsed += txBlobGas
- gasUsed += msgResult.UsedGas
-
- // Receipt:
- {
- var root []byte
- if chainConfig.IsByzantium(vmContext.BlockNumber) {
- statedb.Finalise(true)
- } else {
- root = statedb.IntermediateRoot(chainConfig.IsEIP158(vmContext.BlockNumber)).Bytes()
- }
-
- // Create a new receipt for the transaction, storing the intermediate root and
- // gas used by the tx.
- receipt := &types.Receipt{Type: tx.Type(), PostState: root, CumulativeGasUsed: gasUsed}
- if msgResult.Failed() {
- receipt.Status = types.ReceiptStatusFailed
- } else {
- receipt.Status = types.ReceiptStatusSuccessful
- }
- receipt.TxHash = tx.Hash()
- receipt.GasUsed = msgResult.UsedGas
-
- // If the transaction created a contract, store the creation address in the receipt.
- if msg.To == nil {
- receipt.ContractAddress = crypto.CreateAddress(evm.TxContext.Origin, tx.Nonce())
- }
-
- // Set the receipt logs and create the bloom filter.
- receipt.Logs = statedb.GetLogs(tx.Hash(), vmContext.BlockNumber.Uint64(), blockHash)
- receipt.Bloom = types.CreateBloom(types.Receipts{receipt})
- // These three are non-consensus fields:
- //receipt.BlockHash
- //receipt.BlockNumber
- receipt.TransactionIndex = uint(txIndex)
- receipts = append(receipts, receipt)
- }
-
- txIndex++
- }
- statedb.IntermediateRoot(chainConfig.IsEIP158(vmContext.BlockNumber))
- // Add mining reward? (-1 means rewards are disabled)
- if miningReward >= 0 {
- // Add mining reward. The mining reward may be `0`, which only makes a difference in the cases
- // where
- // - the coinbase self-destructed, or
- // - there are only 'bad' transactions, which aren't executed. In those cases,
- // the coinbase gets no txfee, so isn't created, and thus needs to be touched
- var (
- blockReward = big.NewInt(miningReward)
- minerReward = new(big.Int).Set(blockReward)
- perOmmer = new(big.Int).Div(blockReward, big.NewInt(32))
- )
- for _, ommer := range pre.Env.Ommers {
- // Add 1/32th for each ommer included
- minerReward.Add(minerReward, perOmmer)
- // Add (8-delta)/8
- reward := big.NewInt(8)
- reward.Sub(reward, new(big.Int).SetUint64(ommer.Delta))
- reward.Mul(reward, blockReward)
- reward.Div(reward, big.NewInt(8))
- statedb.AddBalance(ommer.Address, reward)
- }
- statedb.AddBalance(pre.Env.Coinbase, minerReward)
- }
- // Apply withdrawals
- for _, w := range pre.Env.Withdrawals {
- // Amount is in gwei, turn into wei
- amount := new(big.Int).Mul(new(big.Int).SetUint64(w.Amount), big.NewInt(params.GWei))
- statedb.AddBalance(w.Address, amount)
- }
- // Commit block
- root, err := statedb.Commit(vmContext.BlockNumber.Uint64(), chainConfig.IsEIP158(vmContext.BlockNumber))
- if err != nil {
- return nil, nil, nil, NewError(ErrorEVM, fmt.Errorf("could not commit state: %v", err))
- }
- execRs := &ExecutionResult{
- StateRoot: root,
- TxRoot: types.DeriveSha(includedTxs, trie.NewStackTrie(nil)),
- ReceiptRoot: types.DeriveSha(receipts, trie.NewStackTrie(nil)),
- Bloom: types.CreateBloom(receipts),
- LogsHash: rlpHash(statedb.Logs()),
- Receipts: receipts,
- Rejected: rejectedTxs,
- Difficulty: (*math.HexOrDecimal256)(vmContext.Difficulty),
- GasUsed: (math.HexOrDecimal64)(gasUsed),
- BaseFee: (*math.HexOrDecimal256)(vmContext.BaseFee),
- }
- if pre.Env.Withdrawals != nil {
- h := types.DeriveSha(types.Withdrawals(pre.Env.Withdrawals), trie.NewStackTrie(nil))
- execRs.WithdrawalsRoot = &h
- }
- if vmContext.BlobBaseFee != nil {
- execRs.CurrentExcessBlobGas = (*math.HexOrDecimal64)(&excessBlobGas)
- execRs.CurrentBlobGasUsed = (*math.HexOrDecimal64)(&blobGasUsed)
- }
- // Re-create statedb instance with new root upon the updated database
- // for accessing latest states.
- statedb, err = state.New(root, statedb.Database(), nil)
- if err != nil {
- return nil, nil, nil, NewError(ErrorEVM, fmt.Errorf("could not reopen state: %v", err))
- }
- body, _ := rlp.EncodeToBytes(includedTxs)
- return statedb, execRs, body, nil
-}
-
-func MakePreState(db ethdb.Database, accounts core.GenesisAlloc) *state.StateDB {
- sdb := state.NewDatabaseWithConfig(db, &trie.Config{Preimages: true})
- statedb, _ := state.New(types.EmptyRootHash, sdb, nil)
- for addr, a := range accounts {
- statedb.SetCode(addr, a.Code)
- statedb.SetNonce(addr, a.Nonce)
- statedb.SetBalance(addr, a.Balance)
- for k, v := range a.Storage {
- statedb.SetState(addr, k, v)
- }
- }
- // Commit and re-open to start with a clean state.
- root, _ := statedb.Commit(0, false)
- statedb, _ = state.New(root, sdb, nil)
- return statedb
-}
-
-func rlpHash(x interface{}) (h common.Hash) {
- hw := sha3.NewLegacyKeccak256()
- rlp.Encode(hw, x)
- hw.Sum(h[:0])
- return h
-}
-
-// calcDifficulty is based on ethash.CalcDifficulty. This method is used in case
-// the caller does not provide an explicit difficulty, but instead provides only
-// parent timestamp + difficulty.
-// Note: this method only works for ethash engine.
-func calcDifficulty(config *params.ChainConfig, number, currentTime, parentTime uint64,
- parentDifficulty *big.Int, parentUncleHash common.Hash) *big.Int {
- uncleHash := parentUncleHash
- if uncleHash == (common.Hash{}) {
- uncleHash = types.EmptyUncleHash
- }
- parent := &types.Header{
- ParentHash: common.Hash{},
- UncleHash: uncleHash,
- Difficulty: parentDifficulty,
- Number: new(big.Int).SetUint64(number - 1),
- Time: parentTime,
- }
- return ethash.CalcDifficulty(config, currentTime, parent)
-}
diff --git a/cmd/evm/internal/t8ntool/flags.go b/cmd/evm/internal/t8ntool/flags.go
deleted file mode 100644
index c2eca8cc21..0000000000
--- a/cmd/evm/internal/t8ntool/flags.go
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package t8ntool
-
-import (
- "fmt"
- "strings"
-
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/tests"
- "github.com/urfave/cli/v2"
-)
-
-var (
- TraceFlag = &cli.BoolFlag{
- Name: "trace",
- Usage: "Configures the use of the JSON opcode tracer. This tracer emits traces to files as trace--.jsonl",
- }
- TraceTracerFlag = &cli.StringFlag{
- Name: "trace.tracer",
- Usage: "Configures the use of a custom tracer, e.g native or js tracers. Examples are callTracer and 4byteTracer. These tracers emit results into files as trace--.json",
- }
- TraceTracerConfigFlag = &cli.StringFlag{
- Name: "trace.jsonconfig",
- Usage: "The configurations for the custom tracer specified by --trace.tracer. If provided, must be in JSON format",
- }
- TraceEnableMemoryFlag = &cli.BoolFlag{
- Name: "trace.memory",
- Usage: "Enable full memory dump in traces",
- }
- TraceDisableStackFlag = &cli.BoolFlag{
- Name: "trace.nostack",
- Usage: "Disable stack output in traces",
- }
- TraceEnableReturnDataFlag = &cli.BoolFlag{
- Name: "trace.returndata",
- Usage: "Enable return data output in traces",
- }
- OutputBasedir = &cli.StringFlag{
- Name: "output.basedir",
- Usage: "Specifies where output files are placed. Will be created if it does not exist.",
- Value: "",
- }
- OutputBodyFlag = &cli.StringFlag{
- Name: "output.body",
- Usage: "If set, the RLP of the transactions (block body) will be written to this file.",
- Value: "",
- }
- OutputAllocFlag = &cli.StringFlag{
- Name: "output.alloc",
- Usage: "Determines where to put the `alloc` of the post-state.\n" +
- "\t`stdout` - into the stdout output\n" +
- "\t`stderr` - into the stderr output\n" +
- "\t - into the file ",
- Value: "alloc.json",
- }
- OutputResultFlag = &cli.StringFlag{
- Name: "output.result",
- Usage: "Determines where to put the `result` (stateroot, txroot etc) of the post-state.\n" +
- "\t`stdout` - into the stdout output\n" +
- "\t`stderr` - into the stderr output\n" +
- "\t - into the file ",
- Value: "result.json",
- }
- OutputBlockFlag = &cli.StringFlag{
- Name: "output.block",
- Usage: "Determines where to put the `block` after building.\n" +
- "\t`stdout` - into the stdout output\n" +
- "\t`stderr` - into the stderr output\n" +
- "\t - into the file ",
- Value: "block.json",
- }
- InputAllocFlag = &cli.StringFlag{
- Name: "input.alloc",
- Usage: "`stdin` or file name of where to find the prestate alloc to use.",
- Value: "alloc.json",
- }
- InputEnvFlag = &cli.StringFlag{
- Name: "input.env",
- Usage: "`stdin` or file name of where to find the prestate env to use.",
- Value: "env.json",
- }
- InputTxsFlag = &cli.StringFlag{
- Name: "input.txs",
- Usage: "`stdin` or file name of where to find the transactions to apply. " +
- "If the file extension is '.rlp', then the data is interpreted as an RLP list of signed transactions." +
- "The '.rlp' format is identical to the output.body format.",
- Value: "txs.json",
- }
- InputHeaderFlag = &cli.StringFlag{
- Name: "input.header",
- Usage: "`stdin` or file name of where to find the block header to use.",
- Value: "header.json",
- }
- InputOmmersFlag = &cli.StringFlag{
- Name: "input.ommers",
- Usage: "`stdin` or file name of where to find the list of ommer header RLPs to use.",
- }
- InputWithdrawalsFlag = &cli.StringFlag{
- Name: "input.withdrawals",
- Usage: "`stdin` or file name of where to find the list of withdrawals to use.",
- }
- InputTxsRlpFlag = &cli.StringFlag{
- Name: "input.txs",
- Usage: "`stdin` or file name of where to find the transactions list in RLP form.",
- Value: "txs.rlp",
- }
- SealCliqueFlag = &cli.StringFlag{
- Name: "seal.clique",
- Usage: "Seal block with Clique. `stdin` or file name of where to find the Clique sealing data.",
- }
- RewardFlag = &cli.Int64Flag{
- Name: "state.reward",
- Usage: "Mining reward. Set to -1 to disable",
- Value: 0,
- }
- ChainIDFlag = &cli.Int64Flag{
- Name: "state.chainid",
- Usage: "ChainID to use",
- Value: 1,
- }
- ForknameFlag = &cli.StringFlag{
- Name: "state.fork",
- Usage: fmt.Sprintf("Name of ruleset to use."+
- "\n\tAvailable forknames:"+
- "\n\t %v"+
- "\n\tAvailable extra eips:"+
- "\n\t %v"+
- "\n\tSyntax (+ExtraEip)",
- strings.Join(tests.AvailableForks(), "\n\t "),
- strings.Join(vm.ActivateableEips(), ", ")),
- Value: "GrayGlacier",
- }
- VerbosityFlag = &cli.IntFlag{
- Name: "verbosity",
- Usage: "sets the verbosity level",
- Value: 3,
- }
-)
diff --git a/cmd/evm/internal/t8ntool/gen_header.go b/cmd/evm/internal/t8ntool/gen_header.go
deleted file mode 100644
index a8c8668978..0000000000
--- a/cmd/evm/internal/t8ntool/gen_header.go
+++ /dev/null
@@ -1,159 +0,0 @@
-// Code generated by github.com/fjl/gencodec. DO NOT EDIT.
-
-package t8ntool
-
-import (
- "encoding/json"
- "errors"
- "math/big"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/types"
-)
-
-var _ = (*headerMarshaling)(nil)
-
-// MarshalJSON marshals as JSON.
-func (h header) MarshalJSON() ([]byte, error) {
- type header struct {
- ParentHash common.Hash `json:"parentHash"`
- OmmerHash *common.Hash `json:"sha3Uncles"`
- Coinbase *common.Address `json:"miner"`
- Root common.Hash `json:"stateRoot" gencodec:"required"`
- TxHash *common.Hash `json:"transactionsRoot"`
- ReceiptHash *common.Hash `json:"receiptsRoot"`
- Bloom types.Bloom `json:"logsBloom"`
- Difficulty *math.HexOrDecimal256 `json:"difficulty"`
- Number *math.HexOrDecimal256 `json:"number" gencodec:"required"`
- GasLimit math.HexOrDecimal64 `json:"gasLimit" gencodec:"required"`
- GasUsed math.HexOrDecimal64 `json:"gasUsed"`
- Time math.HexOrDecimal64 `json:"timestamp" gencodec:"required"`
- Extra hexutil.Bytes `json:"extraData"`
- MixDigest common.Hash `json:"mixHash"`
- Nonce *types.BlockNonce `json:"nonce"`
- BaseFee *math.HexOrDecimal256 `json:"baseFeePerGas" rlp:"optional"`
- WithdrawalsHash *common.Hash `json:"withdrawalsRoot" rlp:"optional"`
- BlobGasUsed *math.HexOrDecimal64 `json:"blobGasUsed" rlp:"optional"`
- ExcessBlobGas *math.HexOrDecimal64 `json:"excessBlobGas" rlp:"optional"`
- ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot" rlp:"optional"`
- }
- var enc header
- enc.ParentHash = h.ParentHash
- enc.OmmerHash = h.OmmerHash
- enc.Coinbase = h.Coinbase
- enc.Root = h.Root
- enc.TxHash = h.TxHash
- enc.ReceiptHash = h.ReceiptHash
- enc.Bloom = h.Bloom
- enc.Difficulty = (*math.HexOrDecimal256)(h.Difficulty)
- enc.Number = (*math.HexOrDecimal256)(h.Number)
- enc.GasLimit = math.HexOrDecimal64(h.GasLimit)
- enc.GasUsed = math.HexOrDecimal64(h.GasUsed)
- enc.Time = math.HexOrDecimal64(h.Time)
- enc.Extra = h.Extra
- enc.MixDigest = h.MixDigest
- enc.Nonce = h.Nonce
- enc.BaseFee = (*math.HexOrDecimal256)(h.BaseFee)
- enc.WithdrawalsHash = h.WithdrawalsHash
- enc.BlobGasUsed = (*math.HexOrDecimal64)(h.BlobGasUsed)
- enc.ExcessBlobGas = (*math.HexOrDecimal64)(h.ExcessBlobGas)
- enc.ParentBeaconBlockRoot = h.ParentBeaconBlockRoot
- return json.Marshal(&enc)
-}
-
-// UnmarshalJSON unmarshals from JSON.
-func (h *header) UnmarshalJSON(input []byte) error {
- type header struct {
- ParentHash *common.Hash `json:"parentHash"`
- OmmerHash *common.Hash `json:"sha3Uncles"`
- Coinbase *common.Address `json:"miner"`
- Root *common.Hash `json:"stateRoot" gencodec:"required"`
- TxHash *common.Hash `json:"transactionsRoot"`
- ReceiptHash *common.Hash `json:"receiptsRoot"`
- Bloom *types.Bloom `json:"logsBloom"`
- Difficulty *math.HexOrDecimal256 `json:"difficulty"`
- Number *math.HexOrDecimal256 `json:"number" gencodec:"required"`
- GasLimit *math.HexOrDecimal64 `json:"gasLimit" gencodec:"required"`
- GasUsed *math.HexOrDecimal64 `json:"gasUsed"`
- Time *math.HexOrDecimal64 `json:"timestamp" gencodec:"required"`
- Extra *hexutil.Bytes `json:"extraData"`
- MixDigest *common.Hash `json:"mixHash"`
- Nonce *types.BlockNonce `json:"nonce"`
- BaseFee *math.HexOrDecimal256 `json:"baseFeePerGas" rlp:"optional"`
- WithdrawalsHash *common.Hash `json:"withdrawalsRoot" rlp:"optional"`
- BlobGasUsed *math.HexOrDecimal64 `json:"blobGasUsed" rlp:"optional"`
- ExcessBlobGas *math.HexOrDecimal64 `json:"excessBlobGas" rlp:"optional"`
- ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot" rlp:"optional"`
- }
- var dec header
- if err := json.Unmarshal(input, &dec); err != nil {
- return err
- }
- if dec.ParentHash != nil {
- h.ParentHash = *dec.ParentHash
- }
- if dec.OmmerHash != nil {
- h.OmmerHash = dec.OmmerHash
- }
- if dec.Coinbase != nil {
- h.Coinbase = dec.Coinbase
- }
- if dec.Root == nil {
- return errors.New("missing required field 'stateRoot' for header")
- }
- h.Root = *dec.Root
- if dec.TxHash != nil {
- h.TxHash = dec.TxHash
- }
- if dec.ReceiptHash != nil {
- h.ReceiptHash = dec.ReceiptHash
- }
- if dec.Bloom != nil {
- h.Bloom = *dec.Bloom
- }
- if dec.Difficulty != nil {
- h.Difficulty = (*big.Int)(dec.Difficulty)
- }
- if dec.Number == nil {
- return errors.New("missing required field 'number' for header")
- }
- h.Number = (*big.Int)(dec.Number)
- if dec.GasLimit == nil {
- return errors.New("missing required field 'gasLimit' for header")
- }
- h.GasLimit = uint64(*dec.GasLimit)
- if dec.GasUsed != nil {
- h.GasUsed = uint64(*dec.GasUsed)
- }
- if dec.Time == nil {
- return errors.New("missing required field 'timestamp' for header")
- }
- h.Time = uint64(*dec.Time)
- if dec.Extra != nil {
- h.Extra = *dec.Extra
- }
- if dec.MixDigest != nil {
- h.MixDigest = *dec.MixDigest
- }
- if dec.Nonce != nil {
- h.Nonce = dec.Nonce
- }
- if dec.BaseFee != nil {
- h.BaseFee = (*big.Int)(dec.BaseFee)
- }
- if dec.WithdrawalsHash != nil {
- h.WithdrawalsHash = dec.WithdrawalsHash
- }
- if dec.BlobGasUsed != nil {
- h.BlobGasUsed = (*uint64)(dec.BlobGasUsed)
- }
- if dec.ExcessBlobGas != nil {
- h.ExcessBlobGas = (*uint64)(dec.ExcessBlobGas)
- }
- if dec.ParentBeaconBlockRoot != nil {
- h.ParentBeaconBlockRoot = dec.ParentBeaconBlockRoot
- }
- return nil
-}
diff --git a/cmd/evm/internal/t8ntool/gen_stenv.go b/cmd/evm/internal/t8ntool/gen_stenv.go
deleted file mode 100644
index d47db4a876..0000000000
--- a/cmd/evm/internal/t8ntool/gen_stenv.go
+++ /dev/null
@@ -1,158 +0,0 @@
-// Code generated by github.com/fjl/gencodec. DO NOT EDIT.
-
-package t8ntool
-
-import (
- "encoding/json"
- "errors"
- "math/big"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/types"
-)
-
-var _ = (*stEnvMarshaling)(nil)
-
-// MarshalJSON marshals as JSON.
-func (s stEnv) MarshalJSON() ([]byte, error) {
- type stEnv struct {
- Coinbase common.UnprefixedAddress `json:"currentCoinbase" gencodec:"required"`
- Difficulty *math.HexOrDecimal256 `json:"currentDifficulty"`
- Random *math.HexOrDecimal256 `json:"currentRandom"`
- ParentDifficulty *math.HexOrDecimal256 `json:"parentDifficulty"`
- ParentBaseFee *math.HexOrDecimal256 `json:"parentBaseFee,omitempty"`
- ParentGasUsed math.HexOrDecimal64 `json:"parentGasUsed,omitempty"`
- ParentGasLimit math.HexOrDecimal64 `json:"parentGasLimit,omitempty"`
- GasLimit math.HexOrDecimal64 `json:"currentGasLimit" gencodec:"required"`
- Number math.HexOrDecimal64 `json:"currentNumber" gencodec:"required"`
- Timestamp math.HexOrDecimal64 `json:"currentTimestamp" gencodec:"required"`
- ParentTimestamp math.HexOrDecimal64 `json:"parentTimestamp,omitempty"`
- BlockHashes map[math.HexOrDecimal64]common.Hash `json:"blockHashes,omitempty"`
- Ommers []ommer `json:"ommers,omitempty"`
- Withdrawals []*types.Withdrawal `json:"withdrawals,omitempty"`
- BaseFee *math.HexOrDecimal256 `json:"currentBaseFee,omitempty"`
- ParentUncleHash common.Hash `json:"parentUncleHash"`
- ExcessBlobGas *math.HexOrDecimal64 `json:"currentExcessBlobGas,omitempty"`
- ParentExcessBlobGas *math.HexOrDecimal64 `json:"parentExcessBlobGas,omitempty"`
- ParentBlobGasUsed *math.HexOrDecimal64 `json:"parentBlobGasUsed,omitempty"`
- ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot"`
- }
- var enc stEnv
- enc.Coinbase = common.UnprefixedAddress(s.Coinbase)
- enc.Difficulty = (*math.HexOrDecimal256)(s.Difficulty)
- enc.Random = (*math.HexOrDecimal256)(s.Random)
- enc.ParentDifficulty = (*math.HexOrDecimal256)(s.ParentDifficulty)
- enc.ParentBaseFee = (*math.HexOrDecimal256)(s.ParentBaseFee)
- enc.ParentGasUsed = math.HexOrDecimal64(s.ParentGasUsed)
- enc.ParentGasLimit = math.HexOrDecimal64(s.ParentGasLimit)
- enc.GasLimit = math.HexOrDecimal64(s.GasLimit)
- enc.Number = math.HexOrDecimal64(s.Number)
- enc.Timestamp = math.HexOrDecimal64(s.Timestamp)
- enc.ParentTimestamp = math.HexOrDecimal64(s.ParentTimestamp)
- enc.BlockHashes = s.BlockHashes
- enc.Ommers = s.Ommers
- enc.Withdrawals = s.Withdrawals
- enc.BaseFee = (*math.HexOrDecimal256)(s.BaseFee)
- enc.ParentUncleHash = s.ParentUncleHash
- enc.ExcessBlobGas = (*math.HexOrDecimal64)(s.ExcessBlobGas)
- enc.ParentExcessBlobGas = (*math.HexOrDecimal64)(s.ParentExcessBlobGas)
- enc.ParentBlobGasUsed = (*math.HexOrDecimal64)(s.ParentBlobGasUsed)
- enc.ParentBeaconBlockRoot = s.ParentBeaconBlockRoot
- return json.Marshal(&enc)
-}
-
-// UnmarshalJSON unmarshals from JSON.
-func (s *stEnv) UnmarshalJSON(input []byte) error {
- type stEnv struct {
- Coinbase *common.UnprefixedAddress `json:"currentCoinbase" gencodec:"required"`
- Difficulty *math.HexOrDecimal256 `json:"currentDifficulty"`
- Random *math.HexOrDecimal256 `json:"currentRandom"`
- ParentDifficulty *math.HexOrDecimal256 `json:"parentDifficulty"`
- ParentBaseFee *math.HexOrDecimal256 `json:"parentBaseFee,omitempty"`
- ParentGasUsed *math.HexOrDecimal64 `json:"parentGasUsed,omitempty"`
- ParentGasLimit *math.HexOrDecimal64 `json:"parentGasLimit,omitempty"`
- GasLimit *math.HexOrDecimal64 `json:"currentGasLimit" gencodec:"required"`
- Number *math.HexOrDecimal64 `json:"currentNumber" gencodec:"required"`
- Timestamp *math.HexOrDecimal64 `json:"currentTimestamp" gencodec:"required"`
- ParentTimestamp *math.HexOrDecimal64 `json:"parentTimestamp,omitempty"`
- BlockHashes map[math.HexOrDecimal64]common.Hash `json:"blockHashes,omitempty"`
- Ommers []ommer `json:"ommers,omitempty"`
- Withdrawals []*types.Withdrawal `json:"withdrawals,omitempty"`
- BaseFee *math.HexOrDecimal256 `json:"currentBaseFee,omitempty"`
- ParentUncleHash *common.Hash `json:"parentUncleHash"`
- ExcessBlobGas *math.HexOrDecimal64 `json:"currentExcessBlobGas,omitempty"`
- ParentExcessBlobGas *math.HexOrDecimal64 `json:"parentExcessBlobGas,omitempty"`
- ParentBlobGasUsed *math.HexOrDecimal64 `json:"parentBlobGasUsed,omitempty"`
- ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot"`
- }
- var dec stEnv
- if err := json.Unmarshal(input, &dec); err != nil {
- return err
- }
- if dec.Coinbase == nil {
- return errors.New("missing required field 'currentCoinbase' for stEnv")
- }
- s.Coinbase = common.Address(*dec.Coinbase)
- if dec.Difficulty != nil {
- s.Difficulty = (*big.Int)(dec.Difficulty)
- }
- if dec.Random != nil {
- s.Random = (*big.Int)(dec.Random)
- }
- if dec.ParentDifficulty != nil {
- s.ParentDifficulty = (*big.Int)(dec.ParentDifficulty)
- }
- if dec.ParentBaseFee != nil {
- s.ParentBaseFee = (*big.Int)(dec.ParentBaseFee)
- }
- if dec.ParentGasUsed != nil {
- s.ParentGasUsed = uint64(*dec.ParentGasUsed)
- }
- if dec.ParentGasLimit != nil {
- s.ParentGasLimit = uint64(*dec.ParentGasLimit)
- }
- if dec.GasLimit == nil {
- return errors.New("missing required field 'currentGasLimit' for stEnv")
- }
- s.GasLimit = uint64(*dec.GasLimit)
- if dec.Number == nil {
- return errors.New("missing required field 'currentNumber' for stEnv")
- }
- s.Number = uint64(*dec.Number)
- if dec.Timestamp == nil {
- return errors.New("missing required field 'currentTimestamp' for stEnv")
- }
- s.Timestamp = uint64(*dec.Timestamp)
- if dec.ParentTimestamp != nil {
- s.ParentTimestamp = uint64(*dec.ParentTimestamp)
- }
- if dec.BlockHashes != nil {
- s.BlockHashes = dec.BlockHashes
- }
- if dec.Ommers != nil {
- s.Ommers = dec.Ommers
- }
- if dec.Withdrawals != nil {
- s.Withdrawals = dec.Withdrawals
- }
- if dec.BaseFee != nil {
- s.BaseFee = (*big.Int)(dec.BaseFee)
- }
- if dec.ParentUncleHash != nil {
- s.ParentUncleHash = *dec.ParentUncleHash
- }
- if dec.ExcessBlobGas != nil {
- s.ExcessBlobGas = (*uint64)(dec.ExcessBlobGas)
- }
- if dec.ParentExcessBlobGas != nil {
- s.ParentExcessBlobGas = (*uint64)(dec.ParentExcessBlobGas)
- }
- if dec.ParentBlobGasUsed != nil {
- s.ParentBlobGasUsed = (*uint64)(dec.ParentBlobGasUsed)
- }
- if dec.ParentBeaconBlockRoot != nil {
- s.ParentBeaconBlockRoot = dec.ParentBeaconBlockRoot
- }
- return nil
-}
diff --git a/cmd/evm/internal/t8ntool/tracewriter.go b/cmd/evm/internal/t8ntool/tracewriter.go
deleted file mode 100644
index e4efad112f..0000000000
--- a/cmd/evm/internal/t8ntool/tracewriter.go
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package t8ntool
-
-import (
- "encoding/json"
- "io"
- "math/big"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/eth/tracers"
- "github.com/ethereum/go-ethereum/log"
-)
-
-// traceWriter is an vm.EVMLogger which also holds an inner logger/tracer.
-// When the TxEnd event happens, the inner tracer result is written to the file, and
-// the file is closed.
-type traceWriter struct {
- inner vm.EVMLogger
- f io.WriteCloser
-}
-
-// Compile-time interface check
-var _ = vm.EVMLogger((*traceWriter)(nil))
-
-func (t *traceWriter) CaptureTxEnd(restGas uint64) {
- t.inner.CaptureTxEnd(restGas)
- defer t.f.Close()
-
- if tracer, ok := t.inner.(tracers.Tracer); ok {
- result, err := tracer.GetResult()
- if err != nil {
- log.Warn("Error in tracer", "err", err)
- return
- }
- err = json.NewEncoder(t.f).Encode(result)
- if err != nil {
- log.Warn("Error writing tracer output", "err", err)
- return
- }
- }
-}
-
-func (t *traceWriter) CaptureTxStart(gasLimit uint64) { t.inner.CaptureTxStart(gasLimit) }
-func (t *traceWriter) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) {
- t.inner.CaptureStart(env, from, to, create, input, gas, value)
-}
-
-func (t *traceWriter) CaptureEnd(output []byte, gasUsed uint64, err error) {
- t.inner.CaptureEnd(output, gasUsed, err)
-}
-
-func (t *traceWriter) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) {
- t.inner.CaptureEnter(typ, from, to, input, gas, value)
-}
-
-func (t *traceWriter) CaptureExit(output []byte, gasUsed uint64, err error) {
- t.inner.CaptureExit(output, gasUsed, err)
-}
-
-func (t *traceWriter) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) {
- t.inner.CaptureState(pc, op, gas, cost, scope, rData, depth, err)
-}
-func (t *traceWriter) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, depth int, err error) {
- t.inner.CaptureFault(pc, op, gas, cost, scope, depth, err)
-}
diff --git a/cmd/evm/internal/t8ntool/transaction.go b/cmd/evm/internal/t8ntool/transaction.go
deleted file mode 100644
index 8533b78637..0000000000
--- a/cmd/evm/internal/t8ntool/transaction.go
+++ /dev/null
@@ -1,177 +0,0 @@
-// Copyright 2021 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package t8ntool
-
-import (
- "encoding/json"
- "errors"
- "fmt"
- "math/big"
- "os"
- "strings"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/tests"
- "github.com/urfave/cli/v2"
-)
-
-type result struct {
- Error error
- Address common.Address
- Hash common.Hash
- IntrinsicGas uint64
-}
-
-// MarshalJSON marshals as JSON with a hash.
-func (r *result) MarshalJSON() ([]byte, error) {
- type xx struct {
- Error string `json:"error,omitempty"`
- Address *common.Address `json:"address,omitempty"`
- Hash *common.Hash `json:"hash,omitempty"`
- IntrinsicGas hexutil.Uint64 `json:"intrinsicGas,omitempty"`
- }
- var out xx
- if r.Error != nil {
- out.Error = r.Error.Error()
- }
- if r.Address != (common.Address{}) {
- out.Address = &r.Address
- }
- if r.Hash != (common.Hash{}) {
- out.Hash = &r.Hash
- }
- out.IntrinsicGas = hexutil.Uint64(r.IntrinsicGas)
- return json.Marshal(out)
-}
-
-func Transaction(ctx *cli.Context) error {
- var (
- err error
- )
- // We need to load the transactions. May be either in stdin input or in files.
- // Check if anything needs to be read from stdin
- var (
- txStr = ctx.String(InputTxsFlag.Name)
- inputData = &input{}
- chainConfig *params.ChainConfig
- )
- // Construct the chainconfig
- if cConf, _, err := tests.GetChainConfig(ctx.String(ForknameFlag.Name)); err != nil {
- return NewError(ErrorConfig, fmt.Errorf("failed constructing chain configuration: %v", err))
- } else {
- chainConfig = cConf
- }
- // Set the chain id
- chainConfig.ChainID = big.NewInt(ctx.Int64(ChainIDFlag.Name))
- var body hexutil.Bytes
- if txStr == stdinSelector {
- decoder := json.NewDecoder(os.Stdin)
- if err := decoder.Decode(inputData); err != nil {
- return NewError(ErrorJson, fmt.Errorf("failed unmarshaling stdin: %v", err))
- }
- // Decode the body of already signed transactions
- body = common.FromHex(inputData.TxRlp)
- } else {
- // Read input from file
- inFile, err := os.Open(txStr)
- if err != nil {
- return NewError(ErrorIO, fmt.Errorf("failed reading txs file: %v", err))
- }
- defer inFile.Close()
- decoder := json.NewDecoder(inFile)
- if strings.HasSuffix(txStr, ".rlp") {
- if err := decoder.Decode(&body); err != nil {
- return err
- }
- } else {
- return NewError(ErrorIO, errors.New("only rlp supported"))
- }
- }
- signer := types.MakeSigner(chainConfig, new(big.Int), 0)
- // We now have the transactions in 'body', which is supposed to be an
- // rlp list of transactions
- it, err := rlp.NewListIterator([]byte(body))
- if err != nil {
- return err
- }
- var results []result
- for it.Next() {
- if err := it.Err(); err != nil {
- return NewError(ErrorIO, err)
- }
- var tx types.Transaction
- err := rlp.DecodeBytes(it.Value(), &tx)
- if err != nil {
- results = append(results, result{Error: err})
- continue
- }
- r := result{Hash: tx.Hash()}
- if sender, err := types.Sender(signer, &tx); err != nil {
- r.Error = err
- results = append(results, r)
- continue
- } else {
- r.Address = sender
- }
- // Check intrinsic gas
- if gas, err := core.IntrinsicGas(tx.Data(), tx.AccessList(), tx.To() == nil,
- chainConfig.IsHomestead(new(big.Int)), chainConfig.IsIstanbul(new(big.Int)), chainConfig.IsShanghai(new(big.Int), 0)); err != nil {
- r.Error = err
- results = append(results, r)
- continue
- } else {
- r.IntrinsicGas = gas
- if tx.Gas() < gas {
- r.Error = fmt.Errorf("%w: have %d, want %d", core.ErrIntrinsicGas, tx.Gas(), gas)
- results = append(results, r)
- continue
- }
- }
- // Validate <256bit fields
- switch {
- case tx.Nonce()+1 < tx.Nonce():
- r.Error = errors.New("nonce exceeds 2^64-1")
- case tx.Value().BitLen() > 256:
- r.Error = errors.New("value exceeds 256 bits")
- case tx.GasPrice().BitLen() > 256:
- r.Error = errors.New("gasPrice exceeds 256 bits")
- case tx.GasTipCap().BitLen() > 256:
- r.Error = errors.New("maxPriorityFeePerGas exceeds 256 bits")
- case tx.GasFeeCap().BitLen() > 256:
- r.Error = errors.New("maxFeePerGas exceeds 256 bits")
- case tx.GasFeeCap().Cmp(tx.GasTipCap()) < 0:
- r.Error = errors.New("maxFeePerGas < maxPriorityFeePerGas")
- case new(big.Int).Mul(tx.GasPrice(), new(big.Int).SetUint64(tx.Gas())).BitLen() > 256:
- r.Error = errors.New("gas * gasPrice exceeds 256 bits")
- case new(big.Int).Mul(tx.GasFeeCap(), new(big.Int).SetUint64(tx.Gas())).BitLen() > 256:
- r.Error = errors.New("gas * maxFeePerGas exceeds 256 bits")
- }
- // Check whether the init code size has been exceeded.
- if chainConfig.IsShanghai(new(big.Int), 0) && tx.To() == nil && len(tx.Data()) > params.MaxInitCodeSize {
- r.Error = errors.New("max initcode size exceeded")
- }
- results = append(results, r)
- }
- out, err := json.MarshalIndent(results, "", " ")
- fmt.Println(string(out))
- return err
-}
diff --git a/cmd/evm/internal/t8ntool/transition.go b/cmd/evm/internal/t8ntool/transition.go
deleted file mode 100644
index c8ba69f40f..0000000000
--- a/cmd/evm/internal/t8ntool/transition.go
+++ /dev/null
@@ -1,360 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package t8ntool
-
-import (
- "encoding/json"
- "errors"
- "fmt"
- "math/big"
- "os"
- "path"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/consensus/misc/eip1559"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/eth/tracers"
- "github.com/ethereum/go-ethereum/eth/tracers/logger"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/tests"
- "github.com/urfave/cli/v2"
-)
-
-const (
- ErrorEVM = 2
- ErrorConfig = 3
- ErrorMissingBlockhash = 4
-
- ErrorJson = 10
- ErrorIO = 11
- ErrorRlp = 12
-
- stdinSelector = "stdin"
-)
-
-type NumberedError struct {
- errorCode int
- err error
-}
-
-func NewError(errorCode int, err error) *NumberedError {
- return &NumberedError{errorCode, err}
-}
-
-func (n *NumberedError) Error() string {
- return fmt.Sprintf("ERROR(%d): %v", n.errorCode, n.err.Error())
-}
-
-func (n *NumberedError) ExitCode() int {
- return n.errorCode
-}
-
-// compile-time conformance test
-var (
- _ cli.ExitCoder = (*NumberedError)(nil)
-)
-
-type input struct {
- Alloc core.GenesisAlloc `json:"alloc,omitempty"`
- Env *stEnv `json:"env,omitempty"`
- Txs []*txWithKey `json:"txs,omitempty"`
- TxRlp string `json:"txsRlp,omitempty"`
-}
-
-func Transition(ctx *cli.Context) error {
- var getTracer = func(txIndex int, txHash common.Hash) (vm.EVMLogger, error) { return nil, nil }
-
- baseDir, err := createBasedir(ctx)
- if err != nil {
- return NewError(ErrorIO, fmt.Errorf("failed creating output basedir: %v", err))
- }
-
- if ctx.Bool(TraceFlag.Name) { // JSON opcode tracing
- // Configure the EVM logger
- logConfig := &logger.Config{
- DisableStack: ctx.Bool(TraceDisableStackFlag.Name),
- EnableMemory: ctx.Bool(TraceEnableMemoryFlag.Name),
- EnableReturnData: ctx.Bool(TraceEnableReturnDataFlag.Name),
- Debug: true,
- }
- getTracer = func(txIndex int, txHash common.Hash) (vm.EVMLogger, error) {
- traceFile, err := os.Create(path.Join(baseDir, fmt.Sprintf("trace-%d-%v.jsonl", txIndex, txHash.String())))
- if err != nil {
- return nil, NewError(ErrorIO, fmt.Errorf("failed creating trace-file: %v", err))
- }
- return &traceWriter{logger.NewJSONLogger(logConfig, traceFile), traceFile}, nil
- }
- } else if ctx.IsSet(TraceTracerFlag.Name) {
- var config json.RawMessage
- if ctx.IsSet(TraceTracerConfigFlag.Name) {
- config = []byte(ctx.String(TraceTracerConfigFlag.Name))
- }
- getTracer = func(txIndex int, txHash common.Hash) (vm.EVMLogger, error) {
- traceFile, err := os.Create(path.Join(baseDir, fmt.Sprintf("trace-%d-%v.json", txIndex, txHash.String())))
- if err != nil {
- return nil, NewError(ErrorIO, fmt.Errorf("failed creating trace-file: %v", err))
- }
- tracer, err := tracers.DefaultDirectory.New(ctx.String(TraceTracerFlag.Name), nil, config)
- if err != nil {
- return nil, NewError(ErrorConfig, fmt.Errorf("failed instantiating tracer: %w", err))
- }
- return &traceWriter{tracer, traceFile}, nil
- }
- }
- // We need to load three things: alloc, env and transactions. May be either in
- // stdin input or in files.
- // Check if anything needs to be read from stdin
- var (
- prestate Prestate
- txIt txIterator // txs to apply
- allocStr = ctx.String(InputAllocFlag.Name)
-
- envStr = ctx.String(InputEnvFlag.Name)
- txStr = ctx.String(InputTxsFlag.Name)
- inputData = &input{}
- )
- // Figure out the prestate alloc
- if allocStr == stdinSelector || envStr == stdinSelector || txStr == stdinSelector {
- decoder := json.NewDecoder(os.Stdin)
- if err := decoder.Decode(inputData); err != nil {
- return NewError(ErrorJson, fmt.Errorf("failed unmarshaling stdin: %v", err))
- }
- }
- if allocStr != stdinSelector {
- if err := readFile(allocStr, "alloc", &inputData.Alloc); err != nil {
- return err
- }
- }
- prestate.Pre = inputData.Alloc
-
- // Set the block environment
- if envStr != stdinSelector {
- var env stEnv
- if err := readFile(envStr, "env", &env); err != nil {
- return err
- }
- inputData.Env = &env
- }
- prestate.Env = *inputData.Env
-
- vmConfig := vm.Config{}
- // Construct the chainconfig
- var chainConfig *params.ChainConfig
- if cConf, extraEips, err := tests.GetChainConfig(ctx.String(ForknameFlag.Name)); err != nil {
- return NewError(ErrorConfig, fmt.Errorf("failed constructing chain configuration: %v", err))
- } else {
- chainConfig = cConf
- vmConfig.ExtraEips = extraEips
- }
- // Set the chain id
- chainConfig.ChainID = big.NewInt(ctx.Int64(ChainIDFlag.Name))
-
- if txIt, err = loadTransactions(txStr, inputData, prestate.Env, chainConfig); err != nil {
- return err
- }
- if err := applyLondonChecks(&prestate.Env, chainConfig); err != nil {
- return err
- }
- if err := applyShanghaiChecks(&prestate.Env, chainConfig); err != nil {
- return err
- }
- if err := applyMergeChecks(&prestate.Env, chainConfig); err != nil {
- return err
- }
- if err := applyCancunChecks(&prestate.Env, chainConfig); err != nil {
- return err
- }
- // Run the test and aggregate the result
- s, result, body, err := prestate.Apply(vmConfig, chainConfig, txIt, ctx.Int64(RewardFlag.Name), getTracer)
- if err != nil {
- return err
- }
- // Dump the excution result
- collector := make(Alloc)
- s.DumpToCollector(collector, nil)
- return dispatchOutput(ctx, baseDir, result, collector, body)
-}
-
-func applyLondonChecks(env *stEnv, chainConfig *params.ChainConfig) error {
- if !chainConfig.IsLondon(big.NewInt(int64(env.Number))) {
- return nil
- }
- // Sanity check, to not `panic` in state_transition
- if env.BaseFee != nil {
- // Already set, base fee has precedent over parent base fee.
- return nil
- }
- if env.ParentBaseFee == nil || env.Number == 0 {
- return NewError(ErrorConfig, errors.New("EIP-1559 config but missing 'currentBaseFee' in env section"))
- }
- env.BaseFee = eip1559.CalcBaseFee(chainConfig, &types.Header{
- Number: new(big.Int).SetUint64(env.Number - 1),
- BaseFee: env.ParentBaseFee,
- GasUsed: env.ParentGasUsed,
- GasLimit: env.ParentGasLimit,
- })
- return nil
-}
-
-func applyShanghaiChecks(env *stEnv, chainConfig *params.ChainConfig) error {
- if !chainConfig.IsShanghai(big.NewInt(int64(env.Number)), env.Timestamp) {
- return nil
- }
- if env.Withdrawals == nil {
- return NewError(ErrorConfig, errors.New("Shanghai config but missing 'withdrawals' in env section"))
- }
- return nil
-}
-
-func applyMergeChecks(env *stEnv, chainConfig *params.ChainConfig) error {
- isMerged := chainConfig.TerminalTotalDifficulty != nil && chainConfig.TerminalTotalDifficulty.BitLen() == 0
- if !isMerged {
- // pre-merge: If difficulty was not provided by caller, we need to calculate it.
- if env.Difficulty != nil {
- // already set
- return nil
- }
- switch {
- case env.ParentDifficulty == nil:
- return NewError(ErrorConfig, errors.New("currentDifficulty was not provided, and cannot be calculated due to missing parentDifficulty"))
- case env.Number == 0:
- return NewError(ErrorConfig, errors.New("currentDifficulty needs to be provided for block number 0"))
- case env.Timestamp <= env.ParentTimestamp:
- return NewError(ErrorConfig, fmt.Errorf("currentDifficulty cannot be calculated -- currentTime (%d) needs to be after parent time (%d)",
- env.Timestamp, env.ParentTimestamp))
- }
- env.Difficulty = calcDifficulty(chainConfig, env.Number, env.Timestamp,
- env.ParentTimestamp, env.ParentDifficulty, env.ParentUncleHash)
- return nil
- }
- // post-merge:
- // - random must be supplied
- // - difficulty must be zero
- switch {
- case env.Random == nil:
- return NewError(ErrorConfig, errors.New("post-merge requires currentRandom to be defined in env"))
- case env.Difficulty != nil && env.Difficulty.BitLen() != 0:
- return NewError(ErrorConfig, errors.New("post-merge difficulty must be zero (or omitted) in env"))
- }
- env.Difficulty = nil
- return nil
-}
-
-func applyCancunChecks(env *stEnv, chainConfig *params.ChainConfig) error {
- if !chainConfig.IsCancun(big.NewInt(int64(env.Number)), env.Timestamp) {
- env.ParentBeaconBlockRoot = nil // un-set it if it has been set too early
- return nil
- }
- // Post-cancun
- // We require EIP-4788 beacon root to be set in the env
- if env.ParentBeaconBlockRoot == nil {
- return NewError(ErrorConfig, errors.New("post-cancun env requires parentBeaconBlockRoot to be set"))
- }
- return nil
-}
-
-type Alloc map[common.Address]core.GenesisAccount
-
-func (g Alloc) OnRoot(common.Hash) {}
-
-func (g Alloc) OnAccount(addr *common.Address, dumpAccount state.DumpAccount) {
- if addr == nil {
- return
- }
- balance, _ := new(big.Int).SetString(dumpAccount.Balance, 10)
- var storage map[common.Hash]common.Hash
- if dumpAccount.Storage != nil {
- storage = make(map[common.Hash]common.Hash)
- for k, v := range dumpAccount.Storage {
- storage[k] = common.HexToHash(v)
- }
- }
- genesisAccount := core.GenesisAccount{
- Code: dumpAccount.Code,
- Storage: storage,
- Balance: balance,
- Nonce: dumpAccount.Nonce,
- }
- g[*addr] = genesisAccount
-}
-
-// saveFile marshals the object to the given file
-func saveFile(baseDir, filename string, data interface{}) error {
- b, err := json.MarshalIndent(data, "", " ")
- if err != nil {
- return NewError(ErrorJson, fmt.Errorf("failed marshalling output: %v", err))
- }
- location := path.Join(baseDir, filename)
- if err = os.WriteFile(location, b, 0644); err != nil {
- return NewError(ErrorIO, fmt.Errorf("failed writing output: %v", err))
- }
- log.Info("Wrote file", "file", location)
- return nil
-}
-
-// dispatchOutput writes the output data to either stderr or stdout, or to the specified
-// files
-func dispatchOutput(ctx *cli.Context, baseDir string, result *ExecutionResult, alloc Alloc, body hexutil.Bytes) error {
- stdOutObject := make(map[string]interface{})
- stdErrObject := make(map[string]interface{})
- dispatch := func(baseDir, fName, name string, obj interface{}) error {
- switch fName {
- case "stdout":
- stdOutObject[name] = obj
- case "stderr":
- stdErrObject[name] = obj
- case "":
- // don't save
- default: // save to file
- if err := saveFile(baseDir, fName, obj); err != nil {
- return err
- }
- }
- return nil
- }
- if err := dispatch(baseDir, ctx.String(OutputAllocFlag.Name), "alloc", alloc); err != nil {
- return err
- }
- if err := dispatch(baseDir, ctx.String(OutputResultFlag.Name), "result", result); err != nil {
- return err
- }
- if err := dispatch(baseDir, ctx.String(OutputBodyFlag.Name), "body", body); err != nil {
- return err
- }
- if len(stdOutObject) > 0 {
- b, err := json.MarshalIndent(stdOutObject, "", " ")
- if err != nil {
- return NewError(ErrorJson, fmt.Errorf("failed marshalling output: %v", err))
- }
- os.Stdout.Write(b)
- os.Stdout.WriteString("\n")
- }
- if len(stdErrObject) > 0 {
- b, err := json.MarshalIndent(stdErrObject, "", " ")
- if err != nil {
- return NewError(ErrorJson, fmt.Errorf("failed marshalling output: %v", err))
- }
- os.Stderr.Write(b)
- os.Stderr.WriteString("\n")
- }
- return nil
-}
diff --git a/cmd/evm/internal/t8ntool/tx_iterator.go b/cmd/evm/internal/t8ntool/tx_iterator.go
deleted file mode 100644
index 8f28dc7022..0000000000
--- a/cmd/evm/internal/t8ntool/tx_iterator.go
+++ /dev/null
@@ -1,194 +0,0 @@
-// Copyright 2023 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package t8ntool
-
-import (
- "bytes"
- "crypto/ecdsa"
- "encoding/json"
- "fmt"
- "io"
- "os"
- "strings"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
-)
-
-// txWithKey is a helper-struct, to allow us to use the types.Transaction along with
-// a `secretKey`-field, for input
-type txWithKey struct {
- key *ecdsa.PrivateKey
- tx *types.Transaction
- protected bool
-}
-
-func (t *txWithKey) UnmarshalJSON(input []byte) error {
- // Read the metadata, if present
- type txMetadata struct {
- Key *common.Hash `json:"secretKey"`
- Protected *bool `json:"protected"`
- }
- var data txMetadata
- if err := json.Unmarshal(input, &data); err != nil {
- return err
- }
- if data.Key != nil {
- k := data.Key.Hex()[2:]
- if ecdsaKey, err := crypto.HexToECDSA(k); err != nil {
- return err
- } else {
- t.key = ecdsaKey
- }
- }
- if data.Protected != nil {
- t.protected = *data.Protected
- } else {
- t.protected = true
- }
- // Now, read the transaction itself
- var tx types.Transaction
- if err := json.Unmarshal(input, &tx); err != nil {
- return err
- }
- t.tx = &tx
- return nil
-}
-
-// signUnsignedTransactions converts the input txs to canonical transactions.
-//
-// The transactions can have two forms, either
-// 1. unsigned or
-// 2. signed
-//
-// For (1), r, s, v, need so be zero, and the `secretKey` needs to be set.
-// If so, we sign it here and now, with the given `secretKey`
-// If the condition above is not met, then it's considered a signed transaction.
-//
-// To manage this, we read the transactions twice, first trying to read the secretKeys,
-// and secondly to read them with the standard tx json format
-func signUnsignedTransactions(txs []*txWithKey, signer types.Signer) (types.Transactions, error) {
- var signedTxs []*types.Transaction
- for i, tx := range txs {
- var (
- v, r, s = tx.tx.RawSignatureValues()
- signed *types.Transaction
- err error
- )
- if tx.key == nil || v.BitLen()+r.BitLen()+s.BitLen() != 0 {
- // Already signed
- signedTxs = append(signedTxs, tx.tx)
- continue
- }
- // This transaction needs to be signed
- if tx.protected {
- signed, err = types.SignTx(tx.tx, signer, tx.key)
- } else {
- signed, err = types.SignTx(tx.tx, types.FrontierSigner{}, tx.key)
- }
- if err != nil {
- return nil, NewError(ErrorJson, fmt.Errorf("tx %d: failed to sign tx: %v", i, err))
- }
- signedTxs = append(signedTxs, signed)
- }
- return signedTxs, nil
-}
-
-func loadTransactions(txStr string, inputData *input, env stEnv, chainConfig *params.ChainConfig) (txIterator, error) {
- var txsWithKeys []*txWithKey
- if txStr != stdinSelector {
- data, err := os.ReadFile(txStr)
- if err != nil {
- return nil, NewError(ErrorIO, fmt.Errorf("failed reading txs file: %v", err))
- }
- if strings.HasSuffix(txStr, ".rlp") { // A file containing an rlp list
- var body hexutil.Bytes
- if err := json.Unmarshal(data, &body); err != nil {
- return nil, err
- }
- return newRlpTxIterator(body), nil
- }
- if err := json.Unmarshal(data, &txsWithKeys); err != nil {
- return nil, NewError(ErrorJson, fmt.Errorf("failed unmarshaling txs-file: %v", err))
- }
- } else {
- if len(inputData.TxRlp) > 0 {
- // Decode the body of already signed transactions
- return newRlpTxIterator(common.FromHex(inputData.TxRlp)), nil
- }
- // JSON encoded transactions
- txsWithKeys = inputData.Txs
- }
- // We may have to sign the transactions.
- signer := types.LatestSignerForChainID(chainConfig.ChainID)
- txs, err := signUnsignedTransactions(txsWithKeys, signer)
- return newSliceTxIterator(txs), err
-}
-
-type txIterator interface {
- // Next returns true until EOF
- Next() bool
- // Tx returns the next transaction, OR an error.
- Tx() (*types.Transaction, error)
-}
-
-type sliceTxIterator struct {
- idx int
- txs []*types.Transaction
-}
-
-func newSliceTxIterator(transactions types.Transactions) txIterator {
- return &sliceTxIterator{0, transactions}
-}
-
-func (ait *sliceTxIterator) Next() bool {
- return ait.idx < len(ait.txs)
-}
-
-func (ait *sliceTxIterator) Tx() (*types.Transaction, error) {
- if ait.idx < len(ait.txs) {
- ait.idx++
- return ait.txs[ait.idx-1], nil
- }
- return nil, io.EOF
-}
-
-type rlpTxIterator struct {
- in *rlp.Stream
-}
-
-func newRlpTxIterator(rlpData []byte) txIterator {
- in := rlp.NewStream(bytes.NewBuffer(rlpData), 1024*1024)
- in.List()
- return &rlpTxIterator{in}
-}
-
-func (it *rlpTxIterator) Next() bool {
- return it.in.MoreDataInList()
-}
-
-func (it *rlpTxIterator) Tx() (*types.Transaction, error) {
- var a types.Transaction
- if err := it.in.Decode(&a); err != nil {
- return nil, err
- }
- return &a, nil
-}
diff --git a/cmd/evm/internal/t8ntool/utils.go b/cmd/evm/internal/t8ntool/utils.go
deleted file mode 100644
index 8ec38c7618..0000000000
--- a/cmd/evm/internal/t8ntool/utils.go
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2021 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package t8ntool
-
-import (
- "encoding/json"
- "fmt"
- "os"
-
- "github.com/urfave/cli/v2"
-)
-
-// readFile reads the json-data in the provided path and marshals into dest.
-func readFile(path, desc string, dest interface{}) error {
- inFile, err := os.Open(path)
- if err != nil {
- return NewError(ErrorIO, fmt.Errorf("failed reading %s file: %v", desc, err))
- }
- defer inFile.Close()
- decoder := json.NewDecoder(inFile)
- if err := decoder.Decode(dest); err != nil {
- return NewError(ErrorJson, fmt.Errorf("failed unmarshaling %s file: %v", desc, err))
- }
- return nil
-}
-
-// createBasedir makes sure the basedir exists, if user specified one.
-func createBasedir(ctx *cli.Context) (string, error) {
- baseDir := ""
- if ctx.IsSet(OutputBasedir.Name) {
- if base := ctx.String(OutputBasedir.Name); len(base) > 0 {
- err := os.MkdirAll(base, 0755) // //rw-r--r--
- if err != nil {
- return "", err
- }
- baseDir = base
- }
- }
- return baseDir, nil
-}
diff --git a/cmd/evm/main.go b/cmd/evm/main.go
deleted file mode 100644
index c3e6a4af91..0000000000
--- a/cmd/evm/main.go
+++ /dev/null
@@ -1,257 +0,0 @@
-// Copyright 2014 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-// evm executes EVM code snippets.
-package main
-
-import (
- "fmt"
- "math/big"
- "os"
-
- "github.com/ethereum/go-ethereum/cmd/evm/internal/t8ntool"
- "github.com/ethereum/go-ethereum/internal/debug"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/urfave/cli/v2"
-
- // Force-load the tracer engines to trigger registration
- _ "github.com/ethereum/go-ethereum/eth/tracers/js"
- _ "github.com/ethereum/go-ethereum/eth/tracers/native"
-)
-
-var (
- DebugFlag = &cli.BoolFlag{
- Name: "debug",
- Usage: "output full trace logs",
- Category: flags.VMCategory,
- }
- StatDumpFlag = &cli.BoolFlag{
- Name: "statdump",
- Usage: "displays stack and heap memory information",
- Category: flags.VMCategory,
- }
- CodeFlag = &cli.StringFlag{
- Name: "code",
- Usage: "EVM code",
- Category: flags.VMCategory,
- }
- CodeFileFlag = &cli.StringFlag{
- Name: "codefile",
- Usage: "File containing EVM code. If '-' is specified, code is read from stdin ",
- Category: flags.VMCategory,
- }
- GasFlag = &cli.Uint64Flag{
- Name: "gas",
- Usage: "gas limit for the evm",
- Value: 10000000000,
- Category: flags.VMCategory,
- }
- PriceFlag = &flags.BigFlag{
- Name: "price",
- Usage: "price set for the evm",
- Value: new(big.Int),
- Category: flags.VMCategory,
- }
- ValueFlag = &flags.BigFlag{
- Name: "value",
- Usage: "value set for the evm",
- Value: new(big.Int),
- Category: flags.VMCategory,
- }
- DumpFlag = &cli.BoolFlag{
- Name: "dump",
- Usage: "dumps the state after the run",
- Category: flags.VMCategory,
- }
- InputFlag = &cli.StringFlag{
- Name: "input",
- Usage: "input for the EVM",
- Category: flags.VMCategory,
- }
- InputFileFlag = &cli.StringFlag{
- Name: "inputfile",
- Usage: "file containing input for the EVM",
- Category: flags.VMCategory,
- }
- BenchFlag = &cli.BoolFlag{
- Name: "bench",
- Usage: "benchmark the execution",
- Category: flags.VMCategory,
- }
- CreateFlag = &cli.BoolFlag{
- Name: "create",
- Usage: "indicates the action should be create rather than call",
- Category: flags.VMCategory,
- }
- GenesisFlag = &cli.StringFlag{
- Name: "prestate",
- Usage: "JSON file with prestate (genesis) config",
- Category: flags.VMCategory,
- }
- MachineFlag = &cli.BoolFlag{
- Name: "json",
- Usage: "output trace logs in machine readable format (json)",
- Category: flags.VMCategory,
- }
- SenderFlag = &cli.StringFlag{
- Name: "sender",
- Usage: "The transaction origin",
- Category: flags.VMCategory,
- }
- ReceiverFlag = &cli.StringFlag{
- Name: "receiver",
- Usage: "The transaction receiver (execution context)",
- Category: flags.VMCategory,
- }
- DisableMemoryFlag = &cli.BoolFlag{
- Name: "nomemory",
- Value: true,
- Usage: "disable memory output",
- Category: flags.VMCategory,
- }
- DisableStackFlag = &cli.BoolFlag{
- Name: "nostack",
- Usage: "disable stack output",
- Category: flags.VMCategory,
- }
- DisableStorageFlag = &cli.BoolFlag{
- Name: "nostorage",
- Usage: "disable storage output",
- Category: flags.VMCategory,
- }
- DisableReturnDataFlag = &cli.BoolFlag{
- Name: "noreturndata",
- Value: true,
- Usage: "enable return data output",
- Category: flags.VMCategory,
- }
-)
-
-var stateTransitionCommand = &cli.Command{
- Name: "transition",
- Aliases: []string{"t8n"},
- Usage: "Executes a full state transition",
- Action: t8ntool.Transition,
- Flags: []cli.Flag{
- t8ntool.TraceFlag,
- t8ntool.TraceTracerFlag,
- t8ntool.TraceTracerConfigFlag,
- t8ntool.TraceEnableMemoryFlag,
- t8ntool.TraceDisableStackFlag,
- t8ntool.TraceEnableReturnDataFlag,
- t8ntool.OutputBasedir,
- t8ntool.OutputAllocFlag,
- t8ntool.OutputResultFlag,
- t8ntool.OutputBodyFlag,
- t8ntool.InputAllocFlag,
- t8ntool.InputEnvFlag,
- t8ntool.InputTxsFlag,
- t8ntool.ForknameFlag,
- t8ntool.ChainIDFlag,
- t8ntool.RewardFlag,
- },
-}
-
-var transactionCommand = &cli.Command{
- Name: "transaction",
- Aliases: []string{"t9n"},
- Usage: "Performs transaction validation",
- Action: t8ntool.Transaction,
- Flags: []cli.Flag{
- t8ntool.InputTxsFlag,
- t8ntool.ChainIDFlag,
- t8ntool.ForknameFlag,
- },
-}
-
-var blockBuilderCommand = &cli.Command{
- Name: "block-builder",
- Aliases: []string{"b11r"},
- Usage: "Builds a block",
- Action: t8ntool.BuildBlock,
- Flags: []cli.Flag{
- t8ntool.OutputBasedir,
- t8ntool.OutputBlockFlag,
- t8ntool.InputHeaderFlag,
- t8ntool.InputOmmersFlag,
- t8ntool.InputWithdrawalsFlag,
- t8ntool.InputTxsRlpFlag,
- t8ntool.SealCliqueFlag,
- },
-}
-
-// vmFlags contains flags related to running the EVM.
-var vmFlags = []cli.Flag{
- CodeFlag,
- CodeFileFlag,
- CreateFlag,
- GasFlag,
- PriceFlag,
- ValueFlag,
- InputFlag,
- InputFileFlag,
- GenesisFlag,
- SenderFlag,
- ReceiverFlag,
-}
-
-// traceFlags contains flags that configure tracing output.
-var traceFlags = []cli.Flag{
- BenchFlag,
- DebugFlag,
- DumpFlag,
- MachineFlag,
- StatDumpFlag,
- DisableMemoryFlag,
- DisableStackFlag,
- DisableStorageFlag,
- DisableReturnDataFlag,
-}
-
-var app = flags.NewApp("the evm command line interface")
-
-func init() {
- app.Flags = flags.Merge(vmFlags, traceFlags, debug.Flags)
- app.Commands = []*cli.Command{
- compileCommand,
- disasmCommand,
- runCommand,
- blockTestCommand,
- stateTestCommand,
- stateTransitionCommand,
- transactionCommand,
- blockBuilderCommand,
- }
- app.Before = func(ctx *cli.Context) error {
- flags.MigrateGlobalFlags(ctx)
- return debug.Setup(ctx)
- }
- app.After = func(ctx *cli.Context) error {
- debug.Exit()
- return nil
- }
-}
-
-func main() {
- if err := app.Run(os.Args); err != nil {
- code := 1
- if ec, ok := err.(*t8ntool.NumberedError); ok {
- code = ec.ExitCode()
- }
- fmt.Fprintln(os.Stderr, err)
- os.Exit(code)
- }
-}
diff --git a/cmd/evm/runner.go b/cmd/evm/runner.go
deleted file mode 100644
index f3ffb3ed9f..0000000000
--- a/cmd/evm/runner.go
+++ /dev/null
@@ -1,302 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "bytes"
- "encoding/json"
- "fmt"
- "io"
- "math/big"
- "os"
- goruntime "runtime"
- "testing"
- "time"
-
- "github.com/ethereum/go-ethereum/cmd/evm/internal/compiler"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/core/vm/runtime"
- "github.com/ethereum/go-ethereum/eth/tracers/logger"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/ethereum/go-ethereum/trie/triedb/hashdb"
- "github.com/urfave/cli/v2"
-)
-
-var runCommand = &cli.Command{
- Action: runCmd,
- Name: "run",
- Usage: "Run arbitrary evm binary",
- ArgsUsage: "",
- Description: `The run command runs arbitrary EVM code.`,
- Flags: flags.Merge(vmFlags, traceFlags),
-}
-
-// readGenesis will read the given JSON format genesis file and return
-// the initialized Genesis structure
-func readGenesis(genesisPath string) *core.Genesis {
- // Make sure we have a valid genesis JSON
- //genesisPath := ctx.Args().First()
- if len(genesisPath) == 0 {
- utils.Fatalf("Must supply path to genesis JSON file")
- }
- file, err := os.Open(genesisPath)
- if err != nil {
- utils.Fatalf("Failed to read genesis file: %v", err)
- }
- defer file.Close()
-
- genesis := new(core.Genesis)
- if err := json.NewDecoder(file).Decode(genesis); err != nil {
- utils.Fatalf("invalid genesis file: %v", err)
- }
- return genesis
-}
-
-type execStats struct {
- time time.Duration // The execution time.
- allocs int64 // The number of heap allocations during execution.
- bytesAllocated int64 // The cumulative number of bytes allocated during execution.
-}
-
-func timedExec(bench bool, execFunc func() ([]byte, uint64, error)) (output []byte, gasLeft uint64, stats execStats, err error) {
- if bench {
- result := testing.Benchmark(func(b *testing.B) {
- for i := 0; i < b.N; i++ {
- output, gasLeft, err = execFunc()
- }
- })
-
- // Get the average execution time from the benchmarking result.
- // There are other useful stats here that could be reported.
- stats.time = time.Duration(result.NsPerOp())
- stats.allocs = result.AllocsPerOp()
- stats.bytesAllocated = result.AllocedBytesPerOp()
- } else {
- var memStatsBefore, memStatsAfter goruntime.MemStats
- goruntime.ReadMemStats(&memStatsBefore)
- startTime := time.Now()
- output, gasLeft, err = execFunc()
- stats.time = time.Since(startTime)
- goruntime.ReadMemStats(&memStatsAfter)
- stats.allocs = int64(memStatsAfter.Mallocs - memStatsBefore.Mallocs)
- stats.bytesAllocated = int64(memStatsAfter.TotalAlloc - memStatsBefore.TotalAlloc)
- }
-
- return output, gasLeft, stats, err
-}
-
-func runCmd(ctx *cli.Context) error {
- logconfig := &logger.Config{
- EnableMemory: !ctx.Bool(DisableMemoryFlag.Name),
- DisableStack: ctx.Bool(DisableStackFlag.Name),
- DisableStorage: ctx.Bool(DisableStorageFlag.Name),
- EnableReturnData: !ctx.Bool(DisableReturnDataFlag.Name),
- Debug: ctx.Bool(DebugFlag.Name),
- }
-
- var (
- tracer vm.EVMLogger
- debugLogger *logger.StructLogger
- statedb *state.StateDB
- chainConfig *params.ChainConfig
- sender = common.BytesToAddress([]byte("sender"))
- receiver = common.BytesToAddress([]byte("receiver"))
- preimages = ctx.Bool(DumpFlag.Name)
- blobHashes []common.Hash // TODO (MariusVanDerWijden) implement blob hashes in state tests
- blobBaseFee = new(big.Int) // TODO (MariusVanDerWijden) implement blob fee in state tests
- )
- if ctx.Bool(MachineFlag.Name) {
- tracer = logger.NewJSONLogger(logconfig, os.Stdout)
- } else if ctx.Bool(DebugFlag.Name) {
- debugLogger = logger.NewStructLogger(logconfig)
- tracer = debugLogger
- } else {
- debugLogger = logger.NewStructLogger(logconfig)
- }
-
- initialGas := ctx.Uint64(GasFlag.Name)
- genesisConfig := new(core.Genesis)
- genesisConfig.GasLimit = initialGas
- if ctx.String(GenesisFlag.Name) != "" {
- genesisConfig = readGenesis(ctx.String(GenesisFlag.Name))
- if genesisConfig.GasLimit != 0 {
- initialGas = genesisConfig.GasLimit
- }
- } else {
- genesisConfig.Config = params.AllDevChainProtocolChanges
- }
-
- db := rawdb.NewMemoryDatabase()
- triedb := trie.NewDatabase(db, &trie.Config{
- Preimages: preimages,
- HashDB: hashdb.Defaults,
- })
- defer triedb.Close()
- genesis := genesisConfig.MustCommit(db, triedb)
- sdb := state.NewDatabaseWithNodeDB(db, triedb)
- statedb, _ = state.New(genesis.Root(), sdb, nil)
- chainConfig = genesisConfig.Config
-
- if ctx.String(SenderFlag.Name) != "" {
- sender = common.HexToAddress(ctx.String(SenderFlag.Name))
- }
- statedb.CreateAccount(sender)
-
- if ctx.String(ReceiverFlag.Name) != "" {
- receiver = common.HexToAddress(ctx.String(ReceiverFlag.Name))
- }
-
- var code []byte
- codeFileFlag := ctx.String(CodeFileFlag.Name)
- codeFlag := ctx.String(CodeFlag.Name)
-
- // The '--code' or '--codefile' flag overrides code in state
- if codeFileFlag != "" || codeFlag != "" {
- var hexcode []byte
- if codeFileFlag != "" {
- var err error
- // If - is specified, it means that code comes from stdin
- if codeFileFlag == "-" {
- //Try reading from stdin
- if hexcode, err = io.ReadAll(os.Stdin); err != nil {
- fmt.Printf("Could not load code from stdin: %v\n", err)
- os.Exit(1)
- }
- } else {
- // Codefile with hex assembly
- if hexcode, err = os.ReadFile(codeFileFlag); err != nil {
- fmt.Printf("Could not load code from file: %v\n", err)
- os.Exit(1)
- }
- }
- } else {
- hexcode = []byte(codeFlag)
- }
- hexcode = bytes.TrimSpace(hexcode)
- if len(hexcode)%2 != 0 {
- fmt.Printf("Invalid input length for hex data (%d)\n", len(hexcode))
- os.Exit(1)
- }
- code = common.FromHex(string(hexcode))
- } else if fn := ctx.Args().First(); len(fn) > 0 {
- // EASM-file to compile
- src, err := os.ReadFile(fn)
- if err != nil {
- return err
- }
- bin, err := compiler.Compile(fn, src, false)
- if err != nil {
- return err
- }
- code = common.Hex2Bytes(bin)
- }
- runtimeConfig := runtime.Config{
- Origin: sender,
- State: statedb,
- GasLimit: initialGas,
- GasPrice: flags.GlobalBig(ctx, PriceFlag.Name),
- Value: flags.GlobalBig(ctx, ValueFlag.Name),
- Difficulty: genesisConfig.Difficulty,
- Time: genesisConfig.Timestamp,
- Coinbase: genesisConfig.Coinbase,
- BlockNumber: new(big.Int).SetUint64(genesisConfig.Number),
- BlobHashes: blobHashes,
- BlobBaseFee: blobBaseFee,
- EVMConfig: vm.Config{
- Tracer: tracer,
- },
- }
-
- if chainConfig != nil {
- runtimeConfig.ChainConfig = chainConfig
- } else {
- runtimeConfig.ChainConfig = params.AllEthashProtocolChanges
- }
-
- var hexInput []byte
- if inputFileFlag := ctx.String(InputFileFlag.Name); inputFileFlag != "" {
- var err error
- if hexInput, err = os.ReadFile(inputFileFlag); err != nil {
- fmt.Printf("could not load input from file: %v\n", err)
- os.Exit(1)
- }
- } else {
- hexInput = []byte(ctx.String(InputFlag.Name))
- }
- hexInput = bytes.TrimSpace(hexInput)
- if len(hexInput)%2 != 0 {
- fmt.Println("input length must be even")
- os.Exit(1)
- }
- input := common.FromHex(string(hexInput))
-
- var execFunc func() ([]byte, uint64, error)
- if ctx.Bool(CreateFlag.Name) {
- input = append(code, input...)
- execFunc = func() ([]byte, uint64, error) {
- output, _, gasLeft, err := runtime.Create(input, &runtimeConfig)
- return output, gasLeft, err
- }
- } else {
- if len(code) > 0 {
- statedb.SetCode(receiver, code)
- }
- execFunc = func() ([]byte, uint64, error) {
- return runtime.Call(receiver, input, &runtimeConfig)
- }
- }
-
- bench := ctx.Bool(BenchFlag.Name)
- output, leftOverGas, stats, err := timedExec(bench, execFunc)
-
- if ctx.Bool(DumpFlag.Name) {
- statedb.Commit(genesisConfig.Number, true)
- fmt.Println(string(statedb.Dump(nil)))
- }
-
- if ctx.Bool(DebugFlag.Name) {
- if debugLogger != nil {
- fmt.Fprintln(os.Stderr, "#### TRACE ####")
- logger.WriteTrace(os.Stderr, debugLogger.StructLogs())
- }
- fmt.Fprintln(os.Stderr, "#### LOGS ####")
- logger.WriteLogs(os.Stderr, statedb.Logs())
- }
-
- if bench || ctx.Bool(StatDumpFlag.Name) {
- fmt.Fprintf(os.Stderr, `EVM gas used: %d
-execution time: %v
-allocations: %d
-allocated bytes: %d
-`, initialGas-leftOverGas, stats.time, stats.allocs, stats.bytesAllocated)
- }
- if tracer == nil {
- fmt.Printf("%#x\n", output)
- if err != nil {
- fmt.Printf(" error: %v\n", err)
- }
- }
-
- return nil
-}
diff --git a/cmd/evm/staterunner.go b/cmd/evm/staterunner.go
deleted file mode 100644
index 6e751b630f..0000000000
--- a/cmd/evm/staterunner.go
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "bufio"
- "encoding/json"
- "fmt"
- "os"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/state/snapshot"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/eth/tracers/logger"
- "github.com/ethereum/go-ethereum/tests"
- "github.com/urfave/cli/v2"
-)
-
-var stateTestCommand = &cli.Command{
- Action: stateTestCmd,
- Name: "statetest",
- Usage: "Executes the given state tests. Filenames can be fed via standard input (batch mode) or as an argument (one-off execution).",
- ArgsUsage: "",
-}
-
-// StatetestResult contains the execution status after running a state test, any
-// error that might have occurred and a dump of the final state if requested.
-type StatetestResult struct {
- Name string `json:"name"`
- Pass bool `json:"pass"`
- Root *common.Hash `json:"stateRoot,omitempty"`
- Fork string `json:"fork"`
- Error string `json:"error,omitempty"`
- State *state.Dump `json:"state,omitempty"`
-}
-
-func stateTestCmd(ctx *cli.Context) error {
- // Configure the EVM logger
- config := &logger.Config{
- EnableMemory: !ctx.Bool(DisableMemoryFlag.Name),
- DisableStack: ctx.Bool(DisableStackFlag.Name),
- DisableStorage: ctx.Bool(DisableStorageFlag.Name),
- EnableReturnData: !ctx.Bool(DisableReturnDataFlag.Name),
- }
- var cfg vm.Config
- switch {
- case ctx.Bool(MachineFlag.Name):
- cfg.Tracer = logger.NewJSONLogger(config, os.Stderr)
-
- case ctx.Bool(DebugFlag.Name):
- cfg.Tracer = logger.NewStructLogger(config)
- }
- // Load the test content from the input file
- if len(ctx.Args().First()) != 0 {
- return runStateTest(ctx.Args().First(), cfg, ctx.Bool(MachineFlag.Name), ctx.Bool(DumpFlag.Name))
- }
- // Read filenames from stdin and execute back-to-back
- scanner := bufio.NewScanner(os.Stdin)
- for scanner.Scan() {
- fname := scanner.Text()
- if len(fname) == 0 {
- return nil
- }
- if err := runStateTest(fname, cfg, ctx.Bool(MachineFlag.Name), ctx.Bool(DumpFlag.Name)); err != nil {
- return err
- }
- }
- return nil
-}
-
-// runStateTest loads the state-test given by fname, and executes the test.
-func runStateTest(fname string, cfg vm.Config, jsonOut, dump bool) error {
- src, err := os.ReadFile(fname)
- if err != nil {
- return err
- }
- var tests map[string]tests.StateTest
- if err := json.Unmarshal(src, &tests); err != nil {
- return err
- }
- // Iterate over all the tests, run them and aggregate the results
- results := make([]StatetestResult, 0, len(tests))
- for key, test := range tests {
- for _, st := range test.Subtests() {
- // Run the test and aggregate the result
- result := &StatetestResult{Name: key, Fork: st.Fork, Pass: true}
- test.Run(st, cfg, false, rawdb.HashScheme, func(err error, snaps *snapshot.Tree, statedb *state.StateDB) {
- var root common.Hash
- if statedb != nil {
- root = statedb.IntermediateRoot(false)
- result.Root = &root
- if jsonOut {
- fmt.Fprintf(os.Stderr, "{\"stateRoot\": \"%#x\"}\n", root)
- }
- if dump { // Dump any state to aid debugging
- cpy, _ := state.New(root, statedb.Database(), nil)
- dump := cpy.RawDump(nil)
- result.State = &dump
- }
- }
- if err != nil {
- // Test failed, mark as so
- result.Pass, result.Error = false, err.Error()
- }
- })
- results = append(results, *result)
- }
- }
- out, _ := json.MarshalIndent(results, "", " ")
- fmt.Println(string(out))
- return nil
-}
diff --git a/cmd/evm/t8n_test.go b/cmd/evm/t8n_test.go
deleted file mode 100644
index ad36540de5..0000000000
--- a/cmd/evm/t8n_test.go
+++ /dev/null
@@ -1,573 +0,0 @@
-// Copyright 2021 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "encoding/json"
- "fmt"
- "os"
- "reflect"
- "strings"
- "testing"
-
- "github.com/ethereum/go-ethereum/cmd/evm/internal/t8ntool"
- "github.com/ethereum/go-ethereum/internal/cmdtest"
- "github.com/ethereum/go-ethereum/internal/reexec"
-)
-
-func TestMain(m *testing.M) {
- // Run the app if we've been exec'd as "ethkey-test" in runEthkey.
- reexec.Register("evm-test", func() {
- if err := app.Run(os.Args); err != nil {
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
- }
- os.Exit(0)
- })
- // check if we have been reexec'd
- if reexec.Init() {
- return
- }
- os.Exit(m.Run())
-}
-
-type testT8n struct {
- *cmdtest.TestCmd
-}
-
-type t8nInput struct {
- inAlloc string
- inTxs string
- inEnv string
- stFork string
- stReward string
-}
-
-func (args *t8nInput) get(base string) []string {
- var out []string
- if opt := args.inAlloc; opt != "" {
- out = append(out, "--input.alloc")
- out = append(out, fmt.Sprintf("%v/%v", base, opt))
- }
- if opt := args.inTxs; opt != "" {
- out = append(out, "--input.txs")
- out = append(out, fmt.Sprintf("%v/%v", base, opt))
- }
- if opt := args.inEnv; opt != "" {
- out = append(out, "--input.env")
- out = append(out, fmt.Sprintf("%v/%v", base, opt))
- }
- if opt := args.stFork; opt != "" {
- out = append(out, "--state.fork", opt)
- }
- if opt := args.stReward; opt != "" {
- out = append(out, "--state.reward", opt)
- }
- return out
-}
-
-type t8nOutput struct {
- alloc bool
- result bool
- body bool
-}
-
-func (args *t8nOutput) get() (out []string) {
- if args.body {
- out = append(out, "--output.body", "stdout")
- } else {
- out = append(out, "--output.body", "") // empty means ignore
- }
- if args.result {
- out = append(out, "--output.result", "stdout")
- } else {
- out = append(out, "--output.result", "")
- }
- if args.alloc {
- out = append(out, "--output.alloc", "stdout")
- } else {
- out = append(out, "--output.alloc", "")
- }
- return out
-}
-
-func TestT8n(t *testing.T) {
- t.Parallel()
- tt := new(testT8n)
- tt.TestCmd = cmdtest.NewTestCmd(t, tt)
- for i, tc := range []struct {
- base string
- input t8nInput
- output t8nOutput
- expExitCode int
- expOut string
- }{
- { // Test exit (3) on bad config
- base: "./testdata/1",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "Frontier+1346", "",
- },
- output: t8nOutput{alloc: true, result: true},
- expExitCode: 3,
- },
- {
- base: "./testdata/1",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "Byzantium", "",
- },
- output: t8nOutput{alloc: true, result: true},
- expOut: "exp.json",
- },
- { // blockhash test
- base: "./testdata/3",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "Berlin", "",
- },
- output: t8nOutput{alloc: true, result: true},
- expOut: "exp.json",
- },
- { // missing blockhash test
- base: "./testdata/4",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "Berlin", "",
- },
- output: t8nOutput{alloc: true, result: true},
- expExitCode: 4,
- },
- { // Uncle test
- base: "./testdata/5",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "Byzantium", "0x80",
- },
- output: t8nOutput{alloc: true, result: true},
- expOut: "exp.json",
- },
- { // Sign json transactions
- base: "./testdata/13",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "London", "",
- },
- output: t8nOutput{body: true},
- expOut: "exp.json",
- },
- { // Already signed transactions
- base: "./testdata/13",
- input: t8nInput{
- "alloc.json", "signed_txs.rlp", "env.json", "London", "",
- },
- output: t8nOutput{result: true},
- expOut: "exp2.json",
- },
- { // Difficulty calculation - no uncles
- base: "./testdata/14",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "London", "",
- },
- output: t8nOutput{result: true},
- expOut: "exp.json",
- },
- { // Difficulty calculation - with uncles
- base: "./testdata/14",
- input: t8nInput{
- "alloc.json", "txs.json", "env.uncles.json", "London", "",
- },
- output: t8nOutput{result: true},
- expOut: "exp2.json",
- },
- { // Difficulty calculation - with ommers + Berlin
- base: "./testdata/14",
- input: t8nInput{
- "alloc.json", "txs.json", "env.uncles.json", "Berlin", "",
- },
- output: t8nOutput{result: true},
- expOut: "exp_berlin.json",
- },
- { // Difficulty calculation on arrow glacier
- base: "./testdata/19",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "London", "",
- },
- output: t8nOutput{result: true},
- expOut: "exp_london.json",
- },
- { // Difficulty calculation on arrow glacier
- base: "./testdata/19",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "ArrowGlacier", "",
- },
- output: t8nOutput{result: true},
- expOut: "exp_arrowglacier.json",
- },
- { // Difficulty calculation on gray glacier
- base: "./testdata/19",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "GrayGlacier", "",
- },
- output: t8nOutput{result: true},
- expOut: "exp_grayglacier.json",
- },
- { // Sign unprotected (pre-EIP155) transaction
- base: "./testdata/23",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "Berlin", "",
- },
- output: t8nOutput{result: true},
- expOut: "exp.json",
- },
- { // Test post-merge transition
- base: "./testdata/24",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "Merge", "",
- },
- output: t8nOutput{alloc: true, result: true},
- expOut: "exp.json",
- },
- { // Test post-merge transition where input is missing random
- base: "./testdata/24",
- input: t8nInput{
- "alloc.json", "txs.json", "env-missingrandom.json", "Merge", "",
- },
- output: t8nOutput{alloc: false, result: false},
- expExitCode: 3,
- },
- { // Test base fee calculation
- base: "./testdata/25",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "Merge", "",
- },
- output: t8nOutput{alloc: true, result: true},
- expOut: "exp.json",
- },
- { // Test withdrawals transition
- base: "./testdata/26",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "Shanghai", "",
- },
- output: t8nOutput{alloc: true, result: true},
- expOut: "exp.json",
- },
- { // Cancun tests
- base: "./testdata/28",
- input: t8nInput{
- "alloc.json", "txs.rlp", "env.json", "Cancun", "",
- },
- output: t8nOutput{alloc: true, result: true},
- expOut: "exp.json",
- },
- { // More cancun tests
- base: "./testdata/29",
- input: t8nInput{
- "alloc.json", "txs.json", "env.json", "Cancun", "",
- },
- output: t8nOutput{alloc: true, result: true},
- expOut: "exp.json",
- },
- { // More cancun test, plus example of rlp-transaction that cannot be decoded properly
- base: "./testdata/30",
- input: t8nInput{
- "alloc.json", "txs_more.rlp", "env.json", "Cancun", "",
- },
- output: t8nOutput{alloc: true, result: true},
- expOut: "exp.json",
- },
- } {
- args := []string{"t8n"}
- args = append(args, tc.output.get()...)
- args = append(args, tc.input.get(tc.base)...)
- var qArgs []string // quoted args for debugging purposes
- for _, arg := range args {
- if len(arg) == 0 {
- qArgs = append(qArgs, `""`)
- } else {
- qArgs = append(qArgs, arg)
- }
- }
- tt.Logf("args: %v\n", strings.Join(qArgs, " "))
- tt.Run("evm-test", args...)
- // Compare the expected output, if provided
- if tc.expOut != "" {
- file := fmt.Sprintf("%v/%v", tc.base, tc.expOut)
- want, err := os.ReadFile(file)
- if err != nil {
- t.Fatalf("test %d: could not read expected output: %v", i, err)
- }
- have := tt.Output()
- ok, err := cmpJson(have, want)
- switch {
- case err != nil:
- t.Fatalf("test %d, file %v: json parsing failed: %v", i, file, err)
- case !ok:
- t.Fatalf("test %d, file %v: output wrong, have \n%v\nwant\n%v\n", i, file, string(have), string(want))
- }
- }
- tt.WaitExit()
- if have, want := tt.ExitStatus(), tc.expExitCode; have != want {
- t.Fatalf("test %d: wrong exit code, have %d, want %d", i, have, want)
- }
- }
-}
-
-type t9nInput struct {
- inTxs string
- stFork string
-}
-
-func (args *t9nInput) get(base string) []string {
- var out []string
- if opt := args.inTxs; opt != "" {
- out = append(out, "--input.txs")
- out = append(out, fmt.Sprintf("%v/%v", base, opt))
- }
- if opt := args.stFork; opt != "" {
- out = append(out, "--state.fork", opt)
- }
- return out
-}
-
-func TestT9n(t *testing.T) {
- t.Parallel()
- tt := new(testT8n)
- tt.TestCmd = cmdtest.NewTestCmd(t, tt)
- for i, tc := range []struct {
- base string
- input t9nInput
- expExitCode int
- expOut string
- }{
- { // London txs on homestead
- base: "./testdata/15",
- input: t9nInput{
- inTxs: "signed_txs.rlp",
- stFork: "Homestead",
- },
- expOut: "exp.json",
- },
- { // London txs on London
- base: "./testdata/15",
- input: t9nInput{
- inTxs: "signed_txs.rlp",
- stFork: "London",
- },
- expOut: "exp2.json",
- },
- { // An RLP list (a blockheader really)
- base: "./testdata/15",
- input: t9nInput{
- inTxs: "blockheader.rlp",
- stFork: "London",
- },
- expOut: "exp3.json",
- },
- { // Transactions with too low gas
- base: "./testdata/16",
- input: t9nInput{
- inTxs: "signed_txs.rlp",
- stFork: "London",
- },
- expOut: "exp.json",
- },
- { // Transactions with value exceeding 256 bits
- base: "./testdata/17",
- input: t9nInput{
- inTxs: "signed_txs.rlp",
- stFork: "London",
- },
- expOut: "exp.json",
- },
- { // Invalid RLP
- base: "./testdata/18",
- input: t9nInput{
- inTxs: "invalid.rlp",
- stFork: "London",
- },
- expExitCode: t8ntool.ErrorIO,
- },
- } {
- args := []string{"t9n"}
- args = append(args, tc.input.get(tc.base)...)
-
- tt.Run("evm-test", args...)
- tt.Logf("args:\n go run . %v\n", strings.Join(args, " "))
- // Compare the expected output, if provided
- if tc.expOut != "" {
- want, err := os.ReadFile(fmt.Sprintf("%v/%v", tc.base, tc.expOut))
- if err != nil {
- t.Fatalf("test %d: could not read expected output: %v", i, err)
- }
- have := tt.Output()
- ok, err := cmpJson(have, want)
- switch {
- case err != nil:
- t.Logf(string(have))
- t.Fatalf("test %d, json parsing failed: %v", i, err)
- case !ok:
- t.Fatalf("test %d: output wrong, have \n%v\nwant\n%v\n", i, string(have), string(want))
- }
- }
- tt.WaitExit()
- if have, want := tt.ExitStatus(), tc.expExitCode; have != want {
- t.Fatalf("test %d: wrong exit code, have %d, want %d", i, have, want)
- }
- }
-}
-
-type b11rInput struct {
- inEnv string
- inOmmersRlp string
- inWithdrawals string
- inTxsRlp string
- inClique string
- ethash bool
- ethashMode string
- ethashDir string
-}
-
-func (args *b11rInput) get(base string) []string {
- var out []string
- if opt := args.inEnv; opt != "" {
- out = append(out, "--input.header")
- out = append(out, fmt.Sprintf("%v/%v", base, opt))
- }
- if opt := args.inOmmersRlp; opt != "" {
- out = append(out, "--input.ommers")
- out = append(out, fmt.Sprintf("%v/%v", base, opt))
- }
- if opt := args.inWithdrawals; opt != "" {
- out = append(out, "--input.withdrawals")
- out = append(out, fmt.Sprintf("%v/%v", base, opt))
- }
- if opt := args.inTxsRlp; opt != "" {
- out = append(out, "--input.txs")
- out = append(out, fmt.Sprintf("%v/%v", base, opt))
- }
- if opt := args.inClique; opt != "" {
- out = append(out, "--seal.clique")
- out = append(out, fmt.Sprintf("%v/%v", base, opt))
- }
- if args.ethash {
- out = append(out, "--seal.ethash")
- }
- if opt := args.ethashMode; opt != "" {
- out = append(out, "--seal.ethash.mode")
- out = append(out, fmt.Sprintf("%v/%v", base, opt))
- }
- if opt := args.ethashDir; opt != "" {
- out = append(out, "--seal.ethash.dir")
- out = append(out, fmt.Sprintf("%v/%v", base, opt))
- }
- out = append(out, "--output.block")
- out = append(out, "stdout")
- return out
-}
-
-func TestB11r(t *testing.T) {
- t.Parallel()
- tt := new(testT8n)
- tt.TestCmd = cmdtest.NewTestCmd(t, tt)
- for i, tc := range []struct {
- base string
- input b11rInput
- expExitCode int
- expOut string
- }{
- { // unsealed block
- base: "./testdata/20",
- input: b11rInput{
- inEnv: "header.json",
- inOmmersRlp: "ommers.json",
- inTxsRlp: "txs.rlp",
- },
- expOut: "exp.json",
- },
- { // ethash test seal
- base: "./testdata/21",
- input: b11rInput{
- inEnv: "header.json",
- inOmmersRlp: "ommers.json",
- inTxsRlp: "txs.rlp",
- },
- expOut: "exp.json",
- },
- { // clique test seal
- base: "./testdata/21",
- input: b11rInput{
- inEnv: "header.json",
- inOmmersRlp: "ommers.json",
- inTxsRlp: "txs.rlp",
- inClique: "clique.json",
- },
- expOut: "exp-clique.json",
- },
- { // block with ommers
- base: "./testdata/22",
- input: b11rInput{
- inEnv: "header.json",
- inOmmersRlp: "ommers.json",
- inTxsRlp: "txs.rlp",
- },
- expOut: "exp.json",
- },
- { // block with withdrawals
- base: "./testdata/27",
- input: b11rInput{
- inEnv: "header.json",
- inOmmersRlp: "ommers.json",
- inWithdrawals: "withdrawals.json",
- inTxsRlp: "txs.rlp",
- },
- expOut: "exp.json",
- },
- } {
- args := []string{"b11r"}
- args = append(args, tc.input.get(tc.base)...)
-
- tt.Run("evm-test", args...)
- tt.Logf("args:\n go run . %v\n", strings.Join(args, " "))
- // Compare the expected output, if provided
- if tc.expOut != "" {
- want, err := os.ReadFile(fmt.Sprintf("%v/%v", tc.base, tc.expOut))
- if err != nil {
- t.Fatalf("test %d: could not read expected output: %v", i, err)
- }
- have := tt.Output()
- ok, err := cmpJson(have, want)
- switch {
- case err != nil:
- t.Logf(string(have))
- t.Fatalf("test %d, json parsing failed: %v", i, err)
- case !ok:
- t.Fatalf("test %d: output wrong, have \n%v\nwant\n%v\n", i, string(have), string(want))
- }
- }
- tt.WaitExit()
- if have, want := tt.ExitStatus(), tc.expExitCode; have != want {
- t.Fatalf("test %d: wrong exit code, have %d, want %d", i, have, want)
- }
- }
-}
-
-// cmpJson compares the JSON in two byte slices.
-func cmpJson(a, b []byte) (bool, error) {
- var j, j2 interface{}
- if err := json.Unmarshal(a, &j); err != nil {
- return false, err
- }
- if err := json.Unmarshal(b, &j2); err != nil {
- return false, err
- }
- return reflect.DeepEqual(j2, j), nil
-}
diff --git a/cmd/evm/testdata/1/alloc.json b/cmd/evm/testdata/1/alloc.json
deleted file mode 100644
index cef1a25ff0..0000000000
--- a/cmd/evm/testdata/1/alloc.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x5ffd4878be161d74",
- "code": "0x",
- "nonce": "0xac",
- "storage": {}
- },
- "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192":{
- "balance": "0xfeedbead",
- "nonce" : "0x00"
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/1/env.json b/cmd/evm/testdata/1/env.json
deleted file mode 100644
index dd60abd205..0000000000
--- a/cmd/evm/testdata/1/env.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "currentDifficulty": "0x20000",
- "currentGasLimit": "0x750a163df65e8a",
- "currentNumber": "1",
- "currentTimestamp": "1000"
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/1/exp.json b/cmd/evm/testdata/1/exp.json
deleted file mode 100644
index d1351e5b76..0000000000
--- a/cmd/evm/testdata/1/exp.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "alloc": {
- "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192": {
- "balance": "0xfeed1a9d",
- "nonce": "0x1"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x5ffd4878be161d74",
- "nonce": "0xac"
- },
- "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0xa410"
- }
- },
- "result": {
- "stateRoot": "0x84208a19bc2b46ada7445180c1db162be5b39b9abc8c0a54b05d32943eae4e13",
- "txRoot": "0xc4761fd7b87ff2364c7c60b6c5c8d02e522e815328aaea3f20e3b7b7ef52c42d",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [
- {
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0x5208",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x5208",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x0"
- }
- ],
- "rejected": [
- {
- "index": 1,
- "error": "nonce too low: address 0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192, tx: 0 state: 1"
- }
- ],
- "currentDifficulty": "0x20000",
- "gasUsed": "0x5208"
- }
-}
diff --git a/cmd/evm/testdata/1/txs.json b/cmd/evm/testdata/1/txs.json
deleted file mode 100644
index 50b31ff31b..0000000000
--- a/cmd/evm/testdata/1/txs.json
+++ /dev/null
@@ -1,26 +0,0 @@
-[
- {
- "gas": "0x5208",
- "gasPrice": "0x2",
- "hash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673",
- "input": "0x",
- "nonce": "0x0",
- "r": "0x9500e8ba27d3c33ca7764e107410f44cbd8c19794bde214d694683a7aa998cdb",
- "s": "0x7235ae07e4bd6e0206d102b1f8979d6adab280466b6a82d2208ee08951f1f600",
- "to": "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192",
- "v": "0x1b",
- "value": "0x1"
- },
- {
- "gas": "0x5208",
- "gasPrice": "0x2",
- "hash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673",
- "input": "0x",
- "nonce": "0x0",
- "r": "0x9500e8ba27d3c33ca7764e107410f44cbd8c19794bde214d694683a7aa998cdb",
- "s": "0x7235ae07e4bd6e0206d102b1f8979d6adab280466b6a82d2208ee08951f1f600",
- "to": "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192",
- "v": "0x1b",
- "value": "0x1"
- }
-]
diff --git a/cmd/evm/testdata/10/alloc.json b/cmd/evm/testdata/10/alloc.json
deleted file mode 100644
index 6e98e7513c..0000000000
--- a/cmd/evm/testdata/10/alloc.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "0x1111111111111111111111111111111111111111" : {
- "balance" : "0x010000000000",
- "code" : "0xfe",
- "nonce" : "0x01",
- "storage" : {
- }
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x010000000000",
- "code" : "0x",
- "nonce" : "0x01",
- "storage" : {
- }
- },
- "0xd02d72e067e77158444ef2020ff2d325f929b363" : {
- "balance" : "0x01000000000000",
- "code" : "0x",
- "nonce" : "0x01",
- "storage" : {
- }
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/10/env.json b/cmd/evm/testdata/10/env.json
deleted file mode 100644
index 3a82d46a77..0000000000
--- a/cmd/evm/testdata/10/env.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "currentDifficulty" : "0x020000",
- "currentNumber" : "0x01",
- "currentTimestamp" : "0x079e",
- "previousHash" : "0xcb23ee65a163121f640673b41788ee94633941405f95009999b502eedfbbfd4f",
- "currentGasLimit" : "0x40000000",
- "currentBaseFee" : "0x036b",
- "blockHashes" : {
- "0" : "0xcb23ee65a163121f640673b41788ee94633941405f95009999b502eedfbbfd4f"
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/10/readme.md b/cmd/evm/testdata/10/readme.md
deleted file mode 100644
index afa3787238..0000000000
--- a/cmd/evm/testdata/10/readme.md
+++ /dev/null
@@ -1,85 +0,0 @@
-## EIP-1559 testing
-
-This test contains testcases for EIP-1559, which were reported by Ori as misbehaving.
-
-```
-[user@work evm]$ dir=./testdata/10 && ./evm t8n --state.fork=London --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --output.alloc=stdout --output.result=stdout 2>&1
-INFO [05-09|22:11:59.436] rejected tx index=3 hash=db07bf..ede1e8 from=0xd02d72E067e77158444ef2020Ff2d325f929B363 error="gas limit reached"
-```
-Output:
-```json
-{
- "alloc": {
- "0x1111111111111111111111111111111111111111": {
- "code": "0xfe",
- "balance": "0x10000000000",
- "nonce": "0x1"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x10000000000",
- "nonce": "0x1"
- },
- "0xd02d72e067e77158444ef2020ff2d325f929b363": {
- "balance": "0xff5beffffc95",
- "nonce": "0x4"
- }
- },
- "result": {
- "stateRoot": "0xf91a7ec08e4bfea88719aab34deabb000c86902360532b52afa9599d41f2bb8b",
- "txRoot": "0xda925f2306a52fa24c15d5cd212d736ee016415fd8dd0c45fd368de7917d64bb",
- "receiptsRoot": "0x439a25f7fc424c10fb1f89800e4aa1df74156b137239d9ac3eaa7c911c353cd5",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [
- {
- "type": "0x2",
- "root": "0x",
- "status": "0x0",
- "cumulativeGasUsed": "0x10000001",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x88980f6efcc5358d9c359663e7b9414722d430497637340ea056b076bc206701",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x10000001",
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x0"
- },
- {
- "type": "0x2",
- "root": "0x",
- "status": "0x0",
- "cumulativeGasUsed": "0x20000001",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0xd7bf3886f4e2aef74d525ae072c680f3846f550254401b67cbfda4a233757582",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x10000000",
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x1"
- },
- {
- "type": "0x2",
- "root": "0x",
- "status": "0x0",
- "cumulativeGasUsed": "0x30000001",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x50308296760f01f1eeec7500e9e73cad67469249b1f59e9a9f55e6625a4923db",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x10000000",
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x2"
- }
- ],
- "rejected": [
- {
- "index": 3,
- "error": "gas limit reached"
- }
- ],
- "currentDifficulty": "0x20000",
- "gasUsed": "0x30000001",
- "currentBaseFee": "0x36b"
- }
-}
-```
diff --git a/cmd/evm/testdata/10/txs.json b/cmd/evm/testdata/10/txs.json
deleted file mode 100644
index f7c9baa26d..0000000000
--- a/cmd/evm/testdata/10/txs.json
+++ /dev/null
@@ -1,70 +0,0 @@
-[
- {
- "input" : "0x",
- "gas" : "0x10000001",
- "nonce" : "0x1",
- "to" : "0x1111111111111111111111111111111111111111",
- "value" : "0x0",
- "v" : "0x0",
- "r" : "0x7a45f00bcde9036b026cdf1628b023cd8a31a95c62b5e4dbbee2fa7debe668fb",
- "s" : "0x3cc9d6f2cd00a045b0263f2d6dad7d60938d5d13d061af4969f95928aa934d4a",
- "secretKey" : "0x41f6e321b31e72173f8ff2e292359e1862f24fba42fe6f97efaf641980eff298",
- "chainId" : "0x1",
- "type" : "0x2",
- "maxFeePerGas" : "0xfa0",
- "maxPriorityFeePerGas" : "0x0",
- "accessList" : [
- ]
- },
- {
- "input" : "0x",
- "gas" : "0x10000000",
- "nonce" : "0x2",
- "to" : "0x1111111111111111111111111111111111111111",
- "value" : "0x0",
- "v" : "0x0",
- "r" : "0x4c564b94b0281a8210eeec2dd1fe2e16ff1c1903a8c3a1078d735d7f8208b2af",
- "s" : "0x56432b2593e6de95db1cb997b7385217aca03f1615327e231734446b39f266d",
- "secretKey" : "0x41f6e321b31e72173f8ff2e292359e1862f24fba42fe6f97efaf641980eff298",
- "chainId" : "0x1",
- "type" : "0x2",
- "maxFeePerGas" : "0xfa0",
- "maxPriorityFeePerGas" : "0x0",
- "accessList" : [
- ]
- },
- {
- "input" : "0x",
- "gas" : "0x10000000",
- "nonce" : "0x3",
- "to" : "0x1111111111111111111111111111111111111111",
- "value" : "0x0",
- "v" : "0x0",
- "r" : "0x2ed2ef52f924f59d4a21e1f2a50d3b1109303ce5e32334a7ece9b46f4fbc2a57",
- "s" : "0x2980257129cbd3da987226f323d50ba3975a834d165e0681f991b75615605c44",
- "secretKey" : "0x41f6e321b31e72173f8ff2e292359e1862f24fba42fe6f97efaf641980eff298",
- "chainId" : "0x1",
- "type" : "0x2",
- "maxFeePerGas" : "0xfa0",
- "maxPriorityFeePerGas" : "0x0",
- "accessList" : [
- ]
- },
- {
- "input" : "0x",
- "gas" : "0x10000000",
- "nonce" : "0x4",
- "to" : "0x1111111111111111111111111111111111111111",
- "value" : "0x0",
- "v" : "0x0",
- "r" : "0x5df7d7f8f8e15b36fc9f189cacb625040fad10398d08fc90812595922a2c49b2",
- "s" : "0x565fc1803f77a84d754ffe3c5363ab54a8d93a06ea1bb9d4c73c73a282b35917",
- "secretKey" : "0x41f6e321b31e72173f8ff2e292359e1862f24fba42fe6f97efaf641980eff298",
- "chainId" : "0x1",
- "type" : "0x2",
- "maxFeePerGas" : "0xfa0",
- "maxPriorityFeePerGas" : "0x0",
- "accessList" : [
- ]
- }
-]
\ No newline at end of file
diff --git a/cmd/evm/testdata/11/alloc.json b/cmd/evm/testdata/11/alloc.json
deleted file mode 100644
index 86938230fa..0000000000
--- a/cmd/evm/testdata/11/alloc.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
- "balance" : "0x0de0b6b3a7640000",
- "code" : "0x61ffff5060046000f3",
- "nonce" : "0x01",
- "storage" : {
- }
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x0de0b6b3a7640000",
- "code" : "0x",
- "nonce" : "0x00",
- "storage" : {
- "0x00" : "0x00"
- }
- },
- "0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x00",
- "code" : "0x6001600055",
- "nonce" : "0x00",
- "storage" : {
- }
- }
-}
-
diff --git a/cmd/evm/testdata/11/env.json b/cmd/evm/testdata/11/env.json
deleted file mode 100644
index 37dedf0947..0000000000
--- a/cmd/evm/testdata/11/env.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "currentDifficulty" : "0x020000",
- "currentNumber" : "0x01",
- "currentTimestamp" : "0x03e8",
- "previousHash" : "0xfda4419b3660e99f37e536dae1ab081c180136bb38c837a93e93d9aab58553b2",
- "currentGasLimit" : "0x0f4240",
- "blockHashes" : {
- "0" : "0xfda4419b3660e99f37e536dae1ab081c180136bb38c837a93e93d9aab58553b2"
- }
-}
-
diff --git a/cmd/evm/testdata/11/readme.md b/cmd/evm/testdata/11/readme.md
deleted file mode 100644
index d499f8e99f..0000000000
--- a/cmd/evm/testdata/11/readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-## Test missing basefee
-
-In this test, the `currentBaseFee` is missing from the env portion.
-On a live blockchain, the basefee is present in the header, and verified as part of header validation.
-
-In `evm t8n`, we don't have blocks, so it needs to be added in the `env`instead.
-
-When it's missing, an error is expected.
-
-```
-dir=./testdata/11 && ./evm t8n --state.fork=London --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --output.alloc=stdout --output.result=stdout 2>&1>/dev/null
-ERROR(3): EIP-1559 config but missing 'currentBaseFee' in env section
-```
\ No newline at end of file
diff --git a/cmd/evm/testdata/11/txs.json b/cmd/evm/testdata/11/txs.json
deleted file mode 100644
index c54b0a1f5b..0000000000
--- a/cmd/evm/testdata/11/txs.json
+++ /dev/null
@@ -1,14 +0,0 @@
-[
- {
- "input" : "0x38600060013960015160005560006000f3",
- "gas" : "0x61a80",
- "gasPrice" : "0x1",
- "nonce" : "0x0",
- "value" : "0x186a0",
- "v" : "0x1c",
- "r" : "0x2e1391fd903387f1cc2b51df083805fb4bbb0d4710a2cdf4a044d191ff7be63e",
- "s" : "0x7f10a933c42ab74927db02b1db009e923d9d2ab24ac24d63c399f2fe5d9c9b22",
- "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8"
- }
-]
-
diff --git a/cmd/evm/testdata/12/alloc.json b/cmd/evm/testdata/12/alloc.json
deleted file mode 100644
index 3ed96894fb..0000000000
--- a/cmd/evm/testdata/12/alloc.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "84000000",
- "code" : "0x",
- "nonce" : "0x00",
- "storage" : {
- "0x00" : "0x00"
- }
- }
-}
-
diff --git a/cmd/evm/testdata/12/env.json b/cmd/evm/testdata/12/env.json
deleted file mode 100644
index 8ae5465369..0000000000
--- a/cmd/evm/testdata/12/env.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "currentDifficulty" : "0x020000",
- "currentNumber" : "0x01",
- "currentTimestamp" : "0x03e8",
- "previousHash" : "0xfda4419b3660e99f37e536dae1ab081c180136bb38c837a93e93d9aab58553b2",
- "currentGasLimit" : "0x0f4240",
- "currentBaseFee" : "0x20"
-}
-
diff --git a/cmd/evm/testdata/12/readme.md b/cmd/evm/testdata/12/readme.md
deleted file mode 100644
index e3195be48b..0000000000
--- a/cmd/evm/testdata/12/readme.md
+++ /dev/null
@@ -1,43 +0,0 @@
-## Test 1559 balance + gasCap
-
-This test contains an EIP-1559 consensus issue which happened on Ropsten, where
-`geth` did not properly account for the value transfer while doing the check on `max_fee_per_gas * gas_limit`.
-
-Before the issue was fixed, this invocation allowed the transaction to pass into a block:
-```
-dir=./testdata/12 && ./evm t8n --state.fork=London --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --output.alloc=stdout --output.result=stdout
-```
-
-With the fix applied, the result is:
-```
-dir=./testdata/12 && ./evm t8n --state.fork=London --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --output.alloc=stdout --output.result=stdout
-INFO [03-09|10:43:12.649] rejected tx index=0 hash=ccc996..d83435 from=0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B error="insufficient funds for gas * price + value: address 0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B have 84000000 want 84000032"
-INFO [03-09|10:43:12.650] Trie dumping started root=e05f81..6597a5
-INFO [03-09|10:43:12.650] Trie dumping complete accounts=1 elapsed="46.393µs"
-{
- "alloc": {
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x501bd00"
- }
- },
- "result": {
- "stateRoot": "0xe05f81f8244a76503ceec6f88abfcd03047a612a1001217f37d30984536597a5",
- "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [],
- "rejected": [
- {
- "index": 0,
- "error": "insufficient funds for gas * price + value: address 0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B have 84000000 want 84000032"
- }
- ],
- "currentDifficulty": "0x20000",
- "gasUsed": "0x0",
- "currentBaseFee": "0x20"
- }
-}
-```
-
-The transaction is rejected.
\ No newline at end of file
diff --git a/cmd/evm/testdata/12/txs.json b/cmd/evm/testdata/12/txs.json
deleted file mode 100644
index cd683f271c..0000000000
--- a/cmd/evm/testdata/12/txs.json
+++ /dev/null
@@ -1,20 +0,0 @@
-[
- {
- "input" : "0x",
- "gas" : "0x5208",
- "nonce" : "0x0",
- "to" : "0x1111111111111111111111111111111111111111",
- "value" : "0x20",
- "v" : "0x0",
- "r" : "0x0",
- "s" : "0x0",
- "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
- "chainId" : "0x1",
- "type" : "0x2",
- "maxFeePerGas" : "0xfa0",
- "maxPriorityFeePerGas" : "0x20",
- "accessList" : [
- ]
- }
-]
-
diff --git a/cmd/evm/testdata/13/alloc.json b/cmd/evm/testdata/13/alloc.json
deleted file mode 100644
index 6e98e7513c..0000000000
--- a/cmd/evm/testdata/13/alloc.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "0x1111111111111111111111111111111111111111" : {
- "balance" : "0x010000000000",
- "code" : "0xfe",
- "nonce" : "0x01",
- "storage" : {
- }
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x010000000000",
- "code" : "0x",
- "nonce" : "0x01",
- "storage" : {
- }
- },
- "0xd02d72e067e77158444ef2020ff2d325f929b363" : {
- "balance" : "0x01000000000000",
- "code" : "0x",
- "nonce" : "0x01",
- "storage" : {
- }
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/13/env.json b/cmd/evm/testdata/13/env.json
deleted file mode 100644
index 3a82d46a77..0000000000
--- a/cmd/evm/testdata/13/env.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "currentDifficulty" : "0x020000",
- "currentNumber" : "0x01",
- "currentTimestamp" : "0x079e",
- "previousHash" : "0xcb23ee65a163121f640673b41788ee94633941405f95009999b502eedfbbfd4f",
- "currentGasLimit" : "0x40000000",
- "currentBaseFee" : "0x036b",
- "blockHashes" : {
- "0" : "0xcb23ee65a163121f640673b41788ee94633941405f95009999b502eedfbbfd4f"
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/13/exp.json b/cmd/evm/testdata/13/exp.json
deleted file mode 100644
index 2b049dfb29..0000000000
--- a/cmd/evm/testdata/13/exp.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "body": "0xf8d2b86702f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904b86702f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9"
-}
diff --git a/cmd/evm/testdata/13/exp2.json b/cmd/evm/testdata/13/exp2.json
deleted file mode 100644
index babce35929..0000000000
--- a/cmd/evm/testdata/13/exp2.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "result": {
- "stateRoot": "0xe4b924a6adb5959fccf769d5b7bb2f6359e26d1e76a2443c5a91a36d826aef61",
- "txRoot": "0x013509c8563d41c0ae4bf38f2d6d19fc6512a1d0d6be045079c8c9f68bf45f9d",
- "receiptsRoot": "0xa532a08aa9f62431d6fe5d924951b8efb86ed3c54d06fee77788c3767dd13420",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [
- {
- "type": "0x2",
- "root": "0x",
- "status": "0x0",
- "cumulativeGasUsed": "0x84d0",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x84d0",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x0"
- },
- {
- "type": "0x2",
- "root": "0x",
- "status": "0x0",
- "cumulativeGasUsed": "0x109a0",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x84d0",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x1"
- }
- ],
- "currentDifficulty": "0x20000",
- "gasUsed": "0x109a0",
- "currentBaseFee": "0x36b"
- }
-}
diff --git a/cmd/evm/testdata/13/readme.md b/cmd/evm/testdata/13/readme.md
deleted file mode 100644
index 889975d47e..0000000000
--- a/cmd/evm/testdata/13/readme.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## Input transactions in RLP form
-
-This testdata folder is used to exemplify how transaction input can be provided in rlp form.
-Please see the README in `evm` folder for how this is performed.
\ No newline at end of file
diff --git a/cmd/evm/testdata/13/signed_txs.rlp b/cmd/evm/testdata/13/signed_txs.rlp
deleted file mode 100644
index 9d1157ea45..0000000000
--- a/cmd/evm/testdata/13/signed_txs.rlp
+++ /dev/null
@@ -1 +0,0 @@
-"0xf8d2b86702f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904b86702f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9"
\ No newline at end of file
diff --git a/cmd/evm/testdata/13/txs.json b/cmd/evm/testdata/13/txs.json
deleted file mode 100644
index c45ef1e13d..0000000000
--- a/cmd/evm/testdata/13/txs.json
+++ /dev/null
@@ -1,34 +0,0 @@
-[
- {
- "input" : "0x",
- "gas" : "0x84d0",
- "nonce" : "0x1",
- "to" : "0x1111111111111111111111111111111111111111",
- "value" : "0x0",
- "v" : "0x0",
- "r" : "0x0",
- "s" : "0x0",
- "secretKey" : "0x41f6e321b31e72173f8ff2e292359e1862f24fba42fe6f97efaf641980eff298",
- "chainId" : "0x1",
- "type" : "0x2",
- "maxFeePerGas" : "0xfa0",
- "maxPriorityFeePerGas" : "0x0",
- "accessList" : []
- },
- {
- "input" : "0x",
- "gas" : "0x84d0",
- "nonce" : "0x2",
- "to" : "0x1111111111111111111111111111111111111111",
- "value" : "0x0",
- "v" : "0x0",
- "r" : "0x0",
- "s" : "0x0",
- "secretKey" : "0x41f6e321b31e72173f8ff2e292359e1862f24fba42fe6f97efaf641980eff298",
- "chainId" : "0x1",
- "type" : "0x2",
- "maxFeePerGas" : "0xfa0",
- "maxPriorityFeePerGas" : "0x0",
- "accessList" : []
- }
-]
\ No newline at end of file
diff --git a/cmd/evm/testdata/14/alloc.json b/cmd/evm/testdata/14/alloc.json
deleted file mode 100644
index cef1a25ff0..0000000000
--- a/cmd/evm/testdata/14/alloc.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x5ffd4878be161d74",
- "code": "0x",
- "nonce": "0xac",
- "storage": {}
- },
- "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192":{
- "balance": "0xfeedbead",
- "nonce" : "0x00"
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/14/env.json b/cmd/evm/testdata/14/env.json
deleted file mode 100644
index 0bf1c5cf48..0000000000
--- a/cmd/evm/testdata/14/env.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "currentGasLimit": "0x750a163df65e8a",
- "currentBaseFee": "0x500",
- "currentNumber": "12800000",
- "currentTimestamp": "100015",
- "parentTimestamp" : "99999",
- "parentDifficulty" : "0x2000000000000"
-}
diff --git a/cmd/evm/testdata/14/env.uncles.json b/cmd/evm/testdata/14/env.uncles.json
deleted file mode 100644
index 83811b95ec..0000000000
--- a/cmd/evm/testdata/14/env.uncles.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "currentGasLimit": "0x750a163df65e8a",
- "currentBaseFee": "0x500",
- "currentNumber": "12800000",
- "currentTimestamp": "100035",
- "parentTimestamp" : "99999",
- "parentDifficulty" : "0x2000000000000",
- "parentUncleHash" : "0x000000000000000000000000000000000000000000000000000000000000beef"
-}
diff --git a/cmd/evm/testdata/14/exp.json b/cmd/evm/testdata/14/exp.json
deleted file mode 100644
index 26d49173ce..0000000000
--- a/cmd/evm/testdata/14/exp.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "result": {
- "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc",
- "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "currentDifficulty": "0x2000020000000",
- "receipts": [],
- "gasUsed": "0x0",
- "currentBaseFee": "0x500"
- }
-}
diff --git a/cmd/evm/testdata/14/exp2.json b/cmd/evm/testdata/14/exp2.json
deleted file mode 100644
index cd75b47d5a..0000000000
--- a/cmd/evm/testdata/14/exp2.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "result": {
- "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc",
- "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [],
- "currentDifficulty": "0x1ff8020000000",
- "gasUsed": "0x0",
- "currentBaseFee": "0x500"
- }
-}
diff --git a/cmd/evm/testdata/14/exp_berlin.json b/cmd/evm/testdata/14/exp_berlin.json
deleted file mode 100644
index 5c00ef130a..0000000000
--- a/cmd/evm/testdata/14/exp_berlin.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "result": {
- "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc",
- "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [],
- "currentDifficulty": "0x1ff9000000000",
- "gasUsed": "0x0",
- "currentBaseFee": "0x500"
- }
-}
diff --git a/cmd/evm/testdata/14/readme.md b/cmd/evm/testdata/14/readme.md
deleted file mode 100644
index 40dd75486e..0000000000
--- a/cmd/evm/testdata/14/readme.md
+++ /dev/null
@@ -1,45 +0,0 @@
-## Difficulty calculation
-
-This test shows how the `evm t8n` can be used to calculate the (ethash) difficulty, if none is provided by the caller.
-
-Calculating it (with an empty set of txs) using `London` rules (and no provided unclehash for the parent block):
-```
-[user@work evm]$ ./evm t8n --input.alloc=./testdata/14/alloc.json --input.txs=./testdata/14/txs.json --input.env=./testdata/14/env.json --output.result=stdout --state.fork=London
-INFO [03-09|10:43:57.070] Trie dumping started root=6f0588..7f4bdc
-INFO [03-09|10:43:57.070] Trie dumping complete accounts=2 elapsed="214.663µs"
-INFO [03-09|10:43:57.071] Wrote file file=alloc.json
-{
- "result": {
- "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc",
- "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [],
- "currentDifficulty": "0x2000020000000",
- "gasUsed": "0x0",
- "currentBaseFee": "0x500"
- }
-}
-```
-Same thing, but this time providing a non-empty (and non-`emptyKeccak`) unclehash, which leads to a slightly different result:
-```
-[user@work evm]$ ./evm t8n --input.alloc=./testdata/14/alloc.json --input.txs=./testdata/14/txs.json --input.env=./testdata/14/env.uncles.json --output.result=stdout --state.fork=London
-INFO [03-09|10:44:20.511] Trie dumping started root=6f0588..7f4bdc
-INFO [03-09|10:44:20.511] Trie dumping complete accounts=2 elapsed="184.319µs"
-INFO [03-09|10:44:20.512] Wrote file file=alloc.json
-{
- "result": {
- "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc",
- "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [],
- "currentDifficulty": "0x1ff8020000000",
- "gasUsed": "0x0",
- "currentBaseFee": "0x500"
- }
-}
-```
-
diff --git a/cmd/evm/testdata/14/txs.json b/cmd/evm/testdata/14/txs.json
deleted file mode 100644
index fe51488c70..0000000000
--- a/cmd/evm/testdata/14/txs.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/cmd/evm/testdata/15/blockheader.rlp b/cmd/evm/testdata/15/blockheader.rlp
deleted file mode 100644
index 1124e8e2da..0000000000
--- a/cmd/evm/testdata/15/blockheader.rlp
+++ /dev/null
@@ -1 +0,0 @@
-"0xf901f0a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b0101020383010203a00000000000000000000000000000000000000000000000000000000000000000880000000000000000"
\ No newline at end of file
diff --git a/cmd/evm/testdata/15/exp.json b/cmd/evm/testdata/15/exp.json
deleted file mode 100644
index 1893fdfc08..0000000000
--- a/cmd/evm/testdata/15/exp.json
+++ /dev/null
@@ -1,10 +0,0 @@
-[
- {
- "error": "transaction type not supported",
- "hash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476"
- },
- {
- "error": "transaction type not supported",
- "hash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a"
- }
-]
\ No newline at end of file
diff --git a/cmd/evm/testdata/15/exp2.json b/cmd/evm/testdata/15/exp2.json
deleted file mode 100644
index dd5e8a358c..0000000000
--- a/cmd/evm/testdata/15/exp2.json
+++ /dev/null
@@ -1,12 +0,0 @@
-[
- {
- "address": "0xd02d72e067e77158444ef2020ff2d325f929b363",
- "hash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476",
- "intrinsicGas": "0x5208"
- },
- {
- "address": "0xd02d72e067e77158444ef2020ff2d325f929b363",
- "hash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a",
- "intrinsicGas": "0x5208"
- }
-]
diff --git a/cmd/evm/testdata/15/exp3.json b/cmd/evm/testdata/15/exp3.json
deleted file mode 100644
index d7606a2073..0000000000
--- a/cmd/evm/testdata/15/exp3.json
+++ /dev/null
@@ -1,47 +0,0 @@
-[
- {
- "error": "transaction type not supported"
- },
- {
- "error": "transaction type not supported"
- },
- {
- "error": "transaction type not supported"
- },
- {
- "error": "transaction type not supported"
- },
- {
- "error": "transaction type not supported"
- },
- {
- "error": "transaction type not supported"
- },
- {
- "error": "transaction type not supported"
- },
- {
- "error": "typed transaction too short"
- },
- {
- "error": "typed transaction too short"
- },
- {
- "error": "typed transaction too short"
- },
- {
- "error": "typed transaction too short"
- },
- {
- "error": "typed transaction too short"
- },
- {
- "error": "rlp: expected input list for types.AccessListTx"
- },
- {
- "error": "transaction type not supported"
- },
- {
- "error": "transaction type not supported"
- }
-]
diff --git a/cmd/evm/testdata/15/signed_txs.rlp b/cmd/evm/testdata/15/signed_txs.rlp
deleted file mode 100644
index 9d1157ea45..0000000000
--- a/cmd/evm/testdata/15/signed_txs.rlp
+++ /dev/null
@@ -1 +0,0 @@
-"0xf8d2b86702f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904b86702f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9"
\ No newline at end of file
diff --git a/cmd/evm/testdata/15/signed_txs.rlp.json b/cmd/evm/testdata/15/signed_txs.rlp.json
deleted file mode 100644
index 187f40f24a..0000000000
--- a/cmd/evm/testdata/15/signed_txs.rlp.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "txsRlp" : "0xf8d2b86702f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904b86702f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9"
-}
-
diff --git a/cmd/evm/testdata/16/exp.json b/cmd/evm/testdata/16/exp.json
deleted file mode 100644
index 137ade6513..0000000000
--- a/cmd/evm/testdata/16/exp.json
+++ /dev/null
@@ -1,13 +0,0 @@
-[
- {
- "address": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "hash": "0x7cc3d1a8540a44736750f03bb4d85c0113be4b3472a71bf82241a3b261b479e6",
- "intrinsicGas": "0x5208"
- },
- {
- "error": "intrinsic gas too low: have 82, want 21000",
- "address": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "hash": "0x3b2d2609e4361562edb9169314f4c05afc6dbf5d706bf9dda5abe242ab76a22b",
- "intrinsicGas": "0x5208"
- }
-]
\ No newline at end of file
diff --git a/cmd/evm/testdata/16/signed_txs.rlp b/cmd/evm/testdata/16/signed_txs.rlp
deleted file mode 100644
index 952ced2130..0000000000
--- a/cmd/evm/testdata/16/signed_txs.rlp
+++ /dev/null
@@ -1 +0,0 @@
-"0xf8cab86401f8610180018252089411111111111111111111111111111111111111112080c001a0937f65ef1deece46c473b99962678fb7c38425cf303d1e8fa9717eb4b9d012b5a01940c5a5647c4940217ffde1051a5fd92ec8551e275c1787f81f50a2ad84de43b86201f85f018001529411111111111111111111111111111111111111112080c001a0241c3aec732205542a87fef8c76346741e85480bce5a42d05a9a73dac892f84ca04f52e2dfce57f3a02ed10e085e1a154edf38a726da34127c85fc53b4921759c8"
\ No newline at end of file
diff --git a/cmd/evm/testdata/16/unsigned_txs.json b/cmd/evm/testdata/16/unsigned_txs.json
deleted file mode 100644
index f619589406..0000000000
--- a/cmd/evm/testdata/16/unsigned_txs.json
+++ /dev/null
@@ -1,34 +0,0 @@
-[
- {
- "input" : "0x",
- "gas" : "0x5208",
- "nonce" : "0x0",
- "to" : "0x1111111111111111111111111111111111111111",
- "value" : "0x20",
- "v" : "0x0",
- "r" : "0x0",
- "s" : "0x0",
- "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
- "chainId" : "0x1",
- "type" : "0x1",
- "gasPrice": "0x1",
- "accessList" : [
- ]
- },
- {
- "input" : "0x",
- "gas" : "0x52",
- "nonce" : "0x0",
- "to" : "0x1111111111111111111111111111111111111111",
- "value" : "0x20",
- "v" : "0x0",
- "r" : "0x0",
- "s" : "0x0",
- "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
- "chainId" : "0x1",
- "type" : "0x1",
- "gasPrice": "0x1",
- "accessList" : [
- ]
- }
-]
diff --git a/cmd/evm/testdata/17/exp.json b/cmd/evm/testdata/17/exp.json
deleted file mode 100644
index 485906041b..0000000000
--- a/cmd/evm/testdata/17/exp.json
+++ /dev/null
@@ -1,22 +0,0 @@
- [
- {
- "error": "value exceeds 256 bits",
- "address": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "hash": "0xfbd91685dcbf8172f0e8c53e2ddbb4d26707840da6b51a74371f62a33868fd82",
- "intrinsicGas": "0x5208"
- },
- {
- "error": "gasPrice exceeds 256 bits",
- "address": "0x1b57ccef1fe5fb73f1e64530fb4ebd9cf1655964",
- "hash": "0x45dc05035cada83748e4c1fe617220106b331eca054f44c2304d5654a9fb29d5",
- "intrinsicGas": "0x5208"
- },
- {
- "error": "invalid transaction v, r, s values",
- "hash": "0xf06691c2a803ab7f3c81d06a0c0a896f80f311105c599fc59a9fdbc669356d35"
- },
- {
- "error": "invalid transaction v, r, s values",
- "hash": "0x84703b697ad5b0db25e4f1f98fb6b1adce85b9edb2232eeba9cedd8c6601694b"
- }
-]
\ No newline at end of file
diff --git a/cmd/evm/testdata/17/rlpdata.txt b/cmd/evm/testdata/17/rlpdata.txt
deleted file mode 100644
index 874461fd76..0000000000
--- a/cmd/evm/testdata/17/rlpdata.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-[
- [
- "",
- "d",
- 5208,
- d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0,
- 010000000000000000000000000000000000000000000000000000000000000001,
- "",
- 1b,
- c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549d,
- 6180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28,
- ],
- [
- "",
- 010000000000000000000000000000000000000000000000000000000000000001,
- 5208,
- d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0,
- 11,
- "",
- 1b,
- c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549d,
- 6180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28,
- ],
- [
- "",
- 11,
- 5208,
- d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0,
- 11,
- "",
- 1b,
- c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549daa,
- 6180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28,
- ],
- [
- "",
- 11,
- 5208,
- d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0,
- 11,
- "",
- 1b,
- c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549d,
- 6180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28bb,
- ],
-]
diff --git a/cmd/evm/testdata/17/signed_txs.rlp b/cmd/evm/testdata/17/signed_txs.rlp
deleted file mode 100644
index 0e351fb03c..0000000000
--- a/cmd/evm/testdata/17/signed_txs.rlp
+++ /dev/null
@@ -1 +0,0 @@
-"0xf901c8f880806482520894d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0a1010000000000000000000000000000000000000000000000000000000000000001801ba0c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549da06180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28f88080a101000000000000000000000000000000000000000000000000000000000000000182520894d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d011801ba0c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549da06180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28f860801182520894d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d011801ba1c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549daaa06180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28f860801182520894d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d011801ba0c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549da16180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28bb"
\ No newline at end of file
diff --git a/cmd/evm/testdata/18/README.md b/cmd/evm/testdata/18/README.md
deleted file mode 100644
index 360a9bba01..0000000000
--- a/cmd/evm/testdata/18/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Invalid rlp
-
-This folder contains a sample of invalid RLP, and it's expected
-that the t9n handles this properly:
-
-```
-$ go run . t9n --input.txs=./testdata/18/invalid.rlp --state.fork=London
-ERROR(11): rlp: value size exceeds available input length
-```
\ No newline at end of file
diff --git a/cmd/evm/testdata/18/invalid.rlp b/cmd/evm/testdata/18/invalid.rlp
deleted file mode 100644
index 7ff2824caf..0000000000
--- a/cmd/evm/testdata/18/invalid.rlp
+++ /dev/null
@@ -1 +0,0 @@
-"0xf852328001825208870b9331677e6ebf0a801ca098ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4aa03887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3"
\ No newline at end of file
diff --git a/cmd/evm/testdata/19/alloc.json b/cmd/evm/testdata/19/alloc.json
deleted file mode 100644
index cef1a25ff0..0000000000
--- a/cmd/evm/testdata/19/alloc.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x5ffd4878be161d74",
- "code": "0x",
- "nonce": "0xac",
- "storage": {}
- },
- "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192":{
- "balance": "0xfeedbead",
- "nonce" : "0x00"
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/19/env.json b/cmd/evm/testdata/19/env.json
deleted file mode 100644
index 0c64392aff..0000000000
--- a/cmd/evm/testdata/19/env.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "currentGasLimit": "0x750a163df65e8a",
- "currentBaseFee": "0x500",
- "currentNumber": "13000000",
- "currentTimestamp": "100015",
- "parentTimestamp" : "99999",
- "parentDifficulty" : "0x2000000000000"
-}
diff --git a/cmd/evm/testdata/19/exp_arrowglacier.json b/cmd/evm/testdata/19/exp_arrowglacier.json
deleted file mode 100644
index dd49f7d02e..0000000000
--- a/cmd/evm/testdata/19/exp_arrowglacier.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "result": {
- "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc",
- "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "currentDifficulty": "0x2000000200000",
- "receipts": [],
- "gasUsed": "0x0",
- "currentBaseFee": "0x500"
- }
-}
diff --git a/cmd/evm/testdata/19/exp_grayglacier.json b/cmd/evm/testdata/19/exp_grayglacier.json
deleted file mode 100644
index 86fd8e6c13..0000000000
--- a/cmd/evm/testdata/19/exp_grayglacier.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "result": {
- "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc",
- "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [],
- "currentDifficulty": "0x2000000004000",
- "gasUsed": "0x0",
- "currentBaseFee": "0x500"
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/19/exp_london.json b/cmd/evm/testdata/19/exp_london.json
deleted file mode 100644
index 9e9a17da90..0000000000
--- a/cmd/evm/testdata/19/exp_london.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "result": {
- "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc",
- "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "currentDifficulty": "0x2000080000000",
- "receipts": [],
- "gasUsed": "0x0",
- "currentBaseFee": "0x500"
- }
-}
diff --git a/cmd/evm/testdata/19/readme.md b/cmd/evm/testdata/19/readme.md
deleted file mode 100644
index 9c7c4b3656..0000000000
--- a/cmd/evm/testdata/19/readme.md
+++ /dev/null
@@ -1,25 +0,0 @@
-## Difficulty calculation
-
-This test shows how the `evm t8n` can be used to calculate the (ethash) difficulty, if none is provided by the caller,
-this time on `GrayGlacier` (Eip 5133).
-
-Calculating it (with an empty set of txs) using `GrayGlacier` rules (and no provided unclehash for the parent block):
-```
-[user@work evm]$ ./evm t8n --input.alloc=./testdata/19/alloc.json --input.txs=./testdata/19/txs.json --input.env=./testdata/19/env.json --output.result=stdout --state.fork=GrayGlacier
-INFO [03-09|10:45:26.777] Trie dumping started root=6f0588..7f4bdc
-INFO [03-09|10:45:26.777] Trie dumping complete accounts=2 elapsed="176.471µs"
-INFO [03-09|10:45:26.777] Wrote file file=alloc.json
-{
- "result": {
- "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc",
- "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [],
- "currentDifficulty": "0x2000000004000",
- "gasUsed": "0x0",
- "currentBaseFee": "0x500"
- }
-}
-```
\ No newline at end of file
diff --git a/cmd/evm/testdata/19/txs.json b/cmd/evm/testdata/19/txs.json
deleted file mode 100644
index fe51488c70..0000000000
--- a/cmd/evm/testdata/19/txs.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/cmd/evm/testdata/2/alloc.json b/cmd/evm/testdata/2/alloc.json
deleted file mode 100644
index a9720afc93..0000000000
--- a/cmd/evm/testdata/2/alloc.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
- "balance" : "0x0de0b6b3a7640000",
- "code" : "0x6001600053600160006001f0ff00",
- "nonce" : "0x00",
- "storage" : {
- }
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x0de0b6b3a7640000",
- "code" : "0x",
- "nonce" : "0x00",
- "storage" : {
- }
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/2/env.json b/cmd/evm/testdata/2/env.json
deleted file mode 100644
index ebadd3f06a..0000000000
--- a/cmd/evm/testdata/2/env.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "currentDifficulty" : "0x020000",
- "currentGasLimit" : "0x3b9aca00",
- "currentNumber" : "0x01",
- "currentTimestamp" : "0x03e8"
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/2/readme.md b/cmd/evm/testdata/2/readme.md
deleted file mode 100644
index 4bcf0f0fa0..0000000000
--- a/cmd/evm/testdata/2/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-These files exemplify a selfdestruct to the `0`-address.
\ No newline at end of file
diff --git a/cmd/evm/testdata/2/txs.json b/cmd/evm/testdata/2/txs.json
deleted file mode 100644
index 3044458588..0000000000
--- a/cmd/evm/testdata/2/txs.json
+++ /dev/null
@@ -1,14 +0,0 @@
-[
- {
- "input" : "0x",
- "gas" : "0x5f5e100",
- "gasPrice" : "0x1",
- "nonce" : "0x0",
- "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87",
- "value" : "0x186a0",
- "v" : "0x1b",
- "r" : "0x88544c93a564b4c28d2ffac2074a0c55fdd4658fe0d215596ed2e32e3ef7f56b",
- "s" : "0x7fb4075d54190f825d7c47bb820284757b34fd6293904a93cddb1d3aa961ac28",
- "hash" : "0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81"
- }
-]
\ No newline at end of file
diff --git a/cmd/evm/testdata/20/exp.json b/cmd/evm/testdata/20/exp.json
deleted file mode 100644
index 7bec6cefd6..0000000000
--- a/cmd/evm/testdata/20/exp.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "rlp": "0xf902d9f90211a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e997a23b159e2e2a5ce72333262972374b15425ca0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e99476574682f76312e302e312f6c696e75782f676f312e342e32a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf8897435673d874f7c8f8c2f85f8002825208948a8eafb1cf62bfbeb1741769dae1a9dd4799619201801ba09500e8ba27d3c33ca7764e107410f44cbd8c19794bde214d694683a7aa998cdba07235ae07e4bd6e0206d102b1f8979d6adab280466b6a82d2208ee08951f1f600f85f8002825208948a8eafb1cf62bfbeb1741769dae1a9dd4799619201801ba09500e8ba27d3c33ca7764e107410f44cbd8c19794bde214d694683a7aa998cdba07235ae07e4bd6e0206d102b1f8979d6adab280466b6a82d2208ee08951f1f600c0",
- "hash": "0xaba9a3b6a4e96e9ecffcadaa5a2ae0589359455617535cd86589fe1dd26fe899"
-}
diff --git a/cmd/evm/testdata/20/header.json b/cmd/evm/testdata/20/header.json
deleted file mode 100644
index fb9b7fc563..0000000000
--- a/cmd/evm/testdata/20/header.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "parentHash": "0xd6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34e",
- "miner": "0xe997a23b159e2e2a5ce72333262972374b15425c",
- "stateRoot": "0x325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2e",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "difficulty": "0x1000",
- "number": "0xc3be",
- "gasLimit": "0x50785",
- "gasUsed": "0x0",
- "timestamp": "0x55c5277e",
- "extraData": "0x476574682f76312e302e312f6c696e75782f676f312e342e32",
- "mixHash": "0x5865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf",
- "nonce": "0x97435673d874f7c8"
-}
diff --git a/cmd/evm/testdata/20/ommers.json b/cmd/evm/testdata/20/ommers.json
deleted file mode 100644
index fe51488c70..0000000000
--- a/cmd/evm/testdata/20/ommers.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/cmd/evm/testdata/20/readme.md b/cmd/evm/testdata/20/readme.md
deleted file mode 100644
index 2c448a96e6..0000000000
--- a/cmd/evm/testdata/20/readme.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Block building
-
-This test shows how `b11r` can be used to assemble an unsealed block.
-
-```console
-$ go run . b11r --input.header=testdata/20/header.json --input.txs=testdata/20/txs.rlp --input.ommers=testdata/20/ommers.json --output.block=stdout
-{
- "rlp": "0xf90216f90211a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e997a23b159e2e2a5ce72333262972374b15425ca0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e99476574682f76312e302e312f6c696e75782f676f312e342e32a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf8897435673d874f7c8c0c0",
- "hash": "0xaba9a3b6a4e96e9ecffcadaa5a2ae0589359455617535cd86589fe1dd26fe899"
-}
-```
diff --git a/cmd/evm/testdata/20/txs.rlp b/cmd/evm/testdata/20/txs.rlp
deleted file mode 100644
index 3599ff0654..0000000000
--- a/cmd/evm/testdata/20/txs.rlp
+++ /dev/null
@@ -1 +0,0 @@
-"0xf8c2f85f8002825208948a8eafb1cf62bfbeb1741769dae1a9dd4799619201801ba09500e8ba27d3c33ca7764e107410f44cbd8c19794bde214d694683a7aa998cdba07235ae07e4bd6e0206d102b1f8979d6adab280466b6a82d2208ee08951f1f600f85f8002825208948a8eafb1cf62bfbeb1741769dae1a9dd4799619201801ba09500e8ba27d3c33ca7764e107410f44cbd8c19794bde214d694683a7aa998cdba07235ae07e4bd6e0206d102b1f8979d6adab280466b6a82d2208ee08951f1f600"
\ No newline at end of file
diff --git a/cmd/evm/testdata/21/clique.json b/cmd/evm/testdata/21/clique.json
deleted file mode 100644
index 84fa259a0d..0000000000
--- a/cmd/evm/testdata/21/clique.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
- "voted": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "authorize": false,
- "vanity": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-}
diff --git a/cmd/evm/testdata/21/exp-clique.json b/cmd/evm/testdata/21/exp-clique.json
deleted file mode 100644
index c990ba8aa6..0000000000
--- a/cmd/evm/testdata/21/exp-clique.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "rlp": "0xf9025ff9025aa0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277eb861aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac540a67aaee364005841da84f488f6b6d0116dfb5103d091402c81a163d5f66666595e37f56f196d8c5c98da714dbfae68d6b7e1790cc734a20ec6ce52213ad800a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf88ffffffffffffffffc0c0",
- "hash": "0x71c59102cc805dbe8741e1210ebe229a321eff144ac7276006fefe39e8357dc7"
-}
diff --git a/cmd/evm/testdata/21/exp.json b/cmd/evm/testdata/21/exp.json
deleted file mode 100644
index b3e5e7a831..0000000000
--- a/cmd/evm/testdata/21/exp.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "rlp": "0xf901fdf901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000c0c0",
- "hash": "0x801411e9f6609a659825690d13e4f75a3cfe9143952fa2d9573f3b0a5eb9ebbb"
-}
diff --git a/cmd/evm/testdata/21/header.json b/cmd/evm/testdata/21/header.json
deleted file mode 100644
index 62abe3cc2c..0000000000
--- a/cmd/evm/testdata/21/header.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "parentHash": "0xd6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34e",
- "stateRoot": "0x325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2e",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "difficulty": "0x1000",
- "number": "0xc3be",
- "gasLimit": "0x50785",
- "gasUsed": "0x0",
- "timestamp": "0x55c5277e",
- "mixHash": "0x5865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf"
-}
diff --git a/cmd/evm/testdata/21/ommers.json b/cmd/evm/testdata/21/ommers.json
deleted file mode 100644
index fe51488c70..0000000000
--- a/cmd/evm/testdata/21/ommers.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/cmd/evm/testdata/21/readme.md b/cmd/evm/testdata/21/readme.md
deleted file mode 100644
index b70f106ffc..0000000000
--- a/cmd/evm/testdata/21/readme.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Sealed block building
-
-This test shows how `b11r` can be used to assemble a sealed block.
-
-## Ethash
-
-```console
-$ go run . b11r --input.header=testdata/21/header.json --input.txs=testdata/21/txs.rlp --input.ommers=testdata/21/ommers.json --seal.ethash --seal.ethash.mode=test --output.block=stdout
-{
- "rlp": "0xf901fdf901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000c0c0",
- "hash": "0x801411e9f6609a659825690d13e4f75a3cfe9143952fa2d9573f3b0a5eb9ebbb"
-}
-```
-
-## Clique
-
-```console
-$ go run . b11r --input.header=testdata/21/header.json --input.txs=testdata/21/txs.rlp --input.ommers=testdata/21/ommers.json --seal.clique=testdata/21/clique.json --output.block=stdout
-{
- "rlp": "0xf9025ff9025aa0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277eb861aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac540a67aaee364005841da84f488f6b6d0116dfb5103d091402c81a163d5f66666595e37f56f196d8c5c98da714dbfae68d6b7e1790cc734a20ec6ce52213ad800a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf88ffffffffffffffffc0c0",
- "hash": "0x71c59102cc805dbe8741e1210ebe229a321eff144ac7276006fefe39e8357dc7"
-}
-```
diff --git a/cmd/evm/testdata/21/txs.rlp b/cmd/evm/testdata/21/txs.rlp
deleted file mode 100644
index e815397b33..0000000000
--- a/cmd/evm/testdata/21/txs.rlp
+++ /dev/null
@@ -1 +0,0 @@
-"c0"
diff --git a/cmd/evm/testdata/22/exp-clique.json b/cmd/evm/testdata/22/exp-clique.json
deleted file mode 100644
index c990ba8aa6..0000000000
--- a/cmd/evm/testdata/22/exp-clique.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "rlp": "0xf9025ff9025aa0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277eb861aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac540a67aaee364005841da84f488f6b6d0116dfb5103d091402c81a163d5f66666595e37f56f196d8c5c98da714dbfae68d6b7e1790cc734a20ec6ce52213ad800a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf88ffffffffffffffffc0c0",
- "hash": "0x71c59102cc805dbe8741e1210ebe229a321eff144ac7276006fefe39e8357dc7"
-}
diff --git a/cmd/evm/testdata/22/exp.json b/cmd/evm/testdata/22/exp.json
deleted file mode 100644
index 14fd81997d..0000000000
--- a/cmd/evm/testdata/22/exp.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "rlp": "0xf905f5f901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea06eb9f0c3cd68c9e97134e6725d12b1f1d8f0644458da6870a37ff84c908fb1e7940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000c0f903f6f901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000f901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000",
- "hash": "0xd9a81c8fcd57a7f2a0d2c375eff6ad192c30c3729a271303f0a9a7e1b357e755"
-}
diff --git a/cmd/evm/testdata/22/header.json b/cmd/evm/testdata/22/header.json
deleted file mode 100644
index 62abe3cc2c..0000000000
--- a/cmd/evm/testdata/22/header.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "parentHash": "0xd6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34e",
- "stateRoot": "0x325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2e",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "difficulty": "0x1000",
- "number": "0xc3be",
- "gasLimit": "0x50785",
- "gasUsed": "0x0",
- "timestamp": "0x55c5277e",
- "mixHash": "0x5865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf"
-}
diff --git a/cmd/evm/testdata/22/ommers.json b/cmd/evm/testdata/22/ommers.json
deleted file mode 100644
index 997015b3ce..0000000000
--- a/cmd/evm/testdata/22/ommers.json
+++ /dev/null
@@ -1 +0,0 @@
-["0xf901fdf901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000c0c0","0xf901fdf901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000c0c0"]
diff --git a/cmd/evm/testdata/22/readme.md b/cmd/evm/testdata/22/readme.md
deleted file mode 100644
index 2cac8a2434..0000000000
--- a/cmd/evm/testdata/22/readme.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Building blocks with ommers
-
-This test shows how `b11r` can chain together ommer assembles into a canonical block.
-
-```console
-$ echo "{ \"ommers\": [`go run . b11r --input.header=testdata/22/header.json --input.txs=testdata/22/txs.rlp --output.block=stdout | jq '.[\"rlp\"]'`,`go run . b11r --input.header=testdata/22/header.json --input.txs=testdata/22/txs.rlp --output.block=stdout | jq '.[\"rlp\"]'`]}" | go run . b11r --input.header=testdata/22/header.json --input.txs=testdata/22/txs.rlp --input.ommers=stdin --output.block=stdout
-{
- "rlp": "0xf905f5f901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea06eb9f0c3cd68c9e97134e6725d12b1f1d8f0644458da6870a37ff84c908fb1e7940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000c0f903f6f901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000f901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000",
- "hash": "0xd9a81c8fcd57a7f2a0d2c375eff6ad192c30c3729a271303f0a9a7e1b357e755"
-}
-```
diff --git a/cmd/evm/testdata/22/txs.rlp b/cmd/evm/testdata/22/txs.rlp
deleted file mode 100644
index e815397b33..0000000000
--- a/cmd/evm/testdata/22/txs.rlp
+++ /dev/null
@@ -1 +0,0 @@
-"c0"
diff --git a/cmd/evm/testdata/23/alloc.json b/cmd/evm/testdata/23/alloc.json
deleted file mode 100644
index 239b3553f9..0000000000
--- a/cmd/evm/testdata/23/alloc.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
- "balance" : "0x0de0b6b3a7640000",
- "code" : "0x6001",
- "nonce" : "0x00",
- "storage" : {
- }
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x0de0b6b3a7640000",
- "code" : "0x",
- "nonce" : "0x00",
- "storage" : {
- }
- }
-}
diff --git a/cmd/evm/testdata/23/env.json b/cmd/evm/testdata/23/env.json
deleted file mode 100644
index 1b46321512..0000000000
--- a/cmd/evm/testdata/23/env.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "currentDifficulty" : "0x020000",
- "currentGasLimit" : "0x3b9aca00",
- "currentNumber" : "0x05",
- "currentTimestamp" : "0x03e8"
-}
diff --git a/cmd/evm/testdata/23/exp.json b/cmd/evm/testdata/23/exp.json
deleted file mode 100644
index 22dde0a27c..0000000000
--- a/cmd/evm/testdata/23/exp.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "result": {
- "stateRoot": "0x65334305e4accfa18352deb24f007b837b5036425b0712cf0e65a43bfa95154d",
- "txRoot": "0x75e61774a2ff58cbe32653420256c7f44bc715715a423b0b746d5c622979af6b",
- "receiptsRoot": "0xf951f9396af203499cc7d379715a9110323de73967c5700e2f424725446a3c76",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [
- {
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0x520b",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x520b",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x0"
- }
- ],
- "currentDifficulty": "0x20000",
- "gasUsed": "0x520b"
- }
-}
diff --git a/cmd/evm/testdata/23/readme.md b/cmd/evm/testdata/23/readme.md
deleted file mode 100644
index f31b64de2f..0000000000
--- a/cmd/evm/testdata/23/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-These files exemplify how to sign a transaction using the pre-EIP155 scheme.
diff --git a/cmd/evm/testdata/23/txs.json b/cmd/evm/testdata/23/txs.json
deleted file mode 100644
index 22f3840f84..0000000000
--- a/cmd/evm/testdata/23/txs.json
+++ /dev/null
@@ -1,15 +0,0 @@
-[
- {
- "input" : "0x",
- "gas" : "0x5f5e100",
- "gasPrice" : "0x1",
- "nonce" : "0x0",
- "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87",
- "value" : "0x186a0",
- "v" : "0x0",
- "r" : "0x0",
- "s" : "0x0",
- "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
- "protected": false
- }
-]
diff --git a/cmd/evm/testdata/24/alloc.json b/cmd/evm/testdata/24/alloc.json
deleted file mode 100644
index 73a9a03c0b..0000000000
--- a/cmd/evm/testdata/24/alloc.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x5ffd4878be161d74",
- "code": "0x",
- "nonce": "0xac",
- "storage": {}
- },
- "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192":{
- "balance": "0xfeedbead",
- "nonce" : "0x00",
- "code" : "0x44600055",
- "_comment": "The code is 'sstore(0, random)'"
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/24/env-missingrandom.json b/cmd/evm/testdata/24/env-missingrandom.json
deleted file mode 100644
index db49fd3fce..0000000000
--- a/cmd/evm/testdata/24/env-missingrandom.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "currentDifficulty": null,
- "currentRandom": null,
- "currentGasLimit": "0x750a163df65e8a",
- "currentBaseFee": "0x500",
- "currentNumber": "1",
- "currentTimestamp": "1000"
-}
diff --git a/cmd/evm/testdata/24/env.json b/cmd/evm/testdata/24/env.json
deleted file mode 100644
index 262cc2528c..0000000000
--- a/cmd/evm/testdata/24/env.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "currentDifficulty": null,
- "currentRandom": "0xdeadc0de",
- "currentGasLimit": "0x750a163df65e8a",
- "currentBaseFee": "0x500",
- "currentNumber": "1",
- "currentTimestamp": "1000"
-}
diff --git a/cmd/evm/testdata/24/exp.json b/cmd/evm/testdata/24/exp.json
deleted file mode 100644
index ac571d149b..0000000000
--- a/cmd/evm/testdata/24/exp.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "alloc": {
- "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192": {
- "code": "0x44600055",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000deadc0de"
- },
- "balance": "0xfeedbeaf"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x5ffd4878b803f972",
- "nonce": "0xae"
- },
- "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x1030600"
- }
- },
- "result": {
- "stateRoot": "0x9e4224c6bba343d5b0fdbe9200cc66a7ef2068240d901ae516e634c45a043c15",
- "txRoot": "0x16cd3a7daa6686ceebadf53b7af2bc6919eccb730907f0e74a95a4423c209593",
- "receiptsRoot": "0x22b85cda738345a9880260b2a71e144aab1ca9485f5db4fd251008350fc124c8",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [
- {
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0xa861",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x92ea4a28224d033afb20e0cc2b290d4c7c2d61f6a4800a680e4e19ac962ee941",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0xa861",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x0"
- },
- {
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0x10306",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x16b1d912f1d664f3f60f4e1b5f296f3c82a64a1a253117b4851d18bc03c4f1da",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x5aa5",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x1"
- }
- ],
- "currentDifficulty": null,
- "gasUsed": "0x10306",
- "currentBaseFee": "0x500"
- }
-}
diff --git a/cmd/evm/testdata/24/txs.json b/cmd/evm/testdata/24/txs.json
deleted file mode 100644
index 99c2068f1a..0000000000
--- a/cmd/evm/testdata/24/txs.json
+++ /dev/null
@@ -1,28 +0,0 @@
-[
- {
- "gas": "0x186a0",
- "gasPrice": "0x600",
- "hash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673",
- "input": "0x",
- "nonce": "0xac",
- "to": "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192",
- "value": "0x1",
- "v" : "0x0",
- "r" : "0x0",
- "s" : "0x0",
- "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8"
- },
- {
- "gas": "0x186a0",
- "gasPrice": "0x600",
- "hash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673",
- "input": "0x",
- "nonce": "0xad",
- "to": "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192",
- "value": "0x1",
- "v" : "0x0",
- "r" : "0x0",
- "s" : "0x0",
- "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8"
- }
-]
diff --git a/cmd/evm/testdata/25/alloc.json b/cmd/evm/testdata/25/alloc.json
deleted file mode 100644
index d66366718e..0000000000
--- a/cmd/evm/testdata/25/alloc.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x5ffd4878be161d74",
- "code": "0x",
- "nonce": "0xac",
- "storage": {}
- }
-}
diff --git a/cmd/evm/testdata/25/env.json b/cmd/evm/testdata/25/env.json
deleted file mode 100644
index bb2c9e0d7d..0000000000
--- a/cmd/evm/testdata/25/env.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "currentDifficulty": null,
- "currentRandom": "0xdeadc0de",
- "currentGasLimit": "0x750a163df65e8a",
- "parentBaseFee": "0x500",
- "parentGasUsed": "0x0",
- "parentGasLimit": "0x750a163df65e8a",
- "currentNumber": "1",
- "currentTimestamp": "1000"
-}
diff --git a/cmd/evm/testdata/25/exp.json b/cmd/evm/testdata/25/exp.json
deleted file mode 100644
index 1cb521794c..0000000000
--- a/cmd/evm/testdata/25/exp.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "alloc": {
- "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192": {
- "balance": "0x1"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x5ffd4878bc29ed73",
- "nonce": "0xad"
- },
- "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x854d00"
- }
- },
- "result": {
- "stateRoot": "0x5139609e39f4d158a7d1ad1800908eb0349cea9b500a8273a6cf0a7e4392639b",
- "txRoot": "0x572690baf4898c2972446e56ecf0aa2a027c08a863927d2dce34472f0c5496fe",
- "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [
- {
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0x5208",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x92ea4a28224d033afb20e0cc2b290d4c7c2d61f6a4800a680e4e19ac962ee941",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x5208",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x0"
- }
- ],
- "currentDifficulty": null,
- "gasUsed": "0x5208",
- "currentBaseFee": "0x460"
- }
-}
diff --git a/cmd/evm/testdata/25/txs.json b/cmd/evm/testdata/25/txs.json
deleted file mode 100644
index acb4035fd1..0000000000
--- a/cmd/evm/testdata/25/txs.json
+++ /dev/null
@@ -1,15 +0,0 @@
-[
- {
- "gas": "0x186a0",
- "gasPrice": "0x600",
- "hash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673",
- "input": "0x",
- "nonce": "0xac",
- "to": "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192",
- "value": "0x1",
- "v" : "0x0",
- "r" : "0x0",
- "s" : "0x0",
- "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8"
- }
-]
diff --git a/cmd/evm/testdata/26/alloc.json b/cmd/evm/testdata/26/alloc.json
deleted file mode 100644
index d67655a8a8..0000000000
--- a/cmd/evm/testdata/26/alloc.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x0",
- "code": "0x",
- "nonce": "0xac",
- "storage": {}
- }
-}
diff --git a/cmd/evm/testdata/26/env.json b/cmd/evm/testdata/26/env.json
deleted file mode 100644
index 03d817b93b..0000000000
--- a/cmd/evm/testdata/26/env.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "currentDifficulty": null,
- "currentRandom": "0xdeadc0de",
- "currentGasLimit": "0x750a163df65e8a",
- "currentBaseFee": "0x500",
- "currentNumber": "1",
- "currentTimestamp": "1000",
- "withdrawals": [
- {
- "index": "0x42",
- "validatorIndex": "0x42",
- "address": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "amount": "0x2a"
- }
- ]
-}
diff --git a/cmd/evm/testdata/26/exp.json b/cmd/evm/testdata/26/exp.json
deleted file mode 100644
index 4815e5cb65..0000000000
--- a/cmd/evm/testdata/26/exp.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "alloc": {
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x9c7652400",
- "nonce": "0xac"
- }
- },
- "result": {
- "stateRoot": "0x6e061c2f6513af27d267a0e3b07cb9a10f1ba3a0f65ab648d3a17c36e15021d2",
- "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [],
- "currentDifficulty": null,
- "gasUsed": "0x0",
- "currentBaseFee": "0x500",
- "withdrawalsRoot": "0x4921c0162c359755b2ae714a0978a1dad2eb8edce7ff9b38b9b6fc4cbc547eb5"
- }
-}
diff --git a/cmd/evm/testdata/26/txs.json b/cmd/evm/testdata/26/txs.json
deleted file mode 100644
index fe51488c70..0000000000
--- a/cmd/evm/testdata/26/txs.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/cmd/evm/testdata/27/exp.json b/cmd/evm/testdata/27/exp.json
deleted file mode 100644
index 5975a9c25a..0000000000
--- a/cmd/evm/testdata/27/exp.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "rlp": "0xf90239f9021aa0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf88000000000000000080a04921c0162c359755b2ae714a0978a1dad2eb8edce7ff9b38b9b6fc4cbc547eb5c0c0d9d8424394a94f5374fce5edbc8e2a8697c15331677e6ebf0b2a",
- "hash": "0xdc42abd3698499675819e0a85cc1266f16da90277509b867446a6b25fa2b9d87"
-}
diff --git a/cmd/evm/testdata/27/header.json b/cmd/evm/testdata/27/header.json
deleted file mode 100644
index 4ed7eaca09..0000000000
--- a/cmd/evm/testdata/27/header.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "parentHash": "0xd6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34e",
- "stateRoot": "0x325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2e",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "difficulty": "0x1000",
- "number": "0xc3be",
- "gasLimit": "0x50785",
- "gasUsed": "0x0",
- "timestamp": "0x55c5277e",
- "mixHash": "0x5865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf",
- "withdrawalsRoot": "0x4921c0162c359755b2ae714a0978a1dad2eb8edce7ff9b38b9b6fc4cbc547eb5"
-}
diff --git a/cmd/evm/testdata/27/ommers.json b/cmd/evm/testdata/27/ommers.json
deleted file mode 100644
index fe51488c70..0000000000
--- a/cmd/evm/testdata/27/ommers.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/cmd/evm/testdata/27/txs.rlp b/cmd/evm/testdata/27/txs.rlp
deleted file mode 100644
index e815397b33..0000000000
--- a/cmd/evm/testdata/27/txs.rlp
+++ /dev/null
@@ -1 +0,0 @@
-"c0"
diff --git a/cmd/evm/testdata/27/withdrawals.json b/cmd/evm/testdata/27/withdrawals.json
deleted file mode 100644
index 6634aff089..0000000000
--- a/cmd/evm/testdata/27/withdrawals.json
+++ /dev/null
@@ -1,8 +0,0 @@
-[
- {
- "index": "0x42",
- "validatorIndex": "0x43",
- "address": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "amount": "0x2a"
- }
-]
diff --git a/cmd/evm/testdata/28/alloc.json b/cmd/evm/testdata/28/alloc.json
deleted file mode 100644
index 680a89f4ed..0000000000
--- a/cmd/evm/testdata/28/alloc.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x016345785d8a0000",
- "code" : "0x",
- "nonce" : "0x00",
- "storage" : {
- }
- },
- "0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x016345785d8a0000",
- "code" : "0x60004960015500",
- "nonce" : "0x00",
- "storage" : {
- }
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/28/env.json b/cmd/evm/testdata/28/env.json
deleted file mode 100644
index 82f22ac62f..0000000000
--- a/cmd/evm/testdata/28/env.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "currentNumber" : "0x01",
- "currentTimestamp" : "0x079e",
- "currentGasLimit" : "0x7fffffffffffffff",
- "previousHash" : "0x3a9b485972e7353edd9152712492f0c58d89ef80623686b6bf947a4a6dce6cb6",
- "currentBlobGasUsed" : "0x00",
- "parentTimestamp" : "0x03b6",
- "parentDifficulty" : "0x00",
- "parentUncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "currentRandom" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "withdrawals" : [],
- "parentBaseFee" : "0x0a",
- "parentGasUsed" : "0x00",
- "parentGasLimit" : "0x7fffffffffffffff",
- "parentExcessBlobGas" : "0x00",
- "parentBlobGasUsed" : "0x00",
- "blockHashes" : {
- "0" : "0x3a9b485972e7353edd9152712492f0c58d89ef80623686b6bf947a4a6dce6cb6"
- },
- "parentBeaconBlockRoot": "0x0000beac00beac00beac00beac00beac00beac00beac00beac00beac00beac00"
-}
diff --git a/cmd/evm/testdata/28/exp.json b/cmd/evm/testdata/28/exp.json
deleted file mode 100644
index 75c715e972..0000000000
--- a/cmd/evm/testdata/28/exp.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "alloc": {
- "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": {
- "balance": "0x150ca"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x16345785d80c3a9",
- "nonce": "0x1"
- },
- "0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "code": "0x60004960015500",
- "storage": {
- "0x0000000000000000000000000000000000000000000000000000000000000001": "0x01a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8"
- },
- "balance": "0x16345785d8a0000"
- }
- },
- "result": {
- "stateRoot": "0xa40cb3fab01848e922a48bd24191815df9f721ad4b60376edac75161517663e8",
- "txRoot": "0x4409cc4b699384ba5f8248d92b784713610c5ff9c1de51e9239da0dac76de9ce",
- "receiptsRoot": "0xbff643da765981266133094092d98c81d2ac8e9a83a7bbda46c3d736f1f874ac",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [
- {
- "type": "0x3",
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0xa865",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x7508d7139d002a4b3a26a4f12dec0d87cb46075c78bf77a38b569a133b509262",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0xa865",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x0"
- }
- ],
- "currentDifficulty": null,
- "gasUsed": "0xa865",
- "currentBaseFee": "0x9",
- "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "currentExcessBlobGas": "0x0",
- "blobGasUsed": "0x20000"
- }
-}
diff --git a/cmd/evm/testdata/28/txs.rlp b/cmd/evm/testdata/28/txs.rlp
deleted file mode 100644
index 8df20e3aa2..0000000000
--- a/cmd/evm/testdata/28/txs.rlp
+++ /dev/null
@@ -1 +0,0 @@
-"0xf88bb88903f8860180026483061a8094b94f5374fce5edbc8e2a8697c15331677e6ebf0b8080c00ae1a001a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d801a025e16bb498552165016751911c3608d79000ab89dc3100776e729e6ea13091c7a03acacff7fc0cff6eda8a927dec93ca17765e1ee6cbc06c5954ce102e097c01d2"
\ No newline at end of file
diff --git a/cmd/evm/testdata/29/alloc.json b/cmd/evm/testdata/29/alloc.json
deleted file mode 100644
index d2c879a45c..0000000000
--- a/cmd/evm/testdata/29/alloc.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x016345785d8a0000",
- "code" : "0x",
- "nonce" : "0x00",
- "storage" : {
- }
- },
- "0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02" : {
- "balance" : "0x1",
- "code" : "0x3373fffffffffffffffffffffffffffffffffffffffe14604457602036146024575f5ffd5b620180005f350680545f35146037575f5ffd5b6201800001545f5260205ff35b6201800042064281555f359062018000015500",
- "nonce" : "0x00",
- "storage" : {
- }
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/29/env.json b/cmd/evm/testdata/29/env.json
deleted file mode 100644
index e752a909ad..0000000000
--- a/cmd/evm/testdata/29/env.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "currentNumber" : "0x01",
- "currentTimestamp" : "0x079e",
- "currentGasLimit" : "0x7fffffffffffffff",
- "previousHash" : "0x3a9b485972e7353edd9152712492f0c58d89ef80623686b6bf947a4a6dce6cb6",
- "currentBlobGasUsed" : "0x00",
- "parentTimestamp" : "0x03b6",
- "parentDifficulty" : "0x00",
- "parentUncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "currentRandom" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "withdrawals" : [
- ],
- "parentBaseFee" : "0x0a",
- "parentGasUsed" : "0x00",
- "parentGasLimit" : "0x7fffffffffffffff",
- "parentExcessBlobGas" : "0x00",
- "parentBlobGasUsed" : "0x00",
- "parentBeaconBlockRoot": "0x0000beac00beac00beac00beac00beac00beac00beac00beac00beac00beac00"
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/29/exp.json b/cmd/evm/testdata/29/exp.json
deleted file mode 100644
index c4c001ec14..0000000000
--- a/cmd/evm/testdata/29/exp.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "alloc": {
- "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": {
- "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604457602036146024575f5ffd5b620180005f350680545f35146037575f5ffd5b6201800001545f5260205ff35b6201800042064281555f359062018000015500",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000079e": "0x000000000000000000000000000000000000000000000000000000000000079e",
- "0x000000000000000000000000000000000000000000000000000000000001879e": "0x0000beac00beac00beac00beac00beac00beac00beac00beac00beac00beac00"
- },
- "balance": "0x1"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x16345785d871db8",
- "nonce": "0x1"
- }
- },
- "result": {
- "stateRoot": "0x19a4f821a7c0a6f4c934f9acb0fe9ce5417b68086e12513ecbc3e3f57e01573c",
- "txRoot": "0x248074fabe112f7d93917f292b64932394f835bb98da91f21501574d58ec92ab",
- "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [
- {
- "type": "0x2",
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0x5208",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x84f70aba406a55628a0620f26d260f90aeb6ccc55fed6ec2ac13dd4f727032ed",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x5208",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x0"
- }
- ],
- "currentDifficulty": null,
- "gasUsed": "0x5208",
- "currentBaseFee": "0x9",
- "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "currentExcessBlobGas": "0x0",
- "blobGasUsed": "0x0"
- }
-}
diff --git a/cmd/evm/testdata/29/readme.md b/cmd/evm/testdata/29/readme.md
deleted file mode 100644
index ab02ce9cf8..0000000000
--- a/cmd/evm/testdata/29/readme.md
+++ /dev/null
@@ -1,29 +0,0 @@
-## EIP 4788
-
-This test contains testcases for EIP-4788. The 4788-contract is
-located at address `0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02`, and this test executes a simple transaction. It also
-implicitly invokes the system tx, which sets calls the contract and sets the
-storage values
-
-```
-$ dir=./testdata/29/ && go run . t8n --state.fork=Cancun --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --output.alloc=stdout
-INFO [09-27|15:34:53.049] Trie dumping started root=19a4f8..01573c
-INFO [09-27|15:34:53.049] Trie dumping complete accounts=2 elapsed="192.759µs"
-INFO [09-27|15:34:53.050] Wrote file file=result.json
-{
- "alloc": {
- "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": {
- "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604457602036146024575f5ffd5b620180005f350680545f35146037575f5ffd5b6201800001545f5260205ff35b6201800042064281555f359062018000015500",
- "storage": {
- "0x000000000000000000000000000000000000000000000000000000000000079e": "0x000000000000000000000000000000000000000000000000000000000000079e",
- "0x000000000000000000000000000000000000000000000000000000000001879e": "0x0000beac00beac00beac00beac00beac00beac00beac00beac00beac00beac00"
- },
- "balance": "0x1"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x16345785d871db8",
- "nonce": "0x1"
- }
- }
-}
-```
diff --git a/cmd/evm/testdata/29/txs.json b/cmd/evm/testdata/29/txs.json
deleted file mode 100644
index d6743cc4d2..0000000000
--- a/cmd/evm/testdata/29/txs.json
+++ /dev/null
@@ -1,19 +0,0 @@
-[
- {
- "input" : "0x",
- "gas" : "0x10000000",
- "nonce" : "0x0",
- "to" : "0x1111111111111111111111111111111111111111",
- "value" : "0x0",
- "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
- "chainId" : "0x1",
- "type" : "0x2",
- "v": "0x0",
- "r": "0x0",
- "s": "0x0",
- "maxFeePerGas" : "0xfa0",
- "maxPriorityFeePerGas" : "0x0",
- "accessList" : [
- ]
- }
-]
\ No newline at end of file
diff --git a/cmd/evm/testdata/3/alloc.json b/cmd/evm/testdata/3/alloc.json
deleted file mode 100644
index dca318ee54..0000000000
--- a/cmd/evm/testdata/3/alloc.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
- "balance" : "0x0de0b6b3a7640000",
- "code" : "0x600140",
- "nonce" : "0x00",
- "storage" : {
- }
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x0de0b6b3a7640000",
- "code" : "0x",
- "nonce" : "0x00",
- "storage" : {
- }
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/3/env.json b/cmd/evm/testdata/3/env.json
deleted file mode 100644
index e283eff461..0000000000
--- a/cmd/evm/testdata/3/env.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "currentDifficulty" : "0x020000",
- "currentGasLimit" : "0x3b9aca00",
- "currentNumber" : "0x05",
- "currentTimestamp" : "0x03e8",
- "blockHashes" : { "1" : "0xdac58aa524e50956d0c0bae7f3f8bb9d35381365d07804dd5b48a5a297c06af4"}
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/3/exp.json b/cmd/evm/testdata/3/exp.json
deleted file mode 100644
index 7230dca2cf..0000000000
--- a/cmd/evm/testdata/3/exp.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "alloc": {
- "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {
- "code": "0x600140",
- "balance": "0xde0b6b3a76586a0"
- },
- "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": {
- "balance": "0x521f"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0xde0b6b3a7622741",
- "nonce": "0x1"
- }
- },
- "result": {
- "stateRoot": "0xb7341da3f9f762a6884eaa186c32942734c146b609efee11c4b0214c44857ea1",
- "txRoot": "0x75e61774a2ff58cbe32653420256c7f44bc715715a423b0b746d5c622979af6b",
- "receiptsRoot": "0xd0d26df80374a327c025d405ebadc752b1bbd089d864801ae78ab704bcad8086",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [
- {
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0x521f",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x521f",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x0"
- }
- ],
- "currentDifficulty": "0x20000",
- "gasUsed": "0x521f"
- }
-}
diff --git a/cmd/evm/testdata/3/readme.md b/cmd/evm/testdata/3/readme.md
deleted file mode 100644
index 246c58ef3b..0000000000
--- a/cmd/evm/testdata/3/readme.md
+++ /dev/null
@@ -1,2 +0,0 @@
-These files exemplify a transition where a transaction (executed on block 5) requests
-the blockhash for block `1`.
diff --git a/cmd/evm/testdata/3/txs.json b/cmd/evm/testdata/3/txs.json
deleted file mode 100644
index 3044458588..0000000000
--- a/cmd/evm/testdata/3/txs.json
+++ /dev/null
@@ -1,14 +0,0 @@
-[
- {
- "input" : "0x",
- "gas" : "0x5f5e100",
- "gasPrice" : "0x1",
- "nonce" : "0x0",
- "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87",
- "value" : "0x186a0",
- "v" : "0x1b",
- "r" : "0x88544c93a564b4c28d2ffac2074a0c55fdd4658fe0d215596ed2e32e3ef7f56b",
- "s" : "0x7fb4075d54190f825d7c47bb820284757b34fd6293904a93cddb1d3aa961ac28",
- "hash" : "0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81"
- }
-]
\ No newline at end of file
diff --git a/cmd/evm/testdata/30/README.txt b/cmd/evm/testdata/30/README.txt
deleted file mode 100644
index 84c92de853..0000000000
--- a/cmd/evm/testdata/30/README.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-This example comes from https://github.com/ethereum/go-ethereum/issues/27730.
-The input transactions contain three transactions, number `0` and `2` are taken from
-`testdata/13`, whereas number `1` is taken from #27730.
-
-The problematic second transaction cannot be RLP-decoded, and the expectation is
-that that particular transaction should be rejected, but number `0` and `1` should
-still be accepted.
-
-```
-$ go run . t8n --input.alloc=./testdata/30/alloc.json --input.txs=./testdata/30/txs_more.rlp --input.env=./testdata/30/env.json --output.result=stdout --output.alloc=stdout --state.fork=Cancun
-WARN [10-22|15:38:03.283] rejected tx index=1 error="rlp: input string too short for common.Address, decoding into (types.Transaction)(types.BlobTx).To"
-INFO [10-22|15:38:03.284] Trie dumping started root=348312..915c93
-INFO [10-22|15:38:03.284] Trie dumping complete accounts=3 elapsed="160.831µs"
-{
- "alloc": {
- "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {
- "code": "0x60004960005500",
- "balance": "0xde0b6b3a7640000"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0xde0b6b3a7640000"
- },
- "0xd02d72e067e77158444ef2020ff2d325f929b363": {
- "balance": "0xfffffffb8390",
- "nonce": "0x3"
- }
- },
- "result": {
- "stateRoot": "0x3483124b6710486c9fb3e07975669c66924697c88cccdcc166af5e1218915c93",
- "txRoot": "0x013509c8563d41c0ae4bf38f2d6d19fc6512a1d0d6be045079c8c9f68bf45f9d",
- "receiptsRoot": "0x75308898d571eafb5cd8cde8278bf5b3d13c5f6ec074926de3bb895b519264e1",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [
- {
- "type": "0x2",
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0x5208",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x5208",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x0"
- },
- {
- "type": "0x2",
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0xa410",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x5208",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x1"
- }
- ],
- "rejected": [
- {
- "index": 1,
- "error": "rlp: input string too short for common.Address, decoding into (types.Transaction)(types.BlobTx).To"
- }
- ],
- "currentDifficulty": null,
- "gasUsed": "0xa410",
- "currentBaseFee": "0x7",
- "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
- }
-}
-
-```
\ No newline at end of file
diff --git a/cmd/evm/testdata/30/alloc.json b/cmd/evm/testdata/30/alloc.json
deleted file mode 100644
index 6bc93d2552..0000000000
--- a/cmd/evm/testdata/30/alloc.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
- "balance" : "0x0de0b6b3a7640000",
- "code" : "0x60004960005500",
- "nonce" : "0x00",
- "storage" : {
- }
- },
- "0xd02d72e067e77158444ef2020ff2d325f929b363" : {
- "balance": "0x01000000000000",
- "code": "0x",
- "nonce": "0x01",
- "storage": {
- }
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x0de0b6b3a7640000",
- "code" : "0x",
- "nonce" : "0x00",
- "storage" : {
- }
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/30/env.json b/cmd/evm/testdata/30/env.json
deleted file mode 100644
index 4acd9794be..0000000000
--- a/cmd/evm/testdata/30/env.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "currentNumber" : "0x01",
- "currentTimestamp" : "0x03e8",
- "currentGasLimit" : "0x1000000000",
- "previousHash" : "0xe4e2a30b340bec696242b67584264f878600dce98354ae0b6328740fd4ff18da",
- "currentDataGasUsed" : "0x2000",
- "parentTimestamp" : "0x00",
- "parentDifficulty" : "0x00",
- "parentUncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "parentBeaconBlockRoot" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "currentRandom" : "0x0000000000000000000000000000000000000000000000000000000000020000",
- "withdrawals" : [
- ],
- "parentBaseFee" : "0x08",
- "parentGasUsed" : "0x00",
- "parentGasLimit" : "0x1000000000",
- "parentExcessBlobGas" : "0x1000",
- "parentBlobGasUsed" : "0x2000",
- "blockHashes" : {
- "0" : "0xe4e2a30b340bec696242b67584264f878600dce98354ae0b6328740fd4ff18da"
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/30/exp.json b/cmd/evm/testdata/30/exp.json
deleted file mode 100644
index f0b19c6b3d..0000000000
--- a/cmd/evm/testdata/30/exp.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "alloc": {
- "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {
- "code": "0x60004960005500",
- "balance": "0xde0b6b3a7640000"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0xde0b6b3a7640000"
- },
- "0xd02d72e067e77158444ef2020ff2d325f929b363": {
- "balance": "0xfffffffb8390",
- "nonce": "0x3"
- }
- },
- "result": {
- "stateRoot": "0x3483124b6710486c9fb3e07975669c66924697c88cccdcc166af5e1218915c93",
- "txRoot": "0x013509c8563d41c0ae4bf38f2d6d19fc6512a1d0d6be045079c8c9f68bf45f9d",
- "receiptsRoot": "0x75308898d571eafb5cd8cde8278bf5b3d13c5f6ec074926de3bb895b519264e1",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [
- {
- "type": "0x2",
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0x5208",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x5208",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x0"
- },
- {
- "type": "0x2",
- "root": "0x",
- "status": "0x1",
- "cumulativeGasUsed": "0xa410",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "logs": null,
- "transactionHash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a",
- "contractAddress": "0x0000000000000000000000000000000000000000",
- "gasUsed": "0x5208",
- "effectiveGasPrice": null,
- "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
- "transactionIndex": "0x1"
- }
- ],
- "rejected": [
- {
- "index": 1,
- "error": "rlp: input string too short for common.Address, decoding into (types.Transaction)(types.BlobTx).To"
- }
- ],
- "currentDifficulty": null,
- "gasUsed": "0xa410",
- "currentBaseFee": "0x7",
- "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "currentExcessBlobGas": "0x0",
- "blobGasUsed": "0x0"
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/30/txs.rlp b/cmd/evm/testdata/30/txs.rlp
deleted file mode 100644
index 620c1a13ac..0000000000
--- a/cmd/evm/testdata/30/txs.rlp
+++ /dev/null
@@ -1 +0,0 @@
-"0xf8dbb8d903f8d601800285012a05f200833d090080830186a000f85bf85994095e7baea6a6c7c4c2dfeb977efac326af552d87f842a00000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010ae1a001a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d880a0fc12b67159a3567f8bdbc49e0be369a2e20e09d57a51c41310543a4128409464a02de0cfe5495c4f58ff60645ceda0afd67a4c90a70bc89fe207269435b35e5b67"
\ No newline at end of file
diff --git a/cmd/evm/testdata/30/txs_more.rlp b/cmd/evm/testdata/30/txs_more.rlp
deleted file mode 100644
index 35af8d1f23..0000000000
--- a/cmd/evm/testdata/30/txs_more.rlp
+++ /dev/null
@@ -1 +0,0 @@
-"0xf901adb86702f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904b8d903f8d601800285012a05f200833d090080830186a000f85bf85994095e7baea6a6c7c4c2dfeb977efac326af552d87f842a00000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010ae1a001a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d880a0fc12b67159a3567f8bdbc49e0be369a2e20e09d57a51c41310543a4128409464a02de0cfe5495c4f58ff60645ceda0afd67a4c90a70bc89fe207269435b35e5b67b86702f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9"
\ No newline at end of file
diff --git a/cmd/evm/testdata/4/alloc.json b/cmd/evm/testdata/4/alloc.json
deleted file mode 100644
index fadf2bdc4e..0000000000
--- a/cmd/evm/testdata/4/alloc.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
- "balance" : "0x0de0b6b3a7640000",
- "code" : "0x600340",
- "nonce" : "0x00",
- "storage" : {
- }
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x0de0b6b3a7640000",
- "code" : "0x",
- "nonce" : "0x00",
- "storage" : {
- }
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/4/env.json b/cmd/evm/testdata/4/env.json
deleted file mode 100644
index e283eff461..0000000000
--- a/cmd/evm/testdata/4/env.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "currentDifficulty" : "0x020000",
- "currentGasLimit" : "0x3b9aca00",
- "currentNumber" : "0x05",
- "currentTimestamp" : "0x03e8",
- "blockHashes" : { "1" : "0xdac58aa524e50956d0c0bae7f3f8bb9d35381365d07804dd5b48a5a297c06af4"}
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/4/readme.md b/cmd/evm/testdata/4/readme.md
deleted file mode 100644
index eede41a9fd..0000000000
--- a/cmd/evm/testdata/4/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-These files exemplify a transition where a transaction (executed on block 5) requests
-the blockhash for block `4`, but where the hash for that block is missing.
-It's expected that executing these should cause `exit` with errorcode `4`.
diff --git a/cmd/evm/testdata/4/txs.json b/cmd/evm/testdata/4/txs.json
deleted file mode 100644
index 3044458588..0000000000
--- a/cmd/evm/testdata/4/txs.json
+++ /dev/null
@@ -1,14 +0,0 @@
-[
- {
- "input" : "0x",
- "gas" : "0x5f5e100",
- "gasPrice" : "0x1",
- "nonce" : "0x0",
- "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87",
- "value" : "0x186a0",
- "v" : "0x1b",
- "r" : "0x88544c93a564b4c28d2ffac2074a0c55fdd4658fe0d215596ed2e32e3ef7f56b",
- "s" : "0x7fb4075d54190f825d7c47bb820284757b34fd6293904a93cddb1d3aa961ac28",
- "hash" : "0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81"
- }
-]
\ No newline at end of file
diff --git a/cmd/evm/testdata/5/alloc.json b/cmd/evm/testdata/5/alloc.json
deleted file mode 100644
index 9e26dfeeb6..0000000000
--- a/cmd/evm/testdata/5/alloc.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/cmd/evm/testdata/5/env.json b/cmd/evm/testdata/5/env.json
deleted file mode 100644
index 1085f63e62..0000000000
--- a/cmd/evm/testdata/5/env.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "currentCoinbase": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "currentDifficulty": "0x20000",
- "currentGasLimit": "0x750a163df65e8a",
- "currentNumber": "1",
- "currentTimestamp": "1000",
- "ommers": [
- {"delta": 1, "address": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" },
- {"delta": 2, "address": "0xcccccccccccccccccccccccccccccccccccccccc" }
- ]
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/5/exp.json b/cmd/evm/testdata/5/exp.json
deleted file mode 100644
index 7d715672c5..0000000000
--- a/cmd/evm/testdata/5/exp.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "alloc": {
- "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": {
- "balance": "0x88"
- },
- "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb": {
- "balance": "0x70"
- },
- "0xcccccccccccccccccccccccccccccccccccccccc": {
- "balance": "0x60"
- }
- },
- "result": {
- "stateRoot": "0xa7312add33811645c6aa65d928a1a4f49d65d448801912c069a0aa8fe9c1f393",
- "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
- "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
- "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "receipts": [],
- "currentDifficulty": "0x20000",
- "gasUsed": "0x0"
- }
-}
diff --git a/cmd/evm/testdata/5/readme.md b/cmd/evm/testdata/5/readme.md
deleted file mode 100644
index 1a84afaab6..0000000000
--- a/cmd/evm/testdata/5/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-These files exemplify a transition where there are no transactions, two ommers, at block `N-1` (delta 1) and `N-2` (delta 2).
\ No newline at end of file
diff --git a/cmd/evm/testdata/5/txs.json b/cmd/evm/testdata/5/txs.json
deleted file mode 100644
index fe51488c70..0000000000
--- a/cmd/evm/testdata/5/txs.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/cmd/evm/testdata/7/alloc.json b/cmd/evm/testdata/7/alloc.json
deleted file mode 100644
index cef1a25ff0..0000000000
--- a/cmd/evm/testdata/7/alloc.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x5ffd4878be161d74",
- "code": "0x",
- "nonce": "0xac",
- "storage": {}
- },
- "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192":{
- "balance": "0xfeedbead",
- "nonce" : "0x00"
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/7/env.json b/cmd/evm/testdata/7/env.json
deleted file mode 100644
index 8fd9bc041b..0000000000
--- a/cmd/evm/testdata/7/env.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b",
- "currentDifficulty": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020000",
- "currentGasLimit": "0x750a163df65e8a",
- "currentNumber": "5",
- "currentTimestamp": "1000"
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/7/readme.md b/cmd/evm/testdata/7/readme.md
deleted file mode 100644
index 59e0dbef99..0000000000
--- a/cmd/evm/testdata/7/readme.md
+++ /dev/null
@@ -1,375 +0,0 @@
-This is a test for HomesteadToDao, checking if the
-DAO-transition works
-
-Example:
-```
- ./evm t8n --input.alloc=./testdata/7/alloc.json --input.txs=./testdata/7/txs.json --input.env=./testdata/7/env.json --output.alloc=stdout --state.fork=HomesteadToDaoAt5
-INFO [03-09|10:47:37.255] Trie dumping started root=157847..2891b7
-INFO [03-09|10:47:37.256] Trie dumping complete accounts=120 elapsed="715.635µs"
-INFO [03-09|10:47:37.256] Wrote file file=result.json
-{
- "alloc": {
- "0x005f5cee7a43331d5a3d3eec71305925a62f34b6": {
- "balance": "0x0"
- },
- "0x0101f3be8ebb4bbd39a2e3b9a3639d4259832fd9": {
- "balance": "0x0"
- },
- "0x057b56736d32b86616a10f619859c6cd6f59092a": {
- "balance": "0x0"
- },
- "0x06706dd3f2c9abf0a21ddcc6941d9b86f0596936": {
- "balance": "0x0"
- },
- "0x0737a6b837f97f46ebade41b9bc3e1c509c85c53": {
- "balance": "0x0"
- },
- "0x07f5c1e1bc2c93e0402f23341973a0e043f7bf8a": {
- "balance": "0x0"
- },
- "0x0e0da70933f4c7849fc0d203f5d1d43b9ae4532d": {
- "balance": "0x0"
- },
- "0x0ff30d6de14a8224aa97b78aea5388d1c51c1f00": {
- "balance": "0x0"
- },
- "0x12e626b0eebfe86a56d633b9864e389b45dcb260": {
- "balance": "0x0"
- },
- "0x1591fc0f688c81fbeb17f5426a162a7024d430c2": {
- "balance": "0x0"
- },
- "0x17802f43a0137c506ba92291391a8a8f207f487d": {
- "balance": "0x0"
- },
- "0x1975bd06d486162d5dc297798dfc41edd5d160a7": {
- "balance": "0x0"
- },
- "0x1ca6abd14d30affe533b24d7a21bff4c2d5e1f3b": {
- "balance": "0x0"
- },
- "0x1cba23d343a983e9b5cfd19496b9a9701ada385f": {
- "balance": "0x0"
- },
- "0x200450f06520bdd6c527622a273333384d870efb": {
- "balance": "0x0"
- },
- "0x21c7fdb9ed8d291d79ffd82eb2c4356ec0d81241": {
- "balance": "0x0"
- },
- "0x23b75c2f6791eef49c69684db4c6c1f93bf49a50": {
- "balance": "0x0"
- },
- "0x24c4d950dfd4dd1902bbed3508144a54542bba94": {
- "balance": "0x0"
- },
- "0x253488078a4edf4d6f42f113d1e62836a942cf1a": {
- "balance": "0x0"
- },
- "0x27b137a85656544b1ccb5a0f2e561a5703c6a68f": {
- "balance": "0x0"
- },
- "0x2a5ed960395e2a49b1c758cef4aa15213cfd874c": {
- "balance": "0x0"
- },
- "0x2b3455ec7fedf16e646268bf88846bd7a2319bb2": {
- "balance": "0x0"
- },
- "0x2c19c7f9ae8b751e37aeb2d93a699722395ae18f": {
- "balance": "0x0"
- },
- "0x304a554a310c7e546dfe434669c62820b7d83490": {
- "balance": "0x0"
- },
- "0x319f70bab6845585f412ec7724b744fec6095c85": {
- "balance": "0x0"
- },
- "0x35a051a0010aba705c9008d7a7eff6fb88f6ea7b": {
- "balance": "0x0"
- },
- "0x3ba4d81db016dc2890c81f3acec2454bff5aada5": {
- "balance": "0x0"
- },
- "0x3c02a7bc0391e86d91b7d144e61c2c01a25a79c5": {
- "balance": "0x0"
- },
- "0x40b803a9abce16f50f36a77ba41180eb90023925": {
- "balance": "0x0"
- },
- "0x440c59b325d2997a134c2c7c60a8c61611212bad": {
- "balance": "0x0"
- },
- "0x4486a3d68fac6967006d7a517b889fd3f98c102b": {
- "balance": "0x0"
- },
- "0x4613f3bca5c44ea06337a9e439fbc6d42e501d0a": {
- "balance": "0x0"
- },
- "0x47e7aa56d6bdf3f36be34619660de61275420af8": {
- "balance": "0x0"
- },
- "0x4863226780fe7c0356454236d3b1c8792785748d": {
- "balance": "0x0"
- },
- "0x492ea3bb0f3315521c31f273e565b868fc090f17": {
- "balance": "0x0"
- },
- "0x4cb31628079fb14e4bc3cd5e30c2f7489b00960c": {
- "balance": "0x0"
- },
- "0x4deb0033bb26bc534b197e61d19e0733e5679784": {
- "balance": "0x0"
- },
- "0x4fa802324e929786dbda3b8820dc7834e9134a2a": {
- "balance": "0x0"
- },
- "0x4fd6ace747f06ece9c49699c7cabc62d02211f75": {
- "balance": "0x0"
- },
- "0x51e0ddd9998364a2eb38588679f0d2c42653e4a6": {
- "balance": "0x0"
- },
- "0x52c5317c848ba20c7504cb2c8052abd1fde29d03": {
- "balance": "0x0"
- },
- "0x542a9515200d14b68e934e9830d91645a980dd7a": {
- "balance": "0x0"
- },
- "0x5524c55fb03cf21f549444ccbecb664d0acad706": {
- "balance": "0x0"
- },
- "0x579a80d909f346fbfb1189493f521d7f48d52238": {
- "balance": "0x0"
- },
- "0x58b95c9a9d5d26825e70a82b6adb139d3fd829eb": {
- "balance": "0x0"
- },
- "0x5c6e67ccd5849c0d29219c4f95f1a7a93b3f5dc5": {
- "balance": "0x0"
- },
- "0x5c8536898fbb74fc7445814902fd08422eac56d0": {
- "balance": "0x0"
- },
- "0x5d2b2e6fcbe3b11d26b525e085ff818dae332479": {
- "balance": "0x0"
- },
- "0x5dc28b15dffed94048d73806ce4b7a4612a1d48f": {
- "balance": "0x0"
- },
- "0x5f9f3392e9f62f63b8eac0beb55541fc8627f42c": {
- "balance": "0x0"
- },
- "0x6131c42fa982e56929107413a9d526fd99405560": {
- "balance": "0x0"
- },
- "0x6231b6d0d5e77fe001c2a460bd9584fee60d409b": {
- "balance": "0x0"
- },
- "0x627a0a960c079c21c34f7612d5d230e01b4ad4c7": {
- "balance": "0x0"
- },
- "0x63ed5a272de2f6d968408b4acb9024f4cc208ebf": {
- "balance": "0x0"
- },
- "0x6966ab0d485353095148a2155858910e0965b6f9": {
- "balance": "0x0"
- },
- "0x6b0c4d41ba9ab8d8cfb5d379c69a612f2ced8ecb": {
- "balance": "0x0"
- },
- "0x6d87578288b6cb5549d5076a207456a1f6a63dc0": {
- "balance": "0x0"
- },
- "0x6f6704e5a10332af6672e50b3d9754dc460dfa4d": {
- "balance": "0x0"
- },
- "0x7602b46df5390e432ef1c307d4f2c9ff6d65cc97": {
- "balance": "0x0"
- },
- "0x779543a0491a837ca36ce8c635d6154e3c4911a6": {
- "balance": "0x0"
- },
- "0x77ca7b50b6cd7e2f3fa008e24ab793fd56cb15f6": {
- "balance": "0x0"
- },
- "0x782495b7b3355efb2833d56ecb34dc22ad7dfcc4": {
- "balance": "0x0"
- },
- "0x807640a13483f8ac783c557fcdf27be11ea4ac7a": {
- "balance": "0x0"
- },
- "0x8163e7fb499e90f8544ea62bbf80d21cd26d9efd": {
- "balance": "0x0"
- },
- "0x84ef4b2357079cd7a7c69fd7a37cd0609a679106": {
- "balance": "0x0"
- },
- "0x86af3e9626fce1957c82e88cbf04ddf3a2ed7915": {
- "balance": "0x0"
- },
- "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192": {
- "balance": "0xfeedbead"
- },
- "0x8d9edb3054ce5c5774a420ac37ebae0ac02343c6": {
- "balance": "0x0"
- },
- "0x914d1b8b43e92723e64fd0a06f5bdb8dd9b10c79": {
- "balance": "0x0"
- },
- "0x97f43a37f595ab5dd318fb46e7a155eae057317a": {
- "balance": "0x0"
- },
- "0x9aa008f65de0b923a2a4f02012ad034a5e2e2192": {
- "balance": "0x0"
- },
- "0x9c15b54878ba618f494b38f0ae7443db6af648ba": {
- "balance": "0x0"
- },
- "0x9c50426be05db97f5d64fc54bf89eff947f0a321": {
- "balance": "0x0"
- },
- "0x9da397b9e80755301a3b32173283a91c0ef6c87e": {
- "balance": "0x0"
- },
- "0x9ea779f907f0b315b364b0cfc39a0fde5b02a416": {
- "balance": "0x0"
- },
- "0x9f27daea7aca0aa0446220b98d028715e3bc803d": {
- "balance": "0x0"
- },
- "0x9fcd2deaff372a39cc679d5c5e4de7bafb0b1339": {
- "balance": "0x0"
- },
- "0xa2f1ccba9395d7fcb155bba8bc92db9bafaeade7": {
- "balance": "0x0"
- },
- "0xa3acf3a1e16b1d7c315e23510fdd7847b48234f6": {
- "balance": "0x0"
- },
- "0xa5dc5acd6a7968a4554d89d65e59b7fd3bff0f90": {
- "balance": "0x0"
- },
- "0xa82f360a8d3455c5c41366975bde739c37bfeb8a": {
- "balance": "0x0"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x5ffd4878be161d74",
- "nonce": "0xac"
- },
- "0xac1ecab32727358dba8962a0f3b261731aad9723": {
- "balance": "0x0"
- },
- "0xaccc230e8a6e5be9160b8cdf2864dd2a001c28b6": {
- "balance": "0x0"
- },
- "0xacd87e28b0c9d1254e868b81cba4cc20d9a32225": {
- "balance": "0x0"
- },
- "0xadf80daec7ba8dcf15392f1ac611fff65d94f880": {
- "balance": "0x0"
- },
- "0xaeeb8ff27288bdabc0fa5ebb731b6f409507516c": {
- "balance": "0x0"
- },
- "0xb136707642a4ea12fb4bae820f03d2562ebff487": {
- "balance": "0x0"
- },
- "0xb2c6f0dfbb716ac562e2d85d6cb2f8d5ee87603e": {
- "balance": "0x0"
- },
- "0xb3fb0e5aba0e20e5c49d252dfd30e102b171a425": {
- "balance": "0x0"
- },
- "0xb52042c8ca3f8aa246fa79c3feaa3d959347c0ab": {
- "balance": "0x0"
- },
- "0xb9637156d330c0d605a791f1c31ba5890582fe1c": {
- "balance": "0x0"
- },
- "0xbb9bc244d798123fde783fcc1c72d3bb8c189413": {
- "balance": "0x0"
- },
- "0xbc07118b9ac290e4622f5e77a0853539789effbe": {
- "balance": "0x0"
- },
- "0xbcf899e6c7d9d5a215ab1e3444c86806fa854c76": {
- "balance": "0x0"
- },
- "0xbe8539bfe837b67d1282b2b1d61c3f723966f049": {
- "balance": "0x0"
- },
- "0xbf4ed7b27f1d666546e30d74d50d173d20bca754": {
- "balance": "0x0"
- },
- "0xc4bbd073882dd2add2424cf47d35213405b01324": {
- "balance": "0x0"
- },
- "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x0"
- },
- "0xca544e5c4687d109611d0f8f928b53a25af72448": {
- "balance": "0x0"
- },
- "0xcbb9d3703e651b0d496cdefb8b92c25aeb2171f7": {
- "balance": "0x0"
- },
- "0xcc34673c6c40e791051898567a1222daf90be287": {
- "balance": "0x0"
- },
- "0xceaeb481747ca6c540a000c1f3641f8cef161fa7": {
- "balance": "0x0"
- },
- "0xd131637d5275fd1a68a3200f4ad25c71a2a9522e": {
- "balance": "0x0"
- },
- "0xd164b088bd9108b60d0ca3751da4bceb207b0782": {
- "balance": "0x0"
- },
- "0xd1ac8b1ef1b69ff51d1d401a476e7e612414f091": {
- "balance": "0x0"
- },
- "0xd343b217de44030afaa275f54d31a9317c7f441e": {
- "balance": "0x0"
- },
- "0xd4fe7bc31cedb7bfb8a345f31e668033056b2728": {
- "balance": "0x0"
- },
- "0xd9aef3a1e38a39c16b31d1ace71bca8ef58d315b": {
- "balance": "0x0"
- },
- "0xda2fef9e4a3230988ff17df2165440f37e8b1708": {
- "balance": "0x0"
- },
- "0xdbe9b615a3ae8709af8b93336ce9b477e4ac0940": {
- "balance": "0x0"
- },
- "0xe308bd1ac5fda103967359b2712dd89deffb7973": {
- "balance": "0x0"
- },
- "0xe4ae1efdfc53b73893af49113d8694a057b9c0d1": {
- "balance": "0x0"
- },
- "0xec8e57756626fdc07c63ad2eafbd28d08e7b0ca5": {
- "balance": "0x0"
- },
- "0xecd135fa4f61a655311e86238c92adcd779555d2": {
- "balance": "0x0"
- },
- "0xf0b1aa0eb660754448a7937c022e30aa692fe0c5": {
- "balance": "0x0"
- },
- "0xf1385fb24aad0cd7432824085e42aff90886fef5": {
- "balance": "0x0"
- },
- "0xf14c14075d6c4ed84b86798af0956deef67365b5": {
- "balance": "0x0"
- },
- "0xf4c64518ea10f995918a454158c6b61407ea345c": {
- "balance": "0x0"
- },
- "0xfe24cdd8648121a43a7c86d289be4dd2951ed49f": {
- "balance": "0x0"
- }
- }
-}
-```
\ No newline at end of file
diff --git a/cmd/evm/testdata/7/txs.json b/cmd/evm/testdata/7/txs.json
deleted file mode 100644
index fe51488c70..0000000000
--- a/cmd/evm/testdata/7/txs.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/cmd/evm/testdata/8/alloc.json b/cmd/evm/testdata/8/alloc.json
deleted file mode 100644
index 1d1b5f86c6..0000000000
--- a/cmd/evm/testdata/8/alloc.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "0x000000000000000000000000000000000000aaaa": {
- "balance": "0x03",
- "code": "0x5854505854",
- "nonce": "0x1"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x100000",
- "nonce": "0x00"
- }
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/8/env.json b/cmd/evm/testdata/8/env.json
deleted file mode 100644
index 8b91934724..0000000000
--- a/cmd/evm/testdata/8/env.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "currentDifficulty": "0x20000",
- "currentGasLimit": "0x1000000000",
- "currentNumber": "0x1000000",
- "currentTimestamp": "0x04"
-}
\ No newline at end of file
diff --git a/cmd/evm/testdata/8/readme.md b/cmd/evm/testdata/8/readme.md
deleted file mode 100644
index 85aae18924..0000000000
--- a/cmd/evm/testdata/8/readme.md
+++ /dev/null
@@ -1,59 +0,0 @@
-## EIP-2930 testing
-
-This test contains testcases for EIP-2930, which uses transactions with access lists.
-
-### Prestate
-
-The alloc portion contains one contract (`0x000000000000000000000000000000000000aaaa`), containing the
-following code: `0x5854505854`: `PC ;SLOAD; POP; PC; SLOAD`.
-
-Essentially, this contract does `SLOAD(0)` and `SLOAD(3)`.
-
-The alloc also contains some funds on `0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b`.
-
-## Transactions
-
-There are three transactions, each invokes the contract above.
-
-1. ACL-transaction, which contains some non-used slots
-2. Regular transaction
-3. ACL-transaction, which contains the slots `1` and `3` in `0x000000000000000000000000000000000000aaaa`
-
-## Execution
-
-Running it yields:
-```
-dir=./testdata/8 && ./evm t8n --state.fork=Berlin --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --trace 2>/dev/null && cat trace-* | grep SLOAD
-{"pc":1,"op":84,"gas":"0x484be","gasCost":"0x834","memSize":0,"stack":["0x0"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":4,"op":84,"gas":"0x47c86","gasCost":"0x834","memSize":0,"stack":["0x3"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":1,"op":84,"gas":"0x49cf6","gasCost":"0x834","memSize":0,"stack":["0x0"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":4,"op":84,"gas":"0x494be","gasCost":"0x834","memSize":0,"stack":["0x3"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":1,"op":84,"gas":"0x484be","gasCost":"0x64","memSize":0,"stack":["0x0"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":4,"op":84,"gas":"0x48456","gasCost":"0x64","memSize":0,"stack":["0x3"],"depth":1,"refund":0,"opName":"SLOAD"}
-```
-
-Similarly, we can provide the input transactions via `stdin` instead of as file:
-
-```
-$ dir=./testdata/8 \
- && cat $dir/txs.json | jq "{txs: .}" \
- | ./evm t8n --state.fork=Berlin \
- --input.alloc=$dir/alloc.json \
- --input.txs=stdin \
- --input.env=$dir/env.json \
- --trace \
- 2>/dev/null \
- && cat trace-* | grep SLOAD
-{"pc":1,"op":84,"gas":"0x484be","gasCost":"0x834","memSize":0,"stack":["0x0"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":4,"op":84,"gas":"0x47c86","gasCost":"0x834","memSize":0,"stack":["0x3"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":1,"op":84,"gas":"0x49cf6","gasCost":"0x834","memSize":0,"stack":["0x0"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":4,"op":84,"gas":"0x494be","gasCost":"0x834","memSize":0,"stack":["0x3"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":1,"op":84,"gas":"0x484be","gasCost":"0x64","memSize":0,"stack":["0x0"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":4,"op":84,"gas":"0x48456","gasCost":"0x64","memSize":0,"stack":["0x3"],"depth":1,"refund":0,"opName":"SLOAD"}
-```
-
-If we try to execute it on older rules:
-```
-$ dir=./testdata/8 && ./evm t8n --state.fork=Istanbul --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json
-ERROR(10): failed signing transactions: ERROR(10): tx 0: failed to sign tx: transaction type not supported
-```
diff --git a/cmd/evm/testdata/8/txs.json b/cmd/evm/testdata/8/txs.json
deleted file mode 100644
index 35142ba234..0000000000
--- a/cmd/evm/testdata/8/txs.json
+++ /dev/null
@@ -1,58 +0,0 @@
-[
- {
- "gas": "0x4ef00",
- "gasPrice": "0x1",
- "chainId": "0x1",
- "input": "0x",
- "nonce": "0x0",
- "to": "0x000000000000000000000000000000000000aaaa",
- "value": "0x1",
- "type" : "0x1",
- "accessList": [
- {"address": "0x0000000000000000000000000000000000000000",
- "storageKeys": [
- "0x0000000000000000000000000000000000000000000000000000000000000000",
- "0x0000000000000000000000000000000000000000000000000000000000000000"
- ]
- }
- ],
- "v": "0x0",
- "r": "0x0",
- "s": "0x0",
- "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8"
- },
- {
- "gas": "0x4ef00",
- "gasPrice": "0x1",
- "input": "0x",
- "nonce": "0x1",
- "to": "0x000000000000000000000000000000000000aaaa",
- "value": "0x2",
- "v": "0x0",
- "r": "0x0",
- "s": "0x0",
- "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8"
- },
- {
- "gas": "0x4ef00",
- "gasPrice": "0x1",
- "chainId": "0x1",
- "input": "0x",
- "nonce": "0x2",
- "to": "0x000000000000000000000000000000000000aaaa",
- "value": "0x1",
- "type" : "0x1",
- "accessList": [
- {"address": "0x000000000000000000000000000000000000aaaa",
- "storageKeys": [
- "0x0000000000000000000000000000000000000000000000000000000000000000",
- "0x0000000000000000000000000000000000000000000000000000000000000003"
- ]
- }
- ],
- "v": "0x0",
- "r": "0x0",
- "s": "0x0",
- "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8"
- }
-]
diff --git a/cmd/evm/testdata/9/alloc.json b/cmd/evm/testdata/9/alloc.json
deleted file mode 100644
index c14e38e845..0000000000
--- a/cmd/evm/testdata/9/alloc.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "0x000000000000000000000000000000000000aaaa": {
- "balance": "0x03",
- "code": "0x58585454",
- "nonce": "0x1"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0x100000000000000",
- "nonce": "0x00"
- }
-}
diff --git a/cmd/evm/testdata/9/env.json b/cmd/evm/testdata/9/env.json
deleted file mode 100644
index 082bff778a..0000000000
--- a/cmd/evm/testdata/9/env.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
- "currentDifficulty": "0x20000",
- "currentGasLimit": "0x1000000000",
- "currentBaseFee": "0x3B9ACA00",
- "currentNumber": "0x1000000",
- "currentTimestamp": "0x04"
-}
diff --git a/cmd/evm/testdata/9/readme.md b/cmd/evm/testdata/9/readme.md
deleted file mode 100644
index 357e200682..0000000000
--- a/cmd/evm/testdata/9/readme.md
+++ /dev/null
@@ -1,79 +0,0 @@
-## EIP-1559 testing
-
-This test contains testcases for EIP-1559, which uses a new transaction type and has a new block parameter.
-
-### Prestate
-
-The alloc portion contains one contract (`0x000000000000000000000000000000000000aaaa`), containing the
-following code: `0x58585454`: `PC; PC; SLOAD; SLOAD`.
-
-Essentially, this contract does `SLOAD(0)` and `SLOAD(1)`.
-
-The alloc also contains some funds on `0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b`.
-
-## Transactions
-
-There are two transactions, each invokes the contract above.
-
-1. EIP-1559 ACL-transaction, which contains the `0x0` slot for `0xaaaa`
-2. Legacy transaction
-
-## Execution
-
-Running it yields:
-```
-$ dir=./testdata/9 && ./evm t8n --state.fork=London --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --trace 2>/dev/null && cat trace-* | grep SLOAD
-{"pc":1,"op":84,"gas":"0x484be","gasCost":"0x834","memSize":0,"stack":["0x0"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":4,"op":84,"gas":"0x47c86","gasCost":"0x834","memSize":0,"stack":["0x3"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":2,"op":84,"gas":"0x48c28","gasCost":"0x834","memSize":0,"stack":["0x0","0x1"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":3,"op":84,"gas":"0x483f4","gasCost":"0x64","memSize":0,"stack":["0x0","0x0"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":1,"op":84,"gas":"0x49cf6","gasCost":"0x834","memSize":0,"stack":["0x0"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":4,"op":84,"gas":"0x494be","gasCost":"0x834","memSize":0,"stack":["0x3"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":2,"op":84,"gas":"0x49cf4","gasCost":"0x834","memSize":0,"stack":["0x0","0x1"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":3,"op":84,"gas":"0x494c0","gasCost":"0x834","memSize":0,"stack":["0x0","0x0"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":1,"op":84,"gas":"0x484be","gasCost":"0x64","memSize":0,"stack":["0x0"],"depth":1,"refund":0,"opName":"SLOAD"}
-{"pc":4,"op":84,"gas":"0x48456","gasCost":"0x64","memSize":0,"stack":["0x3"],"depth":1,"refund":0,"opName":"SLOAD"}
-```
-
-We can also get the post-alloc:
-```
-$ dir=./testdata/9 && ./evm t8n --state.fork=London --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --output.alloc=stdout 2>/dev/null
-{
- "alloc": {
- "0x000000000000000000000000000000000000aaaa": {
- "code": "0x58585454",
- "balance": "0x3",
- "nonce": "0x1"
- },
- "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": {
- "balance": "0x5bb10ddef6e0"
- },
- "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
- "balance": "0xff745ee8832120",
- "nonce": "0x2"
- }
- }
-}
-```
-
-If we try to execute it on older rules:
-```
-dir=./testdata/9 && ./evm t8n --state.fork=Berlin --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --output.alloc=stdout
-ERROR(10): Failed signing transactions: ERROR(10): Tx 0: failed to sign tx: transaction type not supported
-```
-
-It fails, due to the `evm t8n` cannot sign them in with the given signer. We can bypass that, however,
-by feeding it presigned transactions, located in `txs_signed.json`.
-
-```
-dir=./testdata/9 && ./evm t8n --state.fork=Berlin --input.alloc=$dir/alloc.json --input.txs=$dir/txs_signed.json --input.env=$dir/env.json
-WARN [03-09|11:06:22.065] rejected tx index=0 hash=334e09..f8dce5 error="transaction type not supported"
-INFO [03-09|11:06:22.066] rejected tx index=1 hash=a9c6c6..fa4036 from=0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B error="nonce too high: address 0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B, tx: 1 state: 0"
-INFO [03-09|11:06:22.066] Trie dumping started root=6eebe9..a0fda5
-INFO [03-09|11:06:22.066] Trie dumping complete accounts=2 elapsed="55.844µs"
-INFO [03-09|11:06:22.066] Wrote file file=alloc.json
-INFO [03-09|11:06:22.066] Wrote file file=result.json
-```
-
-Number `0` is not applicable, and therefore number `1` has wrong nonce, and both are rejected.
-
diff --git a/cmd/evm/testdata/9/txs.json b/cmd/evm/testdata/9/txs.json
deleted file mode 100644
index 740abce079..0000000000
--- a/cmd/evm/testdata/9/txs.json
+++ /dev/null
@@ -1,37 +0,0 @@
-[
- {
- "gas": "0x4ef00",
- "maxPriorityFeePerGas": "0x2",
- "maxFeePerGas": "0x12A05F200",
- "chainId": "0x1",
- "input": "0x",
- "nonce": "0x0",
- "to": "0x000000000000000000000000000000000000aaaa",
- "value": "0x0",
- "type" : "0x2",
- "accessList": [
- {"address": "0x000000000000000000000000000000000000aaaa",
- "storageKeys": [
- "0x0000000000000000000000000000000000000000000000000000000000000000"
- ]
- }
- ],
- "v": "0x0",
- "r": "0x0",
- "s": "0x0",
- "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8"
- },
- {
- "gas": "0x4ef00",
- "gasPrice": "0x12A05F200",
- "chainId": "0x1",
- "input": "0x",
- "nonce": "0x1",
- "to": "0x000000000000000000000000000000000000aaaa",
- "value": "0x0",
- "v": "0x0",
- "r": "0x0",
- "s": "0x0",
- "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8"
- }
-]
diff --git a/cmd/evm/testdata/9/txs_signed.json b/cmd/evm/testdata/9/txs_signed.json
deleted file mode 100644
index dcddf011b4..0000000000
--- a/cmd/evm/testdata/9/txs_signed.json
+++ /dev/null
@@ -1,37 +0,0 @@
-[
- {
- "gas": "0x4ef00",
- "maxFeePerGas": "0x2",
- "maxPriorityFeePerGas": "0x12A05F200",
- "chainId": "0x1",
- "input": "0x",
- "nonce": "0x0",
- "to": "0x000000000000000000000000000000000000aaaa",
- "value": "0x0",
- "type" : "0x2",
- "accessList": [
- {"address": "0x000000000000000000000000000000000000aaaa",
- "storageKeys": [
- "0x0000000000000000000000000000000000000000000000000000000000000000"
- ]
- }
- ],
- "v": "0x1",
- "r": "0xd77c8ff989789b5d9d99254cbae2e2996dc7e6215cba4d55254c14e6d6b9f314",
- "s": "0x5cc021481e7e6bb444bbb87ab32071e8fd0a8d1e125c7bb352d2879bd7ff5c0a",
- "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8"
- },
- {
- "gas": "0x4ef00",
- "gasPrice": "0x12A05F200",
- "chainId": "0x1",
- "input": "0x",
- "nonce": "0x1",
- "to": "0x000000000000000000000000000000000000aaaa",
- "value": "0x0",
- "v": "0x25",
- "r": "0xbee5ec9f6650020266bf3455a852eece2b073a2fa918c4d1836a1af69c2aa50c",
- "s": "0x556c897a58dbc007a6b09814e1fba7502adb76effd2146da4365816926f387ce",
- "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8"
- }
-]
diff --git a/cmd/evm/transition-test.sh b/cmd/evm/transition-test.sh
deleted file mode 100644
index 8cc6aa41de..0000000000
--- a/cmd/evm/transition-test.sh
+++ /dev/null
@@ -1,518 +0,0 @@
-#!/bin/bash
-ticks="\`\`\`"
-
-function showjson(){
- echo "\`$1\`:"
- echo "${ticks}json"
- cat $1
- echo ""
- echo "$ticks"
-}
-function demo(){
- echo "$ticks"
- echo "$1"
- $1
- echo ""
- echo "$ticks"
- echo ""
-}
-function tick(){
- echo "$ticks"
-}
-
-function code(){
- echo "$ticks$1"
-}
-
-cat << "EOF"
-# EVM tool
-
-The EVM tool provides a few useful subcommands to facilitate testing at the EVM
-layer.
-
-* transition tool (`t8n`) : a stateless state transition utility
-* transaction tool (`t9n`) : a transaction validation utility
-* block builder tool (`b11r`): a block assembler utility
-
-## State transition tool (`t8n`)
-
-
-The `evm t8n` tool is a stateless state transition utility. It is a utility
-which can
-
-1. Take a prestate, including
- - Accounts,
- - Block context information,
- - Previous blockshashes (*optional)
-2. Apply a set of transactions,
-3. Apply a mining-reward (*optional),
-4. And generate a post-state, including
- - State root, transaction root, receipt root,
- - Information about rejected transactions,
- - Optionally: a full or partial post-state dump
-
-### Specification
-
-The idea is to specify the behaviour of this binary very _strict_, so that other
-node implementors can build replicas based on their own state-machines, and the
-state generators can swap between a \`geth\`-based implementation and a \`parityvm\`-based
-implementation.
-
-#### Command line params
-
-Command line params that need to be supported are
-
-```
-EOF
-./evm t8n -h | grep "\-\-trace\.\|\-\-output\.\|\-\-state\.\|\-\-input"
-cat << "EOF"
-```
-#### Objects
-
-The transition tool uses JSON objects to read and write data related to the transition operation. The
-following object definitions are required.
-
-##### `alloc`
-
-The `alloc` object defines the prestate that transition will begin with.
-
-```go
-// Map of address to account definition.
-type Alloc map[common.Address]Account
-// Genesis account. Each field is optional.
-type Account struct {
- Code []byte `json:"code"`
- Storage map[common.Hash]common.Hash `json:"storage"`
- Balance *big.Int `json:"balance"`
- Nonce uint64 `json:"nonce"`
- SecretKey []byte `json:"secretKey"`
-}
-```
-
-##### `env`
-
-The `env` object defines the environmental context in which the transition will
-take place.
-
-```go
-type Env struct {
- // required
- CurrentCoinbase common.Address `json:"currentCoinbase"`
- CurrentGasLimit uint64 `json:"currentGasLimit"`
- CurrentNumber uint64 `json:"currentNumber"`
- CurrentTimestamp uint64 `json:"currentTimestamp"`
- Withdrawals []*Withdrawal `json:"withdrawals"`
- // optional
- CurrentDifficulty *big.Int `json:"currentDifficuly"`
- CurrentRandom *big.Int `json:"currentRandom"`
- CurrentBaseFee *big.Int `json:"currentBaseFee"`
- ParentDifficulty *big.Int `json:"parentDifficulty"`
- ParentGasUsed uint64 `json:"parentGasUsed"`
- ParentGasLimit uint64 `json:"parentGasLimit"`
- ParentTimestamp uint64 `json:"parentTimestamp"`
- BlockHashes map[uint64]common.Hash `json:"blockHashes"`
- ParentUncleHash common.Hash `json:"parentUncleHash"`
- Ommers []Ommer `json:"ommers"`
-}
-type Ommer struct {
- Delta uint64 `json:"delta"`
- Address common.Address `json:"address"`
-}
-type Withdrawal struct {
- Index uint64 `json:"index"`
- ValidatorIndex uint64 `json:"validatorIndex"`
- Recipient common.Address `json:"recipient"`
- Amount *big.Int `json:"amount"`
-}
-```
-
-##### `txs`
-
-The `txs` object is an array of any of the transaction types: `LegacyTx`,
-`AccessListTx`, or `DynamicFeeTx`.
-
-```go
-type LegacyTx struct {
- Nonce uint64 `json:"nonce"`
- GasPrice *big.Int `json:"gasPrice"`
- Gas uint64 `json:"gas"`
- To *common.Address `json:"to"`
- Value *big.Int `json:"value"`
- Data []byte `json:"data"`
- V *big.Int `json:"v"`
- R *big.Int `json:"r"`
- S *big.Int `json:"s"`
- SecretKey *common.Hash `json:"secretKey"`
-}
-type AccessList []AccessTuple
-type AccessTuple struct {
- Address common.Address `json:"address" gencodec:"required"`
- StorageKeys []common.Hash `json:"storageKeys" gencodec:"required"`
-}
-type AccessListTx struct {
- ChainID *big.Int `json:"chainId"`
- Nonce uint64 `json:"nonce"`
- GasPrice *big.Int `json:"gasPrice"`
- Gas uint64 `json:"gas"`
- To *common.Address `json:"to"`
- Value *big.Int `json:"value"`
- Data []byte `json:"data"`
- AccessList AccessList `json:"accessList"`
- V *big.Int `json:"v"`
- R *big.Int `json:"r"`
- S *big.Int `json:"s"`
- SecretKey *common.Hash `json:"secretKey"`
-}
-type DynamicFeeTx struct {
- ChainID *big.Int `json:"chainId"`
- Nonce uint64 `json:"nonce"`
- GasTipCap *big.Int `json:"maxPriorityFeePerGas"`
- GasFeeCap *big.Int `json:"maxFeePerGas"`
- Gas uint64 `json:"gas"`
- To *common.Address `json:"to"`
- Value *big.Int `json:"value"`
- Data []byte `json:"data"`
- AccessList AccessList `json:"accessList"`
- V *big.Int `json:"v"`
- R *big.Int `json:"r"`
- S *big.Int `json:"s"`
- SecretKey *common.Hash `json:"secretKey"`
-}
-```
-
-##### `result`
-
-The `result` object is output after a transition is executed. It includes
-information about the post-transition environment.
-
-```go
-type ExecutionResult struct {
- StateRoot common.Hash `json:"stateRoot"`
- TxRoot common.Hash `json:"txRoot"`
- ReceiptRoot common.Hash `json:"receiptsRoot"`
- LogsHash common.Hash `json:"logsHash"`
- Bloom types.Bloom `json:"logsBloom"`
- Receipts types.Receipts `json:"receipts"`
- Rejected []*rejectedTx `json:"rejected,omitempty"`
- Difficulty *big.Int `json:"currentDifficulty"`
- GasUsed uint64 `json:"gasUsed"`
- BaseFee *big.Int `json:"currentBaseFee,omitempty"`
-}
-```
-
-#### Error codes and output
-
-All logging should happen against the `stderr`.
-There are a few (not many) errors that can occur, those are defined below.
-
-##### EVM-based errors (`2` to `9`)
-
-- Other EVM error. Exit code `2`
-- Failed configuration: when a non-supported or invalid fork was specified. Exit code `3`.
-- Block history is not supplied, but needed for a `BLOCKHASH` operation. If `BLOCKHASH`
- is invoked targeting a block which history has not been provided for, the program will
- exit with code `4`.
-
-##### IO errors (`10`-`20`)
-
-- Invalid input json: the supplied data could not be marshalled.
- The program will exit with code `10`
-- IO problems: failure to load or save files, the program will exit with code `11`
-
-```
-# This should exit with 3
-./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --state.fork=Frontier+1346 2>/dev/null
-EOF
-./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --state.fork=Frontier+1346 2>/dev/null
-exitcode=$?
-if [ $exitcode != 3 ]; then
- echo "Failed, exitcode should be 3,was $exitcode"
-else
- echo "exitcode:$exitcode OK"
-fi
-cat << "EOF"
-```
-#### Forks
-### Basic usage
-
-The chain configuration to be used for a transition is specified via the
-`--state.fork` CLI flag. A list of possible values and configurations can be
-found in [`tests/init.go`](tests/init.go).
-
-#### Examples
-##### Basic usage
-
-Invoking it with the provided example files
-EOF
-cmd="./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --state.fork=Berlin"
-tick;echo "$cmd"; tick
-$cmd 2>/dev/null
-echo "Two resulting files:"
-echo ""
-showjson alloc.json
-showjson result.json
-echo ""
-
-echo "We can make them spit out the data to e.g. \`stdout\` like this:"
-cmd="./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --output.result=stdout --output.alloc=stdout --state.fork=Berlin"
-tick;echo "$cmd"; tick
-output=`$cmd 2>/dev/null`
-echo "Output:"
-echo "${ticks}json"
-echo "$output"
-echo "$ticks"
-
-cat << "EOF"
-
-#### About Ommers
-
-Mining rewards and ommer rewards might need to be added. This is how those are applied:
-
-- `block_reward` is the block mining reward for the miner (`0xaa`), of a block at height `N`.
-- For each ommer (mined by `0xbb`), with blocknumber `N-delta`
- - (where `delta` is the difference between the current block and the ommer)
- - The account `0xbb` (ommer miner) is awarded `(8-delta)/ 8 * block_reward`
- - The account `0xaa` (block miner) is awarded `block_reward / 32`
-
-To make `t8n` apply these, the following inputs are required:
-
-- `--state.reward`
- - For ethash, it is `5000000000000000000` `wei`,
- - If this is not defined, mining rewards are not applied,
- - A value of `0` is valid, and causes accounts to be 'touched'.
-- For each ommer, the tool needs to be given an `address\` and a `delta`. This
- is done via the `ommers` field in `env`.
-
-Note: the tool does not verify that e.g. the normal uncle rules apply,
-and allows e.g two uncles at the same height, or the uncle-distance. This means that
-the tool allows for negative uncle reward (distance > 8)
-
-Example:
-EOF
-
-showjson ./testdata/5/env.json
-
-echo "When applying this, using a reward of \`0x08\`"
-cmd="./evm t8n --input.alloc=./testdata/5/alloc.json -input.txs=./testdata/5/txs.json --input.env=./testdata/5/env.json --output.alloc=stdout --state.reward=0x80 --state.fork=Berlin"
-output=`$cmd 2>/dev/null`
-echo "Output:"
-echo "${ticks}json"
-echo "$output"
-echo "$ticks"
-
-echo "#### Future EIPS"
-echo ""
-echo "It is also possible to experiment with future eips that are not yet defined in a hard fork."
-echo "Example, putting EIP-1344 into Frontier: "
-cmd="./evm t8n --state.fork=Frontier+1344 --input.pre=./testdata/1/pre.json --input.txs=./testdata/1/txs.json --input.env=/testdata/1/env.json"
-tick;echo "$cmd"; tick
-echo ""
-
-echo "#### Block history"
-echo ""
-echo "The \`BLOCKHASH\` opcode requires blockhashes to be provided by the caller, inside the \`env\`."
-echo "If a required blockhash is not provided, the exit code should be \`4\`:"
-echo "Example where blockhashes are provided: "
-demo "./evm t8n --input.alloc=./testdata/3/alloc.json --input.txs=./testdata/3/txs.json --input.env=./testdata/3/env.json --trace --state.fork=Berlin"
-cmd="cat trace-0-0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81.jsonl | grep BLOCKHASH -C2"
-tick && echo $cmd && tick
-echo "$ticks"
-cat trace-0-0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81.jsonl | grep BLOCKHASH -C2
-echo "$ticks"
-echo ""
-
-echo "In this example, the caller has not provided the required blockhash:"
-cmd="./evm t8n --input.alloc=./testdata/4/alloc.json --input.txs=./testdata/4/txs.json --input.env=./testdata/4/env.json --trace --state.fork=Berlin"
-tick && echo $cmd && $cmd 2>&1
-errc=$?
-tick
-echo "Error code: $errc"
-echo ""
-
-echo "#### Chaining"
-echo ""
-echo "Another thing that can be done, is to chain invocations:"
-cmd1="./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --state.fork=Berlin --output.alloc=stdout"
-cmd2="./evm t8n --input.alloc=stdin --input.env=./testdata/1/env.json --input.txs=./testdata/1/txs.json --state.fork=Berlin"
-echo "$ticks"
-echo "$cmd1 | $cmd2"
-output=$($cmd1 | $cmd2 )
-echo $output
-echo "$ticks"
-echo "What happened here, is that we first applied two identical transactions, so the second one was rejected. "
-echo "Then, taking the poststate alloc as the input for the next state, we tried again to include"
-echo "the same two transactions: this time, both failed due to too low nonce."
-echo ""
-echo "In order to meaningfully chain invocations, one would need to provide meaningful new \`env\`, otherwise the"
-echo "actual blocknumber (exposed to the EVM) would not increase."
-echo ""
-
-echo "#### Transactions in RLP form"
-echo ""
-echo "It is possible to provide already-signed transactions as input to, using an \`input.txs\` which ends with the \`rlp\` suffix."
-echo "The input format for RLP-form transactions is _identical_ to the _output_ format for block bodies. Therefore, it's fully possible"
-echo "to use the evm to go from \`json\` input to \`rlp\` input."
-echo ""
-echo "The following command takes **json** the transactions in \`./testdata/13/txs.json\` and signs them. After execution, they are output to \`signed_txs.rlp\`.:"
-cmd="./evm t8n --state.fork=London --input.alloc=./testdata/13/alloc.json --input.txs=./testdata/13/txs.json --input.env=./testdata/13/env.json --output.result=alloc_jsontx.json --output.body=signed_txs.rlp"
-echo "$ticks"
-echo $cmd
-$cmd 2>&1
-echo "$ticks"
-echo ""
-echo "The \`output.body\` is the rlp-list of transactions, encoded in hex and placed in a string a'la \`json\` encoding rules:"
-demo "cat signed_txs.rlp"
-echo "We can use \`rlpdump\` to check what the contents are: "
-echo "$ticks"
-echo "rlpdump -hex \$(cat signed_txs.rlp | jq -r )"
-rlpdump -hex $(cat signed_txs.rlp | jq -r )
-echo "$ticks"
-echo "Now, we can now use those (or any other already signed transactions), as input, like so: "
-cmd="./evm t8n --state.fork=London --input.alloc=./testdata/13/alloc.json --input.txs=./signed_txs.rlp --input.env=./testdata/13/env.json --output.result=alloc_rlptx.json"
-echo "$ticks"
-echo $cmd
-$cmd 2>&1
-echo "$ticks"
-echo "You might have noticed that the results from these two invocations were stored in two separate files. "
-echo "And we can now finally check that they match."
-echo "$ticks"
-echo "cat alloc_jsontx.json | jq .stateRoot && cat alloc_rlptx.json | jq .stateRoot"
-cat alloc_jsontx.json | jq .stateRoot && cat alloc_rlptx.json | jq .stateRoot
-echo "$ticks"
-
-cat << "EOF"
-
-## Transaction tool
-
-The transaction tool is used to perform static validity checks on transactions such as:
-* intrinsic gas calculation
-* max values on integers
-* fee semantics, such as `maxFeePerGas < maxPriorityFeePerGas`
-* newer tx types on old forks
-
-### Examples
-
-EOF
-
-cmd="./evm t9n --state.fork Homestead --input.txs testdata/15/signed_txs.rlp"
-tick;echo "$cmd";
-$cmd 2>/dev/null
-tick
-
-cmd="./evm t9n --state.fork London --input.txs testdata/15/signed_txs.rlp"
-tick;echo "$cmd";
-$cmd 2>/dev/null
-tick
-
-cat << "EOF"
-## Block builder tool (b11r)
-
-The `evm b11r` tool is used to assemble and seal full block rlps.
-
-### Specification
-
-#### Command line params
-
-Command line params that need to be supported are:
-
-```
- --input.header value `stdin` or file name of where to find the block header to use. (default: "header.json")
- --input.ommers value `stdin` or file name of where to find the list of ommer header RLPs to use.
- --input.txs value `stdin` or file name of where to find the transactions list in RLP form. (default: "txs.rlp")
- --output.basedir value Specifies where output files are placed. Will be created if it does not exist.
- --output.block value Determines where to put the alloc of the post-state. (default: "block.json")
- - into the file
- `stdout` - into the stdout output
- `stderr` - into the stderr output
- --seal.clique value Seal block with Clique. `stdin` or file name of where to find the Clique sealing data.
- --seal.ethash Seal block with ethash. (default: false)
- --seal.ethash.dir value Path to ethash DAG. If none exists, a new DAG will be generated.
- --seal.ethash.mode value Defines the type and amount of PoW verification an ethash engine makes. (default: "normal")
- --verbosity value Sets the verbosity level. (default: 3)
-```
-
-#### Objects
-
-##### `header`
-
-The `header` object is a consensus header.
-
-```go=
-type Header struct {
- ParentHash common.Hash `json:"parentHash"`
- OmmerHash *common.Hash `json:"sha3Uncles"`
- Coinbase *common.Address `json:"miner"`
- Root common.Hash `json:"stateRoot" gencodec:"required"`
- TxHash *common.Hash `json:"transactionsRoot"`
- ReceiptHash *common.Hash `json:"receiptsRoot"`
- Bloom types.Bloom `json:"logsBloom"`
- Difficulty *big.Int `json:"difficulty"`
- Number *big.Int `json:"number" gencodec:"required"`
- GasLimit uint64 `json:"gasLimit" gencodec:"required"`
- GasUsed uint64 `json:"gasUsed"`
- Time uint64 `json:"timestamp" gencodec:"required"`
- Extra []byte `json:"extraData"`
- MixDigest common.Hash `json:"mixHash"`
- Nonce *types.BlockNonce `json:"nonce"`
- BaseFee *big.Int `json:"baseFeePerGas"`
-}
-```
-#### `ommers`
-
-The `ommers` object is a list of RLP-encoded ommer blocks in hex
-representation.
-
-```go=
-type Ommers []string
-```
-
-#### `txs`
-
-The `txs` object is a list of RLP-encoded transactions in hex representation.
-
-```go=
-type Txs []string
-```
-
-#### `clique`
-
-The `clique` object provides the necessary information to complete a clique
-seal of the block.
-
-```go=
-var CliqueInfo struct {
- Key *common.Hash `json:"secretKey"`
- Voted *common.Address `json:"voted"`
- Authorize *bool `json:"authorize"`
- Vanity common.Hash `json:"vanity"`
-}
-```
-
-#### `output`
-
-The `output` object contains two values, the block RLP and the block hash.
-
-```go=
-type BlockInfo struct {
- Rlp []byte `json:"rlp"`
- Hash common.Hash `json:"hash"`
-}
-```
-
-## A Note on Encoding
-
-The encoding of values for `evm` utility attempts to be relatively flexible. It
-generally supports hex-encoded or decimal-encoded numeric values, and
-hex-encoded byte values (like `common.Address`, `common.Hash`, etc). When in
-doubt, the [`execution-apis`](https://github.com/ethereum/execution-apis) way
-of encoding should always be accepted.
-
-## Testing
-
-There are many test cases in the [`cmd/evm/testdata`](./testdata) directory.
-These fixtures are used to power the `t8n` tests in
-[`t8n_test.go`](./t8n_test.go). The best way to verify correctness of new `evm`
-implementations is to execute these and verify the output and error codes match
-the expected values.
-
-EOF
diff --git a/cmd/geth/accountcmd.go b/cmd/geth/accountcmd.go
deleted file mode 100644
index cc22684e0b..0000000000
--- a/cmd/geth/accountcmd.go
+++ /dev/null
@@ -1,384 +0,0 @@
-// Copyright 2016 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "fmt"
- "os"
-
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
- "github.com/urfave/cli/v2"
-)
-
-var (
- walletCommand = &cli.Command{
- Name: "wallet",
- Usage: "Manage Ethereum presale wallets",
- ArgsUsage: "",
- Description: `
- geth wallet import /path/to/my/presale.wallet
-
-will prompt for your password and imports your ether presale account.
-It can be used non-interactively with the --password option taking a
-passwordfile as argument containing the wallet password in plaintext.`,
- Subcommands: []*cli.Command{
- {
-
- Name: "import",
- Usage: "Import Ethereum presale wallet",
- ArgsUsage: "",
- Action: importWallet,
- Flags: []cli.Flag{
- utils.DataDirFlag,
- utils.KeyStoreDirFlag,
- utils.PasswordFileFlag,
- utils.LightKDFFlag,
- },
- Description: `
- geth wallet [options] /path/to/my/presale.wallet
-
-will prompt for your password and imports your ether presale account.
-It can be used non-interactively with the --password option taking a
-passwordfile as argument containing the wallet password in plaintext.`,
- },
- },
- }
-
- accountCommand = &cli.Command{
- Name: "account",
- Usage: "Manage accounts",
- Description: `
-
-Manage accounts, list all existing accounts, import a private key into a new
-account, create a new account or update an existing account.
-
-It supports interactive mode, when you are prompted for password as well as
-non-interactive mode where passwords are supplied via a given password file.
-Non-interactive mode is only meant for scripted use on test networks or known
-safe environments.
-
-Make sure you remember the password you gave when creating a new account (with
-either new or import). Without it you are not able to unlock your account.
-
-Note that exporting your key in unencrypted format is NOT supported.
-
-Keys are stored under /keystore.
-It is safe to transfer the entire directory or the individual keys therein
-between ethereum nodes by simply copying.
-
-Make sure you backup your keys regularly.`,
- Subcommands: []*cli.Command{
- {
- Name: "list",
- Usage: "Print summary of existing accounts",
- Action: accountList,
- Flags: []cli.Flag{
- utils.DataDirFlag,
- utils.KeyStoreDirFlag,
- },
- Description: `
-Print a short summary of all accounts`,
- },
- {
- Name: "new",
- Usage: "Create a new account",
- Action: accountCreate,
- Flags: []cli.Flag{
- utils.DataDirFlag,
- utils.KeyStoreDirFlag,
- utils.PasswordFileFlag,
- utils.LightKDFFlag,
- },
- Description: `
- geth account new
-
-Creates a new account and prints the address.
-
-The account is saved in encrypted format, you are prompted for a password.
-
-You must remember this password to unlock your account in the future.
-
-For non-interactive use the password can be specified with the --password flag:
-
-Note, this is meant to be used for testing only, it is a bad idea to save your
-password to file or expose in any other way.
-`,
- },
- {
- Name: "update",
- Usage: "Update an existing account",
- Action: accountUpdate,
- ArgsUsage: "",
- Flags: []cli.Flag{
- utils.DataDirFlag,
- utils.KeyStoreDirFlag,
- utils.LightKDFFlag,
- },
- Description: `
- geth account update
-
-Update an existing account.
-
-The account is saved in the newest version in encrypted format, you are prompted
-for a password to unlock the account and another to save the updated file.
-
-This same command can therefore be used to migrate an account of a deprecated
-format to the newest format or change the password for an account.
-
-For non-interactive use the password can be specified with the --password flag:
-
- geth account update [options]
-
-Since only one password can be given, only format update can be performed,
-changing your password is only possible interactively.
-`,
- },
- {
- Name: "import",
- Usage: "Import a private key into a new account",
- Action: accountImport,
- Flags: []cli.Flag{
- utils.DataDirFlag,
- utils.KeyStoreDirFlag,
- utils.PasswordFileFlag,
- utils.LightKDFFlag,
- },
- ArgsUsage: "",
- Description: `
- geth account import
-
-Imports an unencrypted private key from and creates a new account.
-Prints the address.
-
-The keyfile is assumed to contain an unencrypted private key in hexadecimal format.
-
-The account is saved in encrypted format, you are prompted for a password.
-
-You must remember this password to unlock your account in the future.
-
-For non-interactive use the password can be specified with the -password flag:
-
- geth account import [options]
-
-Note:
-As you can directly copy your encrypted accounts to another ethereum instance,
-this import mechanism is not needed when you transfer an account between
-nodes.
-`,
- },
- },
- }
-)
-
-// makeAccountManager creates an account manager with backends
-func makeAccountManager(ctx *cli.Context) *accounts.Manager {
- cfg := loadBaseConfig(ctx)
- am := accounts.NewManager(&accounts.Config{InsecureUnlockAllowed: cfg.Node.InsecureUnlockAllowed})
- keydir, isEphemeral, err := cfg.Node.GetKeyStoreDir()
- if err != nil {
- utils.Fatalf("Failed to get the keystore directory: %v", err)
- }
- if isEphemeral {
- utils.Fatalf("Can't use ephemeral directory as keystore path")
- }
-
- if err := setAccountManagerBackends(&cfg.Node, am, keydir); err != nil {
- utils.Fatalf("Failed to set account manager backends: %v", err)
- }
- return am
-}
-
-func accountList(ctx *cli.Context) error {
- am := makeAccountManager(ctx)
- var index int
- for _, wallet := range am.Wallets() {
- for _, account := range wallet.Accounts() {
- fmt.Printf("Account #%d: {%x} %s\n", index, account.Address, &account.URL)
- index++
- }
- }
-
- return nil
-}
-
-// tries unlocking the specified account a few times.
-func unlockAccount(ks *keystore.KeyStore, address string, i int, passwords []string) (accounts.Account, string) {
- account, err := utils.MakeAddress(ks, address)
- if err != nil {
- utils.Fatalf("Could not list accounts: %v", err)
- }
- for trials := 0; trials < 3; trials++ {
- prompt := fmt.Sprintf("Unlocking account %s | Attempt %d/%d", address, trials+1, 3)
- password := utils.GetPassPhraseWithList(prompt, false, i, passwords)
- err = ks.Unlock(account, password)
- if err == nil {
- log.Info("Unlocked account", "address", account.Address.Hex())
- return account, password
- }
- if err, ok := err.(*keystore.AmbiguousAddrError); ok {
- log.Info("Unlocked account", "address", account.Address.Hex())
- return ambiguousAddrRecovery(ks, err, password), password
- }
- if err != keystore.ErrDecrypt {
- // No need to prompt again if the error is not decryption-related.
- break
- }
- }
- // All trials expended to unlock account, bail out
- utils.Fatalf("Failed to unlock account %s (%v)", address, err)
-
- return accounts.Account{}, ""
-}
-
-func ambiguousAddrRecovery(ks *keystore.KeyStore, err *keystore.AmbiguousAddrError, auth string) accounts.Account {
- fmt.Printf("Multiple key files exist for address %x:\n", err.Addr)
- for _, a := range err.Matches {
- fmt.Println(" ", a.URL)
- }
- fmt.Println("Testing your password against all of them...")
- var match *accounts.Account
- for i, a := range err.Matches {
- if e := ks.Unlock(a, auth); e == nil {
- match = &err.Matches[i]
- break
- }
- }
- if match == nil {
- utils.Fatalf("None of the listed files could be unlocked.")
- return accounts.Account{}
- }
- fmt.Printf("Your password unlocked %s\n", match.URL)
- fmt.Println("In order to avoid this warning, you need to remove the following duplicate key files:")
- for _, a := range err.Matches {
- if a != *match {
- fmt.Println(" ", a.URL)
- }
- }
- return *match
-}
-
-// accountCreate creates a new account into the keystore defined by the CLI flags.
-func accountCreate(ctx *cli.Context) error {
- cfg := loadBaseConfig(ctx)
- keydir, isEphemeral, err := cfg.Node.GetKeyStoreDir()
- if err != nil {
- utils.Fatalf("Failed to get the keystore directory: %v", err)
- }
- if isEphemeral {
- utils.Fatalf("Can't use ephemeral directory as keystore path")
- }
- scryptN := keystore.StandardScryptN
- scryptP := keystore.StandardScryptP
- if cfg.Node.UseLightweightKDF {
- scryptN = keystore.LightScryptN
- scryptP = keystore.LightScryptP
- }
-
- password := utils.GetPassPhraseWithList("Your new account is locked with a password. Please give a password. Do not forget this password.", true, 0, utils.MakePasswordList(ctx))
-
- account, err := keystore.StoreKey(keydir, password, scryptN, scryptP)
-
- if err != nil {
- utils.Fatalf("Failed to create account: %v", err)
- }
- fmt.Printf("\nYour new key was generated\n\n")
- fmt.Printf("Public address of the key: %s\n", account.Address.Hex())
- fmt.Printf("Path of the secret key file: %s\n\n", account.URL.Path)
- fmt.Printf("- You can share your public address with anyone. Others need it to interact with you.\n")
- fmt.Printf("- You must NEVER share the secret key with anyone! The key controls access to your funds!\n")
- fmt.Printf("- You must BACKUP your key file! Without the key, it's impossible to access account funds!\n")
- fmt.Printf("- You must REMEMBER your password! Without the password, it's impossible to decrypt the key!\n\n")
- return nil
-}
-
-// accountUpdate transitions an account from a previous format to the current
-// one, also providing the possibility to change the pass-phrase.
-func accountUpdate(ctx *cli.Context) error {
- if ctx.Args().Len() == 0 {
- utils.Fatalf("No accounts specified to update")
- }
- am := makeAccountManager(ctx)
- backends := am.Backends(keystore.KeyStoreType)
- if len(backends) == 0 {
- utils.Fatalf("Keystore is not available")
- }
- ks := backends[0].(*keystore.KeyStore)
-
- for _, addr := range ctx.Args().Slice() {
- account, oldPassword := unlockAccount(ks, addr, 0, nil)
- newPassword := utils.GetPassPhraseWithList("Please give a new password. Do not forget this password.", true, 0, nil)
- if err := ks.Update(account, oldPassword, newPassword); err != nil {
- utils.Fatalf("Could not update the account: %v", err)
- }
- }
- return nil
-}
-
-func importWallet(ctx *cli.Context) error {
- if ctx.Args().Len() != 1 {
- utils.Fatalf("keyfile must be given as the only argument")
- }
- keyfile := ctx.Args().First()
- keyJSON, err := os.ReadFile(keyfile)
- if err != nil {
- utils.Fatalf("Could not read wallet file: %v", err)
- }
-
- am := makeAccountManager(ctx)
- backends := am.Backends(keystore.KeyStoreType)
- if len(backends) == 0 {
- utils.Fatalf("Keystore is not available")
- }
- ks := backends[0].(*keystore.KeyStore)
- passphrase := utils.GetPassPhraseWithList("", false, 0, utils.MakePasswordList(ctx))
-
- acct, err := ks.ImportPreSaleKey(keyJSON, passphrase)
- if err != nil {
- utils.Fatalf("%v", err)
- }
- fmt.Printf("Address: {%x}\n", acct.Address)
- return nil
-}
-
-func accountImport(ctx *cli.Context) error {
- if ctx.Args().Len() != 1 {
- utils.Fatalf("keyfile must be given as the only argument")
- }
- keyfile := ctx.Args().First()
- key, err := crypto.LoadECDSA(keyfile)
- if err != nil {
- utils.Fatalf("Failed to load the private key: %v", err)
- }
- am := makeAccountManager(ctx)
- backends := am.Backends(keystore.KeyStoreType)
- if len(backends) == 0 {
- utils.Fatalf("Keystore is not available")
- }
- ks := backends[0].(*keystore.KeyStore)
- passphrase := utils.GetPassPhraseWithList("Your new account is locked with a password. Please give a password. Do not forget this password.", true, 0, utils.MakePasswordList(ctx))
-
- acct, err := ks.ImportECDSA(key, passphrase)
- if err != nil {
- utils.Fatalf("Could not create the account: %v", err)
- }
- fmt.Printf("Address: {%x}\n", acct.Address)
- return nil
-}
diff --git a/cmd/geth/accountcmd_test.go b/cmd/geth/accountcmd_test.go
deleted file mode 100644
index ea3a7c3b64..0000000000
--- a/cmd/geth/accountcmd_test.go
+++ /dev/null
@@ -1,378 +0,0 @@
-// Copyright 2016 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "os"
- "path/filepath"
- "runtime"
- "strings"
- "testing"
-
- "github.com/cespare/cp"
-)
-
-// These tests are 'smoke tests' for the account related
-// subcommands and flags.
-//
-// For most tests, the test files from package accounts
-// are copied into a temporary keystore directory.
-
-func tmpDatadirWithKeystore(t *testing.T) string {
- datadir := t.TempDir()
- keystore := filepath.Join(datadir, "keystore")
- source := filepath.Join("..", "..", "accounts", "keystore", "testdata", "keystore")
- if err := cp.CopyAll(keystore, source); err != nil {
- t.Fatal(err)
- }
- return datadir
-}
-
-func TestAccountListEmpty(t *testing.T) {
- t.Parallel()
- geth := runGeth(t, "account", "list")
- geth.ExpectExit()
-}
-
-func TestAccountList(t *testing.T) {
- t.Parallel()
- datadir := tmpDatadirWithKeystore(t)
- var want = `
-Account #0: {7ef5a6135f1fd6a02593eedc869c6d41d934aef8} keystore://{{.Datadir}}/keystore/UTC--2016-03-22T12-57-55.920751759Z--7ef5a6135f1fd6a02593eedc869c6d41d934aef8
-Account #1: {f466859ead1932d743d622cb74fc058882e8648a} keystore://{{.Datadir}}/keystore/aaa
-Account #2: {289d485d9771714cce91d3393d764e1311907acc} keystore://{{.Datadir}}/keystore/zzz
-`
- if runtime.GOOS == "windows" {
- want = `
-Account #0: {7ef5a6135f1fd6a02593eedc869c6d41d934aef8} keystore://{{.Datadir}}\keystore\UTC--2016-03-22T12-57-55.920751759Z--7ef5a6135f1fd6a02593eedc869c6d41d934aef8
-Account #1: {f466859ead1932d743d622cb74fc058882e8648a} keystore://{{.Datadir}}\keystore\aaa
-Account #2: {289d485d9771714cce91d3393d764e1311907acc} keystore://{{.Datadir}}\keystore\zzz
-`
- }
- {
- geth := runGeth(t, "account", "list", "--datadir", datadir)
- geth.Expect(want)
- geth.ExpectExit()
- }
- {
- geth := runGeth(t, "--datadir", datadir, "account", "list")
- geth.Expect(want)
- geth.ExpectExit()
- }
-}
-
-func TestAccountNew(t *testing.T) {
- t.Parallel()
- geth := runGeth(t, "account", "new", "--lightkdf")
- defer geth.ExpectExit()
- geth.Expect(`
-Your new account is locked with a password. Please give a password. Do not forget this password.
-!! Unsupported terminal, password will be echoed.
-Password: {{.InputLine "foobar"}}
-Repeat password: {{.InputLine "foobar"}}
-
-Your new key was generated
-`)
- geth.ExpectRegexp(`
-Public address of the key: 0x[0-9a-fA-F]{40}
-Path of the secret key file: .*UTC--.+--[0-9a-f]{40}
-
-- You can share your public address with anyone. Others need it to interact with you.
-- You must NEVER share the secret key with anyone! The key controls access to your funds!
-- You must BACKUP your key file! Without the key, it's impossible to access account funds!
-- You must REMEMBER your password! Without the password, it's impossible to decrypt the key!
-`)
-}
-
-func TestAccountImport(t *testing.T) {
- t.Parallel()
- tests := []struct{ name, key, output string }{
- {
- name: "correct account",
- key: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
- output: "Address: {fcad0b19bb29d4674531d6f115237e16afce377c}\n",
- },
- {
- name: "invalid character",
- key: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef1",
- output: "Fatal: Failed to load the private key: invalid character '1' at end of key file\n",
- },
- }
- for _, test := range tests {
- test := test
- t.Run(test.name, func(t *testing.T) {
- t.Parallel()
- importAccountWithExpect(t, test.key, test.output)
- })
- }
-}
-
-func TestAccountHelp(t *testing.T) {
- t.Parallel()
- geth := runGeth(t, "account", "-h")
- geth.WaitExit()
- if have, want := geth.ExitStatus(), 0; have != want {
- t.Errorf("exit error, have %d want %d", have, want)
- }
-
- geth = runGeth(t, "account", "import", "-h")
- geth.WaitExit()
- if have, want := geth.ExitStatus(), 0; have != want {
- t.Errorf("exit error, have %d want %d", have, want)
- }
-}
-
-func importAccountWithExpect(t *testing.T, key string, expected string) {
- dir := t.TempDir()
- keyfile := filepath.Join(dir, "key.prv")
- if err := os.WriteFile(keyfile, []byte(key), 0600); err != nil {
- t.Error(err)
- }
- passwordFile := filepath.Join(dir, "password.txt")
- if err := os.WriteFile(passwordFile, []byte("foobar"), 0600); err != nil {
- t.Error(err)
- }
- geth := runGeth(t, "--lightkdf", "account", "import", "-password", passwordFile, keyfile)
- defer geth.ExpectExit()
- geth.Expect(expected)
-}
-
-func TestAccountNewBadRepeat(t *testing.T) {
- t.Parallel()
- geth := runGeth(t, "account", "new", "--lightkdf")
- defer geth.ExpectExit()
- geth.Expect(`
-Your new account is locked with a password. Please give a password. Do not forget this password.
-!! Unsupported terminal, password will be echoed.
-Password: {{.InputLine "something"}}
-Repeat password: {{.InputLine "something else"}}
-Fatal: Passwords do not match
-`)
-}
-
-func TestAccountUpdate(t *testing.T) {
- t.Parallel()
- datadir := tmpDatadirWithKeystore(t)
- geth := runGeth(t, "account", "update",
- "--datadir", datadir, "--lightkdf",
- "f466859ead1932d743d622cb74fc058882e8648a")
- defer geth.ExpectExit()
- geth.Expect(`
-Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 1/3
-!! Unsupported terminal, password will be echoed.
-Password: {{.InputLine "foobar"}}
-Please give a new password. Do not forget this password.
-Password: {{.InputLine "foobar2"}}
-Repeat password: {{.InputLine "foobar2"}}
-`)
-}
-
-func TestWalletImport(t *testing.T) {
- t.Parallel()
- geth := runGeth(t, "wallet", "import", "--lightkdf", "testdata/guswallet.json")
- defer geth.ExpectExit()
- geth.Expect(`
-!! Unsupported terminal, password will be echoed.
-Password: {{.InputLine "foo"}}
-Address: {d4584b5f6229b7be90727b0fc8c6b91bb427821f}
-`)
-
- files, err := os.ReadDir(filepath.Join(geth.Datadir, "keystore"))
- if len(files) != 1 {
- t.Errorf("expected one key file in keystore directory, found %d files (error: %v)", len(files), err)
- }
-}
-
-func TestWalletImportBadPassword(t *testing.T) {
- t.Parallel()
- geth := runGeth(t, "wallet", "import", "--lightkdf", "testdata/guswallet.json")
- defer geth.ExpectExit()
- geth.Expect(`
-!! Unsupported terminal, password will be echoed.
-Password: {{.InputLine "wrong"}}
-Fatal: could not decrypt key with given password
-`)
-}
-
-func TestUnlockFlag(t *testing.T) {
- t.Parallel()
- geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t),
- "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "console", "--exec", "loadScript('testdata/empty.js')")
- geth.Expect(`
-Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 1/3
-!! Unsupported terminal, password will be echoed.
-Password: {{.InputLine "foobar"}}
-undefined
-`)
- geth.ExpectExit()
-
- wantMessages := []string{
- "Unlocked account",
- "=0xf466859eAD1932D743d622CB74FC058882E8648A",
- }
- for _, m := range wantMessages {
- if !strings.Contains(geth.StderrText(), m) {
- t.Errorf("stderr text does not contain %q", m)
- }
- }
-}
-
-func TestUnlockFlagWrongPassword(t *testing.T) {
- t.Parallel()
- geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t),
- "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "console", "--exec", "loadScript('testdata/empty.js')")
-
- defer geth.ExpectExit()
- geth.Expect(`
-Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 1/3
-!! Unsupported terminal, password will be echoed.
-Password: {{.InputLine "wrong1"}}
-Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 2/3
-Password: {{.InputLine "wrong2"}}
-Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 3/3
-Password: {{.InputLine "wrong3"}}
-Fatal: Failed to unlock account f466859ead1932d743d622cb74fc058882e8648a (could not decrypt key with given password)
-`)
-}
-
-// https://github.com/ethereum/go-ethereum/issues/1785
-func TestUnlockFlagMultiIndex(t *testing.T) {
- t.Parallel()
- geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t),
- "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "--unlock", "0,2", "console", "--exec", "loadScript('testdata/empty.js')")
-
- geth.Expect(`
-Unlocking account 0 | Attempt 1/3
-!! Unsupported terminal, password will be echoed.
-Password: {{.InputLine "foobar"}}
-Unlocking account 2 | Attempt 1/3
-Password: {{.InputLine "foobar"}}
-undefined
-`)
- geth.ExpectExit()
-
- wantMessages := []string{
- "Unlocked account",
- "=0x7EF5A6135f1FD6a02593eEdC869c6D41D934aef8",
- "=0x289d485D9771714CCe91D3393D764E1311907ACc",
- }
- for _, m := range wantMessages {
- if !strings.Contains(geth.StderrText(), m) {
- t.Errorf("stderr text does not contain %q", m)
- }
- }
-}
-
-func TestUnlockFlagPasswordFile(t *testing.T) {
- t.Parallel()
- geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t),
- "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "--password", "testdata/passwords.txt", "--unlock", "0,2", "console", "--exec", "loadScript('testdata/empty.js')")
-
- geth.Expect(`
-undefined
-`)
- geth.ExpectExit()
-
- wantMessages := []string{
- "Unlocked account",
- "=0x7EF5A6135f1FD6a02593eEdC869c6D41D934aef8",
- "=0x289d485D9771714CCe91D3393D764E1311907ACc",
- }
- for _, m := range wantMessages {
- if !strings.Contains(geth.StderrText(), m) {
- t.Errorf("stderr text does not contain %q", m)
- }
- }
-}
-
-func TestUnlockFlagPasswordFileWrongPassword(t *testing.T) {
- t.Parallel()
- geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t),
- "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "--password",
- "testdata/wrong-passwords.txt", "--unlock", "0,2")
- defer geth.ExpectExit()
- geth.Expect(`
-Fatal: Failed to unlock account 0 (could not decrypt key with given password)
-`)
-}
-
-func TestUnlockFlagAmbiguous(t *testing.T) {
- t.Parallel()
- store := filepath.Join("..", "..", "accounts", "keystore", "testdata", "dupes")
- geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t),
- "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "--keystore",
- store, "--unlock", "f466859ead1932d743d622cb74fc058882e8648a",
- "console", "--exec", "loadScript('testdata/empty.js')")
- defer geth.ExpectExit()
-
- // Helper for the expect template, returns absolute keystore path.
- geth.SetTemplateFunc("keypath", func(file string) string {
- abs, _ := filepath.Abs(filepath.Join(store, file))
- return abs
- })
- geth.Expect(`
-Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 1/3
-!! Unsupported terminal, password will be echoed.
-Password: {{.InputLine "foobar"}}
-Multiple key files exist for address f466859ead1932d743d622cb74fc058882e8648a:
- keystore://{{keypath "1"}}
- keystore://{{keypath "2"}}
-Testing your password against all of them...
-Your password unlocked keystore://{{keypath "1"}}
-In order to avoid this warning, you need to remove the following duplicate key files:
- keystore://{{keypath "2"}}
-undefined
-`)
- geth.ExpectExit()
-
- wantMessages := []string{
- "Unlocked account",
- "=0xf466859eAD1932D743d622CB74FC058882E8648A",
- }
- for _, m := range wantMessages {
- if !strings.Contains(geth.StderrText(), m) {
- t.Errorf("stderr text does not contain %q", m)
- }
- }
-}
-
-func TestUnlockFlagAmbiguousWrongPassword(t *testing.T) {
- t.Parallel()
- store := filepath.Join("..", "..", "accounts", "keystore", "testdata", "dupes")
- geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t),
- "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "--keystore",
- store, "--unlock", "f466859ead1932d743d622cb74fc058882e8648a")
-
- defer geth.ExpectExit()
-
- // Helper for the expect template, returns absolute keystore path.
- geth.SetTemplateFunc("keypath", func(file string) string {
- abs, _ := filepath.Abs(filepath.Join(store, file))
- return abs
- })
- geth.Expect(`
-Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 1/3
-!! Unsupported terminal, password will be echoed.
-Password: {{.InputLine "wrong"}}
-Multiple key files exist for address f466859ead1932d743d622cb74fc058882e8648a:
- keystore://{{keypath "1"}}
- keystore://{{keypath "2"}}
-Testing your password against all of them...
-Fatal: None of the listed files could be unlocked.
-`)
- geth.ExpectExit()
-}
diff --git a/cmd/geth/attach_test.go b/cmd/geth/attach_test.go
deleted file mode 100644
index 91007ccf65..0000000000
--- a/cmd/geth/attach_test.go
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2022 The go-ethereum Authors
-// This file is part of the go-ethereum library.
-//
-// The go-ethereum library is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The go-ethereum library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with the go-ethereum library. If not, see .
-
-package main
-
-import (
- "fmt"
- "net"
- "net/http"
- "sync/atomic"
- "testing"
-)
-
-type testHandler struct {
- body func(http.ResponseWriter, *http.Request)
-}
-
-func (t *testHandler) ServeHTTP(out http.ResponseWriter, in *http.Request) {
- t.body(out, in)
-}
-
-// TestAttachWithHeaders tests that 'geth attach' with custom headers works, i.e
-// that custom headers are forwarded to the target.
-func TestAttachWithHeaders(t *testing.T) {
- t.Parallel()
- ln, err := net.Listen("tcp", "localhost:0")
- if err != nil {
- t.Fatal(err)
- }
- port := ln.Addr().(*net.TCPAddr).Port
- testReceiveHeaders(t, ln, "attach", "-H", "first: one", "-H", "second: two", fmt.Sprintf("http://localhost:%d", port))
- // This way to do it fails due to flag ordering:
- //
- // testReceiveHeaders(t, ln, "-H", "first: one", "-H", "second: two", "attach", fmt.Sprintf("http://localhost:%d", port))
- // This is fixed in a follow-up PR.
-}
-
-// TestAttachWithHeaders tests that 'geth db --remotedb' with custom headers works, i.e
-// that custom headers are forwarded to the target.
-func TestRemoteDbWithHeaders(t *testing.T) {
- t.Parallel()
- ln, err := net.Listen("tcp", "localhost:0")
- if err != nil {
- t.Fatal(err)
- }
- port := ln.Addr().(*net.TCPAddr).Port
- testReceiveHeaders(t, ln, "db", "metadata", "--remotedb", fmt.Sprintf("http://localhost:%d", port), "-H", "first: one", "-H", "second: two")
-}
-
-func testReceiveHeaders(t *testing.T, ln net.Listener, gethArgs ...string) {
- var ok atomic.Uint32
- server := &http.Server{
- Addr: "localhost:0",
- Handler: &testHandler{func(w http.ResponseWriter, r *http.Request) {
- // We expect two headers
- if have, want := r.Header.Get("first"), "one"; have != want {
- t.Fatalf("missing header, have %v want %v", have, want)
- }
- if have, want := r.Header.Get("second"), "two"; have != want {
- t.Fatalf("missing header, have %v want %v", have, want)
- }
- ok.Store(1)
- }}}
- go server.Serve(ln)
- defer server.Close()
- runGeth(t, gethArgs...).WaitExit()
- if ok.Load() != 1 {
- t.Fatal("Test fail, expected invocation to succeed")
- }
-}
diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go
deleted file mode 100644
index 3b4f516af7..0000000000
--- a/cmd/geth/chaincmd.go
+++ /dev/null
@@ -1,485 +0,0 @@
-// Copyright 2015 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "encoding/json"
- "errors"
- "fmt"
- "os"
- "runtime"
- "strconv"
- "sync/atomic"
- "time"
-
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/node"
- "github.com/urfave/cli/v2"
-)
-
-var (
- initCommand = &cli.Command{
- Action: initGenesis,
- Name: "init",
- Usage: "Bootstrap and initialize a new genesis block",
- ArgsUsage: "",
- Flags: flags.Merge([]cli.Flag{
- utils.CachePreimagesFlag,
- utils.OverrideCancun,
- utils.OverrideVerkle,
- }, utils.DatabaseFlags),
- Description: `
-The init command initializes a new genesis block and definition for the network.
-This is a destructive action and changes the network in which you will be
-participating.
-
-It expects the genesis file as argument.`,
- }
- dumpGenesisCommand = &cli.Command{
- Action: dumpGenesis,
- Name: "dumpgenesis",
- Usage: "Dumps genesis block JSON configuration to stdout",
- ArgsUsage: "",
- Flags: append([]cli.Flag{utils.DataDirFlag}, utils.NetworkFlags...),
- Description: `
-The dumpgenesis command prints the genesis configuration of the network preset
-if one is set. Otherwise it prints the genesis from the datadir.`,
- }
- importCommand = &cli.Command{
- Action: importChain,
- Name: "import",
- Usage: "Import a blockchain file",
- ArgsUsage: " ( ... ) ",
- Flags: flags.Merge([]cli.Flag{
- utils.CacheFlag,
- utils.SyncModeFlag,
- utils.GCModeFlag,
- utils.SnapshotFlag,
- utils.CacheDatabaseFlag,
- utils.CacheGCFlag,
- utils.MetricsEnabledFlag,
- utils.MetricsEnabledExpensiveFlag,
- utils.MetricsHTTPFlag,
- utils.MetricsPortFlag,
- utils.MetricsEnableInfluxDBFlag,
- utils.MetricsEnableInfluxDBV2Flag,
- utils.MetricsInfluxDBEndpointFlag,
- utils.MetricsInfluxDBDatabaseFlag,
- utils.MetricsInfluxDBUsernameFlag,
- utils.MetricsInfluxDBPasswordFlag,
- utils.MetricsInfluxDBTagsFlag,
- utils.MetricsInfluxDBTokenFlag,
- utils.MetricsInfluxDBBucketFlag,
- utils.MetricsInfluxDBOrganizationFlag,
- utils.TxLookupLimitFlag,
- utils.TransactionHistoryFlag,
- utils.StateHistoryFlag,
- }, utils.DatabaseFlags),
- Description: `
-The import command imports blocks from an RLP-encoded form. The form can be one file
-with several RLP-encoded blocks, or several files can be used.
-
-If only one file is used, import error will result in failure. If several files are used,
-processing will proceed even if an individual RLP-file import failure occurs.`,
- }
- exportCommand = &cli.Command{
- Action: exportChain,
- Name: "export",
- Usage: "Export blockchain into file",
- ArgsUsage: " [ ]",
- Flags: flags.Merge([]cli.Flag{
- utils.CacheFlag,
- utils.SyncModeFlag,
- }, utils.DatabaseFlags),
- Description: `
-Requires a first argument of the file to write to.
-Optional second and third arguments control the first and
-last block to write. In this mode, the file will be appended
-if already existing. If the file ends with .gz, the output will
-be gzipped.`,
- }
- importPreimagesCommand = &cli.Command{
- Action: importPreimages,
- Name: "import-preimages",
- Usage: "Import the preimage database from an RLP stream",
- ArgsUsage: "",
- Flags: flags.Merge([]cli.Flag{
- utils.CacheFlag,
- utils.SyncModeFlag,
- }, utils.DatabaseFlags),
- Description: `
-The import-preimages command imports hash preimages from an RLP encoded stream.
-It's deprecated, please use "geth db import" instead.
-`,
- }
-
- dumpCommand = &cli.Command{
- Action: dump,
- Name: "dump",
- Usage: "Dump a specific block from storage",
- ArgsUsage: "[? | ]",
- Flags: flags.Merge([]cli.Flag{
- utils.CacheFlag,
- utils.IterativeOutputFlag,
- utils.ExcludeCodeFlag,
- utils.ExcludeStorageFlag,
- utils.IncludeIncompletesFlag,
- utils.StartKeyFlag,
- utils.DumpLimitFlag,
- }, utils.DatabaseFlags),
- Description: `
-This command dumps out the state for a given block (or latest, if none provided).
-`,
- }
-)
-
-// initGenesis will initialise the given JSON format genesis file and writes it as
-// the zero'd block (i.e. genesis) or will fail hard if it can't succeed.
-func initGenesis(ctx *cli.Context) error {
- if ctx.Args().Len() != 1 {
- utils.Fatalf("need genesis.json file as the only argument")
- }
- genesisPath := ctx.Args().First()
- if len(genesisPath) == 0 {
- utils.Fatalf("invalid path to genesis file")
- }
- file, err := os.Open(genesisPath)
- if err != nil {
- utils.Fatalf("Failed to read genesis file: %v", err)
- }
- defer file.Close()
-
- genesis := new(core.Genesis)
- if err := json.NewDecoder(file).Decode(genesis); err != nil {
- utils.Fatalf("invalid genesis file: %v", err)
- }
- // Open and initialise both full and light databases
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- var overrides core.ChainOverrides
- if ctx.IsSet(utils.OverrideCancun.Name) {
- v := ctx.Uint64(utils.OverrideCancun.Name)
- overrides.OverrideCancun = &v
- }
- if ctx.IsSet(utils.OverrideVerkle.Name) {
- v := ctx.Uint64(utils.OverrideVerkle.Name)
- overrides.OverrideVerkle = &v
- }
- for _, name := range []string{"chaindata", "lightchaindata"} {
- chaindb, err := stack.OpenDatabaseWithFreezer(name, 0, 0, ctx.String(utils.AncientFlag.Name), "", false)
- if err != nil {
- utils.Fatalf("Failed to open database: %v", err)
- }
- defer chaindb.Close()
-
- triedb := utils.MakeTrieDatabase(ctx, chaindb, ctx.Bool(utils.CachePreimagesFlag.Name), false, genesis.IsVerkle())
- defer triedb.Close()
-
- _, hash, err := core.SetupGenesisBlockWithOverride(chaindb, triedb, genesis, &overrides)
- if err != nil {
- utils.Fatalf("Failed to write genesis block: %v", err)
- }
- log.Info("Successfully wrote genesis state", "database", name, "hash", hash)
- }
- return nil
-}
-
-func dumpGenesis(ctx *cli.Context) error {
- // check if there is a testnet preset enabled
- var genesis *core.Genesis
- if utils.IsNetworkPreset(ctx) {
- genesis = utils.MakeGenesis(ctx)
- } else if ctx.IsSet(utils.DeveloperFlag.Name) && !ctx.IsSet(utils.DataDirFlag.Name) {
- genesis = core.DeveloperGenesisBlock(11_500_000, nil)
- }
-
- if genesis != nil {
- if err := json.NewEncoder(os.Stdout).Encode(genesis); err != nil {
- utils.Fatalf("could not encode genesis: %s", err)
- }
- return nil
- }
-
- // dump whatever already exists in the datadir
- stack, _ := makeConfigNode(ctx)
- for _, name := range []string{"chaindata", "lightchaindata"} {
- db, err := stack.OpenDatabase(name, 0, 0, "", true)
- if err != nil {
- if !os.IsNotExist(err) {
- return err
- }
- continue
- }
- genesis, err := core.ReadGenesis(db)
- if err != nil {
- utils.Fatalf("failed to read genesis: %s", err)
- }
- db.Close()
-
- if err := json.NewEncoder(os.Stdout).Encode(*genesis); err != nil {
- utils.Fatalf("could not encode stored genesis: %s", err)
- }
- return nil
- }
- if ctx.IsSet(utils.DataDirFlag.Name) {
- utils.Fatalf("no existing datadir at %s", stack.Config().DataDir)
- }
- utils.Fatalf("no network preset provided, and no genesis exists in the default datadir")
- return nil
-}
-
-func importChain(ctx *cli.Context) error {
- if ctx.Args().Len() < 1 {
- utils.Fatalf("This command requires an argument.")
- }
- // Start metrics export if enabled
- utils.SetupMetrics(ctx)
- // Start system runtime metrics collection
- go metrics.CollectProcessMetrics(3 * time.Second)
-
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- chain, db := utils.MakeChain(ctx, stack, false)
- defer db.Close()
-
- // Start periodically gathering memory profiles
- var peakMemAlloc, peakMemSys atomic.Uint64
- go func() {
- stats := new(runtime.MemStats)
- for {
- runtime.ReadMemStats(stats)
- if peakMemAlloc.Load() < stats.Alloc {
- peakMemAlloc.Store(stats.Alloc)
- }
- if peakMemSys.Load() < stats.Sys {
- peakMemSys.Store(stats.Sys)
- }
- time.Sleep(5 * time.Second)
- }
- }()
- // Import the chain
- start := time.Now()
-
- var importErr error
-
- if ctx.Args().Len() == 1 {
- if err := utils.ImportChain(chain, ctx.Args().First()); err != nil {
- importErr = err
- log.Error("Import error", "err", err)
- }
- } else {
- for _, arg := range ctx.Args().Slice() {
- if err := utils.ImportChain(chain, arg); err != nil {
- importErr = err
- log.Error("Import error", "file", arg, "err", err)
- }
- }
- }
- chain.Stop()
- fmt.Printf("Import done in %v.\n\n", time.Since(start))
-
- // Output pre-compaction stats mostly to see the import trashing
- showLeveldbStats(db)
-
- // Print the memory statistics used by the importing
- mem := new(runtime.MemStats)
- runtime.ReadMemStats(mem)
-
- fmt.Printf("Object memory: %.3f MB current, %.3f MB peak\n", float64(mem.Alloc)/1024/1024, float64(peakMemAlloc.Load())/1024/1024)
- fmt.Printf("System memory: %.3f MB current, %.3f MB peak\n", float64(mem.Sys)/1024/1024, float64(peakMemSys.Load())/1024/1024)
- fmt.Printf("Allocations: %.3f million\n", float64(mem.Mallocs)/1000000)
- fmt.Printf("GC pause: %v\n\n", time.Duration(mem.PauseTotalNs))
-
- if ctx.Bool(utils.NoCompactionFlag.Name) {
- return nil
- }
-
- // Compact the entire database to more accurately measure disk io and print the stats
- start = time.Now()
- fmt.Println("Compacting entire database...")
- if err := db.Compact(nil, nil); err != nil {
- utils.Fatalf("Compaction failed: %v", err)
- }
- fmt.Printf("Compaction done in %v.\n\n", time.Since(start))
-
- showLeveldbStats(db)
- return importErr
-}
-
-func exportChain(ctx *cli.Context) error {
- if ctx.Args().Len() < 1 {
- utils.Fatalf("This command requires an argument.")
- }
-
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- chain, db := utils.MakeChain(ctx, stack, true)
- defer db.Close()
- start := time.Now()
-
- var err error
- fp := ctx.Args().First()
- if ctx.Args().Len() < 3 {
- err = utils.ExportChain(chain, fp)
- } else {
- // This can be improved to allow for numbers larger than 9223372036854775807
- first, ferr := strconv.ParseInt(ctx.Args().Get(1), 10, 64)
- last, lerr := strconv.ParseInt(ctx.Args().Get(2), 10, 64)
- if ferr != nil || lerr != nil {
- utils.Fatalf("Export error in parsing parameters: block number not an integer\n")
- }
- if first < 0 || last < 0 {
- utils.Fatalf("Export error: block number must be greater than 0\n")
- }
- if head := chain.CurrentSnapBlock(); uint64(last) > head.Number.Uint64() {
- utils.Fatalf("Export error: block number %d larger than head block %d\n", uint64(last), head.Number.Uint64())
- }
- err = utils.ExportAppendChain(chain, fp, uint64(first), uint64(last))
- }
-
- if err != nil {
- utils.Fatalf("Export error: %v\n", err)
- }
- fmt.Printf("Export done in %v\n", time.Since(start))
- return nil
-}
-
-// importPreimages imports preimage data from the specified file.
-// it is deprecated, and the export function has been removed, but
-// the import function is kept around for the time being so that
-// older file formats can still be imported.
-func importPreimages(ctx *cli.Context) error {
- if ctx.Args().Len() < 1 {
- utils.Fatalf("This command requires an argument.")
- }
-
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- db := utils.MakeChainDatabase(ctx, stack, false)
- defer db.Close()
- start := time.Now()
-
- if err := utils.ImportPreimages(db, ctx.Args().First()); err != nil {
- utils.Fatalf("Import error: %v\n", err)
- }
- fmt.Printf("Import done in %v\n", time.Since(start))
- return nil
-}
-
-func parseDumpConfig(ctx *cli.Context, stack *node.Node) (*state.DumpConfig, ethdb.Database, common.Hash, error) {
- db := utils.MakeChainDatabase(ctx, stack, true)
- defer db.Close()
-
- var header *types.Header
- if ctx.NArg() > 1 {
- return nil, nil, common.Hash{}, fmt.Errorf("expected 1 argument (number or hash), got %d", ctx.NArg())
- }
- if ctx.NArg() == 1 {
- arg := ctx.Args().First()
- if hashish(arg) {
- hash := common.HexToHash(arg)
- if number := rawdb.ReadHeaderNumber(db, hash); number != nil {
- header = rawdb.ReadHeader(db, hash, *number)
- } else {
- return nil, nil, common.Hash{}, fmt.Errorf("block %x not found", hash)
- }
- } else {
- number, err := strconv.ParseUint(arg, 10, 64)
- if err != nil {
- return nil, nil, common.Hash{}, err
- }
- if hash := rawdb.ReadCanonicalHash(db, number); hash != (common.Hash{}) {
- header = rawdb.ReadHeader(db, hash, number)
- } else {
- return nil, nil, common.Hash{}, fmt.Errorf("header for block %d not found", number)
- }
- }
- } else {
- // Use latest
- header = rawdb.ReadHeadHeader(db)
- }
- if header == nil {
- return nil, nil, common.Hash{}, errors.New("no head block found")
- }
- startArg := common.FromHex(ctx.String(utils.StartKeyFlag.Name))
- var start common.Hash
- switch len(startArg) {
- case 0: // common.Hash
- case 32:
- start = common.BytesToHash(startArg)
- case 20:
- start = crypto.Keccak256Hash(startArg)
- log.Info("Converting start-address to hash", "address", common.BytesToAddress(startArg), "hash", start.Hex())
- default:
- return nil, nil, common.Hash{}, fmt.Errorf("invalid start argument: %x. 20 or 32 hex-encoded bytes required", startArg)
- }
- var conf = &state.DumpConfig{
- SkipCode: ctx.Bool(utils.ExcludeCodeFlag.Name),
- SkipStorage: ctx.Bool(utils.ExcludeStorageFlag.Name),
- OnlyWithAddresses: !ctx.Bool(utils.IncludeIncompletesFlag.Name),
- Start: start.Bytes(),
- Max: ctx.Uint64(utils.DumpLimitFlag.Name),
- }
- log.Info("State dump configured", "block", header.Number, "hash", header.Hash().Hex(),
- "skipcode", conf.SkipCode, "skipstorage", conf.SkipStorage,
- "start", hexutil.Encode(conf.Start), "limit", conf.Max)
- return conf, db, header.Root, nil
-}
-
-func dump(ctx *cli.Context) error {
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- conf, db, root, err := parseDumpConfig(ctx, stack)
- if err != nil {
- return err
- }
- triedb := utils.MakeTrieDatabase(ctx, db, true, true, false) // always enable preimage lookup
- defer triedb.Close()
-
- state, err := state.New(root, state.NewDatabaseWithNodeDB(db, triedb), nil)
- if err != nil {
- return err
- }
- if ctx.Bool(utils.IterativeOutputFlag.Name) {
- state.IterativeDump(conf, json.NewEncoder(os.Stdout))
- } else {
- fmt.Println(string(state.Dump(conf)))
- }
- return nil
-}
-
-// hashish returns true for strings that look like hashes.
-func hashish(x string) bool {
- _, err := strconv.Atoi(x)
- return err != nil
-}
diff --git a/cmd/geth/config.go b/cmd/geth/config.go
deleted file mode 100644
index 5f52f1df54..0000000000
--- a/cmd/geth/config.go
+++ /dev/null
@@ -1,376 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "bufio"
- "errors"
- "fmt"
- "os"
- "reflect"
- "runtime"
- "strings"
- "unicode"
-
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/accounts/external"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/accounts/scwallet"
- "github.com/ethereum/go-ethereum/accounts/usbwallet"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/eth/catalyst"
- "github.com/ethereum/go-ethereum/eth/ethconfig"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/internal/version"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/params"
- "github.com/naoina/toml"
- "github.com/urfave/cli/v2"
-)
-
-var (
- dumpConfigCommand = &cli.Command{
- Action: dumpConfig,
- Name: "dumpconfig",
- Usage: "Export configuration values in a TOML format",
- ArgsUsage: "",
- Flags: flags.Merge(nodeFlags, rpcFlags),
- Description: `Export configuration values in TOML format (to stdout by default).`,
- }
-
- configFileFlag = &cli.StringFlag{
- Name: "config",
- Usage: "TOML configuration file",
- Category: flags.EthCategory,
- }
-)
-
-// These settings ensure that TOML keys use the same names as Go struct fields.
-var tomlSettings = toml.Config{
- NormFieldName: func(rt reflect.Type, key string) string {
- return key
- },
- FieldToKey: func(rt reflect.Type, field string) string {
- return field
- },
- MissingField: func(rt reflect.Type, field string) error {
- id := fmt.Sprintf("%s.%s", rt.String(), field)
- if deprecated(id) {
- log.Warn("Config field is deprecated and won't have an effect", "name", id)
- return nil
- }
- var link string
- if unicode.IsUpper(rune(rt.Name()[0])) && rt.PkgPath() != "main" {
- link = fmt.Sprintf(", see https://godoc.org/%s#%s for available fields", rt.PkgPath(), rt.Name())
- }
- return fmt.Errorf("field '%s' is not defined in %s%s", field, rt.String(), link)
- },
-}
-
-type ethstatsConfig struct {
- URL string `toml:",omitempty"`
-}
-
-type gethConfig struct {
- Eth ethconfig.Config
- Node node.Config
- Ethstats ethstatsConfig
- Metrics metrics.Config
-}
-
-func loadConfig(file string, cfg *gethConfig) error {
- f, err := os.Open(file)
- if err != nil {
- return err
- }
- defer f.Close()
-
- err = tomlSettings.NewDecoder(bufio.NewReader(f)).Decode(cfg)
- // Add file name to errors that have a line number.
- if _, ok := err.(*toml.LineError); ok {
- err = errors.New(file + ", " + err.Error())
- }
- return err
-}
-
-func defaultNodeConfig() node.Config {
- git, _ := version.VCS()
- cfg := node.DefaultConfig
- cfg.Name = clientIdentifier
- cfg.Version = params.VersionWithCommit(git.Commit, git.Date)
- cfg.HTTPModules = append(cfg.HTTPModules, "eth")
- cfg.WSModules = append(cfg.WSModules, "eth")
- cfg.IPCPath = "geth.ipc"
- return cfg
-}
-
-// loadBaseConfig loads the gethConfig based on the given command line
-// parameters and config file.
-func loadBaseConfig(ctx *cli.Context) gethConfig {
- // Load defaults.
- cfg := gethConfig{
- Eth: ethconfig.Defaults,
- Node: defaultNodeConfig(),
- Metrics: metrics.DefaultConfig,
- }
-
- // Load config file.
- if file := ctx.String(configFileFlag.Name); file != "" {
- if err := loadConfig(file, &cfg); err != nil {
- utils.Fatalf("%v", err)
- }
- }
-
- // Apply flags.
- utils.SetNodeConfig(ctx, &cfg.Node)
- return cfg
-}
-
-// makeConfigNode loads geth configuration and creates a blank node instance.
-func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) {
- cfg := loadBaseConfig(ctx)
- stack, err := node.New(&cfg.Node)
- if err != nil {
- utils.Fatalf("Failed to create the protocol stack: %v", err)
- }
- // Node doesn't by default populate account manager backends
- if err := setAccountManagerBackends(stack.Config(), stack.AccountManager(), stack.KeyStoreDir()); err != nil {
- utils.Fatalf("Failed to set account manager backends: %v", err)
- }
-
- utils.SetEthConfig(ctx, stack, &cfg.Eth)
- if ctx.IsSet(utils.EthStatsURLFlag.Name) {
- cfg.Ethstats.URL = ctx.String(utils.EthStatsURLFlag.Name)
- }
- applyMetricConfig(ctx, &cfg)
-
- return stack, cfg
-}
-
-// makeFullNode loads geth configuration and creates the Ethereum backend.
-func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) {
- stack, cfg := makeConfigNode(ctx)
- if ctx.IsSet(utils.OverrideCancun.Name) {
- v := ctx.Uint64(utils.OverrideCancun.Name)
- cfg.Eth.OverrideCancun = &v
- }
- if ctx.IsSet(utils.OverrideVerkle.Name) {
- v := ctx.Uint64(utils.OverrideVerkle.Name)
- cfg.Eth.OverrideVerkle = &v
- }
- backend, eth := utils.RegisterEthService(stack, &cfg.Eth)
-
- // Create gauge with geth system and build information
- if eth != nil { // The 'eth' backend may be nil in light mode
- var protos []string
- for _, p := range eth.Protocols() {
- protos = append(protos, fmt.Sprintf("%v/%d", p.Name, p.Version))
- }
- metrics.NewRegisteredGaugeInfo("geth/info", nil).Update(metrics.GaugeInfoValue{
- "arch": runtime.GOARCH,
- "os": runtime.GOOS,
- "version": cfg.Node.Version,
- "protocols": strings.Join(protos, ","),
- })
- }
-
- // Configure log filter RPC API.
- filterSystem := utils.RegisterFilterAPI(stack, backend, &cfg.Eth)
-
- // Configure GraphQL if requested.
- if ctx.IsSet(utils.GraphQLEnabledFlag.Name) {
- utils.RegisterGraphQLService(stack, backend, filterSystem, &cfg.Node)
- }
- // Add the Ethereum Stats daemon if requested.
- if cfg.Ethstats.URL != "" {
- utils.RegisterEthStatsService(stack, backend, cfg.Ethstats.URL)
- }
- // Configure full-sync tester service if requested
- if ctx.IsSet(utils.SyncTargetFlag.Name) {
- hex := hexutil.MustDecode(ctx.String(utils.SyncTargetFlag.Name))
- if len(hex) != common.HashLength {
- utils.Fatalf("invalid sync target length: have %d, want %d", len(hex), common.HashLength)
- }
- utils.RegisterFullSyncTester(stack, eth, common.BytesToHash(hex))
- }
- // Start the dev mode if requested, or launch the engine API for
- // interacting with external consensus client.
- if ctx.IsSet(utils.DeveloperFlag.Name) {
- simBeacon, err := catalyst.NewSimulatedBeacon(ctx.Uint64(utils.DeveloperPeriodFlag.Name), eth)
- if err != nil {
- utils.Fatalf("failed to register dev mode catalyst service: %v", err)
- }
- catalyst.RegisterSimulatedBeaconAPIs(stack, simBeacon)
- stack.RegisterLifecycle(simBeacon)
- } else {
- err := catalyst.Register(stack, eth)
- if err != nil {
- utils.Fatalf("failed to register catalyst service: %v", err)
- }
- }
- return stack, backend
-}
-
-// dumpConfig is the dumpconfig command.
-func dumpConfig(ctx *cli.Context) error {
- _, cfg := makeConfigNode(ctx)
- comment := ""
-
- if cfg.Eth.Genesis != nil {
- cfg.Eth.Genesis = nil
- comment += "# Note: this config doesn't contain the genesis block.\n\n"
- }
-
- out, err := tomlSettings.Marshal(&cfg)
- if err != nil {
- return err
- }
-
- dump := os.Stdout
- if ctx.NArg() > 0 {
- dump, err = os.OpenFile(ctx.Args().Get(0), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
- if err != nil {
- return err
- }
- defer dump.Close()
- }
- dump.WriteString(comment)
- dump.Write(out)
-
- return nil
-}
-
-func applyMetricConfig(ctx *cli.Context, cfg *gethConfig) {
- if ctx.IsSet(utils.MetricsEnabledFlag.Name) {
- cfg.Metrics.Enabled = ctx.Bool(utils.MetricsEnabledFlag.Name)
- }
- if ctx.IsSet(utils.MetricsEnabledExpensiveFlag.Name) {
- cfg.Metrics.EnabledExpensive = ctx.Bool(utils.MetricsEnabledExpensiveFlag.Name)
- }
- if ctx.IsSet(utils.MetricsHTTPFlag.Name) {
- cfg.Metrics.HTTP = ctx.String(utils.MetricsHTTPFlag.Name)
- }
- if ctx.IsSet(utils.MetricsPortFlag.Name) {
- cfg.Metrics.Port = ctx.Int(utils.MetricsPortFlag.Name)
- }
- if ctx.IsSet(utils.MetricsEnableInfluxDBFlag.Name) {
- cfg.Metrics.EnableInfluxDB = ctx.Bool(utils.MetricsEnableInfluxDBFlag.Name)
- }
- if ctx.IsSet(utils.MetricsInfluxDBEndpointFlag.Name) {
- cfg.Metrics.InfluxDBEndpoint = ctx.String(utils.MetricsInfluxDBEndpointFlag.Name)
- }
- if ctx.IsSet(utils.MetricsInfluxDBDatabaseFlag.Name) {
- cfg.Metrics.InfluxDBDatabase = ctx.String(utils.MetricsInfluxDBDatabaseFlag.Name)
- }
- if ctx.IsSet(utils.MetricsInfluxDBUsernameFlag.Name) {
- cfg.Metrics.InfluxDBUsername = ctx.String(utils.MetricsInfluxDBUsernameFlag.Name)
- }
- if ctx.IsSet(utils.MetricsInfluxDBPasswordFlag.Name) {
- cfg.Metrics.InfluxDBPassword = ctx.String(utils.MetricsInfluxDBPasswordFlag.Name)
- }
- if ctx.IsSet(utils.MetricsInfluxDBTagsFlag.Name) {
- cfg.Metrics.InfluxDBTags = ctx.String(utils.MetricsInfluxDBTagsFlag.Name)
- }
- if ctx.IsSet(utils.MetricsEnableInfluxDBV2Flag.Name) {
- cfg.Metrics.EnableInfluxDBV2 = ctx.Bool(utils.MetricsEnableInfluxDBV2Flag.Name)
- }
- if ctx.IsSet(utils.MetricsInfluxDBTokenFlag.Name) {
- cfg.Metrics.InfluxDBToken = ctx.String(utils.MetricsInfluxDBTokenFlag.Name)
- }
- if ctx.IsSet(utils.MetricsInfluxDBBucketFlag.Name) {
- cfg.Metrics.InfluxDBBucket = ctx.String(utils.MetricsInfluxDBBucketFlag.Name)
- }
- if ctx.IsSet(utils.MetricsInfluxDBOrganizationFlag.Name) {
- cfg.Metrics.InfluxDBOrganization = ctx.String(utils.MetricsInfluxDBOrganizationFlag.Name)
- }
-}
-
-func deprecated(field string) bool {
- switch field {
- case "ethconfig.Config.EVMInterpreter":
- return true
- case "ethconfig.Config.EWASMInterpreter":
- return true
- case "ethconfig.Config.TrieCleanCacheJournal":
- return true
- case "ethconfig.Config.TrieCleanCacheRejournal":
- return true
- default:
- return false
- }
-}
-
-func setAccountManagerBackends(conf *node.Config, am *accounts.Manager, keydir string) error {
- scryptN := keystore.StandardScryptN
- scryptP := keystore.StandardScryptP
- if conf.UseLightweightKDF {
- scryptN = keystore.LightScryptN
- scryptP = keystore.LightScryptP
- }
-
- // Assemble the supported backends
- if len(conf.ExternalSigner) > 0 {
- log.Info("Using external signer", "url", conf.ExternalSigner)
- if extBackend, err := external.NewExternalBackend(conf.ExternalSigner); err == nil {
- am.AddBackend(extBackend)
- return nil
- } else {
- return fmt.Errorf("error connecting to external signer: %v", err)
- }
- }
-
- // For now, we're using EITHER external signer OR local signers.
- // If/when we implement some form of lockfile for USB and keystore wallets,
- // we can have both, but it's very confusing for the user to see the same
- // accounts in both externally and locally, plus very racey.
- am.AddBackend(keystore.NewKeyStore(keydir, scryptN, scryptP))
- if conf.USB {
- // Start a USB hub for Ledger hardware wallets
- if ledgerhub, err := usbwallet.NewLedgerHub(); err != nil {
- log.Warn(fmt.Sprintf("Failed to start Ledger hub, disabling: %v", err))
- } else {
- am.AddBackend(ledgerhub)
- }
- // Start a USB hub for Trezor hardware wallets (HID version)
- if trezorhub, err := usbwallet.NewTrezorHubWithHID(); err != nil {
- log.Warn(fmt.Sprintf("Failed to start HID Trezor hub, disabling: %v", err))
- } else {
- am.AddBackend(trezorhub)
- }
- // Start a USB hub for Trezor hardware wallets (WebUSB version)
- if trezorhub, err := usbwallet.NewTrezorHubWithWebUSB(); err != nil {
- log.Warn(fmt.Sprintf("Failed to start WebUSB Trezor hub, disabling: %v", err))
- } else {
- am.AddBackend(trezorhub)
- }
- }
- if len(conf.SmartCardDaemonPath) > 0 {
- // Start a smart card hub
- if schub, err := scwallet.NewHub(conf.SmartCardDaemonPath, scwallet.Scheme, keydir); err != nil {
- log.Warn(fmt.Sprintf("Failed to start smart card hub, disabling: %v", err))
- } else {
- am.AddBackend(schub)
- }
- }
-
- return nil
-}
diff --git a/cmd/geth/consolecmd.go b/cmd/geth/consolecmd.go
deleted file mode 100644
index 526ede9619..0000000000
--- a/cmd/geth/consolecmd.go
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright 2016 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "fmt"
- "strings"
-
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/console"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/urfave/cli/v2"
-)
-
-var (
- consoleFlags = []cli.Flag{utils.JSpathFlag, utils.ExecFlag, utils.PreloadJSFlag}
-
- consoleCommand = &cli.Command{
- Action: localConsole,
- Name: "console",
- Usage: "Start an interactive JavaScript environment",
- Flags: flags.Merge(nodeFlags, rpcFlags, consoleFlags),
- Description: `
-The Geth console is an interactive shell for the JavaScript runtime environment
-which exposes a node admin interface as well as the Ðapp JavaScript API.
-See https://geth.ethereum.org/docs/interacting-with-geth/javascript-console.`,
- }
-
- attachCommand = &cli.Command{
- Action: remoteConsole,
- Name: "attach",
- Usage: "Start an interactive JavaScript environment (connect to node)",
- ArgsUsage: "[endpoint]",
- Flags: flags.Merge([]cli.Flag{utils.DataDirFlag, utils.HttpHeaderFlag}, consoleFlags),
- Description: `
-The Geth console is an interactive shell for the JavaScript runtime environment
-which exposes a node admin interface as well as the Ðapp JavaScript API.
-See https://geth.ethereum.org/docs/interacting-with-geth/javascript-console.
-This command allows to open a console on a running geth node.`,
- }
-
- javascriptCommand = &cli.Command{
- Action: ephemeralConsole,
- Name: "js",
- Usage: "(DEPRECATED) Execute the specified JavaScript files",
- ArgsUsage: " [jsfile...]",
- Flags: flags.Merge(nodeFlags, consoleFlags),
- Description: `
-The JavaScript VM exposes a node admin interface as well as the Ðapp
-JavaScript API. See https://geth.ethereum.org/docs/interacting-with-geth/javascript-console`,
- }
-)
-
-// localConsole starts a new geth node, attaching a JavaScript console to it at the
-// same time.
-func localConsole(ctx *cli.Context) error {
- // Create and start the node based on the CLI flags
- prepare(ctx)
- stack, backend := makeFullNode(ctx)
- startNode(ctx, stack, backend, true)
- defer stack.Close()
-
- // Attach to the newly started node and create the JavaScript console.
- client := stack.Attach()
- config := console.Config{
- DataDir: utils.MakeDataDir(ctx),
- DocRoot: ctx.String(utils.JSpathFlag.Name),
- Client: client,
- Preload: utils.MakeConsolePreloads(ctx),
- }
- console, err := console.New(config)
- if err != nil {
- return fmt.Errorf("failed to start the JavaScript console: %v", err)
- }
- defer console.Stop(false)
-
- // If only a short execution was requested, evaluate and return.
- if script := ctx.String(utils.ExecFlag.Name); script != "" {
- console.Evaluate(script)
- return nil
- }
-
- // Track node shutdown and stop the console when it goes down.
- // This happens when SIGTERM is sent to the process.
- go func() {
- stack.Wait()
- console.StopInteractive()
- }()
-
- // Print the welcome screen and enter interactive mode.
- console.Welcome()
- console.Interactive()
- return nil
-}
-
-// remoteConsole will connect to a remote geth instance, attaching a JavaScript
-// console to it.
-func remoteConsole(ctx *cli.Context) error {
- if ctx.Args().Len() > 1 {
- utils.Fatalf("invalid command-line: too many arguments")
- }
- endpoint := ctx.Args().First()
- if endpoint == "" {
- cfg := defaultNodeConfig()
- utils.SetDataDir(ctx, &cfg)
- endpoint = cfg.IPCEndpoint()
- }
- client, err := utils.DialRPCWithHeaders(endpoint, ctx.StringSlice(utils.HttpHeaderFlag.Name))
- if err != nil {
- utils.Fatalf("Unable to attach to remote geth: %v", err)
- }
- config := console.Config{
- DataDir: utils.MakeDataDir(ctx),
- DocRoot: ctx.String(utils.JSpathFlag.Name),
- Client: client,
- Preload: utils.MakeConsolePreloads(ctx),
- }
- console, err := console.New(config)
- if err != nil {
- utils.Fatalf("Failed to start the JavaScript console: %v", err)
- }
- defer console.Stop(false)
-
- if script := ctx.String(utils.ExecFlag.Name); script != "" {
- console.Evaluate(script)
- return nil
- }
-
- // Otherwise print the welcome screen and enter interactive mode
- console.Welcome()
- console.Interactive()
- return nil
-}
-
-// ephemeralConsole starts a new geth node, attaches an ephemeral JavaScript
-// console to it, executes each of the files specified as arguments and tears
-// everything down.
-func ephemeralConsole(ctx *cli.Context) error {
- var b strings.Builder
- for _, file := range ctx.Args().Slice() {
- b.Write([]byte(fmt.Sprintf("loadScript('%s');", file)))
- }
- utils.Fatalf(`The "js" command is deprecated. Please use the following instead:
-geth --exec "%s" console`, b.String())
- return nil
-}
diff --git a/cmd/geth/consolecmd_test.go b/cmd/geth/consolecmd_test.go
deleted file mode 100644
index ef6ef5f288..0000000000
--- a/cmd/geth/consolecmd_test.go
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2016 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "crypto/rand"
- "math/big"
- "path/filepath"
- "runtime"
- "strconv"
- "strings"
- "testing"
- "time"
-
- "github.com/ethereum/go-ethereum/params"
-)
-
-const (
- ipcAPIs = "admin:1.0 clique:1.0 debug:1.0 engine:1.0 eth:1.0 miner:1.0 net:1.0 rpc:1.0 txpool:1.0 web3:1.0"
- httpAPIs = "eth:1.0 net:1.0 rpc:1.0 web3:1.0"
-)
-
-// spawns geth with the given command line args, using a set of flags to minimise
-// memory and disk IO. If the args don't set --datadir, the
-// child g gets a temporary data directory.
-func runMinimalGeth(t *testing.T, args ...string) *testgeth {
- // --goerli to make the 'writing genesis to disk' faster (no accounts)
- // --networkid=1337 to avoid cache bump
- // --syncmode=full to avoid allocating fast sync bloom
- allArgs := []string{"--goerli", "--networkid", "1337", "--authrpc.port", "0", "--syncmode=full", "--port", "0",
- "--nat", "none", "--nodiscover", "--maxpeers", "0", "--cache", "64",
- "--datadir.minfreedisk", "0"}
- return runGeth(t, append(allArgs, args...)...)
-}
-
-// Tests that a node embedded within a console can be started up properly and
-// then terminated by closing the input stream.
-func TestConsoleWelcome(t *testing.T) {
- t.Parallel()
- coinbase := "0x8605cdbbdb6d264aa742e77020dcbc58fcdce182"
-
- // Start a geth console, make sure it's cleaned up and terminate the console
- geth := runMinimalGeth(t, "--miner.etherbase", coinbase, "console")
-
- // Gather all the infos the welcome message needs to contain
- geth.SetTemplateFunc("goos", func() string { return runtime.GOOS })
- geth.SetTemplateFunc("goarch", func() string { return runtime.GOARCH })
- geth.SetTemplateFunc("gover", runtime.Version)
- geth.SetTemplateFunc("gethver", func() string { return params.VersionWithCommit("", "") })
- geth.SetTemplateFunc("niltime", func() string {
- return time.Unix(1548854791, 0).Format("Mon Jan 02 2006 15:04:05 GMT-0700 (MST)")
- })
- geth.SetTemplateFunc("apis", func() string { return ipcAPIs })
-
- // Verify the actual welcome message to the required template
- geth.Expect(`
-Welcome to the Geth JavaScript console!
-
-instance: Geth/v{{gethver}}/{{goos}}-{{goarch}}/{{gover}}
-coinbase: {{.Etherbase}}
-at block: 0 ({{niltime}})
- datadir: {{.Datadir}}
- modules: {{apis}}
-
-To exit, press ctrl-d or type exit
-> {{.InputLine "exit"}}
-`)
- geth.ExpectExit()
-}
-
-// Tests that a console can be attached to a running node via various means.
-func TestAttachWelcome(t *testing.T) {
- var (
- ipc string
- httpPort string
- wsPort string
- )
- // Configure the instance for IPC attachment
- if runtime.GOOS == "windows" {
- ipc = `\\.\pipe\geth` + strconv.Itoa(trulyRandInt(100000, 999999))
- } else {
- ipc = filepath.Join(t.TempDir(), "geth.ipc")
- }
- // And HTTP + WS attachment
- p := trulyRandInt(1024, 65533) // Yeah, sometimes this will fail, sorry :P
- httpPort = strconv.Itoa(p)
- wsPort = strconv.Itoa(p + 1)
- geth := runMinimalGeth(t, "--miner.etherbase", "0x8605cdbbdb6d264aa742e77020dcbc58fcdce182",
- "--ipcpath", ipc,
- "--http", "--http.port", httpPort,
- "--ws", "--ws.port", wsPort)
- t.Run("ipc", func(t *testing.T) {
- waitForEndpoint(t, ipc, 3*time.Second)
- testAttachWelcome(t, geth, "ipc:"+ipc, ipcAPIs)
- })
- t.Run("http", func(t *testing.T) {
- endpoint := "http://127.0.0.1:" + httpPort
- waitForEndpoint(t, endpoint, 3*time.Second)
- testAttachWelcome(t, geth, endpoint, httpAPIs)
- })
- t.Run("ws", func(t *testing.T) {
- endpoint := "ws://127.0.0.1:" + wsPort
- waitForEndpoint(t, endpoint, 3*time.Second)
- testAttachWelcome(t, geth, endpoint, httpAPIs)
- })
- geth.Kill()
-}
-
-func testAttachWelcome(t *testing.T, geth *testgeth, endpoint, apis string) {
- // Attach to a running geth node and terminate immediately
- attach := runGeth(t, "attach", endpoint)
- defer attach.ExpectExit()
- attach.CloseStdin()
-
- // Gather all the infos the welcome message needs to contain
- attach.SetTemplateFunc("goos", func() string { return runtime.GOOS })
- attach.SetTemplateFunc("goarch", func() string { return runtime.GOARCH })
- attach.SetTemplateFunc("gover", runtime.Version)
- attach.SetTemplateFunc("gethver", func() string { return params.VersionWithCommit("", "") })
- attach.SetTemplateFunc("etherbase", func() string { return geth.Etherbase })
- attach.SetTemplateFunc("niltime", func() string {
- return time.Unix(1548854791, 0).Format("Mon Jan 02 2006 15:04:05 GMT-0700 (MST)")
- })
- attach.SetTemplateFunc("ipc", func() bool { return strings.HasPrefix(endpoint, "ipc") })
- attach.SetTemplateFunc("datadir", func() string { return geth.Datadir })
- attach.SetTemplateFunc("apis", func() string { return apis })
-
- // Verify the actual welcome message to the required template
- attach.Expect(`
-Welcome to the Geth JavaScript console!
-
-instance: Geth/v{{gethver}}/{{goos}}-{{goarch}}/{{gover}}
-coinbase: {{etherbase}}
-at block: 0 ({{niltime}}){{if ipc}}
- datadir: {{datadir}}{{end}}
- modules: {{apis}}
-
-To exit, press ctrl-d or type exit
-> {{.InputLine "exit" }}
-`)
- attach.ExpectExit()
-}
-
-// trulyRandInt generates a crypto random integer used by the console tests to
-// not clash network ports with other tests running concurrently.
-func trulyRandInt(lo, hi int) int {
- num, _ := rand.Int(rand.Reader, big.NewInt(int64(hi-lo)))
- return int(num.Int64()) + lo
-}
diff --git a/cmd/geth/dbcmd.go b/cmd/geth/dbcmd.go
deleted file mode 100644
index 1ae026fd29..0000000000
--- a/cmd/geth/dbcmd.go
+++ /dev/null
@@ -1,739 +0,0 @@
-// Copyright 2021 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "bytes"
- "fmt"
- "os"
- "os/signal"
- "path/filepath"
- "strconv"
- "strings"
- "syscall"
- "time"
-
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/console/prompt"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state/snapshot"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/olekukonko/tablewriter"
- "github.com/urfave/cli/v2"
-)
-
-var (
- removedbCommand = &cli.Command{
- Action: removeDB,
- Name: "removedb",
- Usage: "Remove blockchain and state databases",
- ArgsUsage: "",
- Flags: utils.DatabaseFlags,
- Description: `
-Remove blockchain and state databases`,
- }
- dbCommand = &cli.Command{
- Name: "db",
- Usage: "Low level database operations",
- ArgsUsage: "",
- Subcommands: []*cli.Command{
- dbInspectCmd,
- dbStatCmd,
- dbCompactCmd,
- dbGetCmd,
- dbDeleteCmd,
- dbPutCmd,
- dbGetSlotsCmd,
- dbDumpFreezerIndex,
- dbImportCmd,
- dbExportCmd,
- dbMetadataCmd,
- dbCheckStateContentCmd,
- },
- }
- dbInspectCmd = &cli.Command{
- Action: inspect,
- Name: "inspect",
- ArgsUsage: " ",
- Flags: flags.Merge([]cli.Flag{
- utils.SyncModeFlag,
- }, utils.NetworkFlags, utils.DatabaseFlags),
- Usage: "Inspect the storage size for each type of data in the database",
- Description: `This commands iterates the entire database. If the optional 'prefix' and 'start' arguments are provided, then the iteration is limited to the given subset of data.`,
- }
- dbCheckStateContentCmd = &cli.Command{
- Action: checkStateContent,
- Name: "check-state-content",
- ArgsUsage: "",
- Flags: flags.Merge(utils.NetworkFlags, utils.DatabaseFlags),
- Usage: "Verify that state data is cryptographically correct",
- Description: `This command iterates the entire database for 32-byte keys, looking for rlp-encoded trie nodes.
-For each trie node encountered, it checks that the key corresponds to the keccak256(value). If this is not true, this indicates
-a data corruption.`,
- }
- dbStatCmd = &cli.Command{
- Action: dbStats,
- Name: "stats",
- Usage: "Print leveldb statistics",
- Flags: flags.Merge([]cli.Flag{
- utils.SyncModeFlag,
- }, utils.NetworkFlags, utils.DatabaseFlags),
- }
- dbCompactCmd = &cli.Command{
- Action: dbCompact,
- Name: "compact",
- Usage: "Compact leveldb database. WARNING: May take a very long time",
- Flags: flags.Merge([]cli.Flag{
- utils.SyncModeFlag,
- utils.CacheFlag,
- utils.CacheDatabaseFlag,
- }, utils.NetworkFlags, utils.DatabaseFlags),
- Description: `This command performs a database compaction.
-WARNING: This operation may take a very long time to finish, and may cause database
-corruption if it is aborted during execution'!`,
- }
- dbGetCmd = &cli.Command{
- Action: dbGet,
- Name: "get",
- Usage: "Show the value of a database key",
- ArgsUsage: "",
- Flags: flags.Merge([]cli.Flag{
- utils.SyncModeFlag,
- }, utils.NetworkFlags, utils.DatabaseFlags),
- Description: "This command looks up the specified database key from the database.",
- }
- dbDeleteCmd = &cli.Command{
- Action: dbDelete,
- Name: "delete",
- Usage: "Delete a database key (WARNING: may corrupt your database)",
- ArgsUsage: "",
- Flags: flags.Merge([]cli.Flag{
- utils.SyncModeFlag,
- }, utils.NetworkFlags, utils.DatabaseFlags),
- Description: `This command deletes the specified database key from the database.
-WARNING: This is a low-level operation which may cause database corruption!`,
- }
- dbPutCmd = &cli.Command{
- Action: dbPut,
- Name: "put",
- Usage: "Set the value of a database key (WARNING: may corrupt your database)",
- ArgsUsage: " ",
- Flags: flags.Merge([]cli.Flag{
- utils.SyncModeFlag,
- }, utils.NetworkFlags, utils.DatabaseFlags),
- Description: `This command sets a given database key to the given value.
-WARNING: This is a low-level operation which may cause database corruption!`,
- }
- dbGetSlotsCmd = &cli.Command{
- Action: dbDumpTrie,
- Name: "dumptrie",
- Usage: "Show the storage key/values of a given storage trie",
- ArgsUsage: " ",
- Flags: flags.Merge([]cli.Flag{
- utils.SyncModeFlag,
- }, utils.NetworkFlags, utils.DatabaseFlags),
- Description: "This command looks up the specified database key from the database.",
- }
- dbDumpFreezerIndex = &cli.Command{
- Action: freezerInspect,
- Name: "freezer-index",
- Usage: "Dump out the index of a specific freezer table",
- ArgsUsage: " ",
- Flags: flags.Merge([]cli.Flag{
- utils.SyncModeFlag,
- }, utils.NetworkFlags, utils.DatabaseFlags),
- Description: "This command displays information about the freezer index.",
- }
- dbImportCmd = &cli.Command{
- Action: importLDBdata,
- Name: "import",
- Usage: "Imports leveldb-data from an exported RLP dump.",
- ArgsUsage: " has .gz suffix, gzip compression will be used.",
- ArgsUsage: " ",
- Flags: flags.Merge([]cli.Flag{
- utils.SyncModeFlag,
- }, utils.NetworkFlags, utils.DatabaseFlags),
- Description: "Exports the specified chain data to an RLP encoded stream, optionally gzip-compressed.",
- }
- dbMetadataCmd = &cli.Command{
- Action: showMetaData,
- Name: "metadata",
- Usage: "Shows metadata about the chain status.",
- Flags: flags.Merge([]cli.Flag{
- utils.SyncModeFlag,
- }, utils.NetworkFlags, utils.DatabaseFlags),
- Description: "Shows metadata about the chain status.",
- }
-)
-
-func removeDB(ctx *cli.Context) error {
- stack, config := makeConfigNode(ctx)
-
- // Resolve folder paths.
- var (
- rootDir = stack.ResolvePath("chaindata")
- ancientDir = config.Eth.DatabaseFreezer
- )
- switch {
- case ancientDir == "":
- ancientDir = filepath.Join(stack.ResolvePath("chaindata"), "ancient")
- case !filepath.IsAbs(ancientDir):
- ancientDir = config.Node.ResolvePath(ancientDir)
- }
- // Delete state data
- statePaths := []string{rootDir, filepath.Join(ancientDir, rawdb.StateFreezerName)}
- confirmAndRemoveDB(statePaths, "state data")
-
- // Delete ancient chain
- chainPaths := []string{filepath.Join(ancientDir, rawdb.ChainFreezerName)}
- confirmAndRemoveDB(chainPaths, "ancient chain")
- return nil
-}
-
-// removeFolder deletes all files (not folders) inside the directory 'dir' (but
-// not files in subfolders).
-func removeFolder(dir string) {
- filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
- // If we're at the top level folder, recurse into
- if path == dir {
- return nil
- }
- // Delete all the files, but not subfolders
- if !info.IsDir() {
- os.Remove(path)
- return nil
- }
- return filepath.SkipDir
- })
-}
-
-// confirmAndRemoveDB prompts the user for a last confirmation and removes the
-// list of folders if accepted.
-func confirmAndRemoveDB(paths []string, kind string) {
- msg := fmt.Sprintf("Location(s) of '%s': \n", kind)
- for _, path := range paths {
- msg += fmt.Sprintf("\t- %s\n", path)
- }
- fmt.Println(msg)
-
- confirm, err := prompt.Stdin.PromptConfirm(fmt.Sprintf("Remove '%s'?", kind))
- switch {
- case err != nil:
- utils.Fatalf("%v", err)
- case !confirm:
- log.Info("Database deletion skipped", "kind", kind, "paths", paths)
- default:
- var (
- deleted []string
- start = time.Now()
- )
- for _, path := range paths {
- if common.FileExist(path) {
- removeFolder(path)
- deleted = append(deleted, path)
- } else {
- log.Info("Folder is not existent", "path", path)
- }
- }
- log.Info("Database successfully deleted", "kind", kind, "paths", deleted, "elapsed", common.PrettyDuration(time.Since(start)))
- }
-}
-
-func inspect(ctx *cli.Context) error {
- var (
- prefix []byte
- start []byte
- )
- if ctx.NArg() > 2 {
- return fmt.Errorf("max 2 arguments: %v", ctx.Command.ArgsUsage)
- }
- if ctx.NArg() >= 1 {
- if d, err := hexutil.Decode(ctx.Args().Get(0)); err != nil {
- return fmt.Errorf("failed to hex-decode 'prefix': %v", err)
- } else {
- prefix = d
- }
- }
- if ctx.NArg() >= 2 {
- if d, err := hexutil.Decode(ctx.Args().Get(1)); err != nil {
- return fmt.Errorf("failed to hex-decode 'start': %v", err)
- } else {
- start = d
- }
- }
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- db := utils.MakeChainDatabase(ctx, stack, true)
- defer db.Close()
-
- return rawdb.InspectDatabase(db, prefix, start)
-}
-
-func checkStateContent(ctx *cli.Context) error {
- var (
- prefix []byte
- start []byte
- )
- if ctx.NArg() > 1 {
- return fmt.Errorf("max 1 argument: %v", ctx.Command.ArgsUsage)
- }
- if ctx.NArg() > 0 {
- if d, err := hexutil.Decode(ctx.Args().First()); err != nil {
- return fmt.Errorf("failed to hex-decode 'start': %v", err)
- } else {
- start = d
- }
- }
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- db := utils.MakeChainDatabase(ctx, stack, true)
- defer db.Close()
- var (
- it = rawdb.NewKeyLengthIterator(db.NewIterator(prefix, start), 32)
- hasher = crypto.NewKeccakState()
- got = make([]byte, 32)
- errs int
- count int
- startTime = time.Now()
- lastLog = time.Now()
- )
- for it.Next() {
- count++
- k := it.Key()
- v := it.Value()
- hasher.Reset()
- hasher.Write(v)
- hasher.Read(got)
- if !bytes.Equal(k, got) {
- errs++
- fmt.Printf("Error at %#x\n", k)
- fmt.Printf(" Hash: %#x\n", got)
- fmt.Printf(" Data: %#x\n", v)
- }
- if time.Since(lastLog) > 8*time.Second {
- log.Info("Iterating the database", "at", fmt.Sprintf("%#x", k), "elapsed", common.PrettyDuration(time.Since(startTime)))
- lastLog = time.Now()
- }
- }
- if err := it.Error(); err != nil {
- return err
- }
- log.Info("Iterated the state content", "errors", errs, "items", count)
- return nil
-}
-
-func showLeveldbStats(db ethdb.KeyValueStater) {
- if stats, err := db.Stat("leveldb.stats"); err != nil {
- log.Warn("Failed to read database stats", "error", err)
- } else {
- fmt.Println(stats)
- }
- if ioStats, err := db.Stat("leveldb.iostats"); err != nil {
- log.Warn("Failed to read database iostats", "error", err)
- } else {
- fmt.Println(ioStats)
- }
-}
-
-func dbStats(ctx *cli.Context) error {
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- db := utils.MakeChainDatabase(ctx, stack, true)
- defer db.Close()
-
- showLeveldbStats(db)
- return nil
-}
-
-func dbCompact(ctx *cli.Context) error {
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- db := utils.MakeChainDatabase(ctx, stack, false)
- defer db.Close()
-
- log.Info("Stats before compaction")
- showLeveldbStats(db)
-
- log.Info("Triggering compaction")
- if err := db.Compact(nil, nil); err != nil {
- log.Info("Compact err", "error", err)
- return err
- }
- log.Info("Stats after compaction")
- showLeveldbStats(db)
- return nil
-}
-
-// dbGet shows the value of a given database key
-func dbGet(ctx *cli.Context) error {
- if ctx.NArg() != 1 {
- return fmt.Errorf("required arguments: %v", ctx.Command.ArgsUsage)
- }
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- db := utils.MakeChainDatabase(ctx, stack, true)
- defer db.Close()
-
- key, err := common.ParseHexOrString(ctx.Args().Get(0))
- if err != nil {
- log.Info("Could not decode the key", "error", err)
- return err
- }
-
- data, err := db.Get(key)
- if err != nil {
- log.Info("Get operation failed", "key", fmt.Sprintf("%#x", key), "error", err)
- return err
- }
- fmt.Printf("key %#x: %#x\n", key, data)
- return nil
-}
-
-// dbDelete deletes a key from the database
-func dbDelete(ctx *cli.Context) error {
- if ctx.NArg() != 1 {
- return fmt.Errorf("required arguments: %v", ctx.Command.ArgsUsage)
- }
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- db := utils.MakeChainDatabase(ctx, stack, false)
- defer db.Close()
-
- key, err := common.ParseHexOrString(ctx.Args().Get(0))
- if err != nil {
- log.Info("Could not decode the key", "error", err)
- return err
- }
- data, err := db.Get(key)
- if err == nil {
- fmt.Printf("Previous value: %#x\n", data)
- }
- if err = db.Delete(key); err != nil {
- log.Info("Delete operation returned an error", "key", fmt.Sprintf("%#x", key), "error", err)
- return err
- }
- return nil
-}
-
-// dbPut overwrite a value in the database
-func dbPut(ctx *cli.Context) error {
- if ctx.NArg() != 2 {
- return fmt.Errorf("required arguments: %v", ctx.Command.ArgsUsage)
- }
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- db := utils.MakeChainDatabase(ctx, stack, false)
- defer db.Close()
-
- var (
- key []byte
- value []byte
- data []byte
- err error
- )
- key, err = common.ParseHexOrString(ctx.Args().Get(0))
- if err != nil {
- log.Info("Could not decode the key", "error", err)
- return err
- }
- value, err = hexutil.Decode(ctx.Args().Get(1))
- if err != nil {
- log.Info("Could not decode the value", "error", err)
- return err
- }
- data, err = db.Get(key)
- if err == nil {
- fmt.Printf("Previous value: %#x\n", data)
- }
- return db.Put(key, value)
-}
-
-// dbDumpTrie shows the key-value slots of a given storage trie
-func dbDumpTrie(ctx *cli.Context) error {
- if ctx.NArg() < 3 {
- return fmt.Errorf("required arguments: %v", ctx.Command.ArgsUsage)
- }
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- db := utils.MakeChainDatabase(ctx, stack, true)
- defer db.Close()
-
- triedb := utils.MakeTrieDatabase(ctx, db, false, true, false)
- defer triedb.Close()
-
- var (
- state []byte
- storage []byte
- account []byte
- start []byte
- max = int64(-1)
- err error
- )
- if state, err = hexutil.Decode(ctx.Args().Get(0)); err != nil {
- log.Info("Could not decode the state root", "error", err)
- return err
- }
- if account, err = hexutil.Decode(ctx.Args().Get(1)); err != nil {
- log.Info("Could not decode the account hash", "error", err)
- return err
- }
- if storage, err = hexutil.Decode(ctx.Args().Get(2)); err != nil {
- log.Info("Could not decode the storage trie root", "error", err)
- return err
- }
- if ctx.NArg() > 3 {
- if start, err = hexutil.Decode(ctx.Args().Get(3)); err != nil {
- log.Info("Could not decode the seek position", "error", err)
- return err
- }
- }
- if ctx.NArg() > 4 {
- if max, err = strconv.ParseInt(ctx.Args().Get(4), 10, 64); err != nil {
- log.Info("Could not decode the max count", "error", err)
- return err
- }
- }
- id := trie.StorageTrieID(common.BytesToHash(state), common.BytesToHash(account), common.BytesToHash(storage))
- theTrie, err := trie.New(id, triedb)
- if err != nil {
- return err
- }
- trieIt, err := theTrie.NodeIterator(start)
- if err != nil {
- return err
- }
- var count int64
- it := trie.NewIterator(trieIt)
- for it.Next() {
- if max > 0 && count == max {
- fmt.Printf("Exiting after %d values\n", count)
- break
- }
- fmt.Printf(" %d. key %#x: %#x\n", count, it.Key, it.Value)
- count++
- }
- return it.Err
-}
-
-func freezerInspect(ctx *cli.Context) error {
- if ctx.NArg() < 4 {
- return fmt.Errorf("required arguments: %v", ctx.Command.ArgsUsage)
- }
- var (
- freezer = ctx.Args().Get(0)
- table = ctx.Args().Get(1)
- )
- start, err := strconv.ParseInt(ctx.Args().Get(2), 10, 64)
- if err != nil {
- log.Info("Could not read start-param", "err", err)
- return err
- }
- end, err := strconv.ParseInt(ctx.Args().Get(3), 10, 64)
- if err != nil {
- log.Info("Could not read count param", "err", err)
- return err
- }
- stack, _ := makeConfigNode(ctx)
- ancient := stack.ResolveAncient("chaindata", ctx.String(utils.AncientFlag.Name))
- stack.Close()
- return rawdb.InspectFreezerTable(ancient, freezer, table, start, end)
-}
-
-func importLDBdata(ctx *cli.Context) error {
- start := 0
- switch ctx.NArg() {
- case 1:
- break
- case 2:
- s, err := strconv.Atoi(ctx.Args().Get(1))
- if err != nil {
- return fmt.Errorf("second arg must be an integer: %v", err)
- }
- start = s
- default:
- return fmt.Errorf("required arguments: %v", ctx.Command.ArgsUsage)
- }
- var (
- fName = ctx.Args().Get(0)
- stack, _ = makeConfigNode(ctx)
- interrupt = make(chan os.Signal, 1)
- stop = make(chan struct{})
- )
- defer stack.Close()
- signal.Notify(interrupt, syscall.SIGINT, syscall.SIGTERM)
- defer signal.Stop(interrupt)
- defer close(interrupt)
- go func() {
- if _, ok := <-interrupt; ok {
- log.Info("Interrupted during ldb import, stopping at next batch")
- }
- close(stop)
- }()
- db := utils.MakeChainDatabase(ctx, stack, false)
- defer db.Close()
- return utils.ImportLDBData(db, fName, int64(start), stop)
-}
-
-type preimageIterator struct {
- iter ethdb.Iterator
-}
-
-func (iter *preimageIterator) Next() (byte, []byte, []byte, bool) {
- for iter.iter.Next() {
- key := iter.iter.Key()
- if bytes.HasPrefix(key, rawdb.PreimagePrefix) && len(key) == (len(rawdb.PreimagePrefix)+common.HashLength) {
- return utils.OpBatchAdd, key, iter.iter.Value(), true
- }
- }
- return 0, nil, nil, false
-}
-
-func (iter *preimageIterator) Release() {
- iter.iter.Release()
-}
-
-type snapshotIterator struct {
- init bool
- account ethdb.Iterator
- storage ethdb.Iterator
-}
-
-func (iter *snapshotIterator) Next() (byte, []byte, []byte, bool) {
- if !iter.init {
- iter.init = true
- return utils.OpBatchDel, rawdb.SnapshotRootKey, nil, true
- }
- for iter.account.Next() {
- key := iter.account.Key()
- if bytes.HasPrefix(key, rawdb.SnapshotAccountPrefix) && len(key) == (len(rawdb.SnapshotAccountPrefix)+common.HashLength) {
- return utils.OpBatchAdd, key, iter.account.Value(), true
- }
- }
- for iter.storage.Next() {
- key := iter.storage.Key()
- if bytes.HasPrefix(key, rawdb.SnapshotStoragePrefix) && len(key) == (len(rawdb.SnapshotStoragePrefix)+2*common.HashLength) {
- return utils.OpBatchAdd, key, iter.storage.Value(), true
- }
- }
- return 0, nil, nil, false
-}
-
-func (iter *snapshotIterator) Release() {
- iter.account.Release()
- iter.storage.Release()
-}
-
-// chainExporters defines the export scheme for all exportable chain data.
-var chainExporters = map[string]func(db ethdb.Database) utils.ChainDataIterator{
- "preimage": func(db ethdb.Database) utils.ChainDataIterator {
- iter := db.NewIterator(rawdb.PreimagePrefix, nil)
- return &preimageIterator{iter: iter}
- },
- "snapshot": func(db ethdb.Database) utils.ChainDataIterator {
- account := db.NewIterator(rawdb.SnapshotAccountPrefix, nil)
- storage := db.NewIterator(rawdb.SnapshotStoragePrefix, nil)
- return &snapshotIterator{account: account, storage: storage}
- },
-}
-
-func exportChaindata(ctx *cli.Context) error {
- if ctx.NArg() < 2 {
- return fmt.Errorf("required arguments: %v", ctx.Command.ArgsUsage)
- }
- // Parse the required chain data type, make sure it's supported.
- kind := ctx.Args().Get(0)
- kind = strings.ToLower(strings.Trim(kind, " "))
- exporter, ok := chainExporters[kind]
- if !ok {
- var kinds []string
- for kind := range chainExporters {
- kinds = append(kinds, kind)
- }
- return fmt.Errorf("invalid data type %s, supported types: %s", kind, strings.Join(kinds, ", "))
- }
- var (
- stack, _ = makeConfigNode(ctx)
- interrupt = make(chan os.Signal, 1)
- stop = make(chan struct{})
- )
- defer stack.Close()
- signal.Notify(interrupt, syscall.SIGINT, syscall.SIGTERM)
- defer signal.Stop(interrupt)
- defer close(interrupt)
- go func() {
- if _, ok := <-interrupt; ok {
- log.Info("Interrupted during db export, stopping at next batch")
- }
- close(stop)
- }()
- db := utils.MakeChainDatabase(ctx, stack, true)
- defer db.Close()
- return utils.ExportChaindata(ctx.Args().Get(1), kind, exporter(db), stop)
-}
-
-func showMetaData(ctx *cli.Context) error {
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
- db := utils.MakeChainDatabase(ctx, stack, true)
- defer db.Close()
-
- ancients, err := db.Ancients()
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error accessing ancients: %v", err)
- }
- data := rawdb.ReadChainMetadata(db)
- data = append(data, []string{"frozen", fmt.Sprintf("%d items", ancients)})
- data = append(data, []string{"snapshotGenerator", snapshot.ParseGeneratorStatus(rawdb.ReadSnapshotGenerator(db))})
- if b := rawdb.ReadHeadBlock(db); b != nil {
- data = append(data, []string{"headBlock.Hash", fmt.Sprintf("%v", b.Hash())})
- data = append(data, []string{"headBlock.Root", fmt.Sprintf("%v", b.Root())})
- data = append(data, []string{"headBlock.Number", fmt.Sprintf("%d (%#x)", b.Number(), b.Number())})
- }
- if h := rawdb.ReadHeadHeader(db); h != nil {
- data = append(data, []string{"headHeader.Hash", fmt.Sprintf("%v", h.Hash())})
- data = append(data, []string{"headHeader.Root", fmt.Sprintf("%v", h.Root)})
- data = append(data, []string{"headHeader.Number", fmt.Sprintf("%d (%#x)", h.Number, h.Number)})
- }
- table := tablewriter.NewWriter(os.Stdout)
- table.SetHeader([]string{"Field", "Value"})
- table.AppendBulk(data)
- table.Render()
- return nil
-}
diff --git a/cmd/geth/exportcmd_test.go b/cmd/geth/exportcmd_test.go
deleted file mode 100644
index 9570b1ffd2..0000000000
--- a/cmd/geth/exportcmd_test.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2022 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "bytes"
- "fmt"
- "os"
- "testing"
-
- "github.com/ethereum/go-ethereum/common"
-)
-
-// TestExport does a basic test of "geth export", exporting the test-genesis.
-func TestExport(t *testing.T) {
- t.Parallel()
- outfile := fmt.Sprintf("%v/testExport.out", os.TempDir())
- defer os.Remove(outfile)
- geth := runGeth(t, "--datadir", initGeth(t), "export", outfile)
- geth.WaitExit()
- if have, want := geth.ExitStatus(), 0; have != want {
- t.Errorf("exit error, have %d want %d", have, want)
- }
- have, err := os.ReadFile(outfile)
- if err != nil {
- t.Fatal(err)
- }
- want := common.FromHex("0xf9026bf90266a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08758259b018f7bce3d2be2ddb62f325eaeea0a0c188cf96623eab468a4413e03a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180837a12008080b875000000000000000000000000000000000000000000000000000000000000000002f0d131f1f97aef08aec6e3291b957d9efe71050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0")
- if !bytes.Equal(have, want) {
- t.Fatalf("wrong content exported")
- }
-}
diff --git a/cmd/geth/genesis_test.go b/cmd/geth/genesis_test.go
deleted file mode 100644
index ffe8176b01..0000000000
--- a/cmd/geth/genesis_test.go
+++ /dev/null
@@ -1,198 +0,0 @@
-// Copyright 2016 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "fmt"
- "os"
- "path/filepath"
- "strconv"
- "testing"
-)
-
-var customGenesisTests = []struct {
- genesis string
- query string
- result string
-}{
- // Genesis file with an empty chain configuration (ensure missing fields work)
- {
- genesis: `{
- "alloc" : {},
- "coinbase" : "0x0000000000000000000000000000000000000000",
- "difficulty" : "0x20000",
- "extraData" : "",
- "gasLimit" : "0x2fefd8",
- "nonce" : "0x0000000000001338",
- "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
- "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
- "timestamp" : "0x00",
- "config" : {
- "terminalTotalDifficultyPassed": true
- }
- }`,
- query: "eth.getBlock(0).nonce",
- result: "0x0000000000001338",
- },
- // Genesis file with specific chain configurations
- {
- genesis: `{
- "alloc" : {},
- "coinbase" : "0x0000000000000000000000000000000000000000",
- "difficulty" : "0x20000",
- "extraData" : "",
- "gasLimit" : "0x2fefd8",
- "nonce" : "0x0000000000001339",
- "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
- "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
- "timestamp" : "0x00",
- "config" : {
- "homesteadBlock" : 42,
- "daoForkBlock" : 141,
- "daoForkSupport" : true,
- "terminalTotalDifficultyPassed" : true
- }
- }`,
- query: "eth.getBlock(0).nonce",
- result: "0x0000000000001339",
- },
-}
-
-// Tests that initializing Geth with a custom genesis block and chain definitions
-// work properly.
-func TestCustomGenesis(t *testing.T) {
- t.Parallel()
- for i, tt := range customGenesisTests {
- // Create a temporary data directory to use and inspect later
- datadir := t.TempDir()
-
- // Initialize the data directory with the custom genesis block
- json := filepath.Join(datadir, "genesis.json")
- if err := os.WriteFile(json, []byte(tt.genesis), 0600); err != nil {
- t.Fatalf("test %d: failed to write genesis file: %v", i, err)
- }
- runGeth(t, "--datadir", datadir, "init", json).WaitExit()
-
- // Query the custom genesis block
- geth := runGeth(t, "--networkid", "1337", "--syncmode=full", "--cache", "16",
- "--datadir", datadir, "--maxpeers", "0", "--port", "0", "--authrpc.port", "0",
- "--nodiscover", "--nat", "none", "--ipcdisable",
- "--exec", tt.query, "console")
- geth.ExpectRegexp(tt.result)
- geth.ExpectExit()
- }
-}
-
-// TestCustomBackend that the backend selection and detection (leveldb vs pebble) works properly.
-func TestCustomBackend(t *testing.T) {
- t.Parallel()
- // Test pebble, but only on 64-bit platforms
- if strconv.IntSize != 64 {
- t.Skip("Custom backends are only available on 64-bit platform")
- }
- genesis := `{
- "alloc" : {},
- "coinbase" : "0x0000000000000000000000000000000000000000",
- "difficulty" : "0x20000",
- "extraData" : "",
- "gasLimit" : "0x2fefd8",
- "nonce" : "0x0000000000001338",
- "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
- "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
- "timestamp" : "0x00",
- "config" : {
- "terminalTotalDifficultyPassed": true
- }
- }`
- type backendTest struct {
- initArgs []string
- initExpect string
- execArgs []string
- execExpect string
- }
- testfunc := func(t *testing.T, tt backendTest) error {
- // Create a temporary data directory to use and inspect later
- datadir := t.TempDir()
-
- // Initialize the data directory with the custom genesis block
- json := filepath.Join(datadir, "genesis.json")
- if err := os.WriteFile(json, []byte(genesis), 0600); err != nil {
- return fmt.Errorf("failed to write genesis file: %v", err)
- }
- { // Init
- args := append(tt.initArgs, "--datadir", datadir, "init", json)
- geth := runGeth(t, args...)
- geth.ExpectRegexp(tt.initExpect)
- geth.ExpectExit()
- }
- { // Exec + query
- args := append(tt.execArgs, "--networkid", "1337", "--syncmode=full", "--cache", "16",
- "--datadir", datadir, "--maxpeers", "0", "--port", "0", "--authrpc.port", "0",
- "--nodiscover", "--nat", "none", "--ipcdisable",
- "--exec", "eth.getBlock(0).nonce", "console")
- geth := runGeth(t, args...)
- geth.ExpectRegexp(tt.execExpect)
- geth.ExpectExit()
- }
- return nil
- }
- for i, tt := range []backendTest{
- { // When not specified, it should default to pebble
- execArgs: []string{"--db.engine", "pebble"},
- execExpect: "0x0000000000001338",
- },
- { // Explicit leveldb
- initArgs: []string{"--db.engine", "leveldb"},
- execArgs: []string{"--db.engine", "leveldb"},
- execExpect: "0x0000000000001338",
- },
- { // Explicit leveldb first, then autodiscover
- initArgs: []string{"--db.engine", "leveldb"},
- execExpect: "0x0000000000001338",
- },
- { // Explicit pebble
- initArgs: []string{"--db.engine", "pebble"},
- execArgs: []string{"--db.engine", "pebble"},
- execExpect: "0x0000000000001338",
- },
- { // Explicit pebble, then auto-discover
- initArgs: []string{"--db.engine", "pebble"},
- execExpect: "0x0000000000001338",
- },
- { // Can't start pebble on top of leveldb
- initArgs: []string{"--db.engine", "leveldb"},
- execArgs: []string{"--db.engine", "pebble"},
- execExpect: `Fatal: Failed to register the Ethereum service: db.engine choice was pebble but found pre-existing leveldb database in specified data directory`,
- },
- { // Can't start leveldb on top of pebble
- initArgs: []string{"--db.engine", "pebble"},
- execArgs: []string{"--db.engine", "leveldb"},
- execExpect: `Fatal: Failed to register the Ethereum service: db.engine choice was leveldb but found pre-existing pebble database in specified data directory`,
- },
- { // Reject invalid backend choice
- initArgs: []string{"--db.engine", "mssql"},
- initExpect: `Fatal: Invalid choice for db.engine 'mssql', allowed 'leveldb' or 'pebble'`,
- // Since the init fails, this will return the (default) mainnet genesis
- // block nonce
- execExpect: `0x0000000000000042`,
- },
- } {
- if err := testfunc(t, tt); err != nil {
- t.Fatalf("test %d-leveldb: %v", i, err)
- }
- }
-}
diff --git a/cmd/geth/logging_test.go b/cmd/geth/logging_test.go
deleted file mode 100644
index b5ce03f4b8..0000000000
--- a/cmd/geth/logging_test.go
+++ /dev/null
@@ -1,237 +0,0 @@
-//go:build integrationtests
-
-// Copyright 2023 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "bufio"
- "bytes"
- "encoding/json"
- "fmt"
- "io"
- "math/rand"
- "os"
- "os/exec"
- "strings"
- "testing"
-
- "github.com/ethereum/go-ethereum/internal/reexec"
-)
-
-func runSelf(args ...string) ([]byte, error) {
- cmd := &exec.Cmd{
- Path: reexec.Self(),
- Args: append([]string{"geth-test"}, args...),
- }
- return cmd.CombinedOutput()
-}
-
-func split(input io.Reader) []string {
- var output []string
- scanner := bufio.NewScanner(input)
- scanner.Split(bufio.ScanLines)
- for scanner.Scan() {
- output = append(output, strings.TrimSpace(scanner.Text()))
- }
- return output
-}
-
-func censor(input string, start, end int) string {
- if len(input) < end {
- return input
- }
- return input[:start] + strings.Repeat("X", end-start) + input[end:]
-}
-
-func TestLogging(t *testing.T) {
- t.Parallel()
- testConsoleLogging(t, "terminal", 6, 24)
- testConsoleLogging(t, "logfmt", 2, 26)
-}
-
-func testConsoleLogging(t *testing.T, format string, tStart, tEnd int) {
- haveB, err := runSelf("--log.format", format, "logtest")
- if err != nil {
- t.Fatal(err)
- }
- readFile, err := os.Open(fmt.Sprintf("testdata/logging/logtest-%v.txt", format))
- if err != nil {
- t.Fatal(err)
- }
- wantLines := split(readFile)
- haveLines := split(bytes.NewBuffer(haveB))
- for i, want := range wantLines {
- if i > len(haveLines)-1 {
- t.Fatalf("format %v, line %d missing, want:%v", format, i, want)
- }
- have := haveLines[i]
- for strings.Contains(have, "Unknown config environment variable") {
- // This can happen on CI runs. Drop it.
- haveLines = append(haveLines[:i], haveLines[i+1:]...)
- have = haveLines[i]
- }
-
- // Black out the timestamp
- have = censor(have, tStart, tEnd)
- want = censor(want, tStart, tEnd)
- if have != want {
- t.Logf(nicediff([]byte(have), []byte(want)))
- t.Fatalf("format %v, line %d\nhave %v\nwant %v", format, i, have, want)
- }
- }
- if len(haveLines) != len(wantLines) {
- t.Errorf("format %v, want %d lines, have %d", format, len(haveLines), len(wantLines))
- }
-}
-
-func TestJsonLogging(t *testing.T) {
- t.Parallel()
- haveB, err := runSelf("--log.format", "json", "logtest")
- if err != nil {
- t.Fatal(err)
- }
- readFile, err := os.Open("testdata/logging/logtest-json.txt")
- if err != nil {
- t.Fatal(err)
- }
- wantLines := split(readFile)
- haveLines := split(bytes.NewBuffer(haveB))
- for i, wantLine := range wantLines {
- if i > len(haveLines)-1 {
- t.Fatalf("format %v, line %d missing, want:%v", "json", i, wantLine)
- }
- haveLine := haveLines[i]
- for strings.Contains(haveLine, "Unknown config environment variable") {
- // This can happen on CI runs. Drop it.
- haveLines = append(haveLines[:i], haveLines[i+1:]...)
- haveLine = haveLines[i]
- }
- var have, want []byte
- {
- var h map[string]any
- if err := json.Unmarshal([]byte(haveLine), &h); err != nil {
- t.Fatal(err)
- }
- h["t"] = "xxx"
- have, _ = json.Marshal(h)
- }
- {
- var w map[string]any
- if err := json.Unmarshal([]byte(wantLine), &w); err != nil {
- t.Fatal(err)
- }
- w["t"] = "xxx"
- want, _ = json.Marshal(w)
- }
- if !bytes.Equal(have, want) {
- // show an intelligent diff
- t.Logf(nicediff(have, want))
- t.Errorf("file content wrong")
- }
- }
-}
-
-func TestVmodule(t *testing.T) {
- t.Parallel()
- checkOutput := func(level int, want, wantNot string) {
- t.Helper()
- output, err := runSelf("--log.format", "terminal", "--verbosity=0", "--log.vmodule", fmt.Sprintf("logtestcmd_active.go=%d", level), "logtest")
- if err != nil {
- t.Fatal(err)
- }
- if len(want) > 0 && !strings.Contains(string(output), want) { // trace should be present at 5
- t.Errorf("failed to find expected string ('%s') in output", want)
- }
- if len(wantNot) > 0 && strings.Contains(string(output), wantNot) { // trace should be present at 5
- t.Errorf("string ('%s') should not be present in output", wantNot)
- }
- }
- checkOutput(5, "log at level trace", "") // trace should be present at 5
- checkOutput(4, "log at level debug", "log at level trace") // debug should be present at 4, but trace should be missing
- checkOutput(3, "log at level info", "log at level debug") // info should be present at 3, but debug should be missing
- checkOutput(2, "log at level warn", "log at level info") // warn should be present at 2, but info should be missing
- checkOutput(1, "log at level error", "log at level warn") // error should be present at 1, but warn should be missing
-}
-
-func nicediff(have, want []byte) string {
- var i = 0
- for ; i < len(have) && i < len(want); i++ {
- if want[i] != have[i] {
- break
- }
- }
- var end = i + 40
- var start = i - 50
- if start < 0 {
- start = 0
- }
- var h, w string
- if end < len(have) {
- h = string(have[start:end])
- } else {
- h = string(have[start:])
- }
- if end < len(want) {
- w = string(want[start:end])
- } else {
- w = string(want[start:])
- }
- return fmt.Sprintf("have vs want:\n%q\n%q\n", h, w)
-}
-
-func TestFileOut(t *testing.T) {
- t.Parallel()
- var (
- have, want []byte
- err error
- path = fmt.Sprintf("%s/test_file_out-%d", os.TempDir(), rand.Int63())
- )
- t.Cleanup(func() { os.Remove(path) })
- if want, err = runSelf(fmt.Sprintf("--log.file=%s", path), "logtest"); err != nil {
- t.Fatal(err)
- }
- if have, err = os.ReadFile(path); err != nil {
- t.Fatal(err)
- }
- if !bytes.Equal(have, want) {
- // show an intelligent diff
- t.Logf(nicediff(have, want))
- t.Errorf("file content wrong")
- }
-}
-
-func TestRotatingFileOut(t *testing.T) {
- t.Parallel()
- var (
- have, want []byte
- err error
- path = fmt.Sprintf("%s/test_file_out-%d", os.TempDir(), rand.Int63())
- )
- t.Cleanup(func() { os.Remove(path) })
- if want, err = runSelf(fmt.Sprintf("--log.file=%s", path), "--log.rotate", "logtest"); err != nil {
- t.Fatal(err)
- }
- if have, err = os.ReadFile(path); err != nil {
- t.Fatal(err)
- }
- if !bytes.Equal(have, want) {
- // show an intelligent diff
- t.Logf(nicediff(have, want))
- t.Errorf("file content wrong")
- }
-}
diff --git a/cmd/geth/logtestcmd_active.go b/cmd/geth/logtestcmd_active.go
deleted file mode 100644
index 5cce1ec6ab..0000000000
--- a/cmd/geth/logtestcmd_active.go
+++ /dev/null
@@ -1,175 +0,0 @@
-//go:build integrationtests
-
-// Copyright 2023 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "errors"
- "fmt"
- "math"
- "math/big"
- "time"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/internal/debug"
- "github.com/ethereum/go-ethereum/log"
- "github.com/holiman/uint256"
- "github.com/urfave/cli/v2"
-)
-
-var logTestCommand = &cli.Command{
- Action: logTest,
- Name: "logtest",
- Usage: "Print some log messages",
- ArgsUsage: " ",
- Description: `
-This command is only meant for testing.
-`}
-
-type customQuotedStringer struct {
-}
-
-func (c customQuotedStringer) String() string {
- return "output with 'quotes'"
-}
-
-// logTest is an entry point which spits out some logs. This is used by testing
-// to verify expected outputs
-func logTest(ctx *cli.Context) error {
- // clear field padding map
- debug.ResetLogging()
-
- { // big.Int
- ba, _ := new(big.Int).SetString("111222333444555678999", 10) // "111,222,333,444,555,678,999"
- bb, _ := new(big.Int).SetString("-111222333444555678999", 10) // "-111,222,333,444,555,678,999"
- bc, _ := new(big.Int).SetString("11122233344455567899900", 10) // "11,122,233,344,455,567,899,900"
- bd, _ := new(big.Int).SetString("-11122233344455567899900", 10) // "-11,122,233,344,455,567,899,900"
- log.Info("big.Int", "111,222,333,444,555,678,999", ba)
- log.Info("-big.Int", "-111,222,333,444,555,678,999", bb)
- log.Info("big.Int", "11,122,233,344,455,567,899,900", bc)
- log.Info("-big.Int", "-11,122,233,344,455,567,899,900", bd)
- }
- { //uint256
- ua, _ := uint256.FromDecimal("111222333444555678999")
- ub, _ := uint256.FromDecimal("11122233344455567899900")
- log.Info("uint256", "111,222,333,444,555,678,999", ua)
- log.Info("uint256", "11,122,233,344,455,567,899,900", ub)
- }
- { // int64
- log.Info("int64", "1,000,000", int64(1000000))
- log.Info("int64", "-1,000,000", int64(-1000000))
- log.Info("int64", "9,223,372,036,854,775,807", int64(math.MaxInt64))
- log.Info("int64", "-9,223,372,036,854,775,808", int64(math.MinInt64))
- }
- { // uint64
- log.Info("uint64", "1,000,000", uint64(1000000))
- log.Info("uint64", "18,446,744,073,709,551,615", uint64(math.MaxUint64))
- }
- { // Special characters
- log.Info("Special chars in value", "key", "special \r\n\t chars")
- log.Info("Special chars in key", "special \n\t chars", "value")
-
- log.Info("nospace", "nospace", "nospace")
- log.Info("with space", "with nospace", "with nospace")
-
- log.Info("Bash escapes in value", "key", "\u001b[1G\u001b[K\u001b[1A")
- log.Info("Bash escapes in key", "\u001b[1G\u001b[K\u001b[1A", "value")
-
- log.Info("Bash escapes in message \u001b[1G\u001b[K\u001b[1A end", "key", "value")
-
- colored := fmt.Sprintf("\u001B[%dmColored\u001B[0m[", 35)
- log.Info(colored, colored, colored)
- err := errors.New("this is an 'error'")
- log.Info("an error message with quotes", "error", err)
- }
- { // Custom Stringer() - type
- log.Info("Custom Stringer value", "2562047h47m16.854s", common.PrettyDuration(time.Duration(9223372036854775807)))
- var c customQuotedStringer
- log.Info("a custom stringer that emits quoted text", "output", c)
- }
- { // Multi-line message
- log.Info("A message with wonky \U0001F4A9 characters")
- log.Info("A multiline message \nINFO [10-18|14:11:31.106] with wonky characters \U0001F4A9")
- log.Info("A multiline message \nLALA [ZZZZZZZZZZZZZZZZZZ] Actually part of message above")
- }
- { // Miscellaneous json-quirks
- // This will check if the json output uses strings or json-booleans to represent bool values
- log.Info("boolean", "true", true, "false", false)
- // Handling of duplicate keys.
- // This is actually ill-handled by the current handler: the format.go
- // uses a global 'fieldPadding' map and mixes up the two keys. If 'alpha'
- // is shorter than beta, it sometimes causes erroneous padding -- and what's more
- // it causes _different_ padding in multi-handler context, e.g. both file-
- // and console output, making the two mismatch.
- log.Info("repeated-key 1", "foo", "alpha", "foo", "beta")
- log.Info("repeated-key 2", "xx", "short", "xx", "longer")
- }
- { // loglevels
- log.Debug("log at level debug")
- log.Trace("log at level trace")
- log.Info("log at level info")
- log.Warn("log at level warn")
- log.Error("log at level error")
- }
- {
- // The current log formatter has a global map of paddings, storing the
- // longest seen padding per key in a map. This results in a statefulness
- // which has some odd side-effects. Demonstrated here:
- log.Info("test", "bar", "short", "a", "aligned left")
- log.Info("test", "bar", "a long message", "a", 1)
- log.Info("test", "bar", "short", "a", "aligned right")
- }
- {
- // This sequence of logs should be output with alignment, so each field becoems a column.
- log.Info("The following logs should align so that the key-fields make 5 columns")
- log.Info("Inserted known block", "number", 1_012, "hash", common.HexToHash("0x1234"), "txs", 200, "gas", 1_123_123, "other", "first")
- log.Info("Inserted new block", "number", 1, "hash", common.HexToHash("0x1235"), "txs", 2, "gas", 1_123, "other", "second")
- log.Info("Inserted known block", "number", 99, "hash", common.HexToHash("0x12322"), "txs", 10, "gas", 1, "other", "third")
- log.Warn("Inserted known block", "number", 1_012, "hash", common.HexToHash("0x1234"), "txs", 200, "gas", 99, "other", "fourth")
- }
- { // Various types of nil
- type customStruct struct {
- A string
- B *uint64
- }
- log.Info("(*big.Int)(nil)", "", (*big.Int)(nil))
- log.Info("(*uint256.Int)(nil)", "", (*uint256.Int)(nil))
- log.Info("(fmt.Stringer)(nil)", "res", (fmt.Stringer)(nil))
- log.Info("nil-concrete-stringer", "res", (*time.Time)(nil))
-
- log.Info("error(nil) ", "res", error(nil))
- log.Info("nil-concrete-error", "res", (*customError)(nil))
-
- log.Info("nil-custom-struct", "res", (*customStruct)(nil))
- log.Info("raw nil", "res", nil)
- log.Info("(*uint64)(nil)", "res", (*uint64)(nil))
- }
- { // Logging with 'reserved' keys
- log.Info("Using keys 't', 'lvl', 'time', 'level' and 'msg'", "t", "t", "time", "time", "lvl", "lvl", "level", "level", "msg", "msg")
- }
- { // Logging with wrong attr-value pairs
- log.Info("Odd pair (1 attr)", "key")
- log.Info("Odd pair (3 attr)", "key", "value", "key2")
- }
- return nil
-}
-
-// customError is a type which implements error
-type customError struct{}
-
-func (c *customError) Error() string { return "" }
diff --git a/cmd/geth/logtestcmd_inactive.go b/cmd/geth/logtestcmd_inactive.go
deleted file mode 100644
index 691ab5bcd8..0000000000
--- a/cmd/geth/logtestcmd_inactive.go
+++ /dev/null
@@ -1,23 +0,0 @@
-//go:build !integrationtests
-
-// Copyright 2023 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import "github.com/urfave/cli/v2"
-
-var logTestCommand *cli.Command
diff --git a/cmd/geth/main.go b/cmd/geth/main.go
deleted file mode 100644
index 0d5939bd20..0000000000
--- a/cmd/geth/main.go
+++ /dev/null
@@ -1,471 +0,0 @@
-// Copyright 2014 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-// geth is the official command-line client for Ethereum.
-package main
-
-import (
- "fmt"
- "os"
- "sort"
- "strconv"
- "strings"
- "time"
-
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/console/prompt"
- "github.com/ethereum/go-ethereum/eth"
- "github.com/ethereum/go-ethereum/eth/downloader"
- "github.com/ethereum/go-ethereum/ethclient"
- "github.com/ethereum/go-ethereum/internal/debug"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/node"
- "go.uber.org/automaxprocs/maxprocs"
-
- // Force-load the tracer engines to trigger registration
- _ "github.com/ethereum/go-ethereum/eth/tracers/js"
- _ "github.com/ethereum/go-ethereum/eth/tracers/native"
-
- "github.com/urfave/cli/v2"
-)
-
-const (
- clientIdentifier = "geth" // Client identifier to advertise over the network
-)
-
-var (
- // flags that configure the node
- nodeFlags = flags.Merge([]cli.Flag{
- utils.IdentityFlag,
- utils.UnlockedAccountFlag,
- utils.PasswordFileFlag,
- utils.BootnodesFlag,
- utils.MinFreeDiskSpaceFlag,
- utils.KeyStoreDirFlag,
- utils.ExternalSignerFlag,
- utils.NoUSBFlag, // deprecated
- utils.USBFlag,
- utils.SmartCardDaemonPathFlag,
- utils.OverrideCancun,
- utils.OverrideVerkle,
- utils.EnablePersonal,
- utils.TxPoolLocalsFlag,
- utils.TxPoolNoLocalsFlag,
- utils.TxPoolJournalFlag,
- utils.TxPoolRejournalFlag,
- utils.TxPoolPriceLimitFlag,
- utils.TxPoolPriceBumpFlag,
- utils.TxPoolAccountSlotsFlag,
- utils.TxPoolGlobalSlotsFlag,
- utils.TxPoolAccountQueueFlag,
- utils.TxPoolGlobalQueueFlag,
- utils.TxPoolLifetimeFlag,
- utils.BlobPoolDataDirFlag,
- utils.BlobPoolDataCapFlag,
- utils.BlobPoolPriceBumpFlag,
- utils.SyncModeFlag,
- utils.SyncTargetFlag,
- utils.ExitWhenSyncedFlag,
- utils.GCModeFlag,
- utils.SnapshotFlag,
- utils.TxLookupLimitFlag, // deprecated
- utils.TransactionHistoryFlag,
- utils.StateHistoryFlag,
- utils.LightServeFlag, // deprecated
- utils.LightIngressFlag, // deprecated
- utils.LightEgressFlag, // deprecated
- utils.LightMaxPeersFlag, // deprecated
- utils.LightNoPruneFlag, // deprecated
- utils.LightKDFFlag,
- utils.LightNoSyncServeFlag, // deprecated
- utils.EthRequiredBlocksFlag,
- utils.LegacyWhitelistFlag, // deprecated
- utils.BloomFilterSizeFlag,
- utils.CacheFlag,
- utils.CacheDatabaseFlag,
- utils.CacheTrieFlag,
- utils.CacheTrieJournalFlag, // deprecated
- utils.CacheTrieRejournalFlag, // deprecated
- utils.CacheGCFlag,
- utils.CacheSnapshotFlag,
- utils.CacheNoPrefetchFlag,
- utils.CachePreimagesFlag,
- utils.CacheLogSizeFlag,
- utils.FDLimitFlag,
- utils.CryptoKZGFlag,
- utils.ListenPortFlag,
- utils.DiscoveryPortFlag,
- utils.MaxPeersFlag,
- utils.MaxPendingPeersFlag,
- utils.MiningEnabledFlag,
- utils.MinerGasLimitFlag,
- utils.MinerGasPriceFlag,
- utils.MinerEtherbaseFlag,
- utils.MinerExtraDataFlag,
- utils.MinerRecommitIntervalFlag,
- utils.MinerNewPayloadTimeout,
- utils.NATFlag,
- utils.NoDiscoverFlag,
- utils.DiscoveryV4Flag,
- utils.DiscoveryV5Flag,
- utils.LegacyDiscoveryV5Flag, // deprecated
- utils.NetrestrictFlag,
- utils.NodeKeyFileFlag,
- utils.NodeKeyHexFlag,
- utils.DNSDiscoveryFlag,
- utils.DeveloperFlag,
- utils.DeveloperGasLimitFlag,
- utils.DeveloperPeriodFlag,
- utils.VMEnableDebugFlag,
- utils.NetworkIdFlag,
- utils.EthStatsURLFlag,
- utils.NoCompactionFlag,
- utils.GpoBlocksFlag,
- utils.GpoPercentileFlag,
- utils.GpoMaxGasPriceFlag,
- utils.GpoIgnoreGasPriceFlag,
- configFileFlag,
- utils.LogDebugFlag,
- utils.LogBacktraceAtFlag,
- }, utils.NetworkFlags, utils.DatabaseFlags)
-
- rpcFlags = []cli.Flag{
- utils.HTTPEnabledFlag,
- utils.HTTPListenAddrFlag,
- utils.HTTPPortFlag,
- utils.HTTPCORSDomainFlag,
- utils.AuthListenFlag,
- utils.AuthPortFlag,
- utils.AuthVirtualHostsFlag,
- utils.JWTSecretFlag,
- utils.HTTPVirtualHostsFlag,
- utils.GraphQLEnabledFlag,
- utils.GraphQLCORSDomainFlag,
- utils.GraphQLVirtualHostsFlag,
- utils.HTTPApiFlag,
- utils.HTTPPathPrefixFlag,
- utils.WSEnabledFlag,
- utils.WSListenAddrFlag,
- utils.WSPortFlag,
- utils.WSApiFlag,
- utils.WSAllowedOriginsFlag,
- utils.WSPathPrefixFlag,
- utils.IPCDisabledFlag,
- utils.IPCPathFlag,
- utils.InsecureUnlockAllowedFlag,
- utils.RPCGlobalGasCapFlag,
- utils.RPCGlobalEVMTimeoutFlag,
- utils.RPCGlobalTxFeeCapFlag,
- utils.AllowUnprotectedTxs,
- utils.BatchRequestLimit,
- utils.BatchResponseMaxSize,
- }
-
- metricsFlags = []cli.Flag{
- utils.MetricsEnabledFlag,
- utils.MetricsEnabledExpensiveFlag,
- utils.MetricsHTTPFlag,
- utils.MetricsPortFlag,
- utils.MetricsEnableInfluxDBFlag,
- utils.MetricsInfluxDBEndpointFlag,
- utils.MetricsInfluxDBDatabaseFlag,
- utils.MetricsInfluxDBUsernameFlag,
- utils.MetricsInfluxDBPasswordFlag,
- utils.MetricsInfluxDBTagsFlag,
- utils.MetricsEnableInfluxDBV2Flag,
- utils.MetricsInfluxDBTokenFlag,
- utils.MetricsInfluxDBBucketFlag,
- utils.MetricsInfluxDBOrganizationFlag,
- }
-)
-
-var app = flags.NewApp("the go-ethereum command line interface")
-
-func init() {
- // Initialize the CLI app and start Geth
- app.Action = geth
- app.Copyright = "Copyright 2013-2023 The go-ethereum Authors"
- app.Commands = []*cli.Command{
- // See chaincmd.go:
- initCommand,
- importCommand,
- exportCommand,
- importPreimagesCommand,
- removedbCommand,
- dumpCommand,
- dumpGenesisCommand,
- // See accountcmd.go:
- accountCommand,
- walletCommand,
- // See consolecmd.go:
- consoleCommand,
- attachCommand,
- javascriptCommand,
- // See misccmd.go:
- versionCommand,
- versionCheckCommand,
- licenseCommand,
- // See config.go
- dumpConfigCommand,
- // see dbcmd.go
- dbCommand,
- // See cmd/utils/flags_legacy.go
- utils.ShowDeprecated,
- // See snapshot.go
- snapshotCommand,
- // See verkle.go
- verkleCommand,
- }
- if logTestCommand != nil {
- app.Commands = append(app.Commands, logTestCommand)
- }
- sort.Sort(cli.CommandsByName(app.Commands))
-
- app.Flags = flags.Merge(
- nodeFlags,
- rpcFlags,
- consoleFlags,
- debug.Flags,
- metricsFlags,
- )
- flags.AutoEnvVars(app.Flags, "GETH")
-
- app.Before = func(ctx *cli.Context) error {
- maxprocs.Set() // Automatically set GOMAXPROCS to match Linux container CPU quota.
- flags.MigrateGlobalFlags(ctx)
- if err := debug.Setup(ctx); err != nil {
- return err
- }
- flags.CheckEnvVars(ctx, app.Flags, "GETH")
- return nil
- }
- app.After = func(ctx *cli.Context) error {
- debug.Exit()
- prompt.Stdin.Close() // Resets terminal mode.
- return nil
- }
-}
-
-func main() {
- if err := app.Run(os.Args); err != nil {
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
- }
-}
-
-// prepare manipulates memory cache allowance and setups metric system.
-// This function should be called before launching devp2p stack.
-func prepare(ctx *cli.Context) {
- // If we're running a known preset, log it for convenience.
- switch {
- case ctx.IsSet(utils.GoerliFlag.Name):
- log.Info("Starting Geth on Görli testnet...")
-
- case ctx.IsSet(utils.SepoliaFlag.Name):
- log.Info("Starting Geth on Sepolia testnet...")
-
- case ctx.IsSet(utils.HoleskyFlag.Name):
- log.Info("Starting Geth on Holesky testnet...")
-
- case ctx.IsSet(utils.DeveloperFlag.Name):
- log.Info("Starting Geth in ephemeral dev mode...")
- log.Warn(`You are running Geth in --dev mode. Please note the following:
-
- 1. This mode is only intended for fast, iterative development without assumptions on
- security or persistence.
- 2. The database is created in memory unless specified otherwise. Therefore, shutting down
- your computer or losing power will wipe your entire block data and chain state for
- your dev environment.
- 3. A random, pre-allocated developer account will be available and unlocked as
- eth.coinbase, which can be used for testing. The random dev account is temporary,
- stored on a ramdisk, and will be lost if your machine is restarted.
- 4. Mining is enabled by default. However, the client will only seal blocks if transactions
- are pending in the mempool. The miner's minimum accepted gas price is 1.
- 5. Networking is disabled; there is no listen-address, the maximum number of peers is set
- to 0, and discovery is disabled.
-`)
-
- case !ctx.IsSet(utils.NetworkIdFlag.Name):
- log.Info("Starting Geth on Ethereum mainnet...")
- }
- // If we're a full node on mainnet without --cache specified, bump default cache allowance
- if !ctx.IsSet(utils.CacheFlag.Name) && !ctx.IsSet(utils.NetworkIdFlag.Name) {
- // Make sure we're not on any supported preconfigured testnet either
- if !ctx.IsSet(utils.HoleskyFlag.Name) &&
- !ctx.IsSet(utils.SepoliaFlag.Name) &&
- !ctx.IsSet(utils.GoerliFlag.Name) &&
- !ctx.IsSet(utils.DeveloperFlag.Name) {
- // Nope, we're really on mainnet. Bump that cache up!
- log.Info("Bumping default cache on mainnet", "provided", ctx.Int(utils.CacheFlag.Name), "updated", 4096)
- ctx.Set(utils.CacheFlag.Name, strconv.Itoa(4096))
- }
- }
-
- // Start metrics export if enabled
- utils.SetupMetrics(ctx)
-
- // Start system runtime metrics collection
- go metrics.CollectProcessMetrics(3 * time.Second)
-}
-
-// geth is the main entry point into the system if no special subcommand is run.
-// It creates a default node based on the command line arguments and runs it in
-// blocking mode, waiting for it to be shut down.
-func geth(ctx *cli.Context) error {
- if args := ctx.Args().Slice(); len(args) > 0 {
- return fmt.Errorf("invalid command: %q", args[0])
- }
-
- prepare(ctx)
- stack, backend := makeFullNode(ctx)
- defer stack.Close()
-
- startNode(ctx, stack, backend, false)
- stack.Wait()
- return nil
-}
-
-// startNode boots up the system node and all registered protocols, after which
-// it unlocks any requested accounts, and starts the RPC/IPC interfaces and the
-// miner.
-func startNode(ctx *cli.Context, stack *node.Node, backend ethapi.Backend, isConsole bool) {
- debug.Memsize.Add("node", stack)
-
- // Start up the node itself
- utils.StartNode(ctx, stack, isConsole)
-
- // Unlock any account specifically requested
- unlockAccounts(ctx, stack)
-
- // Register wallet event handlers to open and auto-derive wallets
- events := make(chan accounts.WalletEvent, 16)
- stack.AccountManager().Subscribe(events)
-
- // Create a client to interact with local geth node.
- rpcClient := stack.Attach()
- ethClient := ethclient.NewClient(rpcClient)
-
- go func() {
- // Open any wallets already attached
- for _, wallet := range stack.AccountManager().Wallets() {
- if err := wallet.Open(""); err != nil {
- log.Warn("Failed to open wallet", "url", wallet.URL(), "err", err)
- }
- }
- // Listen for wallet event till termination
- for event := range events {
- switch event.Kind {
- case accounts.WalletArrived:
- if err := event.Wallet.Open(""); err != nil {
- log.Warn("New wallet appeared, failed to open", "url", event.Wallet.URL(), "err", err)
- }
- case accounts.WalletOpened:
- status, _ := event.Wallet.Status()
- log.Info("New wallet appeared", "url", event.Wallet.URL(), "status", status)
-
- var derivationPaths []accounts.DerivationPath
- if event.Wallet.URL().Scheme == "ledger" {
- derivationPaths = append(derivationPaths, accounts.LegacyLedgerBaseDerivationPath)
- }
- derivationPaths = append(derivationPaths, accounts.DefaultBaseDerivationPath)
-
- event.Wallet.SelfDerive(derivationPaths, ethClient)
-
- case accounts.WalletDropped:
- log.Info("Old wallet dropped", "url", event.Wallet.URL())
- event.Wallet.Close()
- }
- }
- }()
-
- // Spawn a standalone goroutine for status synchronization monitoring,
- // close the node when synchronization is complete if user required.
- if ctx.Bool(utils.ExitWhenSyncedFlag.Name) {
- go func() {
- sub := stack.EventMux().Subscribe(downloader.DoneEvent{})
- defer sub.Unsubscribe()
- for {
- event := <-sub.Chan()
- if event == nil {
- continue
- }
- done, ok := event.Data.(downloader.DoneEvent)
- if !ok {
- continue
- }
- if timestamp := time.Unix(int64(done.Latest.Time), 0); time.Since(timestamp) < 10*time.Minute {
- log.Info("Synchronisation completed", "latestnum", done.Latest.Number, "latesthash", done.Latest.Hash(),
- "age", common.PrettyAge(timestamp))
- stack.Close()
- }
- }
- }()
- }
-
- // Start auxiliary services if enabled
- if ctx.Bool(utils.MiningEnabledFlag.Name) {
- // Mining only makes sense if a full Ethereum node is running
- if ctx.String(utils.SyncModeFlag.Name) == "light" {
- utils.Fatalf("Light clients do not support mining")
- }
- ethBackend, ok := backend.(*eth.EthAPIBackend)
- if !ok {
- utils.Fatalf("Ethereum service not running")
- }
- // Set the gas price to the limits from the CLI and start mining
- gasprice := flags.GlobalBig(ctx, utils.MinerGasPriceFlag.Name)
- ethBackend.TxPool().SetGasTip(gasprice)
- if err := ethBackend.StartMining(); err != nil {
- utils.Fatalf("Failed to start mining: %v", err)
- }
- }
-}
-
-// unlockAccounts unlocks any account specifically requested.
-func unlockAccounts(ctx *cli.Context, stack *node.Node) {
- var unlocks []string
- inputs := strings.Split(ctx.String(utils.UnlockedAccountFlag.Name), ",")
- for _, input := range inputs {
- if trimmed := strings.TrimSpace(input); trimmed != "" {
- unlocks = append(unlocks, trimmed)
- }
- }
- // Short circuit if there is no account to unlock.
- if len(unlocks) == 0 {
- return
- }
- // If insecure account unlocking is not allowed if node's APIs are exposed to external.
- // Print warning log to user and skip unlocking.
- if !stack.Config().InsecureUnlockAllowed && stack.Config().ExtRPCEnabled() {
- utils.Fatalf("Account unlock with HTTP access is forbidden!")
- }
- backends := stack.AccountManager().Backends(keystore.KeyStoreType)
- if len(backends) == 0 {
- log.Warn("Failed to unlock accounts, keystore is not available")
- return
- }
- ks := backends[0].(*keystore.KeyStore)
- passwords := utils.MakePasswordList(ctx)
- for i, account := range unlocks {
- unlockAccount(ks, account, i, passwords)
- }
-}
diff --git a/cmd/geth/misccmd.go b/cmd/geth/misccmd.go
deleted file mode 100644
index f3530c30fb..0000000000
--- a/cmd/geth/misccmd.go
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2016 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "fmt"
- "os"
- "runtime"
- "strings"
-
- "github.com/ethereum/go-ethereum/internal/version"
- "github.com/ethereum/go-ethereum/params"
- "github.com/urfave/cli/v2"
-)
-
-var (
- VersionCheckUrlFlag = &cli.StringFlag{
- Name: "check.url",
- Usage: "URL to use when checking vulnerabilities",
- Value: "https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities.json",
- }
- VersionCheckVersionFlag = &cli.StringFlag{
- Name: "check.version",
- Usage: "Version to check",
- Value: version.ClientName(clientIdentifier),
- }
- versionCommand = &cli.Command{
- Action: printVersion,
- Name: "version",
- Usage: "Print version numbers",
- ArgsUsage: " ",
- Description: `
-The output of this command is supposed to be machine-readable.
-`,
- }
- versionCheckCommand = &cli.Command{
- Action: versionCheck,
- Flags: []cli.Flag{
- VersionCheckUrlFlag,
- VersionCheckVersionFlag,
- },
- Name: "version-check",
- Usage: "Checks (online) for known Geth security vulnerabilities",
- ArgsUsage: "",
- Description: `
-The version-check command fetches vulnerability-information from https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities.json,
-and displays information about any security vulnerabilities that affect the currently executing version.
-`,
- }
- licenseCommand = &cli.Command{
- Action: license,
- Name: "license",
- Usage: "Display license information",
- ArgsUsage: " ",
- }
-)
-
-func printVersion(ctx *cli.Context) error {
- git, _ := version.VCS()
-
- fmt.Println(strings.Title(clientIdentifier))
- fmt.Println("Version:", params.VersionWithMeta)
- if git.Commit != "" {
- fmt.Println("Git Commit:", git.Commit)
- }
- if git.Date != "" {
- fmt.Println("Git Commit Date:", git.Date)
- }
- fmt.Println("Architecture:", runtime.GOARCH)
- fmt.Println("Go Version:", runtime.Version())
- fmt.Println("Operating System:", runtime.GOOS)
- fmt.Printf("GOPATH=%s\n", os.Getenv("GOPATH"))
- fmt.Printf("GOROOT=%s\n", runtime.GOROOT())
- return nil
-}
-
-func license(_ *cli.Context) error {
- fmt.Println(`Geth is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Geth is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with geth. If not, see .`)
- return nil
-}
diff --git a/cmd/geth/run_test.go b/cmd/geth/run_test.go
deleted file mode 100644
index 1d32880325..0000000000
--- a/cmd/geth/run_test.go
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright 2016 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "context"
- "fmt"
- "os"
- "testing"
- "time"
-
- "github.com/ethereum/go-ethereum/internal/cmdtest"
- "github.com/ethereum/go-ethereum/internal/reexec"
- "github.com/ethereum/go-ethereum/rpc"
-)
-
-type testgeth struct {
- *cmdtest.TestCmd
-
- // template variables for expect
- Datadir string
- Etherbase string
-}
-
-func init() {
- // Run the app if we've been exec'd as "geth-test" in runGeth.
- reexec.Register("geth-test", func() {
- if err := app.Run(os.Args); err != nil {
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
- }
- os.Exit(0)
- })
-}
-
-func TestMain(m *testing.M) {
- // check if we have been reexec'd
- if reexec.Init() {
- return
- }
- os.Exit(m.Run())
-}
-
-func initGeth(t *testing.T) string {
- args := []string{"--networkid=42", "init", "./testdata/clique.json"}
- t.Logf("Initializing geth: %v ", args)
- g := runGeth(t, args...)
- datadir := g.Datadir
- g.WaitExit()
- return datadir
-}
-
-// spawns geth with the given command line args. If the args don't set --datadir, the
-// child g gets a temporary data directory.
-func runGeth(t *testing.T, args ...string) *testgeth {
- tt := &testgeth{}
- tt.TestCmd = cmdtest.NewTestCmd(t, tt)
- for i, arg := range args {
- switch arg {
- case "--datadir":
- if i < len(args)-1 {
- tt.Datadir = args[i+1]
- }
- case "--miner.etherbase":
- if i < len(args)-1 {
- tt.Etherbase = args[i+1]
- }
- }
- }
- if tt.Datadir == "" {
- // The temporary datadir will be removed automatically if something fails below.
- tt.Datadir = t.TempDir()
- args = append([]string{"--datadir", tt.Datadir}, args...)
- }
-
- // Boot "geth". This actually runs the test binary but the TestMain
- // function will prevent any tests from running.
- tt.Run("geth-test", args...)
-
- return tt
-}
-
-// waitForEndpoint attempts to connect to an RPC endpoint until it succeeds.
-func waitForEndpoint(t *testing.T, endpoint string, timeout time.Duration) {
- probe := func() bool {
- ctx, cancel := context.WithTimeout(context.Background(), timeout)
- defer cancel()
- c, err := rpc.DialContext(ctx, endpoint)
- if c != nil {
- _, err = c.SupportedModules()
- c.Close()
- }
- return err == nil
- }
-
- start := time.Now()
- for {
- if probe() {
- return
- }
- if time.Since(start) > timeout {
- t.Fatal("endpoint", endpoint, "did not open within", timeout)
- }
- time.Sleep(200 * time.Millisecond)
- }
-}
diff --git a/cmd/geth/snapshot.go b/cmd/geth/snapshot.go
deleted file mode 100644
index 4284005a02..0000000000
--- a/cmd/geth/snapshot.go
+++ /dev/null
@@ -1,691 +0,0 @@
-// Copyright 2021 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "bytes"
- "encoding/json"
- "errors"
- "fmt"
- "os"
- "time"
-
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/state/pruner"
- "github.com/ethereum/go-ethereum/core/state/snapshot"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie"
- cli "github.com/urfave/cli/v2"
-)
-
-var (
- snapshotCommand = &cli.Command{
- Name: "snapshot",
- Usage: "A set of commands based on the snapshot",
- Description: "",
- Subcommands: []*cli.Command{
- {
- Name: "prune-state",
- Usage: "Prune stale ethereum state data based on the snapshot",
- ArgsUsage: "",
- Action: pruneState,
- Flags: flags.Merge([]cli.Flag{
- utils.BloomFilterSizeFlag,
- }, utils.NetworkFlags, utils.DatabaseFlags),
- Description: `
-geth snapshot prune-state
-will prune historical state data with the help of the state snapshot.
-All trie nodes and contract codes that do not belong to the specified
-version state will be deleted from the database. After pruning, only
-two version states are available: genesis and the specific one.
-
-The default pruning target is the HEAD-127 state.
-
-WARNING: it's only supported in hash mode(--state.scheme=hash)".
-`,
- },
- {
- Name: "verify-state",
- Usage: "Recalculate state hash based on the snapshot for verification",
- ArgsUsage: "",
- Action: verifyState,
- Flags: flags.Merge(utils.NetworkFlags, utils.DatabaseFlags),
- Description: `
-geth snapshot verify-state
-will traverse the whole accounts and storages set based on the specified
-snapshot and recalculate the root hash of state for verification.
-In other words, this command does the snapshot to trie conversion.
-`,
- },
- {
- Name: "check-dangling-storage",
- Usage: "Check that there is no 'dangling' snap storage",
- ArgsUsage: "",
- Action: checkDanglingStorage,
- Flags: flags.Merge(utils.NetworkFlags, utils.DatabaseFlags),
- Description: `
-geth snapshot check-dangling-storage traverses the snap storage
-data, and verifies that all snapshot storage data has a corresponding account.
-`,
- },
- {
- Name: "inspect-account",
- Usage: "Check all snapshot layers for the a specific account",
- ArgsUsage: "",
- Action: checkAccount,
- Flags: flags.Merge(utils.NetworkFlags, utils.DatabaseFlags),
- Description: `
-geth snapshot inspect-account checks all snapshot layers and prints out
-information about the specified address.
-`,
- },
- {
- Name: "traverse-state",
- Usage: "Traverse the state with given root hash and perform quick verification",
- ArgsUsage: "",
- Action: traverseState,
- Flags: flags.Merge(utils.NetworkFlags, utils.DatabaseFlags),
- Description: `
-geth snapshot traverse-state
-will traverse the whole state from the given state root and will abort if any
-referenced trie node or contract code is missing. This command can be used for
-state integrity verification. The default checking target is the HEAD state.
-
-It's also usable without snapshot enabled.
-`,
- },
- {
- Name: "traverse-rawstate",
- Usage: "Traverse the state with given root hash and perform detailed verification",
- ArgsUsage: "",
- Action: traverseRawState,
- Flags: flags.Merge(utils.NetworkFlags, utils.DatabaseFlags),
- Description: `
-geth snapshot traverse-rawstate
-will traverse the whole state from the given root and will abort if any referenced
-trie node or contract code is missing. This command can be used for state integrity
-verification. The default checking target is the HEAD state. It's basically identical
-to traverse-state, but the check granularity is smaller.
-
-It's also usable without snapshot enabled.
-`,
- },
- {
- Name: "dump",
- Usage: "Dump a specific block from storage (same as 'geth dump' but using snapshots)",
- ArgsUsage: "[? | ]",
- Action: dumpState,
- Flags: flags.Merge([]cli.Flag{
- utils.ExcludeCodeFlag,
- utils.ExcludeStorageFlag,
- utils.StartKeyFlag,
- utils.DumpLimitFlag,
- }, utils.NetworkFlags, utils.DatabaseFlags),
- Description: `
-This command is semantically equivalent to 'geth dump', but uses the snapshots
-as the backend data source, making this command a lot faster.
-
-The argument is interpreted as block number or hash. If none is provided, the latest
-block is used.
-`,
- },
- {
- Action: snapshotExportPreimages,
- Name: "export-preimages",
- Usage: "Export the preimage in snapshot enumeration order",
- ArgsUsage: " []",
- Flags: utils.DatabaseFlags,
- Description: `
-The export-preimages command exports hash preimages to a flat file, in exactly
-the expected order for the overlay tree migration.
-`,
- },
- },
- }
-)
-
-// Deprecation: this command should be deprecated once the hash-based
-// scheme is deprecated.
-func pruneState(ctx *cli.Context) error {
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- chaindb := utils.MakeChainDatabase(ctx, stack, false)
- defer chaindb.Close()
-
- if rawdb.ReadStateScheme(chaindb) != rawdb.HashScheme {
- log.Crit("Offline pruning is not required for path scheme")
- }
- prunerconfig := pruner.Config{
- Datadir: stack.ResolvePath(""),
- BloomSize: ctx.Uint64(utils.BloomFilterSizeFlag.Name),
- }
- pruner, err := pruner.NewPruner(chaindb, prunerconfig)
- if err != nil {
- log.Error("Failed to open snapshot tree", "err", err)
- return err
- }
- if ctx.NArg() > 1 {
- log.Error("Too many arguments given")
- return errors.New("too many arguments")
- }
- var targetRoot common.Hash
- if ctx.NArg() == 1 {
- targetRoot, err = parseRoot(ctx.Args().First())
- if err != nil {
- log.Error("Failed to resolve state root", "err", err)
- return err
- }
- }
- if err = pruner.Prune(targetRoot); err != nil {
- log.Error("Failed to prune state", "err", err)
- return err
- }
- return nil
-}
-
-func verifyState(ctx *cli.Context) error {
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- chaindb := utils.MakeChainDatabase(ctx, stack, true)
- defer chaindb.Close()
-
- headBlock := rawdb.ReadHeadBlock(chaindb)
- if headBlock == nil {
- log.Error("Failed to load head block")
- return errors.New("no head block")
- }
- triedb := utils.MakeTrieDatabase(ctx, chaindb, false, true, false)
- defer triedb.Close()
-
- snapConfig := snapshot.Config{
- CacheSize: 256,
- Recovery: false,
- NoBuild: true,
- AsyncBuild: false,
- }
- snaptree, err := snapshot.New(snapConfig, chaindb, triedb, headBlock.Root())
- if err != nil {
- log.Error("Failed to open snapshot tree", "err", err)
- return err
- }
- if ctx.NArg() > 1 {
- log.Error("Too many arguments given")
- return errors.New("too many arguments")
- }
- var root = headBlock.Root()
- if ctx.NArg() == 1 {
- root, err = parseRoot(ctx.Args().First())
- if err != nil {
- log.Error("Failed to resolve state root", "err", err)
- return err
- }
- }
- if err := snaptree.Verify(root); err != nil {
- log.Error("Failed to verify state", "root", root, "err", err)
- return err
- }
- log.Info("Verified the state", "root", root)
- return snapshot.CheckDanglingStorage(chaindb)
-}
-
-// checkDanglingStorage iterates the snap storage data, and verifies that all
-// storage also has corresponding account data.
-func checkDanglingStorage(ctx *cli.Context) error {
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- db := utils.MakeChainDatabase(ctx, stack, true)
- defer db.Close()
- return snapshot.CheckDanglingStorage(db)
-}
-
-// traverseState is a helper function used for pruning verification.
-// Basically it just iterates the trie, ensure all nodes and associated
-// contract codes are present.
-func traverseState(ctx *cli.Context) error {
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- chaindb := utils.MakeChainDatabase(ctx, stack, true)
- defer chaindb.Close()
-
- triedb := utils.MakeTrieDatabase(ctx, chaindb, false, true, false)
- defer triedb.Close()
-
- headBlock := rawdb.ReadHeadBlock(chaindb)
- if headBlock == nil {
- log.Error("Failed to load head block")
- return errors.New("no head block")
- }
- if ctx.NArg() > 1 {
- log.Error("Too many arguments given")
- return errors.New("too many arguments")
- }
- var (
- root common.Hash
- err error
- )
- if ctx.NArg() == 1 {
- root, err = parseRoot(ctx.Args().First())
- if err != nil {
- log.Error("Failed to resolve state root", "err", err)
- return err
- }
- log.Info("Start traversing the state", "root", root)
- } else {
- root = headBlock.Root()
- log.Info("Start traversing the state", "root", root, "number", headBlock.NumberU64())
- }
- t, err := trie.NewStateTrie(trie.StateTrieID(root), triedb)
- if err != nil {
- log.Error("Failed to open trie", "root", root, "err", err)
- return err
- }
- var (
- accounts int
- slots int
- codes int
- lastReport time.Time
- start = time.Now()
- )
- acctIt, err := t.NodeIterator(nil)
- if err != nil {
- log.Error("Failed to open iterator", "root", root, "err", err)
- return err
- }
- accIter := trie.NewIterator(acctIt)
- for accIter.Next() {
- accounts += 1
- var acc types.StateAccount
- if err := rlp.DecodeBytes(accIter.Value, &acc); err != nil {
- log.Error("Invalid account encountered during traversal", "err", err)
- return err
- }
- if acc.Root != types.EmptyRootHash {
- id := trie.StorageTrieID(root, common.BytesToHash(accIter.Key), acc.Root)
- storageTrie, err := trie.NewStateTrie(id, triedb)
- if err != nil {
- log.Error("Failed to open storage trie", "root", acc.Root, "err", err)
- return err
- }
- storageIt, err := storageTrie.NodeIterator(nil)
- if err != nil {
- log.Error("Failed to open storage iterator", "root", acc.Root, "err", err)
- return err
- }
- storageIter := trie.NewIterator(storageIt)
- for storageIter.Next() {
- slots += 1
-
- if time.Since(lastReport) > time.Second*8 {
- log.Info("Traversing state", "accounts", accounts, "slots", slots, "codes", codes, "elapsed", common.PrettyDuration(time.Since(start)))
- lastReport = time.Now()
- }
- }
- if storageIter.Err != nil {
- log.Error("Failed to traverse storage trie", "root", acc.Root, "err", storageIter.Err)
- return storageIter.Err
- }
- }
- if !bytes.Equal(acc.CodeHash, types.EmptyCodeHash.Bytes()) {
- if !rawdb.HasCode(chaindb, common.BytesToHash(acc.CodeHash)) {
- log.Error("Code is missing", "hash", common.BytesToHash(acc.CodeHash))
- return errors.New("missing code")
- }
- codes += 1
- }
- if time.Since(lastReport) > time.Second*8 {
- log.Info("Traversing state", "accounts", accounts, "slots", slots, "codes", codes, "elapsed", common.PrettyDuration(time.Since(start)))
- lastReport = time.Now()
- }
- }
- if accIter.Err != nil {
- log.Error("Failed to traverse state trie", "root", root, "err", accIter.Err)
- return accIter.Err
- }
- log.Info("State is complete", "accounts", accounts, "slots", slots, "codes", codes, "elapsed", common.PrettyDuration(time.Since(start)))
- return nil
-}
-
-// traverseRawState is a helper function used for pruning verification.
-// Basically it just iterates the trie, ensure all nodes and associated
-// contract codes are present. It's basically identical to traverseState
-// but it will check each trie node.
-func traverseRawState(ctx *cli.Context) error {
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- chaindb := utils.MakeChainDatabase(ctx, stack, true)
- defer chaindb.Close()
-
- triedb := utils.MakeTrieDatabase(ctx, chaindb, false, true, false)
- defer triedb.Close()
-
- headBlock := rawdb.ReadHeadBlock(chaindb)
- if headBlock == nil {
- log.Error("Failed to load head block")
- return errors.New("no head block")
- }
- if ctx.NArg() > 1 {
- log.Error("Too many arguments given")
- return errors.New("too many arguments")
- }
- var (
- root common.Hash
- err error
- )
- if ctx.NArg() == 1 {
- root, err = parseRoot(ctx.Args().First())
- if err != nil {
- log.Error("Failed to resolve state root", "err", err)
- return err
- }
- log.Info("Start traversing the state", "root", root)
- } else {
- root = headBlock.Root()
- log.Info("Start traversing the state", "root", root, "number", headBlock.NumberU64())
- }
- t, err := trie.NewStateTrie(trie.StateTrieID(root), triedb)
- if err != nil {
- log.Error("Failed to open trie", "root", root, "err", err)
- return err
- }
- var (
- nodes int
- accounts int
- slots int
- codes int
- lastReport time.Time
- start = time.Now()
- hasher = crypto.NewKeccakState()
- got = make([]byte, 32)
- )
- accIter, err := t.NodeIterator(nil)
- if err != nil {
- log.Error("Failed to open iterator", "root", root, "err", err)
- return err
- }
- reader, err := triedb.Reader(root)
- if err != nil {
- log.Error("State is non-existent", "root", root)
- return nil
- }
- for accIter.Next(true) {
- nodes += 1
- node := accIter.Hash()
-
- // Check the present for non-empty hash node(embedded node doesn't
- // have their own hash).
- if node != (common.Hash{}) {
- blob, _ := reader.Node(common.Hash{}, accIter.Path(), node)
- if len(blob) == 0 {
- log.Error("Missing trie node(account)", "hash", node)
- return errors.New("missing account")
- }
- hasher.Reset()
- hasher.Write(blob)
- hasher.Read(got)
- if !bytes.Equal(got, node.Bytes()) {
- log.Error("Invalid trie node(account)", "hash", node.Hex(), "value", blob)
- return errors.New("invalid account node")
- }
- }
- // If it's a leaf node, yes we are touching an account,
- // dig into the storage trie further.
- if accIter.Leaf() {
- accounts += 1
- var acc types.StateAccount
- if err := rlp.DecodeBytes(accIter.LeafBlob(), &acc); err != nil {
- log.Error("Invalid account encountered during traversal", "err", err)
- return errors.New("invalid account")
- }
- if acc.Root != types.EmptyRootHash {
- id := trie.StorageTrieID(root, common.BytesToHash(accIter.LeafKey()), acc.Root)
- storageTrie, err := trie.NewStateTrie(id, triedb)
- if err != nil {
- log.Error("Failed to open storage trie", "root", acc.Root, "err", err)
- return errors.New("missing storage trie")
- }
- storageIter, err := storageTrie.NodeIterator(nil)
- if err != nil {
- log.Error("Failed to open storage iterator", "root", acc.Root, "err", err)
- return err
- }
- for storageIter.Next(true) {
- nodes += 1
- node := storageIter.Hash()
-
- // Check the presence for non-empty hash node(embedded node doesn't
- // have their own hash).
- if node != (common.Hash{}) {
- blob, _ := reader.Node(common.BytesToHash(accIter.LeafKey()), storageIter.Path(), node)
- if len(blob) == 0 {
- log.Error("Missing trie node(storage)", "hash", node)
- return errors.New("missing storage")
- }
- hasher.Reset()
- hasher.Write(blob)
- hasher.Read(got)
- if !bytes.Equal(got, node.Bytes()) {
- log.Error("Invalid trie node(storage)", "hash", node.Hex(), "value", blob)
- return errors.New("invalid storage node")
- }
- }
- // Bump the counter if it's leaf node.
- if storageIter.Leaf() {
- slots += 1
- }
- if time.Since(lastReport) > time.Second*8 {
- log.Info("Traversing state", "nodes", nodes, "accounts", accounts, "slots", slots, "codes", codes, "elapsed", common.PrettyDuration(time.Since(start)))
- lastReport = time.Now()
- }
- }
- if storageIter.Error() != nil {
- log.Error("Failed to traverse storage trie", "root", acc.Root, "err", storageIter.Error())
- return storageIter.Error()
- }
- }
- if !bytes.Equal(acc.CodeHash, types.EmptyCodeHash.Bytes()) {
- if !rawdb.HasCode(chaindb, common.BytesToHash(acc.CodeHash)) {
- log.Error("Code is missing", "account", common.BytesToHash(accIter.LeafKey()))
- return errors.New("missing code")
- }
- codes += 1
- }
- if time.Since(lastReport) > time.Second*8 {
- log.Info("Traversing state", "nodes", nodes, "accounts", accounts, "slots", slots, "codes", codes, "elapsed", common.PrettyDuration(time.Since(start)))
- lastReport = time.Now()
- }
- }
- }
- if accIter.Error() != nil {
- log.Error("Failed to traverse state trie", "root", root, "err", accIter.Error())
- return accIter.Error()
- }
- log.Info("State is complete", "nodes", nodes, "accounts", accounts, "slots", slots, "codes", codes, "elapsed", common.PrettyDuration(time.Since(start)))
- return nil
-}
-
-func parseRoot(input string) (common.Hash, error) {
- var h common.Hash
- if err := h.UnmarshalText([]byte(input)); err != nil {
- return h, err
- }
- return h, nil
-}
-
-func dumpState(ctx *cli.Context) error {
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- conf, db, root, err := parseDumpConfig(ctx, stack)
- if err != nil {
- return err
- }
- triedb := utils.MakeTrieDatabase(ctx, db, false, true, false)
- defer triedb.Close()
-
- snapConfig := snapshot.Config{
- CacheSize: 256,
- Recovery: false,
- NoBuild: true,
- AsyncBuild: false,
- }
- snaptree, err := snapshot.New(snapConfig, db, triedb, root)
- if err != nil {
- return err
- }
- accIt, err := snaptree.AccountIterator(root, common.BytesToHash(conf.Start))
- if err != nil {
- return err
- }
- defer accIt.Release()
-
- log.Info("Snapshot dumping started", "root", root)
- var (
- start = time.Now()
- logged = time.Now()
- accounts uint64
- )
- enc := json.NewEncoder(os.Stdout)
- enc.Encode(struct {
- Root common.Hash `json:"root"`
- }{root})
- for accIt.Next() {
- account, err := types.FullAccount(accIt.Account())
- if err != nil {
- return err
- }
- da := &state.DumpAccount{
- Balance: account.Balance.String(),
- Nonce: account.Nonce,
- Root: account.Root.Bytes(),
- CodeHash: account.CodeHash,
- AddressHash: accIt.Hash().Bytes(),
- }
- if !conf.SkipCode && !bytes.Equal(account.CodeHash, types.EmptyCodeHash.Bytes()) {
- da.Code = rawdb.ReadCode(db, common.BytesToHash(account.CodeHash))
- }
- if !conf.SkipStorage {
- da.Storage = make(map[common.Hash]string)
-
- stIt, err := snaptree.StorageIterator(root, accIt.Hash(), common.Hash{})
- if err != nil {
- return err
- }
- for stIt.Next() {
- da.Storage[stIt.Hash()] = common.Bytes2Hex(stIt.Slot())
- }
- }
- enc.Encode(da)
- accounts++
- if time.Since(logged) > 8*time.Second {
- log.Info("Snapshot dumping in progress", "at", accIt.Hash(), "accounts", accounts,
- "elapsed", common.PrettyDuration(time.Since(start)))
- logged = time.Now()
- }
- if conf.Max > 0 && accounts >= conf.Max {
- break
- }
- }
- log.Info("Snapshot dumping complete", "accounts", accounts,
- "elapsed", common.PrettyDuration(time.Since(start)))
- return nil
-}
-
-// snapshotExportPreimages dumps the preimage data to a flat file.
-func snapshotExportPreimages(ctx *cli.Context) error {
- if ctx.NArg() < 1 {
- utils.Fatalf("This command requires an argument.")
- }
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- chaindb := utils.MakeChainDatabase(ctx, stack, true)
- defer chaindb.Close()
-
- triedb := utils.MakeTrieDatabase(ctx, chaindb, false, true, false)
- defer triedb.Close()
-
- var root common.Hash
- if ctx.NArg() > 1 {
- rootBytes := common.FromHex(ctx.Args().Get(1))
- if len(rootBytes) != common.HashLength {
- return fmt.Errorf("invalid hash: %s", ctx.Args().Get(1))
- }
- root = common.BytesToHash(rootBytes)
- } else {
- headBlock := rawdb.ReadHeadBlock(chaindb)
- if headBlock == nil {
- log.Error("Failed to load head block")
- return errors.New("no head block")
- }
- root = headBlock.Root()
- }
- snapConfig := snapshot.Config{
- CacheSize: 256,
- Recovery: false,
- NoBuild: true,
- AsyncBuild: false,
- }
- snaptree, err := snapshot.New(snapConfig, chaindb, triedb, root)
- if err != nil {
- return err
- }
- return utils.ExportSnapshotPreimages(chaindb, snaptree, ctx.Args().First(), root)
-}
-
-// checkAccount iterates the snap data layers, and looks up the given account
-// across all layers.
-func checkAccount(ctx *cli.Context) error {
- if ctx.NArg() != 1 {
- return errors.New("need arg")
- }
- var (
- hash common.Hash
- addr common.Address
- )
- switch arg := ctx.Args().First(); len(arg) {
- case 40, 42:
- addr = common.HexToAddress(arg)
- hash = crypto.Keccak256Hash(addr.Bytes())
- case 64, 66:
- hash = common.HexToHash(arg)
- default:
- return errors.New("malformed address or hash")
- }
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
- chaindb := utils.MakeChainDatabase(ctx, stack, true)
- defer chaindb.Close()
- start := time.Now()
- log.Info("Checking difflayer journal", "address", addr, "hash", hash)
- if err := snapshot.CheckJournalAccount(chaindb, hash); err != nil {
- return err
- }
- log.Info("Checked the snapshot journalled storage", "time", common.PrettyDuration(time.Since(start)))
- return nil
-}
diff --git a/cmd/geth/testdata/blockchain.blocks b/cmd/geth/testdata/blockchain.blocks
deleted file mode 100644
index d29453d3e5..0000000000
Binary files a/cmd/geth/testdata/blockchain.blocks and /dev/null differ
diff --git a/cmd/geth/testdata/clique.json b/cmd/geth/testdata/clique.json
deleted file mode 100644
index b54b4a7d3b..0000000000
--- a/cmd/geth/testdata/clique.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "config": {
- "chainId": 15,
- "homesteadBlock": 0,
- "eip150Block": 0,
- "eip155Block": 0,
- "eip158Block": 0,
- "byzantiumBlock": 0,
- "constantinopleBlock": 0,
- "petersburgBlock": 0,
- "clique": {
- "period": 5,
- "epoch": 30000
- }
- },
- "difficulty": "1",
- "gasLimit": "8000000",
- "extradata": "0x000000000000000000000000000000000000000000000000000000000000000002f0d131f1f97aef08aec6e3291b957d9efe71050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
- "alloc": {
- "02f0d131f1f97aef08aec6e3291b957d9efe7105": {
- "balance": "300000"
- }
- }
-}
\ No newline at end of file
diff --git a/cmd/geth/testdata/empty.js b/cmd/geth/testdata/empty.js
deleted file mode 100644
index 8b13789179..0000000000
--- a/cmd/geth/testdata/empty.js
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/cmd/geth/testdata/guswallet.json b/cmd/geth/testdata/guswallet.json
deleted file mode 100644
index e8ea4f3326..0000000000
--- a/cmd/geth/testdata/guswallet.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "encseed": "26d87f5f2bf9835f9a47eefae571bc09f9107bb13d54ff12a4ec095d01f83897494cf34f7bed2ed34126ecba9db7b62de56c9d7cd136520a0427bfb11b8954ba7ac39b90d4650d3448e31185affcd74226a68f1e94b1108e6e0a4a91cdd83eba",
- "ethaddr": "d4584b5f6229b7be90727b0fc8c6b91bb427821f",
- "email": "gustav.simonsson@gmail.com",
- "btcaddr": "1EVknXyFC68kKNLkh6YnKzW41svSRoaAcx"
-}
diff --git a/cmd/geth/testdata/key.prv b/cmd/geth/testdata/key.prv
deleted file mode 100644
index 1d2687ea63..0000000000
--- a/cmd/geth/testdata/key.prv
+++ /dev/null
@@ -1 +0,0 @@
-48aa455c373ec5ce7fefb0e54f44a215decdc85b9047bc4d09801e038909bdbe
\ No newline at end of file
diff --git a/cmd/geth/testdata/logging/logtest-json.txt b/cmd/geth/testdata/logging/logtest-json.txt
deleted file mode 100644
index 3bfe718660..0000000000
--- a/cmd/geth/testdata/logging/logtest-json.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-{"t":"2023-11-22T15:42:00.407963+08:00","lvl":"info","msg":"big.Int","111,222,333,444,555,678,999":"111222333444555678999"}
-{"t":"2023-11-22T15:42:00.408084+08:00","lvl":"info","msg":"-big.Int","-111,222,333,444,555,678,999":"-111222333444555678999"}
-{"t":"2023-11-22T15:42:00.408092+08:00","lvl":"info","msg":"big.Int","11,122,233,344,455,567,899,900":"11122233344455567899900"}
-{"t":"2023-11-22T15:42:00.408097+08:00","lvl":"info","msg":"-big.Int","-11,122,233,344,455,567,899,900":"-11122233344455567899900"}
-{"t":"2023-11-22T15:42:00.408127+08:00","lvl":"info","msg":"uint256","111,222,333,444,555,678,999":"111222333444555678999"}
-{"t":"2023-11-22T15:42:00.408133+08:00","lvl":"info","msg":"uint256","11,122,233,344,455,567,899,900":"11122233344455567899900"}
-{"t":"2023-11-22T15:42:00.408137+08:00","lvl":"info","msg":"int64","1,000,000":1000000}
-{"t":"2023-11-22T15:42:00.408145+08:00","lvl":"info","msg":"int64","-1,000,000":-1000000}
-{"t":"2023-11-22T15:42:00.408149+08:00","lvl":"info","msg":"int64","9,223,372,036,854,775,807":9223372036854775807}
-{"t":"2023-11-22T15:42:00.408153+08:00","lvl":"info","msg":"int64","-9,223,372,036,854,775,808":-9223372036854775808}
-{"t":"2023-11-22T15:42:00.408156+08:00","lvl":"info","msg":"uint64","1,000,000":1000000}
-{"t":"2023-11-22T15:42:00.40816+08:00","lvl":"info","msg":"uint64","18,446,744,073,709,551,615":18446744073709551615}
-{"t":"2023-11-22T15:42:00.408164+08:00","lvl":"info","msg":"Special chars in value","key":"special \r\n\t chars"}
-{"t":"2023-11-22T15:42:00.408167+08:00","lvl":"info","msg":"Special chars in key","special \n\t chars":"value"}
-{"t":"2023-11-22T15:42:00.408171+08:00","lvl":"info","msg":"nospace","nospace":"nospace"}
-{"t":"2023-11-22T15:42:00.408174+08:00","lvl":"info","msg":"with space","with nospace":"with nospace"}
-{"t":"2023-11-22T15:42:00.408178+08:00","lvl":"info","msg":"Bash escapes in value","key":"\u001b[1G\u001b[K\u001b[1A"}
-{"t":"2023-11-22T15:42:00.408182+08:00","lvl":"info","msg":"Bash escapes in key","\u001b[1G\u001b[K\u001b[1A":"value"}
-{"t":"2023-11-22T15:42:00.408186+08:00","lvl":"info","msg":"Bash escapes in message \u001b[1G\u001b[K\u001b[1A end","key":"value"}
-{"t":"2023-11-22T15:42:00.408194+08:00","lvl":"info","msg":"\u001b[35mColored\u001b[0m[","\u001b[35mColored\u001b[0m[":"\u001b[35mColored\u001b[0m["}
-{"t":"2023-11-22T15:42:00.408197+08:00","lvl":"info","msg":"an error message with quotes","error":"this is an 'error'"}
-{"t":"2023-11-22T15:42:00.408202+08:00","lvl":"info","msg":"Custom Stringer value","2562047h47m16.854s":"2562047h47m16.854s"}
-{"t":"2023-11-22T15:42:00.408208+08:00","lvl":"info","msg":"a custom stringer that emits quoted text","output":"output with 'quotes'"}
-{"t":"2023-11-22T15:42:00.408219+08:00","lvl":"info","msg":"A message with wonky 💩 characters"}
-{"t":"2023-11-22T15:42:00.408222+08:00","lvl":"info","msg":"A multiline message \nINFO [10-18|14:11:31.106] with wonky characters 💩"}
-{"t":"2023-11-22T15:42:00.408226+08:00","lvl":"info","msg":"A multiline message \nLALA [ZZZZZZZZZZZZZZZZZZ] Actually part of message above"}
-{"t":"2023-11-22T15:42:00.408229+08:00","lvl":"info","msg":"boolean","true":true,"false":false}
-{"t":"2023-11-22T15:42:00.408234+08:00","lvl":"info","msg":"repeated-key 1","foo":"alpha","foo":"beta"}
-{"t":"2023-11-22T15:42:00.408237+08:00","lvl":"info","msg":"repeated-key 2","xx":"short","xx":"longer"}
-{"t":"2023-11-22T15:42:00.408241+08:00","lvl":"info","msg":"log at level info"}
-{"t":"2023-11-22T15:42:00.408244+08:00","lvl":"warn","msg":"log at level warn"}
-{"t":"2023-11-22T15:42:00.408247+08:00","lvl":"eror","msg":"log at level error"}
-{"t":"2023-11-22T15:42:00.408251+08:00","lvl":"info","msg":"test","bar":"short","a":"aligned left"}
-{"t":"2023-11-22T15:42:00.408254+08:00","lvl":"info","msg":"test","bar":"a long message","a":1}
-{"t":"2023-11-22T15:42:00.408258+08:00","lvl":"info","msg":"test","bar":"short","a":"aligned right"}
-{"t":"2023-11-22T15:42:00.408261+08:00","lvl":"info","msg":"The following logs should align so that the key-fields make 5 columns"}
-{"t":"2023-11-22T15:42:00.408275+08:00","lvl":"info","msg":"Inserted known block","number":1012,"hash":"0x0000000000000000000000000000000000000000000000000000000000001234","txs":200,"gas":1123123,"other":"first"}
-{"t":"2023-11-22T15:42:00.408281+08:00","lvl":"info","msg":"Inserted new block","number":1,"hash":"0x0000000000000000000000000000000000000000000000000000000000001235","txs":2,"gas":1123,"other":"second"}
-{"t":"2023-11-22T15:42:00.408287+08:00","lvl":"info","msg":"Inserted known block","number":99,"hash":"0x0000000000000000000000000000000000000000000000000000000000012322","txs":10,"gas":1,"other":"third"}
-{"t":"2023-11-22T15:42:00.408296+08:00","lvl":"warn","msg":"Inserted known block","number":1012,"hash":"0x0000000000000000000000000000000000000000000000000000000000001234","txs":200,"gas":99,"other":"fourth"}
-{"t":"2023-11-22T15:42:00.4083+08:00","lvl":"info","msg":"(*big.Int)(nil)","":""}
-{"t":"2023-11-22T15:42:00.408303+08:00","lvl":"info","msg":"(*uint256.Int)(nil)","":""}
-{"t":"2023-11-22T15:42:00.408311+08:00","lvl":"info","msg":"(fmt.Stringer)(nil)","res":null}
-{"t":"2023-11-22T15:42:00.408318+08:00","lvl":"info","msg":"nil-concrete-stringer","res":""}
-{"t":"2023-11-22T15:42:00.408322+08:00","lvl":"info","msg":"error(nil) ","res":null}
-{"t":"2023-11-22T15:42:00.408326+08:00","lvl":"info","msg":"nil-concrete-error","res":""}
-{"t":"2023-11-22T15:42:00.408334+08:00","lvl":"info","msg":"nil-custom-struct","res":null}
-{"t":"2023-11-22T15:42:00.40835+08:00","lvl":"info","msg":"raw nil","res":null}
-{"t":"2023-11-22T15:42:00.408354+08:00","lvl":"info","msg":"(*uint64)(nil)","res":null}
-{"t":"2023-11-22T15:42:00.408361+08:00","lvl":"info","msg":"Using keys 't', 'lvl', 'time', 'level' and 'msg'","t":"t","time":"time","lvl":"lvl","level":"level","msg":"msg"}
-{"t":"2023-11-29T15:13:00.195655931+01:00","lvl":"info","msg":"Odd pair (1 attr)","key":null,"LOG_ERROR":"Normalized odd number of arguments by adding nil"}
-{"t":"2023-11-29T15:13:00.195681832+01:00","lvl":"info","msg":"Odd pair (3 attr)","key":"value","key2":null,"LOG_ERROR":"Normalized odd number of arguments by adding nil"}
diff --git a/cmd/geth/testdata/logging/logtest-logfmt.txt b/cmd/geth/testdata/logging/logtest-logfmt.txt
deleted file mode 100644
index f20d66635d..0000000000
--- a/cmd/geth/testdata/logging/logtest-logfmt.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=big.Int 111,222,333,444,555,678,999=111222333444555678999
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=-big.Int -111,222,333,444,555,678,999=-111222333444555678999
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=big.Int 11,122,233,344,455,567,899,900=11122233344455567899900
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=-big.Int -11,122,233,344,455,567,899,900=-11122233344455567899900
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=uint256 111,222,333,444,555,678,999=111222333444555678999
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=uint256 11,122,233,344,455,567,899,900=11122233344455567899900
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=int64 1,000,000=1000000
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=int64 -1,000,000=-1000000
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=int64 9,223,372,036,854,775,807=9223372036854775807
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=int64 -9,223,372,036,854,775,808=-9223372036854775808
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=uint64 1,000,000=1000000
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=uint64 18,446,744,073,709,551,615=18446744073709551615
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Special chars in value" key="special \r\n\t chars"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Special chars in key" "special \n\t chars"=value
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=nospace nospace=nospace
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="with space" "with nospace"="with nospace"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Bash escapes in value" key="\x1b[1G\x1b[K\x1b[1A"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Bash escapes in key" "\x1b[1G\x1b[K\x1b[1A"=value
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Bash escapes in message \x1b[1G\x1b[K\x1b[1A end" key=value
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="\x1b[35mColored\x1b[0m[" "\x1b[35mColored\x1b[0m["="\x1b[35mColored\x1b[0m["
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="an error message with quotes" error="this is an 'error'"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Custom Stringer value" 2562047h47m16.854s=2562047h47m16.854s
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="a custom stringer that emits quoted text" output="output with 'quotes'"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="A message with wonky 💩 characters"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="A multiline message \nINFO [10-18|14:11:31.106] with wonky characters 💩"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="A multiline message \nLALA [ZZZZZZZZZZZZZZZZZZ] Actually part of message above"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=boolean true=true false=false
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="repeated-key 1" foo=alpha foo=beta
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="repeated-key 2" xx=short xx=longer
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="log at level info"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=warn msg="log at level warn"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=eror msg="log at level error"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=test bar=short a="aligned left"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=test bar="a long message" a=1
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=test bar=short a="aligned right"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="The following logs should align so that the key-fields make 5 columns"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Inserted known block" number=1012 hash=0x0000000000000000000000000000000000000000000000000000000000001234 txs=200 gas=1123123 other=first
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Inserted new block" number=1 hash=0x0000000000000000000000000000000000000000000000000000000000001235 txs=2 gas=1123 other=second
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Inserted known block" number=99 hash=0x0000000000000000000000000000000000000000000000000000000000012322 txs=10 gas=1 other=third
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=warn msg="Inserted known block" number=1012 hash=0x0000000000000000000000000000000000000000000000000000000000001234 txs=200 gas=99 other=fourth
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=(*big.Int)(nil) =
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=(*uint256.Int)(nil) =
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=(fmt.Stringer)(nil) res=
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=nil-concrete-stringer res=
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="error(nil) " res=
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=nil-concrete-error res=""
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=nil-custom-struct res=
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="raw nil" res=
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=(*uint64)(nil) res=
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Using keys 't', 'lvl', 'time', 'level' and 'msg'" t=t time=time lvl=lvl level=level msg=msg
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Odd pair (1 attr)" key= LOG_ERROR="Normalized odd number of arguments by adding nil"
-t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Odd pair (3 attr)" key=value key2= LOG_ERROR="Normalized odd number of arguments by adding nil"
diff --git a/cmd/geth/testdata/logging/logtest-terminal.txt b/cmd/geth/testdata/logging/logtest-terminal.txt
deleted file mode 100644
index e3b562117c..0000000000
--- a/cmd/geth/testdata/logging/logtest-terminal.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-INFO [xx-xx|xx:xx:xx.xxx] big.Int 111,222,333,444,555,678,999=111,222,333,444,555,678,999
-INFO [xx-xx|xx:xx:xx.xxx] -big.Int -111,222,333,444,555,678,999=-111,222,333,444,555,678,999
-INFO [xx-xx|xx:xx:xx.xxx] big.Int 11,122,233,344,455,567,899,900=11,122,233,344,455,567,899,900
-INFO [xx-xx|xx:xx:xx.xxx] -big.Int -11,122,233,344,455,567,899,900=-11,122,233,344,455,567,899,900
-INFO [xx-xx|xx:xx:xx.xxx] uint256 111,222,333,444,555,678,999=111,222,333,444,555,678,999
-INFO [xx-xx|xx:xx:xx.xxx] uint256 11,122,233,344,455,567,899,900=11,122,233,344,455,567,899,900
-INFO [xx-xx|xx:xx:xx.xxx] int64 1,000,000=1,000,000
-INFO [xx-xx|xx:xx:xx.xxx] int64 -1,000,000=-1,000,000
-INFO [xx-xx|xx:xx:xx.xxx] int64 9,223,372,036,854,775,807=9,223,372,036,854,775,807
-INFO [xx-xx|xx:xx:xx.xxx] int64 -9,223,372,036,854,775,808=-9,223,372,036,854,775,808
-INFO [xx-xx|xx:xx:xx.xxx] uint64 1,000,000=1,000,000
-INFO [xx-xx|xx:xx:xx.xxx] uint64 18,446,744,073,709,551,615=18,446,744,073,709,551,615
-INFO [xx-xx|xx:xx:xx.xxx] Special chars in value key="special \r\n\t chars"
-INFO [xx-xx|xx:xx:xx.xxx] Special chars in key "special \n\t chars"=value
-INFO [xx-xx|xx:xx:xx.xxx] nospace nospace=nospace
-INFO [xx-xx|xx:xx:xx.xxx] with space "with nospace"="with nospace"
-INFO [xx-xx|xx:xx:xx.xxx] Bash escapes in value key="\x1b[1G\x1b[K\x1b[1A"
-INFO [xx-xx|xx:xx:xx.xxx] Bash escapes in key "\x1b[1G\x1b[K\x1b[1A"=value
-INFO [xx-xx|xx:xx:xx.xxx] "Bash escapes in message \x1b[1G\x1b[K\x1b[1A end" key=value
-INFO [xx-xx|xx:xx:xx.xxx] "\x1b[35mColored\x1b[0m[" "\x1b[35mColored\x1b[0m["="\x1b[35mColored\x1b[0m["
-INFO [xx-xx|xx:xx:xx.xxx] an error message with quotes error="this is an 'error'"
-INFO [xx-xx|xx:xx:xx.xxx] Custom Stringer value 2562047h47m16.854s=2562047h47m16.854s
-INFO [xx-xx|xx:xx:xx.xxx] a custom stringer that emits quoted text output="output with 'quotes'"
-INFO [xx-xx|xx:xx:xx.xxx] "A message with wonky 💩 characters"
-INFO [xx-xx|xx:xx:xx.xxx] "A multiline message \nINFO [10-18|14:11:31.106] with wonky characters 💩"
-INFO [xx-xx|xx:xx:xx.xxx] A multiline message
-LALA [ZZZZZZZZZZZZZZZZZZ] Actually part of message above
-INFO [xx-xx|xx:xx:xx.xxx] boolean true=true false=false
-INFO [xx-xx|xx:xx:xx.xxx] repeated-key 1 foo=alpha foo=beta
-INFO [xx-xx|xx:xx:xx.xxx] repeated-key 2 xx=short xx=longer
-INFO [xx-xx|xx:xx:xx.xxx] log at level info
-WARN [xx-xx|xx:xx:xx.xxx] log at level warn
-ERROR[xx-xx|xx:xx:xx.xxx] log at level error
-INFO [xx-xx|xx:xx:xx.xxx] test bar=short a="aligned left"
-INFO [xx-xx|xx:xx:xx.xxx] test bar="a long message" a=1
-INFO [xx-xx|xx:xx:xx.xxx] test bar=short a="aligned right"
-INFO [xx-xx|xx:xx:xx.xxx] The following logs should align so that the key-fields make 5 columns
-INFO [xx-xx|xx:xx:xx.xxx] Inserted known block number=1012 hash=000000..001234 txs=200 gas=1,123,123 other=first
-INFO [xx-xx|xx:xx:xx.xxx] Inserted new block number=1 hash=000000..001235 txs=2 gas=1123 other=second
-INFO [xx-xx|xx:xx:xx.xxx] Inserted known block number=99 hash=000000..012322 txs=10 gas=1 other=third
-WARN [xx-xx|xx:xx:xx.xxx] Inserted known block number=1012 hash=000000..001234 txs=200 gas=99 other=fourth
-INFO [xx-xx|xx:xx:xx.xxx] (*big.Int)(nil) =
-INFO [xx-xx|xx:xx:xx.xxx] (*uint256.Int)(nil) =
-INFO [xx-xx|xx:xx:xx.xxx] (fmt.Stringer)(nil) res=
-INFO [xx-xx|xx:xx:xx.xxx] nil-concrete-stringer res=
-INFO [xx-xx|xx:xx:xx.xxx] error(nil) res=
-INFO [xx-xx|xx:xx:xx.xxx] nil-concrete-error res=
-INFO [xx-xx|xx:xx:xx.xxx] nil-custom-struct res=
-INFO [xx-xx|xx:xx:xx.xxx] raw nil res=
-INFO [xx-xx|xx:xx:xx.xxx] (*uint64)(nil) res=
-INFO [xx-xx|xx:xx:xx.xxx] Using keys 't', 'lvl', 'time', 'level' and 'msg' t=t time=time lvl=lvl level=level msg=msg
-INFO [xx-xx|xx:xx:xx.xxx] Odd pair (1 attr) key= LOG_ERROR="Normalized odd number of arguments by adding nil"
-INFO [xx-xx|xx:xx:xx.xxx] Odd pair (3 attr) key=value key2= LOG_ERROR="Normalized odd number of arguments by adding nil"
diff --git a/cmd/geth/testdata/password.txt b/cmd/geth/testdata/password.txt
deleted file mode 100644
index f6ea049518..0000000000
--- a/cmd/geth/testdata/password.txt
+++ /dev/null
@@ -1 +0,0 @@
-foobar
\ No newline at end of file
diff --git a/cmd/geth/testdata/passwords.txt b/cmd/geth/testdata/passwords.txt
deleted file mode 100644
index 96f98c7f43..0000000000
--- a/cmd/geth/testdata/passwords.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-foobar
-foobar
-foobar
diff --git a/cmd/geth/testdata/vcheck/data.json b/cmd/geth/testdata/vcheck/data.json
deleted file mode 100644
index e7ee2bf7e4..0000000000
--- a/cmd/geth/testdata/vcheck/data.json
+++ /dev/null
@@ -1,61 +0,0 @@
-[
- {
- "name": "CorruptedDAG",
- "uid": "GETH-2020-01",
- "summary": "Mining nodes will generate erroneous PoW on epochs > `385`.",
- "description": "A mining flaw could cause miners to erroneously calculate PoW, due to an index overflow, if DAG size is exceeding the maximum 32 bit unsigned value.\n\nThis occurred on the ETC chain on 2020-11-06. This is likely to trigger for ETH mainnet around block `11550000`/epoch `385`, slated to occur early January 2021.\n\nThis issue is relevant only for miners, non-mining nodes are unaffected, since non-mining nodes use a smaller verification cache instead of a full DAG.",
- "links": [
- "https://github.com/ethereum/go-ethereum/pull/21793",
- "https://blog.ethereum.org/2020/11/12/geth_security_release/",
- "https://github.com/ethereum/go-ethereum/commit/567d41d9363706b4b13ce0903804e8acf214af49"
- ],
- "introduced": "v1.6.0",
- "fixed": "v1.9.24",
- "published": "2020-11-12",
- "severity": "Medium",
- "check": "Geth\\/v1\\.(6|7|8)\\..*|Geth\\/v1\\.9\\.2(1|2|3)-.*"
- },
- {
- "name": "GoCrash",
- "uid": "GETH-2020-02",
- "summary": "A denial-of-service issue can be used to crash Geth nodes during block processing, due to an underlying bug in Go (CVE-2020-28362) versions < `1.15.5`, or `<1.14.12`",
- "description": "The DoS issue can be used to crash all Geth nodes during block processing, the effects of which would be that a major part of the Ethereum network went offline.\n\nOutside of Go-Ethereum, the issue is most likely relevant for all forks of Geth (such as TurboGeth or ETC’s core-geth) which is built with versions of Go which contains the vulnerability.",
- "links": [
- "https://blog.ethereum.org/2020/11/12/geth_security_release/",
- "https://groups.google.com/g/golang-announce/c/NpBGTTmKzpM",
- "https://github.com/golang/go/issues/42552"
- ],
- "fixed": "v1.9.24",
- "published": "2020-11-12",
- "severity": "Critical",
- "check": "Geth.*\\/go1\\.(11(.*)|12(.*)|13(.*)|14|14\\.(\\d|10|11|)|15|15\\.[0-4])$"
- },
- {
- "name": "ShallowCopy",
- "uid": "GETH-2020-03",
- "summary": "A consensus flaw in Geth, related to `datacopy` precompile",
- "description": "Geth erroneously performed a 'shallow' copy when the precompiled `datacopy` (at `0x00...04`) was invoked. An attacker could deploy a contract that uses the shallow copy to corrupt the contents of the `RETURNDATA`, thus causing a consensus failure.",
- "links": [
- "https://blog.ethereum.org/2020/11/12/geth_security_release/"
- ],
- "introduced": "v1.9.7",
- "fixed": "v1.9.17",
- "published": "2020-11-12",
- "severity": "Critical",
- "check": "Geth\\/v1\\.9\\.(7|8|9|10|11|12|13|14|15|16).*$"
- },
- {
- "name": "GethCrash",
- "uid": "GETH-2020-04",
- "summary": "A denial-of-service issue can be used to crash Geth nodes during block processing",
- "description": "Full details to be disclosed at a later date",
- "links": [
- "https://blog.ethereum.org/2020/11/12/geth_security_release/"
- ],
- "introduced": "v1.9.16",
- "fixed": "v1.9.18",
- "published": "2020-11-12",
- "severity": "Critical",
- "check": "Geth\\/v1\\.9.(16|17).*$"
- }
-]
diff --git a/cmd/geth/testdata/vcheck/minisig-sigs-new/data.json.minisig b/cmd/geth/testdata/vcheck/minisig-sigs-new/data.json.minisig
deleted file mode 100644
index eaea9f9053..0000000000
--- a/cmd/geth/testdata/vcheck/minisig-sigs-new/data.json.minisig
+++ /dev/null
@@ -1,4 +0,0 @@
-untrusted comment: signature from minisign secret key
-RUQkliYstQBOKLK05Sy5f3bVRMBqJT26ABo6Vbp3BNJAVjejoqYCu4GWE/+7qcDfHBqYIniDCbFIUvYEnOHxV6vZ93wO1xJWDQw=
-trusted comment: timestamp:1693986492 file:data.json hashed
-6Fdw2H+W1ZXK7QXSF77Z5AWC7+AEFAfDmTSxNGylU5HLT1AuSJQmxslj+VjtUBamYCvOuET7plbXza942AlWDw==
diff --git a/cmd/geth/testdata/vcheck/minisig-sigs/vulnerabilities.json.minisig.1 b/cmd/geth/testdata/vcheck/minisig-sigs/vulnerabilities.json.minisig.1
deleted file mode 100644
index f9066d4fe0..0000000000
--- a/cmd/geth/testdata/vcheck/minisig-sigs/vulnerabilities.json.minisig.1
+++ /dev/null
@@ -1,4 +0,0 @@
-untrusted comment: signature from minisign secret key
-RWQkliYstQBOKFQFQTjmCd6TPw07VZyWFSB3v4+1BM1kv8eHLE5FDy2OkPEqtdaL53xftlrHoJQie0uCcovdlSV8kpyxiLrxEQ0=
-trusted comment: timestamp:1605618622 file:vulnerabilities.json
-osAPs4QPdDkmiWQxqeMIzYv/b+ZGxJ+19Sbrk1Cpq4t2gHBT+lqFtwL3OCzKWWyjGRTmHfsVGBYpzEdPRQ0/BQ==
diff --git a/cmd/geth/testdata/vcheck/minisig-sigs/vulnerabilities.json.minisig.2 b/cmd/geth/testdata/vcheck/minisig-sigs/vulnerabilities.json.minisig.2
deleted file mode 100644
index a89a83d21a..0000000000
--- a/cmd/geth/testdata/vcheck/minisig-sigs/vulnerabilities.json.minisig.2
+++ /dev/null
@@ -1,4 +0,0 @@
-untrusted comment: Here's a comment
-RWQkliYstQBOKFQFQTjmCd6TPw07VZyWFSB3v4+1BM1kv8eHLE5FDy2OkPEqtdaL53xftlrHoJQie0uCcovdlSV8kpyxiLrxEQ0=
-trusted comment: Here's a trusted comment
-3CnkIuz9MEDa7uNyGZAbKZhuirwfiqm7E1uQHrd2SiO4Y8+Akw9vs052AyKw0s5nhbYHCZE2IMQdHNjKwxEGAQ==
diff --git a/cmd/geth/testdata/vcheck/minisig-sigs/vulnerabilities.json.minisig.3 b/cmd/geth/testdata/vcheck/minisig-sigs/vulnerabilities.json.minisig.3
deleted file mode 100644
index 6fd33b19a3..0000000000
--- a/cmd/geth/testdata/vcheck/minisig-sigs/vulnerabilities.json.minisig.3
+++ /dev/null
@@ -1,4 +0,0 @@
-untrusted comment: One more (untrusted) comment
-RWQkliYstQBOKFQFQTjmCd6TPw07VZyWFSB3v4+1BM1kv8eHLE5FDy2OkPEqtdaL53xftlrHoJQie0uCcovdlSV8kpyxiLrxEQ0=
-trusted comment: Here's a trusted comment
-3CnkIuz9MEDa7uNyGZAbKZhuirwfiqm7E1uQHrd2SiO4Y8+Akw9vs052AyKw0s5nhbYHCZE2IMQdHNjKwxEGAQ==
diff --git a/cmd/geth/testdata/vcheck/minisign.pub b/cmd/geth/testdata/vcheck/minisign.pub
deleted file mode 100644
index 183dce5f6b..0000000000
--- a/cmd/geth/testdata/vcheck/minisign.pub
+++ /dev/null
@@ -1,2 +0,0 @@
-untrusted comment: minisign public key 284E00B52C269624
-RWQkliYstQBOKOdtClfgC3IypIPX6TAmoEi7beZ4gyR3wsaezvqOMWsp
diff --git a/cmd/geth/testdata/vcheck/minisign.sec b/cmd/geth/testdata/vcheck/minisign.sec
deleted file mode 100644
index 5c50715b20..0000000000
--- a/cmd/geth/testdata/vcheck/minisign.sec
+++ /dev/null
@@ -1,2 +0,0 @@
-untrusted comment: minisign encrypted secret key
-RWRTY0Iyz8kmPMKrqk6DCtlO9a33akKiaOQG1aLolqDxs52qvPoAAAACAAAAAAAAAEAAAAAArEiggdvyn6+WzTprirLtgiYQoU+ihz/HyGgjhuF+Pz2ddMduyCO+xjCHeq+vgVVW039fbsI8hW6LRGJZLBKV5/jdxCXAVVQE7qTQ6xpEdO0z8Z731/pV1hlspQXG2PNd16NMtwd9dWw=
diff --git a/cmd/geth/testdata/vcheck/signify-sigs/data.json.sig b/cmd/geth/testdata/vcheck/signify-sigs/data.json.sig
deleted file mode 100644
index 3d5fcacf9a..0000000000
--- a/cmd/geth/testdata/vcheck/signify-sigs/data.json.sig
+++ /dev/null
@@ -1,2 +0,0 @@
-untrusted comment: verify with ./signifykey.pub
-RWSKLNhZb0KdAbhRUhW2LQZXdnwttu2SYhM9EuC4mMgOJB85h7/YIPupf8/ldTs4N8e9Y/fhgdY40q5LQpt5IFC62fq0v8U1/w8=
diff --git a/cmd/geth/testdata/vcheck/signifykey.pub b/cmd/geth/testdata/vcheck/signifykey.pub
deleted file mode 100644
index 328f973ab4..0000000000
--- a/cmd/geth/testdata/vcheck/signifykey.pub
+++ /dev/null
@@ -1,2 +0,0 @@
-untrusted comment: signify public key
-RWSKLNhZb0KdATtRT7mZC/bybI3t3+Hv/O2i3ye04Dq9fnT9slpZ1a2/
diff --git a/cmd/geth/testdata/vcheck/signifykey.sec b/cmd/geth/testdata/vcheck/signifykey.sec
deleted file mode 100644
index 3279a2e58b..0000000000
--- a/cmd/geth/testdata/vcheck/signifykey.sec
+++ /dev/null
@@ -1,2 +0,0 @@
-untrusted comment: signify secret key
-RWRCSwAAACpLQDLawSQCtI7eAVIvaiHzjTsTyJsfV5aKLNhZb0KdAWeICXJGa93/bHAcsY6jUh9I8RdEcDWEoGxmaXZC+IdVBPxDpkix9fBRGEUdKWHi3dOfqME0YRzErWI5AVg3cRw=
diff --git a/cmd/geth/testdata/vcheck/sigs/vulnerabilities.json.minisig.1 b/cmd/geth/testdata/vcheck/sigs/vulnerabilities.json.minisig.1
deleted file mode 100644
index f9066d4fe0..0000000000
--- a/cmd/geth/testdata/vcheck/sigs/vulnerabilities.json.minisig.1
+++ /dev/null
@@ -1,4 +0,0 @@
-untrusted comment: signature from minisign secret key
-RWQkliYstQBOKFQFQTjmCd6TPw07VZyWFSB3v4+1BM1kv8eHLE5FDy2OkPEqtdaL53xftlrHoJQie0uCcovdlSV8kpyxiLrxEQ0=
-trusted comment: timestamp:1605618622 file:vulnerabilities.json
-osAPs4QPdDkmiWQxqeMIzYv/b+ZGxJ+19Sbrk1Cpq4t2gHBT+lqFtwL3OCzKWWyjGRTmHfsVGBYpzEdPRQ0/BQ==
diff --git a/cmd/geth/testdata/vcheck/sigs/vulnerabilities.json.minisig.2 b/cmd/geth/testdata/vcheck/sigs/vulnerabilities.json.minisig.2
deleted file mode 100644
index a89a83d21a..0000000000
--- a/cmd/geth/testdata/vcheck/sigs/vulnerabilities.json.minisig.2
+++ /dev/null
@@ -1,4 +0,0 @@
-untrusted comment: Here's a comment
-RWQkliYstQBOKFQFQTjmCd6TPw07VZyWFSB3v4+1BM1kv8eHLE5FDy2OkPEqtdaL53xftlrHoJQie0uCcovdlSV8kpyxiLrxEQ0=
-trusted comment: Here's a trusted comment
-3CnkIuz9MEDa7uNyGZAbKZhuirwfiqm7E1uQHrd2SiO4Y8+Akw9vs052AyKw0s5nhbYHCZE2IMQdHNjKwxEGAQ==
diff --git a/cmd/geth/testdata/vcheck/sigs/vulnerabilities.json.minisig.3 b/cmd/geth/testdata/vcheck/sigs/vulnerabilities.json.minisig.3
deleted file mode 100644
index 6fd33b19a3..0000000000
--- a/cmd/geth/testdata/vcheck/sigs/vulnerabilities.json.minisig.3
+++ /dev/null
@@ -1,4 +0,0 @@
-untrusted comment: One more (untrusted) comment
-RWQkliYstQBOKFQFQTjmCd6TPw07VZyWFSB3v4+1BM1kv8eHLE5FDy2OkPEqtdaL53xftlrHoJQie0uCcovdlSV8kpyxiLrxEQ0=
-trusted comment: Here's a trusted comment
-3CnkIuz9MEDa7uNyGZAbKZhuirwfiqm7E1uQHrd2SiO4Y8+Akw9vs052AyKw0s5nhbYHCZE2IMQdHNjKwxEGAQ==
diff --git a/cmd/geth/testdata/vcheck/vulnerabilities.json b/cmd/geth/testdata/vcheck/vulnerabilities.json
deleted file mode 100644
index bee0e66dd8..0000000000
--- a/cmd/geth/testdata/vcheck/vulnerabilities.json
+++ /dev/null
@@ -1,170 +0,0 @@
-[
- {
- "name": "CorruptedDAG",
- "uid": "GETH-2020-01",
- "summary": "Mining nodes will generate erroneous PoW on epochs > `385`.",
- "description": "A mining flaw could cause miners to erroneously calculate PoW, due to an index overflow, if DAG size is exceeding the maximum 32 bit unsigned value.\n\nThis occurred on the ETC chain on 2020-11-06. This is likely to trigger for ETH mainnet around block `11550000`/epoch `385`, slated to occur early January 2021.\n\nThis issue is relevant only for miners, non-mining nodes are unaffected, since non-mining nodes use a smaller verification cache instead of a full DAG.",
- "links": [
- "https://github.com/ethereum/go-ethereum/pull/21793",
- "https://blog.ethereum.org/2020/11/12/geth_security_release/",
- "https://github.com/ethereum/go-ethereum/commit/567d41d9363706b4b13ce0903804e8acf214af49",
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-v592-xf75-856p"
- ],
- "introduced": "v1.6.0",
- "fixed": "v1.9.24",
- "published": "2020-11-12",
- "severity": "Medium",
- "CVE": "CVE-2020-26240",
- "check": "Geth\\/v1\\.(6|7|8)\\..*|Geth\\/v1\\.9\\.\\d-.*|Geth\\/v1\\.9\\.1.*|Geth\\/v1\\.9\\.2(0|1|2|3)-.*"
- },
- {
- "name": "Denial of service due to Go CVE-2020-28362",
- "uid": "GETH-2020-02",
- "summary": "A denial-of-service issue can be used to crash Geth nodes during block processing, due to an underlying bug in Go (CVE-2020-28362) versions < `1.15.5`, or `<1.14.12`",
- "description": "The DoS issue can be used to crash all Geth nodes during block processing, the effects of which would be that a major part of the Ethereum network went offline.\n\nOutside of Go-Ethereum, the issue is most likely relevant for all forks of Geth (such as TurboGeth or ETC’s core-geth) which is built with versions of Go which contains the vulnerability.",
- "links": [
- "https://blog.ethereum.org/2020/11/12/geth_security_release/",
- "https://groups.google.com/g/golang-announce/c/NpBGTTmKzpM",
- "https://github.com/golang/go/issues/42552",
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-m6gx-rhvj-fh52"
- ],
- "introduced": "v0.0.0",
- "fixed": "v1.9.24",
- "published": "2020-11-12",
- "severity": "Critical",
- "CVE": "CVE-2020-28362",
- "check": "Geth.*\\/go1\\.(11(.*)|12(.*)|13(.*)|14|14\\.(\\d|10|11|)|15|15\\.[0-4])$"
- },
- {
- "name": "ShallowCopy",
- "uid": "GETH-2020-03",
- "summary": "A consensus flaw in Geth, related to `datacopy` precompile",
- "description": "Geth erroneously performed a 'shallow' copy when the precompiled `datacopy` (at `0x00...04`) was invoked. An attacker could deploy a contract that uses the shallow copy to corrupt the contents of the `RETURNDATA`, thus causing a consensus failure.",
- "links": [
- "https://blog.ethereum.org/2020/11/12/geth_security_release/",
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-69v6-xc2j-r2jf"
- ],
- "introduced": "v1.9.7",
- "fixed": "v1.9.17",
- "published": "2020-11-12",
- "severity": "Critical",
- "CVE": "CVE-2020-26241",
- "check": "Geth\\/v1\\.9\\.(7|8|9|10|11|12|13|14|15|16).*$"
- },
- {
- "name": "Geth DoS via MULMOD",
- "uid": "GETH-2020-04",
- "summary": "A denial-of-service issue can be used to crash Geth nodes during block processing",
- "description": "Affected versions suffer from a vulnerability which can be exploited through the `MULMOD` operation, by specifying a modulo of `0`: `mulmod(a,b,0)`, causing a `panic` in the underlying library. \nThe crash was in the `uint256` library, where a buffer [underflowed](https://github.com/holiman/uint256/blob/4ce82e695c10ddad57215bdbeafb68b8c5df2c30/uint256.go#L442).\n\n\tif `d == 0`, `dLen` remains `0`\n\nand https://github.com/holiman/uint256/blob/4ce82e695c10ddad57215bdbeafb68b8c5df2c30/uint256.go#L451 will try to access index `[-1]`.\n\nThe `uint256` library was first merged in this [commit](https://github.com/ethereum/go-ethereum/commit/cf6674539c589f80031f3371a71c6a80addbe454), on 2020-06-08. \nExploiting this vulnerabilty would cause all vulnerable nodes to drop off the network. \n\nThe issue was brought to our attention through a [bug report](https://github.com/ethereum/go-ethereum/issues/21367), showing a `panic` occurring on sync from genesis on the Ropsten network.\n \nIt was estimated that the least obvious way to fix this would be to merge the fix into `uint256`, make a new release of that library and then update the geth-dependency.\n",
- "links": [
- "https://blog.ethereum.org/2020/11/12/geth_security_release/",
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-jm5c-rv3w-w83m",
- "https://github.com/holiman/uint256/releases/tag/v1.1.1",
- "https://github.com/holiman/uint256/pull/80",
- "https://github.com/ethereum/go-ethereum/pull/21368"
- ],
- "introduced": "v1.9.16",
- "fixed": "v1.9.18",
- "published": "2020-11-12",
- "severity": "Critical",
- "CVE": "CVE-2020-26242",
- "check": "Geth\\/v1\\.9.(16|17).*$"
- },
- {
- "name": "LES Server DoS via GetProofsV2",
- "uid": "GETH-2020-05",
- "summary": "A DoS vulnerability can make a LES server crash.",
- "description": "A DoS vulnerability can make a LES server crash via malicious GetProofsV2 request from a connected LES client.\n\nThe vulnerability was patched in #21896.\n\nThis vulnerability only concern users explicitly running geth as a light server",
- "links": [
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-r33q-22hv-j29q",
- "https://github.com/ethereum/go-ethereum/pull/21896"
- ],
- "introduced": "v1.8.0",
- "fixed": "v1.9.25",
- "published": "2020-12-10",
- "severity": "Medium",
- "CVE": "CVE-2020-26264",
- "check": "(Geth\\/v1\\.8\\.*)|(Geth\\/v1\\.9\\.\\d-.*)|(Geth\\/v1\\.9\\.1\\d-.*)|(Geth\\/v1\\.9\\.(20|21|22|23|24)-.*)$"
- },
- {
- "name": "SELFDESTRUCT-recreate consensus flaw",
- "uid": "GETH-2020-06",
- "introduced": "v1.9.4",
- "fixed": "v1.9.20",
- "summary": "A consensus-vulnerability in Geth could cause a chain split, where vulnerable versions refuse to accept the canonical chain.",
- "description": "A flaw was repoted at 2020-08-11 by John Youngseok Yang (Software Platform Lab), where a particular sequence of transactions could cause a consensus failure.\n\n- Tx 1:\n - `sender` invokes `caller`.\n - `caller` invokes `0xaa`. `0xaa` has 3 wei, does a self-destruct-to-self\n - `caller` does a `1 wei` -call to `0xaa`, who thereby has 1 wei (the code in `0xaa` still executed, since the tx is still ongoing, but doesn't redo the selfdestruct, it takes a different path if callvalue is non-zero)\n\n-Tx 2:\n - `sender` does a 5-wei call to 0xaa. No exec (since no code). \n\nIn geth, the result would be that `0xaa` had `6 wei`, whereas OE reported (correctly) `5` wei. Furthermore, in geth, if the second tx was not executed, the `0xaa` would be destructed, resulting in `0 wei`. Thus obviously wrong. \n\nIt was determined that the root cause was this [commit](https://github.com/ethereum/go-ethereum/commit/223b950944f494a5b4e0957fd9f92c48b09037ad) from [this PR](https://github.com/ethereum/go-ethereum/pull/19953). The semantics of `createObject` was subtly changd, into returning a non-nil object (with `deleted=true`) where it previously did not if the account had been destructed. This return value caused the new object to inherit the old `balance`.\n",
- "links": [
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-xw37-57qp-9mm4"
- ],
- "published": "2020-12-10",
- "severity": "High",
- "CVE": "CVE-2020-26265",
- "check": "(Geth\\/v1\\.9\\.(4|5|6|7|8|9)-.*)|(Geth\\/v1\\.9\\.1\\d-.*)$"
- },
- {
- "name": "Not ready for London upgrade",
- "uid": "GETH-2021-01",
- "summary": "The client is not ready for the 'London' technical upgrade, and will deviate from the canonical chain when the London upgrade occurs (at block '12965000' around August 4, 2021.",
- "description": "At (or around) August 4, Ethereum will undergo a technical upgrade called 'London'. Clients not upgraded will fail to progress on the canonical chain.",
- "links": [
- "https://github.com/ethereum/eth1.0-specs/blob/master/network-upgrades/mainnet-upgrades/london.md",
- "https://notes.ethereum.org/@timbeiko/ropsten-postmortem"
- ],
- "introduced": "v1.10.1",
- "fixed": "v1.10.6",
- "published": "2021-07-22",
- "severity": "High",
- "check": "(Geth\\/v1\\.10\\.(1|2|3|4|5)-.*)$"
- },
- {
- "name": "RETURNDATA corruption via datacopy",
- "uid": "GETH-2021-02",
- "summary": "A consensus-flaw in the Geth EVM could cause a node to deviate from the canonical chain.",
- "description": "A memory-corruption bug within the EVM can cause a consensus error, where vulnerable nodes obtain a different `stateRoot` when processing a maliciously crafted transaction. This, in turn, would lead to the chain being split: mainnet splitting in two forks.\n\nAll Geth versions supporting the London hard fork are vulnerable (the bug is older than London), so all users should update.\n\nThis bug was exploited on Mainnet at block 13107518.\n\nCredits for the discovery go to @guidovranken (working for Sentnl during an audit of the Telos EVM) and reported via bounty@ethereum.org.",
- "links": [
- "https://github.com/ethereum/go-ethereum/blob/master/docs/postmortems/2021-08-22-split-postmortem.md",
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-9856-9gg9-qcmq",
- "https://github.com/ethereum/go-ethereum/releases/tag/v1.10.8"
- ],
- "introduced": "v1.10.0",
- "fixed": "v1.10.8",
- "published": "2021-08-24",
- "severity": "High",
- "CVE": "CVE-2021-39137",
- "check": "(Geth\\/v1\\.10\\.(0|1|2|3|4|5|6|7)-.*)$"
- },
- {
- "name": "DoS via malicious `snap/1` request",
- "uid": "GETH-2021-03",
- "summary": "A vulnerable node is susceptible to crash when processing a maliciously crafted message from a peer, via the snap/1 protocol. The crash can be triggered by sending a malicious snap/1 GetTrieNodes package.",
- "description": "The `snap/1` protocol handler contains two vulnerabilities related to the `GetTrieNodes` packet, which can be exploited to crash the node. Full details are available at the Github security [advisory](https://github.com/ethereum/go-ethereum/security/advisories/GHSA-59hh-656j-3p7v)",
- "links": [
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-59hh-656j-3p7v",
- "https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities",
- "https://github.com/ethereum/go-ethereum/pull/23657"
- ],
- "introduced": "v1.10.0",
- "fixed": "v1.10.9",
- "published": "2021-10-24",
- "severity": "Medium",
- "CVE": "CVE-2021-41173",
- "check": "(Geth\\/v1\\.10\\.(0|1|2|3|4|5|6|7|8)-.*)$"
- },
- {
- "name": "DoS via malicious p2p message",
- "uid": "GETH-2022-01",
- "summary": "A vulnerable node can crash via p2p messages sent from an attacker node, if running with non-default log options.",
- "description": "A vulnerable node, if configured to use high verbosity logging, can be made to crash when handling specially crafted p2p messages sent from an attacker node. Full details are available at the Github security [advisory](https://github.com/ethereum/go-ethereum/security/advisories/GHSA-wjxw-gh3m-7pm5)",
- "links": [
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-wjxw-gh3m-7pm5",
- "https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities",
- "https://github.com/ethereum/go-ethereum/pull/24507"
- ],
- "introduced": "v1.10.0",
- "fixed": "v1.10.17",
- "published": "2022-05-11",
- "severity": "Low",
- "CVE": "CVE-2022-29177",
- "check": "(Geth\\/v1\\.10\\.(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16)-.*)$"
- }
-]
diff --git a/cmd/geth/testdata/wrong-passwords.txt b/cmd/geth/testdata/wrong-passwords.txt
deleted file mode 100644
index 7d1e338bbf..0000000000
--- a/cmd/geth/testdata/wrong-passwords.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-wrong
-wrong
-wrong
diff --git a/cmd/geth/verkle.go b/cmd/geth/verkle.go
deleted file mode 100644
index 420b063d8b..0000000000
--- a/cmd/geth/verkle.go
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright 2022 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "bytes"
- "encoding/hex"
- "errors"
- "fmt"
- "os"
-
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
- "github.com/gballet/go-verkle"
- cli "github.com/urfave/cli/v2"
-)
-
-var (
- zero [32]byte
-
- verkleCommand = &cli.Command{
- Name: "verkle",
- Usage: "A set of experimental verkle tree management commands",
- Description: "",
- Subcommands: []*cli.Command{
- {
- Name: "verify",
- Usage: "verify the conversion of a MPT into a verkle tree",
- ArgsUsage: "",
- Action: verifyVerkle,
- Flags: flags.Merge(utils.NetworkFlags, utils.DatabaseFlags),
- Description: `
-geth verkle verify
-This command takes a root commitment and attempts to rebuild the tree.
- `,
- },
- {
- Name: "dump",
- Usage: "Dump a verkle tree to a DOT file",
- ArgsUsage: " [ ...]",
- Action: expandVerkle,
- Flags: flags.Merge(utils.NetworkFlags, utils.DatabaseFlags),
- Description: `
-geth verkle dump [ ...]
-This command will produce a dot file representing the tree, rooted at .
-in which key1, key2, ... are expanded.
- `,
- },
- },
- }
-)
-
-// recurse into each child to ensure they can be loaded from the db. The tree isn't rebuilt
-// (only its nodes are loaded) so there is no need to flush them, the garbage collector should
-// take care of that for us.
-func checkChildren(root verkle.VerkleNode, resolver verkle.NodeResolverFn) error {
- switch node := root.(type) {
- case *verkle.InternalNode:
- for i, child := range node.Children() {
- childC := child.Commit().Bytes()
-
- childS, err := resolver(childC[:])
- if bytes.Equal(childC[:], zero[:]) {
- continue
- }
- if err != nil {
- return fmt.Errorf("could not find child %x in db: %w", childC, err)
- }
- // depth is set to 0, the tree isn't rebuilt so it's not a problem
- childN, err := verkle.ParseNode(childS, 0)
- if err != nil {
- return fmt.Errorf("decode error child %x in db: %w", child.Commitment().Bytes(), err)
- }
- if err := checkChildren(childN, resolver); err != nil {
- return fmt.Errorf("%x%w", i, err) // write the path to the erroring node
- }
- }
- case *verkle.LeafNode:
- // sanity check: ensure at least one value is non-zero
-
- for i := 0; i < verkle.NodeWidth; i++ {
- if len(node.Value(i)) != 0 {
- return nil
- }
- }
- return errors.New("both balance and nonce are 0")
- case verkle.Empty:
- // nothing to do
- default:
- return fmt.Errorf("unsupported type encountered %v", root)
- }
-
- return nil
-}
-
-func verifyVerkle(ctx *cli.Context) error {
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- chaindb := utils.MakeChainDatabase(ctx, stack, true)
- defer chaindb.Close()
- headBlock := rawdb.ReadHeadBlock(chaindb)
- if headBlock == nil {
- log.Error("Failed to load head block")
- return errors.New("no head block")
- }
- if ctx.NArg() > 1 {
- log.Error("Too many arguments given")
- return errors.New("too many arguments")
- }
- var (
- rootC common.Hash
- err error
- )
- if ctx.NArg() == 1 {
- rootC, err = parseRoot(ctx.Args().First())
- if err != nil {
- log.Error("Failed to resolve state root", "error", err)
- return err
- }
- log.Info("Rebuilding the tree", "root", rootC)
- } else {
- rootC = headBlock.Root()
- log.Info("Rebuilding the tree", "root", rootC, "number", headBlock.NumberU64())
- }
-
- serializedRoot, err := chaindb.Get(rootC[:])
- if err != nil {
- return err
- }
- root, err := verkle.ParseNode(serializedRoot, 0)
- if err != nil {
- return err
- }
-
- if err := checkChildren(root, chaindb.Get); err != nil {
- log.Error("Could not rebuild the tree from the database", "err", err)
- return err
- }
-
- log.Info("Tree was rebuilt from the database")
- return nil
-}
-
-func expandVerkle(ctx *cli.Context) error {
- stack, _ := makeConfigNode(ctx)
- defer stack.Close()
-
- chaindb := utils.MakeChainDatabase(ctx, stack, true)
- defer chaindb.Close()
- var (
- rootC common.Hash
- keylist [][]byte
- err error
- )
- if ctx.NArg() >= 2 {
- rootC, err = parseRoot(ctx.Args().First())
- if err != nil {
- log.Error("Failed to resolve state root", "error", err)
- return err
- }
- keylist = make([][]byte, 0, ctx.Args().Len()-1)
- args := ctx.Args().Slice()
- for i := range args[1:] {
- key, err := hex.DecodeString(args[i+1])
- log.Info("decoded key", "arg", args[i+1], "key", key)
- if err != nil {
- return fmt.Errorf("error decoding key #%d: %w", i+1, err)
- }
- keylist = append(keylist, key)
- }
- log.Info("Rebuilding the tree", "root", rootC)
- } else {
- return fmt.Errorf("usage: %s root key1 [key 2...]", ctx.App.Name)
- }
-
- serializedRoot, err := chaindb.Get(rootC[:])
- if err != nil {
- return err
- }
- root, err := verkle.ParseNode(serializedRoot, 0)
- if err != nil {
- return err
- }
-
- for i, key := range keylist {
- log.Info("Reading key", "index", i, "key", keylist[0])
- root.Get(key, chaindb.Get)
- }
-
- if err := os.WriteFile("dump.dot", []byte(verkle.ToDot(root)), 0600); err != nil {
- log.Error("Failed to dump file", "err", err)
- } else {
- log.Info("Tree was dumped to file", "file", "dump.dot")
- }
- return nil
-}
diff --git a/cmd/geth/version_check.go b/cmd/geth/version_check.go
deleted file mode 100644
index 237556788e..0000000000
--- a/cmd/geth/version_check.go
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "encoding/json"
- "errors"
- "fmt"
- "io"
- "net/http"
- "os"
- "regexp"
- "strings"
-
- "github.com/ethereum/go-ethereum/log"
- "github.com/jedisct1/go-minisign"
- "github.com/urfave/cli/v2"
-)
-
-var gethPubKeys []string = []string{
- //@holiman, minisign public key FB1D084D39BAEC24
- "RWQk7Lo5TQgd+wxBNZM+Zoy+7UhhMHaWKzqoes9tvSbFLJYZhNTbrIjx",
- //minisign public key 138B1CA303E51687
- "RWSHFuUDoxyLEzjszuWZI1xStS66QTyXFFZG18uDfO26CuCsbckX1e9J",
- //minisign public key FD9813B2D2098484
- "RWSEhAnSshOY/b+GmaiDkObbCWefsAoavjoLcPjBo1xn71yuOH5I+Lts",
-}
-
-type vulnJson struct {
- Name string
- Uid string
- Summary string
- Description string
- Links []string
- Introduced string
- Fixed string
- Published string
- Severity string
- Check string
- CVE string
-}
-
-func versionCheck(ctx *cli.Context) error {
- url := ctx.String(VersionCheckUrlFlag.Name)
- version := ctx.String(VersionCheckVersionFlag.Name)
- log.Info("Checking vulnerabilities", "version", version, "url", url)
- return checkCurrent(url, version)
-}
-
-func checkCurrent(url, current string) error {
- var (
- data []byte
- sig []byte
- err error
- )
- if data, err = fetch(url); err != nil {
- return fmt.Errorf("could not retrieve data: %w", err)
- }
- if sig, err = fetch(fmt.Sprintf("%v.minisig", url)); err != nil {
- return fmt.Errorf("could not retrieve signature: %w", err)
- }
- if err = verifySignature(gethPubKeys, data, sig); err != nil {
- return err
- }
- var vulns []vulnJson
- if err = json.Unmarshal(data, &vulns); err != nil {
- return err
- }
- allOk := true
- for _, vuln := range vulns {
- r, err := regexp.Compile(vuln.Check)
- if err != nil {
- return err
- }
- if r.MatchString(current) {
- allOk = false
- fmt.Printf("## Vulnerable to %v (%v)\n\n", vuln.Uid, vuln.Name)
- fmt.Printf("Severity: %v\n", vuln.Severity)
- fmt.Printf("Summary : %v\n", vuln.Summary)
- fmt.Printf("Fixed in: %v\n", vuln.Fixed)
- if len(vuln.CVE) > 0 {
- fmt.Printf("CVE: %v\n", vuln.CVE)
- }
- if len(vuln.Links) > 0 {
- fmt.Printf("References:\n")
- for _, ref := range vuln.Links {
- fmt.Printf("\t- %v\n", ref)
- }
- }
- fmt.Println()
- }
- }
- if allOk {
- fmt.Println("No vulnerabilities found")
- }
- return nil
-}
-
-// fetch makes an HTTP request to the given url and returns the response body
-func fetch(url string) ([]byte, error) {
- if filep := strings.TrimPrefix(url, "file://"); filep != url {
- return os.ReadFile(filep)
- }
- res, err := http.Get(url)
- if err != nil {
- return nil, err
- }
- defer res.Body.Close()
- body, err := io.ReadAll(res.Body)
- if err != nil {
- return nil, err
- }
- return body, nil
-}
-
-// verifySignature checks that the sigData is a valid signature of the given
-// data, for pubkey GethPubkey
-func verifySignature(pubkeys []string, data, sigdata []byte) error {
- sig, err := minisign.DecodeSignature(string(sigdata))
- if err != nil {
- return err
- }
- // find the used key
- var key *minisign.PublicKey
- for _, pubkey := range pubkeys {
- pub, err := minisign.NewPublicKey(pubkey)
- if err != nil {
- // our pubkeys should be parseable
- return err
- }
- if pub.KeyId != sig.KeyId {
- continue
- }
- key = &pub
- break
- }
- if key == nil {
- log.Info("Signing key not trusted", "keyid", keyID(sig.KeyId), "error", err)
- return errors.New("signature could not be verified")
- }
- if ok, err := key.Verify(data, sig); !ok || err != nil {
- log.Info("Verification failed error", "keyid", keyID(key.KeyId), "error", err)
- return errors.New("signature could not be verified")
- }
- return nil
-}
-
-// keyID turns a binary minisign key ID into a hex string.
-// Note: key IDs are printed in reverse byte order.
-func keyID(id [8]byte) string {
- var rev [8]byte
- for i := range id {
- rev[len(rev)-1-i] = id[i]
- }
- return fmt.Sprintf("%X", rev)
-}
diff --git a/cmd/geth/version_check_test.go b/cmd/geth/version_check_test.go
deleted file mode 100644
index 3676d25d00..0000000000
--- a/cmd/geth/version_check_test.go
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "encoding/json"
- "fmt"
- "os"
- "path/filepath"
- "regexp"
- "strconv"
- "strings"
- "testing"
-
- "github.com/jedisct1/go-minisign"
-)
-
-func TestVerification(t *testing.T) {
- t.Parallel()
- // Signatures generated with `minisign`. Legacy format, not pre-hashed file.
- t.Run("minisig-legacy", func(t *testing.T) {
- t.Parallel()
- // For this test, the pubkey is in testdata/vcheck/minisign.pub
- // (the privkey is `minisign.sec`, if we want to expand this test. Password 'test' )
- pub := "RWQkliYstQBOKOdtClfgC3IypIPX6TAmoEi7beZ4gyR3wsaezvqOMWsp"
- testVerification(t, pub, "./testdata/vcheck/minisig-sigs/")
- })
- t.Run("minisig-new", func(t *testing.T) {
- t.Parallel()
- // For this test, the pubkey is in testdata/vcheck/minisign.pub
- // (the privkey is `minisign.sec`, if we want to expand this test. Password 'test' )
- // `minisign -S -s ./minisign.sec -m data.json -x ./minisig-sigs-new/data.json.minisig`
- pub := "RWQkliYstQBOKOdtClfgC3IypIPX6TAmoEi7beZ4gyR3wsaezvqOMWsp"
- testVerification(t, pub, "./testdata/vcheck/minisig-sigs-new/")
- })
- // Signatures generated with `signify-openbsd`
- t.Run("signify-openbsd", func(t *testing.T) {
- t.Parallel()
- t.Skip("This currently fails, minisign expects 4 lines of data, signify provides only 2")
- // For this test, the pubkey is in testdata/vcheck/signifykey.pub
- // (the privkey is `signifykey.sec`, if we want to expand this test. Password 'test' )
- pub := "RWSKLNhZb0KdATtRT7mZC/bybI3t3+Hv/O2i3ye04Dq9fnT9slpZ1a2/"
- testVerification(t, pub, "./testdata/vcheck/signify-sigs/")
- })
-}
-
-func testVerification(t *testing.T, pubkey, sigdir string) {
- // Data to verify
- data, err := os.ReadFile("./testdata/vcheck/data.json")
- if err != nil {
- t.Fatal(err)
- }
- // Signatures, with and without comments, both trusted and untrusted
- files, err := os.ReadDir(sigdir)
- if err != nil {
- t.Fatal(err)
- }
- if len(files) == 0 {
- t.Fatal("Missing tests")
- }
- for _, f := range files {
- sig, err := os.ReadFile(filepath.Join(sigdir, f.Name()))
- if err != nil {
- t.Fatal(err)
- }
- err = verifySignature([]string{pubkey}, data, sig)
- if err != nil {
- t.Fatal(err)
- }
- }
-}
-
-func versionUint(v string) int {
- mustInt := func(s string) int {
- a, err := strconv.Atoi(s)
- if err != nil {
- panic(v)
- }
- return a
- }
- components := strings.Split(strings.TrimPrefix(v, "v"), ".")
- a := mustInt(components[0])
- b := mustInt(components[1])
- c := mustInt(components[2])
- return a*100*100 + b*100 + c
-}
-
-// TestMatching can be used to check that the regexps are correct
-func TestMatching(t *testing.T) {
- t.Parallel()
- data, _ := os.ReadFile("./testdata/vcheck/vulnerabilities.json")
- var vulns []vulnJson
- if err := json.Unmarshal(data, &vulns); err != nil {
- t.Fatal(err)
- }
- check := func(version string) {
- vFull := fmt.Sprintf("Geth/%v-unstable-15339cf1-20201204/linux-amd64/go1.15.4", version)
- for _, vuln := range vulns {
- r, err := regexp.Compile(vuln.Check)
- vulnIntro := versionUint(vuln.Introduced)
- vulnFixed := versionUint(vuln.Fixed)
- current := versionUint(version)
- if err != nil {
- t.Fatal(err)
- }
- if vuln.Name == "Denial of service due to Go CVE-2020-28362" {
- // this one is not tied to geth-versions
- continue
- }
- if vulnIntro <= current && vulnFixed > current {
- // Should be vulnerable
- if !r.MatchString(vFull) {
- t.Errorf("Should be vulnerable, version %v, intro: %v, fixed: %v %v %v",
- version, vuln.Introduced, vuln.Fixed, vuln.Name, vuln.Check)
- }
- } else {
- if r.MatchString(vFull) {
- t.Errorf("Should not be flagged vulnerable, version %v, intro: %v, fixed: %v %v %d %d %d",
- version, vuln.Introduced, vuln.Fixed, vuln.Name, vulnIntro, current, vulnFixed)
- }
- }
- }
- }
- for major := 1; major < 2; major++ {
- for minor := 0; minor < 30; minor++ {
- for patch := 0; patch < 30; patch++ {
- vShort := fmt.Sprintf("v%d.%d.%d", major, minor, patch)
- check(vShort)
- }
- }
- }
-}
-
-func TestGethPubKeysParseable(t *testing.T) {
- t.Parallel()
- for _, pubkey := range gethPubKeys {
- _, err := minisign.NewPublicKey(pubkey)
- if err != nil {
- t.Errorf("Should be parseable")
- }
- }
-}
-
-func TestKeyID(t *testing.T) {
- t.Parallel()
- type args struct {
- id [8]byte
- }
- tests := []struct {
- name string
- args args
- want string
- }{
- {"@holiman key", args{id: extractKeyId(gethPubKeys[0])}, "FB1D084D39BAEC24"},
- {"second key", args{id: extractKeyId(gethPubKeys[1])}, "138B1CA303E51687"},
- {"third key", args{id: extractKeyId(gethPubKeys[2])}, "FD9813B2D2098484"},
- }
- for _, tt := range tests {
- tt := tt
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- if got := keyID(tt.args.id); got != tt.want {
- t.Errorf("keyID() = %v, want %v", got, tt.want)
- }
- })
- }
-}
-
-func extractKeyId(pubkey string) [8]byte {
- p, _ := minisign.NewPublicKey(pubkey)
- return p.KeyId
-}
diff --git a/cmd/p2psim/main.go b/cmd/p2psim/main.go
deleted file mode 100644
index a0f5f0d288..0000000000
--- a/cmd/p2psim/main.go
+++ /dev/null
@@ -1,443 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-// p2psim provides a command-line client for a simulation HTTP API.
-//
-// Here is an example of creating a 2 node network with the first node
-// connected to the second:
-//
-// $ p2psim node create
-// Created node01
-//
-// $ p2psim node start node01
-// Started node01
-//
-// $ p2psim node create
-// Created node02
-//
-// $ p2psim node start node02
-// Started node02
-//
-// $ p2psim node connect node01 node02
-// Connected node01 to node02
-package main
-
-import (
- "context"
- "encoding/json"
- "fmt"
- "io"
- "os"
- "strings"
- "text/tabwriter"
-
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/simulations"
- "github.com/ethereum/go-ethereum/p2p/simulations/adapters"
- "github.com/ethereum/go-ethereum/rpc"
- "github.com/urfave/cli/v2"
-)
-
-var client *simulations.Client
-
-var (
- // global command flags
- apiFlag = &cli.StringFlag{
- Name: "api",
- Value: "http://localhost:8888",
- Usage: "simulation API URL",
- EnvVars: []string{"P2PSIM_API_URL"},
- }
-
- // events subcommand flags
- currentFlag = &cli.BoolFlag{
- Name: "current",
- Usage: "get existing nodes and conns first",
- }
- filterFlag = &cli.StringFlag{
- Name: "filter",
- Value: "",
- Usage: "message filter",
- }
-
- // node create subcommand flags
- nameFlag = &cli.StringFlag{
- Name: "name",
- Value: "",
- Usage: "node name",
- }
- servicesFlag = &cli.StringFlag{
- Name: "services",
- Value: "",
- Usage: "node services (comma separated)",
- }
- keyFlag = &cli.StringFlag{
- Name: "key",
- Value: "",
- Usage: "node private key (hex encoded)",
- }
-
- // node rpc subcommand flags
- subscribeFlag = &cli.BoolFlag{
- Name: "subscribe",
- Usage: "method is a subscription",
- }
-)
-
-func main() {
- app := flags.NewApp("devp2p simulation command-line client")
- app.Flags = []cli.Flag{
- apiFlag,
- }
- app.Before = func(ctx *cli.Context) error {
- client = simulations.NewClient(ctx.String(apiFlag.Name))
- return nil
- }
- app.Commands = []*cli.Command{
- {
- Name: "show",
- Usage: "show network information",
- Action: showNetwork,
- },
- {
- Name: "events",
- Usage: "stream network events",
- Action: streamNetwork,
- Flags: []cli.Flag{
- currentFlag,
- filterFlag,
- },
- },
- {
- Name: "snapshot",
- Usage: "create a network snapshot to stdout",
- Action: createSnapshot,
- },
- {
- Name: "load",
- Usage: "load a network snapshot from stdin",
- Action: loadSnapshot,
- },
- {
- Name: "node",
- Usage: "manage simulation nodes",
- Action: listNodes,
- Subcommands: []*cli.Command{
- {
- Name: "list",
- Usage: "list nodes",
- Action: listNodes,
- },
- {
- Name: "create",
- Usage: "create a node",
- Action: createNode,
- Flags: []cli.Flag{
- nameFlag,
- servicesFlag,
- keyFlag,
- },
- },
- {
- Name: "show",
- ArgsUsage: "",
- Usage: "show node information",
- Action: showNode,
- },
- {
- Name: "start",
- ArgsUsage: "",
- Usage: "start a node",
- Action: startNode,
- },
- {
- Name: "stop",
- ArgsUsage: "",
- Usage: "stop a node",
- Action: stopNode,
- },
- {
- Name: "connect",
- ArgsUsage: " ",
- Usage: "connect a node to a peer node",
- Action: connectNode,
- },
- {
- Name: "disconnect",
- ArgsUsage: " ",
- Usage: "disconnect a node from a peer node",
- Action: disconnectNode,
- },
- {
- Name: "rpc",
- ArgsUsage: " []",
- Usage: "call a node RPC method",
- Action: rpcNode,
- Flags: []cli.Flag{
- subscribeFlag,
- },
- },
- },
- },
- }
- if err := app.Run(os.Args); err != nil {
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
- }
-}
-
-func showNetwork(ctx *cli.Context) error {
- if ctx.NArg() != 0 {
- return cli.ShowCommandHelp(ctx, ctx.Command.Name)
- }
- network, err := client.GetNetwork()
- if err != nil {
- return err
- }
- w := tabwriter.NewWriter(ctx.App.Writer, 1, 2, 2, ' ', 0)
- defer w.Flush()
- fmt.Fprintf(w, "NODES\t%d\n", len(network.Nodes))
- fmt.Fprintf(w, "CONNS\t%d\n", len(network.Conns))
- return nil
-}
-
-func streamNetwork(ctx *cli.Context) error {
- if ctx.NArg() != 0 {
- return cli.ShowCommandHelp(ctx, ctx.Command.Name)
- }
- events := make(chan *simulations.Event)
- sub, err := client.SubscribeNetwork(events, simulations.SubscribeOpts{
- Current: ctx.Bool(currentFlag.Name),
- Filter: ctx.String(filterFlag.Name),
- })
- if err != nil {
- return err
- }
- defer sub.Unsubscribe()
- enc := json.NewEncoder(ctx.App.Writer)
- for {
- select {
- case event := <-events:
- if err := enc.Encode(event); err != nil {
- return err
- }
- case err := <-sub.Err():
- return err
- }
- }
-}
-
-func createSnapshot(ctx *cli.Context) error {
- if ctx.NArg() != 0 {
- return cli.ShowCommandHelp(ctx, ctx.Command.Name)
- }
- snap, err := client.CreateSnapshot()
- if err != nil {
- return err
- }
- return json.NewEncoder(os.Stdout).Encode(snap)
-}
-
-func loadSnapshot(ctx *cli.Context) error {
- if ctx.NArg() != 0 {
- return cli.ShowCommandHelp(ctx, ctx.Command.Name)
- }
- snap := &simulations.Snapshot{}
- if err := json.NewDecoder(os.Stdin).Decode(snap); err != nil {
- return err
- }
- return client.LoadSnapshot(snap)
-}
-
-func listNodes(ctx *cli.Context) error {
- if ctx.NArg() != 0 {
- return cli.ShowCommandHelp(ctx, ctx.Command.Name)
- }
- nodes, err := client.GetNodes()
- if err != nil {
- return err
- }
- w := tabwriter.NewWriter(ctx.App.Writer, 1, 2, 2, ' ', 0)
- defer w.Flush()
- fmt.Fprintf(w, "NAME\tPROTOCOLS\tID\n")
- for _, node := range nodes {
- fmt.Fprintf(w, "%s\t%s\t%s\n", node.Name, strings.Join(protocolList(node), ","), node.ID)
- }
- return nil
-}
-
-func protocolList(node *p2p.NodeInfo) []string {
- protos := make([]string, 0, len(node.Protocols))
- for name := range node.Protocols {
- protos = append(protos, name)
- }
- return protos
-}
-
-func createNode(ctx *cli.Context) error {
- if ctx.NArg() != 0 {
- return cli.ShowCommandHelp(ctx, ctx.Command.Name)
- }
- config := adapters.RandomNodeConfig()
- config.Name = ctx.String(nameFlag.Name)
- if key := ctx.String(keyFlag.Name); key != "" {
- privKey, err := crypto.HexToECDSA(key)
- if err != nil {
- return err
- }
- config.ID = enode.PubkeyToIDV4(&privKey.PublicKey)
- config.PrivateKey = privKey
- }
- if services := ctx.String(servicesFlag.Name); services != "" {
- config.Lifecycles = strings.Split(services, ",")
- }
- node, err := client.CreateNode(config)
- if err != nil {
- return err
- }
- fmt.Fprintln(ctx.App.Writer, "Created", node.Name)
- return nil
-}
-
-func showNode(ctx *cli.Context) error {
- if ctx.NArg() != 1 {
- return cli.ShowCommandHelp(ctx, ctx.Command.Name)
- }
- nodeName := ctx.Args().First()
- node, err := client.GetNode(nodeName)
- if err != nil {
- return err
- }
- w := tabwriter.NewWriter(ctx.App.Writer, 1, 2, 2, ' ', 0)
- defer w.Flush()
- fmt.Fprintf(w, "NAME\t%s\n", node.Name)
- fmt.Fprintf(w, "PROTOCOLS\t%s\n", strings.Join(protocolList(node), ","))
- fmt.Fprintf(w, "ID\t%s\n", node.ID)
- fmt.Fprintf(w, "ENODE\t%s\n", node.Enode)
- for name, proto := range node.Protocols {
- fmt.Fprintln(w)
- fmt.Fprintf(w, "--- PROTOCOL INFO: %s\n", name)
- fmt.Fprintf(w, "%v\n", proto)
- fmt.Fprintf(w, "---\n")
- }
- return nil
-}
-
-func startNode(ctx *cli.Context) error {
- if ctx.NArg() != 1 {
- return cli.ShowCommandHelp(ctx, ctx.Command.Name)
- }
- nodeName := ctx.Args().First()
- if err := client.StartNode(nodeName); err != nil {
- return err
- }
- fmt.Fprintln(ctx.App.Writer, "Started", nodeName)
- return nil
-}
-
-func stopNode(ctx *cli.Context) error {
- if ctx.NArg() != 1 {
- return cli.ShowCommandHelp(ctx, ctx.Command.Name)
- }
- nodeName := ctx.Args().First()
- if err := client.StopNode(nodeName); err != nil {
- return err
- }
- fmt.Fprintln(ctx.App.Writer, "Stopped", nodeName)
- return nil
-}
-
-func connectNode(ctx *cli.Context) error {
- if ctx.NArg() != 2 {
- return cli.ShowCommandHelp(ctx, ctx.Command.Name)
- }
- args := ctx.Args()
- nodeName := args.Get(0)
- peerName := args.Get(1)
- if err := client.ConnectNode(nodeName, peerName); err != nil {
- return err
- }
- fmt.Fprintln(ctx.App.Writer, "Connected", nodeName, "to", peerName)
- return nil
-}
-
-func disconnectNode(ctx *cli.Context) error {
- args := ctx.Args()
- if args.Len() != 2 {
- return cli.ShowCommandHelp(ctx, ctx.Command.Name)
- }
- nodeName := args.Get(0)
- peerName := args.Get(1)
- if err := client.DisconnectNode(nodeName, peerName); err != nil {
- return err
- }
- fmt.Fprintln(ctx.App.Writer, "Disconnected", nodeName, "from", peerName)
- return nil
-}
-
-func rpcNode(ctx *cli.Context) error {
- args := ctx.Args()
- if args.Len() < 2 {
- return cli.ShowCommandHelp(ctx, ctx.Command.Name)
- }
- nodeName := args.Get(0)
- method := args.Get(1)
- rpcClient, err := client.RPCClient(context.Background(), nodeName)
- if err != nil {
- return err
- }
- if ctx.Bool(subscribeFlag.Name) {
- return rpcSubscribe(rpcClient, ctx.App.Writer, method, args.Slice()[3:]...)
- }
- var result interface{}
- params := make([]interface{}, len(args.Slice()[3:]))
- for i, v := range args.Slice()[3:] {
- params[i] = v
- }
- if err := rpcClient.Call(&result, method, params...); err != nil {
- return err
- }
- return json.NewEncoder(ctx.App.Writer).Encode(result)
-}
-
-func rpcSubscribe(client *rpc.Client, out io.Writer, method string, args ...string) error {
- namespace, method, _ := strings.Cut(method, "_")
- ch := make(chan interface{})
- subArgs := make([]interface{}, len(args)+1)
- subArgs[0] = method
- for i, v := range args {
- subArgs[i+1] = v
- }
- sub, err := client.Subscribe(context.Background(), namespace, ch, subArgs...)
- if err != nil {
- return err
- }
- defer sub.Unsubscribe()
- enc := json.NewEncoder(out)
- for {
- select {
- case v := <-ch:
- if err := enc.Encode(v); err != nil {
- return err
- }
- case err := <-sub.Err():
- return err
- }
- }
-}
diff --git a/cmd/rlpdump/main.go b/cmd/rlpdump/main.go
deleted file mode 100644
index 70337749ae..0000000000
--- a/cmd/rlpdump/main.go
+++ /dev/null
@@ -1,210 +0,0 @@
-// Copyright 2015 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-// rlpdump is a pretty-printer for RLP data.
-package main
-
-import (
- "bufio"
- "bytes"
- "container/list"
- "encoding/hex"
- "flag"
- "fmt"
- "io"
- "os"
- "strings"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/rlp"
-)
-
-var (
- hexMode = flag.String("hex", "", "dump given hex data")
- reverseMode = flag.Bool("reverse", false, "convert ASCII to rlp")
- noASCII = flag.Bool("noascii", false, "don't print ASCII strings readably")
- single = flag.Bool("single", false, "print only the first element, discard the rest")
-)
-
-func init() {
- flag.Usage = func() {
- fmt.Fprintln(os.Stderr, "Usage:", os.Args[0], "[-noascii] [-hex ][-reverse] [filename]")
- flag.PrintDefaults()
- fmt.Fprintln(os.Stderr, `
-Dumps RLP data from the given file in readable form.
-If the filename is omitted, data is read from stdin.`)
- }
-}
-
-func main() {
- flag.Parse()
-
- var r io.Reader
- switch {
- case *hexMode != "":
- data, err := hex.DecodeString(strings.TrimPrefix(*hexMode, "0x"))
- if err != nil {
- die(err)
- }
- r = bytes.NewReader(data)
-
- case flag.NArg() == 0:
- r = os.Stdin
-
- case flag.NArg() == 1:
- fd, err := os.Open(flag.Arg(0))
- if err != nil {
- die(err)
- }
- defer fd.Close()
- r = fd
-
- default:
- fmt.Fprintln(os.Stderr, "Error: too many arguments")
- flag.Usage()
- os.Exit(2)
- }
- out := os.Stdout
- if *reverseMode {
- data, err := textToRlp(r)
- if err != nil {
- die(err)
- }
- fmt.Printf("%#x\n", data)
- return
- } else {
- err := rlpToText(r, out)
- if err != nil {
- die(err)
- }
- }
-}
-
-func rlpToText(r io.Reader, out io.Writer) error {
- s := rlp.NewStream(r, 0)
- for {
- if err := dump(s, 0, out); err != nil {
- if err != io.EOF {
- return err
- }
- break
- }
- fmt.Fprintln(out)
- if *single {
- break
- }
- }
- return nil
-}
-
-func dump(s *rlp.Stream, depth int, out io.Writer) error {
- kind, size, err := s.Kind()
- if err != nil {
- return err
- }
- switch kind {
- case rlp.Byte, rlp.String:
- str, err := s.Bytes()
- if err != nil {
- return err
- }
- if len(str) == 0 || !*noASCII && isASCII(str) {
- fmt.Fprintf(out, "%s%q", ws(depth), str)
- } else {
- fmt.Fprintf(out, "%s%x", ws(depth), str)
- }
- case rlp.List:
- s.List()
- defer s.ListEnd()
- if size == 0 {
- fmt.Fprintf(out, ws(depth)+"[]")
- } else {
- fmt.Fprintln(out, ws(depth)+"[")
- for i := 0; ; i++ {
- if i > 0 {
- fmt.Fprint(out, ",\n")
- }
- if err := dump(s, depth+1, out); err == rlp.EOL {
- break
- } else if err != nil {
- return err
- }
- }
- fmt.Fprint(out, ws(depth)+"]")
- }
- }
- return nil
-}
-
-func isASCII(b []byte) bool {
- for _, c := range b {
- if c < 32 || c > 126 {
- return false
- }
- }
- return true
-}
-
-func ws(n int) string {
- return strings.Repeat(" ", n)
-}
-
-func die(args ...interface{}) {
- fmt.Fprintln(os.Stderr, args...)
- os.Exit(1)
-}
-
-// textToRlp converts text into RLP (best effort).
-func textToRlp(r io.Reader) ([]byte, error) {
- // We're expecting the input to be well-formed, meaning that
- // - each element is on a separate line
- // - each line is either an (element OR a list start/end) + comma
- // - an element is either hex-encoded bytes OR a quoted string
- var (
- scanner = bufio.NewScanner(r)
- obj []interface{}
- stack = list.New()
- )
- for scanner.Scan() {
- t := strings.TrimSpace(scanner.Text())
- if len(t) == 0 {
- continue
- }
- switch t {
- case "[": // list start
- stack.PushFront(obj)
- obj = make([]interface{}, 0)
- case "]", "],": // list end
- parent := stack.Remove(stack.Front()).([]interface{})
- obj = append(parent, obj)
- case "[],": // empty list
- obj = append(obj, make([]interface{}, 0))
- default: // element
- data := []byte(t)[:len(t)-1] // cut off comma
- if data[0] == '"' { // ascii string
- data = []byte(t)[1 : len(data)-1]
- } else { // hex data
- data = common.FromHex(string(data))
- }
- obj = append(obj, data)
- }
- }
- if err := scanner.Err(); err != nil {
- return nil, err
- }
- data, err := rlp.EncodeToBytes(obj[0])
- return data, err
-}
diff --git a/cmd/rlpdump/rlpdump_test.go b/cmd/rlpdump/rlpdump_test.go
deleted file mode 100644
index 8d55f4200a..0000000000
--- a/cmd/rlpdump/rlpdump_test.go
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2021 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package main
-
-import (
- "bytes"
- "fmt"
- "strings"
- "testing"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
-)
-
-func TestRoundtrip(t *testing.T) {
- t.Parallel()
- for i, want := range []string{
- "0xf880806482520894d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0a1010000000000000000000000000000000000000000000000000000000000000001801ba0c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549da06180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28",
- "0xd5c0d3cb84746573742a2a808213378667617a6f6e6b",
- "0xc780c0c1c0825208",
- } {
- var out strings.Builder
- err := rlpToText(bytes.NewReader(common.FromHex(want)), &out)
- if err != nil {
- t.Fatal(err)
- }
- text := out.String()
- rlpBytes, err := textToRlp(strings.NewReader(text))
- if err != nil {
- t.Errorf("test %d: error %v", i, err)
- continue
- }
- have := fmt.Sprintf("%#x", rlpBytes)
- if have != want {
- t.Errorf("test %d: have\n%v\nwant:\n%v\n", i, have, want)
- }
- }
-}
-
-func TestTextToRlp(t *testing.T) {
- t.Parallel()
- type tc struct {
- text string
- want string
- }
- cases := []tc{
- {
- text: `[
- "",
- [],
-[
- [],
- ],
- 5208,
-]`,
- want: "0xc780c0c1c0825208",
- },
- }
- for i, tc := range cases {
- have, err := textToRlp(strings.NewReader(tc.text))
- if err != nil {
- t.Errorf("test %d: error %v", i, err)
- continue
- }
- if hexutil.Encode(have) != tc.want {
- t.Errorf("test %d:\nhave %v\nwant %v", i, hexutil.Encode(have), tc.want)
- }
- }
-}
diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go
deleted file mode 100644
index 8b571be1ef..0000000000
--- a/cmd/utils/cmd.go
+++ /dev/null
@@ -1,675 +0,0 @@
-// Copyright 2014 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-// Package utils contains internal helper functions for go-ethereum commands.
-package utils
-
-import (
- "bufio"
- "compress/gzip"
- "errors"
- "fmt"
- "io"
- "os"
- "os/signal"
- "runtime"
- "strings"
- "syscall"
- "time"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state/snapshot"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/eth/ethconfig"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/internal/debug"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/urfave/cli/v2"
-)
-
-const (
- importBatchSize = 2500
-)
-
-// Fatalf formats a message to standard error and exits the program.
-// The message is also printed to standard output if standard error
-// is redirected to a different file.
-func Fatalf(format string, args ...interface{}) {
- w := io.MultiWriter(os.Stdout, os.Stderr)
- if runtime.GOOS == "windows" {
- // The SameFile check below doesn't work on Windows.
- // stdout is unlikely to get redirected though, so just print there.
- w = os.Stdout
- } else {
- outf, _ := os.Stdout.Stat()
- errf, _ := os.Stderr.Stat()
- if outf != nil && errf != nil && os.SameFile(outf, errf) {
- w = os.Stderr
- }
- }
- fmt.Fprintf(w, "Fatal: "+format+"\n", args...)
- os.Exit(1)
-}
-
-func StartNode(ctx *cli.Context, stack *node.Node, isConsole bool) {
- if err := stack.Start(); err != nil {
- Fatalf("Error starting protocol stack: %v", err)
- }
- go func() {
- sigc := make(chan os.Signal, 1)
- signal.Notify(sigc, syscall.SIGINT, syscall.SIGTERM)
- defer signal.Stop(sigc)
-
- minFreeDiskSpace := 2 * ethconfig.Defaults.TrieDirtyCache // Default 2 * 256Mb
- if ctx.IsSet(MinFreeDiskSpaceFlag.Name) {
- minFreeDiskSpace = ctx.Int(MinFreeDiskSpaceFlag.Name)
- } else if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheGCFlag.Name) {
- minFreeDiskSpace = 2 * ctx.Int(CacheFlag.Name) * ctx.Int(CacheGCFlag.Name) / 100
- }
- if minFreeDiskSpace > 0 {
- go monitorFreeDiskSpace(sigc, stack.InstanceDir(), uint64(minFreeDiskSpace)*1024*1024)
- }
-
- shutdown := func() {
- log.Info("Got interrupt, shutting down...")
- go stack.Close()
- for i := 10; i > 0; i-- {
- <-sigc
- if i > 1 {
- log.Warn("Already shutting down, interrupt more to panic.", "times", i-1)
- }
- }
- debug.Exit() // ensure trace and CPU profile data is flushed.
- debug.LoudPanic("boom")
- }
-
- if isConsole {
- // In JS console mode, SIGINT is ignored because it's handled by the console.
- // However, SIGTERM still shuts down the node.
- for {
- sig := <-sigc
- if sig == syscall.SIGTERM {
- shutdown()
- return
- }
- }
- } else {
- <-sigc
- shutdown()
- }
- }()
-}
-
-func monitorFreeDiskSpace(sigc chan os.Signal, path string, freeDiskSpaceCritical uint64) {
- if path == "" {
- return
- }
- for {
- freeSpace, err := getFreeDiskSpace(path)
- if err != nil {
- log.Warn("Failed to get free disk space", "path", path, "err", err)
- break
- }
- if freeSpace < freeDiskSpaceCritical {
- log.Error("Low disk space. Gracefully shutting down Geth to prevent database corruption.", "available", common.StorageSize(freeSpace), "path", path)
- sigc <- syscall.SIGTERM
- break
- } else if freeSpace < 2*freeDiskSpaceCritical {
- log.Warn("Disk space is running low. Geth will shutdown if disk space runs below critical level.", "available", common.StorageSize(freeSpace), "critical_level", common.StorageSize(freeDiskSpaceCritical), "path", path)
- }
- time.Sleep(30 * time.Second)
- }
-}
-
-func ImportChain(chain *core.BlockChain, fn string) error {
- // Watch for Ctrl-C while the import is running.
- // If a signal is received, the import will stop at the next batch.
- interrupt := make(chan os.Signal, 1)
- stop := make(chan struct{})
- signal.Notify(interrupt, syscall.SIGINT, syscall.SIGTERM)
- defer signal.Stop(interrupt)
- defer close(interrupt)
- go func() {
- if _, ok := <-interrupt; ok {
- log.Info("Interrupted during import, stopping at next batch")
- }
- close(stop)
- }()
- checkInterrupt := func() bool {
- select {
- case <-stop:
- return true
- default:
- return false
- }
- }
-
- log.Info("Importing blockchain", "file", fn)
-
- // Open the file handle and potentially unwrap the gzip stream
- fh, err := os.Open(fn)
- if err != nil {
- return err
- }
- defer fh.Close()
-
- var reader io.Reader = fh
- if strings.HasSuffix(fn, ".gz") {
- if reader, err = gzip.NewReader(reader); err != nil {
- return err
- }
- }
- stream := rlp.NewStream(reader, 0)
-
- // Run actual the import.
- blocks := make(types.Blocks, importBatchSize)
- n := 0
- for batch := 0; ; batch++ {
- // Load a batch of RLP blocks.
- if checkInterrupt() {
- return errors.New("interrupted")
- }
- i := 0
- for ; i < importBatchSize; i++ {
- var b types.Block
- if err := stream.Decode(&b); err == io.EOF {
- break
- } else if err != nil {
- return fmt.Errorf("at block %d: %v", n, err)
- }
- // don't import first block
- if b.NumberU64() == 0 {
- i--
- continue
- }
- blocks[i] = &b
- n++
- }
- if i == 0 {
- break
- }
- // Import the batch.
- if checkInterrupt() {
- return errors.New("interrupted")
- }
- missing := missingBlocks(chain, blocks[:i])
- if len(missing) == 0 {
- log.Info("Skipping batch as all blocks present", "batch", batch, "first", blocks[0].Hash(), "last", blocks[i-1].Hash())
- continue
- }
- if failindex, err := chain.InsertChain(missing); err != nil {
- var failnumber uint64
- if failindex > 0 && failindex < len(missing) {
- failnumber = missing[failindex].NumberU64()
- } else {
- failnumber = missing[0].NumberU64()
- }
- return fmt.Errorf("invalid block %d: %v", failnumber, err)
- }
- }
- return nil
-}
-
-func missingBlocks(chain *core.BlockChain, blocks []*types.Block) []*types.Block {
- head := chain.CurrentBlock()
- for i, block := range blocks {
- // If we're behind the chain head, only check block, state is available at head
- if head.Number.Uint64() > block.NumberU64() {
- if !chain.HasBlock(block.Hash(), block.NumberU64()) {
- return blocks[i:]
- }
- continue
- }
- // If we're above the chain head, state availability is a must
- if !chain.HasBlockAndState(block.Hash(), block.NumberU64()) {
- return blocks[i:]
- }
- }
- return nil
-}
-
-// ExportChain exports a blockchain into the specified file, truncating any data
-// already present in the file.
-func ExportChain(blockchain *core.BlockChain, fn string) error {
- log.Info("Exporting blockchain", "file", fn)
-
- // Open the file handle and potentially wrap with a gzip stream
- fh, err := os.OpenFile(fn, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm)
- if err != nil {
- return err
- }
- defer fh.Close()
-
- var writer io.Writer = fh
- if strings.HasSuffix(fn, ".gz") {
- writer = gzip.NewWriter(writer)
- defer writer.(*gzip.Writer).Close()
- }
- // Iterate over the blocks and export them
- if err := blockchain.Export(writer); err != nil {
- return err
- }
- log.Info("Exported blockchain", "file", fn)
-
- return nil
-}
-
-// ExportAppendChain exports a blockchain into the specified file, appending to
-// the file if data already exists in it.
-func ExportAppendChain(blockchain *core.BlockChain, fn string, first uint64, last uint64) error {
- log.Info("Exporting blockchain", "file", fn)
-
- // Open the file handle and potentially wrap with a gzip stream
- fh, err := os.OpenFile(fn, os.O_CREATE|os.O_APPEND|os.O_WRONLY, os.ModePerm)
- if err != nil {
- return err
- }
- defer fh.Close()
-
- var writer io.Writer = fh
- if strings.HasSuffix(fn, ".gz") {
- writer = gzip.NewWriter(writer)
- defer writer.(*gzip.Writer).Close()
- }
- // Iterate over the blocks and export them
- if err := blockchain.ExportN(writer, first, last); err != nil {
- return err
- }
- log.Info("Exported blockchain to", "file", fn)
- return nil
-}
-
-// ImportPreimages imports a batch of exported hash preimages into the database.
-// It's a part of the deprecated functionality, should be removed in the future.
-func ImportPreimages(db ethdb.Database, fn string) error {
- log.Info("Importing preimages", "file", fn)
-
- // Open the file handle and potentially unwrap the gzip stream
- fh, err := os.Open(fn)
- if err != nil {
- return err
- }
- defer fh.Close()
-
- var reader io.Reader = bufio.NewReader(fh)
- if strings.HasSuffix(fn, ".gz") {
- if reader, err = gzip.NewReader(reader); err != nil {
- return err
- }
- }
- stream := rlp.NewStream(reader, 0)
-
- // Import the preimages in batches to prevent disk thrashing
- preimages := make(map[common.Hash][]byte)
-
- for {
- // Read the next entry and ensure it's not junk
- var blob []byte
-
- if err := stream.Decode(&blob); err != nil {
- if err == io.EOF {
- break
- }
- return err
- }
- // Accumulate the preimages and flush when enough ws gathered
- preimages[crypto.Keccak256Hash(blob)] = common.CopyBytes(blob)
- if len(preimages) > 1024 {
- rawdb.WritePreimages(db, preimages)
- preimages = make(map[common.Hash][]byte)
- }
- }
- // Flush the last batch preimage data
- if len(preimages) > 0 {
- rawdb.WritePreimages(db, preimages)
- }
- return nil
-}
-
-// ExportPreimages exports all known hash preimages into the specified file,
-// truncating any data already present in the file.
-// It's a part of the deprecated functionality, should be removed in the future.
-func ExportPreimages(db ethdb.Database, fn string) error {
- log.Info("Exporting preimages", "file", fn)
-
- // Open the file handle and potentially wrap with a gzip stream
- fh, err := os.OpenFile(fn, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm)
- if err != nil {
- return err
- }
- defer fh.Close()
-
- var writer io.Writer = fh
- if strings.HasSuffix(fn, ".gz") {
- writer = gzip.NewWriter(writer)
- defer writer.(*gzip.Writer).Close()
- }
- // Iterate over the preimages and export them
- it := db.NewIterator([]byte("secure-key-"), nil)
- defer it.Release()
-
- for it.Next() {
- if err := rlp.Encode(writer, it.Value()); err != nil {
- return err
- }
- }
- log.Info("Exported preimages", "file", fn)
- return nil
-}
-
-// ExportSnapshotPreimages exports the preimages corresponding to the enumeration of
-// the snapshot for a given root.
-func ExportSnapshotPreimages(chaindb ethdb.Database, snaptree *snapshot.Tree, fn string, root common.Hash) error {
- log.Info("Exporting preimages", "file", fn)
-
- fh, err := os.OpenFile(fn, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm)
- if err != nil {
- return err
- }
- defer fh.Close()
-
- // Enable gzip compressing if file name has gz suffix.
- var writer io.Writer = fh
- if strings.HasSuffix(fn, ".gz") {
- gz := gzip.NewWriter(writer)
- defer gz.Close()
- writer = gz
- }
- buf := bufio.NewWriter(writer)
- defer buf.Flush()
- writer = buf
-
- type hashAndPreimageSize struct {
- Hash common.Hash
- Size int
- }
- hashCh := make(chan hashAndPreimageSize)
-
- var (
- start = time.Now()
- logged = time.Now()
- preimages int
- )
- go func() {
- defer close(hashCh)
- accIt, err := snaptree.AccountIterator(root, common.Hash{})
- if err != nil {
- log.Error("Failed to create account iterator", "error", err)
- return
- }
- defer accIt.Release()
-
- for accIt.Next() {
- acc, err := types.FullAccount(accIt.Account())
- if err != nil {
- log.Error("Failed to get full account", "error", err)
- return
- }
- preimages += 1
- hashCh <- hashAndPreimageSize{Hash: accIt.Hash(), Size: common.AddressLength}
-
- if acc.Root != (common.Hash{}) && acc.Root != types.EmptyRootHash {
- stIt, err := snaptree.StorageIterator(root, accIt.Hash(), common.Hash{})
- if err != nil {
- log.Error("Failed to create storage iterator", "error", err)
- return
- }
- for stIt.Next() {
- preimages += 1
- hashCh <- hashAndPreimageSize{Hash: stIt.Hash(), Size: common.HashLength}
-
- if time.Since(logged) > time.Second*8 {
- logged = time.Now()
- log.Info("Exporting preimages", "count", preimages, "elapsed", common.PrettyDuration(time.Since(start)))
- }
- }
- stIt.Release()
- }
- if time.Since(logged) > time.Second*8 {
- logged = time.Now()
- log.Info("Exporting preimages", "count", preimages, "elapsed", common.PrettyDuration(time.Since(start)))
- }
- }
- }()
-
- for item := range hashCh {
- preimage := rawdb.ReadPreimage(chaindb, item.Hash)
- if len(preimage) == 0 {
- return fmt.Errorf("missing preimage for %v", item.Hash)
- }
- if len(preimage) != item.Size {
- return fmt.Errorf("invalid preimage size, have %d", len(preimage))
- }
- rlpenc, err := rlp.EncodeToBytes(preimage)
- if err != nil {
- return fmt.Errorf("error encoding preimage: %w", err)
- }
- if _, err := writer.Write(rlpenc); err != nil {
- return fmt.Errorf("failed to write preimage: %w", err)
- }
- }
- log.Info("Exported preimages", "count", preimages, "elapsed", common.PrettyDuration(time.Since(start)), "file", fn)
- return nil
-}
-
-// exportHeader is used in the export/import flow. When we do an export,
-// the first element we output is the exportHeader.
-// Whenever a backwards-incompatible change is made, the Version header
-// should be bumped.
-// If the importer sees a higher version, it should reject the import.
-type exportHeader struct {
- Magic string // Always set to 'gethdbdump' for disambiguation
- Version uint64
- Kind string
- UnixTime uint64
-}
-
-const exportMagic = "gethdbdump"
-const (
- OpBatchAdd = 0
- OpBatchDel = 1
-)
-
-// ImportLDBData imports a batch of snapshot data into the database
-func ImportLDBData(db ethdb.Database, f string, startIndex int64, interrupt chan struct{}) error {
- log.Info("Importing leveldb data", "file", f)
-
- // Open the file handle and potentially unwrap the gzip stream
- fh, err := os.Open(f)
- if err != nil {
- return err
- }
- defer fh.Close()
-
- var reader io.Reader = bufio.NewReader(fh)
- if strings.HasSuffix(f, ".gz") {
- if reader, err = gzip.NewReader(reader); err != nil {
- return err
- }
- }
- stream := rlp.NewStream(reader, 0)
-
- // Read the header
- var header exportHeader
- if err := stream.Decode(&header); err != nil {
- return fmt.Errorf("could not decode header: %v", err)
- }
- if header.Magic != exportMagic {
- return errors.New("incompatible data, wrong magic")
- }
- if header.Version != 0 {
- return fmt.Errorf("incompatible version %d, (support only 0)", header.Version)
- }
- log.Info("Importing data", "file", f, "type", header.Kind, "data age",
- common.PrettyDuration(time.Since(time.Unix(int64(header.UnixTime), 0))))
-
- // Import the snapshot in batches to prevent disk thrashing
- var (
- count int64
- start = time.Now()
- logged = time.Now()
- batch = db.NewBatch()
- )
- for {
- // Read the next entry
- var (
- op byte
- key, val []byte
- )
- if err := stream.Decode(&op); err != nil {
- if err == io.EOF {
- break
- }
- return err
- }
- if err := stream.Decode(&key); err != nil {
- return err
- }
- if err := stream.Decode(&val); err != nil {
- return err
- }
- if count < startIndex {
- count++
- continue
- }
- switch op {
- case OpBatchDel:
- batch.Delete(key)
- case OpBatchAdd:
- batch.Put(key, val)
- default:
- return fmt.Errorf("unknown op %d", op)
- }
- if batch.ValueSize() > ethdb.IdealBatchSize {
- if err := batch.Write(); err != nil {
- return err
- }
- batch.Reset()
- }
- // Check interruption emitted by ctrl+c
- if count%1000 == 0 {
- select {
- case <-interrupt:
- if err := batch.Write(); err != nil {
- return err
- }
- log.Info("External data import interrupted", "file", f, "count", count, "elapsed", common.PrettyDuration(time.Since(start)))
- return nil
- default:
- }
- }
- if count%1000 == 0 && time.Since(logged) > 8*time.Second {
- log.Info("Importing external data", "file", f, "count", count, "elapsed", common.PrettyDuration(time.Since(start)))
- logged = time.Now()
- }
- count += 1
- }
- // Flush the last batch snapshot data
- if batch.ValueSize() > 0 {
- if err := batch.Write(); err != nil {
- return err
- }
- }
- log.Info("Imported chain data", "file", f, "count", count,
- "elapsed", common.PrettyDuration(time.Since(start)))
- return nil
-}
-
-// ChainDataIterator is an interface wraps all necessary functions to iterate
-// the exporting chain data.
-type ChainDataIterator interface {
- // Next returns the key-value pair for next exporting entry in the iterator.
- // When the end is reached, it will return (0, nil, nil, false).
- Next() (byte, []byte, []byte, bool)
-
- // Release releases associated resources. Release should always succeed and can
- // be called multiple times without causing error.
- Release()
-}
-
-// ExportChaindata exports the given data type (truncating any data already present)
-// in the file. If the suffix is 'gz', gzip compression is used.
-func ExportChaindata(fn string, kind string, iter ChainDataIterator, interrupt chan struct{}) error {
- log.Info("Exporting chain data", "file", fn, "kind", kind)
- defer iter.Release()
-
- // Open the file handle and potentially wrap with a gzip stream
- fh, err := os.OpenFile(fn, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm)
- if err != nil {
- return err
- }
- defer fh.Close()
-
- var writer io.Writer = fh
- if strings.HasSuffix(fn, ".gz") {
- writer = gzip.NewWriter(writer)
- defer writer.(*gzip.Writer).Close()
- }
- // Write the header
- if err := rlp.Encode(writer, &exportHeader{
- Magic: exportMagic,
- Version: 0,
- Kind: kind,
- UnixTime: uint64(time.Now().Unix()),
- }); err != nil {
- return err
- }
- // Extract data from source iterator and dump them out to file
- var (
- count int64
- start = time.Now()
- logged = time.Now()
- )
- for {
- op, key, val, ok := iter.Next()
- if !ok {
- break
- }
- if err := rlp.Encode(writer, op); err != nil {
- return err
- }
- if err := rlp.Encode(writer, key); err != nil {
- return err
- }
- if err := rlp.Encode(writer, val); err != nil {
- return err
- }
- if count%1000 == 0 {
- // Check interruption emitted by ctrl+c
- select {
- case <-interrupt:
- log.Info("Chain data exporting interrupted", "file", fn,
- "kind", kind, "count", count, "elapsed", common.PrettyDuration(time.Since(start)))
- return nil
- default:
- }
- if time.Since(logged) > 8*time.Second {
- log.Info("Exporting chain data", "file", fn, "kind", kind,
- "count", count, "elapsed", common.PrettyDuration(time.Since(start)))
- logged = time.Now()
- }
- }
- count++
- }
- log.Info("Exported chain data", "file", fn, "kind", kind, "count", count,
- "elapsed", common.PrettyDuration(time.Since(start)))
- return nil
-}
diff --git a/cmd/utils/diskusage.go b/cmd/utils/diskusage.go
deleted file mode 100644
index 0e88f91944..0000000000
--- a/cmd/utils/diskusage.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2021 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-//go:build !windows && !openbsd
-// +build !windows,!openbsd
-
-package utils
-
-import (
- "fmt"
-
- "golang.org/x/sys/unix"
-)
-
-func getFreeDiskSpace(path string) (uint64, error) {
- var stat unix.Statfs_t
- if err := unix.Statfs(path, &stat); err != nil {
- return 0, fmt.Errorf("failed to call Statfs: %v", err)
- }
-
- // Available blocks * size per block = available space in bytes
- var bavail = stat.Bavail
- // nolint:staticcheck
- if stat.Bavail < 0 {
- // FreeBSD can have a negative number of blocks available
- // because of the grace limit.
- bavail = 0
- }
- //nolint:unconvert
- return uint64(bavail) * uint64(stat.Bsize), nil
-}
diff --git a/cmd/utils/diskusage_openbsd.go b/cmd/utils/diskusage_openbsd.go
deleted file mode 100644
index 0d71d84a67..0000000000
--- a/cmd/utils/diskusage_openbsd.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2021 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-//go:build openbsd
-// +build openbsd
-
-package utils
-
-import (
- "fmt"
-
- "golang.org/x/sys/unix"
-)
-
-func getFreeDiskSpace(path string) (uint64, error) {
- var stat unix.Statfs_t
- if err := unix.Statfs(path, &stat); err != nil {
- return 0, fmt.Errorf("failed to call Statfs: %v", err)
- }
-
- // Available blocks * size per block = available space in bytes
- var bavail = stat.F_bavail
- // Not sure if the following check is necessary for OpenBSD
- if stat.F_bavail < 0 {
- // FreeBSD can have a negative number of blocks available
- // because of the grace limit.
- bavail = 0
- }
- //nolint:unconvert
- return uint64(bavail) * uint64(stat.F_bsize), nil
-}
diff --git a/cmd/utils/diskusage_windows.go b/cmd/utils/diskusage_windows.go
deleted file mode 100644
index db31449323..0000000000
--- a/cmd/utils/diskusage_windows.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2021 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package utils
-
-import (
- "fmt"
-
- "golang.org/x/sys/windows"
-)
-
-func getFreeDiskSpace(path string) (uint64, error) {
-
- cwd, err := windows.UTF16PtrFromString(path)
- if err != nil {
- return 0, fmt.Errorf("failed to call UTF16PtrFromString: %v", err)
- }
-
- var freeBytesAvailableToCaller, totalNumberOfBytes, totalNumberOfFreeBytes uint64
- if err := windows.GetDiskFreeSpaceEx(cwd, &freeBytesAvailableToCaller, &totalNumberOfBytes, &totalNumberOfFreeBytes); err != nil {
- return 0, fmt.Errorf("failed to call GetDiskFreeSpaceEx: %v", err)
- }
-
- return freeBytesAvailableToCaller, nil
-}
diff --git a/cmd/utils/export_test.go b/cmd/utils/export_test.go
deleted file mode 100644
index 84ba8d0c31..0000000000
--- a/cmd/utils/export_test.go
+++ /dev/null
@@ -1,199 +0,0 @@
-// Copyright 2021 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package utils
-
-import (
- "fmt"
- "os"
- "strings"
- "testing"
- "time"
-
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/rlp"
-)
-
-// TestExport does basic sanity checks on the export/import functionality
-func TestExport(t *testing.T) {
- f := fmt.Sprintf("%v/tempdump", os.TempDir())
- defer func() {
- os.Remove(f)
- }()
- testExport(t, f)
-}
-
-func TestExportGzip(t *testing.T) {
- f := fmt.Sprintf("%v/tempdump.gz", os.TempDir())
- defer func() {
- os.Remove(f)
- }()
- testExport(t, f)
-}
-
-type testIterator struct {
- index int
-}
-
-func newTestIterator() *testIterator {
- return &testIterator{index: -1}
-}
-
-func (iter *testIterator) Next() (byte, []byte, []byte, bool) {
- if iter.index >= 999 {
- return 0, nil, nil, false
- }
- iter.index += 1
- if iter.index == 42 {
- iter.index += 1
- }
- return OpBatchAdd, []byte(fmt.Sprintf("key-%04d", iter.index)),
- []byte(fmt.Sprintf("value %d", iter.index)), true
-}
-
-func (iter *testIterator) Release() {}
-
-func testExport(t *testing.T, f string) {
- err := ExportChaindata(f, "testdata", newTestIterator(), make(chan struct{}))
- if err != nil {
- t.Fatal(err)
- }
- db := rawdb.NewMemoryDatabase()
- err = ImportLDBData(db, f, 5, make(chan struct{}))
- if err != nil {
- t.Fatal(err)
- }
- // verify
- for i := 0; i < 1000; i++ {
- v, err := db.Get([]byte(fmt.Sprintf("key-%04d", i)))
- if (i < 5 || i == 42) && err == nil {
- t.Fatalf("expected no element at idx %d, got '%v'", i, string(v))
- }
- if !(i < 5 || i == 42) {
- if err != nil {
- t.Fatalf("expected element idx %d: %v", i, err)
- }
- if have, want := string(v), fmt.Sprintf("value %d", i); have != want {
- t.Fatalf("have %v, want %v", have, want)
- }
- }
- }
- v, err := db.Get([]byte(fmt.Sprintf("key-%04d", 1000)))
- if err == nil {
- t.Fatalf("expected no element at idx %d, got '%v'", 1000, string(v))
- }
-}
-
-// testDeletion tests if the deletion markers can be exported/imported correctly
-func TestDeletionExport(t *testing.T) {
- f := fmt.Sprintf("%v/tempdump", os.TempDir())
- defer func() {
- os.Remove(f)
- }()
- testDeletion(t, f)
-}
-
-// TestDeletionExportGzip tests if the deletion markers can be exported/imported
-// correctly with gz compression.
-func TestDeletionExportGzip(t *testing.T) {
- f := fmt.Sprintf("%v/tempdump.gz", os.TempDir())
- defer func() {
- os.Remove(f)
- }()
- testDeletion(t, f)
-}
-
-type deletionIterator struct {
- index int
-}
-
-func newDeletionIterator() *deletionIterator {
- return &deletionIterator{index: -1}
-}
-
-func (iter *deletionIterator) Next() (byte, []byte, []byte, bool) {
- if iter.index >= 999 {
- return 0, nil, nil, false
- }
- iter.index += 1
- if iter.index == 42 {
- iter.index += 1
- }
- return OpBatchDel, []byte(fmt.Sprintf("key-%04d", iter.index)), nil, true
-}
-
-func (iter *deletionIterator) Release() {}
-
-func testDeletion(t *testing.T, f string) {
- err := ExportChaindata(f, "testdata", newDeletionIterator(), make(chan struct{}))
- if err != nil {
- t.Fatal(err)
- }
- db := rawdb.NewMemoryDatabase()
- for i := 0; i < 1000; i++ {
- db.Put([]byte(fmt.Sprintf("key-%04d", i)), []byte(fmt.Sprintf("value %d", i)))
- }
- err = ImportLDBData(db, f, 5, make(chan struct{}))
- if err != nil {
- t.Fatal(err)
- }
- for i := 0; i < 1000; i++ {
- v, err := db.Get([]byte(fmt.Sprintf("key-%04d", i)))
- if i < 5 || i == 42 {
- if err != nil {
- t.Fatalf("expected element at idx %d, got '%v'", i, err)
- }
- if have, want := string(v), fmt.Sprintf("value %d", i); have != want {
- t.Fatalf("have %v, want %v", have, want)
- }
- }
- if !(i < 5 || i == 42) {
- if err == nil {
- t.Fatalf("expected no element idx %d: %v", i, string(v))
- }
- }
- }
-}
-
-// TestImportFutureFormat tests that we reject unsupported future versions.
-func TestImportFutureFormat(t *testing.T) {
- t.Parallel()
- f := fmt.Sprintf("%v/tempdump-future", os.TempDir())
- defer func() {
- os.Remove(f)
- }()
- fh, err := os.OpenFile(f, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm)
- if err != nil {
- t.Fatal(err)
- }
- defer fh.Close()
- if err := rlp.Encode(fh, &exportHeader{
- Magic: exportMagic,
- Version: 500,
- Kind: "testdata",
- UnixTime: uint64(time.Now().Unix()),
- }); err != nil {
- t.Fatal(err)
- }
- db2 := rawdb.NewMemoryDatabase()
- err = ImportLDBData(db2, f, 0, make(chan struct{}))
- if err == nil {
- t.Fatal("Expected error, got none")
- }
- if !strings.HasPrefix(err.Error(), "incompatible version") {
- t.Fatalf("wrong error: %v", err)
- }
-}
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
deleted file mode 100644
index 159c47ca01..0000000000
--- a/cmd/utils/flags.go
+++ /dev/null
@@ -1,2171 +0,0 @@
-// Copyright 2015 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-// Package utils contains internal helper functions for go-ethereum commands.
-package utils
-
-import (
- "context"
- "crypto/ecdsa"
- "encoding/hex"
- "errors"
- "fmt"
- "math"
- "math/big"
- "net"
- "net/http"
- "os"
- "path/filepath"
- godebug "runtime/debug"
- "strconv"
- "strings"
- "time"
-
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/fdlimit"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/txpool/legacypool"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/crypto/kzg4844"
- "github.com/ethereum/go-ethereum/eth"
- "github.com/ethereum/go-ethereum/eth/catalyst"
- "github.com/ethereum/go-ethereum/eth/downloader"
- "github.com/ethereum/go-ethereum/eth/ethconfig"
- "github.com/ethereum/go-ethereum/eth/filters"
- "github.com/ethereum/go-ethereum/eth/gasprice"
- "github.com/ethereum/go-ethereum/eth/tracers"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/ethdb/remotedb"
- "github.com/ethereum/go-ethereum/ethstats"
- "github.com/ethereum/go-ethereum/graphql"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/metrics/exp"
- "github.com/ethereum/go-ethereum/metrics/influxdb"
- "github.com/ethereum/go-ethereum/miner"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/nat"
- "github.com/ethereum/go-ethereum/p2p/netutil"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rpc"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/ethereum/go-ethereum/trie/triedb/hashdb"
- "github.com/ethereum/go-ethereum/trie/triedb/pathdb"
- pcsclite "github.com/gballet/go-libpcsclite"
- gopsutil "github.com/shirou/gopsutil/mem"
- "github.com/urfave/cli/v2"
-)
-
-// These are all the command line flags we support.
-// If you add to this list, please remember to include the
-// flag in the appropriate command definition.
-//
-// The flags are defined here so their names and help texts
-// are the same for all commands.
-
-var (
- // General settings
- DataDirFlag = &flags.DirectoryFlag{
- Name: "datadir",
- Usage: "Data directory for the databases and keystore",
- Value: flags.DirectoryString(node.DefaultDataDir()),
- Category: flags.EthCategory,
- }
- RemoteDBFlag = &cli.StringFlag{
- Name: "remotedb",
- Usage: "URL for remote database",
- Category: flags.LoggingCategory,
- }
- DBEngineFlag = &cli.StringFlag{
- Name: "db.engine",
- Usage: "Backing database implementation to use ('pebble' or 'leveldb')",
- Value: node.DefaultConfig.DBEngine,
- Category: flags.EthCategory,
- }
- AncientFlag = &flags.DirectoryFlag{
- Name: "datadir.ancient",
- Usage: "Root directory for ancient data (default = inside chaindata)",
- Category: flags.EthCategory,
- }
- MinFreeDiskSpaceFlag = &flags.DirectoryFlag{
- Name: "datadir.minfreedisk",
- Usage: "Minimum free disk space in MB, once reached triggers auto shut down (default = --cache.gc converted to MB, 0 = disabled)",
- Category: flags.EthCategory,
- }
- KeyStoreDirFlag = &flags.DirectoryFlag{
- Name: "keystore",
- Usage: "Directory for the keystore (default = inside the datadir)",
- Category: flags.AccountCategory,
- }
- USBFlag = &cli.BoolFlag{
- Name: "usb",
- Usage: "Enable monitoring and management of USB hardware wallets",
- Category: flags.AccountCategory,
- }
- SmartCardDaemonPathFlag = &cli.StringFlag{
- Name: "pcscdpath",
- Usage: "Path to the smartcard daemon (pcscd) socket file",
- Value: pcsclite.PCSCDSockName,
- Category: flags.AccountCategory,
- }
- NetworkIdFlag = &cli.Uint64Flag{
- Name: "networkid",
- Usage: "Explicitly set network id (integer)(For testnets: use --goerli, --sepolia, --holesky instead)",
- Value: ethconfig.Defaults.NetworkId,
- Category: flags.EthCategory,
- }
- MainnetFlag = &cli.BoolFlag{
- Name: "mainnet",
- Usage: "Ethereum mainnet",
- Category: flags.EthCategory,
- }
- GoerliFlag = &cli.BoolFlag{
- Name: "goerli",
- Usage: "Görli network: pre-configured proof-of-authority test network",
- Category: flags.EthCategory,
- }
- SepoliaFlag = &cli.BoolFlag{
- Name: "sepolia",
- Usage: "Sepolia network: pre-configured proof-of-work test network",
- Category: flags.EthCategory,
- }
- HoleskyFlag = &cli.BoolFlag{
- Name: "holesky",
- Usage: "Holesky network: pre-configured proof-of-stake test network",
- Category: flags.EthCategory,
- }
- // Dev mode
- DeveloperFlag = &cli.BoolFlag{
- Name: "dev",
- Usage: "Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled",
- Category: flags.DevCategory,
- }
- DeveloperPeriodFlag = &cli.Uint64Flag{
- Name: "dev.period",
- Usage: "Block period to use in developer mode (0 = mine only if transaction pending)",
- Category: flags.DevCategory,
- }
- DeveloperGasLimitFlag = &cli.Uint64Flag{
- Name: "dev.gaslimit",
- Usage: "Initial block gas limit",
- Value: 11500000,
- Category: flags.DevCategory,
- }
-
- IdentityFlag = &cli.StringFlag{
- Name: "identity",
- Usage: "Custom node name",
- Category: flags.NetworkingCategory,
- }
- DocRootFlag = &flags.DirectoryFlag{
- Name: "docroot",
- Usage: "Document Root for HTTPClient file scheme",
- Value: flags.DirectoryString(flags.HomeDir()),
- Category: flags.APICategory,
- }
- ExitWhenSyncedFlag = &cli.BoolFlag{
- Name: "exitwhensynced",
- Usage: "Exits after block synchronisation completes",
- Category: flags.EthCategory,
- }
-
- // Dump command options.
- IterativeOutputFlag = &cli.BoolFlag{
- Name: "iterative",
- Usage: "Print streaming JSON iteratively, delimited by newlines",
- Value: true,
- }
- ExcludeStorageFlag = &cli.BoolFlag{
- Name: "nostorage",
- Usage: "Exclude storage entries (save db lookups)",
- }
- IncludeIncompletesFlag = &cli.BoolFlag{
- Name: "incompletes",
- Usage: "Include accounts for which we don't have the address (missing preimage)",
- }
- ExcludeCodeFlag = &cli.BoolFlag{
- Name: "nocode",
- Usage: "Exclude contract code (save db lookups)",
- }
- StartKeyFlag = &cli.StringFlag{
- Name: "start",
- Usage: "Start position. Either a hash or address",
- Value: "0x0000000000000000000000000000000000000000000000000000000000000000",
- }
- DumpLimitFlag = &cli.Uint64Flag{
- Name: "limit",
- Usage: "Max number of elements (0 = no limit)",
- Value: 0,
- }
-
- defaultSyncMode = ethconfig.Defaults.SyncMode
- SnapshotFlag = &cli.BoolFlag{
- Name: "snapshot",
- Usage: `Enables snapshot-database mode (default = enable)`,
- Value: true,
- Category: flags.EthCategory,
- }
- LightKDFFlag = &cli.BoolFlag{
- Name: "lightkdf",
- Usage: "Reduce key-derivation RAM & CPU usage at some expense of KDF strength",
- Category: flags.AccountCategory,
- }
- EthRequiredBlocksFlag = &cli.StringFlag{
- Name: "eth.requiredblocks",
- Usage: "Comma separated block number-to-hash mappings to require for peering (=)",
- Category: flags.EthCategory,
- }
- BloomFilterSizeFlag = &cli.Uint64Flag{
- Name: "bloomfilter.size",
- Usage: "Megabytes of memory allocated to bloom-filter for pruning",
- Value: 2048,
- Category: flags.EthCategory,
- }
- OverrideCancun = &cli.Uint64Flag{
- Name: "override.cancun",
- Usage: "Manually specify the Cancun fork timestamp, overriding the bundled setting",
- Category: flags.EthCategory,
- }
- OverrideVerkle = &cli.Uint64Flag{
- Name: "override.verkle",
- Usage: "Manually specify the Verkle fork timestamp, overriding the bundled setting",
- Category: flags.EthCategory,
- }
- SyncModeFlag = &flags.TextMarshalerFlag{
- Name: "syncmode",
- Usage: `Blockchain sync mode ("snap" or "full")`,
- Value: &defaultSyncMode,
- Category: flags.StateCategory,
- }
- GCModeFlag = &cli.StringFlag{
- Name: "gcmode",
- Usage: `Blockchain garbage collection mode, only relevant in state.scheme=hash ("full", "archive")`,
- Value: "full",
- Category: flags.StateCategory,
- }
- StateSchemeFlag = &cli.StringFlag{
- Name: "state.scheme",
- Usage: "Scheme to use for storing ethereum state ('hash' or 'path')",
- Category: flags.StateCategory,
- }
- StateHistoryFlag = &cli.Uint64Flag{
- Name: "history.state",
- Usage: "Number of recent blocks to retain state history for (default = 90,000 blocks, 0 = entire chain)",
- Value: ethconfig.Defaults.StateHistory,
- Category: flags.StateCategory,
- }
- TransactionHistoryFlag = &cli.Uint64Flag{
- Name: "history.transactions",
- Usage: "Number of recent blocks to maintain transactions index for (default = about one year, 0 = entire chain)",
- Value: ethconfig.Defaults.TransactionHistory,
- Category: flags.StateCategory,
- }
- // Transaction pool settings
- TxPoolLocalsFlag = &cli.StringFlag{
- Name: "txpool.locals",
- Usage: "Comma separated accounts to treat as locals (no flush, priority inclusion)",
- Category: flags.TxPoolCategory,
- }
- TxPoolNoLocalsFlag = &cli.BoolFlag{
- Name: "txpool.nolocals",
- Usage: "Disables price exemptions for locally submitted transactions",
- Category: flags.TxPoolCategory,
- }
- TxPoolJournalFlag = &cli.StringFlag{
- Name: "txpool.journal",
- Usage: "Disk journal for local transaction to survive node restarts",
- Value: ethconfig.Defaults.TxPool.Journal,
- Category: flags.TxPoolCategory,
- }
- TxPoolRejournalFlag = &cli.DurationFlag{
- Name: "txpool.rejournal",
- Usage: "Time interval to regenerate the local transaction journal",
- Value: ethconfig.Defaults.TxPool.Rejournal,
- Category: flags.TxPoolCategory,
- }
- TxPoolPriceLimitFlag = &cli.Uint64Flag{
- Name: "txpool.pricelimit",
- Usage: "Minimum gas price tip to enforce for acceptance into the pool",
- Value: ethconfig.Defaults.TxPool.PriceLimit,
- Category: flags.TxPoolCategory,
- }
- TxPoolPriceBumpFlag = &cli.Uint64Flag{
- Name: "txpool.pricebump",
- Usage: "Price bump percentage to replace an already existing transaction",
- Value: ethconfig.Defaults.TxPool.PriceBump,
- Category: flags.TxPoolCategory,
- }
- TxPoolAccountSlotsFlag = &cli.Uint64Flag{
- Name: "txpool.accountslots",
- Usage: "Minimum number of executable transaction slots guaranteed per account",
- Value: ethconfig.Defaults.TxPool.AccountSlots,
- Category: flags.TxPoolCategory,
- }
- TxPoolGlobalSlotsFlag = &cli.Uint64Flag{
- Name: "txpool.globalslots",
- Usage: "Maximum number of executable transaction slots for all accounts",
- Value: ethconfig.Defaults.TxPool.GlobalSlots,
- Category: flags.TxPoolCategory,
- }
- TxPoolAccountQueueFlag = &cli.Uint64Flag{
- Name: "txpool.accountqueue",
- Usage: "Maximum number of non-executable transaction slots permitted per account",
- Value: ethconfig.Defaults.TxPool.AccountQueue,
- Category: flags.TxPoolCategory,
- }
- TxPoolGlobalQueueFlag = &cli.Uint64Flag{
- Name: "txpool.globalqueue",
- Usage: "Maximum number of non-executable transaction slots for all accounts",
- Value: ethconfig.Defaults.TxPool.GlobalQueue,
- Category: flags.TxPoolCategory,
- }
- TxPoolLifetimeFlag = &cli.DurationFlag{
- Name: "txpool.lifetime",
- Usage: "Maximum amount of time non-executable transaction are queued",
- Value: ethconfig.Defaults.TxPool.Lifetime,
- Category: flags.TxPoolCategory,
- }
- // Blob transaction pool settings
- BlobPoolDataDirFlag = &cli.StringFlag{
- Name: "blobpool.datadir",
- Usage: "Data directory to store blob transactions in",
- Value: ethconfig.Defaults.BlobPool.Datadir,
- Category: flags.BlobPoolCategory,
- }
- BlobPoolDataCapFlag = &cli.Uint64Flag{
- Name: "blobpool.datacap",
- Usage: "Disk space to allocate for pending blob transactions (soft limit)",
- Value: ethconfig.Defaults.BlobPool.Datacap,
- Category: flags.BlobPoolCategory,
- }
- BlobPoolPriceBumpFlag = &cli.Uint64Flag{
- Name: "blobpool.pricebump",
- Usage: "Price bump percentage to replace an already existing blob transaction",
- Value: ethconfig.Defaults.BlobPool.PriceBump,
- Category: flags.BlobPoolCategory,
- }
- // Performance tuning settings
- CacheFlag = &cli.IntFlag{
- Name: "cache",
- Usage: "Megabytes of memory allocated to internal caching (default = 4096 mainnet full node, 128 light mode)",
- Value: 1024,
- Category: flags.PerfCategory,
- }
- CacheDatabaseFlag = &cli.IntFlag{
- Name: "cache.database",
- Usage: "Percentage of cache memory allowance to use for database io",
- Value: 50,
- Category: flags.PerfCategory,
- }
- CacheTrieFlag = &cli.IntFlag{
- Name: "cache.trie",
- Usage: "Percentage of cache memory allowance to use for trie caching (default = 15% full mode, 30% archive mode)",
- Value: 15,
- Category: flags.PerfCategory,
- }
- CacheGCFlag = &cli.IntFlag{
- Name: "cache.gc",
- Usage: "Percentage of cache memory allowance to use for trie pruning (default = 25% full mode, 0% archive mode)",
- Value: 25,
- Category: flags.PerfCategory,
- }
- CacheSnapshotFlag = &cli.IntFlag{
- Name: "cache.snapshot",
- Usage: "Percentage of cache memory allowance to use for snapshot caching (default = 10% full mode, 20% archive mode)",
- Value: 10,
- Category: flags.PerfCategory,
- }
- CacheNoPrefetchFlag = &cli.BoolFlag{
- Name: "cache.noprefetch",
- Usage: "Disable heuristic state prefetch during block import (less CPU and disk IO, more time waiting for data)",
- Category: flags.PerfCategory,
- }
- CachePreimagesFlag = &cli.BoolFlag{
- Name: "cache.preimages",
- Usage: "Enable recording the SHA3/keccak preimages of trie keys",
- Category: flags.PerfCategory,
- }
- CacheLogSizeFlag = &cli.IntFlag{
- Name: "cache.blocklogs",
- Usage: "Size (in number of blocks) of the log cache for filtering",
- Category: flags.PerfCategory,
- Value: ethconfig.Defaults.FilterLogCacheSize,
- }
- FDLimitFlag = &cli.IntFlag{
- Name: "fdlimit",
- Usage: "Raise the open file descriptor resource limit (default = system fd limit)",
- Category: flags.PerfCategory,
- }
- CryptoKZGFlag = &cli.StringFlag{
- Name: "crypto.kzg",
- Usage: "KZG library implementation to use; gokzg (recommended) or ckzg",
- Value: "gokzg",
- Category: flags.PerfCategory,
- }
-
- // Miner settings
- MiningEnabledFlag = &cli.BoolFlag{
- Name: "mine",
- Usage: "Enable mining",
- Category: flags.MinerCategory,
- }
- MinerGasLimitFlag = &cli.Uint64Flag{
- Name: "miner.gaslimit",
- Usage: "Target gas ceiling for mined blocks",
- Value: ethconfig.Defaults.Miner.GasCeil,
- Category: flags.MinerCategory,
- }
- MinerGasPriceFlag = &flags.BigFlag{
- Name: "miner.gasprice",
- Usage: "Minimum gas price for mining a transaction",
- Value: ethconfig.Defaults.Miner.GasPrice,
- Category: flags.MinerCategory,
- }
- MinerEtherbaseFlag = &cli.StringFlag{
- Name: "miner.etherbase",
- Usage: "0x prefixed public address for block mining rewards",
- Category: flags.MinerCategory,
- }
- MinerExtraDataFlag = &cli.StringFlag{
- Name: "miner.extradata",
- Usage: "Block extra data set by the miner (default = client version)",
- Category: flags.MinerCategory,
- }
- MinerRecommitIntervalFlag = &cli.DurationFlag{
- Name: "miner.recommit",
- Usage: "Time interval to recreate the block being mined",
- Value: ethconfig.Defaults.Miner.Recommit,
- Category: flags.MinerCategory,
- }
- MinerNewPayloadTimeout = &cli.DurationFlag{
- Name: "miner.newpayload-timeout",
- Usage: "Specify the maximum time allowance for creating a new payload",
- Value: ethconfig.Defaults.Miner.NewPayloadTimeout,
- Category: flags.MinerCategory,
- }
-
- // Account settings
- UnlockedAccountFlag = &cli.StringFlag{
- Name: "unlock",
- Usage: "Comma separated list of accounts to unlock",
- Value: "",
- Category: flags.AccountCategory,
- }
- PasswordFileFlag = &cli.PathFlag{
- Name: "password",
- Usage: "Password file to use for non-interactive password input",
- TakesFile: true,
- Category: flags.AccountCategory,
- }
- ExternalSignerFlag = &cli.StringFlag{
- Name: "signer",
- Usage: "External signer (url or path to ipc file)",
- Value: "",
- Category: flags.AccountCategory,
- }
- InsecureUnlockAllowedFlag = &cli.BoolFlag{
- Name: "allow-insecure-unlock",
- Usage: "Allow insecure account unlocking when account-related RPCs are exposed by http",
- Category: flags.AccountCategory,
- }
-
- // EVM settings
- VMEnableDebugFlag = &cli.BoolFlag{
- Name: "vmdebug",
- Usage: "Record information useful for VM and contract debugging",
- Category: flags.VMCategory,
- }
-
- // API options.
- RPCGlobalGasCapFlag = &cli.Uint64Flag{
- Name: "rpc.gascap",
- Usage: "Sets a cap on gas that can be used in eth_call/estimateGas (0=infinite)",
- Value: ethconfig.Defaults.RPCGasCap,
- Category: flags.APICategory,
- }
- RPCGlobalEVMTimeoutFlag = &cli.DurationFlag{
- Name: "rpc.evmtimeout",
- Usage: "Sets a timeout used for eth_call (0=infinite)",
- Value: ethconfig.Defaults.RPCEVMTimeout,
- Category: flags.APICategory,
- }
- RPCGlobalTxFeeCapFlag = &cli.Float64Flag{
- Name: "rpc.txfeecap",
- Usage: "Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap)",
- Value: ethconfig.Defaults.RPCTxFeeCap,
- Category: flags.APICategory,
- }
- // Authenticated RPC HTTP settings
- AuthListenFlag = &cli.StringFlag{
- Name: "authrpc.addr",
- Usage: "Listening address for authenticated APIs",
- Value: node.DefaultConfig.AuthAddr,
- Category: flags.APICategory,
- }
- AuthPortFlag = &cli.IntFlag{
- Name: "authrpc.port",
- Usage: "Listening port for authenticated APIs",
- Value: node.DefaultConfig.AuthPort,
- Category: flags.APICategory,
- }
- AuthVirtualHostsFlag = &cli.StringFlag{
- Name: "authrpc.vhosts",
- Usage: "Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.",
- Value: strings.Join(node.DefaultConfig.AuthVirtualHosts, ","),
- Category: flags.APICategory,
- }
- JWTSecretFlag = &flags.DirectoryFlag{
- Name: "authrpc.jwtsecret",
- Usage: "Path to a JWT secret to use for authenticated RPC endpoints",
- Category: flags.APICategory,
- }
-
- // Logging and debug settings
- EthStatsURLFlag = &cli.StringFlag{
- Name: "ethstats",
- Usage: "Reporting URL of a ethstats service (nodename:secret@host:port)",
- Category: flags.MetricsCategory,
- }
- NoCompactionFlag = &cli.BoolFlag{
- Name: "nocompaction",
- Usage: "Disables db compaction after import",
- Category: flags.LoggingCategory,
- }
-
- // MISC settings
- SyncTargetFlag = &cli.StringFlag{
- Name: "synctarget",
- Usage: `Hash of the block to full sync to (dev testing feature)`,
- TakesFile: true,
- Category: flags.MiscCategory,
- }
-
- // RPC settings
- IPCDisabledFlag = &cli.BoolFlag{
- Name: "ipcdisable",
- Usage: "Disable the IPC-RPC server",
- Category: flags.APICategory,
- }
- IPCPathFlag = &flags.DirectoryFlag{
- Name: "ipcpath",
- Usage: "Filename for IPC socket/pipe within the datadir (explicit paths escape it)",
- Category: flags.APICategory,
- }
- HTTPEnabledFlag = &cli.BoolFlag{
- Name: "http",
- Usage: "Enable the HTTP-RPC server",
- Category: flags.APICategory,
- }
- HTTPListenAddrFlag = &cli.StringFlag{
- Name: "http.addr",
- Usage: "HTTP-RPC server listening interface",
- Value: node.DefaultHTTPHost,
- Category: flags.APICategory,
- }
- HTTPPortFlag = &cli.IntFlag{
- Name: "http.port",
- Usage: "HTTP-RPC server listening port",
- Value: node.DefaultHTTPPort,
- Category: flags.APICategory,
- }
- HTTPCORSDomainFlag = &cli.StringFlag{
- Name: "http.corsdomain",
- Usage: "Comma separated list of domains from which to accept cross origin requests (browser enforced)",
- Value: "",
- Category: flags.APICategory,
- }
- HTTPVirtualHostsFlag = &cli.StringFlag{
- Name: "http.vhosts",
- Usage: "Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.",
- Value: strings.Join(node.DefaultConfig.HTTPVirtualHosts, ","),
- Category: flags.APICategory,
- }
- HTTPApiFlag = &cli.StringFlag{
- Name: "http.api",
- Usage: "API's offered over the HTTP-RPC interface",
- Value: "",
- Category: flags.APICategory,
- }
- HTTPPathPrefixFlag = &cli.StringFlag{
- Name: "http.rpcprefix",
- Usage: "HTTP path path prefix on which JSON-RPC is served. Use '/' to serve on all paths.",
- Value: "",
- Category: flags.APICategory,
- }
- GraphQLEnabledFlag = &cli.BoolFlag{
- Name: "graphql",
- Usage: "Enable GraphQL on the HTTP-RPC server. Note that GraphQL can only be started if an HTTP server is started as well.",
- Category: flags.APICategory,
- }
- GraphQLCORSDomainFlag = &cli.StringFlag{
- Name: "graphql.corsdomain",
- Usage: "Comma separated list of domains from which to accept cross origin requests (browser enforced)",
- Value: "",
- Category: flags.APICategory,
- }
- GraphQLVirtualHostsFlag = &cli.StringFlag{
- Name: "graphql.vhosts",
- Usage: "Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.",
- Value: strings.Join(node.DefaultConfig.GraphQLVirtualHosts, ","),
- Category: flags.APICategory,
- }
- WSEnabledFlag = &cli.BoolFlag{
- Name: "ws",
- Usage: "Enable the WS-RPC server",
- Category: flags.APICategory,
- }
- WSListenAddrFlag = &cli.StringFlag{
- Name: "ws.addr",
- Usage: "WS-RPC server listening interface",
- Value: node.DefaultWSHost,
- Category: flags.APICategory,
- }
- WSPortFlag = &cli.IntFlag{
- Name: "ws.port",
- Usage: "WS-RPC server listening port",
- Value: node.DefaultWSPort,
- Category: flags.APICategory,
- }
- WSApiFlag = &cli.StringFlag{
- Name: "ws.api",
- Usage: "API's offered over the WS-RPC interface",
- Value: "",
- Category: flags.APICategory,
- }
- WSAllowedOriginsFlag = &cli.StringFlag{
- Name: "ws.origins",
- Usage: "Origins from which to accept websockets requests",
- Value: "",
- Category: flags.APICategory,
- }
- WSPathPrefixFlag = &cli.StringFlag{
- Name: "ws.rpcprefix",
- Usage: "HTTP path prefix on which JSON-RPC is served. Use '/' to serve on all paths.",
- Value: "",
- Category: flags.APICategory,
- }
- ExecFlag = &cli.StringFlag{
- Name: "exec",
- Usage: "Execute JavaScript statement",
- Category: flags.APICategory,
- }
- PreloadJSFlag = &cli.StringFlag{
- Name: "preload",
- Usage: "Comma separated list of JavaScript files to preload into the console",
- Category: flags.APICategory,
- }
- AllowUnprotectedTxs = &cli.BoolFlag{
- Name: "rpc.allow-unprotected-txs",
- Usage: "Allow for unprotected (non EIP155 signed) transactions to be submitted via RPC",
- Category: flags.APICategory,
- }
- BatchRequestLimit = &cli.IntFlag{
- Name: "rpc.batch-request-limit",
- Usage: "Maximum number of requests in a batch",
- Value: node.DefaultConfig.BatchRequestLimit,
- Category: flags.APICategory,
- }
- BatchResponseMaxSize = &cli.IntFlag{
- Name: "rpc.batch-response-max-size",
- Usage: "Maximum number of bytes returned from a batched call",
- Value: node.DefaultConfig.BatchResponseMaxSize,
- Category: flags.APICategory,
- }
- EnablePersonal = &cli.BoolFlag{
- Name: "rpc.enabledeprecatedpersonal",
- Usage: "Enables the (deprecated) personal namespace",
- Category: flags.APICategory,
- }
-
- // Network Settings
- MaxPeersFlag = &cli.IntFlag{
- Name: "maxpeers",
- Usage: "Maximum number of network peers (network disabled if set to 0)",
- Value: node.DefaultConfig.P2P.MaxPeers,
- Category: flags.NetworkingCategory,
- }
- MaxPendingPeersFlag = &cli.IntFlag{
- Name: "maxpendpeers",
- Usage: "Maximum number of pending connection attempts (defaults used if set to 0)",
- Value: node.DefaultConfig.P2P.MaxPendingPeers,
- Category: flags.NetworkingCategory,
- }
- ListenPortFlag = &cli.IntFlag{
- Name: "port",
- Usage: "Network listening port",
- Value: 30303,
- Category: flags.NetworkingCategory,
- }
- BootnodesFlag = &cli.StringFlag{
- Name: "bootnodes",
- Usage: "Comma separated enode URLs for P2P discovery bootstrap",
- Value: "",
- Category: flags.NetworkingCategory,
- }
- NodeKeyFileFlag = &cli.StringFlag{
- Name: "nodekey",
- Usage: "P2P node key file",
- Category: flags.NetworkingCategory,
- }
- NodeKeyHexFlag = &cli.StringFlag{
- Name: "nodekeyhex",
- Usage: "P2P node key as hex (for testing)",
- Category: flags.NetworkingCategory,
- }
- NATFlag = &cli.StringFlag{
- Name: "nat",
- Usage: "NAT port mapping mechanism (any|none|upnp|pmp|pmp:|extip:)",
- Value: "any",
- Category: flags.NetworkingCategory,
- }
- NoDiscoverFlag = &cli.BoolFlag{
- Name: "nodiscover",
- Usage: "Disables the peer discovery mechanism (manual peer addition)",
- Category: flags.NetworkingCategory,
- }
- DiscoveryV4Flag = &cli.BoolFlag{
- Name: "discovery.v4",
- Aliases: []string{"discv4"},
- Usage: "Enables the V4 discovery mechanism",
- Category: flags.NetworkingCategory,
- Value: true,
- }
- DiscoveryV5Flag = &cli.BoolFlag{
- Name: "discovery.v5",
- Aliases: []string{"discv5"},
- Usage: "Enables the experimental RLPx V5 (Topic Discovery) mechanism",
- Category: flags.NetworkingCategory,
- }
- NetrestrictFlag = &cli.StringFlag{
- Name: "netrestrict",
- Usage: "Restricts network communication to the given IP networks (CIDR masks)",
- Category: flags.NetworkingCategory,
- }
- DNSDiscoveryFlag = &cli.StringFlag{
- Name: "discovery.dns",
- Usage: "Sets DNS discovery entry points (use \"\" to disable DNS)",
- Category: flags.NetworkingCategory,
- }
- DiscoveryPortFlag = &cli.IntFlag{
- Name: "discovery.port",
- Usage: "Use a custom UDP port for P2P discovery",
- Value: 30303,
- Category: flags.NetworkingCategory,
- }
-
- // Console
- JSpathFlag = &flags.DirectoryFlag{
- Name: "jspath",
- Usage: "JavaScript root path for `loadScript`",
- Value: flags.DirectoryString("."),
- Category: flags.APICategory,
- }
- HttpHeaderFlag = &cli.StringSliceFlag{
- Name: "header",
- Aliases: []string{"H"},
- Usage: "Pass custom headers to the RPC server when using --" + RemoteDBFlag.Name + " or the geth attach console. This flag can be given multiple times.",
- Category: flags.APICategory,
- }
-
- // Gas price oracle settings
- GpoBlocksFlag = &cli.IntFlag{
- Name: "gpo.blocks",
- Usage: "Number of recent blocks to check for gas prices",
- Value: ethconfig.Defaults.GPO.Blocks,
- Category: flags.GasPriceCategory,
- }
- GpoPercentileFlag = &cli.IntFlag{
- Name: "gpo.percentile",
- Usage: "Suggested gas price is the given percentile of a set of recent transaction gas prices",
- Value: ethconfig.Defaults.GPO.Percentile,
- Category: flags.GasPriceCategory,
- }
- GpoMaxGasPriceFlag = &cli.Int64Flag{
- Name: "gpo.maxprice",
- Usage: "Maximum transaction priority fee (or gasprice before London fork) to be recommended by gpo",
- Value: ethconfig.Defaults.GPO.MaxPrice.Int64(),
- Category: flags.GasPriceCategory,
- }
- GpoIgnoreGasPriceFlag = &cli.Int64Flag{
- Name: "gpo.ignoreprice",
- Usage: "Gas price below which gpo will ignore transactions",
- Value: ethconfig.Defaults.GPO.IgnorePrice.Int64(),
- Category: flags.GasPriceCategory,
- }
-
- // Metrics flags
- MetricsEnabledFlag = &cli.BoolFlag{
- Name: "metrics",
- Usage: "Enable metrics collection and reporting",
- Category: flags.MetricsCategory,
- }
- MetricsEnabledExpensiveFlag = &cli.BoolFlag{
- Name: "metrics.expensive",
- Usage: "Enable expensive metrics collection and reporting",
- Category: flags.MetricsCategory,
- }
-
- // MetricsHTTPFlag defines the endpoint for a stand-alone metrics HTTP endpoint.
- // Since the pprof service enables sensitive/vulnerable behavior, this allows a user
- // to enable a public-OK metrics endpoint without having to worry about ALSO exposing
- // other profiling behavior or information.
- MetricsHTTPFlag = &cli.StringFlag{
- Name: "metrics.addr",
- Usage: `Enable stand-alone metrics HTTP server listening interface.`,
- Category: flags.MetricsCategory,
- }
- MetricsPortFlag = &cli.IntFlag{
- Name: "metrics.port",
- Usage: `Metrics HTTP server listening port.
-Please note that --` + MetricsHTTPFlag.Name + ` must be set to start the server.`,
- Value: metrics.DefaultConfig.Port,
- Category: flags.MetricsCategory,
- }
- MetricsEnableInfluxDBFlag = &cli.BoolFlag{
- Name: "metrics.influxdb",
- Usage: "Enable metrics export/push to an external InfluxDB database",
- Category: flags.MetricsCategory,
- }
- MetricsInfluxDBEndpointFlag = &cli.StringFlag{
- Name: "metrics.influxdb.endpoint",
- Usage: "InfluxDB API endpoint to report metrics to",
- Value: metrics.DefaultConfig.InfluxDBEndpoint,
- Category: flags.MetricsCategory,
- }
- MetricsInfluxDBDatabaseFlag = &cli.StringFlag{
- Name: "metrics.influxdb.database",
- Usage: "InfluxDB database name to push reported metrics to",
- Value: metrics.DefaultConfig.InfluxDBDatabase,
- Category: flags.MetricsCategory,
- }
- MetricsInfluxDBUsernameFlag = &cli.StringFlag{
- Name: "metrics.influxdb.username",
- Usage: "Username to authorize access to the database",
- Value: metrics.DefaultConfig.InfluxDBUsername,
- Category: flags.MetricsCategory,
- }
- MetricsInfluxDBPasswordFlag = &cli.StringFlag{
- Name: "metrics.influxdb.password",
- Usage: "Password to authorize access to the database",
- Value: metrics.DefaultConfig.InfluxDBPassword,
- Category: flags.MetricsCategory,
- }
- // Tags are part of every measurement sent to InfluxDB. Queries on tags are faster in InfluxDB.
- // For example `host` tag could be used so that we can group all nodes and average a measurement
- // across all of them, but also so that we can select a specific node and inspect its measurements.
- // https://docs.influxdata.com/influxdb/v1.4/concepts/key_concepts/#tag-key
- MetricsInfluxDBTagsFlag = &cli.StringFlag{
- Name: "metrics.influxdb.tags",
- Usage: "Comma-separated InfluxDB tags (key/values) attached to all measurements",
- Value: metrics.DefaultConfig.InfluxDBTags,
- Category: flags.MetricsCategory,
- }
-
- MetricsEnableInfluxDBV2Flag = &cli.BoolFlag{
- Name: "metrics.influxdbv2",
- Usage: "Enable metrics export/push to an external InfluxDB v2 database",
- Category: flags.MetricsCategory,
- }
-
- MetricsInfluxDBTokenFlag = &cli.StringFlag{
- Name: "metrics.influxdb.token",
- Usage: "Token to authorize access to the database (v2 only)",
- Value: metrics.DefaultConfig.InfluxDBToken,
- Category: flags.MetricsCategory,
- }
-
- MetricsInfluxDBBucketFlag = &cli.StringFlag{
- Name: "metrics.influxdb.bucket",
- Usage: "InfluxDB bucket name to push reported metrics to (v2 only)",
- Value: metrics.DefaultConfig.InfluxDBBucket,
- Category: flags.MetricsCategory,
- }
-
- MetricsInfluxDBOrganizationFlag = &cli.StringFlag{
- Name: "metrics.influxdb.organization",
- Usage: "InfluxDB organization name (v2 only)",
- Value: metrics.DefaultConfig.InfluxDBOrganization,
- Category: flags.MetricsCategory,
- }
-)
-
-var (
- // TestnetFlags is the flag group of all built-in supported testnets.
- TestnetFlags = []cli.Flag{
- GoerliFlag,
- SepoliaFlag,
- HoleskyFlag,
- }
- // NetworkFlags is the flag group of all built-in supported networks.
- NetworkFlags = append([]cli.Flag{MainnetFlag}, TestnetFlags...)
-
- // DatabaseFlags is the flag group of all database flags.
- DatabaseFlags = []cli.Flag{
- DataDirFlag,
- AncientFlag,
- RemoteDBFlag,
- DBEngineFlag,
- StateSchemeFlag,
- HttpHeaderFlag,
- }
-)
-
-// MakeDataDir retrieves the currently requested data directory, terminating
-// if none (or the empty string) is specified. If the node is starting a testnet,
-// then a subdirectory of the specified datadir will be used.
-func MakeDataDir(ctx *cli.Context) string {
- if path := ctx.String(DataDirFlag.Name); path != "" {
- if ctx.Bool(GoerliFlag.Name) {
- return filepath.Join(path, "goerli")
- }
- if ctx.Bool(SepoliaFlag.Name) {
- return filepath.Join(path, "sepolia")
- }
- if ctx.Bool(HoleskyFlag.Name) {
- return filepath.Join(path, "holesky")
- }
- return path
- }
- Fatalf("Cannot determine default data directory, please set manually (--datadir)")
- return ""
-}
-
-// setNodeKey creates a node key from set command line flags, either loading it
-// from a file or as a specified hex value. If neither flags were provided, this
-// method returns nil and an ephemeral key is to be generated.
-func setNodeKey(ctx *cli.Context, cfg *p2p.Config) {
- var (
- hex = ctx.String(NodeKeyHexFlag.Name)
- file = ctx.String(NodeKeyFileFlag.Name)
- key *ecdsa.PrivateKey
- err error
- )
- switch {
- case file != "" && hex != "":
- Fatalf("Options %q and %q are mutually exclusive", NodeKeyFileFlag.Name, NodeKeyHexFlag.Name)
- case file != "":
- if key, err = crypto.LoadECDSA(file); err != nil {
- Fatalf("Option %q: %v", NodeKeyFileFlag.Name, err)
- }
- cfg.PrivateKey = key
- case hex != "":
- if key, err = crypto.HexToECDSA(hex); err != nil {
- Fatalf("Option %q: %v", NodeKeyHexFlag.Name, err)
- }
- cfg.PrivateKey = key
- }
-}
-
-// setNodeUserIdent creates the user identifier from CLI flags.
-func setNodeUserIdent(ctx *cli.Context, cfg *node.Config) {
- if identity := ctx.String(IdentityFlag.Name); len(identity) > 0 {
- cfg.UserIdent = identity
- }
-}
-
-// setBootstrapNodes creates a list of bootstrap nodes from the command line
-// flags, reverting to pre-configured ones if none have been specified.
-// Priority order for bootnodes configuration:
-//
-// 1. --bootnodes flag
-// 2. Config file
-// 3. Network preset flags (e.g. --goerli)
-// 4. default to mainnet nodes
-func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) {
- urls := params.MainnetBootnodes
- if ctx.IsSet(BootnodesFlag.Name) {
- urls = SplitAndTrim(ctx.String(BootnodesFlag.Name))
- } else {
- if cfg.BootstrapNodes != nil {
- return // Already set by config file, don't apply defaults.
- }
- switch {
- case ctx.Bool(HoleskyFlag.Name):
- urls = params.HoleskyBootnodes
- case ctx.Bool(SepoliaFlag.Name):
- urls = params.SepoliaBootnodes
- case ctx.Bool(GoerliFlag.Name):
- urls = params.GoerliBootnodes
- }
- }
- cfg.BootstrapNodes = mustParseBootnodes(urls)
-}
-
-func mustParseBootnodes(urls []string) []*enode.Node {
- nodes := make([]*enode.Node, 0, len(urls))
- for _, url := range urls {
- if url != "" {
- node, err := enode.Parse(enode.ValidSchemes, url)
- if err != nil {
- log.Crit("Bootstrap URL invalid", "enode", url, "err", err)
- return nil
- }
- nodes = append(nodes, node)
- }
- }
- return nodes
-}
-
-// setBootstrapNodesV5 creates a list of bootstrap nodes from the command line
-// flags, reverting to pre-configured ones if none have been specified.
-func setBootstrapNodesV5(ctx *cli.Context, cfg *p2p.Config) {
- urls := params.V5Bootnodes
- switch {
- case ctx.IsSet(BootnodesFlag.Name):
- urls = SplitAndTrim(ctx.String(BootnodesFlag.Name))
- case cfg.BootstrapNodesV5 != nil:
- return // already set, don't apply defaults.
- }
-
- cfg.BootstrapNodesV5 = make([]*enode.Node, 0, len(urls))
- for _, url := range urls {
- if url != "" {
- node, err := enode.Parse(enode.ValidSchemes, url)
- if err != nil {
- log.Error("Bootstrap URL invalid", "enode", url, "err", err)
- continue
- }
- cfg.BootstrapNodesV5 = append(cfg.BootstrapNodesV5, node)
- }
- }
-}
-
-// setListenAddress creates TCP/UDP listening address strings from set command
-// line flags
-func setListenAddress(ctx *cli.Context, cfg *p2p.Config) {
- if ctx.IsSet(ListenPortFlag.Name) {
- cfg.ListenAddr = fmt.Sprintf(":%d", ctx.Int(ListenPortFlag.Name))
- }
- if ctx.IsSet(DiscoveryPortFlag.Name) {
- cfg.DiscAddr = fmt.Sprintf(":%d", ctx.Int(DiscoveryPortFlag.Name))
- }
-}
-
-// setNAT creates a port mapper from command line flags.
-func setNAT(ctx *cli.Context, cfg *p2p.Config) {
- if ctx.IsSet(NATFlag.Name) {
- natif, err := nat.Parse(ctx.String(NATFlag.Name))
- if err != nil {
- Fatalf("Option %s: %v", NATFlag.Name, err)
- }
- cfg.NAT = natif
- }
-}
-
-// SplitAndTrim splits input separated by a comma
-// and trims excessive white space from the substrings.
-func SplitAndTrim(input string) (ret []string) {
- l := strings.Split(input, ",")
- for _, r := range l {
- if r = strings.TrimSpace(r); r != "" {
- ret = append(ret, r)
- }
- }
- return ret
-}
-
-// setHTTP creates the HTTP RPC listener interface string from the set
-// command line flags, returning empty if the HTTP endpoint is disabled.
-func setHTTP(ctx *cli.Context, cfg *node.Config) {
- if ctx.Bool(HTTPEnabledFlag.Name) {
- if cfg.HTTPHost == "" {
- cfg.HTTPHost = "127.0.0.1"
- }
- if ctx.IsSet(HTTPListenAddrFlag.Name) {
- cfg.HTTPHost = ctx.String(HTTPListenAddrFlag.Name)
- }
- }
-
- if ctx.IsSet(HTTPPortFlag.Name) {
- cfg.HTTPPort = ctx.Int(HTTPPortFlag.Name)
- }
-
- if ctx.IsSet(AuthListenFlag.Name) {
- cfg.AuthAddr = ctx.String(AuthListenFlag.Name)
- }
-
- if ctx.IsSet(AuthPortFlag.Name) {
- cfg.AuthPort = ctx.Int(AuthPortFlag.Name)
- }
-
- if ctx.IsSet(AuthVirtualHostsFlag.Name) {
- cfg.AuthVirtualHosts = SplitAndTrim(ctx.String(AuthVirtualHostsFlag.Name))
- }
-
- if ctx.IsSet(HTTPCORSDomainFlag.Name) {
- cfg.HTTPCors = SplitAndTrim(ctx.String(HTTPCORSDomainFlag.Name))
- }
-
- if ctx.IsSet(HTTPApiFlag.Name) {
- cfg.HTTPModules = SplitAndTrim(ctx.String(HTTPApiFlag.Name))
- }
-
- if ctx.IsSet(HTTPVirtualHostsFlag.Name) {
- cfg.HTTPVirtualHosts = SplitAndTrim(ctx.String(HTTPVirtualHostsFlag.Name))
- }
-
- if ctx.IsSet(HTTPPathPrefixFlag.Name) {
- cfg.HTTPPathPrefix = ctx.String(HTTPPathPrefixFlag.Name)
- }
- if ctx.IsSet(AllowUnprotectedTxs.Name) {
- cfg.AllowUnprotectedTxs = ctx.Bool(AllowUnprotectedTxs.Name)
- }
-
- if ctx.IsSet(BatchRequestLimit.Name) {
- cfg.BatchRequestLimit = ctx.Int(BatchRequestLimit.Name)
- }
-
- if ctx.IsSet(BatchResponseMaxSize.Name) {
- cfg.BatchResponseMaxSize = ctx.Int(BatchResponseMaxSize.Name)
- }
-}
-
-// setGraphQL creates the GraphQL listener interface string from the set
-// command line flags, returning empty if the GraphQL endpoint is disabled.
-func setGraphQL(ctx *cli.Context, cfg *node.Config) {
- if ctx.IsSet(GraphQLCORSDomainFlag.Name) {
- cfg.GraphQLCors = SplitAndTrim(ctx.String(GraphQLCORSDomainFlag.Name))
- }
- if ctx.IsSet(GraphQLVirtualHostsFlag.Name) {
- cfg.GraphQLVirtualHosts = SplitAndTrim(ctx.String(GraphQLVirtualHostsFlag.Name))
- }
-}
-
-// setWS creates the WebSocket RPC listener interface string from the set
-// command line flags, returning empty if the HTTP endpoint is disabled.
-func setWS(ctx *cli.Context, cfg *node.Config) {
- if ctx.Bool(WSEnabledFlag.Name) {
- if cfg.WSHost == "" {
- cfg.WSHost = "127.0.0.1"
- }
- if ctx.IsSet(WSListenAddrFlag.Name) {
- cfg.WSHost = ctx.String(WSListenAddrFlag.Name)
- }
- }
- if ctx.IsSet(WSPortFlag.Name) {
- cfg.WSPort = ctx.Int(WSPortFlag.Name)
- }
-
- if ctx.IsSet(WSAllowedOriginsFlag.Name) {
- cfg.WSOrigins = SplitAndTrim(ctx.String(WSAllowedOriginsFlag.Name))
- }
-
- if ctx.IsSet(WSApiFlag.Name) {
- cfg.WSModules = SplitAndTrim(ctx.String(WSApiFlag.Name))
- }
-
- if ctx.IsSet(WSPathPrefixFlag.Name) {
- cfg.WSPathPrefix = ctx.String(WSPathPrefixFlag.Name)
- }
-}
-
-// setIPC creates an IPC path configuration from the set command line flags,
-// returning an empty string if IPC was explicitly disabled, or the set path.
-func setIPC(ctx *cli.Context, cfg *node.Config) {
- CheckExclusive(ctx, IPCDisabledFlag, IPCPathFlag)
- switch {
- case ctx.Bool(IPCDisabledFlag.Name):
- cfg.IPCPath = ""
- case ctx.IsSet(IPCPathFlag.Name):
- cfg.IPCPath = ctx.String(IPCPathFlag.Name)
- }
-}
-
-// setLes shows the deprecation warnings for LES flags.
-func setLes(ctx *cli.Context, cfg *ethconfig.Config) {
- if ctx.IsSet(LightServeFlag.Name) {
- log.Warn("The light server has been deprecated, please remove this flag", "flag", LightServeFlag.Name)
- }
- if ctx.IsSet(LightIngressFlag.Name) {
- log.Warn("The light server has been deprecated, please remove this flag", "flag", LightIngressFlag.Name)
- }
- if ctx.IsSet(LightEgressFlag.Name) {
- log.Warn("The light server has been deprecated, please remove this flag", "flag", LightEgressFlag.Name)
- }
- if ctx.IsSet(LightMaxPeersFlag.Name) {
- log.Warn("The light server has been deprecated, please remove this flag", "flag", LightMaxPeersFlag.Name)
- }
- if ctx.IsSet(LightNoPruneFlag.Name) {
- log.Warn("The light server has been deprecated, please remove this flag", "flag", LightNoPruneFlag.Name)
- }
- if ctx.IsSet(LightNoSyncServeFlag.Name) {
- log.Warn("The light server has been deprecated, please remove this flag", "flag", LightNoSyncServeFlag.Name)
- }
-}
-
-// MakeDatabaseHandles raises out the number of allowed file handles per process
-// for Geth and returns half of the allowance to assign to the database.
-func MakeDatabaseHandles(max int) int {
- limit, err := fdlimit.Maximum()
- if err != nil {
- Fatalf("Failed to retrieve file descriptor allowance: %v", err)
- }
- switch {
- case max == 0:
- // User didn't specify a meaningful value, use system limits
- case max < 128:
- // User specified something unhealthy, just use system defaults
- log.Error("File descriptor limit invalid (<128)", "had", max, "updated", limit)
- case max > limit:
- // User requested more than the OS allows, notify that we can't allocate it
- log.Warn("Requested file descriptors denied by OS", "req", max, "limit", limit)
- default:
- // User limit is meaningful and within allowed range, use that
- limit = max
- }
- raised, err := fdlimit.Raise(uint64(limit))
- if err != nil {
- Fatalf("Failed to raise file descriptor allowance: %v", err)
- }
- return int(raised / 2) // Leave half for networking and other stuff
-}
-
-// MakeAddress converts an account specified directly as a hex encoded string or
-// a key index in the key store to an internal account representation.
-func MakeAddress(ks *keystore.KeyStore, account string) (accounts.Account, error) {
- // If the specified account is a valid address, return it
- if common.IsHexAddress(account) {
- return accounts.Account{Address: common.HexToAddress(account)}, nil
- }
- // Otherwise try to interpret the account as a keystore index
- index, err := strconv.Atoi(account)
- if err != nil || index < 0 {
- return accounts.Account{}, fmt.Errorf("invalid account address or index %q", account)
- }
- log.Warn("-------------------------------------------------------------------")
- log.Warn("Referring to accounts by order in the keystore folder is dangerous!")
- log.Warn("This functionality is deprecated and will be removed in the future!")
- log.Warn("Please use explicit addresses! (can search via `geth account list`)")
- log.Warn("-------------------------------------------------------------------")
-
- accs := ks.Accounts()
- if len(accs) <= index {
- return accounts.Account{}, fmt.Errorf("index %d higher than number of accounts %d", index, len(accs))
- }
- return accs[index], nil
-}
-
-// setEtherbase retrieves the etherbase from the directly specified command line flags.
-func setEtherbase(ctx *cli.Context, cfg *ethconfig.Config) {
- if !ctx.IsSet(MinerEtherbaseFlag.Name) {
- return
- }
- addr := ctx.String(MinerEtherbaseFlag.Name)
- if strings.HasPrefix(addr, "0x") || strings.HasPrefix(addr, "0X") {
- addr = addr[2:]
- }
- b, err := hex.DecodeString(addr)
- if err != nil || len(b) != common.AddressLength {
- Fatalf("-%s: invalid etherbase address %q", MinerEtherbaseFlag.Name, addr)
- return
- }
- cfg.Miner.Etherbase = common.BytesToAddress(b)
-}
-
-// MakePasswordList reads password lines from the file specified by the global --password flag.
-func MakePasswordList(ctx *cli.Context) []string {
- path := ctx.Path(PasswordFileFlag.Name)
- if path == "" {
- return nil
- }
- text, err := os.ReadFile(path)
- if err != nil {
- Fatalf("Failed to read password file: %v", err)
- }
- lines := strings.Split(string(text), "\n")
- // Sanitise DOS line endings.
- for i := range lines {
- lines[i] = strings.TrimRight(lines[i], "\r")
- }
- return lines
-}
-
-func SetP2PConfig(ctx *cli.Context, cfg *p2p.Config) {
- setNodeKey(ctx, cfg)
- setNAT(ctx, cfg)
- setListenAddress(ctx, cfg)
- setBootstrapNodes(ctx, cfg)
- setBootstrapNodesV5(ctx, cfg)
-
- if ctx.IsSet(MaxPeersFlag.Name) {
- cfg.MaxPeers = ctx.Int(MaxPeersFlag.Name)
- }
- ethPeers := cfg.MaxPeers
- log.Info("Maximum peer count", "ETH", ethPeers, "total", cfg.MaxPeers)
-
- if ctx.IsSet(MaxPendingPeersFlag.Name) {
- cfg.MaxPendingPeers = ctx.Int(MaxPendingPeersFlag.Name)
- }
- if ctx.IsSet(NoDiscoverFlag.Name) {
- cfg.NoDiscovery = true
- }
-
- CheckExclusive(ctx, DiscoveryV4Flag, NoDiscoverFlag)
- CheckExclusive(ctx, DiscoveryV5Flag, NoDiscoverFlag)
- cfg.DiscoveryV4 = ctx.Bool(DiscoveryV4Flag.Name)
- cfg.DiscoveryV5 = ctx.Bool(DiscoveryV5Flag.Name)
-
- if netrestrict := ctx.String(NetrestrictFlag.Name); netrestrict != "" {
- list, err := netutil.ParseNetlist(netrestrict)
- if err != nil {
- Fatalf("Option %q: %v", NetrestrictFlag.Name, err)
- }
- cfg.NetRestrict = list
- }
-
- if ctx.Bool(DeveloperFlag.Name) {
- // --dev mode can't use p2p networking.
- cfg.MaxPeers = 0
- cfg.ListenAddr = ""
- cfg.NoDial = true
- cfg.NoDiscovery = true
- cfg.DiscoveryV5 = false
- }
-}
-
-// SetNodeConfig applies node-related command line flags to the config.
-func SetNodeConfig(ctx *cli.Context, cfg *node.Config) {
- SetP2PConfig(ctx, &cfg.P2P)
- setIPC(ctx, cfg)
- setHTTP(ctx, cfg)
- setGraphQL(ctx, cfg)
- setWS(ctx, cfg)
- setNodeUserIdent(ctx, cfg)
- SetDataDir(ctx, cfg)
- setSmartCard(ctx, cfg)
-
- if ctx.IsSet(JWTSecretFlag.Name) {
- cfg.JWTSecret = ctx.String(JWTSecretFlag.Name)
- }
-
- if ctx.IsSet(EnablePersonal.Name) {
- cfg.EnablePersonal = true
- }
-
- if ctx.IsSet(ExternalSignerFlag.Name) {
- cfg.ExternalSigner = ctx.String(ExternalSignerFlag.Name)
- }
-
- if ctx.IsSet(KeyStoreDirFlag.Name) {
- cfg.KeyStoreDir = ctx.String(KeyStoreDirFlag.Name)
- }
- if ctx.IsSet(DeveloperFlag.Name) {
- cfg.UseLightweightKDF = true
- }
- if ctx.IsSet(LightKDFFlag.Name) {
- cfg.UseLightweightKDF = ctx.Bool(LightKDFFlag.Name)
- }
- if ctx.IsSet(NoUSBFlag.Name) || cfg.NoUSB {
- log.Warn("Option nousb is deprecated and USB is deactivated by default. Use --usb to enable")
- }
- if ctx.IsSet(USBFlag.Name) {
- cfg.USB = ctx.Bool(USBFlag.Name)
- }
- if ctx.IsSet(InsecureUnlockAllowedFlag.Name) {
- cfg.InsecureUnlockAllowed = ctx.Bool(InsecureUnlockAllowedFlag.Name)
- }
- if ctx.IsSet(DBEngineFlag.Name) {
- dbEngine := ctx.String(DBEngineFlag.Name)
- if dbEngine != "leveldb" && dbEngine != "pebble" {
- Fatalf("Invalid choice for db.engine '%s', allowed 'leveldb' or 'pebble'", dbEngine)
- }
- log.Info(fmt.Sprintf("Using %s as db engine", dbEngine))
- cfg.DBEngine = dbEngine
- }
- // deprecation notice for log debug flags (TODO: find a more appropriate place to put these?)
- if ctx.IsSet(LogBacktraceAtFlag.Name) {
- log.Warn("log.backtrace flag is deprecated")
- }
- if ctx.IsSet(LogDebugFlag.Name) {
- log.Warn("log.debug flag is deprecated")
- }
-}
-
-func setSmartCard(ctx *cli.Context, cfg *node.Config) {
- // Skip enabling smartcards if no path is set
- path := ctx.String(SmartCardDaemonPathFlag.Name)
- if path == "" {
- return
- }
- // Sanity check that the smartcard path is valid
- fi, err := os.Stat(path)
- if err != nil {
- log.Info("Smartcard socket not found, disabling", "err", err)
- return
- }
- if fi.Mode()&os.ModeType != os.ModeSocket {
- log.Error("Invalid smartcard daemon path", "path", path, "type", fi.Mode().String())
- return
- }
- // Smartcard daemon path exists and is a socket, enable it
- cfg.SmartCardDaemonPath = path
-}
-
-func SetDataDir(ctx *cli.Context, cfg *node.Config) {
- switch {
- case ctx.IsSet(DataDirFlag.Name):
- cfg.DataDir = ctx.String(DataDirFlag.Name)
- case ctx.Bool(DeveloperFlag.Name):
- cfg.DataDir = "" // unless explicitly requested, use memory databases
- case ctx.Bool(GoerliFlag.Name) && cfg.DataDir == node.DefaultDataDir():
- cfg.DataDir = filepath.Join(node.DefaultDataDir(), "goerli")
- case ctx.Bool(SepoliaFlag.Name) && cfg.DataDir == node.DefaultDataDir():
- cfg.DataDir = filepath.Join(node.DefaultDataDir(), "sepolia")
- case ctx.Bool(HoleskyFlag.Name) && cfg.DataDir == node.DefaultDataDir():
- cfg.DataDir = filepath.Join(node.DefaultDataDir(), "holesky")
- }
-}
-
-func setGPO(ctx *cli.Context, cfg *gasprice.Config) {
- if ctx.IsSet(GpoBlocksFlag.Name) {
- cfg.Blocks = ctx.Int(GpoBlocksFlag.Name)
- }
- if ctx.IsSet(GpoPercentileFlag.Name) {
- cfg.Percentile = ctx.Int(GpoPercentileFlag.Name)
- }
- if ctx.IsSet(GpoMaxGasPriceFlag.Name) {
- cfg.MaxPrice = big.NewInt(ctx.Int64(GpoMaxGasPriceFlag.Name))
- }
- if ctx.IsSet(GpoIgnoreGasPriceFlag.Name) {
- cfg.IgnorePrice = big.NewInt(ctx.Int64(GpoIgnoreGasPriceFlag.Name))
- }
-}
-
-func setTxPool(ctx *cli.Context, cfg *legacypool.Config) {
- if ctx.IsSet(TxPoolLocalsFlag.Name) {
- locals := strings.Split(ctx.String(TxPoolLocalsFlag.Name), ",")
- for _, account := range locals {
- if trimmed := strings.TrimSpace(account); !common.IsHexAddress(trimmed) {
- Fatalf("Invalid account in --txpool.locals: %s", trimmed)
- } else {
- cfg.Locals = append(cfg.Locals, common.HexToAddress(account))
- }
- }
- }
- if ctx.IsSet(TxPoolNoLocalsFlag.Name) {
- cfg.NoLocals = ctx.Bool(TxPoolNoLocalsFlag.Name)
- }
- if ctx.IsSet(TxPoolJournalFlag.Name) {
- cfg.Journal = ctx.String(TxPoolJournalFlag.Name)
- }
- if ctx.IsSet(TxPoolRejournalFlag.Name) {
- cfg.Rejournal = ctx.Duration(TxPoolRejournalFlag.Name)
- }
- if ctx.IsSet(TxPoolPriceLimitFlag.Name) {
- cfg.PriceLimit = ctx.Uint64(TxPoolPriceLimitFlag.Name)
- }
- if ctx.IsSet(TxPoolPriceBumpFlag.Name) {
- cfg.PriceBump = ctx.Uint64(TxPoolPriceBumpFlag.Name)
- }
- if ctx.IsSet(TxPoolAccountSlotsFlag.Name) {
- cfg.AccountSlots = ctx.Uint64(TxPoolAccountSlotsFlag.Name)
- }
- if ctx.IsSet(TxPoolGlobalSlotsFlag.Name) {
- cfg.GlobalSlots = ctx.Uint64(TxPoolGlobalSlotsFlag.Name)
- }
- if ctx.IsSet(TxPoolAccountQueueFlag.Name) {
- cfg.AccountQueue = ctx.Uint64(TxPoolAccountQueueFlag.Name)
- }
- if ctx.IsSet(TxPoolGlobalQueueFlag.Name) {
- cfg.GlobalQueue = ctx.Uint64(TxPoolGlobalQueueFlag.Name)
- }
- if ctx.IsSet(TxPoolLifetimeFlag.Name) {
- cfg.Lifetime = ctx.Duration(TxPoolLifetimeFlag.Name)
- }
-}
-
-func setMiner(ctx *cli.Context, cfg *miner.Config) {
- if ctx.IsSet(MinerExtraDataFlag.Name) {
- cfg.ExtraData = []byte(ctx.String(MinerExtraDataFlag.Name))
- }
- if ctx.IsSet(MinerGasLimitFlag.Name) {
- cfg.GasCeil = ctx.Uint64(MinerGasLimitFlag.Name)
- }
- if ctx.IsSet(MinerGasPriceFlag.Name) {
- cfg.GasPrice = flags.GlobalBig(ctx, MinerGasPriceFlag.Name)
- }
- if ctx.IsSet(MinerRecommitIntervalFlag.Name) {
- cfg.Recommit = ctx.Duration(MinerRecommitIntervalFlag.Name)
- }
- if ctx.IsSet(MinerNewPayloadTimeout.Name) {
- cfg.NewPayloadTimeout = ctx.Duration(MinerNewPayloadTimeout.Name)
- }
-}
-
-func setRequiredBlocks(ctx *cli.Context, cfg *ethconfig.Config) {
- requiredBlocks := ctx.String(EthRequiredBlocksFlag.Name)
- if requiredBlocks == "" {
- if ctx.IsSet(LegacyWhitelistFlag.Name) {
- log.Warn("The flag --whitelist is deprecated and will be removed, please use --eth.requiredblocks")
- requiredBlocks = ctx.String(LegacyWhitelistFlag.Name)
- } else {
- return
- }
- }
- cfg.RequiredBlocks = make(map[uint64]common.Hash)
- for _, entry := range strings.Split(requiredBlocks, ",") {
- parts := strings.Split(entry, "=")
- if len(parts) != 2 {
- Fatalf("Invalid required block entry: %s", entry)
- }
- number, err := strconv.ParseUint(parts[0], 0, 64)
- if err != nil {
- Fatalf("Invalid required block number %s: %v", parts[0], err)
- }
- var hash common.Hash
- if err = hash.UnmarshalText([]byte(parts[1])); err != nil {
- Fatalf("Invalid required block hash %s: %v", parts[1], err)
- }
- cfg.RequiredBlocks[number] = hash
- }
-}
-
-// CheckExclusive verifies that only a single instance of the provided flags was
-// set by the user. Each flag might optionally be followed by a string type to
-// specialize it further.
-func CheckExclusive(ctx *cli.Context, args ...interface{}) {
- set := make([]string, 0, 1)
- for i := 0; i < len(args); i++ {
- // Make sure the next argument is a flag and skip if not set
- flag, ok := args[i].(cli.Flag)
- if !ok {
- panic(fmt.Sprintf("invalid argument, not cli.Flag type: %T", args[i]))
- }
- // Check if next arg extends current and expand its name if so
- name := flag.Names()[0]
-
- if i+1 < len(args) {
- switch option := args[i+1].(type) {
- case string:
- // Extended flag check, make sure value set doesn't conflict with passed in option
- if ctx.String(flag.Names()[0]) == option {
- name += "=" + option
- set = append(set, "--"+name)
- }
- // shift arguments and continue
- i++
- continue
-
- case cli.Flag:
- default:
- panic(fmt.Sprintf("invalid argument, not cli.Flag or string extension: %T", args[i+1]))
- }
- }
- // Mark the flag if it's set
- if ctx.IsSet(flag.Names()[0]) {
- set = append(set, "--"+name)
- }
- }
- if len(set) > 1 {
- Fatalf("Flags %v can't be used at the same time", strings.Join(set, ", "))
- }
-}
-
-// SetEthConfig applies eth-related command line flags to the config.
-func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
- // Avoid conflicting network flags
- CheckExclusive(ctx, MainnetFlag, DeveloperFlag, GoerliFlag, SepoliaFlag, HoleskyFlag)
- CheckExclusive(ctx, DeveloperFlag, ExternalSignerFlag) // Can't use both ephemeral unlocked and external signer
-
- // Set configurations from CLI flags
- setEtherbase(ctx, cfg)
- setGPO(ctx, &cfg.GPO)
- setTxPool(ctx, &cfg.TxPool)
- setMiner(ctx, &cfg.Miner)
- setRequiredBlocks(ctx, cfg)
- setLes(ctx, cfg)
-
- // Cap the cache allowance and tune the garbage collector
- mem, err := gopsutil.VirtualMemory()
- if err == nil {
- if 32<<(^uintptr(0)>>63) == 32 && mem.Total > 2*1024*1024*1024 {
- log.Warn("Lowering memory allowance on 32bit arch", "available", mem.Total/1024/1024, "addressable", 2*1024)
- mem.Total = 2 * 1024 * 1024 * 1024
- }
- allowance := int(mem.Total / 1024 / 1024 / 3)
- if cache := ctx.Int(CacheFlag.Name); cache > allowance {
- log.Warn("Sanitizing cache to Go's GC limits", "provided", cache, "updated", allowance)
- ctx.Set(CacheFlag.Name, strconv.Itoa(allowance))
- }
- }
- // Ensure Go's GC ignores the database cache for trigger percentage
- cache := ctx.Int(CacheFlag.Name)
- gogc := math.Max(20, math.Min(100, 100/(float64(cache)/1024)))
-
- log.Debug("Sanitizing Go's GC trigger", "percent", int(gogc))
- godebug.SetGCPercent(int(gogc))
-
- if ctx.IsSet(SyncTargetFlag.Name) {
- cfg.SyncMode = downloader.FullSync // dev sync target forces full sync
- } else if ctx.IsSet(SyncModeFlag.Name) {
- cfg.SyncMode = *flags.GlobalTextMarshaler(ctx, SyncModeFlag.Name).(*downloader.SyncMode)
- }
- if ctx.IsSet(NetworkIdFlag.Name) {
- cfg.NetworkId = ctx.Uint64(NetworkIdFlag.Name)
- }
- if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheDatabaseFlag.Name) {
- cfg.DatabaseCache = ctx.Int(CacheFlag.Name) * ctx.Int(CacheDatabaseFlag.Name) / 100
- }
- cfg.DatabaseHandles = MakeDatabaseHandles(ctx.Int(FDLimitFlag.Name))
- if ctx.IsSet(AncientFlag.Name) {
- cfg.DatabaseFreezer = ctx.String(AncientFlag.Name)
- }
-
- if gcmode := ctx.String(GCModeFlag.Name); gcmode != "full" && gcmode != "archive" {
- Fatalf("--%s must be either 'full' or 'archive'", GCModeFlag.Name)
- }
- if ctx.IsSet(GCModeFlag.Name) {
- cfg.NoPruning = ctx.String(GCModeFlag.Name) == "archive"
- }
- if ctx.IsSet(CacheNoPrefetchFlag.Name) {
- cfg.NoPrefetch = ctx.Bool(CacheNoPrefetchFlag.Name)
- }
- // Read the value from the flag no matter if it's set or not.
- cfg.Preimages = ctx.Bool(CachePreimagesFlag.Name)
- if cfg.NoPruning && !cfg.Preimages {
- cfg.Preimages = true
- log.Info("Enabling recording of key preimages since archive mode is used")
- }
- if ctx.IsSet(StateHistoryFlag.Name) {
- cfg.StateHistory = ctx.Uint64(StateHistoryFlag.Name)
- }
- if ctx.IsSet(StateSchemeFlag.Name) {
- cfg.StateScheme = ctx.String(StateSchemeFlag.Name)
- }
- // Parse transaction history flag, if user is still using legacy config
- // file with 'TxLookupLimit' configured, copy the value to 'TransactionHistory'.
- if cfg.TransactionHistory == ethconfig.Defaults.TransactionHistory && cfg.TxLookupLimit != ethconfig.Defaults.TxLookupLimit {
- log.Warn("The config option 'TxLookupLimit' is deprecated and will be removed, please use 'TransactionHistory'")
- cfg.TransactionHistory = cfg.TxLookupLimit
- }
- if ctx.IsSet(TransactionHistoryFlag.Name) {
- cfg.TransactionHistory = ctx.Uint64(TransactionHistoryFlag.Name)
- } else if ctx.IsSet(TxLookupLimitFlag.Name) {
- log.Warn("The flag --txlookuplimit is deprecated and will be removed, please use --history.transactions")
- cfg.TransactionHistory = ctx.Uint64(TxLookupLimitFlag.Name)
- }
- if ctx.String(GCModeFlag.Name) == "archive" && cfg.TransactionHistory != 0 {
- cfg.TransactionHistory = 0
- log.Warn("Disabled transaction unindexing for archive node")
- }
- if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheTrieFlag.Name) {
- cfg.TrieCleanCache = ctx.Int(CacheFlag.Name) * ctx.Int(CacheTrieFlag.Name) / 100
- }
- if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheGCFlag.Name) {
- cfg.TrieDirtyCache = ctx.Int(CacheFlag.Name) * ctx.Int(CacheGCFlag.Name) / 100
- }
- if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheSnapshotFlag.Name) {
- cfg.SnapshotCache = ctx.Int(CacheFlag.Name) * ctx.Int(CacheSnapshotFlag.Name) / 100
- }
- if ctx.IsSet(CacheLogSizeFlag.Name) {
- cfg.FilterLogCacheSize = ctx.Int(CacheLogSizeFlag.Name)
- }
- if !ctx.Bool(SnapshotFlag.Name) || cfg.SnapshotCache == 0 {
- // If snap-sync is requested, this flag is also required
- if cfg.SyncMode == downloader.SnapSync {
- if !ctx.Bool(SnapshotFlag.Name) {
- log.Warn("Snap sync requested, enabling --snapshot")
- }
- if cfg.SnapshotCache == 0 {
- log.Warn("Snap sync requested, resetting --cache.snapshot")
- cfg.SnapshotCache = ctx.Int(CacheFlag.Name) * CacheSnapshotFlag.Value / 100
- }
- } else {
- cfg.TrieCleanCache += cfg.SnapshotCache
- cfg.SnapshotCache = 0 // Disabled
- }
- }
- if ctx.IsSet(DocRootFlag.Name) {
- cfg.DocRoot = ctx.String(DocRootFlag.Name)
- }
- if ctx.IsSet(VMEnableDebugFlag.Name) {
- // TODO(fjl): force-enable this in --dev mode
- cfg.EnablePreimageRecording = ctx.Bool(VMEnableDebugFlag.Name)
- }
-
- if ctx.IsSet(RPCGlobalGasCapFlag.Name) {
- cfg.RPCGasCap = ctx.Uint64(RPCGlobalGasCapFlag.Name)
- }
- if cfg.RPCGasCap != 0 {
- log.Info("Set global gas cap", "cap", cfg.RPCGasCap)
- } else {
- log.Info("Global gas cap disabled")
- }
- if ctx.IsSet(RPCGlobalEVMTimeoutFlag.Name) {
- cfg.RPCEVMTimeout = ctx.Duration(RPCGlobalEVMTimeoutFlag.Name)
- }
- if ctx.IsSet(RPCGlobalTxFeeCapFlag.Name) {
- cfg.RPCTxFeeCap = ctx.Float64(RPCGlobalTxFeeCapFlag.Name)
- }
- if ctx.IsSet(NoDiscoverFlag.Name) {
- cfg.EthDiscoveryURLs, cfg.SnapDiscoveryURLs = []string{}, []string{}
- } else if ctx.IsSet(DNSDiscoveryFlag.Name) {
- urls := ctx.String(DNSDiscoveryFlag.Name)
- if urls == "" {
- cfg.EthDiscoveryURLs = []string{}
- } else {
- cfg.EthDiscoveryURLs = SplitAndTrim(urls)
- }
- }
- // Override any default configs for hard coded networks.
- switch {
- case ctx.Bool(MainnetFlag.Name):
- if !ctx.IsSet(NetworkIdFlag.Name) {
- cfg.NetworkId = 1
- }
- cfg.Genesis = core.DefaultGenesisBlock()
- SetDNSDiscoveryDefaults(cfg, params.MainnetGenesisHash)
- case ctx.Bool(HoleskyFlag.Name):
- if !ctx.IsSet(NetworkIdFlag.Name) {
- cfg.NetworkId = 17000
- }
- cfg.Genesis = core.DefaultHoleskyGenesisBlock()
- SetDNSDiscoveryDefaults(cfg, params.HoleskyGenesisHash)
- case ctx.Bool(SepoliaFlag.Name):
- if !ctx.IsSet(NetworkIdFlag.Name) {
- cfg.NetworkId = 11155111
- }
- cfg.Genesis = core.DefaultSepoliaGenesisBlock()
- SetDNSDiscoveryDefaults(cfg, params.SepoliaGenesisHash)
- case ctx.Bool(GoerliFlag.Name):
- if !ctx.IsSet(NetworkIdFlag.Name) {
- cfg.NetworkId = 5
- }
- cfg.Genesis = core.DefaultGoerliGenesisBlock()
- SetDNSDiscoveryDefaults(cfg, params.GoerliGenesisHash)
- case ctx.Bool(DeveloperFlag.Name):
- if !ctx.IsSet(NetworkIdFlag.Name) {
- cfg.NetworkId = 1337
- }
- cfg.SyncMode = downloader.FullSync
- // Create new developer account or reuse existing one
- var (
- developer accounts.Account
- passphrase string
- err error
- )
- if list := MakePasswordList(ctx); len(list) > 0 {
- // Just take the first value. Although the function returns a possible multiple values and
- // some usages iterate through them as attempts, that doesn't make sense in this setting,
- // when we're definitely concerned with only one account.
- passphrase = list[0]
- }
-
- // Unlock the developer account by local keystore.
- var ks *keystore.KeyStore
- if keystores := stack.AccountManager().Backends(keystore.KeyStoreType); len(keystores) > 0 {
- ks = keystores[0].(*keystore.KeyStore)
- }
- if ks == nil {
- Fatalf("Keystore is not available")
- }
-
- // Figure out the dev account address.
- // setEtherbase has been called above, configuring the miner address from command line flags.
- if cfg.Miner.Etherbase != (common.Address{}) {
- developer = accounts.Account{Address: cfg.Miner.Etherbase}
- } else if accs := ks.Accounts(); len(accs) > 0 {
- developer = ks.Accounts()[0]
- } else {
- developer, err = ks.NewAccount(passphrase)
- if err != nil {
- Fatalf("Failed to create developer account: %v", err)
- }
- }
- // Make sure the address is configured as fee recipient, otherwise
- // the miner will fail to start.
- cfg.Miner.Etherbase = developer.Address
-
- if err := ks.Unlock(developer, passphrase); err != nil {
- Fatalf("Failed to unlock developer account: %v", err)
- }
- log.Info("Using developer account", "address", developer.Address)
-
- // Create a new developer genesis block or reuse existing one
- cfg.Genesis = core.DeveloperGenesisBlock(ctx.Uint64(DeveloperGasLimitFlag.Name), &developer.Address)
- if ctx.IsSet(DataDirFlag.Name) {
- chaindb := tryMakeReadOnlyDatabase(ctx, stack)
- if rawdb.ReadCanonicalHash(chaindb, 0) != (common.Hash{}) {
- cfg.Genesis = nil // fallback to db content
-
- //validate genesis has PoS enabled in block 0
- genesis, err := core.ReadGenesis(chaindb)
- if err != nil {
- Fatalf("Could not read genesis from database: %v", err)
- }
- if !genesis.Config.TerminalTotalDifficultyPassed {
- Fatalf("Bad developer-mode genesis configuration: terminalTotalDifficultyPassed must be true in developer mode")
- }
- if genesis.Config.TerminalTotalDifficulty == nil {
- Fatalf("Bad developer-mode genesis configuration: terminalTotalDifficulty must be specified.")
- }
- if genesis.Difficulty.Cmp(genesis.Config.TerminalTotalDifficulty) != 1 {
- Fatalf("Bad developer-mode genesis configuration: genesis block difficulty must be > terminalTotalDifficulty")
- }
- }
- chaindb.Close()
- }
- if !ctx.IsSet(MinerGasPriceFlag.Name) {
- cfg.Miner.GasPrice = big.NewInt(1)
- }
- default:
- if cfg.NetworkId == 1 {
- SetDNSDiscoveryDefaults(cfg, params.MainnetGenesisHash)
- }
- }
- // Set any dangling config values
- if ctx.String(CryptoKZGFlag.Name) != "gokzg" && ctx.String(CryptoKZGFlag.Name) != "ckzg" {
- Fatalf("--%s flag must be 'gokzg' or 'ckzg'", CryptoKZGFlag.Name)
- }
- log.Info("Initializing the KZG library", "backend", ctx.String(CryptoKZGFlag.Name))
- if err := kzg4844.UseCKZG(ctx.String(CryptoKZGFlag.Name) == "ckzg"); err != nil {
- Fatalf("Failed to set KZG library implementation to %s: %v", ctx.String(CryptoKZGFlag.Name), err)
- }
-}
-
-// SetDNSDiscoveryDefaults configures DNS discovery with the given URL if
-// no URLs are set.
-func SetDNSDiscoveryDefaults(cfg *ethconfig.Config, genesis common.Hash) {
- if cfg.EthDiscoveryURLs != nil {
- return // already set through flags/config
- }
- protocol := "all"
- if url := params.KnownDNSNetwork(genesis, protocol); url != "" {
- cfg.EthDiscoveryURLs = []string{url}
- cfg.SnapDiscoveryURLs = cfg.EthDiscoveryURLs
- }
-}
-
-// RegisterEthService adds an Ethereum client to the stack.
-// The second return value is the full node instance.
-func RegisterEthService(stack *node.Node, cfg *ethconfig.Config) (ethapi.Backend, *eth.Ethereum) {
- backend, err := eth.New(stack, cfg)
- if err != nil {
- Fatalf("Failed to register the Ethereum service: %v", err)
- }
- stack.RegisterAPIs(tracers.APIs(backend.APIBackend))
- return backend.APIBackend, backend
-}
-
-// RegisterEthStatsService configures the Ethereum Stats daemon and adds it to the node.
-func RegisterEthStatsService(stack *node.Node, backend ethapi.Backend, url string) {
- if err := ethstats.New(stack, backend, backend.Engine(), url); err != nil {
- Fatalf("Failed to register the Ethereum Stats service: %v", err)
- }
-}
-
-// RegisterGraphQLService adds the GraphQL API to the node.
-func RegisterGraphQLService(stack *node.Node, backend ethapi.Backend, filterSystem *filters.FilterSystem, cfg *node.Config) {
- err := graphql.New(stack, backend, filterSystem, cfg.GraphQLCors, cfg.GraphQLVirtualHosts)
- if err != nil {
- Fatalf("Failed to register the GraphQL service: %v", err)
- }
-}
-
-// RegisterFilterAPI adds the eth log filtering RPC API to the node.
-func RegisterFilterAPI(stack *node.Node, backend ethapi.Backend, ethcfg *ethconfig.Config) *filters.FilterSystem {
- filterSystem := filters.NewFilterSystem(backend, filters.Config{
- LogCacheSize: ethcfg.FilterLogCacheSize,
- })
- stack.RegisterAPIs([]rpc.API{{
- Namespace: "eth",
- Service: filters.NewFilterAPI(filterSystem, false),
- }})
- return filterSystem
-}
-
-// RegisterFullSyncTester adds the full-sync tester service into node.
-func RegisterFullSyncTester(stack *node.Node, eth *eth.Ethereum, target common.Hash) {
- catalyst.RegisterFullSyncTester(stack, eth, target)
- log.Info("Registered full-sync tester", "hash", target)
-}
-
-func SetupMetrics(ctx *cli.Context) {
- if metrics.Enabled {
- log.Info("Enabling metrics collection")
-
- var (
- enableExport = ctx.Bool(MetricsEnableInfluxDBFlag.Name)
- enableExportV2 = ctx.Bool(MetricsEnableInfluxDBV2Flag.Name)
- )
-
- if enableExport || enableExportV2 {
- CheckExclusive(ctx, MetricsEnableInfluxDBFlag, MetricsEnableInfluxDBV2Flag)
-
- v1FlagIsSet := ctx.IsSet(MetricsInfluxDBUsernameFlag.Name) ||
- ctx.IsSet(MetricsInfluxDBPasswordFlag.Name)
-
- v2FlagIsSet := ctx.IsSet(MetricsInfluxDBTokenFlag.Name) ||
- ctx.IsSet(MetricsInfluxDBOrganizationFlag.Name) ||
- ctx.IsSet(MetricsInfluxDBBucketFlag.Name)
-
- if enableExport && v2FlagIsSet {
- Fatalf("Flags --influxdb.metrics.organization, --influxdb.metrics.token, --influxdb.metrics.bucket are only available for influxdb-v2")
- } else if enableExportV2 && v1FlagIsSet {
- Fatalf("Flags --influxdb.metrics.username, --influxdb.metrics.password are only available for influxdb-v1")
- }
- }
-
- var (
- endpoint = ctx.String(MetricsInfluxDBEndpointFlag.Name)
- database = ctx.String(MetricsInfluxDBDatabaseFlag.Name)
- username = ctx.String(MetricsInfluxDBUsernameFlag.Name)
- password = ctx.String(MetricsInfluxDBPasswordFlag.Name)
-
- token = ctx.String(MetricsInfluxDBTokenFlag.Name)
- bucket = ctx.String(MetricsInfluxDBBucketFlag.Name)
- organization = ctx.String(MetricsInfluxDBOrganizationFlag.Name)
- )
-
- if enableExport {
- tagsMap := SplitTagsFlag(ctx.String(MetricsInfluxDBTagsFlag.Name))
-
- log.Info("Enabling metrics export to InfluxDB")
-
- go influxdb.InfluxDBWithTags(metrics.DefaultRegistry, 10*time.Second, endpoint, database, username, password, "geth.", tagsMap)
- } else if enableExportV2 {
- tagsMap := SplitTagsFlag(ctx.String(MetricsInfluxDBTagsFlag.Name))
-
- log.Info("Enabling metrics export to InfluxDB (v2)")
-
- go influxdb.InfluxDBV2WithTags(metrics.DefaultRegistry, 10*time.Second, endpoint, token, bucket, organization, "geth.", tagsMap)
- }
-
- if ctx.IsSet(MetricsHTTPFlag.Name) {
- address := net.JoinHostPort(ctx.String(MetricsHTTPFlag.Name), fmt.Sprintf("%d", ctx.Int(MetricsPortFlag.Name)))
- log.Info("Enabling stand-alone metrics HTTP endpoint", "address", address)
- exp.Setup(address)
- } else if ctx.IsSet(MetricsPortFlag.Name) {
- log.Warn(fmt.Sprintf("--%s specified without --%s, metrics server will not start.", MetricsPortFlag.Name, MetricsHTTPFlag.Name))
- }
- }
-}
-
-func SplitTagsFlag(tagsFlag string) map[string]string {
- tags := strings.Split(tagsFlag, ",")
- tagsMap := map[string]string{}
-
- for _, t := range tags {
- if t != "" {
- kv := strings.Split(t, "=")
-
- if len(kv) == 2 {
- tagsMap[kv[0]] = kv[1]
- }
- }
- }
-
- return tagsMap
-}
-
-// MakeChainDatabase opens a database using the flags passed to the client and will hard crash if it fails.
-func MakeChainDatabase(ctx *cli.Context, stack *node.Node, readonly bool) ethdb.Database {
- var (
- cache = ctx.Int(CacheFlag.Name) * ctx.Int(CacheDatabaseFlag.Name) / 100
- handles = MakeDatabaseHandles(ctx.Int(FDLimitFlag.Name))
- err error
- chainDb ethdb.Database
- )
- switch {
- case ctx.IsSet(RemoteDBFlag.Name):
- log.Info("Using remote db", "url", ctx.String(RemoteDBFlag.Name), "headers", len(ctx.StringSlice(HttpHeaderFlag.Name)))
- client, err := DialRPCWithHeaders(ctx.String(RemoteDBFlag.Name), ctx.StringSlice(HttpHeaderFlag.Name))
- if err != nil {
- break
- }
- chainDb = remotedb.New(client)
- case ctx.String(SyncModeFlag.Name) == "light":
- chainDb, err = stack.OpenDatabase("lightchaindata", cache, handles, "", readonly)
- default:
- chainDb, err = stack.OpenDatabaseWithFreezer("chaindata", cache, handles, ctx.String(AncientFlag.Name), "", readonly)
- }
- if err != nil {
- Fatalf("Could not open database: %v", err)
- }
- return chainDb
-}
-
-// tryMakeReadOnlyDatabase try to open the chain database in read-only mode,
-// or fallback to write mode if the database is not initialized.
-func tryMakeReadOnlyDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database {
- // If the database doesn't exist we need to open it in write-mode to allow
- // the engine to create files.
- readonly := true
- if rawdb.PreexistingDatabase(stack.ResolvePath("chaindata")) == "" {
- readonly = false
- }
- return MakeChainDatabase(ctx, stack, readonly)
-}
-
-func IsNetworkPreset(ctx *cli.Context) bool {
- for _, flag := range NetworkFlags {
- bFlag, _ := flag.(*cli.BoolFlag)
- if ctx.IsSet(bFlag.Name) {
- return true
- }
- }
- return false
-}
-
-func DialRPCWithHeaders(endpoint string, headers []string) (*rpc.Client, error) {
- if endpoint == "" {
- return nil, errors.New("endpoint must be specified")
- }
- if strings.HasPrefix(endpoint, "rpc:") || strings.HasPrefix(endpoint, "ipc:") {
- // Backwards compatibility with geth < 1.5 which required
- // these prefixes.
- endpoint = endpoint[4:]
- }
- var opts []rpc.ClientOption
- if len(headers) > 0 {
- customHeaders := make(http.Header)
- for _, h := range headers {
- kv := strings.Split(h, ":")
- if len(kv) != 2 {
- return nil, fmt.Errorf("invalid http header directive: %q", h)
- }
- customHeaders.Add(kv[0], kv[1])
- }
- opts = append(opts, rpc.WithHeaders(customHeaders))
- }
- return rpc.DialOptions(context.Background(), endpoint, opts...)
-}
-
-func MakeGenesis(ctx *cli.Context) *core.Genesis {
- var genesis *core.Genesis
- switch {
- case ctx.Bool(MainnetFlag.Name):
- genesis = core.DefaultGenesisBlock()
- case ctx.Bool(HoleskyFlag.Name):
- genesis = core.DefaultHoleskyGenesisBlock()
- case ctx.Bool(SepoliaFlag.Name):
- genesis = core.DefaultSepoliaGenesisBlock()
- case ctx.Bool(GoerliFlag.Name):
- genesis = core.DefaultGoerliGenesisBlock()
- case ctx.Bool(DeveloperFlag.Name):
- Fatalf("Developer chains are ephemeral")
- }
- return genesis
-}
-
-// MakeChain creates a chain manager from set command line flags.
-func MakeChain(ctx *cli.Context, stack *node.Node, readonly bool) (*core.BlockChain, ethdb.Database) {
- var (
- gspec = MakeGenesis(ctx)
- chainDb = MakeChainDatabase(ctx, stack, readonly)
- )
- config, err := core.LoadChainConfig(chainDb, gspec)
- if err != nil {
- Fatalf("%v", err)
- }
- engine, err := ethconfig.CreateConsensusEngine(config, chainDb)
- if err != nil {
- Fatalf("%v", err)
- }
- if gcmode := ctx.String(GCModeFlag.Name); gcmode != "full" && gcmode != "archive" {
- Fatalf("--%s must be either 'full' or 'archive'", GCModeFlag.Name)
- }
- scheme, err := rawdb.ParseStateScheme(ctx.String(StateSchemeFlag.Name), chainDb)
- if err != nil {
- Fatalf("%v", err)
- }
- cache := &core.CacheConfig{
- TrieCleanLimit: ethconfig.Defaults.TrieCleanCache,
- TrieCleanNoPrefetch: ctx.Bool(CacheNoPrefetchFlag.Name),
- TrieDirtyLimit: ethconfig.Defaults.TrieDirtyCache,
- TrieDirtyDisabled: ctx.String(GCModeFlag.Name) == "archive",
- TrieTimeLimit: ethconfig.Defaults.TrieTimeout,
- SnapshotLimit: ethconfig.Defaults.SnapshotCache,
- Preimages: ctx.Bool(CachePreimagesFlag.Name),
- StateScheme: scheme,
- StateHistory: ctx.Uint64(StateHistoryFlag.Name),
- }
- if cache.TrieDirtyDisabled && !cache.Preimages {
- cache.Preimages = true
- log.Info("Enabling recording of key preimages since archive mode is used")
- }
- if !ctx.Bool(SnapshotFlag.Name) {
- cache.SnapshotLimit = 0 // Disabled
- }
- // If we're in readonly, do not bother generating snapshot data.
- if readonly {
- cache.SnapshotNoBuild = true
- }
-
- if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheTrieFlag.Name) {
- cache.TrieCleanLimit = ctx.Int(CacheFlag.Name) * ctx.Int(CacheTrieFlag.Name) / 100
- }
- if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheGCFlag.Name) {
- cache.TrieDirtyLimit = ctx.Int(CacheFlag.Name) * ctx.Int(CacheGCFlag.Name) / 100
- }
- vmcfg := vm.Config{EnablePreimageRecording: ctx.Bool(VMEnableDebugFlag.Name)}
-
- // Disable transaction indexing/unindexing by default.
- chain, err := core.NewBlockChain(chainDb, cache, gspec, nil, engine, vmcfg, nil, nil)
- if err != nil {
- Fatalf("Can't create BlockChain: %v", err)
- }
- return chain, chainDb
-}
-
-// MakeConsolePreloads retrieves the absolute paths for the console JavaScript
-// scripts to preload before starting.
-func MakeConsolePreloads(ctx *cli.Context) []string {
- // Skip preloading if there's nothing to preload
- if ctx.String(PreloadJSFlag.Name) == "" {
- return nil
- }
- // Otherwise resolve absolute paths and return them
- var preloads []string
-
- for _, file := range strings.Split(ctx.String(PreloadJSFlag.Name), ",") {
- preloads = append(preloads, strings.TrimSpace(file))
- }
- return preloads
-}
-
-// MakeTrieDatabase constructs a trie database based on the configured scheme.
-func MakeTrieDatabase(ctx *cli.Context, disk ethdb.Database, preimage bool, readOnly bool, isVerkle bool) *trie.Database {
- config := &trie.Config{
- Preimages: preimage,
- IsVerkle: isVerkle,
- }
- scheme, err := rawdb.ParseStateScheme(ctx.String(StateSchemeFlag.Name), disk)
- if err != nil {
- Fatalf("%v", err)
- }
- if scheme == rawdb.HashScheme {
- // Read-only mode is not implemented in hash mode,
- // ignore the parameter silently. TODO(rjl493456442)
- // please config it if read mode is implemented.
- config.HashDB = hashdb.Defaults
- return trie.NewDatabase(disk, config)
- }
- if readOnly {
- config.PathDB = pathdb.ReadOnly
- } else {
- config.PathDB = pathdb.Defaults
- }
- return trie.NewDatabase(disk, config)
-}
diff --git a/cmd/utils/flags_legacy.go b/cmd/utils/flags_legacy.go
deleted file mode 100644
index 243abd8311..0000000000
--- a/cmd/utils/flags_legacy.go
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-package utils
-
-import (
- "fmt"
-
- "github.com/ethereum/go-ethereum/eth/ethconfig"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/urfave/cli/v2"
-)
-
-var ShowDeprecated = &cli.Command{
- Action: showDeprecated,
- Name: "show-deprecated-flags",
- Usage: "Show flags that have been deprecated",
- ArgsUsage: " ",
- Description: "Show flags that have been deprecated and will soon be removed",
-}
-
-var DeprecatedFlags = []cli.Flag{
- NoUSBFlag,
- LegacyWhitelistFlag,
- CacheTrieJournalFlag,
- CacheTrieRejournalFlag,
- LegacyDiscoveryV5Flag,
- TxLookupLimitFlag,
- LightServeFlag,
- LightIngressFlag,
- LightEgressFlag,
- LightMaxPeersFlag,
- LightNoPruneFlag,
- LightNoSyncServeFlag,
- LogBacktraceAtFlag,
- LogDebugFlag,
-}
-
-var (
- // Deprecated May 2020, shown in aliased flags section
- NoUSBFlag = &cli.BoolFlag{
- Name: "nousb",
- Usage: "Disables monitoring for and managing USB hardware wallets (deprecated)",
- Category: flags.DeprecatedCategory,
- }
- // Deprecated March 2022
- LegacyWhitelistFlag = &cli.StringFlag{
- Name: "whitelist",
- Usage: "Comma separated block number-to-hash mappings to enforce (=) (deprecated in favor of --eth.requiredblocks)",
- Category: flags.DeprecatedCategory,
- }
- // Deprecated July 2023
- CacheTrieJournalFlag = &cli.StringFlag{
- Name: "cache.trie.journal",
- Usage: "Disk journal directory for trie cache to survive node restarts",
- Category: flags.DeprecatedCategory,
- }
- CacheTrieRejournalFlag = &cli.DurationFlag{
- Name: "cache.trie.rejournal",
- Usage: "Time interval to regenerate the trie cache journal",
- Category: flags.DeprecatedCategory,
- }
- LegacyDiscoveryV5Flag = &cli.BoolFlag{
- Name: "v5disc",
- Usage: "Enables the experimental RLPx V5 (Topic Discovery) mechanism (deprecated, use --discv5 instead)",
- Category: flags.DeprecatedCategory,
- }
- // Deprecated August 2023
- TxLookupLimitFlag = &cli.Uint64Flag{
- Name: "txlookuplimit",
- Usage: "Number of recent blocks to maintain transactions index for (default = about one year, 0 = entire chain) (deprecated, use history.transactions instead)",
- Value: ethconfig.Defaults.TransactionHistory,
- Category: flags.DeprecatedCategory,
- }
- // Light server and client settings, Deprecated November 2023
- LightServeFlag = &cli.IntFlag{
- Name: "light.serve",
- Usage: "Maximum percentage of time allowed for serving LES requests (deprecated)",
- Value: ethconfig.Defaults.LightServ,
- Category: flags.LightCategory,
- }
- LightIngressFlag = &cli.IntFlag{
- Name: "light.ingress",
- Usage: "Incoming bandwidth limit for serving light clients (deprecated)",
- Value: ethconfig.Defaults.LightIngress,
- Category: flags.LightCategory,
- }
- LightEgressFlag = &cli.IntFlag{
- Name: "light.egress",
- Usage: "Outgoing bandwidth limit for serving light clients (deprecated)",
- Value: ethconfig.Defaults.LightEgress,
- Category: flags.LightCategory,
- }
- LightMaxPeersFlag = &cli.IntFlag{
- Name: "light.maxpeers",
- Usage: "Maximum number of light clients to serve, or light servers to attach to (deprecated)",
- Value: ethconfig.Defaults.LightPeers,
- Category: flags.LightCategory,
- }
- LightNoPruneFlag = &cli.BoolFlag{
- Name: "light.nopruning",
- Usage: "Disable ancient light chain data pruning (deprecated)",
- Category: flags.LightCategory,
- }
- LightNoSyncServeFlag = &cli.BoolFlag{
- Name: "light.nosyncserve",
- Usage: "Enables serving light clients before syncing (deprecated)",
- Category: flags.LightCategory,
- }
- // Deprecated November 2023
- LogBacktraceAtFlag = &cli.StringFlag{
- Name: "log.backtrace",
- Usage: "Request a stack trace at a specific logging statement (deprecated)",
- Value: "",
- Category: flags.DeprecatedCategory,
- }
- LogDebugFlag = &cli.BoolFlag{
- Name: "log.debug",
- Usage: "Prepends log messages with call-site location (deprecated)",
- Category: flags.DeprecatedCategory,
- }
-)
-
-// showDeprecated displays deprecated flags that will be soon removed from the codebase.
-func showDeprecated(*cli.Context) error {
- fmt.Println("--------------------------------------------------------------------")
- fmt.Println("The following flags are deprecated and will be removed in the future!")
- fmt.Println("--------------------------------------------------------------------")
- fmt.Println()
- for _, flag := range DeprecatedFlags {
- fmt.Println(flag.String())
- }
- fmt.Println()
- return nil
-}
diff --git a/cmd/utils/flags_test.go b/cmd/utils/flags_test.go
deleted file mode 100644
index 00c73a5264..0000000000
--- a/cmd/utils/flags_test.go
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2019 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-// Package utils contains internal helper functions for go-ethereum commands.
-package utils
-
-import (
- "reflect"
- "testing"
-)
-
-func Test_SplitTagsFlag(t *testing.T) {
- t.Parallel()
- tests := []struct {
- name string
- args string
- want map[string]string
- }{
- {
- "2 tags case",
- "host=localhost,bzzkey=123",
- map[string]string{
- "host": "localhost",
- "bzzkey": "123",
- },
- },
- {
- "1 tag case",
- "host=localhost123",
- map[string]string{
- "host": "localhost123",
- },
- },
- {
- "empty case",
- "",
- map[string]string{},
- },
- {
- "garbage",
- "smth=smthelse=123",
- map[string]string{},
- },
- }
- for _, tt := range tests {
- tt := tt
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- if got := SplitTagsFlag(tt.args); !reflect.DeepEqual(got, tt.want) {
- t.Errorf("splitTagsFlag() = %v, want %v", got, tt.want)
- }
- })
- }
-}
diff --git a/cmd/utils/prompt.go b/cmd/utils/prompt.go
deleted file mode 100644
index f513e38188..0000000000
--- a/cmd/utils/prompt.go
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-// Package utils contains internal helper functions for go-ethereum commands.
-package utils
-
-import (
- "fmt"
-
- "github.com/ethereum/go-ethereum/console/prompt"
-)
-
-// GetPassPhrase displays the given text(prompt) to the user and requests some textual
-// data to be entered, but one which must not be echoed out into the terminal.
-// The method returns the input provided by the user.
-func GetPassPhrase(text string, confirmation bool) string {
- if text != "" {
- fmt.Println(text)
- }
- password, err := prompt.Stdin.PromptPassword("Password: ")
- if err != nil {
- Fatalf("Failed to read password: %v", err)
- }
- if confirmation {
- confirm, err := prompt.Stdin.PromptPassword("Repeat password: ")
- if err != nil {
- Fatalf("Failed to read password confirmation: %v", err)
- }
- if password != confirm {
- Fatalf("Passwords do not match")
- }
- }
- return password
-}
-
-// GetPassPhraseWithList retrieves the password associated with an account, either fetched
-// from a list of preloaded passphrases, or requested interactively from the user.
-func GetPassPhraseWithList(text string, confirmation bool, index int, passwords []string) string {
- // If a list of passwords was supplied, retrieve from them
- if len(passwords) > 0 {
- if index < len(passwords) {
- return passwords[index]
- }
- return passwords[len(passwords)-1]
- }
- // Otherwise prompt the user for the password
- password := GetPassPhrase(text, confirmation)
- return password
-}
diff --git a/cmd/utils/prompt_test.go b/cmd/utils/prompt_test.go
deleted file mode 100644
index 889bf71de3..0000000000
--- a/cmd/utils/prompt_test.go
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2020 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see .
-
-// Package utils contains internal helper functions for go-ethereum commands.
-package utils
-
-import (
- "testing"
-)
-
-func TestGetPassPhraseWithList(t *testing.T) {
- t.Parallel()
- type args struct {
- text string
- confirmation bool
- index int
- passwords []string
- }
- tests := []struct {
- name string
- args args
- want string
- }{
- {
- "test1",
- args{
- "text1",
- false,
- 0,
- []string{"zero", "one", "two"},
- },
- "zero",
- },
- {
- "test2",
- args{
- "text2",
- false,
- 5,
- []string{"zero", "one", "two"},
- },
- "two",
- },
- {
- "test3",
- args{
- "text3",
- true,
- 1,
- []string{"zero", "one", "two"},
- },
- "one",
- },
- }
- for _, tt := range tests {
- tt := tt
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- if got := GetPassPhraseWithList(tt.args.text, tt.args.confirmation, tt.args.index, tt.args.passwords); got != tt.want {
- t.Errorf("GetPassPhraseWithList() = %v, want %v", got, tt.want)
- }
- })
- }
-}