OSDN Git Service

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