Keypairs

The Keypair class is a wrapper around a 64-byte array, where the first 32 bytes consist of your secret seed and the latter 32 bytes are your pubkey.

Generating a new keypair

Often you need to generate a new keypair on the fly:

from solders.keypair import Keypair
keypair = Keypair()

Converting a keypair to raw bytes

To get the raw bytes of a keypair object you just call bytes(keypair):

from solders.keypair import Keypair
keypair = Keypair()
raw = bytes(keypair)

Restoring a keypair from a secret

If you already have the 64-byte secret key, you can use Keypair.from_bytes:

from solders.keypair import Keypair

secret_key = [
    174, 47, 154, 16, 202, 193, 206, 113,
    199, 190, 53, 133, 169, 175, 31, 56,
    222, 53, 138, 189, 224, 216, 117, 173,
    10, 149, 53, 45, 73, 251, 237, 246,
    15, 185, 186, 82, 177, 240, 148, 69,
    241, 227, 167, 80, 141, 89, 240, 121,
    121, 35, 172, 247, 68, 251, 226, 218,
    48, 63, 176, 109, 168, 89, 238, 135,
]

keypair = Keypair.from_bytes(secret_key)
print(f"Created Keypair with public key: {keypair.pubkey()}")
Created Keypair with public key: 24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p

This is the inverse operation to bytes(keypair).

If the secret is in base58 format, you can use Keypair.from_base58_string:

from solders.keypair import Keypair

b58_string = "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
keypair = Keypair.from_base58_string(b58_string)
print(f"Created Keypair with public key: {keypair.pubkey()}")
Created Keypair with public key: 5pVyoAeURQHNMVU7DmfMHvCDNmTEYXWfEwc136GYhTKG

Verifying a keypair

If you have a keypair and a pubkey, you can check whether the given pubkey comes from that keypair:

from solders.keypair import Keypair
from solders.pubkey import Pubkey

public_key = Pubkey.from_string("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")

keys = [
        174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
        189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
        148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
        63, 176, 109, 168, 89, 238, 135,
    ]
keypair = Keypair.from_bytes(keys)

assert keypair.pubkey() == public_key

Restoring a keypair from a mnemonic (seed phrase)

from solders.keypair import Keypair
from mnemonic import Mnemonic

mnemo = Mnemonic("english")
seed = mnemo.to_seed("pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter")
keypair = Keypair.from_seed(seed[:32])

Signing and verifying messages

The primary function of a keypair is to sign messages and enable verification of the signature. Verification of a signature allows the recipient to be sure that the data was signed by the owner of a specific private key.

from solders.keypair import Keypair

secret_key = [
      174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138, 189, 224, 216, 117,
      173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240, 148, 69, 241, 227, 167, 80, 141, 89, 240,
      121, 121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
]
keypair = Keypair.from_bytes(secret_key)
message = b"The quick brown fox jumps over the lazy dog"
signature = keypair.sign_message(message)
assert signature.verify(keypair.pubkey(), message)