9 dbm "github.com/tendermint/tmlibs/db"
11 "github.com/bytom/account"
12 "github.com/bytom/asset"
13 "github.com/bytom/blockchain/pseudohsm"
14 "github.com/bytom/blockchain/txbuilder"
15 "github.com/bytom/consensus"
16 "github.com/bytom/crypto/ed25519/chainkd"
17 "github.com/bytom/database/leveldb"
18 "github.com/bytom/protocol"
19 "github.com/bytom/protocol/bc"
20 "github.com/bytom/protocol/bc/types"
23 func TestWalletUpdate(t *testing.T) {
24 dirPath, err := ioutil.TempDir(".", "")
28 defer os.RemoveAll(dirPath)
30 testDB := dbm.NewDB("testdb", "leveldb", "temp")
31 defer os.RemoveAll("temp")
33 store := leveldb.NewStore(testDB)
34 txPool := protocol.NewTxPool()
36 chain, err := protocol.NewChain(store, txPool)
41 accountManager := account.NewManager(testDB, chain)
42 hsm, err := pseudohsm.New(dirPath)
47 xpub1, err := hsm.XCreate("test_pub1", "password")
52 testAccount, err := accountManager.Create(nil, []chainkd.XPub{xpub1.XPub}, 1, "testAccount")
57 controlProg, err := accountManager.CreateAddress(nil, testAccount.ID, false)
62 controlProg.KeyIndex = 1
64 reg := asset.NewRegistry(testDB, chain)
65 asset, err := reg.Define([]chainkd.XPub{xpub1.XPub}, 1, nil, "TESTASSET")
70 utxos := []*account.UTXO{}
71 btmUtxo := mockUTXO(controlProg, consensus.BTMAssetID)
72 utxos = append(utxos, btmUtxo)
73 OtherUtxo := mockUTXO(controlProg, &asset.AssetID)
74 utxos = append(utxos, OtherUtxo)
76 _, txData, err := mockTxData(utxos, testAccount)
81 tx := types.NewTx(*txData)
82 block := mockSingleBlock(tx)
83 txStatus := bc.NewTransactionStatus()
84 store.SaveBlock(block, txStatus)
86 w := mockWallet(testDB, accountManager, reg, chain)
87 err = w.AttachBlock(block)
92 want, err := w.GetTransactionsByTxID(tx.ID.String())
97 wants, err := w.GetTransactionsByTxID("")
103 func mockUTXO(controlProg *account.CtrlProgram, assetID *bc.AssetID) *account.UTXO {
104 utxo := &account.UTXO{}
105 utxo.OutputID = bc.Hash{V0: 1}
106 utxo.SourceID = bc.Hash{V0: 2}
107 utxo.AssetID = *assetID
108 utxo.Amount = 1000000000
110 utxo.ControlProgram = controlProg.ControlProgram
111 utxo.AccountID = controlProg.AccountID
112 utxo.Address = controlProg.Address
113 utxo.ControlProgramIndex = controlProg.KeyIndex
117 func mockTxData(utxos []*account.UTXO, testAccount *account.Account) (*txbuilder.Template, *types.TxData, error) {
118 tplBuilder := txbuilder.NewBuilder(time.Now())
120 for _, utxo := range utxos {
121 txInput, sigInst, err := account.UtxoToInputs(testAccount.Signer, utxo)
125 tplBuilder.AddInput(txInput, sigInst)
127 out := &types.TxOutput{}
128 if utxo.AssetID == *consensus.BTMAssetID {
129 out = types.NewTxOutput(utxo.AssetID, 100, utxo.ControlProgram)
131 out = types.NewTxOutput(utxo.AssetID, utxo.Amount, utxo.ControlProgram)
133 tplBuilder.AddOutput(out)
136 return tplBuilder.Build()
139 func mockWallet(walletDB dbm.DB, account *account.Manager, asset *asset.Registry, chain *protocol.Chain) *Wallet {
149 func mockSingleBlock(tx *types.Tx) *types.Block {
151 BlockHeader: types.BlockHeader{
154 Bits: 2305843009230471167,
156 Transactions: []*types.Tx{tx},