OSDN Git Service

opt code
[bytom/vapor.git] / wallet / utxo.go
index 2fea723..aa083dc 100644 (file)
@@ -67,11 +67,7 @@ func (w *Wallet) attachUtxos(batch dbm.Batch, b *types.Block, txStatus *bc.Trans
                }
 
                //hand update the transaction output utxos
-               validHeight := uint64(0)
-               if txIndex == 0 {
-                       validHeight = b.Height + consensus.CoinbasePendingBlockNumber
-               }
-               outputUtxos := txOutToUtxos(tx, statusFail, validHeight, b.Height)
+               outputUtxos := txOutToUtxos(tx, statusFail, b.Height)
                utxos := w.filterAccountUtxo(outputUtxos)
                if err := batchSaveUtxos(utxos, batch); err != nil {
                        log.WithFields(log.Fields{"module": logModule, "err": err}).Error("attachUtxos fail on batchSaveUtxos")
@@ -225,7 +221,12 @@ func txInToUtxos(tx *types.Tx, statusFail bool) []*account.UTXO {
        return utxos
 }
 
-func txOutToUtxos(tx *types.Tx, statusFail bool, vaildHeight, blockHeight uint64) []*account.UTXO {
+func txOutToUtxos(tx *types.Tx, statusFail bool, blockHeight uint64) []*account.UTXO {
+       validHeight := uint64(0)
+       if tx.Inputs[0].InputType() == types.CoinbaseInputType {
+               validHeight = blockHeight + consensus.CoinbasePendingBlockNumber
+       }
+
        utxos := []*account.UTXO{}
        for i, out := range tx.Outputs {
                entryOutput, err := tx.Entry(*tx.ResultIds[i])
@@ -247,7 +248,7 @@ func txOutToUtxos(tx *types.Tx, statusFail bool, vaildHeight, blockHeight uint64
                                ControlProgram: out.ControlProgram(),
                                SourceID:       *bcOut.Source.Ref,
                                SourcePos:      bcOut.Source.Position,
-                               ValidHeight:    vaildHeight,
+                               ValidHeight:    validHeight,
                        }
 
                case *bc.VoteOutput:
@@ -256,8 +257,8 @@ func txOutToUtxos(tx *types.Tx, statusFail bool, vaildHeight, blockHeight uint64
                        }
 
                        voteValidHeight := blockHeight + consensus.VotePendingBlockNumber
-                       if vaildHeight < voteValidHeight {
-                               vaildHeight = voteValidHeight
+                       if validHeight < voteValidHeight {
+                               validHeight = voteValidHeight
                        }
 
                        utxo = &account.UTXO{
@@ -267,7 +268,7 @@ func txOutToUtxos(tx *types.Tx, statusFail bool, vaildHeight, blockHeight uint64
                                ControlProgram: out.ControlProgram(),
                                SourceID:       *bcOut.Source.Ref,
                                SourcePos:      bcOut.Source.Position,
-                               ValidHeight:    vaildHeight,
+                               ValidHeight:    validHeight,
                                Vote:           bcOut.Vote,
                        }