From 33e614b4ab39b2b524953acbbf7029f0783c8445 Mon Sep 17 00:00:00 2001 From: devopsbo3 <69951731+devopsbo3@users.noreply.github.com> Date: Fri, 10 Nov 2023 12:27:53 -0600 Subject: [PATCH] Revert "internal/ethapi: remove error return on RPCMarshalBlock (#27449)" This reverts commit e2e4193003e0d9a13655db9b0872449f5c023309. --- eth/api_debug.go | 5 ++++- internal/ethapi/api.go | 11 +++++++---- internal/ethapi/api_test.go | 6 +++++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/eth/api_debug.go b/eth/api_debug.go index 6f9daadd6b..4dd48508f6 100644 --- a/eth/api_debug.go +++ b/eth/api_debug.go @@ -104,6 +104,7 @@ type BadBlockArgs struct { // and returns them as a JSON list of block hashes. func (api *DebugAPI) GetBadBlocks(ctx context.Context) ([]*BadBlockArgs, error) { var ( + err error blocks = rawdb.ReadAllBadBlocks(api.eth.chainDb) results = make([]*BadBlockArgs, 0, len(blocks)) ) @@ -117,7 +118,9 @@ func (api *DebugAPI) GetBadBlocks(ctx context.Context) ([]*BadBlockArgs, error) } else { blockRlp = fmt.Sprintf("%#x", rlpBytes) } - blockJSON = ethapi.RPCMarshalBlock(block, true, true, api.eth.APIBackend.ChainConfig()) + if blockJSON, err = ethapi.RPCMarshalBlock(block, true, true, api.eth.APIBackend.ChainConfig()); err != nil { + blockJSON = map[string]interface{}{"error": err.Error()} + } results = append(results, &BadBlockArgs{ Hash: block.Hash(), RLP: blockRlp, diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 80756b64b8..40cf6e131f 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -1281,7 +1281,7 @@ func RPCMarshalHeader(head *types.Header) map[string]interface{} { // RPCMarshalBlock converts the given block to the RPC output which depends on fullTx. If inclTx is true transactions are // returned. When fullTx is true the returned block contains full transaction details, otherwise it will only contain // transaction hashes. -func RPCMarshalBlock(block *types.Block, inclTx bool, fullTx bool, config *params.ChainConfig) map[string]interface{} { +func RPCMarshalBlock(block *types.Block, inclTx bool, fullTx bool, config *params.ChainConfig) (map[string]interface{}, error) { fields := RPCMarshalHeader(block.Header()) fields["size"] = hexutil.Uint64(block.Size()) @@ -1310,7 +1310,7 @@ func RPCMarshalBlock(block *types.Block, inclTx bool, fullTx bool, config *param if block.Header().WithdrawalsHash != nil { fields["withdrawals"] = block.Withdrawals() } - return fields + return fields, nil } // rpcMarshalHeader uses the generalized output filler, then adds the total difficulty field, which requires @@ -1324,11 +1324,14 @@ func (s *BlockChainAPI) rpcMarshalHeader(ctx context.Context, header *types.Head // rpcMarshalBlock uses the generalized output filler, then adds the total difficulty field, which requires // a `BlockchainAPI`. func (s *BlockChainAPI) rpcMarshalBlock(ctx context.Context, b *types.Block, inclTx bool, fullTx bool) (map[string]interface{}, error) { - fields := RPCMarshalBlock(b, inclTx, fullTx, s.b.ChainConfig()) + fields, err := RPCMarshalBlock(b, inclTx, fullTx, s.b.ChainConfig()) + if err != nil { + return nil, err + } if inclTx { fields["totalDifficulty"] = (*hexutil.Big)(s.b.GetTd(ctx, b.Hash())) } - return fields, nil + return fields, err } // RPCTransaction represents a transaction that will serialize to the RPC representation of a transaction diff --git a/internal/ethapi/api_test.go b/internal/ethapi/api_test.go index f80f111472..f86209055b 100644 --- a/internal/ethapi/api_test.go +++ b/internal/ethapi/api_test.go @@ -758,7 +758,11 @@ func TestRPCMarshalBlock(t *testing.T) { } for i, tc := range testSuite { - resp := RPCMarshalBlock(block, tc.inclTx, tc.fullTx, params.MainnetChainConfig) + resp, err := RPCMarshalBlock(block, tc.inclTx, tc.fullTx, params.MainnetChainConfig) + if err != nil { + t.Errorf("test %d: got error %v", i, err) + continue + } out, err := json.Marshal(resp) if err != nil { t.Errorf("test %d: json marshal error: %v", i, err)