7 "github.com/bytom/vapor/account"
8 "github.com/bytom/vapor/blockchain/pseudohsm"
9 "github.com/bytom/vapor/blockchain/txbuilder"
10 "github.com/bytom/vapor/config"
11 "github.com/bytom/vapor/consensus"
12 "github.com/bytom/vapor/crypto/ed25519/chainkd"
13 "github.com/bytom/vapor/database"
14 dbm "github.com/bytom/vapor/database/leveldb"
15 "github.com/bytom/vapor/event"
16 "github.com/bytom/vapor/protocol"
17 "github.com/bytom/vapor/protocol/bc"
18 "github.com/bytom/vapor/protocol/bc/types"
19 "github.com/bytom/vapor/protocol/vm"
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, nil, dispatcher)
33 chain, err := protocol.NewChain(store, txPool, nil, dispatcher)
34 return chain, store, txPool, err
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
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
54 func MockTx(utxo *account.UTXO, testAccount *account.Account) (*txbuilder.Template, *types.TxData, error) {
55 txInput, sigInst, err := account.UtxoToInputs(testAccount.Signer, utxo)
60 b := txbuilder.NewBuilder(time.Now())
61 if err := b.AddInput(txInput, sigInst); err != nil {
64 out := types.NewIntraChainOutput(*consensus.BTMAssetID, 100, []byte{byte(vm.OP_FAIL)})
65 if err := b.AddOutput(out); err != nil {
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)
79 return txbuilder.SignProgress(tpl), nil
82 // MockBlock mock a block
83 func MockBlock() *bc.Block {
85 BlockHeader: &bc.BlockHeader{Height: 1},