|
|
|
@ -39,6 +39,7 @@ import ( |
|
|
|
|
"github.com/ethereum/go-ethereum/common" |
|
|
|
|
"github.com/ethereum/go-ethereum/eth" |
|
|
|
|
"github.com/ethereum/go-ethereum/logger" |
|
|
|
|
"github.com/ethereum/go-ethereum/logger/glog" |
|
|
|
|
"github.com/ethereum/go-ethereum/metrics" |
|
|
|
|
"github.com/ethereum/go-ethereum/rpc/codec" |
|
|
|
|
"github.com/ethereum/go-ethereum/rpc/comms" |
|
|
|
@ -68,6 +69,15 @@ func init() { |
|
|
|
|
app.Action = run |
|
|
|
|
app.HideVersion = true // we have a command to print the version
|
|
|
|
|
app.Commands = []cli.Command{ |
|
|
|
|
{ |
|
|
|
|
Action: blockRecovery, |
|
|
|
|
Name: "recover", |
|
|
|
|
Usage: "attempts to recover a corrupted database by setting a new block head by number", |
|
|
|
|
Description: ` |
|
|
|
|
The recover commands will attempt to read out the last |
|
|
|
|
block based on that. |
|
|
|
|
`, |
|
|
|
|
}, |
|
|
|
|
blocktestCommand, |
|
|
|
|
importCommand, |
|
|
|
|
exportCommand, |
|
|
|
@ -439,6 +449,20 @@ func unlockAccount(ctx *cli.Context, am *accounts.Manager, account string) (pass |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func blockRecovery(ctx *cli.Context) { |
|
|
|
|
num := ctx.Args().First() |
|
|
|
|
if len(ctx.Args()) < 1 { |
|
|
|
|
glog.Fatal("recover requires block number") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cfg := utils.MakeEthConfig(ClientIdentifier, nodeNameVersion, ctx) |
|
|
|
|
ethereum, err := eth.New(cfg) |
|
|
|
|
if err != nil { |
|
|
|
|
utils.Fatalf("%v", err) |
|
|
|
|
} |
|
|
|
|
ethereum.ChainManager().Recover(common.String2Big(num).Uint64()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func startEth(ctx *cli.Context, eth *eth.Ethereum) { |
|
|
|
|
// Start Ethereum itself
|
|
|
|
|
|
|
|
|
|