mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 10:22:23 +00:00
update log & check case a master node in,out continuity
This commit is contained in:
parent
5b68344274
commit
63b869dba2
2 changed files with 7 additions and 16 deletions
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue