[Решено] Как вы анализируете uints в комментариях к транзакции TON в функции recv_internal?
-
У меня есть простой перевод с кошелька TON на контракт. У него есть комментарий: "2". Есть ли способ проанализировать этот комментарий с помощью функции
recv_internal
?Вот что я попробовал:
() recv_internal(int balance, int msg_value, cell in_msg_full, slice in_msg_body) { int op = in_msg_body~load_uint(32); if (op == 0) { int comment = in_msg_body~load_uint(64); set_data(begin_cell().store_int(comment, 64).end_cell()); } }
Предположительно, если
op
равно0
, то это передача с комментарием. Но я не смог должным образом сохранить uint. Как мне это сделать?
Этот вопрос был импортирован из чата Telegram: > <***Скрыто***
click to show
-
Это правильный путь, вам действительно нужно установить флажок "0". И вы загружаетесь в "op` правильно. Но способ, которым вы работаете с комментарием, неверен.
Символы закодированы в UTF-8, поэтому использование
load_uint
не будет работать должным образом, поскольку оно ожидает двоичную кодировку.Вместо этого вам придется разобрать его:
() recv_internal(int balance, int msg_value, cell in_msg_full, slice in_msg_body) { int op = in_msg_body~load_uint(32); if (op == 0) { ;; load in the first 8 bits because of UTF-8 encoding int comment = in_msg_body~load_uint(8); ;; in UTF-8, 50 is the character for 2, because 50 = 0x32 var state = 0; if (comment == 50) { state = 2; } set_data(begin_cell().store_uint(op, 32).store_uint(comment, 8).store_int(state, 8).end_cell()); } }
Обратитесь к UTF-8 здесь: https://www.utf8-chartable.de/