From f306f89398f21293cb9c70eb5a4967fe55161125 Mon Sep 17 00:00:00 2001 From: muscle_boy Date: Sun, 2 Jun 2019 22:15:12 +0800 Subject: [PATCH] fix sign block (#112) * fix sign block * rename --- protocol/bbft.go | 8 ++++++++ protocol/block.go | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/protocol/bbft.go b/protocol/bbft.go index 107334af..d026e959 100644 --- a/protocol/bbft.go +++ b/protocol/bbft.go @@ -223,6 +223,14 @@ func (b *bbft) SignBlock(block *types.Block) ([]byte, error) { return nil, nil } + blockNodes := b.consensusNodeManager.blockIndex.NodesByHeight(block.Height) + for _, blockNode := range blockNodes { + // Has already signed the same height block + if ok, err := blockNode.BlockWitness.Test(uint32(node.order)); err != nil && ok { + return nil, nil + } + } + signature := block.Witness[node.order] if len(signature) == 0 { signature = xprv.Sign(block.Hash().Bytes()) diff --git a/protocol/block.go b/protocol/block.go index 80181132..8e5523b1 100644 --- a/protocol/block.go +++ b/protocol/block.go @@ -288,6 +288,14 @@ func (c *Chain) processBlock(block *types.Block) (bool, error) { return true, nil } + forkPointBlock := parent + for !c.index.InMainchain(forkPointBlock.Hash) { + forkPointBlock = forkPointBlock.Parent + } + if forkPointBlock.Height < c.bestIrreversibleNode.Height { + return false, errors.New("the block impossible to be block of main chain") + } + if err := c.saveBlock(block); err != nil { return false, err } -- 2.11.0