Skip to content

Commit

Permalink
internal/ethapi: rename debug getters to match spec (ethereum#25176)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
lightclient authored and HanWang233 committed Sep 11, 2022
1 parent 79ed041 commit fd7efb1
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 13 deletions.
54 changes: 45 additions & 9 deletions internal/ethapi/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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))
Expand Down
13 changes: 9 additions & 4 deletions internal/web3ext/web3ext.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,20 +224,25 @@ 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({
name: 'getRawReceipts',
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',
Expand Down

0 comments on commit fd7efb1

Please sign in to comment.