Python bindings for Solana Rust tools providing high-performance blockchain development primitives, RPC functionality, and testing infrastructure.
npx @tessl/cli install tessl/pypi-solders@0.26.0A high-performance Python library for interacting with the Solana blockchain. Solders provides Python bindings to core Solana Rust libraries, offering fast serialization/deserialization, cryptographic operations, transaction building, and RPC client functionality with native-level performance.
pip install soldersimport soldersEssential core types for blockchain operations:
from solders.pubkey import Pubkey
from solders.keypair import Keypair
from solders.signature import Signature
from solders.hash import HashTransaction building imports:
from solders.transaction import Transaction, VersionedTransaction
from solders.instruction import Instruction, AccountMeta
from solders.message import Message, MessageV0System operations:
from solders.system_program import transfer, TransferParams
from solders.compute_budget import set_compute_unit_limitfrom solders.keypair import Keypair
from solders.pubkey import Pubkey
from solders.transaction import Transaction
from solders.system_program import transfer, TransferParams
from solders.hash import Hash
# Generate keypairs
sender = Keypair()
recipient = Keypair()
# Create transfer instruction
transfer_ix = transfer(TransferParams(
from_pubkey=sender.pubkey(),
to_pubkey=recipient.pubkey(),
lamports=1000000 # 0.001 SOL
))
# Create transaction
recent_blockhash = Hash.from_string("11111111111111111111111111111112") # Example
tx = Transaction.new_with_payer([transfer_ix], sender.pubkey())
tx.recent_blockhash = recent_blockhash
# Sign transaction
tx.sign([sender], recent_blockhash)from solders.pubkey import Pubkey
# Create from string
pubkey = Pubkey.from_string("11111111111111111111111111111112")
# Create from bytes
pubkey_bytes = bytes(32) # 32 zero bytes
pubkey = Pubkey(pubkey_bytes)
# Get program derived address
seeds = [b"metadata", bytes(pubkey)]
program_id = Pubkey.from_string("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")
pda, bump = Pubkey.find_program_address(seeds, program_id)from solders.instruction import Instruction, AccountMeta
from solders.pubkey import Pubkey
# Create account metadata
accounts = [
AccountMeta(pubkey=sender.pubkey(), is_signer=True, is_writable=True),
AccountMeta(pubkey=recipient.pubkey(), is_signer=False, is_writable=True)
]
# Create instruction
instruction = Instruction(
program_id=Pubkey.from_string("11111111111111111111111111111112"),
accounts=accounts,
data=bytes([0, 1, 2, 3]) # Instruction data
)Solders is organized into functional modules that mirror Solana's core architecture:
The library leverages Rust's performance through native extensions while providing Pythonic interfaces. Most functionality is exposed through a native extension module solders.solders, ensuring fast serialization and cryptographic operations essential for blockchain interactions.
ring cryptographic libraryCore blockchain cryptography including Ed25519 keypairs, signatures, public keys, and SHA-256 hashing. These primitives form the foundation for all Solana operations.
class Pubkey:
def __init__(self, value: bytes): ...
@classmethod
def from_string(cls, s: str) -> 'Pubkey': ...
@staticmethod
def find_program_address(seeds: List[bytes], program_id: 'Pubkey') -> Tuple['Pubkey', int]: ...
class Keypair:
def __init__(self): ...
@classmethod
def from_seed(cls, seed: bytes) -> 'Keypair': ...
def pubkey(self) -> Pubkey: ...
def sign_message(self, message: bytes) -> 'Signature': ...
class Signature:
def __init__(self, signature_bytes: bytes): ...
@classmethod
def from_string(cls, s: str) -> 'Signature': ...
class Hash:
def __init__(self, value: bytes): ...
@classmethod
def from_string(cls, s: str) -> 'Hash': ...Transaction and message building with support for both legacy and versioned formats, including address lookup tables and instruction compilation.
class Transaction:
def __init__(self, instructions: List[Instruction], payer: Optional[Pubkey]): ...
@staticmethod
def new_with_payer(instructions: List[Instruction], payer: Optional[Pubkey]) -> 'Transaction': ...
def sign(self, signers: List[Union[Keypair, Presigner]], recent_blockhash: Hash) -> None: ...
class VersionedTransaction:
def __init__(self, message: VersionedMessage, signatures: List[Signature]): ...
class Instruction:
def __init__(self, program_id: Pubkey, accounts: List[AccountMeta], data: bytes): ...
class AccountMeta:
def __init__(self, pubkey: Pubkey, is_signer: bool, is_writable: bool): ...Account data structures, encoding formats, and metadata handling for both raw and parsed account information.
class Account:
def __init__(self, lamports: int, data: bytes, owner: Pubkey, executable: bool, rent_epoch: int): ...
class UiAccountEncoding:
Base64: 'UiAccountEncoding'
JsonParsed: 'UiAccountEncoding'
Base58: 'UiAccountEncoding'
class CommitmentConfig:
def __init__(self, commitment: CommitmentLevel): ...
class CommitmentLevel:
Processed: 'CommitmentLevel'
Confirmed: 'CommitmentLevel'
Finalized: 'CommitmentLevel'Built-in Solana programs including the System program for account creation and transfers, and the Compute Budget program for transaction optimization.
def transfer(params: TransferParams) -> Instruction: ...
def create_account(params: CreateAccountParams) -> Instruction: ...
def allocate(params: AllocateParams) -> Instruction: ...
def set_compute_unit_limit(units: int) -> Instruction: ...
def set_compute_unit_price(micro_lamports: int) -> Instruction: ...
def request_heap_frame(bytes: int) -> Instruction: ...
# Address lookup table operations
def create_lookup_table(params: CreateLookupTableParams) -> Instruction: ...
def extend_lookup_table(params: ExtendLookupTableParams) -> Instruction: ...
def close_lookup_table(params: CloseLookupTableParams) -> Instruction: ...SPL Token program support including token account management, associated token addresses, and token state parsing.
def get_associated_token_address(owner: Pubkey, mint: Pubkey) -> Pubkey: ...
class Mint:
def __init__(self, mint_authority: Optional[Pubkey], supply: int, decimals: int, ...): ...
class TokenAccount:
def __init__(self, mint: Pubkey, owner: Pubkey, amount: int, ...): ...
class TokenAccountState:
Uninitialized: 'TokenAccountState'
Initialized: 'TokenAccountState'
Frozen: 'TokenAccountState'Comprehensive RPC client support with request/response handling, configuration options, and subscription capabilities for interacting with Solana networks.
class GetAccountInfo:
def __init__(self, pubkey: Pubkey, config: Optional[RpcAccountInfoConfig]): ...
class GetBalance:
def __init__(self, pubkey: Pubkey, config: Optional[CommitmentConfig]): ...
class GetTransaction:
def __init__(self, signature: Signature, config: Optional[RpcTransactionConfig]): ...
class RpcAccountInfoConfig:
def __init__(self, encoding: Optional[UiAccountEncoding], ...): ...Network configuration, system variables, and blockchain state including clock information, rent parameters, and epoch scheduling.
class Clock:
def __init__(self, slot: int, epoch_start_timestamp: Optional[int], epoch: int, ...): ...
class Rent:
def __init__(self, lamports_per_byte_year: int, exemption_threshold: float, burn_percent: int): ...
class EpochInfo:
def __init__(self, epoch: int, slot_index: int, slots_in_epoch: int, ...): ...
class EpochSchedule:
def __init__(self, slots_per_epoch: int, leader_schedule_slot_offset: int, ...): ...Transaction metadata, execution results, and status tracking including error handling and parsed transaction data.
class TransactionStatus:
def __init__(self, slot: int, confirmations: Optional[int], ...): ...
class UiTransactionStatusMeta:
def __init__(self, err: Optional[TransactionErrorType], fee: int, ...): ...
class ParsedInstruction:
def __init__(self, program: str, program_id: Pubkey, parsed: dict): ...
TransactionErrorType = Union[TransactionErrorFieldless, TransactionErrorInstructionError, ...]LiteSVM lightweight runtime for local testing and transaction simulation without requiring a full Solana network.
class LiteSVM:
def __init__(self): ...
def send_transaction(self, transaction: Union[Transaction, VersionedTransaction]) -> TransactionResult: ...
def get_account(self, pubkey: Pubkey) -> Optional[Account]: ...
def get_balance(self, pubkey: Pubkey) -> int: ...
TransactionResult = Union[TransactionMetadata, FailedTransactionMetadata]Comprehensive error types for transaction processing, serialization, signing operations, and RPC communications.
class SignerError(Exception): ...
class BincodeError(Exception): ...
class SerdeJSONError(Exception): ...
class SanitizeError(Exception): ...
class TransactionError(Exception): ...
class ParseHashError(Exception): ...