9326a118c7
This PR integrates witness-enabled block production, witness-creating payload execution and stateless cross-validation into the `engine` API. The purpose of the PR is to enable the following use-cases (for API details, please see next section): - Cross validating locally created blocks: - Call `forkchoiceUpdatedWithWitness` instead of `forkchoiceUpdated` to trigger witness creation too. - Call `getPayload` as before to retrieve the new block and also the above created witness. - Call `executeStatelessPayload` against another client to cross-validate the block. - Cross validating locally processed blocks: - Call `newPayloadWithWitness` instead of `newPayload` to trigger witness creation too. - Call `executeStatelessPayload` against another client to cross-validate the block. - Block production for stateless clients (local or MEV builders): - Call `forkchoiceUpdatedWithWitness` instead of `forkchoiceUpdated` to trigger witness creation too. - Call `getPayload` as before to retrieve the new block and also the above created witness. - Propagate witnesses across the consensus libp2p network for stateless Ethereum. - Stateless validator validation: - Call `executeStatelessPayload` with the propagated witness to statelessly validate the block. *Note, the various `WithWitness` methods could also *just be* an additional boolean flag on the base methods, but this PR wanted to keep the methods separate until a final consensus is reached on how to integrate in production.* --- The following `engine` API types are introduced: ```go // StatelessPayloadStatusV1 is the result of a stateless payload execution. type StatelessPayloadStatusV1 struct { Status string `json:"status"` StateRoot common.Hash `json:"stateRoot"` ReceiptsRoot common.Hash `json:"receiptsRoot"` ValidationError *string `json:"validationError"` } ``` - Add `forkchoiceUpdatedWithWitnessV1,2,3` with same params and returns as `forkchoiceUpdatedV1,2,3`, but triggering a stateless witness building if block production is requested. - Extend `getPayloadV2,3` to return `executionPayloadEnvelope` with an additional `witness` field of type `bytes` iff created via `forkchoiceUpdatedWithWitnessV2,3`. - Add `newPayloadWithWitnessV1,2,3,4` with same params and returns as `newPayloadV1,2,3,4`, but triggering a stateless witness creation during payload execution to allow cross validating it. - Extend `payloadStatusV1` with a `witness` field of type `bytes` if returned by `newPayloadWithWitnessV1,2,3,4`. - Add `executeStatelessPayloadV1,2,3,4` with same base params as `newPayloadV1,2,3,4` and one more additional param (`witness`) of type `bytes`. The method returns `statelessPayloadStatusV1`, which mirrors `payloadStatusV1` but replaces `latestValidHash` with `stateRoot` and `receiptRoot`.
245 lines
7.3 KiB
Go
245 lines
7.3 KiB
Go
// Code generated by github.com/fjl/gencodec. DO NOT EDIT.
|
|
|
|
package ethconfig
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/ethereum/go-ethereum/core"
|
|
"github.com/ethereum/go-ethereum/core/txpool/blobpool"
|
|
"github.com/ethereum/go-ethereum/core/txpool/legacypool"
|
|
"github.com/ethereum/go-ethereum/eth/downloader"
|
|
"github.com/ethereum/go-ethereum/eth/gasprice"
|
|
"github.com/ethereum/go-ethereum/miner"
|
|
)
|
|
|
|
// MarshalTOML marshals as TOML.
|
|
func (c Config) MarshalTOML() (interface{}, error) {
|
|
type Config struct {
|
|
Genesis *core.Genesis `toml:",omitempty"`
|
|
NetworkId uint64
|
|
SyncMode downloader.SyncMode
|
|
EthDiscoveryURLs []string
|
|
SnapDiscoveryURLs []string
|
|
NoPruning bool
|
|
NoPrefetch bool
|
|
TxLookupLimit uint64 `toml:",omitempty"`
|
|
TransactionHistory uint64 `toml:",omitempty"`
|
|
StateHistory uint64 `toml:",omitempty"`
|
|
StateScheme string `toml:",omitempty"`
|
|
RequiredBlocks map[uint64]common.Hash `toml:"-"`
|
|
SkipBcVersionCheck bool `toml:"-"`
|
|
DatabaseHandles int `toml:"-"`
|
|
DatabaseCache int
|
|
DatabaseFreezer string
|
|
TrieCleanCache int
|
|
TrieDirtyCache int
|
|
TrieTimeout time.Duration
|
|
SnapshotCache int
|
|
Preimages bool
|
|
FilterLogCacheSize int
|
|
Miner miner.Config
|
|
TxPool legacypool.Config
|
|
BlobPool blobpool.Config
|
|
GPO gasprice.Config
|
|
EnablePreimageRecording bool
|
|
VMTrace string
|
|
VMTraceJsonConfig string
|
|
DocRoot string `toml:"-"`
|
|
RPCGasCap uint64
|
|
RPCEVMTimeout time.Duration
|
|
RPCTxFeeCap float64
|
|
OverrideCancun *uint64 `toml:",omitempty"`
|
|
OverrideVerkle *uint64 `toml:",omitempty"`
|
|
}
|
|
var enc Config
|
|
enc.Genesis = c.Genesis
|
|
enc.NetworkId = c.NetworkId
|
|
enc.SyncMode = c.SyncMode
|
|
enc.EthDiscoveryURLs = c.EthDiscoveryURLs
|
|
enc.SnapDiscoveryURLs = c.SnapDiscoveryURLs
|
|
enc.NoPruning = c.NoPruning
|
|
enc.NoPrefetch = c.NoPrefetch
|
|
enc.TxLookupLimit = c.TxLookupLimit
|
|
enc.TransactionHistory = c.TransactionHistory
|
|
enc.StateHistory = c.StateHistory
|
|
enc.StateScheme = c.StateScheme
|
|
enc.RequiredBlocks = c.RequiredBlocks
|
|
enc.SkipBcVersionCheck = c.SkipBcVersionCheck
|
|
enc.DatabaseHandles = c.DatabaseHandles
|
|
enc.DatabaseCache = c.DatabaseCache
|
|
enc.DatabaseFreezer = c.DatabaseFreezer
|
|
enc.TrieCleanCache = c.TrieCleanCache
|
|
enc.TrieDirtyCache = c.TrieDirtyCache
|
|
enc.TrieTimeout = c.TrieTimeout
|
|
enc.SnapshotCache = c.SnapshotCache
|
|
enc.Preimages = c.Preimages
|
|
enc.FilterLogCacheSize = c.FilterLogCacheSize
|
|
enc.Miner = c.Miner
|
|
enc.TxPool = c.TxPool
|
|
enc.BlobPool = c.BlobPool
|
|
enc.GPO = c.GPO
|
|
enc.EnablePreimageRecording = c.EnablePreimageRecording
|
|
enc.VMTrace = c.VMTrace
|
|
enc.VMTraceJsonConfig = c.VMTraceJsonConfig
|
|
enc.DocRoot = c.DocRoot
|
|
enc.RPCGasCap = c.RPCGasCap
|
|
enc.RPCEVMTimeout = c.RPCEVMTimeout
|
|
enc.RPCTxFeeCap = c.RPCTxFeeCap
|
|
enc.OverrideCancun = c.OverrideCancun
|
|
enc.OverrideVerkle = c.OverrideVerkle
|
|
return &enc, nil
|
|
}
|
|
|
|
// UnmarshalTOML unmarshals from TOML.
|
|
func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error {
|
|
type Config struct {
|
|
Genesis *core.Genesis `toml:",omitempty"`
|
|
NetworkId *uint64
|
|
SyncMode *downloader.SyncMode
|
|
EthDiscoveryURLs []string
|
|
SnapDiscoveryURLs []string
|
|
NoPruning *bool
|
|
NoPrefetch *bool
|
|
TxLookupLimit *uint64 `toml:",omitempty"`
|
|
TransactionHistory *uint64 `toml:",omitempty"`
|
|
StateHistory *uint64 `toml:",omitempty"`
|
|
StateScheme *string `toml:",omitempty"`
|
|
RequiredBlocks map[uint64]common.Hash `toml:"-"`
|
|
SkipBcVersionCheck *bool `toml:"-"`
|
|
DatabaseHandles *int `toml:"-"`
|
|
DatabaseCache *int
|
|
DatabaseFreezer *string
|
|
TrieCleanCache *int
|
|
TrieDirtyCache *int
|
|
TrieTimeout *time.Duration
|
|
SnapshotCache *int
|
|
Preimages *bool
|
|
FilterLogCacheSize *int
|
|
Miner *miner.Config
|
|
TxPool *legacypool.Config
|
|
BlobPool *blobpool.Config
|
|
GPO *gasprice.Config
|
|
EnablePreimageRecording *bool
|
|
VMTrace *string
|
|
VMTraceJsonConfig *string
|
|
DocRoot *string `toml:"-"`
|
|
RPCGasCap *uint64
|
|
RPCEVMTimeout *time.Duration
|
|
RPCTxFeeCap *float64
|
|
OverrideCancun *uint64 `toml:",omitempty"`
|
|
OverrideVerkle *uint64 `toml:",omitempty"`
|
|
}
|
|
var dec Config
|
|
if err := unmarshal(&dec); err != nil {
|
|
return err
|
|
}
|
|
if dec.Genesis != nil {
|
|
c.Genesis = dec.Genesis
|
|
}
|
|
if dec.NetworkId != nil {
|
|
c.NetworkId = *dec.NetworkId
|
|
}
|
|
if dec.SyncMode != nil {
|
|
c.SyncMode = *dec.SyncMode
|
|
}
|
|
if dec.EthDiscoveryURLs != nil {
|
|
c.EthDiscoveryURLs = dec.EthDiscoveryURLs
|
|
}
|
|
if dec.SnapDiscoveryURLs != nil {
|
|
c.SnapDiscoveryURLs = dec.SnapDiscoveryURLs
|
|
}
|
|
if dec.NoPruning != nil {
|
|
c.NoPruning = *dec.NoPruning
|
|
}
|
|
if dec.NoPrefetch != nil {
|
|
c.NoPrefetch = *dec.NoPrefetch
|
|
}
|
|
if dec.TxLookupLimit != nil {
|
|
c.TxLookupLimit = *dec.TxLookupLimit
|
|
}
|
|
if dec.TransactionHistory != nil {
|
|
c.TransactionHistory = *dec.TransactionHistory
|
|
}
|
|
if dec.StateHistory != nil {
|
|
c.StateHistory = *dec.StateHistory
|
|
}
|
|
if dec.StateScheme != nil {
|
|
c.StateScheme = *dec.StateScheme
|
|
}
|
|
if dec.RequiredBlocks != nil {
|
|
c.RequiredBlocks = dec.RequiredBlocks
|
|
}
|
|
if dec.SkipBcVersionCheck != nil {
|
|
c.SkipBcVersionCheck = *dec.SkipBcVersionCheck
|
|
}
|
|
if dec.DatabaseHandles != nil {
|
|
c.DatabaseHandles = *dec.DatabaseHandles
|
|
}
|
|
if dec.DatabaseCache != nil {
|
|
c.DatabaseCache = *dec.DatabaseCache
|
|
}
|
|
if dec.DatabaseFreezer != nil {
|
|
c.DatabaseFreezer = *dec.DatabaseFreezer
|
|
}
|
|
if dec.TrieCleanCache != nil {
|
|
c.TrieCleanCache = *dec.TrieCleanCache
|
|
}
|
|
if dec.TrieDirtyCache != nil {
|
|
c.TrieDirtyCache = *dec.TrieDirtyCache
|
|
}
|
|
if dec.TrieTimeout != nil {
|
|
c.TrieTimeout = *dec.TrieTimeout
|
|
}
|
|
if dec.SnapshotCache != nil {
|
|
c.SnapshotCache = *dec.SnapshotCache
|
|
}
|
|
if dec.Preimages != nil {
|
|
c.Preimages = *dec.Preimages
|
|
}
|
|
if dec.FilterLogCacheSize != nil {
|
|
c.FilterLogCacheSize = *dec.FilterLogCacheSize
|
|
}
|
|
if dec.Miner != nil {
|
|
c.Miner = *dec.Miner
|
|
}
|
|
if dec.TxPool != nil {
|
|
c.TxPool = *dec.TxPool
|
|
}
|
|
if dec.BlobPool != nil {
|
|
c.BlobPool = *dec.BlobPool
|
|
}
|
|
if dec.GPO != nil {
|
|
c.GPO = *dec.GPO
|
|
}
|
|
if dec.EnablePreimageRecording != nil {
|
|
c.EnablePreimageRecording = *dec.EnablePreimageRecording
|
|
}
|
|
if dec.VMTrace != nil {
|
|
c.VMTrace = *dec.VMTrace
|
|
}
|
|
if dec.VMTraceJsonConfig != nil {
|
|
c.VMTraceJsonConfig = *dec.VMTraceJsonConfig
|
|
}
|
|
if dec.DocRoot != nil {
|
|
c.DocRoot = *dec.DocRoot
|
|
}
|
|
if dec.RPCGasCap != nil {
|
|
c.RPCGasCap = *dec.RPCGasCap
|
|
}
|
|
if dec.RPCEVMTimeout != nil {
|
|
c.RPCEVMTimeout = *dec.RPCEVMTimeout
|
|
}
|
|
if dec.RPCTxFeeCap != nil {
|
|
c.RPCTxFeeCap = *dec.RPCTxFeeCap
|
|
}
|
|
if dec.OverrideCancun != nil {
|
|
c.OverrideCancun = dec.OverrideCancun
|
|
}
|
|
if dec.OverrideVerkle != nil {
|
|
c.OverrideVerkle = dec.OverrideVerkle
|
|
}
|
|
return nil
|
|
}
|