/
options.go
136 lines (117 loc) · 2.98 KB
/
options.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package xuper
import "github.com/pkg/errors"
type clientOptions struct {
configFile string
useGrpcGZIP bool
grpcTLS *grpcTLSConfig
}
type grpcTLSConfig struct {
serverName string
cacertFile string
certFile string
keyFile string
}
type requestOptions struct {
onlyFeeFromAccount bool
fee string
bcname string
contractInvokeAmount string
desc string
otherAuthRequire []string
notPost bool
}
type queryOption struct {
bcname string
}
// RequestOption tx opt.
type RequestOption func(opt *requestOptions) error
// ClientOption xuperclient opt.
type ClientOption func(opt *clientOptions) error
// QueryOption query opt.
type QueryOption func(opt *queryOption) error
// WithQueryBcname query method bcname option.
func WithQueryBcname(bcname string) QueryOption {
return func(opts *queryOption) error {
opts.bcname = bcname
return nil
}
}
// WithConfigFile set xuperclient config file.
func WithConfigFile(configFile string) ClientOption {
return func(opts *clientOptions) error {
opts.configFile = configFile
return nil
}
}
// WithGrpcGZIP use gzip.
func WithGrpcGZIP() ClientOption {
return func(opts *clientOptions) error {
opts.useGrpcGZIP = true
return nil
}
}
// WithGrpcTLS grpc TLS cert config.
func WithGrpcTLS(serverName, cacertFile, certFile, keyFile string) ClientOption {
return func(opts *clientOptions) error {
if opts.grpcTLS == nil {
opts.grpcTLS = new(grpcTLSConfig)
}
opts.grpcTLS.serverName = serverName
opts.grpcTLS.cacertFile = cacertFile
opts.grpcTLS.certFile = certFile
opts.grpcTLS.keyFile = keyFile
return nil
}
}
// WithFeeFromAccount fee & gas from contract account.
func WithFeeFromAccount() RequestOption {
return func(opts *requestOptions) error {
opts.onlyFeeFromAccount = true
return nil
}
}
// WithFee set fee.
func WithFee(fee string) RequestOption {
return func(opts *requestOptions) error {
opts.fee = fee
return nil
}
}
// WithBcname set blockchain name.
func WithBcname(name string) RequestOption {
return func(opts *requestOptions) error {
if name == "" {
return errors.New("invalid bcname")
}
opts.bcname = name
return nil
}
}
// WithContractInvokeAmount set transfer to contract when invoke contract.
func WithContractInvokeAmount(amount string) RequestOption {
return func(opts *requestOptions) error {
opts.contractInvokeAmount = amount
return nil
}
}
// WithDesc set tx desc.
func WithDesc(desc string) RequestOption {
return func(opts *requestOptions) error {
opts.desc = desc
return nil
}
}
// WithNotPost generate transaction only, won't post to server.
func WithNotPost() RequestOption {
return func(opts *requestOptions) error {
opts.notPost = true
return nil
}
}
// WithOtherAuthRequires for multisign, other address need sign, exclude initiator.
func WithOtherAuthRequires(authRequires []string) RequestOption {
return func(opts *requestOptions) error {
opts.otherAuthRequire = authRequires
return nil
}
}