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