在 Solana 上发送 Serum DEX 创建新订单指令 (makeNewOrderV3Instruction) 时出错

Ehs*_*hmi 3 solana solana-web3js serum-project serum-dex solana-transaction-instruction

我正在尝试在 Serum DEX V3 上发出订单请求:

tx.add(market.makeNewOrderV3Instruction( {
    owner,
    payer,
    side: 'buy',
    price,
    size,
    orderType: 'ioc',
    selfTradeBehavior: 'decrementTake'
}));
Run Code Online (Sandbox Code Playgroud)

然后后来:

await web3.sendAndConfirmTransaction(con, tx, txSigners);
Run Code Online (Sandbox Code Playgroud)

但我面临以下错误:

Transaction simulation failed: Error processing Instruction 0: custom program error: 0x1000757
    Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin invoke [1]
    Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin consumed 4018 of 200000 compute units
    Program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin failed: custom program error: 0x1000757
(node:12224) UnhandledPromiseRejectionWarning: Error: failed to send transaction: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x1000757
Run Code Online (Sandbox Code Playgroud)

我仔细检查了血清SDK创建新订单指令所需的所有输入帐户和参数,但无法解决问题。

soh*_*rab 6

以防万一有人偶然发现这个问题,让我解释一下如何阅读这些类型的错误消息,即教你如何钓鱼。

Serum DEX 返回三类自定义程序错误:

  • 业务错误:短期错误,例如0x22
  • 断言错误:像这个问题中那样的长错误
  • 未知:0x3E8-祝你好运!

对于“业务错误”,您可以通过将十六进制数转换为十进制数,然后从源代码的顶部开始查找相应的错误来破译它们。

当代码中的断言条件被触发时,就会发生断言错误。返回的错误代码的解读方式不同。前 8 位是断言所在文件的 ID,最后 16 位是断言所在的行号。

让我们0x1000757从问题中得出。将其分成两部分并将每个部分转换为十进制给出:文件#1,行号 1879。可以在此处找到文件 ID 查找。

您将面临的血清错误问题之一是它非常依赖于源代码。我们无法知道当前部署到主网的代码版本/提交。在大多数情况下,我粗略地猜测适当的提交,在提交时查看相关文件并查看行号范围以查看是否有任何断言。这通常会提示我我的指令有什么问题。