web3.py如何连接Solana、比特币等非以太坊链节点
问题根因
web3.py是专为EVM兼容链设计的开发SDK,原生仅支持遵循以太坊JSON-RPC规范的节点接口,完全不兼容比特币、Solana这类非EVM公链的接口协议,代码无法运行是底层适配逻辑不匹配导致的,和节点地址填写、参数传值没有关系。
具体不匹配的点包括:
- 代码传入比特币主网节点地址,却调用
eth命名空间下的eth_chainId、eth_getBalance等以太坊标准RPC方法,比特币节点无法识别这类请求,会直接返回接口不存在的报错。 - 代码中传入的
1GNgwA8JfG7Kc8akJ8opdNWJUihqUztfPe是比特币Legacy格式地址,和以太坊要求的0x开头地址格式完全不兼容,即使是EVM链节点也无法识别该类地址。 - 比特币、Solana都有独立设计的账户模型、RPC规范、加密算法逻辑,web3.py没有内置这些非EVM链的适配逻辑,不可能通过单纯切换HTTPProvider节点地址的方式实现跨链连接。
解决方案
针对不同公链选择生态原生适配的SDK即可,不要尝试用web3.py直接连接非EVM链节点。
比特币节点交互
使用比特币生态原生Python SDK python-bitcoinlib,该库原生适配比特币节点RPC规范,支持余额查询、交易构造签名、区块查询等全量比特币链上操作。
基础调用示例:
from bitcoinrpc.authproxy import AuthServiceProxy # 连接本地开启RPC服务的比特币节点,替换为自己节点配置的rpc用户名、密码 btc_rpc = AuthServiceProxy("http://%s:%s@127.0.0.1:8332" % ("your_rpc_user", "your_rpc_password")) # 查询当前区块高度 print(btc_rpc.getblockcount()) # 地址余额查询需要节点开启txindex索引,或搭配第三方链上索引服务使用
Solana节点交互
使用Solana官方维护的Python SDK solana-py,该库完全适配Solana JSON-RPC规范,支持Solana账户查询、交易发送、程序交互等全量操作。
基础调用示例:
from solana.rpc.api import Client from solana.publickey import PublicKey # 连接Solana主网公开节点 sol_client = Client("https://api.mainnet-beta.solana.com") # 查询当前链上slot高度 print(sol_client.get_slot()) # 查询指定地址余额 address = PublicKey("替换为要查询的Solana钱包地址") balance_res = sol_client.get_balance(address) print(balance_res.value)
如果需要统一入口交互多链,可以选择封装了多链适配逻辑的多链抽象SDK,这类SDK底层也是针对不同公链单独封装了原生调用逻辑,并非通过web3.py直接对接非EVM节点实现。
内容的提问来源于stack exchange,提问作者Akash Pattnaik
相关产品推荐
相关产品推荐

