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

Solana模拟pump.fun买入指令失败,报错AccountNotFound求助

Solana模拟pump.fun交易报错AccountNotFound问题

问题描述

在Solana上模拟pump.fun的代币买入交易时触发AccountNotFound错误,但创建交易签名并确认时却能成功买入代币。已知代币铸币地址正确,疑问:模拟交易是否需要账户有资金?

相关代码

main.py

from solders.pubkey import Pubkey

from pumpfun.pumpfun import buy


buy(Pubkey.from_string('token_mint_string'), 0.05)

pumpfun.py

def buy(token_mint_address: Pubkey, sol_buy_amount: float):
    # ... (部分无关代码省略)
    compiled_message: MessageV0 = MessageV0.try_compile(
        payer=owner_pubkey,
        instructions=instructions,
        address_lookup_table_accounts=[],
        recent_blockhash=client.get_latest_blockhash().value.blockhash,
    )

    transaction: VersionedTransaction = VersionedTransaction(compiled_message, [payer_keypair])

    print(client.simulate_transaction(transaction))

模拟交易报错输出

SimulateTransactionResp { context: RpcResponseContext { slot: 277011621, api_version: Some("1.18.15") }, value: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(AccountNotFound), logs: Some([]), accounts: None, units_consumed: Some(0), return_data: None, inner_instructions: None }) }

解答

  • 模拟交易不需要账户有资金,报错的核心原因是交易依赖的某些账户(比如代币关联的ATA账户)尚未初始化,而模拟环境默认不会自动创建未存在的账户。
  • 真实交易成功的逻辑:pump.fun的买入指令会自动包含创建ATA账户的逻辑,链上执行时会自动初始化所需账户;但模拟交易时,除非显式配置,否则RPC节点不会预创建这些账户,导致AccountNotFound。
  • 修复模拟报错的方案:
    1. 调用simulate_transaction时传入replace_recent_blockhash=True参数,让节点允许模拟未初始化账户的创建逻辑;
    2. 使用accounts参数指定需要预加载的账户(比如通过ATA推导公式算出的目标账户地址),告知模拟环境这些账户会在交易中被创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:12:33