Skip to content

Commit eaa24a8

Browse files
zhiburtholiman
andauthored
cmd/geth: support string (non-hex) keys in db get/put/delete (#23744)
Adds suppor for passing regular strings to db `put`/`get`/`delete`, to avoid having to hex-encode when operating on fixed-key items like `SnapshotSyncStatus`, `SnapshotRecovery` etc. Signed-off-by: Maxim Zhiburt <[email protected]> Co-authored-by: Martin Holst Swende <[email protected]>
1 parent c641cff commit eaa24a8

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

cmd/geth/dbcmd.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package main
1818

1919
import (
20+
"errors"
2021
"fmt"
2122
"os"
2223
"path/filepath"
@@ -335,14 +336,15 @@ func dbGet(ctx *cli.Context) error {
335336
db := utils.MakeChainDatabase(ctx, stack, true)
336337
defer db.Close()
337338

338-
key, err := hexutil.Decode(ctx.Args().Get(0))
339+
key, err := parseHexOrString(ctx.Args().Get(0))
339340
if err != nil {
340341
log.Info("Could not decode the key", "error", err)
341342
return err
342343
}
344+
343345
data, err := db.Get(key)
344346
if err != nil {
345-
log.Info("Get operation failed", "error", err)
347+
log.Info("Get operation failed", "key", fmt.Sprintf("0x%#x", key), "error", err)
346348
return err
347349
}
348350
fmt.Printf("key %#x: %#x\n", key, data)
@@ -360,7 +362,7 @@ func dbDelete(ctx *cli.Context) error {
360362
db := utils.MakeChainDatabase(ctx, stack, false)
361363
defer db.Close()
362364

363-
key, err := hexutil.Decode(ctx.Args().Get(0))
365+
key, err := parseHexOrString(ctx.Args().Get(0))
364366
if err != nil {
365367
log.Info("Could not decode the key", "error", err)
366368
return err
@@ -370,7 +372,7 @@ func dbDelete(ctx *cli.Context) error {
370372
fmt.Printf("Previous value: %#x\n", data)
371373
}
372374
if err = db.Delete(key); err != nil {
373-
log.Info("Delete operation returned an error", "error", err)
375+
log.Info("Delete operation returned an error", "key", fmt.Sprintf("0x%#x", key), "error", err)
374376
return err
375377
}
376378
return nil
@@ -393,7 +395,7 @@ func dbPut(ctx *cli.Context) error {
393395
data []byte
394396
err error
395397
)
396-
key, err = hexutil.Decode(ctx.Args().Get(0))
398+
key, err = parseHexOrString(ctx.Args().Get(0))
397399
if err != nil {
398400
log.Info("Could not decode the key", "error", err)
399401
return err
@@ -499,3 +501,12 @@ func freezerInspect(ctx *cli.Context) error {
499501
}
500502
return nil
501503
}
504+
505+
// ParseHexOrString tries to hexdecode b, but if the prefix is missing, it instead just returns the raw bytes
506+
func parseHexOrString(str string) ([]byte, error) {
507+
b, err := hexutil.Decode(str)
508+
if errors.Is(err, hexutil.ErrMissingPrefix) {
509+
return []byte(str), nil
510+
}
511+
return b, err
512+
}

0 commit comments

Comments
 (0)