[Решено] Как вы можете отладить смарт-контракт TON в FunC и распечатать журналы или дамп переменных?
-
Я разрабатываю смарт-контракт для блокчейна TON в FunC и пытаюсь найти ошибку в своем коде. Я пытаюсь отладить проблему и буду признателен за что-то вроде
console.log()
из JavaScript, чтобы я мог добавлять отпечатки / журналы в стратегически важных местах и понимать, что происходит. Можно ли это сделать?
-
В TVM есть специальная функция для сброса переменных в debug -
~дамп
Запустите
~dump(имя_переменной);
, чтобы напечатать содержимое переменной.Запустите
~dump(12345);
, чтобы напечатать число12345
.Пример:
() recv_internal(int msg_value, cell in_msg, slice in_msg_body) impure { ;; let's say I want to print the value of the variable msg_value ~dump(msg_value); }
Пожалуйста, обратите внимание, что эта команда не будет выполняться в основной сети, поэтому не развертывайте производственные контракты с ее помощью. Мой любимый способ локального тестирования смарт-контрактов - это использование [ton-contract-executor](https://github.com/Naltox/ton-contract - executor) - эта потрясающая библиотека запускает локальную версию TVM в веб-сборке прямо внутри Node.js , что очень удобно для написания тестов на JavaScript/TypeScript.
Чтобы включить отладочную печать в ton-contract-executor, при создании экземпляра контракта передайте
debug: true
в SmartContractConfig и распечатайте журналы после взаимодействия с контрактом:import { SmartContract } from "ton-contract-executor"; const contract = await SmartContract.fromCell(codeCell, dataCell, { debug: true // enable debug }); const send = await contract.sendInternalMessage(...); console.log(send.logs); // print the logs