Недооптимизированные смарт-контракты сожрут все Ваши деньги

НОВОСТИ
2017-04-11 15:54:17
0
2.9K

ruonion1

Ethereum на сегодняшний день является одной из самых популярных криптовалют, впервые она была запущенна в 2015 году и с того момента было совершено уже более 10 миллионов транзакаций. Блочная цепочка механизма Ethereum сегодня считается самой популярной платформой смарт-контрактов. В ней умный контракт может быть закодирован, с использованием несметного числа языков программирования, включая Solidity (лучший вариант), LLL или Serpent. Независимо от того, какой язык программирования используется, исходный код смарт-контрактов компилируется в двоичный код или байт-код, чтобы он мог работать на виртуальной машине Ethereum (EVM).

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

Было доказано, что недооптимизированные смарт-контракты стоят дороже, чем необходимый эфир; следовательно, разработчики и пользователи будут переплачивать. Чтобы снизить затраты, разработчики должны следовать тому, что мы можем назвать газоэффективными подходами к программированию. К сожалению, в настоящее время таких рекомендаций нет, и разработчикам довольно сложно обнаружить недооптимизированный, дорогостоящий код и заменить его эффективным кодом, поскольку он требует глубокого понимания механизмов EVM и точного расчета количества затрат, необходимого для выполнения различных операций.

Недавно опубликованная, исследовательская статья поведала о первом исследовании по Solidity, рекомендуемому компилятору Ethereum, и доказала, что оно не подходит для оптимизации дорогостоящих подходов к использованию эфира. В частности, авторы документа определили 7 дорогостоящих схем программирования и разделили их на 2 группы: шаблоны программирования бесполезного кода и шаблоны программирования, связанные с циклом. Более того, они представили и разработали GASPER, или дорогостоящую программу Patterns Checker, новый инструмент для автоматического определения дорогостоящих схем программирования эфира в байт-коде. GASPER в настоящее время может обнаружить три типичных шаблона программирования, которые представляют две категории.

Авторы документа применили GASPER для анализа всех выполненных до 5 ноября 2016 года смарт-контрактов. Интересно, что они выяснили, что 93,5%, 90,1% и 80% смарт-контрактов соответственно страдают от этих трех шаблонов программирования. Несмотря на то, что список шаблонов программирования, упомянутый в этом документе, далек от окончательного, данное исследование подчеркивает важность этого вопроса и надеюсь, откроет дверь для дальнейших исследований.

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

Символьное выполнение ведется на байт-коде через GASPER для обработки всех достижимых блоков кода (блок представляет собой прямую линию кодовой последовательности, у которой нет ветвей, кроме ее входа и выхода). GASPER сначала разбирает байт-код смарт-контракта, используя функцию Dishere Ethemum, а затем создаёт поток управления (CFG). Символическое выполнение начинается с корневого узла CFG, а затем проходит через CFG. Всякий раз, когда GASPER обнаруживает условный скачок, он проверяет, какие ветви допустимы (то есть истина или ложь), посредством запроса решателя Z3. Если случается, что обе ветви достижимы, GASPER выберет только одну, выполнив глубинный поиск.

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

0
2.9K