OSDN Git Service

module claim
[bytom/vapor.git] / protocol / block.go
index f91c33d..2f241a9 100644 (file)
@@ -3,8 +3,6 @@ package protocol
 import (
        "encoding/json"
 
-       "github.com/vapor/protocol/vm"
-
        log "github.com/sirupsen/logrus"
 
        "github.com/vapor/common"
@@ -16,6 +14,8 @@ import (
        "github.com/vapor/protocol/bc/types"
        "github.com/vapor/protocol/state"
        "github.com/vapor/protocol/validation"
+       "github.com/vapor/protocol/vm"
+       "github.com/vapor/protocol/vm/vmutil"
 )
 
 var (
@@ -329,7 +329,7 @@ func (c *Chain) DoVoting(block *types.Block, mapTxFee map[bc.Hash]uint64) error
                                if err := json.Unmarshal(msg.Data, data); err != nil {
                                        return err
                                }
-                               c.engine.ProcessRegister(address.EncodeAddress(), data.Name, hash, height)
+                               c.Engine.ProcessRegister(address.EncodeAddress(), data.Name, hash, height)
                        }
                case vm.OP_VOTE:
                        if mapTxFee[tx.Tx.ID] >= consensus.VoteForgerFee {
@@ -337,7 +337,7 @@ func (c *Chain) DoVoting(block *types.Block, mapTxFee map[bc.Hash]uint64) error
                                if err := json.Unmarshal(msg.Data, data); err != nil {
                                        return err
                                }
-                               c.engine.ProcessVote(address.EncodeAddress(), data.Forgers, hash, height)
+                               c.Engine.ProcessVote(address.EncodeAddress(), data.Forgers, hash, height)
                        }
                case vm.OP_REVOKE:
                        if mapTxFee[tx.Tx.ID] >= consensus.CancelVoteForgerFee {
@@ -345,7 +345,7 @@ func (c *Chain) DoVoting(block *types.Block, mapTxFee map[bc.Hash]uint64) error
                                if err := json.Unmarshal(msg.Data, data); err != nil {
                                        return err
                                }
-                               c.engine.ProcessCancelVote(address.EncodeAddress(), data.Forgers, hash, height)
+                               c.Engine.ProcessCancelVote(address.EncodeAddress(), data.Forgers, hash, height)
                        }
                }
        }
@@ -387,6 +387,9 @@ func (c *Chain) CalculateBalance(block *types.Block, fIsAdd bool) map[bc.Hash]ui
                }
                for _, output := range tx.Outputs {
                        fee -= output.Amount
+                       if vmutil.IsUnspendable(output.ControlProgram) {
+                               continue
+                       }
                        value := int64(output.Amount)
                        address, err = common.NewAddressWitnessPubKeyHash(output.ControlProgram[2:], &consensus.ActiveNetParams)
                        if err != nil {
@@ -403,7 +406,7 @@ func (c *Chain) CalculateBalance(block *types.Block, fIsAdd bool) map[bc.Hash]ui
                mapTxFee[tx.Tx.ID] = fee
        }
 
-       c.engine.UpdateAddressBalance(addressBalances)
+       c.Engine.UpdateAddressBalance(addressBalances)
        return mapTxFee
 }
 
@@ -415,7 +418,7 @@ func (c *Chain) RepairDPoSData(oldBlockHeight uint64, oldBlockHash bc.Hash) erro
        if block.Height != oldBlockHeight {
                return errors.New("The module vote records data with a problem")
        }
-       for i := block.Height + 1; i < c.bestNode.Height; i++ {
+       for i := block.Height + 1; i <= c.bestNode.Height; i++ {
                b, err := c.GetBlockByHeight(i)
                if err != nil {
                        return err