Revert bad blocks

pull/1295/head
Rongjian Lan 5 years ago
parent 3fdc9d6632
commit 8ff2832c7c
  1. 24
      cmd/harmony/main.go

@ -11,6 +11,9 @@ import (
"runtime" "runtime"
"time" "time"
common2 "github.com/ethereum/go-ethereum/common"
"github.com/harmony-one/harmony/internal/common"
"github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/harmony-one/bls/ffi/go/bls" "github.com/harmony-one/bls/ffi/go/bls"
@ -18,7 +21,6 @@ import (
"github.com/harmony-one/harmony/consensus" "github.com/harmony-one/harmony/consensus"
"github.com/harmony-one/harmony/core" "github.com/harmony-one/harmony/core"
"github.com/harmony-one/harmony/internal/blsgen" "github.com/harmony-one/harmony/internal/blsgen"
"github.com/harmony-one/harmony/internal/common"
nodeconfig "github.com/harmony-one/harmony/internal/configs/node" nodeconfig "github.com/harmony-one/harmony/internal/configs/node"
shardingconfig "github.com/harmony-one/harmony/internal/configs/sharding" shardingconfig "github.com/harmony-one/harmony/internal/configs/sharding"
"github.com/harmony-one/harmony/internal/ctxerror" "github.com/harmony-one/harmony/internal/ctxerror"
@ -120,6 +122,10 @@ var (
// Disable view change. // Disable view change.
disableViewChange = flag.Bool("disable_view_change", false, "Do not propose view change (testing only)") disableViewChange = flag.Bool("disable_view_change", false, "Do not propose view change (testing only)")
// Bad block revert
doRevertBefore = flag.Int("do_revert_before", 0, "If the current block is less than do_revert_before, revert all blocks until (including) revert_to block")
revertTo = flag.Int("revert_to", 0, "The revert will rollback all blocks until and including block number revert_to")
) )
func initSetup() { func initSetup() {
@ -308,6 +314,22 @@ func setUpConsensusAndNode(nodeConfig *nodeconfig.ConfigType) *node.Node {
// Current node. // Current node.
chainDBFactory := &shardchain.LDBFactory{RootDir: nodeConfig.DBDir} chainDBFactory := &shardchain.LDBFactory{RootDir: nodeConfig.DBDir}
currentNode := node.New(nodeConfig.Host, currentConsensus, chainDBFactory, *isArchival) currentNode := node.New(nodeConfig.Host, currentConsensus, chainDBFactory, *isArchival)
////// Temporary fix for 8-6 incident /////////
chain := currentNode.Blockchain()
curNum := chain.CurrentBlock().NumberU64()
if curNum < uint64(*doRevertBefore) && curNum >= uint64(*revertTo) {
// Remove invalid blocks
for chain.CurrentBlock().NumberU64() >= uint64(*revertTo) {
curBlock := chain.CurrentBlock()
rollbacks := []common2.Hash{curBlock.Hash()}
chain.Rollback(rollbacks)
sigAndBitMap := append(curBlock.Header().LastCommitSignature[:], curBlock.Header().LastCommitBitmap...)
chain.WriteLastCommits(sigAndBitMap)
}
}
///////////////////////////////////////////////
if *dnsZone != "" { if *dnsZone != "" {
currentNode.SetDNSZone(*dnsZone) currentNode.SetDNSZone(*dnsZone)
} else if *dnsFlag { } else if *dnsFlag {

Loading…
Cancel
Save