Solana交易模拟错误分析

बनाया गया: 28 जनवरी 2025

का उपयोग करके उत्तर दिया गया O1 द्वारा Chat01

प्रश्न

以下是 solana 执行模拟交易结果:
post参数:
{
"jsonrpc": "2.0",
"id": 1,
"method": "simulateTransaction",
"params": [
"AWFs0ogg\u002BWsug4l7bMQ1DO5lP6lvVKPXjl3wSGOBKtSncQ5Atb1up8h2ZF1fZj3xUnCH46oIqbRCuiYLXjSMkg8BAAoR\u002B1nAOJpgpj7/cHncQkRGBIgYfucKGSTBVXpsGxSqYnMTb\u002BDBuQh5/nTWKMqCODVbxv0qWTHZZ4yn3TbLpUwLciwinxLd4doWxj\u002BTelhdMeUlq5H2\u002BgDvIFPhOzVMTU8DUMWAgwy9p9VjmDsjgeqPy9WRqvWV2YsNKNGxhVIh5XFqt4c3buu6FVKFnYKND756yrO4QH2ulGYVX\u002BddmGqZPHoSR0tNO2W2utF3EdzaqyL9lfUWDDkSv\u002BDf4vqWzjdgrEU7U9FaeMC1Boy0/PUi5n5m7RlosOBlTWsfB2H6klsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG2b/OKtIWkoucfDuOKLsz5Q5aUlP58tyHsTGfiZTcmWjJclj04kifG7PRApFI4NgwtaE5na/xCEBI572Nvp\u002BFkDBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAALQ/\u002Bif11/ZKdMCbHylYed5LCas238ndUUsyGqezjOXo/DkGb4BOyE1GWswMr86x3r37nkdR48mey1RjrGPNicn9lmxhO8q6vhE8FSqFMGRmnExK134EWi5oI9VFOS9rMwR51VvyMcBu7nTFbs5oFQf9sbLeo/SOUQKxzaJWvBOPBpuIV/6rgYT7aH9jRhjANdrEOdwa6ztVmKDwAAAAAAEG3fbh12Whk9nL4UbO63msHLSF7V9bN5E6jPWFfv8AqSk8Dr4fHwR/rMP76dBzMrecX0Ghn\u002BU/L0t67nFltOw3AwoABQLAXBUACQYABQAPBxABAQ4VEAAEBQ4PDgsODAgCAQQFBgMADRAOJOUXy5d6460qAQAAABIBZAABoIYBAAAAAACcXwYAAAAAADIAAA==", {
"encoding": "base64",
"sigVerify": false,
"replaceRecentBlockhash": true
}]
}

响应:
{
"jsonrpc": "2.0",
"result": {
"context": {
"apiVersion": "2.0.21",
"slot": 316867511
},
"value": {
"accounts": null,
"err": {
"InstructionError": [2, {
"Custom": 3012
}]
},
"innerInstructions": null,
"logs": ["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394445 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387858 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3158 of 1383976 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 19315 of 1399850 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: Route", "Program HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt invoke [2]", "Program log: Instruction: Swap", "Program log: Custom program error: 0xbc4", "Program HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt consumed 4660 of 1375060 compute units", "Program HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt failed: custom program error: 0xbc4", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 10135 of 1380535 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0xbc4"],
"replacementBlockhash": {
"blockhash": "99nZ6NQq9HoQ2PufL9Q1V3kZZ33bvAprdvRxVFHbC4kq",
"lastValidBlockHeight": 295158341
},
"returnData": null,
"unitsConsumed": 29600
}
},
"id": 1
}

请解析 logs 中的内容,分析问题原因,
使用中文回复

विचार

Mapping the transaction flow

I’m noting the transaction's progression, including computing budget invocation, creating an associated token account, checking token account data size, and initializing relevant token accounts.

Investigating the issue

I’m piecing together the failure of the Jupiter aggregator and token swap program, pinpointing error code 3012, possibly due to insufficient funds or an input constraint mismatch.

Identifying the issue

I’m noting that the Jupiter aggregator program fails due to a custom error code 0xbc4, likely caused by insufficient tokens, incorrect token account or pool, or an unavailable route.

Ensuring transaction integrity

To address the custom error code 0xbc4, it's crucial to verify token availability, slippage settings, accurate routing, and pool mint status, which might collectively resolve the issue.

Identifying errors

I'm diagnosing the root cause of the aggregator program's failure, which seems to originate from a custom error code 0xbc4, likely due to insufficient tokens, slippage issues, or incorrect routing.

Highlighting the issue

I’m digging into the error code 0xbc4 in the second instruction involving the Jupiter aggregator, which likely points to slippage or insufficient tokens for the swap.

Thought about Solana交易模拟解析,持续 20 秒

उत्तर

从这段执行模拟的日志可以看出,前面大部分与“创建关联账户(Associated Token Account)”以及“初始化账户”的指令都执行成功,直到调用了 Jupiter 路由程序(Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4)并在其内部(更具体地说,是它调用的 HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt 程序中)执行 Swap 指令时才出现报错,最终抛出了 custom program error: 0xbc4


日志的主要执行流程解读

  1. ComputeBudget 程序

    text
    Program ComputeBudget111111111111111111111111111111 invoke [1] Program ComputeBudget111111111111111111111111111111 success
    • 这是 Solana 上的“计算预算”程序,用于设置或调整交易的计算预算(compute units 等)。这里一切正常。
  2. Associated Token Program (ATokenGPv...): 创建或初始化关联账户

    text
    Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1] Program log: CreateIdempotent ... Program log: Initialize the associated token account ... Program log: Instruction: InitializeImmutableOwner Program log: Please upgrade to SPL Token 2022 for immutable owner support ... Program log: Instruction: InitializeAccount3 ... Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success
    • 这部分日志表示你在创建并初始化一个关联的 Token 账户(Associated Token Account)。
    • 期间有个提醒:如果需要使用不可变所有者(Immutable Owner),建议升级到 SPL Token 2022。
    • 整体看,这些步骤成功完成,没有报错。
  3. Jupiter 主程序 (JUP6LkbZbjS1jKK...)

    text
    Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1] Program log: Instruction: Route Program HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt invoke [2] Program log: Instruction: Swap Program log: Custom program error: 0xbc4 ... Program HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt failed: custom program error: 0xbc4 Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0xbc4
    • 这里是调用 Jupiter 路由合约,内部又调用了另一个合约(地址 HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt)进行具体的 Swap 操作。
    • Swap 执行时抛出自定义错误 0xbc4(十六进制),对应十进制即 3012,跟响应里显示的 InstructionError: [2, { "Custom": 3012 }] 相吻合。
    • 这个错误导致了整笔交易的第二个顶层指令(也就是 Jupiter 路由的 swap)失败,进而导致交易模拟显示失败。

出错的原因分析

  • 根据日志,前面创建 ATA 账户、初始化账户等操作均已成功,所以问题不在于关联账户或初始 Token 操作。
  • 真正出错的是 Jupiter 路由调用里的 Swap 指令,该合约返回了一个自定义错误 0xbc4 (十六进制)。
  • 0xbc4(即十进制 3012)是 Jupiter 或其所调用的交换程序(HyaB3W9q6XdA5x...)内部自定义的错误码,常见原因可能包括:
    1. 代币数量不足(如输入代币余额不够)。
    2. 路由或池子参数不匹配(比如兑换对不正确、路由找不到有效池等)。
    3. 超过最大滑点限制(slippage 设置过低,以至于 Swap 指令不被允许)。
    4. 其他合约内部的检查失败。

要确认具体含义,需要参照该 Swap 程序(或 Jupiter 相关文档)的错误码定义。但从日志可以肯定,它并非通用的系统错误,而是自定义业务逻辑层面的错误,说明合约内部对某些条件进行了检查,条件不满足时抛出了 0xbc4


小结

  • 日志表明,在创建和初始化 Token 账户后,你调用了 Jupiter 路由程序进行 Swap,但在实际 Swap 时触发了合约自定义错误 0xbc4 (3012),因此模拟交易失败。
  • 建议你检查:
    1. 钱包中是否有足够的待交换代币、目标代币或中间代币的持仓是否足量。
    2. 路由配置交易对滑点设置 是否正确。
    3. 是否存在代币或路由不支持的情况等。

只有满足合约对输入、路由、滑点的要求,才能避免 0xbc4 这个自定义错误。

इस प्रश्नोत्तर को साझा करें