diff --git a/beacon-chain/execution/BUILD.bazel b/beacon-chain/execution/BUILD.bazel index 94c796ffe289..d0d3cda67ca7 100644 --- a/beacon-chain/execution/BUILD.bazel +++ b/beacon-chain/execution/BUILD.bazel @@ -5,7 +5,6 @@ go_library( srcs = [ "block_cache.go", "block_reader.go", - "check_transition_config.go", "deposit.go", "engine_client.go", "errors.go", @@ -82,7 +81,6 @@ go_test( srcs = [ "block_cache_test.go", "block_reader_test.go", - "check_transition_config_test.go", "deposit_test.go", "engine_client_fuzz_test.go", "engine_client_test.go", @@ -96,7 +94,6 @@ go_test( embed = [":go_default_library"], deps = [ "//async/event:go_default_library", - "//beacon-chain/blockchain/testing:go_default_library", "//beacon-chain/cache/depositcache:go_default_library", "//beacon-chain/core/feed:go_default_library", "//beacon-chain/core/feed/state:go_default_library", @@ -140,6 +137,5 @@ go_test( "@com_github_prometheus_client_golang//prometheus:go_default_library", "@com_github_sirupsen_logrus//:go_default_library", "@com_github_sirupsen_logrus//hooks/test:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", ], ) diff --git a/beacon-chain/execution/check_transition_config.go b/beacon-chain/execution/check_transition_config.go deleted file mode 100644 index d9254edcebcc..000000000000 --- a/beacon-chain/execution/check_transition_config.go +++ /dev/null @@ -1,168 +0,0 @@ -package execution - -import ( - "context" - "errors" - "math" - "math/big" - "time" - - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/holiman/uint256" - "github.com/prysmaticlabs/prysm/v4/beacon-chain/core/blocks" - "github.com/prysmaticlabs/prysm/v4/beacon-chain/core/feed" - statefeed "github.com/prysmaticlabs/prysm/v4/beacon-chain/core/feed/state" - "github.com/prysmaticlabs/prysm/v4/config/params" - "github.com/prysmaticlabs/prysm/v4/network" - pb "github.com/prysmaticlabs/prysm/v4/proto/engine/v1" - "github.com/prysmaticlabs/prysm/v4/time/slots" - "github.com/sirupsen/logrus" -) - -var ( - checkTransitionPollingInterval = time.Second * 10 - logTtdInterval = time.Minute - configMismatchLog = "Configuration mismatch between your execution client and Prysm. " + - "Please check your execution client and restart it with the proper configuration. If this is not done, " + - "your node will not be able to complete the proof-of-stake transition" - needsEnginePortLog = "Could not check execution client configuration. " + - "You are probably connecting to your execution client on the wrong port. For the Ethereum " + - "merge, you will need to connect to your " + - "execution client on port 8551 rather than 8545. This is known as the 'engine API' port and needs to be " + - "authenticated if connecting via HTTP. See our documentation on how to set up this up here " + - "https://docs.prylabs.network/docs/execution-node/authentication" -) - -// Checks the transition configuration between Prysm and the connected execution node to ensure -// there are no differences in terminal block difficulty and block hash. -// If there are any discrepancies, we must log errors to ensure users can resolve -// the problem and be ready for the merge transition. -func (s *Service) checkTransitionConfiguration( - ctx context.Context, blockNotifications chan *feed.Event, -) { - // If Bellatrix fork epoch is not set, we do not run this check. - if params.BeaconConfig().BellatrixForkEpoch == math.MaxUint64 { - return - } - i := new(big.Int) - i.SetString(params.BeaconConfig().TerminalTotalDifficulty, 10) - ttd := new(uint256.Int) - ttd.SetFromBig(i) - cfg := &pb.TransitionConfiguration{ - TerminalTotalDifficulty: ttd.Hex(), - TerminalBlockHash: params.BeaconConfig().TerminalBlockHash[:], - TerminalBlockNumber: big.NewInt(0).Bytes(), // A value of 0 is recommended in the request. - } - err := s.ExchangeTransitionConfiguration(ctx, cfg) - if err != nil { - switch { - case errors.Is(err, ErrConfigMismatch): - log.WithError(err).Fatal(configMismatchLog) - case errors.Is(err, ErrMethodNotFound): - log.WithError(err).Error(needsEnginePortLog) - default: - log.WithError(err).Error("Could not check configuration values between execution and consensus client") - } - } - - // We poll the execution client to see if the transition configuration has changed. - // This serves as a heartbeat to ensure the execution client and Prysm are ready for the - // Bellatrix hard-fork transition. - ticker := time.NewTicker(checkTransitionPollingInterval) - logTtdTicker := time.NewTicker(logTtdInterval) - hasTtdReached := false - defer ticker.Stop() - defer logTtdTicker.Stop() - sub := s.cfg.stateNotifier.StateFeed().Subscribe(blockNotifications) - defer sub.Unsubscribe() - for { - select { - case <-ctx.Done(): - return - case <-sub.Err(): - return - case ev := <-blockNotifications: - data, ok := ev.Data.(*statefeed.BlockProcessedData) - if !ok { - continue - } - isExecutionBlock, err := blocks.IsExecutionBlock(data.SignedBlock.Block().Body()) - if err != nil { - log.WithError(err).Debug("Could not check whether signed block is execution block") - continue - } - if isExecutionBlock { - log.Debug("PoS transition is complete, no longer checking for configuration changes") - return - } - case tm := <-ticker.C: - ctx, cancel := context.WithDeadline(ctx, tm.Add(network.DefaultRPCHTTPTimeout)) - err = s.ExchangeTransitionConfiguration(ctx, cfg) - s.handleExchangeConfigurationError(err) - cancel() - case <-logTtdTicker.C: - currentEpoch := slots.ToEpoch(slots.CurrentSlot(s.chainStartData.GetGenesisTime())) - if currentEpoch >= params.BeaconConfig().BellatrixForkEpoch && !hasTtdReached { - hasTtdReached, err = s.logTtdStatus(ctx, ttd) - if err != nil { - log.WithError(err).Error("Could not log ttd status") - } - } - } - } -} - -// We check if there is a configuration mismatch error between the execution client -// and the Prysm beacon node. If so, we need to log errors in the node as it cannot successfully -// complete the merge transition for the Bellatrix hard fork. -func (s *Service) handleExchangeConfigurationError(err error) { - if err == nil { - // If there is no error in checking the exchange configuration error, we clear - // the run error of the service if we had previously set it to ErrConfigMismatch. - if errors.Is(s.runError, ErrConfigMismatch) { - s.runError = nil - } - return - } - // If the error is a configuration mismatch, we set a runtime error in the service. - if errors.Is(err, ErrConfigMismatch) { - s.runError = err - log.WithError(err).Error(configMismatchLog) - return - } else if errors.Is(err, ErrMethodNotFound) { - log.WithError(err).Error(needsEnginePortLog) - return - } - log.WithError(err).Error("Could not check configuration values between execution and consensus client") -} - -// Logs the terminal total difficulty status. -func (s *Service) logTtdStatus(ctx context.Context, ttd *uint256.Int) (bool, error) { - latest, err := s.LatestExecutionBlock(ctx) - switch { - case errors.Is(err, hexutil.ErrEmptyString): - return false, nil - case err != nil: - return false, err - case latest == nil: - return false, errors.New("latest block is nil") - case latest.TotalDifficulty == "": - return false, nil - default: - } - latestTtd, err := hexutil.DecodeBig(latest.TotalDifficulty) - if err != nil { - return false, err - } - if latestTtd.Cmp(ttd.ToBig()) >= 0 { - return true, nil - } - log.WithFields(logrus.Fields{ - "latestDifficulty": latestTtd.String(), - "terminalDifficulty": ttd.ToBig().String(), - "network": params.BeaconConfig().ConfigName, - }).Info("Ready for The Merge") - - totalTerminalDifficulty.Set(float64(latestTtd.Uint64())) - return false, nil -} diff --git a/beacon-chain/execution/check_transition_config_test.go b/beacon-chain/execution/check_transition_config_test.go deleted file mode 100644 index 11685f714949..000000000000 --- a/beacon-chain/execution/check_transition_config_test.go +++ /dev/null @@ -1,260 +0,0 @@ -package execution - -import ( - "context" - "encoding/json" - "errors" - "math/big" - "net/http" - "net/http/httptest" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - gethtypes "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/rpc" - "github.com/holiman/uint256" - mockChain "github.com/prysmaticlabs/prysm/v4/beacon-chain/blockchain/testing" - "github.com/prysmaticlabs/prysm/v4/beacon-chain/core/feed" - statefeed "github.com/prysmaticlabs/prysm/v4/beacon-chain/core/feed/state" - mocks "github.com/prysmaticlabs/prysm/v4/beacon-chain/execution/testing" - fieldparams "github.com/prysmaticlabs/prysm/v4/config/fieldparams" - "github.com/prysmaticlabs/prysm/v4/config/params" - "github.com/prysmaticlabs/prysm/v4/consensus-types/blocks" - pb "github.com/prysmaticlabs/prysm/v4/proto/engine/v1" - ethpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1" - "github.com/prysmaticlabs/prysm/v4/testing/require" - logTest "github.com/sirupsen/logrus/hooks/test" - "google.golang.org/protobuf/proto" -) - -func Test_checkTransitionConfiguration(t *testing.T) { - params.SetupTestConfigCleanup(t) - cfg := params.BeaconConfig().Copy() - cfg.BellatrixForkEpoch = 0 - params.OverrideBeaconConfig(cfg) - hook := logTest.NewGlobal() - - t.Run("context canceled", func(t *testing.T) { - ctx := context.Background() - m := &mocks.EngineClient{} - m.Err = errors.New("something went wrong") - - srv := setupTransitionConfigTest(t) - srv.cfg.stateNotifier = &mockChain.MockStateNotifier{} - checkTransitionPollingInterval = time.Millisecond - ctx, cancel := context.WithCancel(ctx) - go srv.checkTransitionConfiguration(ctx, make(chan *feed.Event, 1)) - <-time.After(100 * time.Millisecond) - cancel() - require.LogsContain(t, hook, "Could not check configuration values") - }) - - t.Run("block containing execution payload exits routine", func(t *testing.T) { - ctx := context.Background() - m := &mocks.EngineClient{} - m.Err = errors.New("something went wrong") - srv := setupTransitionConfigTest(t) - srv.cfg.stateNotifier = &mockChain.MockStateNotifier{} - - checkTransitionPollingInterval = time.Millisecond - ctx, cancel := context.WithCancel(ctx) - exit := make(chan bool) - notification := make(chan *feed.Event) - go func() { - srv.checkTransitionConfiguration(ctx, notification) - exit <- true - }() - payload := emptyPayload() - payload.GasUsed = 21000 - wrappedBlock, err := blocks.NewSignedBeaconBlock(ðpb.SignedBeaconBlockBellatrix{ - Block: ðpb.BeaconBlockBellatrix{ - Body: ðpb.BeaconBlockBodyBellatrix{ - ExecutionPayload: payload, - }, - }}, - ) - require.NoError(t, err) - notification <- &feed.Event{ - Data: &statefeed.BlockProcessedData{ - SignedBlock: wrappedBlock, - }, - Type: statefeed.BlockProcessed, - } - <-exit - cancel() - require.LogsContain(t, hook, "PoS transition is complete, no longer checking") - }) -} - -func TestService_handleExchangeConfigurationError(t *testing.T) { - hook := logTest.NewGlobal() - t.Run("clears existing service error", func(t *testing.T) { - srv := setupTransitionConfigTest(t) - srv.isRunning = true - srv.runError = ErrConfigMismatch - srv.handleExchangeConfigurationError(nil) - require.Equal(t, true, srv.Status() == nil) - }) - t.Run("does not clear existing service error if wrong kind", func(t *testing.T) { - srv := setupTransitionConfigTest(t) - srv.isRunning = true - err := errors.New("something else went wrong") - srv.runError = err - srv.handleExchangeConfigurationError(nil) - require.ErrorIs(t, err, srv.Status()) - }) - t.Run("sets service error on config mismatch", func(t *testing.T) { - srv := setupTransitionConfigTest(t) - srv.isRunning = true - srv.handleExchangeConfigurationError(ErrConfigMismatch) - require.Equal(t, ErrConfigMismatch, srv.Status()) - require.LogsContain(t, hook, configMismatchLog) - }) - t.Run("does not set service error if unrelated problem", func(t *testing.T) { - srv := setupTransitionConfigTest(t) - srv.isRunning = true - srv.handleExchangeConfigurationError(errors.New("foo")) - require.Equal(t, true, srv.Status() == nil) - require.LogsContain(t, hook, "Could not check configuration values") - }) -} - -func setupTransitionConfigTest(t testing.TB) *Service { - fix := fixtures() - request, ok := fix["TransitionConfiguration"].(*pb.TransitionConfiguration) - require.Equal(t, true, ok) - resp, ok := proto.Clone(request).(*pb.TransitionConfiguration) - require.Equal(t, true, ok) - - srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "application/json") - defer func() { - require.NoError(t, r.Body.Close()) - }() - - // Change the terminal block hash. - h := common.BytesToHash([]byte("foo")) - resp.TerminalBlockHash = h[:] - respJSON := map[string]interface{}{ - "jsonrpc": "2.0", - "id": 1, - "result": resp, - } - require.NoError(t, json.NewEncoder(w).Encode(respJSON)) - })) - defer srv.Close() - - rpcClient, err := rpc.DialHTTP(srv.URL) - require.NoError(t, err) - defer rpcClient.Close() - - service := &Service{ - cfg: &config{}, - } - service.rpcClient = rpcClient - return service -} - -func TestService_logTtdStatus(t *testing.T) { - srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "application/json") - defer func() { - require.NoError(t, r.Body.Close()) - }() - - resp := &pb.ExecutionBlock{ - Header: gethtypes.Header{ - ParentHash: common.Hash{}, - UncleHash: common.Hash{}, - Coinbase: common.Address{}, - Root: common.Hash{}, - TxHash: common.Hash{}, - ReceiptHash: common.Hash{}, - Bloom: gethtypes.Bloom{}, - Difficulty: big.NewInt(1), - Number: big.NewInt(2), - GasLimit: 3, - GasUsed: 4, - Time: 5, - Extra: nil, - MixDigest: common.Hash{}, - Nonce: gethtypes.BlockNonce{}, - BaseFee: big.NewInt(6), - }, - TotalDifficulty: "0x12345678", - } - respJSON := map[string]interface{}{ - "jsonrpc": "2.0", - "id": 1, - "result": resp, - } - require.NoError(t, json.NewEncoder(w).Encode(respJSON)) - })) - defer srv.Close() - - rpcClient, err := rpc.DialHTTP(srv.URL) - require.NoError(t, err) - defer rpcClient.Close() - - service := &Service{ - cfg: &config{}, - } - service.rpcClient = rpcClient - - ttd := new(uint256.Int) - reached, err := service.logTtdStatus(context.Background(), ttd.SetUint64(24343)) - require.NoError(t, err) - require.Equal(t, true, reached) - - reached, err = service.logTtdStatus(context.Background(), ttd.SetUint64(323423484)) - require.NoError(t, err) - require.Equal(t, false, reached) -} - -func TestService_logTtdStatus_NotSyncedClient(t *testing.T) { - srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "application/json") - defer func() { - require.NoError(t, r.Body.Close()) - }() - - resp := (*pb.ExecutionBlock)(nil) // Nil response when a client is not synced - respJSON := map[string]interface{}{ - "jsonrpc": "2.0", - "id": 1, - "result": resp, - } - require.NoError(t, json.NewEncoder(w).Encode(respJSON)) - })) - defer srv.Close() - - rpcClient, err := rpc.DialHTTP(srv.URL) - require.NoError(t, err) - defer rpcClient.Close() - - service := &Service{ - cfg: &config{}, - } - service.rpcClient = rpcClient - - ttd := new(uint256.Int) - reached, err := service.logTtdStatus(context.Background(), ttd.SetUint64(24343)) - require.ErrorContains(t, "missing required field 'parentHash' for Header", err) - require.Equal(t, false, reached) -} - -func emptyPayload() *pb.ExecutionPayload { - return &pb.ExecutionPayload{ - ParentHash: make([]byte, fieldparams.RootLength), - FeeRecipient: make([]byte, fieldparams.FeeRecipientLength), - StateRoot: make([]byte, fieldparams.RootLength), - ReceiptsRoot: make([]byte, fieldparams.RootLength), - LogsBloom: make([]byte, fieldparams.LogsBloomLength), - PrevRandao: make([]byte, fieldparams.RootLength), - BaseFeePerGas: make([]byte, fieldparams.RootLength), - BlockHash: make([]byte, fieldparams.RootLength), - Transactions: make([][]byte, 0), - ExtraData: make([]byte, 0), - } -} diff --git a/beacon-chain/execution/engine_client.go b/beacon-chain/execution/engine_client.go index 95a5c11259bc..8711b4cc5d51 100644 --- a/beacon-chain/execution/engine_client.go +++ b/beacon-chain/execution/engine_client.go @@ -39,7 +39,6 @@ var ( ForkchoiceUpdatedMethodV2, GetPayloadMethod, GetPayloadMethodV2, - ExchangeTransitionConfigurationMethod, GetPayloadBodiesByHashV1, GetPayloadBodiesByRangeV1, } @@ -62,8 +61,6 @@ const ( // GetPayloadMethodV2 v2 request string for JSON-RPC. GetPayloadMethodV2 = "engine_getPayloadV2" GetPayloadMethodV3 = "engine_getPayloadV3" - // ExchangeTransitionConfigurationMethod v1 request string for JSON-RPC. - ExchangeTransitionConfigurationMethod = "engine_exchangeTransitionConfigurationV1" // BlockByHashMethod request string for JSON-RPC. BlockByHashMethod = "eth_getBlockByHash" // BlockByNumberMethod request string for JSON-RPC. @@ -106,9 +103,6 @@ type EngineCaller interface { ctx context.Context, state *pb.ForkchoiceState, attrs payloadattribute.Attributer, ) (*pb.PayloadIDBytes, []byte, error) GetPayload(ctx context.Context, payloadId [8]byte, slot primitives.Slot) (interfaces.ExecutionData, *pb.BlobsBundle, bool, error) - ExchangeTransitionConfiguration( - ctx context.Context, cfg *pb.TransitionConfiguration, - ) error ExecutionBlockByHash(ctx context.Context, hash common.Hash, withTxs bool) (*pb.ExecutionBlock, error) GetTerminalBlockHash(ctx context.Context, transitionTime uint64) ([]byte, bool, error) } @@ -299,51 +293,6 @@ func (s *Service) GetPayload(ctx context.Context, payloadId [8]byte, slot primit return ed, nil, false, nil } -// ExchangeTransitionConfiguration calls the engine_exchangeTransitionConfigurationV1 method via JSON-RPC. -func (s *Service) ExchangeTransitionConfiguration( - ctx context.Context, cfg *pb.TransitionConfiguration, -) error { - ctx, span := trace.StartSpan(ctx, "powchain.engine-api-client.ExchangeTransitionConfiguration") - defer span.End() - - // We set terminal block number to 0 as the parameter is not set on the consensus layer. - zeroBigNum := big.NewInt(0) - cfg.TerminalBlockNumber = zeroBigNum.Bytes() - d := time.Now().Add(defaultEngineTimeout) - ctx, cancel := context.WithDeadline(ctx, d) - defer cancel() - result := &pb.TransitionConfiguration{} - if err := s.rpcClient.CallContext(ctx, result, ExchangeTransitionConfigurationMethod, cfg); err != nil { - return handleRPCError(err) - } - - // We surface an error to the user if local configuration settings mismatch - // according to the response from the execution node. - cfgTerminalHash := params.BeaconConfig().TerminalBlockHash[:] - if !bytes.Equal(cfgTerminalHash, result.TerminalBlockHash) { - return errors.Wrapf( - ErrConfigMismatch, - "got %#x from execution node, wanted %#x", - result.TerminalBlockHash, - cfgTerminalHash, - ) - } - ttdCfg := params.BeaconConfig().TerminalTotalDifficulty - ttdResult, err := hexutil.DecodeBig(result.TerminalTotalDifficulty) - if err != nil { - return errors.Wrap(err, "could not decode received terminal total difficulty") - } - if ttdResult.String() != ttdCfg { - return errors.Wrapf( - ErrConfigMismatch, - "got %s from execution node, wanted %s", - ttdResult.String(), - ttdCfg, - ) - } - return nil -} - func (s *Service) ExchangeCapabilities(ctx context.Context) ([]string, error) { ctx, span := trace.StartSpan(ctx, "powchain.engine-api-client.ExchangeCapabilities") defer span.End() diff --git a/beacon-chain/execution/engine_client_fuzz_test.go b/beacon-chain/execution/engine_client_fuzz_test.go index a1210f7615f7..363983df58fa 100644 --- a/beacon-chain/execution/engine_client_fuzz_test.go +++ b/beacon-chain/execution/engine_client_fuzz_test.go @@ -13,7 +13,6 @@ import ( "github.com/ethereum/go-ethereum/beacon/engine" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" "github.com/pkg/errors" "github.com/prysmaticlabs/prysm/v4/beacon-chain/execution" @@ -72,47 +71,6 @@ func FuzzForkChoiceResponse(f *testing.F) { }) } -func FuzzExchangeTransitionConfiguration(f *testing.F) { - valHash := common.Hash([32]byte{0xFF, 0x01}) - ttd := hexutil.Big(*big.NewInt(math.MaxInt)) - seed := &engine.TransitionConfigurationV1{ - TerminalTotalDifficulty: &ttd, - TerminalBlockHash: valHash, - TerminalBlockNumber: hexutil.Uint64(math.MaxUint64), - } - - output, err := json.Marshal(seed) - assert.NoError(f, err) - f.Add(output) - f.Fuzz(func(t *testing.T, jsonBlob []byte) { - gethResp := &engine.TransitionConfigurationV1{} - prysmResp := &pb.TransitionConfiguration{} - gethErr := json.Unmarshal(jsonBlob, gethResp) - prysmErr := json.Unmarshal(jsonBlob, prysmResp) - assert.Equal(t, gethErr != nil, prysmErr != nil, fmt.Sprintf("geth and prysm unmarshaller return inconsistent errors. %v and %v", gethErr, prysmErr)) - // Nothing to marshal if we have an error. - if gethErr != nil { - return - } - gethBlob, gethErr := json.Marshal(gethResp) - prysmBlob, prysmErr := json.Marshal(prysmResp) - if gethErr != nil { - t.Errorf("%s %s", gethResp.TerminalTotalDifficulty.String(), prysmResp.TerminalTotalDifficulty) - } - assert.Equal(t, gethErr != nil, prysmErr != nil, fmt.Sprintf("geth and prysm unmarshaller return inconsistent errors. %v and %v", gethErr, prysmErr)) - if gethErr != nil { - t.Errorf("%s %s", gethResp.TerminalTotalDifficulty.String(), prysmResp.TerminalTotalDifficulty) - } - newGethResp := &engine.TransitionConfigurationV1{} - newGethErr := json.Unmarshal(prysmBlob, newGethResp) - assert.NoError(t, newGethErr) - - newGethResp2 := &engine.TransitionConfigurationV1{} - newGethErr = json.Unmarshal(gethBlob, newGethResp2) - assert.NoError(t, newGethErr) - }) -} - func FuzzExecutionPayload(f *testing.F) { logsBloom := [256]byte{'j', 'u', 'n', 'k'} execData := &engine.ExecutionPayloadEnvelope{ diff --git a/beacon-chain/execution/engine_client_test.go b/beacon-chain/execution/engine_client_test.go index 8abb2812a0ee..c4074adfee2d 100644 --- a/beacon-chain/execution/engine_client_test.go +++ b/beacon-chain/execution/engine_client_test.go @@ -33,7 +33,6 @@ import ( "github.com/prysmaticlabs/prysm/v4/testing/require" "github.com/prysmaticlabs/prysm/v4/testing/util" logTest "github.com/sirupsen/logrus/hooks/test" - "google.golang.org/protobuf/proto" ) var ( @@ -135,12 +134,6 @@ func TestClient_IPC(t *testing.T) { require.NoError(t, err) require.DeepEqual(t, bytesutil.ToBytes32(want.LatestValidHash), bytesutil.ToBytes32(latestValidHash)) }) - t.Run(ExchangeTransitionConfigurationMethod, func(t *testing.T) { - want, ok := fix["TransitionConfiguration"].(*pb.TransitionConfiguration) - require.Equal(t, true, ok) - err := srv.ExchangeTransitionConfiguration(ctx, want) - require.NoError(t, err) - }) t.Run(BlockByNumberMethod, func(t *testing.T) { want, ok := fix["ExecutionBlock"].(*pb.ExecutionBlock) require.Equal(t, true, ok) @@ -674,44 +667,6 @@ func TestClient_HTTP(t *testing.T) { require.NoError(t, err) require.DeepEqual(t, want, resp) }) - t.Run(ExchangeTransitionConfigurationMethod, func(t *testing.T) { - want, ok := fix["TransitionConfiguration"].(*pb.TransitionConfiguration) - require.Equal(t, true, ok) - encodedReq, err := json.Marshal(want) - require.NoError(t, err) - srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "application/json") - defer func() { - require.NoError(t, r.Body.Close()) - }() - enc, err := io.ReadAll(r.Body) - require.NoError(t, err) - jsonRequestString := string(enc) - // We expect the JSON string RPC request contains the right arguments. - require.Equal(t, true, strings.Contains( - jsonRequestString, string(encodedReq), - )) - resp := map[string]interface{}{ - "jsonrpc": "2.0", - "id": 1, - "result": want, - } - err = json.NewEncoder(w).Encode(resp) - require.NoError(t, err) - })) - defer srv.Close() - - rpcClient, err := rpc.DialHTTP(srv.URL) - require.NoError(t, err) - defer rpcClient.Close() - - client := &Service{} - client.rpcClient = rpcClient - - // We call the RPC method via HTTP and expect a proper result. - err = client.ExchangeTransitionConfiguration(ctx, want) - require.NoError(t, err) - }) t.Run(BlockByHashMethod, func(t *testing.T) { arg := common.BytesToHash([]byte("foo")) want, ok := fix["ExecutionBlock"].(*pb.ExecutionBlock) @@ -1190,78 +1145,6 @@ func Test_tDStringToUint256(t *testing.T) { require.ErrorContains(t, "hex number > 256 bits", err) } -func TestExchangeTransitionConfiguration(t *testing.T) { - fix := fixtures() - ctx := context.Background() - t.Run("wrong terminal block hash", func(t *testing.T) { - request, ok := fix["TransitionConfiguration"].(*pb.TransitionConfiguration) - require.Equal(t, true, ok) - resp, ok := proto.Clone(request).(*pb.TransitionConfiguration) - require.Equal(t, true, ok) - - srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "application/json") - defer func() { - require.NoError(t, r.Body.Close()) - }() - - // Change the terminal block hash. - h := common.BytesToHash([]byte("foo")) - resp.TerminalBlockHash = h[:] - respJSON := map[string]interface{}{ - "jsonrpc": "2.0", - "id": 1, - "result": resp, - } - require.NoError(t, json.NewEncoder(w).Encode(respJSON)) - })) - defer srv.Close() - - rpcClient, err := rpc.DialHTTP(srv.URL) - require.NoError(t, err) - defer rpcClient.Close() - - service := &Service{} - service.rpcClient = rpcClient - - err = service.ExchangeTransitionConfiguration(ctx, request) - require.Equal(t, true, errors.Is(err, ErrConfigMismatch)) - }) - t.Run("wrong terminal total difficulty", func(t *testing.T) { - request, ok := fix["TransitionConfiguration"].(*pb.TransitionConfiguration) - require.Equal(t, true, ok) - resp, ok := proto.Clone(request).(*pb.TransitionConfiguration) - require.Equal(t, true, ok) - - srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "application/json") - defer func() { - require.NoError(t, r.Body.Close()) - }() - - // Change the terminal block hash. - resp.TerminalTotalDifficulty = "0x1" - respJSON := map[string]interface{}{ - "jsonrpc": "2.0", - "id": 1, - "result": resp, - } - require.NoError(t, json.NewEncoder(w).Encode(respJSON)) - })) - defer srv.Close() - - rpcClient, err := rpc.DialHTTP(srv.URL) - require.NoError(t, err) - defer rpcClient.Close() - - service := &Service{} - service.rpcClient = rpcClient - - err = service.ExchangeTransitionConfiguration(ctx, request) - require.Equal(t, true, errors.Is(err, ErrConfigMismatch)) - }) -} - type customError struct { code int timeout bool @@ -1549,13 +1432,6 @@ func fixtures() map[string]interface{} { }, PayloadId: &id, } - b, _ := new(big.Int).SetString(params.BeaconConfig().TerminalTotalDifficulty, 10) - ttd, _ := uint256.FromBig(b) - transitionCfg := &pb.TransitionConfiguration{ - TerminalBlockHash: params.BeaconConfig().TerminalBlockHash[:], - TerminalTotalDifficulty: ttd.Hex(), - TerminalBlockNumber: big.NewInt(0).Bytes(), - } validStatus := &pb.PayloadStatus{ Status: pb.PayloadStatus_VALID, LatestValidHash: foo[:], @@ -1598,7 +1474,6 @@ func fixtures() map[string]interface{} { "ForkchoiceUpdatedSyncingResponse": forkChoiceSyncingResp, "ForkchoiceUpdatedAcceptedResponse": forkChoiceAcceptedResp, "ForkchoiceUpdatedInvalidResponse": forkChoiceInvalidResp, - "TransitionConfiguration": transitionCfg, } } @@ -1905,17 +1780,6 @@ func (*testEngineService) GetPayloadV2( return item } -func (*testEngineService) ExchangeTransitionConfigurationV1( - _ context.Context, _ *pb.TransitionConfiguration, -) *pb.TransitionConfiguration { - fix := fixtures() - item, ok := fix["TransitionConfiguration"].(*pb.TransitionConfiguration) - if !ok { - panic("not found") - } - return item -} - func (*testEngineService) ForkchoiceUpdatedV1( _ context.Context, _ *pb.ForkchoiceState, _ *pb.PayloadAttributes, ) *ForkchoiceUpdatedResponse { diff --git a/beacon-chain/execution/metrics.go b/beacon-chain/execution/metrics.go index a1878912201f..1fc2027b4fe7 100644 --- a/beacon-chain/execution/metrics.go +++ b/beacon-chain/execution/metrics.go @@ -6,10 +6,6 @@ import ( ) var ( - totalTerminalDifficulty = promauto.NewGauge(prometheus.GaugeOpts{ - Name: "total_terminal_difficulty", - Help: "The total terminal difficulty of the execution chain before merge", - }) newPayloadLatency = promauto.NewHistogram( prometheus.HistogramOpts{ Name: "new_payload_v1_latency_milliseconds", diff --git a/beacon-chain/execution/service.go b/beacon-chain/execution/service.go index 831c2bd70229..386d663498d2 100644 --- a/beacon-chain/execution/service.go +++ b/beacon-chain/execution/service.go @@ -22,7 +22,6 @@ import ( "github.com/prometheus/client_golang/prometheus/promauto" "github.com/prysmaticlabs/prysm/v4/beacon-chain/cache" "github.com/prysmaticlabs/prysm/v4/beacon-chain/cache/depositsnapshot" - "github.com/prysmaticlabs/prysm/v4/beacon-chain/core/feed" statefeed "github.com/prysmaticlabs/prysm/v4/beacon-chain/core/feed/state" "github.com/prysmaticlabs/prysm/v4/beacon-chain/core/transition" "github.com/prysmaticlabs/prysm/v4/beacon-chain/db" @@ -242,9 +241,6 @@ func (s *Service) Start() { // Poll the execution client connection and fallback if errors occur. s.pollConnectionStatus(s.ctx) - // Check transition configuration for the engine API client in the background. - go s.checkTransitionConfiguration(s.ctx, make(chan *feed.Event, 1)) - go s.run(s.ctx.Done()) } diff --git a/beacon-chain/execution/testing/mock_engine_client.go b/beacon-chain/execution/testing/mock_engine_client.go index 4acbba0efb19..6216aade8926 100644 --- a/beacon-chain/execution/testing/mock_engine_client.go +++ b/beacon-chain/execution/testing/mock_engine_client.go @@ -83,11 +83,6 @@ func (e *EngineClient) GetPayload(_ context.Context, _ [8]byte, s primitives.Slo return p, nil, e.BuilderOverride, e.ErrGetPayload } -// ExchangeTransitionConfiguration -- -func (e *EngineClient) ExchangeTransitionConfiguration(_ context.Context, _ *pb.TransitionConfiguration) error { - return e.Err -} - // LatestExecutionBlock -- func (e *EngineClient) LatestExecutionBlock(_ context.Context) (*pb.ExecutionBlock, error) { return e.ExecutionBlock, e.ErrLatestExecBlock diff --git a/proto/engine/v1/execution_engine.pb.go b/proto/engine/v1/execution_engine.pb.go index 45a135302c84..9189614b229b 100755 --- a/proto/engine/v1/execution_engine.pb.go +++ b/proto/engine/v1/execution_engine.pb.go @@ -7,13 +7,12 @@ package enginev1 import ( - reflect "reflect" - sync "sync" - github_com_prysmaticlabs_prysm_v4_consensus_types_primitives "github.com/prysmaticlabs/prysm/v4/consensus-types/primitives" _ "github.com/prysmaticlabs/prysm/v4/proto/eth/ext" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) const ( @@ -78,7 +77,7 @@ func (x PayloadStatus_Status) Number() protoreflect.EnumNumber { // Deprecated: Use PayloadStatus_Status.Descriptor instead. func (PayloadStatus_Status) EnumDescriptor() ([]byte, []int) { - return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{13, 0} + return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{12, 0} } type ExecutionPayload struct { @@ -1232,69 +1231,6 @@ func (x *ExecutionPayloadHeaderDeneb) GetExcessBlobGas() uint64 { return 0 } -type TransitionConfiguration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TerminalTotalDifficulty string `protobuf:"bytes,1,opt,name=terminal_total_difficulty,json=terminalTotalDifficulty,proto3" json:"terminal_total_difficulty,omitempty"` - TerminalBlockHash []byte `protobuf:"bytes,2,opt,name=terminal_block_hash,json=terminalBlockHash,proto3" json:"terminal_block_hash,omitempty"` - TerminalBlockNumber []byte `protobuf:"bytes,3,opt,name=terminal_block_number,json=terminalBlockNumber,proto3" json:"terminal_block_number,omitempty"` -} - -func (x *TransitionConfiguration) Reset() { - *x = TransitionConfiguration{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TransitionConfiguration) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TransitionConfiguration) ProtoMessage() {} - -func (x *TransitionConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TransitionConfiguration.ProtoReflect.Descriptor instead. -func (*TransitionConfiguration) Descriptor() ([]byte, []int) { - return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{9} -} - -func (x *TransitionConfiguration) GetTerminalTotalDifficulty() string { - if x != nil { - return x.TerminalTotalDifficulty - } - return "" -} - -func (x *TransitionConfiguration) GetTerminalBlockHash() []byte { - if x != nil { - return x.TerminalBlockHash - } - return nil -} - -func (x *TransitionConfiguration) GetTerminalBlockNumber() []byte { - if x != nil { - return x.TerminalBlockNumber - } - return nil -} - type PayloadAttributes struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1308,7 +1244,7 @@ type PayloadAttributes struct { func (x *PayloadAttributes) Reset() { *x = PayloadAttributes{} if protoimpl.UnsafeEnabled { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[10] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1321,7 +1257,7 @@ func (x *PayloadAttributes) String() string { func (*PayloadAttributes) ProtoMessage() {} func (x *PayloadAttributes) ProtoReflect() protoreflect.Message { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[10] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1334,7 +1270,7 @@ func (x *PayloadAttributes) ProtoReflect() protoreflect.Message { // Deprecated: Use PayloadAttributes.ProtoReflect.Descriptor instead. func (*PayloadAttributes) Descriptor() ([]byte, []int) { - return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{10} + return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{9} } func (x *PayloadAttributes) GetTimestamp() uint64 { @@ -1372,7 +1308,7 @@ type PayloadAttributesV2 struct { func (x *PayloadAttributesV2) Reset() { *x = PayloadAttributesV2{} if protoimpl.UnsafeEnabled { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[11] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1385,7 +1321,7 @@ func (x *PayloadAttributesV2) String() string { func (*PayloadAttributesV2) ProtoMessage() {} func (x *PayloadAttributesV2) ProtoReflect() protoreflect.Message { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[11] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1398,7 +1334,7 @@ func (x *PayloadAttributesV2) ProtoReflect() protoreflect.Message { // Deprecated: Use PayloadAttributesV2.ProtoReflect.Descriptor instead. func (*PayloadAttributesV2) Descriptor() ([]byte, []int) { - return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{11} + return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{10} } func (x *PayloadAttributesV2) GetTimestamp() uint64 { @@ -1444,7 +1380,7 @@ type PayloadAttributesV3 struct { func (x *PayloadAttributesV3) Reset() { *x = PayloadAttributesV3{} if protoimpl.UnsafeEnabled { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[12] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1457,7 +1393,7 @@ func (x *PayloadAttributesV3) String() string { func (*PayloadAttributesV3) ProtoMessage() {} func (x *PayloadAttributesV3) ProtoReflect() protoreflect.Message { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[12] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1470,7 +1406,7 @@ func (x *PayloadAttributesV3) ProtoReflect() protoreflect.Message { // Deprecated: Use PayloadAttributesV3.ProtoReflect.Descriptor instead. func (*PayloadAttributesV3) Descriptor() ([]byte, []int) { - return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{12} + return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{11} } func (x *PayloadAttributesV3) GetTimestamp() uint64 { @@ -1521,7 +1457,7 @@ type PayloadStatus struct { func (x *PayloadStatus) Reset() { *x = PayloadStatus{} if protoimpl.UnsafeEnabled { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[13] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1534,7 +1470,7 @@ func (x *PayloadStatus) String() string { func (*PayloadStatus) ProtoMessage() {} func (x *PayloadStatus) ProtoReflect() protoreflect.Message { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[13] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1547,7 +1483,7 @@ func (x *PayloadStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use PayloadStatus.ProtoReflect.Descriptor instead. func (*PayloadStatus) Descriptor() ([]byte, []int) { - return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{13} + return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{12} } func (x *PayloadStatus) GetStatus() PayloadStatus_Status { @@ -1584,7 +1520,7 @@ type ForkchoiceState struct { func (x *ForkchoiceState) Reset() { *x = ForkchoiceState{} if protoimpl.UnsafeEnabled { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[14] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1597,7 +1533,7 @@ func (x *ForkchoiceState) String() string { func (*ForkchoiceState) ProtoMessage() {} func (x *ForkchoiceState) ProtoReflect() protoreflect.Message { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[14] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1610,7 +1546,7 @@ func (x *ForkchoiceState) ProtoReflect() protoreflect.Message { // Deprecated: Use ForkchoiceState.ProtoReflect.Descriptor instead. func (*ForkchoiceState) Descriptor() ([]byte, []int) { - return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{14} + return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{13} } func (x *ForkchoiceState) GetHeadBlockHash() []byte { @@ -1648,7 +1584,7 @@ type Withdrawal struct { func (x *Withdrawal) Reset() { *x = Withdrawal{} if protoimpl.UnsafeEnabled { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[15] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1661,7 +1597,7 @@ func (x *Withdrawal) String() string { func (*Withdrawal) ProtoMessage() {} func (x *Withdrawal) ProtoReflect() protoreflect.Message { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[15] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1674,7 +1610,7 @@ func (x *Withdrawal) ProtoReflect() protoreflect.Message { // Deprecated: Use Withdrawal.ProtoReflect.Descriptor instead. func (*Withdrawal) Descriptor() ([]byte, []int) { - return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{15} + return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{14} } func (x *Withdrawal) GetIndex() uint64 { @@ -1718,7 +1654,7 @@ type BlobsBundle struct { func (x *BlobsBundle) Reset() { *x = BlobsBundle{} if protoimpl.UnsafeEnabled { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[16] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1731,7 +1667,7 @@ func (x *BlobsBundle) String() string { func (*BlobsBundle) ProtoMessage() {} func (x *BlobsBundle) ProtoReflect() protoreflect.Message { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[16] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1744,7 +1680,7 @@ func (x *BlobsBundle) ProtoReflect() protoreflect.Message { // Deprecated: Use BlobsBundle.ProtoReflect.Descriptor instead. func (*BlobsBundle) Descriptor() ([]byte, []int) { - return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{16} + return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{15} } func (x *BlobsBundle) GetKzgCommitments() [][]byte { @@ -1781,7 +1717,7 @@ type BlindedBlobsBundle struct { func (x *BlindedBlobsBundle) Reset() { *x = BlindedBlobsBundle{} if protoimpl.UnsafeEnabled { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[17] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1794,7 +1730,7 @@ func (x *BlindedBlobsBundle) String() string { func (*BlindedBlobsBundle) ProtoMessage() {} func (x *BlindedBlobsBundle) ProtoReflect() protoreflect.Message { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[17] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1807,7 +1743,7 @@ func (x *BlindedBlobsBundle) ProtoReflect() protoreflect.Message { // Deprecated: Use BlindedBlobsBundle.ProtoReflect.Descriptor instead. func (*BlindedBlobsBundle) Descriptor() ([]byte, []int) { - return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{17} + return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{16} } func (x *BlindedBlobsBundle) GetKzgCommitments() [][]byte { @@ -1842,7 +1778,7 @@ type Blob struct { func (x *Blob) Reset() { *x = Blob{} if protoimpl.UnsafeEnabled { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[18] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1855,7 +1791,7 @@ func (x *Blob) String() string { func (*Blob) ProtoMessage() {} func (x *Blob) ProtoReflect() protoreflect.Message { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[18] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1868,7 +1804,7 @@ func (x *Blob) ProtoReflect() protoreflect.Message { // Deprecated: Use Blob.ProtoReflect.Descriptor instead. func (*Blob) Descriptor() ([]byte, []int) { - return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{18} + return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{17} } func (x *Blob) GetData() []byte { @@ -1889,7 +1825,7 @@ type ExchangeCapabilities struct { func (x *ExchangeCapabilities) Reset() { *x = ExchangeCapabilities{} if protoimpl.UnsafeEnabled { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[19] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1902,7 +1838,7 @@ func (x *ExchangeCapabilities) String() string { func (*ExchangeCapabilities) ProtoMessage() {} func (x *ExchangeCapabilities) ProtoReflect() protoreflect.Message { - mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[19] + mi := &file_proto_engine_v1_execution_engine_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1915,7 +1851,7 @@ func (x *ExchangeCapabilities) ProtoReflect() protoreflect.Message { // Deprecated: Use ExchangeCapabilities.ProtoReflect.Descriptor instead. func (*ExchangeCapabilities) Descriptor() ([]byte, []int) { - return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{19} + return file_proto_engine_v1_execution_engine_proto_rawDescGZIP(), []int{18} } func (x *ExchangeCapabilities) GetSupportedMethods() []string { @@ -2211,141 +2147,129 @@ var file_proto_engine_v1_execution_engine_proto_rawDesc = []byte{ 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x47, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x65, 0x73, 0x73, 0x42, - 0x6c, 0x6f, 0x62, 0x47, 0x61, 0x73, 0x22, 0xb9, 0x01, 0x0a, 0x17, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x19, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x2e, - 0x0a, 0x13, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x32, - 0x0a, 0x15, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x22, 0x9a, 0x01, 0x0a, 0x11, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x27, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x72, - 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, - 0x02, 0x33, 0x32, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x52, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x12, - 0x3e, 0x0a, 0x17, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x65, 0x65, - 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x32, 0x30, 0x52, 0x15, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x22, - 0xe6, 0x01, 0x0a, 0x13, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x56, 0x32, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x27, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x72, 0x61, - 0x6e, 0x64, 0x61, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, - 0x33, 0x32, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x52, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x12, 0x3e, - 0x0a, 0x17, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x65, 0x65, 0x5f, - 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, - 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x32, 0x30, 0x52, 0x15, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x48, - 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, - 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x61, 0x6c, 0x42, 0x06, 0x92, 0xb5, 0x18, 0x02, 0x31, 0x36, 0x52, 0x0b, 0x77, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x22, 0xa7, 0x02, 0x0a, 0x13, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x56, 0x33, - 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x27, - 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x0a, 0x70, 0x72, 0x65, - 0x76, 0x52, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x12, 0x3e, 0x0a, 0x17, 0x73, 0x75, 0x67, 0x67, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, - 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x32, 0x30, - 0x52, 0x15, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x46, 0x65, 0x65, 0x52, 0x65, - 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x06, 0x92, 0xb5, - 0x18, 0x02, 0x31, 0x36, 0x52, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, - 0x73, 0x12, 0x3f, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x15, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, - 0x6f, 0x74, 0x22, 0x92, 0x02, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x40, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, - 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x11, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, - 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x60, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, - 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, - 0x49, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x59, 0x4e, 0x43, 0x49, 0x4e, 0x47, 0x10, - 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, - 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, - 0x5f, 0x48, 0x41, 0x53, 0x48, 0x10, 0x05, 0x22, 0xab, 0x01, 0x0a, 0x0f, 0x46, 0x6f, 0x72, 0x6b, - 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x0f, 0x68, - 0x65, 0x61, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x0d, 0x68, 0x65, - 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2e, 0x0a, 0x0f, 0x73, - 0x61, 0x66, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x0d, 0x73, 0x61, - 0x66, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x38, 0x0a, 0x14, 0x66, - 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, - 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, - 0x32, 0x52, 0x12, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0xd6, 0x01, 0x0a, 0x0a, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x78, 0x0a, 0x0f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x42, 0x4f, 0x82, 0xb5, 0x18, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, - 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x65, - 0x6e, 0x73, 0x75, 0x73, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x69, - 0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x32, 0x30, 0x52, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x9e, - 0x01, 0x0a, 0x0b, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x39, - 0x0a, 0x0f, 0x6b, 0x7a, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x42, 0x10, 0x8a, 0xb5, 0x18, 0x04, 0x3f, 0x2c, 0x34, - 0x38, 0x92, 0xb5, 0x18, 0x04, 0x34, 0x30, 0x39, 0x36, 0x52, 0x0e, 0x6b, 0x7a, 0x67, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x06, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x42, 0x10, 0x8a, 0xb5, 0x18, 0x04, 0x3f, - 0x2c, 0x34, 0x38, 0x92, 0xb5, 0x18, 0x04, 0x34, 0x30, 0x39, 0x36, 0x52, 0x06, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0c, 0x42, 0x14, 0x8a, 0xb5, 0x18, 0x08, 0x3f, 0x2c, 0x31, 0x33, 0x31, 0x30, 0x37, 0x32, - 0x92, 0xb5, 0x18, 0x04, 0x34, 0x30, 0x39, 0x36, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x22, - 0xaa, 0x01, 0x0a, 0x12, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x62, 0x73, - 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x0f, 0x6b, 0x7a, 0x67, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x42, - 0x10, 0x8a, 0xb5, 0x18, 0x04, 0x3f, 0x2c, 0x34, 0x38, 0x92, 0xb5, 0x18, 0x04, 0x34, 0x30, 0x39, - 0x36, 0x52, 0x0e, 0x6b, 0x7a, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x28, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0c, 0x42, 0x10, 0x8a, 0xb5, 0x18, 0x04, 0x3f, 0x2c, 0x34, 0x38, 0x92, 0xb5, 0x18, 0x04, 0x34, - 0x30, 0x39, 0x36, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x12, 0x2f, 0x0a, 0x0a, 0x62, - 0x6c, 0x6f, 0x62, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x42, - 0x10, 0x8a, 0xb5, 0x18, 0x04, 0x3f, 0x2c, 0x33, 0x32, 0x92, 0xb5, 0x18, 0x04, 0x34, 0x30, 0x39, - 0x36, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x62, 0x52, 0x6f, 0x6f, 0x74, 0x73, 0x22, 0x26, 0x0a, 0x04, - 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x1e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x42, 0x0a, 0x8a, 0xb5, 0x18, 0x06, 0x31, 0x33, 0x31, 0x30, 0x37, 0x32, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x43, 0x0a, 0x14, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, - 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x42, 0x96, 0x01, 0x0a, 0x16, 0x6f, 0x72, - 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, - 0x65, 0x2e, 0x76, 0x31, 0x42, 0x14, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, - 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x34, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2f, 0x76, 0x31, 0x3b, - 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x76, 0x31, 0xaa, 0x02, 0x12, 0x45, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, - 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x5c, - 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x6f, 0x62, 0x47, 0x61, 0x73, 0x22, 0x9a, 0x01, 0x0a, 0x11, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x27, 0x0a, 0x0b, 0x70, 0x72, + 0x65, 0x76, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, + 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x52, 0x61, 0x6e, + 0x64, 0x61, 0x6f, 0x12, 0x3e, 0x0a, 0x17, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x32, 0x30, 0x52, 0x15, 0x73, 0x75, + 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, + 0x65, 0x6e, 0x74, 0x22, 0xe6, 0x01, 0x0a, 0x13, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x56, 0x32, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x27, 0x0a, 0x0b, 0x70, 0x72, 0x65, + 0x76, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, + 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x52, 0x61, 0x6e, 0x64, + 0x61, 0x6f, 0x12, 0x3e, 0x0a, 0x17, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, + 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x32, 0x30, 0x52, 0x15, 0x73, 0x75, 0x67, + 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, + 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x75, 0x6d, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x06, 0x92, 0xb5, 0x18, 0x02, 0x31, 0x36, 0x52, + 0x0b, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x22, 0xa7, 0x02, 0x0a, + 0x13, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x56, 0x33, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x12, 0x27, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x61, + 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, + 0x0a, 0x70, 0x72, 0x65, 0x76, 0x52, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x12, 0x3e, 0x0a, 0x17, 0x73, + 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, + 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, + 0x18, 0x02, 0x32, 0x30, 0x52, 0x15, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x46, + 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x77, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x6e, 0x67, 0x69, + 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, + 0x42, 0x06, 0x92, 0xb5, 0x18, 0x02, 0x31, 0x36, 0x52, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x61, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, + 0x15, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x92, 0x02, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x40, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x11, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x0f, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x29, + 0x0a, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x60, 0x0a, 0x06, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x09, 0x0a, 0x05, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x49, + 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x59, 0x4e, 0x43, + 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, 0x45, + 0x44, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x42, + 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x48, 0x41, 0x53, 0x48, 0x10, 0x05, 0x22, 0xab, 0x01, 0x0a, 0x0f, + 0x46, 0x6f, 0x72, 0x6b, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x2e, 0x0a, 0x0f, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, + 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, + 0x52, 0x0d, 0x68, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, + 0x2e, 0x0a, 0x0f, 0x73, 0x61, 0x66, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, + 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, + 0x52, 0x0d, 0x73, 0x61, 0x66, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, + 0x38, 0x0a, 0x14, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, + 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x12, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0xd6, 0x01, 0x0a, 0x0a, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x78, + 0x0a, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x4f, 0x82, 0xb5, 0x18, 0x4b, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, + 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x34, 0x2f, 0x63, + 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, + 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x32, + 0x30, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x22, 0x9e, 0x01, 0x0a, 0x0b, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x42, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x0f, 0x6b, 0x7a, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x42, 0x10, 0x8a, 0xb5, 0x18, + 0x04, 0x3f, 0x2c, 0x34, 0x38, 0x92, 0xb5, 0x18, 0x04, 0x34, 0x30, 0x39, 0x36, 0x52, 0x0e, 0x6b, + 0x7a, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x0a, + 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x42, 0x10, 0x8a, + 0xb5, 0x18, 0x04, 0x3f, 0x2c, 0x34, 0x38, 0x92, 0xb5, 0x18, 0x04, 0x34, 0x30, 0x39, 0x36, 0x52, + 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x62, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x42, 0x14, 0x8a, 0xb5, 0x18, 0x08, 0x3f, 0x2c, 0x31, 0x33, + 0x31, 0x30, 0x37, 0x32, 0x92, 0xb5, 0x18, 0x04, 0x34, 0x30, 0x39, 0x36, 0x52, 0x05, 0x62, 0x6c, + 0x6f, 0x62, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x12, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, 0x42, + 0x6c, 0x6f, 0x62, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x0f, 0x6b, 0x7a, + 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0c, 0x42, 0x10, 0x8a, 0xb5, 0x18, 0x04, 0x3f, 0x2c, 0x34, 0x38, 0x92, 0xb5, 0x18, + 0x04, 0x34, 0x30, 0x39, 0x36, 0x52, 0x0e, 0x6b, 0x7a, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0c, 0x42, 0x10, 0x8a, 0xb5, 0x18, 0x04, 0x3f, 0x2c, 0x34, 0x38, 0x92, + 0xb5, 0x18, 0x04, 0x34, 0x30, 0x39, 0x36, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x12, + 0x2f, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0c, 0x42, 0x10, 0x8a, 0xb5, 0x18, 0x04, 0x3f, 0x2c, 0x33, 0x32, 0x92, 0xb5, 0x18, + 0x04, 0x34, 0x30, 0x39, 0x36, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x62, 0x52, 0x6f, 0x6f, 0x74, 0x73, + 0x22, 0x26, 0x0a, 0x04, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x1e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0a, 0x8a, 0xb5, 0x18, 0x06, 0x31, 0x33, 0x31, 0x30, + 0x37, 0x32, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x43, 0x0a, 0x14, 0x45, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x73, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x42, 0x96, 0x01, + 0x0a, 0x16, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, + 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x14, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, + 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, + 0x2f, 0x76, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, + 0x2f, 0x76, 0x31, 0x3b, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x76, 0x31, 0xaa, 0x02, 0x12, 0x45, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x56, + 0x31, 0xca, 0x02, 0x12, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x45, 0x6e, 0x67, + 0x69, 0x6e, 0x65, 0x5c, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2361,7 +2285,7 @@ func file_proto_engine_v1_execution_engine_proto_rawDescGZIP() []byte { } var file_proto_engine_v1_execution_engine_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_proto_engine_v1_execution_engine_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_proto_engine_v1_execution_engine_proto_msgTypes = make([]protoimpl.MessageInfo, 19) var file_proto_engine_v1_execution_engine_proto_goTypes = []interface{}{ (PayloadStatus_Status)(0), // 0: ethereum.engine.v1.PayloadStatus.Status (*ExecutionPayload)(nil), // 1: ethereum.engine.v1.ExecutionPayload @@ -2373,27 +2297,26 @@ var file_proto_engine_v1_execution_engine_proto_goTypes = []interface{}{ (*ExecutionPayloadHeader)(nil), // 7: ethereum.engine.v1.ExecutionPayloadHeader (*ExecutionPayloadHeaderCapella)(nil), // 8: ethereum.engine.v1.ExecutionPayloadHeaderCapella (*ExecutionPayloadHeaderDeneb)(nil), // 9: ethereum.engine.v1.ExecutionPayloadHeaderDeneb - (*TransitionConfiguration)(nil), // 10: ethereum.engine.v1.TransitionConfiguration - (*PayloadAttributes)(nil), // 11: ethereum.engine.v1.PayloadAttributes - (*PayloadAttributesV2)(nil), // 12: ethereum.engine.v1.PayloadAttributesV2 - (*PayloadAttributesV3)(nil), // 13: ethereum.engine.v1.PayloadAttributesV3 - (*PayloadStatus)(nil), // 14: ethereum.engine.v1.PayloadStatus - (*ForkchoiceState)(nil), // 15: ethereum.engine.v1.ForkchoiceState - (*Withdrawal)(nil), // 16: ethereum.engine.v1.Withdrawal - (*BlobsBundle)(nil), // 17: ethereum.engine.v1.BlobsBundle - (*BlindedBlobsBundle)(nil), // 18: ethereum.engine.v1.BlindedBlobsBundle - (*Blob)(nil), // 19: ethereum.engine.v1.Blob - (*ExchangeCapabilities)(nil), // 20: ethereum.engine.v1.ExchangeCapabilities + (*PayloadAttributes)(nil), // 10: ethereum.engine.v1.PayloadAttributes + (*PayloadAttributesV2)(nil), // 11: ethereum.engine.v1.PayloadAttributesV2 + (*PayloadAttributesV3)(nil), // 12: ethereum.engine.v1.PayloadAttributesV3 + (*PayloadStatus)(nil), // 13: ethereum.engine.v1.PayloadStatus + (*ForkchoiceState)(nil), // 14: ethereum.engine.v1.ForkchoiceState + (*Withdrawal)(nil), // 15: ethereum.engine.v1.Withdrawal + (*BlobsBundle)(nil), // 16: ethereum.engine.v1.BlobsBundle + (*BlindedBlobsBundle)(nil), // 17: ethereum.engine.v1.BlindedBlobsBundle + (*Blob)(nil), // 18: ethereum.engine.v1.Blob + (*ExchangeCapabilities)(nil), // 19: ethereum.engine.v1.ExchangeCapabilities } var file_proto_engine_v1_execution_engine_proto_depIdxs = []int32{ - 16, // 0: ethereum.engine.v1.ExecutionPayloadBodyV1.withdrawals:type_name -> ethereum.engine.v1.Withdrawal - 16, // 1: ethereum.engine.v1.ExecutionPayloadCapella.withdrawals:type_name -> ethereum.engine.v1.Withdrawal - 16, // 2: ethereum.engine.v1.ExecutionPayloadDeneb.withdrawals:type_name -> ethereum.engine.v1.Withdrawal + 15, // 0: ethereum.engine.v1.ExecutionPayloadBodyV1.withdrawals:type_name -> ethereum.engine.v1.Withdrawal + 15, // 1: ethereum.engine.v1.ExecutionPayloadCapella.withdrawals:type_name -> ethereum.engine.v1.Withdrawal + 15, // 2: ethereum.engine.v1.ExecutionPayloadDeneb.withdrawals:type_name -> ethereum.engine.v1.Withdrawal 3, // 3: ethereum.engine.v1.ExecutionPayloadCapellaWithValue.payload:type_name -> ethereum.engine.v1.ExecutionPayloadCapella 4, // 4: ethereum.engine.v1.ExecutionPayloadDenebWithValueAndBlobsBundle.payload:type_name -> ethereum.engine.v1.ExecutionPayloadDeneb - 17, // 5: ethereum.engine.v1.ExecutionPayloadDenebWithValueAndBlobsBundle.blobs_bundle:type_name -> ethereum.engine.v1.BlobsBundle - 16, // 6: ethereum.engine.v1.PayloadAttributesV2.withdrawals:type_name -> ethereum.engine.v1.Withdrawal - 16, // 7: ethereum.engine.v1.PayloadAttributesV3.withdrawals:type_name -> ethereum.engine.v1.Withdrawal + 16, // 5: ethereum.engine.v1.ExecutionPayloadDenebWithValueAndBlobsBundle.blobs_bundle:type_name -> ethereum.engine.v1.BlobsBundle + 15, // 6: ethereum.engine.v1.PayloadAttributesV2.withdrawals:type_name -> ethereum.engine.v1.Withdrawal + 15, // 7: ethereum.engine.v1.PayloadAttributesV3.withdrawals:type_name -> ethereum.engine.v1.Withdrawal 0, // 8: ethereum.engine.v1.PayloadStatus.status:type_name -> ethereum.engine.v1.PayloadStatus.Status 9, // [9:9] is the sub-list for method output_type 9, // [9:9] is the sub-list for method input_type @@ -2517,18 +2440,6 @@ func file_proto_engine_v1_execution_engine_proto_init() { } } file_proto_engine_v1_execution_engine_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransitionConfiguration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_engine_v1_execution_engine_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PayloadAttributes); i { case 0: return &v.state @@ -2540,7 +2451,7 @@ func file_proto_engine_v1_execution_engine_proto_init() { return nil } } - file_proto_engine_v1_execution_engine_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_proto_engine_v1_execution_engine_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PayloadAttributesV2); i { case 0: return &v.state @@ -2552,7 +2463,7 @@ func file_proto_engine_v1_execution_engine_proto_init() { return nil } } - file_proto_engine_v1_execution_engine_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_proto_engine_v1_execution_engine_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PayloadAttributesV3); i { case 0: return &v.state @@ -2564,7 +2475,7 @@ func file_proto_engine_v1_execution_engine_proto_init() { return nil } } - file_proto_engine_v1_execution_engine_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_proto_engine_v1_execution_engine_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PayloadStatus); i { case 0: return &v.state @@ -2576,7 +2487,7 @@ func file_proto_engine_v1_execution_engine_proto_init() { return nil } } - file_proto_engine_v1_execution_engine_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_proto_engine_v1_execution_engine_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ForkchoiceState); i { case 0: return &v.state @@ -2588,7 +2499,7 @@ func file_proto_engine_v1_execution_engine_proto_init() { return nil } } - file_proto_engine_v1_execution_engine_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_proto_engine_v1_execution_engine_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Withdrawal); i { case 0: return &v.state @@ -2600,7 +2511,7 @@ func file_proto_engine_v1_execution_engine_proto_init() { return nil } } - file_proto_engine_v1_execution_engine_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_proto_engine_v1_execution_engine_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BlobsBundle); i { case 0: return &v.state @@ -2612,7 +2523,7 @@ func file_proto_engine_v1_execution_engine_proto_init() { return nil } } - file_proto_engine_v1_execution_engine_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_proto_engine_v1_execution_engine_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BlindedBlobsBundle); i { case 0: return &v.state @@ -2624,7 +2535,7 @@ func file_proto_engine_v1_execution_engine_proto_init() { return nil } } - file_proto_engine_v1_execution_engine_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_proto_engine_v1_execution_engine_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Blob); i { case 0: return &v.state @@ -2636,7 +2547,7 @@ func file_proto_engine_v1_execution_engine_proto_init() { return nil } } - file_proto_engine_v1_execution_engine_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_proto_engine_v1_execution_engine_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExchangeCapabilities); i { case 0: return &v.state @@ -2655,7 +2566,7 @@ func file_proto_engine_v1_execution_engine_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_engine_v1_execution_engine_proto_rawDesc, NumEnums: 1, - NumMessages: 20, + NumMessages: 19, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/engine/v1/execution_engine.proto b/proto/engine/v1/execution_engine.proto index 06a4b80217e7..7bf08a1ae53c 100644 --- a/proto/engine/v1/execution_engine.proto +++ b/proto/engine/v1/execution_engine.proto @@ -154,12 +154,6 @@ message ExecutionPayloadHeaderDeneb { uint64 excess_blob_gas = 17; } -message TransitionConfiguration { - string terminal_total_difficulty = 1; - bytes terminal_block_hash = 2; - bytes terminal_block_number = 3; -} - message PayloadAttributes { uint64 timestamp = 1; bytes prev_randao = 2 [(ethereum.eth.ext.ssz_size) = "32"]; diff --git a/proto/engine/v1/json_marshal_unmarshal.go b/proto/engine/v1/json_marshal_unmarshal.go index 80a30f414d18..e9ba8af19377 100644 --- a/proto/engine/v1/json_marshal_unmarshal.go +++ b/proto/engine/v1/json_marshal_unmarshal.go @@ -659,50 +659,6 @@ func (p *PayloadStatus) UnmarshalJSON(enc []byte) error { return nil } -type transitionConfigurationJSON struct { - TerminalTotalDifficulty *hexutil.Big `json:"terminalTotalDifficulty"` - TerminalBlockHash common.Hash `json:"terminalBlockHash"` - TerminalBlockNumber hexutil.Uint64 `json:"terminalBlockNumber"` -} - -// MarshalJSON -- -func (t *TransitionConfiguration) MarshalJSON() ([]byte, error) { - num := new(big.Int).SetBytes(t.TerminalBlockNumber) - var hexNum *hexutil.Big - if t.TerminalTotalDifficulty != "" { - ttdNum, err := hexutil.DecodeBig(t.TerminalTotalDifficulty) - if err != nil { - return nil, err - } - bHex := hexutil.Big(*ttdNum) - hexNum = &bHex - } - if len(t.TerminalBlockHash) != fieldparams.RootLength { - return nil, errors.Errorf("terminal block hash is of the wrong length: %d", len(t.TerminalBlockHash)) - } - return json.Marshal(transitionConfigurationJSON{ - TerminalTotalDifficulty: hexNum, - TerminalBlockHash: *(*[32]byte)(t.TerminalBlockHash), - TerminalBlockNumber: hexutil.Uint64(num.Uint64()), - }) -} - -// UnmarshalJSON -- -func (t *TransitionConfiguration) UnmarshalJSON(enc []byte) error { - dec := transitionConfigurationJSON{} - if err := json.Unmarshal(enc, &dec); err != nil { - return err - } - *t = TransitionConfiguration{} - num := big.NewInt(int64(dec.TerminalBlockNumber)) - if dec.TerminalTotalDifficulty != nil { - t.TerminalTotalDifficulty = dec.TerminalTotalDifficulty.String() - } - t.TerminalBlockHash = dec.TerminalBlockHash[:] - t.TerminalBlockNumber = num.Bytes() - return nil -} - type forkchoiceStateJSON struct { HeadBlockHash hexutil.Bytes `json:"headBlockHash"` SafeBlockHash hexutil.Bytes `json:"safeBlockHash"` diff --git a/proto/engine/v1/json_marshal_unmarshal_test.go b/proto/engine/v1/json_marshal_unmarshal_test.go index c1b98ac00818..60cf744a799f 100644 --- a/proto/engine/v1/json_marshal_unmarshal_test.go +++ b/proto/engine/v1/json_marshal_unmarshal_test.go @@ -9,9 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" gethtypes "github.com/ethereum/go-ethereum/core/types" - "github.com/holiman/uint256" fieldparams "github.com/prysmaticlabs/prysm/v4/config/fieldparams" - "github.com/prysmaticlabs/prysm/v4/config/params" "github.com/prysmaticlabs/prysm/v4/consensus-types/primitives" "github.com/prysmaticlabs/prysm/v4/encoding/bytesutil" enginev1 "github.com/prysmaticlabs/prysm/v4/proto/engine/v1" @@ -74,27 +72,6 @@ func TestJsonMarshalUnmarshal(t *testing.T) { require.DeepEqual(t, safe, payloadPb.SafeBlockHash) require.DeepEqual(t, finalized, payloadPb.FinalizedBlockHash) }) - t.Run("transition configuration", func(t *testing.T) { - blockHash := [32]byte{'h', 'e', 'a', 'd'} - bInt := new(big.Int) - _, ok := bInt.SetString(params.BeaconConfig().TerminalTotalDifficulty, 10) - require.Equal(t, true, ok) - ttdNum := new(uint256.Int) - ttdNum.SetFromBig(bInt) - jsonPayload := &enginev1.TransitionConfiguration{ - TerminalBlockHash: blockHash[:], - TerminalTotalDifficulty: ttdNum.Hex(), - TerminalBlockNumber: big.NewInt(0).Bytes(), - } - enc, err := json.Marshal(jsonPayload) - require.NoError(t, err) - payloadPb := &enginev1.TransitionConfiguration{} - require.NoError(t, json.Unmarshal(enc, payloadPb)) - require.DeepEqual(t, blockHash[:], payloadPb.TerminalBlockHash) - - require.DeepEqual(t, ttdNum.Hex(), payloadPb.TerminalTotalDifficulty) - require.DeepEqual(t, big.NewInt(0).Bytes(), payloadPb.TerminalBlockNumber) - }) t.Run("execution payload", func(t *testing.T) { baseFeePerGas := big.NewInt(1770307273) parentHash := bytesutil.PadTo([]byte("parent"), fieldparams.RootLength) diff --git a/testing/middleware/builder/builder.go b/testing/middleware/builder/builder.go index f58f1cb72115..bd0670c9a9fa 100644 --- a/testing/middleware/builder/builder.go +++ b/testing/middleware/builder/builder.go @@ -54,7 +54,6 @@ const ( GetPayloadMethod = "engine_getPayloadV1" // GetPayloadMethodV2 v2 request string for JSON-RPC. GetPayloadMethodV2 = "engine_getPayloadV2" - // ExchangeTransitionConfigurationMethod v1 request string for JSON-RPC. ) var ( diff --git a/testing/spectest/shared/common/forkchoice/service.go b/testing/spectest/shared/common/forkchoice/service.go index aa111d1a076b..a681202ff072 100644 --- a/testing/spectest/shared/common/forkchoice/service.go +++ b/testing/spectest/shared/common/forkchoice/service.go @@ -106,10 +106,6 @@ func (m *engineMock) LatestExecutionBlock(context.Context) (*pb.ExecutionBlock, return nil, nil } -func (m *engineMock) ExchangeTransitionConfiguration(context.Context, *pb.TransitionConfiguration) error { - return nil -} - func (m *engineMock) ExecutionBlockByHash(_ context.Context, hash common.Hash, _ bool) (*pb.ExecutionBlock, error) { b, ok := m.powBlocks[bytesutil.ToBytes32(hash.Bytes())] if !ok {