internal/ethapi: rename debug getters to match spec (#25176)

Some small fixes to get the existing debug methods to conform to the spec. Mainly dropping the encoding information from the method name as it should be deduced from the debug context and allowing the method to be invoked by either block number or block hash. It also adds the method debug_getTransaction which returns the raw tx bytes by tx hash. This is pretty much equivalent to the eth_getRawTransactionByHash method.
This commit is contained in:
lightclient 2022-08-25 02:41:37 -06:00 committed by GitHub
parent 6c40aed146
commit 70e1e65b1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 13 deletions

View File

@ -1888,25 +1888,45 @@ func NewDebugAPI(b Backend) *DebugAPI {
return &DebugAPI{b: b}
}
// GetHeaderRlp retrieves the RLP encoded for of a single header.
func (api *DebugAPI) GetHeaderRlp(ctx context.Context, number uint64) (hexutil.Bytes, error) {
header, _ := api.b.HeaderByNumber(ctx, rpc.BlockNumber(number))
// GetRawHeader retrieves the RLP encoding for a single header.
func (api *DebugAPI) GetRawHeader(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (hexutil.Bytes, error) {
var hash common.Hash
if h, ok := blockNrOrHash.Hash(); ok {
hash = h
} else {
block, err := api.b.BlockByNumberOrHash(ctx, blockNrOrHash)
if err != nil {
return nil, err
}
hash = block.Hash()
}
header, _ := api.b.HeaderByHash(ctx, hash)
if header == nil {
return nil, fmt.Errorf("header #%d not found", number)
return nil, fmt.Errorf("header #%d not found", hash)
}
return rlp.EncodeToBytes(header)
}
// GetBlockRlp retrieves the RLP encoded for of a single block.
func (api *DebugAPI) GetBlockRlp(ctx context.Context, number uint64) (hexutil.Bytes, error) {
block, _ := api.b.BlockByNumber(ctx, rpc.BlockNumber(number))
// GetRawBlock retrieves the RLP encoded for a single block.
func (api *DebugAPI) GetRawBlock(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (hexutil.Bytes, error) {
var hash common.Hash
if h, ok := blockNrOrHash.Hash(); ok {
hash = h
} else {
block, err := api.b.BlockByNumberOrHash(ctx, blockNrOrHash)
if err != nil {
return nil, err
}
hash = block.Hash()
}
block, _ := api.b.BlockByHash(ctx, hash)
if block == nil {
return nil, fmt.Errorf("block #%d not found", number)
return nil, fmt.Errorf("block #%d not found", hash)
}
return rlp.EncodeToBytes(block)
}
// GetRawReceipts retrieves the binary-encoded raw receipts of a single block.
// GetRawReceipts retrieves the binary-encoded receipts of a single block.
func (api *DebugAPI) GetRawReceipts(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) ([]hexutil.Bytes, error) {
var hash common.Hash
if h, ok := blockNrOrHash.Hash(); ok {
@ -1933,6 +1953,22 @@ func (api *DebugAPI) GetRawReceipts(ctx context.Context, blockNrOrHash rpc.Block
return result, nil
}
// GetRawTransaction returns the bytes of the transaction for the given hash.
func (s *DebugAPI) GetRawTransaction(ctx context.Context, hash common.Hash) (hexutil.Bytes, error) {
// Retrieve a finalized transaction, or a pooled otherwise
tx, _, _, _, err := s.b.GetTransaction(ctx, hash)
if err != nil {
return nil, err
}
if tx == nil {
if tx = s.b.GetPoolTransaction(hash); tx == nil {
// Transaction not found anywhere, abort
return nil, nil
}
}
return tx.MarshalBinary()
}
// PrintBlock retrieves a block and returns its pretty printed form.
func (api *DebugAPI) PrintBlock(ctx context.Context, number uint64) (string, error) {
block, _ := api.b.BlockByNumber(ctx, rpc.BlockNumber(number))

View File

@ -224,13 +224,13 @@ web3._extend({
outputFormatter: console.log
}),
new web3._extend.Method({
name: 'getHeaderRlp',
call: 'debug_getHeaderRlp',
name: 'getRawHeader',
call: 'debug_getRawHeader',
params: 1
}),
new web3._extend.Method({
name: 'getBlockRlp',
call: 'debug_getBlockRlp',
name: 'getRawBlock',
call: 'debug_getRawBlock',
params: 1
}),
new web3._extend.Method({
@ -238,6 +238,11 @@ web3._extend({
call: 'debug_getRawReceipts',
params: 1
}),
new web3._extend.Method({
name: 'getRawTransaction',
call: 'debug_getRawTransaction',
params: 1
}),
new web3._extend.Method({
name: 'setHead',
call: 'debug_setHead',