OSDN Git Service

update GetControlProgram
authorChengcheng Zhang <943420582@qq.com>
Fri, 28 Jun 2019 06:11:23 +0000 (14:11 +0800)
committerChengcheng Zhang <943420582@qq.com>
Fri, 28 Jun 2019 06:11:23 +0000 (14:11 +0800)
database/wallet_store.go
wallet/annotated.go
wallet/indexer.go
wallet/store.go
wallet/unconfirmed.go
wallet/utxo.go

index cbc9434..16f4fcc 100644 (file)
@@ -6,6 +6,7 @@ import (
        "fmt"
        "sort"
 
+       acc "github.com/vapor/account"
        "github.com/vapor/asset"
        "github.com/vapor/blockchain/query"
        "github.com/vapor/blockchain/signers"
@@ -219,23 +220,17 @@ func (store *WalletStore) SetAssetDefinition(assetID *bc.AssetID, definition []b
        }
 }
 
-// // GetRawProgram get raw program by hash
-// func (store *WalletStore) GetRawProgram(hash common.Hash) ([]byte, error) {
-//     rawProgram := store.walletDB.Get(ContractKey(hash))
-//     if rawProgram == nil {
-//             return nil, fmt.Errorf("failed get account control program:%x ", hash)
-//     }
-
-//     accountCP := new(account.CtrlProgram)
-//     if err := json.Unmarshal(rawProgram, &accountCP); err != nil {
-//             return nil, err
-//     }
-//     return accountCP, nil
-// }
-
-// GetRawProgram get raw program by hash
-func (store *WalletStore) GetRawProgram(hash common.Hash) []byte {
-       return store.walletDB.Get(ContractKey(hash))
+// GetControlProgram get raw program by hash
+func (store *WalletStore) GetControlProgram(hash common.Hash) (*acc.CtrlProgram, error) {
+       rawProgram := store.walletDB.Get(ContractKey(hash))
+       if rawProgram == nil {
+               return nil, fmt.Errorf("failed get account control program:%x ", hash)
+       }
+       accountCP := new(acc.CtrlProgram)
+       if err := json.Unmarshal(rawProgram, &accountCP); err != nil {
+               return nil, err
+       }
+       return accountCP, nil
 }
 
 // GetAccountByAccountID get account value by account ID
index f8ab494..b146e4a 100644 (file)
@@ -98,18 +98,16 @@ func annotateTxsAccount(txs []*query.AnnotatedTx, store WalletStorer) {
 
 func getAccountFromACP(program []byte, store WalletStorer) (*account.Account, error) {
        var hash common.Hash
-       accountCP := account.CtrlProgram{}
        localAccount := account.Account{}
 
        sha3pool.Sum256(hash[:], program)
-       rawProgram := store.GetRawProgram(hash)
-       if rawProgram == nil {
-               return nil, fmt.Errorf("failed get account control program:%x ", hash)
-       }
-
-       if err := json.Unmarshal(rawProgram, &accountCP); err != nil {
+       accountCP, err := store.GetControlProgram(hash)
+       if err != nil {
                return nil, err
        }
+       if accountCP == nil {
+               return nil, fmt.Errorf("failed get account control program:%x ", hash)
+       }
 
        accountValue := store.GetAccountByAccountID(accountCP.AccountID)
        if accountValue == nil {
index f44128b..139f8c4 100644 (file)
@@ -105,7 +105,12 @@ transactionLoop:
                        var hash [32]byte
                        sha3pool.Sum256(hash[:], v.ControlProgram())
 
-                       if bytes := w.store.GetRawProgram(hash); bytes != nil {
+                       cp, err := w.store.GetControlProgram(hash)
+                       if err != nil {
+                               log.WithFields(log.Fields{"module": logModule, "err": err, "hash": string(hash[:])}).Error("filterAccountTxs fail.")
+                               continue
+                       }
+                       if cp != nil {
                                annotatedTxs = append(annotatedTxs, w.buildAnnotatedTransaction(tx, b, statusFail, pos))
                                continue transactionLoop
                        }
index 536e91a..e600c13 100644 (file)
@@ -1,6 +1,7 @@
 package wallet
 
 import (
+       acc "github.com/vapor/account"
        "github.com/vapor/asset"
        "github.com/vapor/blockchain/query"
        "github.com/vapor/common"
@@ -13,7 +14,7 @@ type WalletStorer interface {
        CommitBatch()
        GetAssetDefinition(*bc.AssetID) (*asset.Asset, error)
        SetAssetDefinition(*bc.AssetID, []byte)
-       GetRawProgram(common.Hash) []byte
+       GetControlProgram(hash common.Hash) (*acc.CtrlProgram, error)
        GetAccountByAccountID(string) []byte
        DeleteTransactions(uint64)
        SetTransaction(uint64, uint32, string, []byte)
index f860894..72b1dd2 100644 (file)
@@ -107,7 +107,12 @@ func (w *Wallet) checkRelatedTransaction(tx *types.Tx) bool {
        for _, v := range tx.Outputs {
                var hash [32]byte
                sha3pool.Sum256(hash[:], v.ControlProgram())
-               if bytes := w.store.GetRawProgram(hash); bytes != nil {
+               cp, err := w.store.GetControlProgram(hash)
+               if err != nil {
+                       log.WithFields(log.Fields{"module": logModule, "err": err, "hash": string(hash[:])}).Error("checkRelatedTransaction fail.")
+                       continue
+               }
+               if cp != nil {
                        return true
                }
        }
index 0dfec1c..b06e112 100644 (file)
@@ -133,14 +133,12 @@ func (w *Wallet) filterAccountUtxo(utxos []*account.UTXO) []*account.UTXO {
 
                var hash [32]byte
                sha3pool.Sum256(hash[:], []byte(s))
-               data := w.store.GetRawProgram(hash)
-               if data == nil {
+               cp, err := w.store.GetControlProgram(hash)
+               if err != nil {
+                       log.WithFields(log.Fields{"module": logModule, "err": err}).Error("filterAccountUtxo fail.")
                        continue
                }
-
-               cp := &account.CtrlProgram{}
-               if err := json.Unmarshal(data, cp); err != nil {
-                       log.WithFields(log.Fields{"module": logModule, "err": err}).Error("filterAccountUtxo fail on unmarshal control program")
+               if cp == nil {
                        continue
                }