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  }