OSDN Git Service

update GetStandardUTXO
authorChengcheng Zhang <943420582@qq.com>
Fri, 28 Jun 2019 07:17:47 +0000 (15:17 +0800)
committerChengcheng Zhang <943420582@qq.com>
Fri, 28 Jun 2019 07:17:47 +0000 (15:17 +0800)
database/wallet_store.go
wallet/indexer.go
wallet/store.go
wallet/unconfirmed.go

index dc2af92..1c3f9d7 100644 (file)
@@ -306,8 +306,16 @@ func (store *WalletStore) SetGlobalTransactionIndex(globalTxID string, blockHash
 }
 
 // GetStandardUTXO get standard utxo by id
-func (store *WalletStore) GetStandardUTXO(outid bc.Hash) []byte {
-       return store.walletDB.Get(StandardUTXOKey(outid))
+func (store *WalletStore) GetStandardUTXO(outid bc.Hash) (*acc.UTXO, error) {
+       rawUTXO := store.walletDB.Get(StandardUTXOKey(outid))
+       if rawUTXO == nil {
+               return nil, fmt.Errorf("failed get standard UTXO, outputID: %s ", outid.String())
+       }
+       UTXO := new(acc.UTXO)
+       if err := json.Unmarshal(rawUTXO, UTXO); err != nil {
+               return nil, err
+       }
+       return UTXO, nil
 }
 
 // GetTransaction get tx by tx index
index 37a578c..e86dbf9 100644 (file)
@@ -115,9 +115,15 @@ transactionLoop:
                for _, v := range tx.Inputs {
                        outid, err := v.SpentOutputID()
                        if err != nil {
+                               log.WithFields(log.Fields{"module": logModule, "err": err, "outputID": outid.String()}).Error("filterAccountTxs fail.")
                                continue
                        }
-                       if bytes := w.store.GetStandardUTXO(outid); bytes != nil {
+                       utxo, err := w.store.GetStandardUTXO(outid)
+                       if err != nil {
+                               log.WithFields(log.Fields{"module": logModule, "err": err, "outputID": outid.String()}).Error("filterAccountTxs fail.")
+                               continue
+                       }
+                       if utxo != nil {
                                annotatedTxs = append(annotatedTxs, w.buildAnnotatedTransaction(tx, b, statusFail, pos))
                                continue transactionLoop
                        }
index 33bd676..f222cce 100644 (file)
@@ -20,7 +20,7 @@ type WalletStorer interface {
        SetTransaction(uint64, *query.AnnotatedTx) error
        DeleteUnconfirmedTransaction(string)
        SetGlobalTransactionIndex(string, *bc.Hash, uint64)
-       GetStandardUTXO(bc.Hash) []byte
+       GetStandardUTXO(bc.Hash) (*acc.UTXO, error)
        GetTransaction(string) ([]byte, error)
        GetGlobalTransaction(string) []byte
        GetTransactions() ([]*query.AnnotatedTx, error)
index 72b1dd2..aacb181 100644 (file)
@@ -122,7 +122,12 @@ func (w *Wallet) checkRelatedTransaction(tx *types.Tx) bool {
                if err != nil {
                        continue
                }
-               if bytes := w.store.GetStandardUTXO(outid); bytes != nil {
+               utxo, err := w.store.GetStandardUTXO(outid)
+               if err != nil {
+                       log.WithFields(log.Fields{"module": logModule, "err": err, "outputID": outid.String()}).Error("checkRelatedTransaction fail.")
+                       continue
+               }
+               if utxo != nil {
                        return true
                }
        }