Решено
Вообще говоря, функциональный код 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