Как создать Децентрализованный Оракул на Ethereum — Пошаговое руководство

Alexey
iExec Russian
Published in
9 min readJul 30, 2019

Независимо от того, являетесь ли вы разработчиком, технологическим энтузиастом или предприятием, iExec предлагает одно из самых полных и простых в использовании решений децентрализованных оракулов. Это руководство покажет вам, как начать передавать данные API Web 2.0 в ваш смарт-контракт Ethereum в кратчайшие сроки. Для общего обзора того, что такое децентрализованный оракул и зачем он нужен, ознакомьтесь с нашей предыдущей статьей:

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

В следующем руководстве мы увидим, как получить цену любой криптопары (например, ETH/USD) из API в интернете и вернуть ее в смарт-контракт на блокчейне Ethereum. Такой механизм называется Price Feed оракул и является одним из многих вариантов использования, поддерживаемых децентрализованным облаком iExec.

Все команды терминала, описанные в данном руководстве, были запущены на компьютере с операционной системой MacOS. Если вы используете Linux, вы можете использовать почти все те же команды. Однако пользователям Windows может потребоваться адаптировать специфичные для ОС команды и установить приложения, такие как Git Bash — к сожалению мы не можем обеспечить полную техническую поддержку этой ОС. Если вы столкнетесь с какими-либо проблемами во время обучения, наши разработчики будут рады помочь или получить обратную связь на Slack, Gitter, или Telegram.

0. Предварительные требования

Установить специфичные для ОС библиотеки компиляции

MacOS

Убедитесь, что вы установили Xcode Command Line Tool.

Linux

sudo apt-get update
sudo apt-get install python
sudo apt-get install build-essential

Windows 10

Если вы не являетесь опытным пользователем Windows или поклонником Windows, и установка Visual Studio для компиляции С++ кажется вам ужасающей, то вы можете использовать Windows Subsystem для Linux (для интеграции оболочки linux в Windows) или вы можете просто установить Virtualbox и запустить виртуальную машину Linux.

Установка Docker

MacOS

Зайдите на сайт Docker, зарегистрируйтесь и установите Docker Desktop. После успешной установки авторизуйтесь в Docker Desktop. Убедитесь, что Docker Desktop работает, выполнив команду:

docker --version

Linux

Перейдите на страницу документации Docker, объясняющую, как установить Docker в Ubuntu (поддерживаются все разновидности Linux). Убедитесь, что Docker установлен, выполнив команду:

docker --version

Создайте репозиторий на DockerHub

Зайдите в dockerhub, создайте репозиторий и назовите его price-feed.

Установка NodeJS

Linux и MacOS

Самый простой способ установить Node на Linux и MacOS — использовать программу установки Node Version Manager (NVM). Для установки Node.JS на вашу систему выполните следующую команду:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash  #works for MacOS & Linux
command -v nvm #should output 'nvm' if installation worked
nvm install node 10.12 # this will install latest stable node version
nvm use node #make nvm installed node the system's default node

Убедитесь, что Node.JS включен, выполнив команду:

node --version

Windows

Загрузите установщик NodeJS для Windows с официального сайта.

Установка iExec SDK

iExec SDK является модулем Node. Чтобы установить его, просто выполните команду:

npm -g install iexec

Убедитесь, что iExec SDK правильно установлен, выполнив команду:

iexec --version

Это все, что нужно для предварительных условий, эта установка требуется единоразово. Следующая часть — это настройка вашего проекта DOracle (например, создание и подготовка вашего кошелька Ethereum).

1. Инициализация проекта

Теперь давайте инициализируем наш новый проект оракула price-feed

mkdir price-feed  #new folder
cd price-feed #enter the folder
iexec init #init iexec project. If you already have an iExec wallet, run iexec init --skip-wallet to keep using your current wallet

Последняя команда создаст кошелек Ethereum.

Важно: задайте пароль и сохраните его (он вам понадобится позже).

Отлично! Теперь у вас есть кошелек (он сохранен как файл .json в папке пользователя на компьютере) давайте получим немного ETH для взаимодействия с блокчейном Ethereum и немного RLC для взаимодействия с платформой iExec.

Памятка: Все команды в этом руководстве, которые взаимодействуют с блокчейном, будут использовать блокчейн тестовой сети Kovan. Он работает идентично основной сети Ethereum, но не требует реальных денег для начала работы. Идеально подходит для тестирования!

Давайте запросим у iExec бесплатные Kovan RLC:

iexec wallet getRLC --chain kovan

Теперь, чтобы получить бесплатный Kovan ETH, вам нужно будет опубликовать свой адрес кошелька Ethereum в групповом чате Gitter. Для этого давайте узнаем адрес нашего кошелька выполнив команду:

iexec wallet show --chain kovan

Теперь перейдите на эту страницу Kovan Faucet Gitter, авторизуйтесь, скопируйте и вставьте адрес вашего кошелька в окно чата.

Вставьте адрес своего кошелька в окно чата, чтобы получить 3.0 Kovan ETH

Прежде чем идти дальше, нам нужно убедиться, что наш кошелек получил ETH и RLC, которые мы просили. Выполните эту команду, чтобы проверить баланс вашего кошелька :

iexec wallet show --chain kovan
Ваш баланс должен показывать 3.0 ETH и 200 nRLC. Если нет, подождите минуту.

Теперь давайте пополним счет в iExec и перейдем к следующему разделу:

iexec account deposit 200 --chain kovan

2. Развертывание офф-чейн приложения

Чтобы запустить приложение Price Feed в децентрализованном облаке iExec, нам необходимо выполнить следующие шаги:

  1. Докерезировать приложение “price-feed”
  2. Поместите его в публичный реестр DockerHub
  3. Развернуть его на платформе iExec

Убедитесь, что ваш терминал находится в папке price-feed, и давайте создадим новую папку с именем app, содержащую офф-чейн логику:

mkdir app 
cd app # enter the folder

Затем загрузите скрипт price-feed JS, который реализует логику извлечения цен (мы рекомендуем вам взглянуть на код JS):

curl -o ./price-feed.js https://raw.githubusercontent.com/iExecBlockchainComputing/iexec-apps/master/PriceFeed/src/oracle.js

Теперь давайте докеризируем наше приложение JS. Первым шагом будет открытие IDE (среды разработчика), создание файла под названием Dockerfile в папке приложения и вставка в него содержимого ниже:

На этом этапе мы готовы создать образ Docker и опубликовать его в dockerhub. В терминале выполните следующие команды:

docker build .  #write down your image ID (it appears after the text "successfully built 19acce70289d" <-- that is the image ID)

Вы создали образ Docker. Теперь мы хотим пометить этот образ нашим именем пользователя dockerhub:

docker tag <IMAGE_ID> <YOUR_DOCKERHUB_NAME>/price-feed:1.0.0  #ex: docker tag 19acce70289d iexechub/price-feed

Наконец, мы можем переместить ваш локальный образ в публичный репозиторий Docker Hub:

docker push <YOUR_DOCKERHUB_NAME>/price-feed  #write down your image digest (it appears after sha256:959eb75b13efb41a8f37495784150574d66175adebd0c6c18216b482c574d109 <-- this is your image digest)

Теперь мы находимся всего в нескольких шагах от того, что бы ваше приложение было готово к работе с iExec:

cd ..  #move to upper folder
iexec app init #tell the SDK that you want to create an app

Затем откройте только что созданный файл «iexec.json» и отредактируйте эти три поля:

  • owner: “Your_key_wallet”
  • name: We name it “PriceFeed”.
  • multiaddr: replace by dockerhub repository name. “registry.hub.docker.com/<YOUR_DOCKERHUB_NAME>/price-feed:1.0.0”.
  • checksum: given by the command docker push. (add 0x before the sha256:)

Теперь давайте развернем ваше приложение price-feed на iExec, в терминале:

iexec app deploy --chain kovan  #that is a blockchain transaction
Поздравляю! Теперь ваше приложение Price-Feed развернуто на платформе iExec.

Наконец, давайте опубликуем ордера на продажу для вашего приложения, чтобы пользователи платформы iExec могли использовать ваше приложение по цене, указанной вами в заказе:

iexec order init --app
iexec order sign --app
iexec order publish --app # publish your apporder on the marketplace and get an orderHash
iexec order show --app [orderHash]

3. Развертывание он-чейн смарт-контракта DOracle

Клонируем репозиторий в терминале, заходим в папку “smart-contract” и устанавливаем JS-зависимости:

git clone https://github.com/iExecBlockchainComputing/price-feed-doracle.git smart-contract
cd smart-contract
npm install

Для того чтобы развернуть смарт-контракт на блокчейне, нужно сообщить трюфелю (Truffle) свой закрытый ключ кошелька. Вот как вы можете показать закрытый ключ вашего кошелька:

cd ..  # move to upper folder
iexec wallet show --show-private-key # copy your private key for next step

Теперь вы готовы к развертыванию. Благодаря трюфелю, это очень просто:

cd smart-contract # move back to the smart-contract folder
MNEMONIC=<YOUR_PRIVATE_KEY> ./node_modules/.bin/truffle migrate --network kovan # Deploy your smart contract to the Blockchain
Развернуто 2 смарт-контракта

Отлично, ваш смарт-контракт DOracle теперь развернут на блокчейне тестовой сети Kovan. Как насчет подачи его с ценой ETH/USD?

4. Обновление вашего DOracle (в качестве заявителя)

Теперь давайте купим запуск “pricee-feed” на iExec, запустив эти команды в терминале:

cd ..  # move back to parent folder price-feed

Давайте покажем уникальные идентификаторы (хэш заказа) заказов, которые мы хотим купить. Один из них — это ордер рабочего пула, а другой — ордер нашего приложения price feed:

iexec orderbook workerpool --category 2 # copy the workerpool order hash
iexec orderbook app <address> # copy the app order hash

Теперь мы хотим выполнить заказы (рабочего пула и приложения), это так же просто, как запустить:

iexec order fill --app <APP_ORDER_HASH> --workerpool <WORKERPOOL_ORDER_HASH> --params "RLC BTC 9 2019-07-09T13:27:24.909Z" --chain kovan  # start the DOracle computation!

Вот и все! Мы отправили на платформу iExec запрос на вычисления. Чтобы убедиться, что мы все говорим на одном языке, у вас есть сделка, и в этой сделке есть одна задача (это способ включить функцию портфеля задач “Bag of Task”). Отследим ход вычислений с помощью этих команд:

iexec deal show <DEAL_ID> --tasks 0 --chain kovan
iexec task show <TASK_ID> --watch --chain kovan

Вы также можете перейти в iExec Explorer (https://explorer.iex.ec), чтобы отслеживать ваши задачи. Через несколько минут состояние должно измениться на «завершено».

Так что же происходило до сих пор? Мы попросили рабочий пул запустить наше приложение price-feed, рабочие получили цену ETH/USD, результат подтвердился при помощи протокола PoCo, и как только был достигнут консенсус, он сохранился обратно в смарт-контракты iExec. Последний шаг заключался в вызове функции под названием “_iexecDoracleGetVerifiedResult” в вашем смарт-контракте DOracle, она проверила результат, сохраненный в смарт-контракте iExec , выполнила некоторые логики фильтрации (например: новая цена связана с датой UTC, более поздняя, чем предыдущая, которую я извлек) и если все ваши пользовательские условия были выполнены, то он обновился с новой ценой ETH! В этом есть смысл?

Кроме того, мы рекомендуем вам попробовать наш фронтенд, чтобы узнать, как может выглядеть пользовательский интерфейс: https://price-feed-doracle.iex.ec

Вот и все! Мы надеемся, что вы поняли, как легко создать децентрализованный оракул на iExec.

Если вам понравилось, то вы определенно захотите узнать больше о нашей программе вознаграждения за обучение разработчиков, которая делает создание децентрализованных оракулов “DOracle” на iExec увлекательным и финансово выгодным:

Имейте в виду, что команда разработчиков доступна на Slack, Gitter, и Telegram.

Присоединяйтесь к нам:

iExec 🇷🇺

Веб-СайтTelegramVKontakteInstagramTwitter • Facebook • YoutubeMediumGolosТехническая документация

iExec 🇺🇸

WebsiteMediumSlackTelegramRedditTwitterFacebookLinkedInYoutubeGithubInstagramTechnical Documentation

Хотите подписаться на проект iExec? Интересно что будет дальше?
Перед выпуском iExec V4 (версия высокопроизводительных вычислений с поддержкой GPU) в этом году, мы будем давать больше новостей о последних событиях каждого из последних анонсов. Чтобы первыми узнавать и получать эксклюзивные обновления, подпишитесь на новостную рассылку iExec и следите за нами в социальных сетях.

Читайте подробнее о релизе iExec V3:

Читайте подробнее о 7 основных анонсах релиза iExec V3:

Дорожная карта iExec идет с опережением графика. Релиз iExec V4, версия высокопроизводительных вычислений с поддержкой GPU, выйдет намного раньше, чем планировалось и будет выпущена в декабре этого года!

--

--