-
Notifications
You must be signed in to change notification settings - Fork 16
/
bip44.go
156 lines (142 loc) · 5.67 KB
/
bip44.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
146
147
148
149
150
151
152
153
154
155
156
// Copyright 2016 Factom Foundation
// Use of this source code is governed by the MIT
// license that can be found in the LICENSE file.
package bip44
import (
"github.com/FactomProject/go-bip32"
"github.com/FactomProject/go-bip39"
)
const Purpose uint32 = 0x8000002C
//https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki
//https://github.com/satoshilabs/slips/blob/master/slip-0044.md
//https://github.com/FactomProject/FactomDocs/blob/master/wallet_info/wallet_test_vectors.md
const (
TypeBitcoin uint32 = 0x80000000
TypeTestnet uint32 = 0x80000001
TypeLitecoin uint32 = 0x80000002
TypeDogecoin uint32 = 0x80000003
TypeReddcoin uint32 = 0x80000004
TypeDash uint32 = 0x80000005
TypePeercoin uint32 = 0x80000006
TypeNamecoin uint32 = 0x80000007
TypeFeathercoin uint32 = 0x80000008
TypeCounterparty uint32 = 0x80000009
TypeBlackcoin uint32 = 0x8000000a
TypeNuShares uint32 = 0x8000000b
TypeNuBits uint32 = 0x8000000c
TypeMazacoin uint32 = 0x8000000d
TypeViacoin uint32 = 0x8000000e
TypeClearingHouse uint32 = 0x8000000f
TypeRubycoin uint32 = 0x80000010
TypeGroestlcoin uint32 = 0x80000011
TypeDigitalcoin uint32 = 0x80000012
TypeCannacoin uint32 = 0x80000013
TypeDigiByte uint32 = 0x80000014
TypeOpenAssets uint32 = 0x80000015
TypeMonacoin uint32 = 0x80000016
TypeClams uint32 = 0x80000017
TypePrimecoin uint32 = 0x80000018
TypeNeoscoin uint32 = 0x80000019
TypeJumbucks uint32 = 0x8000001a
TypeziftrCOIN uint32 = 0x8000001b
TypeVertcoin uint32 = 0x8000001c
TypeNXT uint32 = 0x8000001d
TypeBurst uint32 = 0x8000001e
TypeMonetaryUnit uint32 = 0x8000001f
TypeZoom uint32 = 0x80000020
TypeVpncoin uint32 = 0x80000021
TypeCanadaeCoin uint32 = 0x80000022
TypeShadowCash uint32 = 0x80000023
TypeParkByte uint32 = 0x80000024
TypePandacoin uint32 = 0x80000025
TypeStartCOIN uint32 = 0x80000026
TypeMOIN uint32 = 0x80000027
TypeArgentum uint32 = 0x8000002D
TypeGlobalCurrencyReserve uint32 = 0x80000031
TypeNovacoin uint32 = 0x80000032
TypeAsiacoin uint32 = 0x80000033
TypeBitcoindark uint32 = 0x80000034
TypeDopecoin uint32 = 0x80000035
TypeTemplecoin uint32 = 0x80000036
TypeAIB uint32 = 0x80000037
TypeEDRCoin uint32 = 0x80000038
TypeSyscoin uint32 = 0x80000039
TypeSolarcoin uint32 = 0x8000003a
TypeSmileycoin uint32 = 0x8000003b
TypeEther uint32 = 0x8000003c
TypeEtherClassic uint32 = 0x8000003d
TypeOpenChain uint32 = 0x80000040
TypeOKCash uint32 = 0x80000045
TypeDogecoinDark uint32 = 0x8000004d
TypeElectronicGulden uint32 = 0x8000004e
TypeClubCoin uint32 = 0x8000004f
TypeRichCoin uint32 = 0x80000050
TypePotcoin uint32 = 0x80000051
TypeQuarkcoin uint32 = 0x80000052
TypeTerracoin uint32 = 0x80000053
TypeGridcoin uint32 = 0x80000054
TypeAuroracoin uint32 = 0x80000055
TypeIXCoin uint32 = 0x80000056
TypeGulden uint32 = 0x80000057
TypeBitBean uint32 = 0x80000058
TypeBata uint32 = 0x80000059
TypeMyriadcoin uint32 = 0x8000005a
TypeBitSend uint32 = 0x8000005b
TypeUnobtanium uint32 = 0x8000005c
TypeMasterTrader uint32 = 0x8000005d
TypeGoldBlocks uint32 = 0x8000005e
TypeSaham uint32 = 0x8000005f
TypeChronos uint32 = 0x80000060
TypeUbiquoin uint32 = 0x80000061
TypeEvotion uint32 = 0x80000062
TypeSaveTheOcean uint32 = 0x80000063
TypeBigUp uint32 = 0x80000064
TypeGameCredits uint32 = 0x80000065
TypeDollarcoins uint32 = 0x80000066
TypeZayedcoin uint32 = 0x80000067
TypeDubaicoin uint32 = 0x80000068
TypeStratis uint32 = 0x80000069
TypeShilling uint32 = 0x8000006a
TypePiggyCoin uint32 = 0x80000076
TypeMonero uint32 = 0x80000080
TypeNavCoin uint32 = 0x80000082
TypeFactomFactoids uint32 = 0x80000083
TypeFactomEntryCredits uint32 = 0x80000084
TypeZcash uint32 = 0x80000085
TypeLisk uint32 = 0x80000086
TypeFactomIdentity uint32 = 0x80000119
)
func NewKeyFromMnemonic(mnemonic string, coin, account, chain, address uint32) (*bip32.Key, error) {
seed, err := bip39.NewSeedWithErrorChecking(mnemonic, "")
if err != nil {
return nil, err
}
masterKey, err := bip32.NewMasterKey(seed)
if err != nil {
return nil, err
}
return NewKeyFromMasterKey(masterKey, coin, account, chain, address)
}
func NewKeyFromMasterKey(masterKey *bip32.Key, coin, account, chain, address uint32) (*bip32.Key, error) {
child, err := masterKey.NewChildKey(Purpose)
if err != nil {
return nil, err
}
child, err = child.NewChildKey(coin)
if err != nil {
return nil, err
}
child, err = child.NewChildKey(account)
if err != nil {
return nil, err
}
child, err = child.NewChildKey(chain)
if err != nil {
return nil, err
}
child, err = child.NewChildKey(address)
if err != nil {
return nil, err
}
return child, nil
}