
Проблема газа.
Газ — это факт жизни в web3, даже если за него не взимается прямая плата. На него влияют многие факторы, но в конечном итоге все сводится к входным данным; чем больше вход, тем больше стоимость. Что, если бы существовал надежный способ последовательно и воспроизводимо уменьшить этот ввод?
Данные по протоколу Jackal хранятся как в сети, так и вне ее. Файлы хранятся вне цепочки, однако для обеспечения их безопасности без ущерба для их доступности необходимо сопоставление записей в цепочке для каждого файла и папки. Это складывается быстро. В частности, транзакции данных в сети привели к увеличению примерно на 200 единиц газа на персонажа. Это включало сохранение всего, от ключей шифрования, защищающих файл , до записанной даты последнего изменения файла.
Решение
Чтобы смягчить проблему с газом, команда разработчиков обратилась к сжатию строк . Используя библиотеку сжатия LZ-String , команда смогла без потерь сжимать и распаковывать строки символов. Строки, не требуемые для цепных операций (обязательные строки, включая адрес владельца или исходные значения merkle), достигли уменьшения размера байта на 40-90%, в зависимости от длины и повторения символов перед сжатием. Кроме того, этот процесс поддерживает соотношение количества символов 1:1 до и после шифрования AES. Все сжатие выполняется перед шифрованием, так как латинские символы повторяются значительно чаще, чем полный набор UTF-16, используемый для визуализации зашифрованных данных.
Как это работает?
Короче говоря, строки латинских символов, используемые JavaScript, визуализируются как UTF-8, но на самом деле занимают полные 16 бит для обеспечения совместимости с расширенным набором символов UTF-16. LZ-String считывает эти символы псевдо-UTF-8 и идентифицирует подстроки, которые он может представлять в виде отдельных последовательностей битов , и заполняет все 16-битное пространство для каждого «символа». Это повышает эффективность по мере того, как строки становятся длиннее и/или более повторяющимися. Эта черта особенно важна для данных наших сетевых папок, поскольку пути к файлам быстро становятся повторяющимися.
Побочные эффекты
Есть некоторые недостатки работы со сжатием строк. Работа с файлами, файловыми метаданными и сжатием строк в браузере затруднена из-за встроенных систем безопасности. Отличным примером этого является использование процесса TextDecoder/Encoder по умолчанию для чтения строк в память. Эти инструменты спроектированы так, чтобы быть безопасными для HTML, и поэтому отлично подходят практически для всех случаев использования. Однако это создает проблему с нашей стороны, поскольку изменяет сжатую строку, что делает распаковку невозможной.
Чтобы решить эту проблему, нам пришлось создать пользовательскую программу чтения для преобразования каждого сжатого значения UTF-16 в строковый элемент в памяти, минуя обычный этап очистки HTML. Это работает только потому, что мы никогда не пытаемся использовать эти сжатые строковые данные на веб-странице.
Еще одним недостатком алгоритмов сжатия данных является увеличение вычислительной нагрузки. Это происходит при обработке значений из сжатого и распакованного состояний. Мы находим это приемлемым компромиссом, поскольку хотим максимально сократить вычисления в цепочке, опять же, чтобы уменьшить потребности в газе. Используя устройство пользователя для вычислений, а не цепочку , мы достигаем — в большинстве случаев — значительного снижения потребности в газе. У большинства пользователей достаточно современные устройства и браузеры, что позволяет практически незаметно выполнять даже локальную обработку. Это особенно верно по сравнению с пропускной способностью Интернета пользователя как основным узким местом.
Важным соображением является то, что это работает только для данных, которые используются только вне сети. Строки, которые должны быть сжаты или распакованы цепочкой для выполнения некоторого действия, обычно приводят к чистым потерям из-за сложности вычислений.
Заключение
Оплата комиссий за газ для транзакций в сети неизбежна. Тем не менее, реализация сжатия строк помогает значительно уменьшить один из основных факторов, влияющих на высокую плату за газ. Благодаря скидкам до 90 % мы можем делать больше и хранить больше при меньших затратах. Такие системы, как LZ-String, позволяют нам перепрофилировать неиспользуемое пространство в традиционных данных для оптимизации требований к газу, не жертвуя стандартами конфиденциальности или безопасности.