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