* fix sign block
* rename
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())
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
}