You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python开发Solana代币交易功能时遭遇Invalid public key input错误的排查与解决

Solana Python 代币买入功能报错:Invalid Public Key Input

我帮你拆解下这个错误的核心问题,以及对应的解决办法:

错误成因

这个ValueError完全是因为代码里把Account对象直接当成公钥传入了,同时交易签名者的选择也不符合Solana的交易规则:

  1. 公钥参数传错类型:在CreateAccountParams的from_pubkey参数中,你写的keypair.public_key如果keypair是solana.account.Account实例,那public_key是一个需要调用的方法(得加括号keypair.public_key()),直接写属性名会把方法对象/Account相关实例传进去,导致公钥解析失败,也就是报错里看到的'<solana.account.Account object at ...>'。
  2. 交易签名者选错:cli.send_transaction(transaction, new_account)这里你让新生成的空账户签名交易,但这笔交易是要从你的钱包扣钱创建新账户,必须由你的钱包keypair来签名——新账户还没在链上初始化,根本没有权限签这笔交易。

修正后的代码

from solana.publickey import PublicKey
from solana.transaction import Transaction
from solana.system_program import create_account, CreateAccountParams
from solana.account import Account

program_id = '9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin'

def perform_buy(keypair, program_id, cli):
    # 确保keypair是Account对象(如果传入的是32字节私钥数组,先转成Account)
    if not isinstance(keypair, Account):
        keypair = Account(keypair[:32])
    
    new_account = Account()
    print(new_account.public_key())
    print(new_account.keypair())

    transaction = Transaction()
    # 修正from_pubkey:调用public_key()获取正确的PublicKey实例
    transaction.add(create_account(CreateAccountParams(
        from_pubkey=keypair.public_key(),
        new_account_pubkey=new_account.public_key(),
        # 替换硬编码的lamports,用链上实际需要的租金金额
        lamports=cli.get_minimum_balance_for_rent_exemption(88),
        space=88,
        program_id=PublicKey(program_id),
    )))
    
    # 修正签名者:用你的钱包keypair签名交易
    send_tx = cli.send_transaction(transaction, keypair)
    print(send_tx)

额外注意事项

  • 别硬编码lamports=10000,这个金额大概率不够支付账户的租金,用cli.get_minimum_balance_for_rent_exemption(88)可以获取链上要求的最小租金,避免交易因为余额不足失败。
  • 如果你是要创建代币交易用的关联账户,其实Solana的SPL Token库有专门的create_associated_token_account指令,比手动创建普通账户更规范,后续可以考虑用这个方法来简化代币账户的创建流程。

内容的提问来源于stack exchange,提问作者Noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:47:31