github.com/Finschia/finschia-sdk@v0.48.1/testutil/key.go (about)

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