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

  • reset theme
Collapse

tonpie.io

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

[Решено] Как преобразовать "операционный код` в шестнадцатеричный?

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

    В Проекте, нам нужно будет самим написать функции-оболочки.

    Что еще более важно, когда мы кодируем "операционный код" в нашем функциональном коде, нам нужно декодировать строку в шестнадцатеричный операционный код, а затем преобразовать ее в типы данных uint и hex.

    Например:

    const op::increase = "op::increase"c; 
    ;; create an opcode from a string using the "c" prefix; this results in the 0x7e8764ef opcode in this case.
    

    Мой вопрос в том, как мы можем обобщить процесс для обычного преобразования строки в uint и шестнадцатеричные данные?


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

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

    Решено

    Вообще говоря, функциональный код op::increase = "op::increase"c сначала преобразует это в uint (целое число без знака), поскольку в TVM (виртуальной машине Тьюринга) обмен данными осуществляется только в целых числах без знака, чтобы различать "неограниченные" функции, которые вы создаете.

    С другой стороны, "uint" может быть преобразован в "шестнадцатеричный" код, чтобы сэкономить место при его хранении в смарт-контракте.

    **Вот пример в TypeScript для завершения преобразования операционного кода в uint и шестнадцатеричные данные. Он использует метод CRC32 для распаковки этой информации операционного кода. **

    Код:

    const POLYNOMIAL = -306674912;
    
    let crc32_table: Int32Array | undefined = undefined;
    
    export function crc32(str: string, crc = 0xFFFFFFFF) {
        let bytes = Buffer.from(str);
        if (crc32_table === undefined) {
            calcTable();
        }
        for (let i = 0; i < bytes.length; ++i)
            crc = crc32_table![(crc ^ bytes[i]) & 0xff] ^ (crc >>> 8);
        return (crc ^ -1) >>> 0;
    }
    
    function calcTable() {
        crc32_table = new Int32Array(256);
        for (let i = 0; i < 256; i++) {
            let r = i;
            for (let bit = 8; bit > 0; --bit)
                r = ((r & 1) ? ((r >>> 1) ^ POLYNOMIAL) : (r >>> 1));
            crc32_table[i] = r;
        }
    }
    

    Как только мы вызовем функцию crc32("депозит"), мы сможем получить значение 0xb04a29cf на практике.

    Для получения дополнительной информации о методе CRC32 вы можете перейти по следующим ссылкам:

    • Документация TON CRC32 * Онлайн-инструмент CRC32
    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.