github.com/celestiaorg/celestia-node@v0.15.0-beta.1/nodebuilder/state/keyring.go (about)

     1  package state
     2  
     3  import (
     4  	kr "github.com/cosmos/cosmos-sdk/crypto/keyring"
     5  
     6  	apptypes "github.com/celestiaorg/celestia-app/x/blob/types"
     7  
     8  	"github.com/celestiaorg/celestia-node/libs/keystore"
     9  	"github.com/celestiaorg/celestia-node/nodebuilder/p2p"
    10  )
    11  
    12  const DefaultAccountName = "my_celes_key"
    13  
    14  // KeyringSigner constructs a new keyring signer.
    15  // NOTE: we construct keyring signer before constructing node for easier UX
    16  // as having keyring-backend set to `file` prompts user for password.
    17  func KeyringSigner(cfg Config, ks keystore.Keystore, net p2p.Network) (*apptypes.KeyringSigner, error) {
    18  	ring := ks.Keyring()
    19  	var info *kr.Record
    20  	// if custom keyringAccName provided, find key for that name
    21  	if cfg.KeyringAccName != "" {
    22  		keyInfo, err := ring.Key(cfg.KeyringAccName)
    23  		if err != nil {
    24  			log.Errorw("failed to find key by given name", "keyring.accname", cfg.KeyringAccName)
    25  			return nil, err
    26  		}
    27  		info = keyInfo
    28  	} else {
    29  		// use default key
    30  		keyInfo, err := ring.Key(DefaultAccountName)
    31  		if err != nil {
    32  			log.Errorw("could not access key in keyring", "name", DefaultAccountName)
    33  			return nil, err
    34  		}
    35  		info = keyInfo
    36  	}
    37  	// construct signer using the default key found / generated above
    38  	signer := apptypes.NewKeyringSigner(ring, info.Name, string(net))
    39  	signerInfo := signer.GetSignerInfo()
    40  	log.Infow("constructed keyring signer", "backend", cfg.KeyringBackend, "path", ks.Path(),
    41  		"key name", signerInfo.Name, "chain-id", string(net))
    42  
    43  	return signer, nil
    44  }