-
Notifications
You must be signed in to change notification settings - Fork 4
/
option.go
145 lines (122 loc) · 2.36 KB
/
option.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
137
138
139
140
141
142
143
144
145
package hdwallet
import (
"github.com/btcsuite/btcd/chaincfg"
)
// default options
var (
DefaultParams = &chaincfg.MainNetParams
// master key options
DefaultPassword = ""
DefaultLanguage = ""
// child key options
DefaultPurpose = ZeroQuote + 44
DefaultCoinType = BTC
DefaultAccount = ZeroQuote
DefaultChange = Zero
DefaultAddressIndex = Zero
//BIP49 隔离见证
BIP49Purpose = ZeroQuote + 49
)
// Option of key
type Option func(*Options)
// Options of key
type Options struct {
Params *chaincfg.Params
// master key options
Mnemonic string
Password string
Language string
Seed []byte
// child key options
Purpose uint32
CoinType uint32
Account uint32
Change uint32
AddressIndex uint32
}
func newOptions(opts ...Option) *Options {
opt := &Options{
Params: DefaultParams,
Password: DefaultPassword,
Language: DefaultLanguage,
Purpose: DefaultPurpose,
CoinType: DefaultCoinType,
Account: DefaultAccount,
Change: DefaultChange,
AddressIndex: DefaultAddressIndex,
}
for _, o := range opts {
o(opt)
}
return opt
}
// GetPath return path in bip44 style
func (o *Options) GetPath() []uint32 {
return []uint32{
o.Purpose,
o.CoinType,
o.Account,
o.Change,
o.AddressIndex,
}
}
// Params set to options
func Params(p *chaincfg.Params) Option {
return func(o *Options) {
o.Params = p
}
}
// Mnemonic set to options
func Mnemonic(m string) Option {
return func(o *Options) {
o.Mnemonic = m
}
}
// Password set to options
func Password(p string) Option {
return func(o *Options) {
o.Password = p
}
}
// Language set to options
func Language(l string) Option {
return func(o *Options) {
o.Language = l
}
}
// Seed set to options
func Seed(s []byte) Option {
return func(o *Options) {
o.Seed = s
}
}
// Purpose set to options
func Purpose(p uint32) Option {
return func(o *Options) {
o.Purpose = p
}
}
// CoinType set to options
func CoinType(c uint32) Option {
return func(o *Options) {
o.CoinType = c
}
}
// Account set to options
func Account(a uint32) Option {
return func(o *Options) {
o.Account = a
}
}
// Change set to options
func Change(c uint32) Option {
return func(o *Options) {
o.Change = c
}
}
// AddressIndex set to options
func AddressIndex(a uint32) Option {
return func(o *Options) {
o.AddressIndex = a
}
}