OSDN Git Service

modify ci
[bytom/vapor.git] / test / util.go
1 package test
2
3 import (
4         "context"
5         "time"
6
7         dbm "github.com/tendermint/tmlibs/db"
8
9         "github.com/vapor/account"
10         "github.com/vapor/blockchain/pseudohsm"
11         "github.com/vapor/blockchain/txbuilder"
12         "github.com/vapor/consensus"
13         "github.com/vapor/crypto/ed25519/chainkd"
14         "github.com/vapor/database/leveldb"
15         "github.com/vapor/protocol"
16         "github.com/vapor/protocol/bc"
17         "github.com/vapor/protocol/bc/types"
18         "github.com/vapor/protocol/vm"
19 )
20
21 const (
22         vmVersion    = 1
23         assetVersion = 1
24 )
25
26 // MockChain mock chain with genesis block
27 func MockChain(testDB dbm.DB) (*protocol.Chain, *leveldb.Store, *protocol.TxPool, error) {
28         store := leveldb.NewStore(testDB)
29         txPool := protocol.NewTxPool(store)
30         chain, err := protocol.NewChain(store, txPool)
31         consensus.ActiveNetParams.Signer = "78673764e0ba91a4c5ba9ec0c8c23c69e3d73bf27970e05e0a977e81e13bde475264d3b177a96646bc0ce517ae7fd63504c183ab6d330dea184331a4cf5912d5"
32         setAuthoritys(chain)
33         return chain, store, txPool, err
34 }
35
36 // MockUTXO mock a utxo
37 func MockUTXO(controlProg *account.CtrlProgram) *account.UTXO {
38         utxo := &account.UTXO{}
39         utxo.OutputID = bc.Hash{V0: 1}
40         utxo.SourceID = bc.Hash{V0: 2}
41         utxo.AssetID = *consensus.BTMAssetID
42         utxo.Amount = 1000000000
43         utxo.SourcePos = 0
44         utxo.ControlProgram = controlProg.ControlProgram
45         utxo.AccountID = controlProg.AccountID
46         utxo.Address = controlProg.Address
47         utxo.ControlProgramIndex = controlProg.KeyIndex
48         utxo.Change = controlProg.Change
49         return utxo
50 }
51
52 // MockTx mock a tx
53 func MockTx(utxo *account.UTXO, testAccount *account.Account) (*txbuilder.Template, *types.TxData, error) {
54         txInput, sigInst, err := account.UtxoToInputs(testAccount.Signer, utxo)
55         if err != nil {
56                 return nil, nil, err
57         }
58
59         b := txbuilder.NewBuilder(time.Now())
60         if err := b.AddInput(txInput, sigInst); err != nil {
61                 return nil, nil, err
62         }
63         out := types.NewTxOutput(*consensus.BTMAssetID, 100, []byte{byte(vm.OP_FAIL)})
64         if err := b.AddOutput(out); err != nil {
65                 return nil, nil, err
66         }
67         return b.Build()
68 }
69
70 // MockSign sign a tx
71 func MockSign(tpl *txbuilder.Template, hsm *pseudohsm.HSM, password string) (bool, error) {
72         err := txbuilder.Sign(nil, tpl, password, func(_ context.Context, xpub chainkd.XPub, path [][]byte, data [32]byte, password string) ([]byte, error) {
73                 return hsm.XSign(xpub, path, data[:], password)
74         })
75         if err != nil {
76                 return false, err
77         }
78         return txbuilder.SignProgress(tpl), nil
79 }
80
81 // MockBlock mock a block
82 func MockBlock() *bc.Block {
83         return &bc.Block{
84                 BlockHeader: &bc.BlockHeader{Height: 1},
85         }
86 }