OSDN Git Service

update
authorChengcheng Zhang <943420582@qq.com>
Fri, 21 Jun 2019 16:42:52 +0000 (00:42 +0800)
committerChengcheng Zhang <943420582@qq.com>
Fri, 21 Jun 2019 16:42:52 +0000 (00:42 +0800)
node/node.go
test/wallet_test_util.go
wallet/recovery_test.go
wallet/store.go
wallet/unconfirmed.go
wallet/unconfirmed_test.go
wallet/utxo_test.go
wallet/wallet_test.go

index 2631f3a..60d0ccc 100644 (file)
@@ -110,9 +110,10 @@ func NewNode(config *cfg.Config) *Node {
 
        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")
                }
index b03b430..5768937 100644 (file)
@@ -241,10 +241,11 @@ func (cfg *walletTestConfig) Run() error {
                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
        }
index eff5850..f0bf4ca 100644 (file)
@@ -136,6 +136,7 @@ func TestXPubsRecoveryLock(t *testing.T) {
        defer os.RemoveAll(dirPath)
 
        testDB := dbm.NewDB("testdb", "leveldb", dirPath)
+       testStore := NewStore(testDB)
        hsm, err := pseudohsm.New(dirPath)
        if err != nil {
                t.Fatal(err)
@@ -147,7 +148,7 @@ func TestXPubsRecoveryLock(t *testing.T) {
        }
 
        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)
@@ -185,6 +186,7 @@ func TestExtendScanAddresses(t *testing.T) {
        defer os.RemoveAll(dirPath)
 
        testDB := dbm.NewDB("testdb", "leveldb", dirPath)
+       testStore := NewStore(testDB)
        hsm, err := pseudohsm.New(dirPath)
        if err != nil {
                t.Fatal(err)
@@ -196,7 +198,7 @@ func TestExtendScanAddresses(t *testing.T) {
        }
 
        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}}
@@ -241,6 +243,7 @@ func TestRecoveryFromXPubs(t *testing.T) {
 
        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)
@@ -254,7 +257,7 @@ func TestRecoveryFromXPubs(t *testing.T) {
        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
@@ -315,6 +318,7 @@ func TestRecoveryByRescanAccount(t *testing.T) {
 
        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)
@@ -343,7 +347,7 @@ func TestRecoveryByRescanAccount(t *testing.T) {
                }
        }
 
-       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}}
 
@@ -403,6 +407,7 @@ func TestReportFound(t *testing.T) {
        defer os.RemoveAll(dirPath)
 
        testDB := dbm.NewDB("testdb", "leveldb", dirPath)
+       testStore := NewStore(testDB)
        hsm, err := pseudohsm.New(dirPath)
        if err != nil {
                t.Fatal(err)
@@ -419,7 +424,7 @@ func TestReportFound(t *testing.T) {
        }
 
        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}}
@@ -490,6 +495,7 @@ func TestLoadStatusInfo(t *testing.T) {
        defer os.RemoveAll(dirPath)
 
        testDB := dbm.NewDB("testdb", "leveldb", "temp")
+       testStore := NewStore(testDB)
        defer os.RemoveAll("temp")
 
        hsm, err := pseudohsm.New(dirPath)
@@ -503,7 +509,7 @@ func TestLoadStatusInfo(t *testing.T) {
        }
 
        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}
@@ -516,7 +522,7 @@ func TestLoadStatusInfo(t *testing.T) {
 
        recoveryMgr.commitStatusInfo()
 
-       recoveryMgrRestore := newRecoveryManager(testDB, acctMgr)
+       recoveryMgrRestore := newRecoveryManager(testStore, acctMgr)
        if err := recoveryMgrRestore.LoadStatusInfo(); err != nil {
                t.Fatal("TestLoadStatusInfo err:", err)
        }
@@ -564,10 +570,11 @@ func TestLock(t *testing.T) {
        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")
        }
@@ -622,6 +629,7 @@ func TestContractIndexResidue(t *testing.T) {
        defer os.RemoveAll(dirPath)
 
        testDB := dbm.NewDB("testdb", "leveldb", dirPath)
+       testStore := NewStore(testDB)
        hsm, err := pseudohsm.New(dirPath)
        if err != nil {
                t.Fatal(err)
@@ -634,7 +642,7 @@ func TestContractIndexResidue(t *testing.T) {
 
        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}
index 2442beb..cffb05b 100644 (file)
@@ -10,7 +10,6 @@ import (
        "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.
@@ -21,7 +20,6 @@ type Store interface {
        GetAccountValueByAccountID(string) []byte
        DeleteTransactionByHeight(uint64)
        SetRawTransaction(uint64, uint32, []byte)
-       SaveExternalAssetDefinition(*types.Block)
        SetHeightAndPostion(string, uint64, uint32)
        DeleteUnconfirmedTxByTxID(string)
        SetGlobalTxIndex(string, *bc.Hash, uint64)
@@ -53,7 +51,7 @@ type LevelDBStore struct {
 }
 
 // NewLevelDBStore create new LevelDBStore struct
-func NewLevelDBStore(db dbm.DB) *LevelDBStore {
+func NewStore(db dbm.DB) *LevelDBStore {
        return &LevelDBStore{
                DB: db,
        }
index 9b4dd46..0183198 100644 (file)
@@ -51,6 +51,8 @@ func (w *Wallet) GetUnconfirmedTxs(accountID string) ([]*query.AnnotatedTx, erro
                return nil, err
        }
 
+       fmt.Println("GetUnconfirmedTxs len(annotatedTxs):", len(annotatedTxs))
+
        newAnnotatedTxs := []*query.AnnotatedTx{}
        for _, annotatedTx := range annotatedTxs {
                if accountID == "" || findTransactionsByAccount(annotatedTx, accountID) {
@@ -60,6 +62,7 @@ func (w *Wallet) GetUnconfirmedTxs(accountID string) ([]*query.AnnotatedTx, erro
        }
 
        sort.Sort(SortByTimestamp(newAnnotatedTxs))
+       fmt.Println("GetUnconfirmedTxs:", len(newAnnotatedTxs))
        return newAnnotatedTxs, nil
 }
 
@@ -150,6 +153,7 @@ func (w *Wallet) saveUnconfirmedTx(tx *types.Tx) error {
 }
 
 func (w *Wallet) delExpiredTxs() error {
+       fmt.Println("delExpiredTxs...")
        AnnotatedTx, err := w.GetUnconfirmedTxs("")
        if err != nil {
                return err
index 60ece60..9594ae9 100644 (file)
@@ -27,6 +27,7 @@ func TestWalletUnconfirmedTxs(t *testing.T) {
        defer os.RemoveAll(dirPath)
 
        testDB := dbm.NewDB("testdb", "leveldb", "temp")
+       testStore := NewStore(testDB)
        defer os.RemoveAll("temp")
 
        accountManager := account.NewManager(testDB, nil)
@@ -56,7 +57,7 @@ func TestWalletUnconfirmedTxs(t *testing.T) {
        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)
@@ -126,7 +127,7 @@ func AnnotatedTxs(txs []*types.Tx, w *Wallet) []*query.AnnotatedTx {
                annotatedTxs = append(annotatedTxs, annotatedTx)
        }
 
-       annotateTxsAccount(annotatedTxs, w.DB)
+       annotateTxsAccount(annotatedTxs, w.store)
        annotateTxsAsset(w, annotatedTxs)
 
        return annotatedTxs
index 86450ba..6a3cb98 100644 (file)
@@ -18,6 +18,7 @@ import (
 
 func TestGetAccountUtxos(t *testing.T) {
        testDB := dbm.NewDB("testdb", "leveldb", "temp")
+       testStore := NewStore(testDB)
        defer func() {
                testDB.Close()
                os.RemoveAll("temp")
@@ -185,7 +186,7 @@ func TestGetAccountUtxos(t *testing.T) {
                },
        }
 
-       w := &Wallet{DB: testDB}
+       w := &Wallet{store: testStore}
        for i, c := range cases {
                for k, u := range c.dbUtxos {
                        data, err := json.Marshal(u)
@@ -210,6 +211,7 @@ func TestGetAccountUtxos(t *testing.T) {
 
 func TestFilterAccountUtxo(t *testing.T) {
        testDB := dbm.NewDB("testdb", "leveldb", "temp")
+       testStore := NewStore(testDB)
        defer func() {
                testDB.Close()
                os.RemoveAll("temp")
@@ -349,7 +351,7 @@ func TestFilterAccountUtxo(t *testing.T) {
                },
        }
 
-       w := &Wallet{DB: testDB}
+       w := &Wallet{store: testStore}
        for i, c := range cases {
                for s, p := range c.dbPrograms {
                        data, err := json.Marshal(p)
index 823eab9..f3c18f2 100644 (file)
@@ -2,6 +2,7 @@ package wallet
 
 import (
        "encoding/json"
+       "fmt"
        "io/ioutil"
        "os"
        "reflect"
@@ -53,13 +54,14 @@ func TestWalletVersion(t *testing.T) {
        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 {
@@ -73,8 +75,8 @@ func TestWalletVersion(t *testing.T) {
                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")
        }
@@ -94,8 +96,8 @@ func TestWalletVersion(t *testing.T) {
                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")
        }
@@ -118,6 +120,7 @@ func TestWalletUpdate(t *testing.T) {
 
        config.CommonConfig = config.DefaultConfig()
        testDB := dbm.NewDB("testdb", "leveldb", "temp")
+       testStore := NewStore(testDB)
        defer func() {
                testDB.Close()
                os.RemoveAll("temp")
@@ -176,7 +179,7 @@ func TestWalletUpdate(t *testing.T) {
        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)
@@ -196,7 +199,7 @@ func TestWalletUpdate(t *testing.T) {
        }
 
        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) {
@@ -215,6 +218,7 @@ func TestRescanWallet(t *testing.T) {
 
        config.CommonConfig = config.DefaultConfig()
        testDB := dbm.NewDB("testdb", "leveldb", "temp")
+       testStore := NewStore(testDB)
        defer func() {
                testDB.Close()
                os.RemoveAll("temp")
@@ -237,9 +241,9 @@ func TestRescanWallet(t *testing.T) {
                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")
        }
@@ -266,6 +270,7 @@ func TestMemPoolTxQueryLoop(t *testing.T) {
        }
        config.CommonConfig = config.DefaultConfig()
        testDB := dbm.NewDB("testdb", "leveldb", dirPath)
+       testStore := NewStore(testDB)
        defer func() {
                testDB.Close()
                os.RemoveAll(dirPath)
@@ -321,12 +326,14 @@ func TestMemPoolTxQueryLoop(t *testing.T) {
        //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)
@@ -335,8 +342,10 @@ func TestMemPoolTxQueryLoop(t *testing.T) {
                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}})
@@ -378,13 +387,13 @@ func mockTxData(utxos []*account.UTXO, testAccount *account.Account) (*txbuilder
        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,
        }