-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
executable file
·80 lines (70 loc) · 2.7 KB
/
main.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
package main
import (
//"encoding/hex"
"errors"
"fmt"
"github.com/btcsuite/btcd/btcec"
"github.com/btcsuite/btcd/chaincfg"
"github.com/btcsuite/btcutil"
)
type Network struct {
name string
symbol string
xpubkey byte
xprivatekey byte
}
var network = map[string]Network{
"rdd": {name: "reddcoin", symbol: "rdd", xpubkey: 0x3d, xprivatekey: 0xbd},
"dgb": {name: "digibyte", symbol: "dgb", xpubkey: 0x1e, xprivatekey: 0x80},
"btc": {name: "bitcoin", symbol: "btc", xpubkey: 0x00, xprivatekey: 0x80},
"ltc": {name: "litecoin", symbol: "ltc", xpubkey: 0x30, xprivatekey: 0xb0},
"wsp": {name: "wispr", symbol: "wsp", xpubkey: 0x49, xprivatekey: 0x91},
"rpi": {name: "rpicoin", symbol: "rpi", xpubkey: 0x3C, xprivatekey: 0x91},
}
func (network Network) GetNetworkParams() *chaincfg.Params {
networkParams := &chaincfg.MainNetParams
networkParams.PubKeyHashAddrID = network.xpubkey
networkParams.PrivateKeyID = network.xprivatekey
return networkParams
}
func (network Network) CreatePrivateKey() (*btcutil.WIF, error) {
secret, err := btcec.NewPrivateKey(btcec.S256())
if err != nil {
return nil, err
}
return btcutil.NewWIF(secret, network.GetNetworkParams(), true)
}
func (network Network) GetDecompressedPrivateKey(privKey *btcec.PrivateKey) (*btcutil.WIF, error) {
return btcutil.NewWIF(privKey, network.GetNetworkParams(), false)
}
//func (network Network) ImportPrivateKey(secretHex string) (*btcutil.WIF, error) {
// secret, err := btcec.SetPrivateKey(secretHex)
// if err != nil {
// return nil, err
// }
// return btcutil.NewWIF(secret, network.GetNetworkParams(), true)
//}
func (network Network) ImportWIF(wifStr string) (*btcutil.WIF, error) {
wif, err := btcutil.DecodeWIF(wifStr)
if err != nil {
return nil, err
}
if !wif.IsForNet(network.GetNetworkParams()) {
return nil, errors.New("The WIF string is not valid for the `" + network.name + "` network")
}
return wif, nil
}
func (network Network) GetAddress(wif *btcutil.WIF) (*btcutil.AddressPubKey, error) {
return btcutil.NewAddressPubKey(wif.PrivKey.PubKey().SerializeCompressed(), network.GetNetworkParams())
}
func (network Network) GetDecompressedAddress(wif *btcutil.WIF) (*btcutil.AddressPubKey, error) {
return btcutil.NewAddressPubKey(wif.PrivKey.PubKey().SerializeUncompressed(), network.GetNetworkParams())
}
func main() {
fmt.Println("Starting the application...")
wifC, _ := network["rpi"].CreatePrivateKey()
wifD, _ := network["rpi"].GetDecompressedPrivateKey(wifC.PrivKey)
addressC, _ := network["rpi"].GetAddress(wifC)
addressD, _ := network["rpi"].GetDecompressedAddress(wifC)
fmt.Printf("Compressed: %s - %s Decompressed: %s - %s", wifC.String(), addressC.EncodeAddress(), wifD.String(), addressD.EncodeAddress())
}