Децентрализованные приложения (dApps) все больше привлекают внимание разработчиков по всему миру. В отличие от централизованных приложений, основанных на таких платформах, как iOS и Android, dApps напрямую соединяют пользователей и разработчиков без привлечения посредника. Для создания dApp не требуется разрешения. Кроме того, не существует компании или централизованной группы людей, которые могут изменять правила платформы. На сегодняшний день существует более 1 000 dApps, построенных на Ethereum.

Децентрализованное приложение имеет свой внутренний код, который работает в децентрализованной одноранговой сети. DApp может иметь интерфейсный код и пользовательские интерфейсы, написанные на любом языке, который может обращаться к его серверу. Кроме того, его интерфейс можно разместить в децентрализованном хранилище, таком как IPFS.

Основная разница между разработкой dApp и централизованного приложения

Главной разницей между разработкой dApp и централизованного приложения является уровень строгости, с помощью которого код должен быть тщательно изучен до того, как его перенесут на производство. Разработка децентрализованного приложения больше похожа на разработку аппаратного обеспечения, чем программного. При разработке аппаратного обеспечения необходимо провести тщательное тестирование и прототипирование до того, как продукт будет представлен общественности. При разработке dApp смарт-контракт не может быть изменен после его запуска. Из-за ошибки в смарт-контракте пользователи могут потерять свои средства, а репутация разработчиков dApp будет подорвана.

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

Ethereum – первая крупная платформа на базе блокчейна, использующая тьюринг-полный язык для создания смарт-контрактов. 94 из 100 лучших dApps были созданы на Ethereum. У Ethereum также в 30 раз больше разработчиков, чем у следующего блокчейн-сообщества.

Языки программирования для разработки dApp

Solidity – это стандартный язык программирования, который используется для создания dApps на Ethereum. CryptoZombies является отличной школой программирования, в которой учат создавать децентрализованные приложения.

Несмотря на популярность Solidity, его использование приводит к возникновению проблем. Несколько новых языков программирования, которые находятся сейчас в разработке, могут стать альтернативой Solidity для создания смарт-контрактов.

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

Другим потенциальным языком для Ethereum является Simplicity, который был предложен в прошлом месяце на конференции Stanford BPASE. Он способен решить четыре основные проблемы Solidity. Во-первых, Simplicity не допускает отказа в обслуживании, вычисляя затраты ресурсов на программы. Во-вторых, для ограничения расходов на ресурсы он использует инструменты статического анализа. В-третьих, простота позволяет избежать хаков благодаря Coq – официальный инструмент проверки, доказывающий правильность программы. Наконец, Simplicity повышает конфиденциальность, удаляя неиспользуемый код, прежде чем он появится в блокчейне.

Учитывая важность безопасности в смарт-контрактах, формальная проверка гораздо чаще встречается в разработке dApp, чем в разработке централизованных приложений. Формальная проверка заключается в том, чтобы понять, соответствует ли алгоритм некоторым логическим требованиям. Используя стандартные инструменты проверки, такие как Isabelle и Coq, можно доказать, что код не содержит ошибок, точно так же, как математики доказывают теорему.

Простота принадлежит семейству функциональных языков, таких как Haskell, Clojure, Lisp, OCaml. Функциональные языки, как правило, непопулярны среди разработчиков. На самом деле ни один из 15 самых популярных языков на Github не является функциональным языком. Тем не менее, другая платформа dApp Tezos использует функциональный язык Liquidity для создания смарт-контрактов. Если безопасность станет серьезной проблемой для децентрализованных приложений на основе Ethereum, тогда функциональные языки могут стать более популярными в будущем.

Инструменты разработчика для разработки dApp

Существует множество инструментов разработчика Ethereum для создания смарт-контрактов.

Parity – это клиент Ethereum, написанный на новом низкоуровневом языке Rust. От этого инструмента зависит много проектов. Именно поэтому уязвимость кошелька Parity привела к тому, что хакерам удалось украсть 514 тыс. ETH.

Truffle предоставляет инструменты для быстрого создания, компиляции, развертывания и тестирования dApps.

EthPM – это менеджер по работе над пакетами для библиотек Ethereum.

Oyente – инструмент статического анализа смарт-контрактов.

Remix – редактор и компилятор встроенного браузера Solidity.

В дополнение к инструментам разработчика существуют лучшие практики для безопасности смарт-контрактов и сервисы, такие как Zeppelin. С их помощью проводят аудит смарт-контрактов, развернутых в тестовой сети Ethereum. Zeppelin даже предлагает игру Ethernaut, чтобы проверить безопасность смарт-контракта.

Заблуждение о развитии dApp на Ethereum

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

В случае Storj смарт-контракты, которые составляют всего 9% общей кодовой базы, существуют только для обеспечения логики транзакций. Нет кода для хранения и шифрования общих файлов, трансляции узла или правил использования диска. Функциональная кодовая база, которая обрабатывает вышеуказанные компоненты, находится в отдельном репозитории, написанном в NodeJS. Аналогично в случае Golem смарт-контракты составляют всего 3% от кодовой базы.

Платформы dApp следующего поколения

Разработка dApp на Ethereum требует изучения пользовательского языка программирования. Существуют платформы dApp следующего поколения, которые позволяют создавать приложения с использованием традиционных языков, таких как Python и JavaScript, в качестве основного отличительного признака.

Tendermint/Cosmos

Tendermint состоит из двух главных технических компонентов: механизма консенсуса и общего интерфейса приложений. Механизм консенсуса под названием Tendermint Core, гарантирует, что одни и те же транзакции записываются на каждом компьютере в той же последовательности, чтобы достичь византийской отказоустойчивости. Интерфейс приложения Application Blockchain (ABCI) построен на основе Tendermint Core и позволяет обрабатывать транзакции на любом языке программирования.

Cosmos – это платформа, основанная на Tendermint, которая позволяет создавать интероперабельные dApps на любом языке программирования. Если приложение требует суверенитета и гибкости, можно разработать собственный блокчейн, не связываясь со сложными сетевыми и консенсусными частями программного обеспечения. С другой стороны, если приложение имеет меньший масштаб и не требует собственного блокчейна, то его можно создать на Ethermint, что позволяет делать все, что делает Ethereum, но с более высокой производительностью.

Blockstack

Blockstack – это новая платформа для создания dApps, где пользователи владеют своими личными данными. dApps в Blockstack являются программами, не связанными с цепочкой, которые взаимодействуют с базовым блоком Blockstack Core с использованием JSON REST API. Эти dApps могут записываться на любом языке.

Neo

Блокчейн Neo предлагает поддержку Python, Java и C#, а также поддерживает программы, написанные на платформе JavaScript, Golang и C/C++. Neo компилирует эти языки в инструкции для виртуальной машины Neo. Благодаря многоязыковой поддержке он обслуживает более 90% разработчиков без необходимости изучения нового языка.

Маловероятно, что выбор языка программирования станет решающим фактором для того, чтобы построить dApp на Ethereum, Cosmos, Blockstack, Neo, или других платформах.

Сетевые эффекты, как правило, гораздо более важны, чем выбор языка программирования. Большинство разработчиков будут создавать приложения на платформе с большим количеством пользователей. История также показала, что разработчики готовы изучать фирменные языки (Objective-C / Swift, CUDA), если есть спрос на приложения на такой платформе (Apple Store, графические процессоры NVIDIA). Учитывая сегодняшние тенденции, Ethereum может стать одной цепью, которая будет управлять ими для развития децентрализованного приложения.