[Решено] Что такое функция recv_internal и для чего нужны ее аргументы?
-
Требуется ли для функции
recv_internal
наличие определенных аргументов или это полностью зависит от того, что вы хотите, чтобы отправитель сообщения отправил вам?Я заметил, что некоторые функциональные программы имеют
signature
,int msg_value
,cell in_msg_cell
,slice in_msg
, в то время как другие имеют толькоslice in_msg
.
Этот вопрос был импортирован из чата Telegram: > <***Скрыто***
click to show
-
При вызове
recv_internal
в стеке всегда есть 4 аргумента.Объявляя
recv_internal
с менее чем 4 аргументами, вы заставляете FunC игнорировать большинство глубоких переменных (они все равно будут там, но ваш код не будет знать об этом на протяжении всего выполнения TVM).
in_msg_full \ - ячейка с необработанной ячейкой сообщения, содержащей все флаги и дополнительные поля
in_msg_body \ - фрагмент, содержащий только текст сообщения
Пожалуйста, проверьте https://ton.org/docs/learn/tvm-instructions/tvm-обзор#инициализация-tvm для получения дополнительной информации.
-
каждое из следующих объявлений recv_internal является правильным, но те, у которых меньше переменных, будут расходовать немного меньше газа (каждый неиспользуемый аргумент добавляет дополнительные инструкции по удалению).
() recv_internal(int balance, int msg_value, cell in_msg_cell, slice in_msg) {} () recv_internal(int msg_value, cell in_msg_cell, slice in_msg) {} () recv_internal(cell in_msg_cell, slice in_msg) {} () recv_internal(slice in_msg) {}
Вы должны проанализировать in_msg_body, чтобы получить код операции, основанный на том, как отправитель сохранил код операции в сообщении.
Обычно он хранится как первый 32-битный внутри in_msg_body.