Ошибка при отправке Serum DEX инструкции по созданию нового заказа (makeNewOrderV3Instruction) на Solana
Я пытаюсь оформить заказ на 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 сыворотки для создания новой инструкции по заказу, но я не смог решить проблему.
1 ответ
На всякий случай, если кто-то наткнется на этот вопрос, давайте объясним, как вообще читать такого рода сообщения об ошибках, т.е. научим вас ловить рыбу.
Serum DEX имеет три класса ошибок пользовательских программ, которые он возвращает:
- Бизнес-ошибки: короткие ошибки, например
0x22
- Ошибки утверждения: длинные, как в этом вопросе.
- Неизвестный:
0x3E8
- удачи!
Что касается «бизнес-ошибок», вы можете расшифровать их, преобразовав шестнадцатеричное число в десятичное и затем найдя соответствующую ошибку, начиная сверху в исходном коде.
Ошибки утверждения возникают, когда срабатывает условие утверждения в коде. Возвращаемый код ошибки расшифровывается по-разному. Первые 8 бит — это идентификатор файла, в котором находится утверждение, а последние 16 бит — это номер строки, в которой находится утверждение.
Давайте0x1000757
из вопроса. Разделение его на две части и преобразование каждой из них в десятичное число дает нам: Файл № 1, номер строки 1879. Поиск идентификатора файла можно найти здесь.
Одна проблема, с которой вы столкнетесь с ошибками Serum, заключается в том, что все это очень зависит от исходного кода. У нас нет возможности узнать, какая версия/коммит кода в настоящее время развернута в основной сети. В большинстве случаев я примерно угадываю подходящий коммит, просматриваю соответствующий файл во время этого коммита и смотрю в диапазоне номеров строк, чтобы увидеть, есть ли какие-либо утверждения. Обычно это дает мне подсказку о том, что не так с моими инструкциями.