На что следует обратить внимание при работе с TON Blockchain
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.
В этой статье мы рассмотрим и обсудим элементы, которые необходимо учитывать тем, кто хочет разрабатывать приложения TON.
Чек-лист
1. Коллизии имен
Переменные и функции Func могут содержать практически любой допустимый символ. Т.е. var++
, ~bits
, foo-bar+baz
, включая запятые, являются допустимыми именами переменных и функций.
При написании и проверке кода Func следует использовать Linter.
2. Проверьте значения выбросов
Каждый раз, когда выполнение TVM завершается нормально, оно останавливается с кодами выхода 0
или 1
. Хотя это п роисходит автоматически, выполнение TVM может быть прервано неожиданным образом, если коды выхода 0
и 1
будут выброшены непосредственно командой throw(0)
или throw(1)
.
3. Func - строго типизированный язык, в структурах данных которого хранится именно то, что они должны хранить
Очень важно следить за тем, что делает код и что он может вернуть. Помните, что компилятор учитывает только сам код и только в его начальное состояние. После выполнения определенных операций сохраненные значения некоторых переменных могут измениться.
Чтение неожиданных значений переменных и вызов методов для типво данных, которые не должны иметь таких методов (или их возвращаемые значения сохраняются неправильно), являются ошибками и не пропускаются как "предупреждения" или "уведомления", а приводят к недостижимому коду. Помните, что сохранение неожиданного значения может быть допустимым, однако его чтение может вызвать проблемы, например, код ошибки 5 (целое число вне ожидаемого диапазона) может быть выброшен для целочисленной переменной.
4. Сообщения имеют режимы
Необходимо проверять режим сообщения, в частности, его взаимодействие с предыдущими отправленными сообщениями и платой за хранение. Возможной проблемой может быть неучет платы за хранение, в этом случае у контракта может закончиться TON, что приведет к неожиданным сбоям при отправке исходящих сообщений. Вы можете просмотреть режимы сообщений здесь.
5. TON полностью реализует модель акторов
Это означает, что код контракта может быть изменен. Его можно изменить либо постоянно, используя директиву TVM SETCODE
, либо во время выполнения, устанавливая в реестре TVM кода новое значение ячейки до окончания выполнения.
6. Блокчейн TON имеет несколько фаз транзакций: фаза вычислений, фаза действий и фаза отскока.
На вычислительной фазе выполняется код смарт-контрактов, и только после этого производятся действия (отправка сообщений, модификация кода, изменение библиотек и другие). Поэтому, в отличие от блокчейнов на базе Ethereum, Вы не увидите код завершеия вычислительной фазы, если ожидаете, что отправленное сообщение завершится неудачно, так как это происходит не в вычислительной фазе, а позже, в фазе выполнения действий.
7. Контракты TON являются автономными
Контракты в блокчейне могут находиться в отдельных шардах, обрабатываемых другим набором валидаторов, а это значит, что разработчик не может получить данные из других контрактов по запросу. Таким образом, любая коммуникация осуществляется а синхронно, путем отправки сообщений.
8. В отличие от других блокчейнов, TON не содержит сообщений о возврате, только коды выхода
Прежде чем приступить к программированию смарт-контракта TON, следует продумать дорожную карту кодов выхода для потока кода (и задокументировать ее).