-
Notifications
You must be signed in to change notification settings - Fork 7
/
txbuilder.go
60 lines (49 loc) · 1.54 KB
/
txbuilder.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
package testutil
import (
"github.com/tendermint/tendermint/crypto"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/auth"
dex "github.com/coinexchain/cet-sdk/types"
)
type StdTxBuilder struct {
chainID string
msgs []sdk.Msg
privKeys []crypto.PrivKey
accNums []uint64
seqs []uint64
fee auth.StdFee
}
func NewStdTxBuilder(chainID string) *StdTxBuilder {
return &StdTxBuilder{chainID: chainID}
}
func (builder *StdTxBuilder) Msgs(msgs ...sdk.Msg) *StdTxBuilder {
builder.msgs = msgs
return builder
}
func (builder *StdTxBuilder) AccNumSeqKey(num, seq uint64, key crypto.PrivKey) *StdTxBuilder {
builder.accNums = append(builder.accNums, num)
builder.seqs = append(builder.seqs, seq)
builder.privKeys = append(builder.privKeys, key)
return builder
}
func (builder *StdTxBuilder) GasAndFee(gas uint64, cet int64) *StdTxBuilder {
builder.fee = auth.NewStdFee(gas, dex.NewCetCoins(cet))
return builder
}
func (builder *StdTxBuilder) Build() auth.StdTx {
return builder.BuildTxWithMemo("")
}
func (builder *StdTxBuilder) BuildTxWithMemo(memo string) auth.StdTx {
sigs := make([]auth.StdSignature, len(builder.privKeys))
for i, privKey := range builder.privKeys {
signBytes := auth.StdSignBytes(builder.chainID,
builder.accNums[i], builder.seqs[i], builder.fee, builder.msgs, memo)
sig, err := privKey.Sign(signBytes)
if err != nil {
panic(err)
}
sigs[i] = auth.StdSignature{PubKey: privKey.PubKey(), Signature: sig}
}
tx := auth.NewStdTx(builder.msgs, builder.fee, sigs, memo)
return tx
}