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



我正试图在Serum DEX V3:上提出订单请求

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

然后:

await web3.sendAndConfirmTransaction(con, tx, txSigners);

但我面临以下错误:

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

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

为了防止有人碰到这个问题,让我解释一下如何阅读这些错误消息,即教你如何钓鱼。

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

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

对于";商业错误";,您可以通过将十六进制数转换为十进制数,然后从源代码的顶部开始查找相应的错误来解密它们。

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

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

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

最新更新