Solana Python SDK 指南:用 Python 搭 Solana 应用

用 Python 做 Solana 开发的实操指南。solana-py、solders、常见模式、跟 TypeScript 比什么管用、什么不行。

BoltTx Team··7 min read
solanapythonsdksolders开发者

Python 开发者想在 Solana 上搭东西的话,生态可用但比 TypeScript 不那么成熟。两个主要库(solana-pysolders)覆盖你要的大部分;模式跟 web3.js 知道之后是相似的。

这是 Python 上 Solana 开发的实操指南:库、模式、坑、什么时候 Python 是合适选择、什么时候该换成 TypeScript 或 Rust。

Python Solana 生态

两个主要库:

solana-py 长存的 Python Solana SDK。提供 Connection 风格的类、交易构建、RPC 方法包装。成熟,但比 JS 生态走得慢。

solders 较新、Rust 后端的 Python 绑定,提供低级类型(Pubkey、Keypair、Signature),性能比纯 Python 等同强很多。经常跟 solana-py 一起用。

现代 Python Solana 代码典型两个都用:solders 给类型、solana-py 给更高级的 RPC 交互。

安装

pip install solana solders

或 poetry / uv。两个 PyPI 上支持都好。

基础 RPC 连接

Python 模式:

from solana.rpc.api import Client
from solders.keypair import Keypair
from solders.pubkey import Pubkey

# 连 RPC
client = Client("https://your-rpc-url.example/?api-key=...")

# 生成或加载 keypair
sender = Keypair()  # 或 Keypair.from_bytes(...)

# 查余额
balance = client.get_balance(sender.pubkey())
print(balance.value)  # Lamports

用过 web3.js 的话形态熟悉。库藏起 JSON-RPC 细节。

发交易

from solders.message import Message
from solders.transaction import Transaction
from solders.system_program import TransferParams, transfer
from solana.rpc.types import TxOpts

ix = transfer(TransferParams(
    from_pubkey=sender.pubkey(),
    to_pubkey=recipient.pubkey(),
    lamports=1_000_000,
))

recent_blockhash = client.get_latest_blockhash().value.blockhash

# 用 solders 构建并签名交易
msg = Message.new_with_blockhash([ix], sender.pubkey(), recent_blockhash)
tx = Transaction([sender], msg, recent_blockhash)

result = client.send_transaction(
    tx,
    opts=TxOpts(skip_preflight=True, max_retries=0),
)
print(result.value)  # Signature

模式跟 web3.js 相似,带 Python 习惯。

Python 特定要考虑的

异步 vs 同步。 solana-py 有同步(Client)和异步(AsyncClient)两个变体。高量代码用异步。脚本同步行。

类型 stub。 不错但不完美。一些方法没完整类型提示。准备偶尔 # type: ignore

性能。 纯 Python 一些操作比 JS 慢。重要地方(签名、反序列化)solders 提供 Rust 后端实现关差距。

库版本。 solana-pysolders 半独立移动。看兼容问题;生产固定版本。

Python 什么时候适合 Solana

Python 是合适选择的场景:

Python 不合适的场景:

常见 Python Solana 模式

异步批量 RPC 调用:

import asyncio
from solana.rpc.async_api import AsyncClient

async def fetch_many(client, pubkeys):
    tasks = [client.get_account_info(pk) for pk in pubkeys]
    return await asyncio.gather(*tasks)

async with AsyncClient("https://your-rpc.example") as client:
    results = await fetch_many(client, [key1, key2, key3])

要更好性能,合适地方偏好 getMultipleAccountsInfo(一个 round-trip)。

版本化交易签名:

from solders.message import MessageV0
from solders.transaction import VersionedTransaction

msg = MessageV0.try_compile(
    payer=signer.pubkey(),
    instructions=[your_instruction],
    address_lookup_table_accounts=[],
    recent_blockhash=blockhash,
)

tx = VersionedTransaction(msg, [signer])

版本化交易支持比 legacy 交易更多账户;很多 Jupiter 路由要。

常见 Python 错误

异步自然的代码用同步客户端。 做很多并发操作的话,异步明显更好。

不固定库版本。 solana-pysolders 在演化;生产代码该固定。

低效构建交易。 朴素 Python 签名慢;用 solders 后端类型。

忘处理 RPC 错误。 网络错误、限流、交易失败。搭防御性代码。

当成全类型代码。 类型提示是部分的。别盲信;测。

Python 里的交易机器人

Python 给一些交易机器人风格合理:

策略/研究机器人。 Pandas 驱动的回测、状态检测、信号生成。Python 出彩。

中频执行机器人。 亚秒级可达。亚 100ms 难;考虑热路径 Rust 配 Python 编排。

交易系统后端服务。 API 服务器、监控、仪表板。Python 行。

亚 100ms 或 HFT,热路径用 Rust 写、Python 编排。

这周可以做什么

开始 Python Solana:

  1. solana-pysolders 都要。
  2. 任何生产代码设 AsyncClient 同步给快脚本。
  3. RPC URL 用环境变量。 跟其他地方做法一样。
  4. 搭每笔签名级别遥测。 任何语言都一样有价值。
  5. 交易机器人,提前规划 Rust 逃生口。 等你后面要更多速度时,你会想把热路径迁到 Rust。
  6. 固定库版本。 生产里不可选。

从 Python 试一下 BoltTx

from solana.rpc.api import Client
from solana.rpc.types import TxOpts

client = Client("https://bolttx.io/?api-key=YOUR_API_KEY")

# ... 构建你的交易 ...

result = client.send_transaction(
    tx,
    opts=TxOpts(skip_preflight=True, max_retries=0),
)

免费档注册。从 Python 工作跟从其他语言一样。

常见问题

solana-py 还在维护吗? 在,虽然比 JS 生态走得慢。GitHub 上看更新。

anchorpy 怎么样? anchorpy 给 Python 提供 Anchor 风格的客户端生成。从 Python 调 Anchor 程序有用。

能用 Python 写 Solana 程序吗? 不能。程序是 Rust。Python 只给客户端代码。

跟 TypeScript 性能差别? RPC 受限的工作、相似。CPU 受限的工作(签名、序列化),Python 配 solders 有竞争力;没它就更慢。

solana-pysolders 哪个更好? 两个都用。solders 给低级类型(更快);solana-py 给高级 RPC 交互。

延伸阅读

返回博客列表