internal/ethapi: avoid full block load in debug_getRawHeader

This commit is contained in:
BZO95 2026-03-24 11:22:36 +08:00
parent 745b0a8c09
commit 4c8566639c

View file

@ -1966,19 +1966,18 @@ func NewDebugAPI(b Backend) *DebugAPI {
// GetRawHeader retrieves the RLP encoding for a single header. // GetRawHeader retrieves the RLP encoding for a single header.
func (api *DebugAPI) GetRawHeader(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (hexutil.Bytes, error) { func (api *DebugAPI) GetRawHeader(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (hexutil.Bytes, error) {
var hash common.Hash var header *types.Header
if h, ok := blockNrOrHash.Hash(); ok { if h, ok := blockNrOrHash.Hash(); ok {
hash = h header, _ = api.b.HeaderByHash(ctx, h)
if header == nil {
return nil, fmt.Errorf("header #%d not found", h)
}
} else { } else {
block, err := api.b.BlockByNumberOrHash(ctx, blockNrOrHash) var err error
if block == nil || err != nil { header, err = api.b.HeaderByNumberOrHash(ctx, blockNrOrHash)
if header == nil || err != nil {
return nil, err return nil, err
} }
hash = block.Hash()
}
header, _ := api.b.HeaderByHash(ctx, hash)
if header == nil {
return nil, fmt.Errorf("header #%d not found", hash)
} }
return rlp.EncodeToBytes(header) return rlp.EncodeToBytes(header)
} }