Разбираем Ethereum.[dApps] Ethereum и WEB (ч.1)
ВСЕ ПРО ETHEREUM [Part1.sol]
Ethereum & Web
Когда научился создавать смартконтракты
Доброго времени суток, Golos!
Данным постом хочу открыть серию обобщенного переваренного материала по Ethereum. Итогом серии данных постов будет создание простенькой голосовалки на одноименном блокчейне.
Изучаю Ethereum довольно недавно (март 2017), и понял, что чем больше вникнешь и исследуешь, то тем более вдохновишься и воодушевишься масштабом и возможностями этой платформы.
Сейчас в сети появилось огромное количество материалов по Ethereum и Solidity: видео, статьи, мануалы – гораздо больше, чем можно переварить в кратчайшие сроки. Сиди, да изучай.
Архитектура uber alles!
Сравним архитектуры:
Примерно так выглядит упрощённая архитектура клиент-серверного веб-приложения.
Веб-приложение размещено на хостинге таких сервисов как Amazon Web Services, Heroku или VPS. Все клиенты взаимодействуют с одним центральным приложением. Клиентами могут быть: браузер, API-клиент Вашего приложения и другие. Когда клиент делает запрос на сервер, сервер делает некие магические пассы, перешептывается с базами данных и/или кэшем, считывает/пишет/обновляет базу данных и обслуживает клиент.
Такая архитектура достаточна и хорошо работает для большинства случаев, однако для определенных приложений, которым необходима открытая (публичная) база данных, безопасный доступ к которой может получить любой, откуда угодно, да так чтобы Вам не пришлось доверять и надеяться на «хозяина» такого приложения (сервера залило/сгорели, или блэкаут жесткий – и все пока!).
Пример
Давайте пофантазируем: Вы - владелец начинающего, но динамично развивающегося магазина редких б/у запчастей для Maserati на eBay. В РФ распиливаете на запчасти – по всему миру продаете (в РФ сбыть такое сложновато). У вас топовый рейтинг, мириады положительных отзывов, которые вы заработали упорным трудом и невиданным уровнем сервиса для своих покупателей. Но в один прекрасный момент Ebay блокирует Ваш аккаунт по неустановленной причине. Навсегда.
Удар по бизнесу очень серьезный! Вам бы взять и перенести историю сделок, отзывы и рейтинг продавца на другой аккаунт или другую платформу в принципе, но это маловероятно.
Сервис eBay состоит именно в том, чтобы быть третьей стороной между покупателем и продавцом, этакий доверенный посредник. Ну и комиссии получать с каждой продажи по расписанию.
Что если была бы возможность убрать псевдодоверенную 3-ю сторону, сэкономить на уплате комиссии, и только Вы сами могли бы распоряжаться своим аккаунтом?
Вот тут-то из толпы как раз и выходят, расталкивая локтями все что было до, децентрализованные приложения (ДП) или Dapps (decentralized applications).
Вот так, упрощенно выглядит архитектура децентрализованного приложения.
Каждый клиент (браузер) связывается со своим собственным инстансом приложения. Нет центрального сервера, к которому коннектился бы клиент. Это значит, что каждый кто хочет провзаимодействовать с децентрализованным приложением должен обладать полной копией блокчейна на своем компьютере или смартфоне, то есть, прежде чем пользоваться приложением, необходимо скачать весь чейн и только после этого начинать. Звучит необычно, но взамен Вы получаете полный контроль над своими данными и ликвидируете риск доверия централизованному серверу, который очень легко может уйти в оффлайн навсегда.
На самом деле, для хранения всего блокчейна не нужно много дискового пространства или оперативной памяти - есть несколько способов и решений как сделать приложение децентрализованным, а взаимодействие с ним быстрым и доступным, но об этом в следующих постах, более технических.
---------------------------------------------------------------------------------------------------------------
Какие аспекты несет в себе платформа?
---------------------------------------------------------------------------------------------------------------
1. Аспект «База данных»: Одним из основных аспектов блокчейна Ethereum является то, что он выступает в качестве базы данных. Транзакции которые появляются в сети Ethereum упаковываются в блоки, и каждый блок связан с последующим. Эти связанные между собой серии блоков, которые содержат в себе ВСЕ транзакции и образуют общий блокчейн.
Если вернуться обратно к примеру с eBay (если бы eBay был размещен на блокчейне Ethereum), каждая транзакция совершенная между покупателем и продавцом – будь это покупка или продажа, возмещение средств или спор с продавцом, были бы записаны в блокчейн, полная история которого была бы доступна для просмотра любым интересантом.
Для достижения консенсуса в сети (все-ли ноды в сети обладают той же копией данных о состоянии сети, а также корректностью данных) Ethereum использует (пока еще) алгоритм называющийся Proof-of-work или доказательство работы.
http://ethereum.stackexchange.com/questions/14/what-proof-of-work-function-does-ethereum-use
2. Аспект «КОД»:
Пример с eBay: если блокчейн является просто хранилищем, то как записать в него логику «Что такое покупка?», «Что считать завершенной покупкой?», «Что такое возврат?», «Какие условия возврата?» и т.д.
Для введения такой логики в блокчейн Ethereum необходимо написать код приложения (смарт-контракт) на языке Solidity. Затем использовать компайлер, чтобы закомпилировать в Ethereum Byte Code и затем деплоить такой контракт в действующий публичный блокчейн.
Собственно, Solidity является наиболее популярным языком написания смарт-контрактов (хотя альтернатива есть)
То есть блокчейн хранит данные и код, и ко всему еще и служит виртуальной машиной для запуска написанного кода. Для создания децентрализованных веб-приложений на Ethereum на помощь придет библиотека для JavaScript – web3.js, которая позволит поженить веб с блокчейном.
Рекомендую включить данную библиотеку в девелопмент-кит наряду с фреймфорками: react.js, angular.js и начинать создавать смарт-контракты.
3. Аспект «Встроенный банк»:
Огромным и жирным таким плюсом ко всему прочему идут финансовые и монетизационные возможности платформы. Что если я Вам скажу, что любое созданное Вами децентрализованное приложение идет в комплекте со встроенным банком? Ко всему прочему, есть возможность создать столько счетов в этом банке, сколько Вам нужно, всего за доли секунды? Эти счета-кошельки служат хранилищем ценности и средством выполнения транзакций.
Деталей и глубин возможностей гораздо больше, чем описано в данном посте – для начала я хотел лишь сравнить архитектуру децентрализованного веб-приложения с централизованным, чтобы в принципе понимать - с чем предстоит работать.
В следующем посте настроим программную среду и тестовую сеть для развертывания простейшего децентрализованного приложения.
Полезные линки на почитать(разумеется все на английском):
https://ethereum.stackexchange.com/
https://solidity.readthedocs.io/en/develop/