Solana交易模拟错误分析
Créé le : 28 janvier 2025
Créé le : 28 janvier 2025
以下是 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 中的内容,分析问题原因,
使用中文回复
从这段执行模拟的日志可以看出,前面大部分与“创建关联账户(Associated Token Account)”以及“初始化账户”的指令都执行成功,直到调用了 Jupiter 路由程序(Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4)并在其内部(更具体地说,是它调用的 HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt 程序中)执行 Swap 指令时才出现报错,最终抛出了 custom program error: 0xbc4。
ComputeBudget 程序
textProgram ComputeBudget111111111111111111111111111111 invoke [1] Program ComputeBudget111111111111111111111111111111 success
Associated Token Program (ATokenGPv...): 创建或初始化关联账户
textProgram 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
Jupiter 主程序 (JUP6LkbZbjS1jKK...)
textProgram 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
HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt)进行具体的 Swap 操作。0xbc4(十六进制),对应十进制即 3012,跟响应里显示的 InstructionError: [2, { "Custom": 3012 }] 相吻合。0xbc4 (十六进制)。0xbc4(即十进制 3012)是 Jupiter 或其所调用的交换程序(HyaB3W9q6XdA5x...)内部自定义的错误码,常见原因可能包括:
要确认具体含义,需要参照该 Swap 程序(或 Jupiter 相关文档)的错误码定义。但从日志可以肯定,它并非通用的系统错误,而是自定义业务逻辑层面的错误,说明合约内部对某些条件进行了检查,条件不满足时抛出了 0xbc4。
0xbc4 (3012),因此模拟交易失败。只有满足合约对输入、路由、滑点的要求,才能避免 0xbc4 这个自定义错误。