if !config.Wallet.Disable { // modify next some lines
walletDB := dbm.NewDB("wallet", config.DBBackend, config.DBDir())
+ walletStore := w.NewStore(walletDB)
accounts = account.NewManager(walletDB, chain)
assets = asset.NewRegistry(walletDB, chain)
- wallet, err = w.NewWallet(walletDB, accounts, assets, hsm, chain, dispatcher, config.Wallet.TxIndex)
+ wallet, err = w.NewWallet(walletStore, accounts, assets, hsm, chain, dispatcher, config.Wallet.TxIndex)
if err != nil {
log.WithFields(log.Fields{"module": logModule, "error": err}).Error("init NewWallet")
}
return err
}
walletDB := dbm.NewDB("wallet", "leveldb", path.Join(dirPath, "wallet_db"))
+ walletStore := w.NewStore(walletDB)
accountManager := account.NewManager(walletDB, chain)
assets := asset.NewRegistry(walletDB, chain)
dispatcher := event.NewDispatcher()
- wallet, err := w.NewWallet(walletDB, accountManager, assets, hsm, chain, dispatcher, false)
+ wallet, err := w.NewWallet(walletStore, accountManager, assets, hsm, chain, dispatcher, false)
if err != nil {
return err
}
defer os.RemoveAll(dirPath)
testDB := dbm.NewDB("testdb", "leveldb", dirPath)
+ testStore := NewStore(testDB)
hsm, err := pseudohsm.New(dirPath)
if err != nil {
t.Fatal(err)
}
acctMgr := account.NewManager(testDB, nil)
- recoveryMgr := newRecoveryManager(testDB, acctMgr)
+ recoveryMgr := newRecoveryManager(testStore, acctMgr)
recoveryMgr.state = newRecoveryState()
recoveryMgr.state.XPubs = []chainkd.XPub{xpub.XPub}
recoveryMgr.state.XPubsStatus = newBranchRecoveryState(acctRecoveryWindow)
defer os.RemoveAll(dirPath)
testDB := dbm.NewDB("testdb", "leveldb", dirPath)
+ testStore := NewStore(testDB)
hsm, err := pseudohsm.New(dirPath)
if err != nil {
t.Fatal(err)
}
acctMgr := account.NewManager(testDB, nil)
- recoveryMgr := newRecoveryManager(testDB, acctMgr)
+ recoveryMgr := newRecoveryManager(testStore, acctMgr)
acc1 := &account.Account{ID: "testA", Alias: "test1", Signer: &signers.Signer{XPubs: []chainkd.XPub{xpub.XPub}, KeyIndex: 1, DeriveRule: signers.BIP0044}}
acc2 := &account.Account{ID: "testB", Alias: "test2"}
acc3 := &account.Account{ID: "testC", Alias: "test3", Signer: &signers.Signer{XPubs: []chainkd.XPub{xpub.XPub}, KeyIndex: 2, DeriveRule: 3}}
testDB := dbm.NewDB("testdb", "leveldb", dirPath)
recoveryDB := dbm.NewDB("recdb", "leveldb", dirPath)
+ recoveryStore := NewStore(recoveryDB)
hsm, err := pseudohsm.New(dirPath)
if err != nil {
t.Fatal(err)
acctMgr := account.NewManager(testDB, nil)
txs, err := MockTxsP2PKH(acctMgr, xpub.XPub, false)
recAcctMgr := account.NewManager(recoveryDB, nil)
- recoveryMgr := newRecoveryManager(recoveryDB, recAcctMgr)
+ recoveryMgr := newRecoveryManager(recoveryStore, recAcctMgr)
cases := []struct {
xPubs []chainkd.XPub
testDB := dbm.NewDB("testdb", "leveldb", dirPath)
recoveryDB := dbm.NewDB("recdb", "leveldb", dirPath)
+ recoveryStore := NewStore(recoveryDB)
hsm, err := pseudohsm.New(dirPath)
if err != nil {
t.Fatal(err)
}
}
- recoveryMgr := newRecoveryManager(recoveryDB, recAcctMgr)
+ recoveryMgr := newRecoveryManager(recoveryStore, recAcctMgr)
acct := &account.Account{ID: "testA", Alias: "test1", Signer: &signers.Signer{XPubs: []chainkd.XPub{xpub.XPub}, KeyIndex: 1, DeriveRule: 3}}
defer os.RemoveAll(dirPath)
testDB := dbm.NewDB("testdb", "leveldb", dirPath)
+ testStore := NewStore(testDB)
hsm, err := pseudohsm.New(dirPath)
if err != nil {
t.Fatal(err)
}
acctMgr := account.NewManager(testDB, nil)
- recoveryMgr := newRecoveryManager(testDB, acctMgr)
+ recoveryMgr := newRecoveryManager(testStore, acctMgr)
acc1 := &account.Account{ID: "testA", Alias: "test1", Signer: &signers.Signer{XPubs: []chainkd.XPub{xpub1.XPub}, KeyIndex: 1, DeriveRule: signers.BIP0044}}
acc2 := &account.Account{ID: "testB", Alias: "test2", Signer: &signers.Signer{XPubs: []chainkd.XPub{xpub2.XPub}, KeyIndex: 1, DeriveRule: signers.BIP0032}}
acc3 := &account.Account{ID: "testC", Alias: "test3", Signer: &signers.Signer{XPubs: []chainkd.XPub{xpub2.XPub}, KeyIndex: 2, DeriveRule: signers.BIP0044}}
defer os.RemoveAll(dirPath)
testDB := dbm.NewDB("testdb", "leveldb", "temp")
+ testStore := NewStore(testDB)
defer os.RemoveAll("temp")
hsm, err := pseudohsm.New(dirPath)
}
acctMgr := account.NewManager(testDB, nil)
- recoveryMgr := newRecoveryManager(testDB, acctMgr)
+ recoveryMgr := newRecoveryManager(testStore, acctMgr)
// StatusInit init recovery status manager.
recoveryMgr.state = newRecoveryState()
recoveryMgr.state.XPubs = []chainkd.XPub{xpub.XPub}
recoveryMgr.commitStatusInfo()
- recoveryMgrRestore := newRecoveryManager(testDB, acctMgr)
+ recoveryMgrRestore := newRecoveryManager(testStore, acctMgr)
if err := recoveryMgrRestore.LoadStatusInfo(); err != nil {
t.Fatal("TestLoadStatusInfo err:", err)
}
defer os.RemoveAll(dirPath)
testDB := dbm.NewDB("testdb", "leveldb", "temp")
+ testStore := NewStore(testDB)
defer os.RemoveAll("temp")
acctMgr := account.NewManager(testDB, nil)
- recoveryMgr := newRecoveryManager(testDB, acctMgr)
+ recoveryMgr := newRecoveryManager(testStore, acctMgr)
if !recoveryMgr.tryStartXPubsRec() {
t.Fatal("recovery manager try lock test err")
}
defer os.RemoveAll(dirPath)
testDB := dbm.NewDB("testdb", "leveldb", dirPath)
+ testStore := NewStore(testDB)
hsm, err := pseudohsm.New(dirPath)
if err != nil {
t.Fatal(err)
contractIndexResidue := uint64(5)
acctMgr := account.NewManager(testDB, nil)
- recoveryMgr := newRecoveryManager(testDB, acctMgr)
+ recoveryMgr := newRecoveryManager(testStore, acctMgr)
acct := &account.Account{ID: "testA", Alias: "test1", Signer: &signers.Signer{XPubs: []chainkd.XPub{xpub1.XPub}, KeyIndex: 1, DeriveRule: signers.BIP0044}}
cp1 := &account.CtrlProgram{AccountID: acct.ID, Address: "address1", KeyIndex: 10, Change: false}
"github.com/vapor/common"
dbm "github.com/vapor/database/leveldb"
"github.com/vapor/protocol/bc"
- "github.com/vapor/protocol/bc/types"
)
// Store interface contains wallet storage functions.
GetAccountValueByAccountID(string) []byte
DeleteTransactionByHeight(uint64)
SetRawTransaction(uint64, uint32, []byte)
- SaveExternalAssetDefinition(*types.Block)
SetHeightAndPostion(string, uint64, uint32)
DeleteUnconfirmedTxByTxID(string)
SetGlobalTxIndex(string, *bc.Hash, uint64)
}
// NewLevelDBStore create new LevelDBStore struct
-func NewLevelDBStore(db dbm.DB) *LevelDBStore {
+func NewStore(db dbm.DB) *LevelDBStore {
return &LevelDBStore{
DB: db,
}
return nil, err
}
+ fmt.Println("GetUnconfirmedTxs len(annotatedTxs):", len(annotatedTxs))
+
newAnnotatedTxs := []*query.AnnotatedTx{}
for _, annotatedTx := range annotatedTxs {
if accountID == "" || findTransactionsByAccount(annotatedTx, accountID) {
}
sort.Sort(SortByTimestamp(newAnnotatedTxs))
+ fmt.Println("GetUnconfirmedTxs:", len(newAnnotatedTxs))
return newAnnotatedTxs, nil
}
}
func (w *Wallet) delExpiredTxs() error {
+ fmt.Println("delExpiredTxs...")
AnnotatedTx, err := w.GetUnconfirmedTxs("")
if err != nil {
return err
defer os.RemoveAll(dirPath)
testDB := dbm.NewDB("testdb", "leveldb", "temp")
+ testStore := NewStore(testDB)
defer os.RemoveAll("temp")
accountManager := account.NewManager(testDB, nil)
asset := bc.AssetID{V0: 5}
dispatcher := event.NewDispatcher()
- w := mockWallet(testDB, accountManager, reg, nil, dispatcher, false)
+ w := mockWallet(testStore, accountManager, reg, nil, dispatcher, false)
utxos := []*account.UTXO{}
btmUtxo := mockUTXO(controlProg, consensus.BTMAssetID)
utxos = append(utxos, btmUtxo)
annotatedTxs = append(annotatedTxs, annotatedTx)
}
- annotateTxsAccount(annotatedTxs, w.DB)
+ annotateTxsAccount(annotatedTxs, w.store)
annotateTxsAsset(w, annotatedTxs)
return annotatedTxs
func TestGetAccountUtxos(t *testing.T) {
testDB := dbm.NewDB("testdb", "leveldb", "temp")
+ testStore := NewStore(testDB)
defer func() {
testDB.Close()
os.RemoveAll("temp")
},
}
- w := &Wallet{DB: testDB}
+ w := &Wallet{store: testStore}
for i, c := range cases {
for k, u := range c.dbUtxos {
data, err := json.Marshal(u)
func TestFilterAccountUtxo(t *testing.T) {
testDB := dbm.NewDB("testdb", "leveldb", "temp")
+ testStore := NewStore(testDB)
defer func() {
testDB.Close()
os.RemoveAll("temp")
},
}
- w := &Wallet{DB: testDB}
+ w := &Wallet{store: testStore}
for i, c := range cases {
for s, p := range c.dbPrograms {
data, err := json.Marshal(p)
import (
"encoding/json"
+ "fmt"
"io/ioutil"
"os"
"reflect"
defer os.RemoveAll(dirPath)
testDB := dbm.NewDB("testdb", "leveldb", "temp")
+ testStore := NewStore(testDB)
defer func() {
testDB.Close()
os.RemoveAll("temp")
}()
dispatcher := event.NewDispatcher()
- w := mockWallet(testDB, nil, nil, nil, dispatcher, false)
+ w := mockWallet(testStore, nil, nil, nil, dispatcher, false)
// legacy status test case
type legacyStatusInfo struct {
t.Fatal("Marshal legacyStatusInfo")
}
- w.DB.Set(walletKey, rawWallet)
- rawWallet = w.DB.Get(walletKey)
+ w.store.SetWalletInfo(rawWallet)
+ rawWallet = w.store.GetWalletInfo()
if rawWallet == nil {
t.Fatal("fail to load wallet StatusInfo")
}
t.Fatal("save wallet info")
}
- w.DB.Set(walletKey, rawWallet)
- rawWallet = w.DB.Get(walletKey)
+ w.store.SetWalletInfo(rawWallet)
+ rawWallet = w.store.GetWalletInfo()
if rawWallet == nil {
t.Fatal("fail to load wallet StatusInfo")
}
config.CommonConfig = config.DefaultConfig()
testDB := dbm.NewDB("testdb", "leveldb", "temp")
+ testStore := NewStore(testDB)
defer func() {
testDB.Close()
os.RemoveAll("temp")
txStatus.SetStatus(1, false)
store.SaveBlock(block, txStatus)
- w := mockWallet(testDB, accountManager, reg, chain, dispatcher, true)
+ w := mockWallet(testStore, accountManager, reg, chain, dispatcher, true)
err = w.AttachBlock(block)
if err != nil {
t.Fatal(err)
}
for position, tx := range block.Transactions {
- get := w.DB.Get(calcGlobalTxIndexKey(tx.ID.String()))
+ get := w.store.GetGlobalTxByTxID(tx.ID.String())
bh := block.BlockHeader.Hash()
expect := calcGlobalTxIndex(&bh, uint64(position))
if !reflect.DeepEqual(get, expect) {
config.CommonConfig = config.DefaultConfig()
testDB := dbm.NewDB("testdb", "leveldb", "temp")
+ testStore := NewStore(testDB)
defer func() {
testDB.Close()
os.RemoveAll("temp")
t.Fatal("save wallet info")
}
- w := mockWallet(testDB, nil, nil, chain, dispatcher, false)
- w.DB.Set(walletKey, rawWallet)
- rawWallet = w.DB.Get(walletKey)
+ w := mockWallet(testStore, nil, nil, chain, dispatcher, false)
+ w.store.SetWalletInfo(rawWallet)
+ rawWallet = w.store.GetWalletInfo()
if rawWallet == nil {
t.Fatal("fail to load wallet StatusInfo")
}
}
config.CommonConfig = config.DefaultConfig()
testDB := dbm.NewDB("testdb", "leveldb", dirPath)
+ testStore := NewStore(testDB)
defer func() {
testDB.Close()
os.RemoveAll(dirPath)
//block := mockSingleBlock(tx)
txStatus := bc.NewTransactionStatus()
txStatus.SetStatus(0, false)
- w, err := NewWallet(testDB, accountManager, reg, hsm, chain, dispatcher, false)
+ w, err := NewWallet(testStore, accountManager, reg, hsm, chain, dispatcher, false)
go w.memPoolTxQueryLoop()
w.eventDispatcher.Post(protocol.TxMsgEvent{TxMsg: &protocol.TxPoolMsg{TxDesc: &protocol.TxDesc{Tx: tx}, MsgType: protocol.MsgNewTx}})
time.Sleep(time.Millisecond * 10)
- if _, err = w.GetUnconfirmedTxByTxID(tx.ID.String()); err != nil {
- t.Fatal("disaptch new tx msg error:", err)
+ if txxx, err := w.GetUnconfirmedTxByTxID(tx.ID.String()); err != nil {
+ t.Fatal("dispatch new tx msg error:", err)
+ } else {
+ fmt.Println("txxx:", txxx)
}
w.eventDispatcher.Post(protocol.TxMsgEvent{TxMsg: &protocol.TxPoolMsg{TxDesc: &protocol.TxDesc{Tx: tx}, MsgType: protocol.MsgRemoveTx}})
time.Sleep(time.Millisecond * 10)
t.Fatal("get unconfirmed tx error:", err)
}
+ fmt.Println("len(txs) is:", len(txs))
+
if len(txs) != 0 {
- t.Fatal("disaptch remove tx msg error")
+ t.Fatal("dispatch remove tx msg error")
}
w.eventDispatcher.Post(protocol.TxMsgEvent{TxMsg: &protocol.TxPoolMsg{TxDesc: &protocol.TxDesc{Tx: tx}, MsgType: 2}})
return tplBuilder.Build()
}
-func mockWallet(walletDB dbm.DB, account *account.Manager, asset *asset.Registry, chain *protocol.Chain, dispatcher *event.Dispatcher, txIndexFlag bool) *Wallet {
+func mockWallet(store Store, account *account.Manager, asset *asset.Registry, chain *protocol.Chain, dispatcher *event.Dispatcher, txIndexFlag bool) *Wallet {
wallet := &Wallet{
- DB: walletDB,
+ store: store,
AccountMgr: account,
AssetReg: asset,
chain: chain,
- RecoveryMgr: newRecoveryManager(walletDB, account),
+ RecoveryMgr: newRecoveryManager(store, account),
eventDispatcher: dispatcher,
TxIndexFlag: txIndexFlag,
}