Как разобрать неполное слово в Cairo ByteArray

Cairo сериализует длинные байтовые строки полными словами по 31 байту и завершающим неполным словом. Если принять первое поле за общую длину в байтах, сместятся следующие аргументы.

Разберите две границы длины

У abc нет полных слов. Поэтому первый felt равен нулю, затем идут неполное слово и длина три. У строки ровно из 31 байта одно полное слово и пустой остаток.

ByteArray("abc") → [0, 0x616263, 3]
ByteArray(31 bytes) → [1, full_word, 0, 0]

Восстанавливайте каждое полное слово ровно в 31 байт. Неполное слово декодируйте в pending_word_len байт с сохранением ведущих нулей в рамках этой длины. Общая длина равна числу полных слов, умноженному на 31, плюс длина остатка.

Переходите к тексту после сборки байтов

Многобайтовый символ UTF-8 может пересекать границу слов. Соберите байты до проверки UTF-8. Произвольные данные сохраняйте в двоичном виде, чтобы замена недопустимых последовательностей не разрушила обратимость. starknet.io The Cairo Programming Language