OSDN Git Service

add block witness update function (#176)
[bytom/vapor.git] / protocol / bbft.go
index f42e5f1..c6fc3b7 100644 (file)
@@ -114,18 +114,18 @@ func (c *Chain) validateSign(block *types.Block) error {
                        continue
                }
 
-               if block.Witness[node.Order] == nil {
+               if block.Get(node.Order) == nil {
                        cachekey := signCacheKey(blockHash.String(), pubKey)
                        if signature, ok := c.signatureCache.Get(cachekey); ok {
-                               block.Witness[node.Order] = signature.([]byte)
+                               block.Set(node.Order, signature.([]byte))
                        } else {
                                continue
                        }
                }
 
-               if err := c.checkNodeSign(&block.BlockHeader, node, block.Witness[node.Order]); err == errDoubleSignBlock {
+               if err := c.checkNodeSign(&block.BlockHeader, node, block.Get(node.Order)); err == errDoubleSignBlock {
                        log.WithFields(log.Fields{"module": logModule, "blockHash": blockHash.String(), "pubKey": pubKey}).Warn("the consensus node double sign the same height of different block")
-                       block.Witness[node.Order] = nil
+                       block.Delete(node.Order)
                        continue
                } else if err != nil {
                        return err
@@ -203,10 +203,10 @@ func (c *Chain) SignBlock(block *types.Block) ([]byte, error) {
                }
        }
 
-       signature := block.Witness[node.Order]
+       signature := block.Get(node.Order)
        if len(signature) == 0 {
                signature = xprv.Sign(block.Hash().Bytes())
-               block.Witness[node.Order] = signature
+               block.Set(node.Order, signature)
        }
        return signature, nil
 }
@@ -221,7 +221,8 @@ func (c *Chain) updateBlockSignature(blockNode *state.BlockNode, nodeOrder uint6
                return err
        }
 
-       block.Witness[nodeOrder] = signature
+       block.Set(nodeOrder, signature)
+
        txStatus, err := c.store.GetTransactionStatus(&blockNode.Hash)
        if err != nil {
                return err