• Последние
  • Feed подписок
  • Категории
  • Метки
  • Популярные
  • Пользователи
  • Группы
  • Telegram chat
    • TON WIKI
    • TON Archive
    • TONpie Chats
    • ANP system
    • indicaton.io
Theme Center
  • Theme Center
  • default

  • reset theme
Collapse

tonpie.io

Подпишись на канал фаундера и разработчика экосистемы tonpie

[Решено] Как вы анализируете uints в комментариях к транзакции TON в функции recv_internal?

Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском
a-commenta-funca-transactions
2 Сообщения 1 Posters 55 Просмотры
    • Сначала старые
    • Сначала новые
    • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • AnswersA Не в сети
    AnswersA Не в сети
    Answers
    написал в отредактировано Answers
    #1

    У меня есть простой перевод с кошелька 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


    Оригинал вопроса

    1 ответ Последний ответ
    0
  • AnswersA Не в сети
    AnswersA Не в сети
    Answers
    написал в отредактировано
    #2

    Решено

    Это правильный путь, вам действительно нужно установить флажок "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/

    1 ответ Последний ответ
    0

  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Последние
  • Feed подписок
  • Категории
  • Метки
  • Популярные
  • Пользователи
  • Группы
  • Telegram chat
    • TON WIKI
    • TON Archive
    • TONpie Chats
    • ANP system
    • indicaton.io
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.