Поиск
Close this search box.
Trends Cryptos

Как программировать смарт-контракты с помощью Ethereum и Webassembly?

Ethereum — одна из самых популярных криптовалют, но это гораздо больше, чем просто криптовалюта. Благодаря алгоритмам криптовалюта может управляться совершенно автономно. Но как работают «умные контракты» и как далеко мы продвинулись на этом пути?

Как работают смарт-контракты в Ethereum?
Чтобы понять принцип работы смарт-контрактов в Ethereum, нам сначала нужно совершить небольшое путешествие в мир языков программирования. Современные языки программирования, по сути, делятся на две группы: интерпретируемые и компилируемые языки. В первой группе программы пишутся на языке высокого уровня, а затем выполняются интерпретатором. Двумя популярными примерами являются Python и JavaScript. Интерпретируемые языки распространены во многих прикладных областях (например, в Интернете), поскольку они позволяют сразу же приступить к работе. Кроме того, они очень универсальны и могут использоваться на разных платформах без необходимости в дополнительных инструментах.

В отличие от них существуют компилируемые языки, в которых компилятор сначала преобразует текст программы в другой язык — часто двоичный машинный код. Этот двоичный код зависит от платформы и выполняется непосредственно на процессоре. Компилятор может (и должен) создавать специальный код для набора инструкций процессора, например, для ARM или Intel-совместимых CPU. Известными представителями этого типа являются C и Rust.

Однако реальность, как всегда, сложнее, чем предполагают эти простые категории. Уже некоторое время существуют гибридные формы, такие как Java. Компилятор Java переводит код Java не напрямую в «настоящий» машинный код, а в специальный промежуточный формат. Этот промежуточный формат, в свою очередь, затем исполняется интерпретатором — виртуальной машиной Java — на конкретной архитектуре процессора.

Аналогичным образом работают и смарт-контракты Ethereum. Все узлы, которые подтверждают транзакции и добывают новую валюту в Ethereum, содержат экземпляр виртуальной машины Ethereum (EVM). В Yellow Paper, технической спецификации Ethereum, подробно описаны инструкции, которые поддерживают EVM, и то, как они должны выполняться.

Это собственная разработка с рядом особенностей:

Взаимодействие с внешним миром невозможно: все алгоритмические решения должны исходить от блокчейна и его транзакций.
Арифметика основана на 256-битных значениях, чтобы было проще обрабатывать большие адреса и суммы.
Специальные операции, такие как хэш-функции, интегрированы для повышения производительности.
Всем инструкциям присваивается функция стоимости (fuel), которая примерно соответствует времени выполнения и объему требуемой памяти. В английском языке широко используется термин metering.
Программирование на EVM
Как и в экосистеме Java, существует несколько языков программирования, для которых доступны компиляторы EVM. Наиболее распространенным языком является Solidity, который поверхностно (синтаксически) похож на JavaScript. В конце 2020 года в документации Ethereum появились еще два языка: Vyper, основанный на Python, и Yul Plus — полностью независимая разработка.

Все эти языки объединяет то, что они являются доменно-специфическими, поскольку, в отличие от языков общего назначения, занимают определенную нишу с особыми характеристиками и, в частности, специальным механизмом исполнения: EVM. Конечно, эти доменно-специфические языки (DSL) в принципе являются хорошей идеей для снижения сложности приложений.

Но в случае с EVM это кажется бессмысленным. В конце концов, он может — несмотря на отсутствие возможности взаимодействовать с миром за пределами блокчейна — выполнять произвольные алгоритмы, так что он (проще говоря) Тьюринг-полный.

Почему бы не использовать существующий язык и среду исполнения?
При необходимости придется удалить некоторые функции, но мы сможем использовать более длительный опыт, более стабильные инструменты и — что гораздо важнее — более широкую базу программистов. Ведь общеизвестно, что сегодня популярность языка программирования определяется не только тем, насколько он лаконичен, безопасен для типов или динамичен, но и тем, насколько легко получить доступ к множеству существующих библиотек и пакетов. Эту смену эпох лучше всего иллюстрирует JavaScript, который часто критикуют за грубую семантику, но который должен считаться самым популярным языком программирования с момента появления миллионного пакета NPM.

Webassembly, универсальный промежуточный язык
Люди, занимающиеся разработкой спецификации Ethereum, пришли к выводу, что некоторые проблемы можно решить, отказавшись от пользовательской разработки в пользу универсального языка. Как удобно, что в вебе ведется разработка альтернативы большому псу JavaScript: Webassembly (WASM). Это и универсальный промежуточный язык, и бинарный формат, объединенный со спецификацией для интерпретаторов. Как следует из названия, этот открытый стандарт изначально разрабатывался для веба. В то же время были рассмотрены и другие области применения (например, приложения для смартфонов).

Разработкой WASM занимаются такие гиганты индустрии, как Microsoft, Google и Apple. Ключевой особенностью языка является то, что он с самого начала был разработан для переносимости. Это видно из того, что многие существующие языки программирования, такие как Rust, C++ или Go, уже могут компилироваться для веб-ассемблера.

Sommaire

Sois au courant des dernières actus !

Inscris-toi à notre newsletter pour recevoir toute l’actu crypto directement dans ta boîte mail

Envie d’écrire un article ?

Rédigez votre article et soumettez-le à l’équipe coinaute. On prendra le temps de le lire et peut-être même de le publier !

Articles similaires