HookPenalty goes the new way

This commit is contained in:
Tuna 2019-01-12 10:19:52 +07:00
parent 9d118a4620
commit 9e6bc884da

View file

@ -244,9 +244,9 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
// Hook scans for bad masternodes and decide to penalty them // Hook scans for bad masternodes and decide to penalty them
c.HookPenalty = func(chain consensus.ChainReader, blockNumberEpoc uint64) ([]common.Address, error) { c.HookPenalty = func(chain consensus.ChainReader, blockNumberEpoc uint64) ([]common.Address, error) {
client, err := eth.blockchain.GetClient() canonicalState, err := eth.blockchain.State()
if err != nil { if canonicalState == nil || err != nil {
return nil, err log.Crit("Can't get state at head of canonical chain", "head number", eth.blockchain.CurrentHeader().Number.Uint64(), "err", err)
} }
prevEpoc := blockNumberEpoc - chain.Config().Posv.Epoch prevEpoc := blockNumberEpoc - chain.Config().Posv.Epoch
if prevEpoc >= 0 { if prevEpoc >= 0 {
@ -254,12 +254,13 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
prevHeader := chain.GetHeaderByNumber(prevEpoc) prevHeader := chain.GetHeaderByNumber(prevEpoc)
penSigners := c.GetMasternodes(chain, prevHeader) penSigners := c.GetMasternodes(chain, prevHeader)
if len(penSigners) > 0 { if len(penSigners) > 0 {
blockSignerAddr := common.HexToAddress(common.BlockSigners)
// Loop for each block to check missing sign. // Loop for each block to check missing sign.
for i := prevEpoc; i < blockNumberEpoc; i++ { for i := prevEpoc; i < blockNumberEpoc; i++ {
blockHeader := chain.GetHeaderByNumber(i) bheader := chain.GetHeaderByNumber(i)
bhash := bheader.Hash()
block := chain.GetBlock(bhash, i)
if len(penSigners) > 0 { if len(penSigners) > 0 {
signedMasternodes, err := contracts.GetSignersFromContract1(blockSignerAddr, client, blockHeader.Hash()) signedMasternodes, err := contracts.GetSignersFromContract(canonicalState, block)
if err != nil { if err != nil {
return nil, err return nil, err
} }