Skip to content

Commit

Permalink
internal/ethapi: add db operations to api (#24739)
Browse files Browse the repository at this point in the history
Adds `debug_dbGet` method to rpc api
  • Loading branch information
s1na authored Apr 27, 2022
1 parent a52bccc commit 16701c5
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 13 deletions.
16 changes: 3 additions & 13 deletions cmd/geth/dbcmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package main

import (
"bytes"
"errors"
"fmt"
"os"
"os/signal"
Expand Down Expand Up @@ -418,7 +417,7 @@ func dbGet(ctx *cli.Context) error {
db := utils.MakeChainDatabase(ctx, stack, true)
defer db.Close()

key, err := parseHexOrString(ctx.Args().Get(0))
key, err := common.ParseHexOrString(ctx.Args().Get(0))
if err != nil {
log.Info("Could not decode the key", "error", err)
return err
Expand All @@ -444,7 +443,7 @@ func dbDelete(ctx *cli.Context) error {
db := utils.MakeChainDatabase(ctx, stack, false)
defer db.Close()

key, err := parseHexOrString(ctx.Args().Get(0))
key, err := common.ParseHexOrString(ctx.Args().Get(0))
if err != nil {
log.Info("Could not decode the key", "error", err)
return err
Expand Down Expand Up @@ -477,7 +476,7 @@ func dbPut(ctx *cli.Context) error {
data []byte
err error
)
key, err = parseHexOrString(ctx.Args().Get(0))
key, err = common.ParseHexOrString(ctx.Args().Get(0))
if err != nil {
log.Info("Could not decode the key", "error", err)
return err
Expand Down Expand Up @@ -584,15 +583,6 @@ func freezerInspect(ctx *cli.Context) error {
return nil
}

// ParseHexOrString tries to hexdecode b, but if the prefix is missing, it instead just returns the raw bytes
func parseHexOrString(str string) ([]byte, error) {
b, err := hexutil.Decode(str)
if errors.Is(err, hexutil.ErrMissingPrefix) {
return []byte(str), nil
}
return b, err
}

func importLDBdata(ctx *cli.Context) error {
start := 0
switch ctx.NArg() {
Expand Down
12 changes: 12 additions & 0 deletions common/bytes.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ package common

import (
"encoding/hex"
"errors"

"github.com/ethereum/go-ethereum/common/hexutil"
)

// FromHex returns the bytes represented by the hexadecimal string s.
Expand Down Expand Up @@ -92,6 +95,15 @@ func Hex2BytesFixed(str string, flen int) []byte {
return hh
}

// ParseHexOrString tries to hexdecode b, but if the prefix is missing, it instead just returns the raw bytes
func ParseHexOrString(str string) ([]byte, error) {
b, err := hexutil.Decode(str)
if errors.Is(err, hexutil.ErrMissingPrefix) {
return []byte(str), nil
}
return b, err
}

// RightPadBytes zero-pads slice to the right up to length l.
func RightPadBytes(slice []byte, l int) []byte {
if l <= len(slice) {
Expand Down
9 changes: 9 additions & 0 deletions internal/ethapi/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -1972,6 +1972,15 @@ func (api *PrivateDebugAPI) SetHead(number hexutil.Uint64) {
api.b.SetHead(uint64(number))
}

// DbGet returns the raw value of a key stored in the database.
func (api *PrivateDebugAPI) DbGet(key string) (hexutil.Bytes, error) {
blob, err := common.ParseHexOrString(key)
if err != nil {
return nil, err
}
return api.b.ChainDb().Get(blob)
}

// PublicNetAPI offers network related RPC methods
type PublicNetAPI struct {
net *p2p.Server
Expand Down
5 changes: 5 additions & 0 deletions internal/web3ext/web3ext.go
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,11 @@ web3._extend({
params: 2,
inputFormatter:[web3._extend.formatters.inputBlockNumberFormatter, web3._extend.formatters.inputBlockNumberFormatter],
}),
new web3._extend.Method({
name: 'dbGet',
call: 'debug_dbGet',
params: 1
}),
],
properties: []
});
Expand Down

0 comments on commit 16701c5

Please sign in to comment.