update log & check case a master node in,out continuity

This commit is contained in:
Nguyen Ba Tam 2018-10-10 11:53:44 +07:00
parent 5b68344274
commit 63b869dba2
2 changed files with 7 additions and 16 deletions

View file

@ -212,8 +212,8 @@ type Posv struct {
lock sync.RWMutex // Protects the signer fields lock sync.RWMutex // Protects the signer fields
HookReward func(chain consensus.ChainReader, state *state.StateDB, header *types.Header) error HookReward func(chain consensus.ChainReader, state *state.StateDB, header *types.Header) error
HookPenalty func(chain consensus.ChainReader, blockNumberEpoc uint64) ([]common.Address, error)
HookPrepare func(header *types.Header, signers []common.Address) error HookPrepare func(header *types.Header, signers []common.Address) error
HookPenalty func(chain consensus.ChainReader, signers []common.Address, blockNumberEpoc uint64) ([]common.Address, error)
} }
// New creates a Posv proof-of-stake-voting consensus engine with the initial // New creates a Posv proof-of-stake-voting consensus engine with the initial
@ -641,7 +641,7 @@ func (c *Posv) Prepare(chain consensus.ChainReader, header *types.Header) error
signers := snap.signers() signers := snap.signers()
if c.HookPenalty != nil { if c.HookPenalty != nil {
penSigners, _ := c.HookPenalty(chain, signers, number) penSigners, _ := c.HookPenalty(chain, number)
if len(penSigners) > 0 { if len(penSigners) > 0 {
// Keep remove penalty signer out of signer list. // Keep remove penalty signer out of signer list.
@ -654,8 +654,8 @@ func (c *Posv) Prepare(chain consensus.ChainReader, header *types.Header) error
} }
var penBytes []byte var penBytes []byte
log.Debug("Penalty Info", "signers", penSigners, "number", number)
for _, penSigner := range penSigners { for _, penSigner := range penSigners {
log.Error("penSigner", "penSigner", penSigner.String())
// Convert number to byte. // Convert number to byte.
penByte := common.LeftPadBytes([]byte(fmt.Sprintf("%d", penSigner)), common.AddressLength) penByte := common.LeftPadBytes([]byte(fmt.Sprintf("%d", penSigner)), common.AddressLength)
penBytes = append(penBytes, penByte...) penBytes = append(penBytes, penByte...)
@ -672,7 +672,6 @@ func (c *Posv) Prepare(chain consensus.ChainReader, header *types.Header) error
checkEpoc := uint64(i) * c.config.Epoch checkEpoc := uint64(i) * c.config.Epoch
if number > checkEpoc { if number > checkEpoc {
prevEpoc := number - checkEpoc prevEpoc := number - checkEpoc
log.Error("prevEpoc", "prevEpoc", prevEpoc, "checkEpoc", checkEpoc, "number", number)
prevHeader := chain.GetHeaderByNumber(prevEpoc) prevHeader := chain.GetHeaderByNumber(prevEpoc)
prevEpocBlock := chain.GetBlock(prevHeader.Hash(), prevEpoc) prevEpocBlock := chain.GetBlock(prevHeader.Hash(), prevEpoc)
penalties := prevEpocBlock.Penalties() penalties := prevEpocBlock.Penalties()
@ -682,7 +681,6 @@ func (c *Posv) Prepare(chain consensus.ChainReader, header *types.Header) error
for _, signer := range prevSigners { for _, signer := range prevSigners {
for _, prevSigner := range prevSigners { for _, prevSigner := range prevSigners {
if signer == prevSigner { if signer == prevSigner {
log.Error("preventSigner", "preventSigner", signer.String())
preventSigners = append(preventSigners, signer) preventSigners = append(preventSigners, signer)
} }
} }

View file

@ -244,23 +244,15 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
return nil return nil
} }
// Hook penalty. // Hook penalty.
c.HookPenalty = func(chain consensus.ChainReader, signers []common.Address, blockNumberEpoc uint64) ([]common.Address, error) { c.HookPenalty = func(chain consensus.ChainReader, blockNumberEpoc uint64) ([]common.Address, error) {
client, err := eth.blockchain.GetClient() client, err := eth.blockchain.GetClient()
if err != nil { if err != nil {
log.Error("Fail to connect IPC client for blockSigner", "error", err) log.Error("Fail to connect IPC client for blockSigner", "error", err)
} }
prevEpoc := blockNumberEpoc - chain.Config().Posv.Epoch prevEpoc := blockNumberEpoc - chain.Config().Posv.Epoch
var penSigners []common.Address
if prevEpoc > 0 { if prevEpoc > 0 {
prevHeader := chain.GetHeaderByNumber(prevEpoc) prevHeader := chain.GetHeaderByNumber(prevEpoc)
prevSigners := c.GetMasternodes(chain, prevHeader) penSigners := c.GetMasternodes(chain, prevHeader)
for _, signer := range signers {
for _, prevSigner := range prevSigners {
if signer == prevSigner {
penSigners = append(penSigners, signer)
}
}
}
if len(penSigners) > 0 { if len(penSigners) > 0 {
blockSignerAddr := common.HexToAddress(common.BlockSigners) blockSignerAddr := common.HexToAddress(common.BlockSigners)
// Loop for each block to check missing sign. // Loop for each block to check missing sign.
@ -282,9 +274,10 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
} }
} }
} }
return penSigners, nil
} }
return penSigners, nil return []common.Address{}, nil
} }
// Hook reward for posv validator. // Hook reward for posv validator.