OSDN Git Service

Merge pull request #24 from Bytom/dev_consensus_engine_and_dpos
[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/common"
13         "github.com/vapor/config"
14         "github.com/vapor/consensus"
15         "github.com/vapor/crypto/ed25519/chainkd"
16         "github.com/vapor/database/leveldb"
17         "github.com/vapor/protocol"
18         "github.com/vapor/protocol/bc"
19         "github.com/vapor/protocol/bc/types"
20         "github.com/vapor/protocol/vm"
21 )
22
23 const (
24         vmVersion    = 1
25         assetVersion = 1
26 )
27
28 // MockChain mock chain with genesis block
29 func MockChain(testDB dbm.DB) (*protocol.Chain, *leveldb.Store, *protocol.TxPool, error) {
30         config.CommonConfig = config.DefaultConfig()
31         consensus.SoloNetParams.Signer = "78673764e0ba91a4c5ba9ec0c8c23c69e3d73bf27970e05e0a977e81e13bde475264d3b177a96646bc0ce517ae7fd63504c183ab6d330dea184331a4cf5912d5"
32         config.CommonConfig.Consensus.Dpos.SelfVoteSigners = append(config.CommonConfig.Consensus.Dpos.SelfVoteSigners, "vsm1qkm743xmgnvh84pmjchq2s4tnfpgu9ae2f9slep")
33         config.CommonConfig.Consensus.Dpos.XPrv = "a8e281b615809046698fb0b0f2804a36d824d48fa443350f10f1b80649d39e5f1e85cf9855548915e36137345910606cbc8e7dd8497c831dce899ee6ac112445"
34         for _, v := range config.CommonConfig.Consensus.Dpos.SelfVoteSigners {
35                 address, err := common.DecodeAddress(v, &consensus.SoloNetParams)
36                 if err != nil {
37                         return nil, nil, nil, err
38                 }
39                 config.CommonConfig.Consensus.Dpos.Signers = append(config.CommonConfig.Consensus.Dpos.Signers, address)
40         }
41
42         store := leveldb.NewStore(testDB)
43         txPool := protocol.NewTxPool(store)
44         chain, err := protocol.NewChain(store, txPool)
45         consensus.ActiveNetParams.Signer = "78673764e0ba91a4c5ba9ec0c8c23c69e3d73bf27970e05e0a977e81e13bde475264d3b177a96646bc0ce517ae7fd63504c183ab6d330dea184331a4cf5912d5"
46         setAuthoritys(chain)
47         return chain, store, txPool, err
48 }
49
50 // MockUTXO mock a utxo
51 func MockUTXO(controlProg *account.CtrlProgram) *account.UTXO {
52         utxo := &account.UTXO{}
53         utxo.OutputID = bc.Hash{V0: 1}
54         utxo.SourceID = bc.Hash{V0: 2}
55         utxo.AssetID = *consensus.BTMAssetID
56         utxo.Amount = 1000000000
57         utxo.SourcePos = 0
58         utxo.ControlProgram = controlProg.ControlProgram
59         utxo.AccountID = controlProg.AccountID
60         utxo.Address = controlProg.Address
61         utxo.ControlProgramIndex = controlProg.KeyIndex
62         utxo.Change = controlProg.Change
63         return utxo
64 }
65
66 // MockTx mock a tx
67 func MockTx(utxo *account.UTXO, testAccount *account.Account) (*txbuilder.Template, *types.TxData, error) {
68         txInput, sigInst, err := account.UtxoToInputs(testAccount.Signer, utxo)
69         if err != nil {
70                 return nil, nil, err
71         }
72
73         b := txbuilder.NewBuilder(time.Now())
74         if err := b.AddInput(txInput, sigInst); err != nil {
75                 return nil, nil, err
76         }
77         out := types.NewTxOutput(*consensus.BTMAssetID, 100, []byte{byte(vm.OP_FAIL)})
78         if err := b.AddOutput(out); err != nil {
79                 return nil, nil, err
80         }
81         return b.Build()
82 }
83
84 // MockSign sign a tx
85 func MockSign(tpl *txbuilder.Template, hsm *pseudohsm.HSM, password string) (bool, error) {
86         err := txbuilder.Sign(nil, tpl, password, func(_ context.Context, xpub chainkd.XPub, path [][]byte, data [32]byte, password string) ([]byte, error) {
87                 return hsm.XSign(xpub, path, data[:], password)
88         })
89         if err != nil {
90                 return false, err
91         }
92         return txbuilder.SignProgress(tpl), nil
93 }
94
95 // MockBlock mock a block
96 func MockBlock() *bc.Block {
97         return &bc.Block{
98                 BlockHeader: &bc.BlockHeader{Height: 1},
99         }
100 }