github.com/cosmos/cosmos-sdk@v0.50.10/testutil/key.go (about)

     1  package testutil
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/cosmos/cosmos-sdk/codec"
     7  	"github.com/cosmos/cosmos-sdk/crypto/keyring"
     8  	sdk "github.com/cosmos/cosmos-sdk/types"
     9  )
    10  
    11  // GenerateCoinKey generates a new key mnemonic along with its addrress.
    12  func GenerateCoinKey(algo keyring.SignatureAlgo, cdc codec.Codec) (sdk.AccAddress, string, error) {
    13  	// generate a private key, with mnemonic
    14  	info, secret, err := keyring.NewInMemory(cdc).NewMnemonic(
    15  		"name",
    16  		keyring.English,
    17  		sdk.GetConfig().GetFullBIP44Path(),
    18  		keyring.DefaultBIP39Passphrase,
    19  		algo,
    20  	)
    21  	if err != nil {
    22  		return sdk.AccAddress{}, "", err
    23  	}
    24  	addr, err := info.GetAddress()
    25  	if err != nil {
    26  		return sdk.AccAddress{}, "", err
    27  	}
    28  	return addr, secret, nil
    29  }
    30  
    31  // GenerateSaveCoinKey generates a new key mnemonic with its addrress.
    32  // If mnemonic is provided then it's used for key generation.
    33  // The key is saved in the keyring. The function returns error if overwrite=true and the key
    34  // already exists.
    35  func GenerateSaveCoinKey(
    36  	keybase keyring.Keyring,
    37  	keyName, mnemonic string,
    38  	overwrite bool,
    39  	algo keyring.SignatureAlgo,
    40  ) (sdk.AccAddress, string, error) {
    41  	exists := false
    42  	_, err := keybase.Key(keyName)
    43  	if err == nil {
    44  		exists = true
    45  	}
    46  
    47  	// ensure no overwrite
    48  	if !overwrite && exists {
    49  		return sdk.AccAddress{}, "", fmt.Errorf("key already exists, overwrite is disabled")
    50  	}
    51  
    52  	if exists {
    53  		if err := keybase.Delete(keyName); err != nil {
    54  			return sdk.AccAddress{}, "", fmt.Errorf("failed to overwrite key")
    55  		}
    56  	}
    57  
    58  	var (
    59  		record *keyring.Record
    60  		secret string
    61  	)
    62  
    63  	// generate or recover a new account
    64  	if mnemonic != "" {
    65  		secret = mnemonic
    66  		record, err = keybase.NewAccount(keyName, mnemonic, keyring.DefaultBIP39Passphrase, sdk.GetConfig().GetFullBIP44Path(), algo)
    67  	} else {
    68  		record, secret, err = keybase.NewMnemonic(keyName, keyring.English, sdk.GetConfig().GetFullBIP44Path(), keyring.DefaultBIP39Passphrase, algo)
    69  	}
    70  	if err != nil {
    71  		return sdk.AccAddress{}, "", err
    72  	}
    73  
    74  	addr, err := record.GetAddress()
    75  	if err != nil {
    76  		return nil, "", err
    77  	}
    78  	return addr, secret, nil
    79  }