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  }