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 }