Ethereum позиционирует себя как децентрализованную вычислительную платформу, предназначенную для запуска приложений точно так, как запрограммировано, без присутствия мошенничества, цензуры и стороннего вмешательства. Однако реализация этих ценных функций в буквальном смысле имеет свою цену.

Газ стоит дорого.

Согласно желтой бумаге, для SSTORE 256-битного слова требуется 20 тыс. Газа, что соответствует 640 тыс. Газа для хранения 1 килобайта. И на момент написания одна единица газа стоит 11 Gwei (или 0,000000011 ETH) для стандартных скоростей (‹5 м), а 1 ETH оценивается в 731,052 доллара. Таким образом, 1 килобайт хранилища стоит 5,146 доллара, а один гигабайт стоит огромную сумму, превышающую 5 миллионов долларов. Это не означает, что данные, требующие большого объема памяти (например, видео, аудио, изображения и т. Д.), Должны быть записаны в цепочки блоков, но важно отметить значительные экономические последствия масштабирования смарт-контракта и необходимость для любого улучшения, чтобы снизить транзакционные издержки.

Растягивание экосистемы Ethereum.

Чтобы решить эту проблему, наша команда изучила инструменты, которые в настоящее время доступны в сфере Ethereum. Наиболее часто используемый ресурс, с которым мы все знакомы, - это оптимизатор компилятора Solidity. Как показано в документации по Solidity, оптимизированный компилятор предназначен для поиска выражений, которые всегда равны (на каждом входе), и объединения их в класс выражения. Например, он заменяет базовый блок, который разбивается при условии JUMP1, которое оценивается как константа.

Таким образом,

var x = 7;
data[7] = 9;
if (data[x] != x + 2)
  return 2;
else
  return 1;

упрощается до следующего:

data[7] = 9;
return 1;

Даже при такой оптимизации исследователи в своем анализе всех смарт-контрактов, развернутых до 5 ноября 2016 года, обнаружили, что оптимизатор, найденный в компиляторе Solidity, не может адекватно учитывать экземпляры бесполезных шаблонов, связанных с кодом, и шаблонов, связанных с циклами. Таким образом, они предложили GASPER (сокращение от GAS-costly Patterns checker), инструмент для автоматического обнаружения этих неэффективных шаблонов в байт-коде. Следуя по стопам команды GASPER, мы также хотели расширить границы Ethereum, найдя другие способы помочь разработчикам рассмотреть возможность усовершенствования своих смарт-контрактов.

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

Дизайн.

В ходе нашего исследования мы заметили, что организация переменных состояния смарт-контракта оказывает заметное влияние на стоимость газа. Набор переменных занимает разное количество 32-байтовых слотов в цепочке блоков в зависимости от того, как размеры соответствующих типов данных совпадают друг с другом. Таким образом, TetriX гарантирует, что контракты занимают минимум места, за счет автоматизации процесса корректировки.

Функции.

Оптимизация распределения памяти для переменных состояния контракта

  • Анализируйте смарт-контракты пользователя и обнаруживайте переменные состояния.
  • Байт выравнивает переменные на основе 32-байтовых слотов памяти.
  • Перестраивает переменные состояния смарт-контракта, чтобы выделить в блокчейне как можно меньше слотов памяти для оптимизации использования газа.

Создайте персональную среду разработки блокчейна

  • Компилирует смарт-контракт пользователя с помощью Solidity Compiler для получения точной информации о контракте.
  • Развертывает смарт-контракт пользователя с Ganache Truffle Suite для имитации блокчейна Ethereum без реальной платы за газ.

Внешний вид информации о смарт-контрактах

  • Визуализирует манипуляции с переменными состояния, выполняемые TetriX через клиентский локальный сервер.

Создание смарт-контрактов - серьезное дело.

Мы создали TetriX, чтобы повысить удобство разработки смарт-контрактов. Мы добились этого, отточив байтовое выравнивание переменных состояния во время создания экземпляра контракта, а также предоставив функцию визуализации, которая предоставляет несколько сравнительных представлений, чтобы пользователи могли понять, как манипулируют их контрактом. В обмен на впечатляющее сокращение количества газа оптимизация приносит некоторые риски и проблемы с ремонтопригодностью кода. Стратегия шаблонов не учитывает все крайние случаи, особенно потому, что типы назначений различаются в разных приложениях. Таким образом, пользователи должны проявлять осторожность и осмотрительность при принятии решения о том, является ли TetriX подходящим инструментом для них при разработке своих смарт-контрактов.

TetriX был создан для разработчиков, и мы хотим сделать процесс разработки максимально безболезненным. Если у вас есть отзывы или предложения, мы будем рады узнать, как мы можем продолжать улучшать этот инструмент!

Начать

Загрузите TetriX на npm сегодня.

npm install tetrix-sol

Decentrix - это Эстер Ким, Джозеф Ву и Полин Чанг.