github.com/cosmos/cosmos-sdk@v0.50.1/crypto/keyring/autocli.go (about) 1 package keyring 2 3 import ( 4 signingv1beta1 "cosmossdk.io/api/cosmos/tx/signing/v1beta1" 5 6 cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" 7 authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" 8 ) 9 10 // autoCLIKeyring represents the keyring interface used by the AutoCLI. 11 // It purposely does not import the AutoCLI package to avoid circular dependencies. 12 type autoCLIKeyring interface { 13 // List returns the names of all keys stored in the keyring. 14 List() ([]string, error) 15 16 // LookupAddressByKeyName returns the address of the key with the given name. 17 LookupAddressByKeyName(name string) ([]byte, error) 18 19 // GetPubKey returns the public key of the key with the given name. 20 GetPubKey(name string) (cryptotypes.PubKey, error) 21 22 // Sign signs the given bytes with the key with the given name. 23 Sign(name string, msg []byte, signMode signingv1beta1.SignMode) ([]byte, error) 24 } 25 26 // NewAutoCLIKeyring wraps the SDK keyring and make it compatible with the AutoCLI keyring interfaces. 27 func NewAutoCLIKeyring(kr Keyring) (autoCLIKeyring, error) { 28 return &autoCLIKeyringAdapter{kr}, nil 29 } 30 31 type autoCLIKeyringAdapter struct { 32 Keyring 33 } 34 35 func (a *autoCLIKeyringAdapter) List() ([]string, error) { 36 list, err := a.Keyring.List() 37 if err != nil { 38 return nil, err 39 } 40 41 names := make([]string, len(list)) 42 for i, key := range list { 43 names[i] = key.Name 44 } 45 46 return names, nil 47 } 48 49 // LookupAddressByKeyName returns the address of a key stored in the keyring 50 func (a *autoCLIKeyringAdapter) LookupAddressByKeyName(name string) ([]byte, error) { 51 record, err := a.Keyring.Key(name) 52 if err != nil { 53 return nil, err 54 } 55 56 addr, err := record.GetAddress() 57 if err != nil { 58 return nil, err 59 } 60 61 return addr, nil 62 } 63 64 func (a *autoCLIKeyringAdapter) GetPubKey(name string) (cryptotypes.PubKey, error) { 65 record, err := a.Keyring.Key(name) 66 if err != nil { 67 return nil, err 68 } 69 70 return record.GetPubKey() 71 } 72 73 func (a *autoCLIKeyringAdapter) Sign(name string, msg []byte, signMode signingv1beta1.SignMode) ([]byte, error) { 74 record, err := a.Keyring.Key(name) 75 if err != nil { 76 return nil, err 77 } 78 79 sdkSignMode, err := authsigning.APISignModeToInternal(signMode) 80 if err != nil { 81 return nil, err 82 } 83 84 signBytes, _, err := a.Keyring.Sign(record.Name, msg, sdkSignMode) 85 return signBytes, err 86 }