9 dbm "github.com/tendermint/tmlibs/db"
10 "github.com/vapor/blockchain/signers"
12 "github.com/vapor/account"
13 "github.com/vapor/asset"
14 "github.com/vapor/blockchain/pseudohsm"
15 "github.com/vapor/blockchain/txbuilder"
16 "github.com/vapor/consensus"
17 "github.com/vapor/crypto/ed25519/chainkd"
18 "github.com/vapor/database/leveldb"
19 "github.com/vapor/protocol"
20 "github.com/vapor/protocol/bc"
21 "github.com/vapor/protocol/bc/types"
24 func TestWalletUpdate(t *testing.T) {
25 dirPath, err := ioutil.TempDir(".", "")
29 defer os.RemoveAll(dirPath)
31 testDB := dbm.NewDB("testdb", "leveldb", "temp")
32 defer os.RemoveAll("temp")
34 store := leveldb.NewStore(testDB)
35 txPool := protocol.NewTxPool(store)
37 chain, err := protocol.NewChain(store, txPool)
42 accountManager := account.NewManager(testDB, chain)
43 hsm, err := pseudohsm.New(dirPath)
48 xpub1, _, err := hsm.XCreate("test_pub1", "password", "en")
53 testAccount, err := accountManager.Create([]chainkd.XPub{xpub1.XPub}, 1, "testAccount", signers.BIP0044)
58 controlProg, err := accountManager.CreateAddress(testAccount.ID, false)
63 controlProg.KeyIndex = 1
65 reg := asset.NewRegistry(testDB, chain)
66 asset, err := reg.Define([]chainkd.XPub{xpub1.XPub}, 1, nil, "TESTASSET", nil)
71 utxos := []*account.UTXO{}
72 btmUtxo := mockUTXO(controlProg, consensus.BTMAssetID)
73 utxos = append(utxos, btmUtxo)
74 OtherUtxo := mockUTXO(controlProg, &asset.AssetID)
75 utxos = append(utxos, OtherUtxo)
77 _, txData, err := mockTxData(utxos, testAccount)
82 tx := types.NewTx(*txData)
83 block := mockSingleBlock(tx)
84 txStatus := bc.NewTransactionStatus()
85 txStatus.SetStatus(0, false)
86 store.SaveBlock(block, txStatus)
88 w := mockWallet(testDB, accountManager, reg, chain)
89 err = w.AttachBlock(block)
94 if _, err := w.GetTransactionByTxID(tx.ID.String()); err != nil {
98 wants, err := w.GetTransactions("")
104 func mockUTXO(controlProg *account.CtrlProgram, assetID *bc.AssetID) *account.UTXO {
105 utxo := &account.UTXO{}
106 utxo.OutputID = bc.Hash{V0: 1}
107 utxo.SourceID = bc.Hash{V0: 2}
108 utxo.AssetID = *assetID
109 utxo.Amount = 1000000000
111 utxo.ControlProgram = controlProg.ControlProgram
112 utxo.AccountID = controlProg.AccountID
113 utxo.Address = controlProg.Address
114 utxo.ControlProgramIndex = controlProg.KeyIndex
118 func mockTxData(utxos []*account.UTXO, testAccount *account.Account) (*txbuilder.Template, *types.TxData, error) {
119 tplBuilder := txbuilder.NewBuilder(time.Now())
121 for _, utxo := range utxos {
122 txInput, sigInst, err := account.UtxoToInputs(testAccount.Signer, utxo)
126 tplBuilder.AddInput(txInput, sigInst)
128 out := &types.TxOutput{}
129 if utxo.AssetID == *consensus.BTMAssetID {
130 out = types.NewTxOutput(utxo.AssetID, 100, utxo.ControlProgram)
132 out = types.NewTxOutput(utxo.AssetID, utxo.Amount, utxo.ControlProgram)
134 tplBuilder.AddOutput(out)
137 return tplBuilder.Build()
140 func mockWallet(walletDB dbm.DB, account *account.Manager, asset *asset.Registry, chain *protocol.Chain) *Wallet {
146 RecoveryMgr: newRecoveryManager(walletDB, account),
151 func mockSingleBlock(tx *types.Tx) *types.Block {
153 BlockHeader: types.BlockHeader{
157 Transactions: []*types.Tx{tx},