decred.org/dcrwallet/v3@v3.1.0/cmd/treasurykey/treasurykey.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "os" 7 8 "github.com/decred/dcrd/chaincfg/v3" 9 "github.com/decred/dcrd/dcrec" 10 "github.com/decred/dcrd/dcrec/secp256k1/v4" 11 "github.com/decred/dcrd/dcrutil/v4" 12 ) 13 14 func generateKeys(params *chaincfg.Params) error { 15 key, err := secp256k1.GeneratePrivateKey() 16 if err != nil { 17 return err 18 } 19 20 keyBytes := key.Serialize() 21 wif, err := dcrutil.NewWIF(keyBytes, params.PrivateKeyID, 22 dcrec.STSchnorrSecp256k1) 23 if err != nil { 24 return err 25 } 26 27 fmt.Printf("Private key: %x\n", keyBytes) 28 fmt.Printf("Public key: %x\n", key.PubKey().SerializeCompressed()) 29 fmt.Printf("WIF : %s\n", wif) 30 31 return nil 32 } 33 34 func main() { 35 mainnet := flag.Bool("mainnet", false, "use mainnet parameters") 36 simnet := flag.Bool("simnet", false, "use simnet parameters") 37 regnet := flag.Bool("regnet", false, "use regnet parameters") 38 testnet := flag.Bool("testnet", false, "use testnet parameters") 39 flag.Parse() 40 41 var net *chaincfg.Params 42 flags := 0 43 if *mainnet { 44 flags++ 45 net = chaincfg.MainNetParams() 46 } 47 if *testnet { 48 flags++ 49 net = chaincfg.TestNet3Params() 50 } 51 if *simnet { 52 flags++ 53 net = chaincfg.SimNetParams() 54 } 55 if *regnet { 56 flags++ 57 net = chaincfg.RegNetParams() 58 } 59 if flags != 1 { 60 fmt.Println("One and only one flag must be selected") 61 flag.Usage() 62 os.Exit(1) 63 } 64 65 if err := generateKeys(net); err != nil { 66 fmt.Println(err) 67 os.Exit(1) 68 } 69 }