И его испытания и невзгоды

Фон

Биткойн привлек наше внимание, предоставляя анонимные, децентрализованные и независимо проверяемые транзакции с использованием валюты, которую нельзя подделать или уничтожить.

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

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

Введение в проект

Майк Ихбе бросил вызов нашей команде на Must Win:

Как мы можем всего за пару недель создать полезное приложение на базе Ethereum?

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

Идея проста; умный контракт, который принимает небольшую оплату эфира (или его можно расширить до других соображений ценности; от биткойна до других валют или даже более творческих обменов), и когда платеж подтверждается, контракт автоматически высвобождает средства продавцу, а доступ к контенту - покупателю. Мы назвали это TinyPay.

Миниатюра TinyPay

Базовый рабочий процесс для клиентов TinyPay выглядит так:

  1. Зарегистрируйтесь в нашем веб-приложении с доменным именем продавца.
  2. Попросите продавца зарегистрировать DNS-запись с помощью предоставленного нами токена.
  3. Отправьте событие из контракта, как только домен будет настроен на запуск нашего оракула для выполнения проверки DNS для токена.
  4. Оракул периодически проверяет DNS-запись, и после проверки домена оракул отправляет дополнительную транзакцию в контракт, подтверждая, что домен является легитимным.
  5. Как только продавец распознается, он размещает наш код javascript на своем сайте и настраивает его так, чтобы в нужное время отображалась наша кнопка оплаты.
  6. Потребители контента продавцов видят запрос на микроплатеж, и, если они решают купить доступ к контенту, они нажимают кнопку оплаты.
  7. Появляется безопасное окно оплаты (в настоящее время используется плагин браузера MetaMask), предлагающее пользователю подтвердить небольшую микротранзакцию эфира на контракт из настроенного кошелька Ethereum.
  8. Как только платеж одобрен, продавец предоставляет доступ к контенту покупателю. Деньги переводятся быстро и безвозвратно за секунды.
  9. Очень небольшая комиссия за транзакцию отправляется держателю контракта, и платеж освобождается от контракта продавцу от имени покупателя.

Архитектура

Контракты

Смарт-контракты - это ядро ​​DApps Ethereum. Они живут в блокчейне как байт-код в двоичном формате виртуальной машины Ethereum. Байт-код компилируется с языка более высокого уровня. Самый популярный, и тот, который мы использовали, - Solidity; язык, который больше всего похож на Javascript.

Другие языки высокого уровня, которые вы можете использовать, - это Serpent (похожий на Python) и LLL (Lisp Like Language, но ближе к ассемблеру). Serpent компилируется до LLL, и прямое использование LLL не рекомендуется. На самом деле Solidity быстро становится фактическим стандартом для написания контрактов Ethereum.

Oracle

В нашем приложении TinyPay.co мы хотим подтвердить право собственности на домен продавца, но для этого требуются некоторые DNS-запросы, которые невозможны из смарт-контракта. Введите Oracle, приложение, предназначенное для передачи внешних данных в контракт. Мы более подробно рассмотрим Оракулы и наши, в частности, в этом последующем посте.

Клиент веб-приложения (для сторонних сайтов)

Наш клиент веб-приложения определяется кодом javascript, который продавцы контента размещают на своем сайте. Этот клиентский код обрабатывает отображение кнопки Купить сейчас и взаимодействует с кошельком Ethereum в локальном браузере. В нашем случае мы использовали расширение браузера, созданное фондом Ethereum под названием MetaMask, чтобы внедрить код Web3JS, который взаимодействует с сетью Ethereum.

Когда покупатель нажимает кнопку «Купить сейчас», клиент веб-приложения запускает процесс транзакции.

Зарегистрироваться в веб-приложении

Другой фрагмент кода javascript на основе браузера находится на нашей странице регистрации, где продавцы соглашаются с условиями использования контракта TinyPay и отправляют свою транзакцию, подтверждающую право собственности, которая подтверждает, что они владеют доменом, который они будут использовать в Интернете. клиентский код приложения включен.

Узел Ethereum

Первый ага! момент для меня в разработке против Ethereum был, когда я понял, что запуск узла блокчейна, по сути, запускает реплику базы данных. Он синхронизируется с каждой другой репликой базы данных в одноранговой сети (в данном случае с тысячами узлов). Некоторые полезные и интересные особенности «базы данных» Ethereum включают неизменяемость / добавление только обновлений, генерацию событий и форму конечной согласованности, основанную на консенсусе между одноранговыми узлами.

Консенсус и транзакции в целом являются побочными продуктами процесса майнинга, распространяющего блокчейн Ethereum. В Биткойне, например, у майнеров стимул тратить ресурсы на майнинг заключается в том, что они могут зарабатывать биткойны за каждый добытый блок. Ethereum похож, но есть дополнительные стимулы для майнеров; каждая транзакция включает в себя комиссию (обычно очень небольшую), которая поступает майнерам, которые обрабатывают транзакции.

При создании распределенных приложений все ваше промежуточное ПО и интерфейсный код можно писать, как обычно. Для подключения к серверной части базы данных существуют языковые привязки для большинства популярных в наши дни языков. (Go, .NET, node.js, Java, Python, Ruby и т. Д.) Следует иметь в виду, что Ethereum находится в активной разработке, а клиентские библиотеки в различных стадиях завершения.

Развертывание

Для развертывания наших контрактов мы использовали фреймворк под названием Truffle. Он обеспечивает компиляцию контрактов, а затем выполняет транзакции, необходимые для установки и распространения байт-кода в цепочке блоков. После успешной установки Truffle обновляет скомпилированные библиотеки javascript адресами наших контрактов в цепочке блоков, и мы можем использовать их для распространения наших веб-приложений, как обычно.

Must Win с радостью поможет разработать ваш следующий DApp. Если вам нужна помощь в понимании или использовании технологии цепочки блоков, напишите нам по адресу [email protected] и укажите ссылку на этот пост.

Джон Велдон пишет внутренний код для различных проектов и имеет опыт работы с широким спектром технологий и языков программирования.