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 }