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

使用solana-py签署Solana交易时出现签名者不足错误的求助

问题解决步骤

1. 必须设置交易的recent_blockhash

交易缺少有效区块哈希会导致签名逻辑异常,先通过Solana客户端获取最新区块哈希并设置:

# 获取最新blockhash
recent_blockhash_resp = solana_client.get_latest_blockhash()
txn.recent_blockhash = recent_blockhash_resp.value.blockhash

2. 确认投票账户的提款授权人

执行以下命令确认目标投票账户的授权提款人:

solana vote-account <你的vote_account_pubkey>

查看输出中的Withdrawer字段,确保代码里withdrawer参数的公钥和该值一致。如果不一致,要么修改代码中的withdrawer为正确公钥,要么先更新投票账户的提款授权人(需要原授权人签名)。

3. 只签署必要的密钥对

交易需要的签名者仅包含两个角色:

  • 交易付费者(fee_payer):你的wallet_keypair
  • 提款授权人:如果提款授权人和付费者是同一个账户(即wallet_keypair是投票账户的提款人),只签wallet_keypair即可;如果是不同账户,需要同时签署提款授权人的密钥对。

修正后的完整代码示例

# 初始化交易并设置fee payer
txn = txlib.Transaction(fee_payer=wallet_keypair.pubkey())

# 获取并设置最新blockhash
recent_blockhash_resp = solana_client.get_latest_blockhash()
txn.recent_blockhash = recent_blockhash_resp.value.blockhash

# 添加提款指令
txn.add(
    vp.withdraw_from_vote_account(
        vp.WithdrawFromVoteAccountParams(
            vote_account_from_pubkey=vote_account_keypair.pubkey(),
            to_pubkey=validator_keypair.pubkey(),
            withdrawer=wallet_keypair.pubkey(),  # 确保这个pubkey是投票账户的授权提款人
            lamports=2_000_000_000,
        )
    )
)

# 只签署必要的密钥对(这里假设wallet_keypair是提款授权人)
txn.sign(wallet_keypair)

# 发送交易
send_resp = solana_client.send_transaction(txn)
print(send_resp.value)

额外注意事项

  • 确保vote_account_keypair对应的投票账户有足够SOL可以提取
  • 检查wallet_keypair有足够SOL支付交易手续费

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:31:05