OSDN Git Service

fix bug for vote & normal output (#433)
[bytom/vapor.git] / wallet / utxo.go
index 0419daf..a1b44fa 100644 (file)
@@ -121,7 +121,7 @@ func (w *Wallet) filterAccountUtxo(utxos []*account.UTXO) []*account.UTXO {
                var hash [32]byte
                sha3pool.Sum256(hash[:], []byte(s))
                cp, err := w.AccountMgr.GetControlProgram(bc.NewHash(hash))
-               if err != nil {
+               if err != nil && err != account.ErrFindCtrlProgram {
                        log.WithFields(log.Fields{"module": logModule, "err": err}).Error("filterAccountUtxo fail.")
                        continue
                }
@@ -209,13 +209,9 @@ func txInToUtxos(tx *types.Tx, statusFail bool) []*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.ActiveNetParams.CoinbasePendingBlockNumber
-       }
-
        utxos := []*account.UTXO{}
        for i, out := range tx.Outputs {
+               validHeight := uint64(0)
                entryOutput, err := tx.Entry(*tx.ResultIds[i])
                if err != nil {
                        log.WithFields(log.Fields{"module": logModule, "err": err}).Error("txOutToUtxos fail on get entryOutput")
@@ -228,6 +224,11 @@ func txOutToUtxos(tx *types.Tx, statusFail bool, blockHeight uint64) []*account.
                        if (statusFail && *out.AssetAmount().AssetId != *consensus.BTMAssetID) || out.AssetAmount().Amount == uint64(0) {
                                continue
                        }
+
+                       if tx.Inputs[0].InputType() == types.CoinbaseInputType {
+                               validHeight = blockHeight + consensus.ActiveNetParams.CoinbasePendingBlockNumber
+                       }
+
                        utxo = &account.UTXO{
                                OutputID:       *tx.OutputID(i),
                                AssetID:        *out.AssetAmount().AssetId,