7 dbm "github.com/tendermint/tmlibs/db"
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 engine "github.com/vapor/consensus/consensus"
16 "github.com/vapor/consensus/consensus/dpos"
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"
22 "github.com/vapor/protocol/vm"
30 // MockChain mock chain with genesis block
31 func MockChain(testDB dbm.DB) (*protocol.Chain, *leveldb.Store, *protocol.TxPool, error) {
32 config.CommonConfig = config.DefaultConfig()
33 consensus.SoloNetParams.Signer = "78673764e0ba91a4c5ba9ec0c8c23c69e3d73bf27970e05e0a977e81e13bde475264d3b177a96646bc0ce517ae7fd63504c183ab6d330dea184331a4cf5912d5"
34 config.CommonConfig.Consensus.SelfVoteSigners = append(config.CommonConfig.Consensus.SelfVoteSigners, "vsm1qkm743xmgnvh84pmjchq2s4tnfpgu9ae2f9slep")
35 config.CommonConfig.Consensus.XPrv = "a8e281b615809046698fb0b0f2804a36d824d48fa443350f10f1b80649d39e5f1e85cf9855548915e36137345910606cbc8e7dd8497c831dce899ee6ac112445"
36 for _, v := range config.CommonConfig.Consensus.SelfVoteSigners {
37 address, err := common.DecodeAddress(v, &consensus.SoloNetParams)
39 return nil, nil, nil, err
41 config.CommonConfig.Consensus.Signers = append(config.CommonConfig.Consensus.Signers, address)
44 store := leveldb.NewStore(testDB)
45 txPool := protocol.NewTxPool(store)
46 var engine engine.Engine
47 switch config.CommonConfig.Consensus.Type {
52 chain, err := protocol.NewChain(store, txPool, engine)
53 consensus.ActiveNetParams.Signer = "78673764e0ba91a4c5ba9ec0c8c23c69e3d73bf27970e05e0a977e81e13bde475264d3b177a96646bc0ce517ae7fd63504c183ab6d330dea184331a4cf5912d5"
54 return chain, store, txPool, err
57 // MockUTXO mock a utxo
58 func MockUTXO(controlProg *account.CtrlProgram) *account.UTXO {
59 utxo := &account.UTXO{}
60 utxo.OutputID = bc.Hash{V0: 1}
61 utxo.SourceID = bc.Hash{V0: 2}
62 utxo.AssetID = *consensus.BTMAssetID
63 utxo.Amount = 1000000000
65 utxo.ControlProgram = controlProg.ControlProgram
66 utxo.AccountID = controlProg.AccountID
67 utxo.Address = controlProg.Address
68 utxo.ControlProgramIndex = controlProg.KeyIndex
69 utxo.Change = controlProg.Change
74 func MockTx(utxo *account.UTXO, testAccount *account.Account) (*txbuilder.Template, *types.TxData, error) {
75 txInput, sigInst, err := account.UtxoToInputs(testAccount.Signer, utxo)
80 b := txbuilder.NewBuilder(time.Now())
81 if err := b.AddInput(txInput, sigInst); err != nil {
84 out := types.NewTxOutput(*consensus.BTMAssetID, 100, []byte{byte(vm.OP_FAIL)})
85 if err := b.AddOutput(out); err != nil {
92 func MockSign(tpl *txbuilder.Template, hsm *pseudohsm.HSM, password string) (bool, error) {
93 err := txbuilder.Sign(nil, tpl, password, func(_ context.Context, xpub chainkd.XPub, path [][]byte, data [32]byte, password string) ([]byte, error) {
94 return hsm.XSign(xpub, path, data[:], password)
99 return txbuilder.SignProgress(tpl), nil
102 // MockBlock mock a block
103 func MockBlock() *bc.Block {
105 BlockHeader: &bc.BlockHeader{Height: 1},