Ошибка при отправке 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, заключается в том, что все это очень зависит от исходного кода. У нас нет возможности узнать, какая версия/коммит кода в настоящее время развернута в основной сети. В большинстве случаев я примерно угадываю подходящий коммит, просматриваю соответствующий файл во время этого коммита и смотрю в диапазоне номеров строк, чтобы увидеть, есть ли какие-либо утверждения. Обычно это дает мне подсказку о том, что не так с моими инструкциями.

Другие вопросы по тегам