}
// GetAccountUTXOs get all account unspent outputs
-func (store *WalletStore) GetAccountUTXOs(key string) [][]byte {
+func (store *WalletStore) GetAccountUTXOs(key string) ([]*acc.UTXO, error) {
accountUtxoIter := store.walletDB.IteratorPrefix([]byte(key))
defer accountUtxoIter.Release()
- rawUTXOs := make([][]byte, 0)
+ confirmedUTXOs := []*acc.UTXO{}
for accountUtxoIter.Next() {
- utxo := accountUtxoIter.Value()
- rawUTXOs = append(rawUTXOs, utxo)
+ utxo := new(acc.UTXO)
+ if err := json.Unmarshal(accountUtxoIter.Value(), utxo); err != nil {
+ return nil, err
+ }
+ confirmedUTXOs = append(confirmedUTXOs, utxo)
}
- return rawUTXOs
+ return confirmedUTXOs, nil
}
// SetRecoveryStatus set recovery status
SetWalletInfo([]byte)
DeleteWalletTransactions()
DeleteWalletUTXOs()
- GetAccountUTXOs(key string) [][]byte
+ GetAccountUTXOs(string) ([]*acc.UTXO, error)
SetRecoveryStatus([]byte, []byte)
DeleteRecoveryStatus([]byte)
GetRecoveryStatus([]byte) []byte
package wallet
import (
- "encoding/json"
-
log "github.com/sirupsen/logrus"
"github.com/vapor/account"
accountUtxos = w.AccountMgr.ListUnconfirmedUtxo(accountID, isSmartContract)
}
- rawConfirmedUTXOs := w.store.GetAccountUTXOs(string(prefix) + id)
- confirmedUTXOs := []*account.UTXO{}
- for _, rawConfirmedUTXO := range rawConfirmedUTXOs {
- confirmedUTXO := new(account.UTXO)
- if err := json.Unmarshal(rawConfirmedUTXO, confirmedUTXO); err != nil {
- log.WithFields(log.Fields{"module": logModule, "err": err}).Warn("GetAccountUTXOs fail on unmarshal utxo")
- continue
- }
- confirmedUTXOs = append(confirmedUTXOs, confirmedUTXO)
+ confirmedUTXOs, err := w.store.GetAccountUTXOs(string(prefix) + id)
+ if err != nil {
+ log.WithFields(log.Fields{"module": logModule, "err": err}).Error("GetAccountUtxos fail.")
}
accountUtxos = append(accountUtxos, confirmedUTXOs...)
if vote && accountUtxo.Vote == nil {
continue
}
-
if accountID == accountUtxo.AccountID || accountID == "" {
newAccountUtxos = append(newAccountUtxos, accountUtxo)
}