Весной 2019 Waves Platform анонсировала механизм для связи блокчейна с внешним миром. Со списком доступных оракулов можно ознакомиться на специальном сайте https://oracles.wavesexplorer.com.
Общие смысл оракула — это периодическая связь с внешним ресурса для получения данных и его сохранением в блокчейне. И эти данные всегда можно использовать из блокчейна, как просто через REST API, но и через другие dApps.
Что нужно для создание своего оракула в Waves?
- Отдельный аккаунт — в сети Waves все dAppы представляют собой отдельный аккаунт. Нужно создать новый аккаунт и пополнить его баланс, так как для записи данных в блокчейн нужно платить за Data Transcations.
- Источник данных — можно найти/создать источник данных. Именно эти данные и вы планируете хранить в блокчейне.
- Сервер — так как данные нужно обновлять с некой периодичностью, нужен ресурс с поддержкой запуска скрипта по расписанию.
Создание аккаунта для оракула
Самый просто способ — это скачать расширение для браузера, авторизация для регистрации оракула доступа через это расширение. Расширение для вашего браузера можно найти по ссылке https://wavesplatform.com/technology/keeper.
После установки расширения нужно создать аккаунт. Процесс создания очень простой:
- Согласиться с соглашением
- Придумать пароль для Waves Keeper
- Выбрать адрес
- Запомнить seed фразу
И на это все — аккаунт для оракула готов!
ВАЖНО!!! Создание оракула выполняется в main-net, не забывайте переключать сеть, если не хотите тратить реальные $WAVES!!!
Транзакция по переводу $WAVES — тут, все действия делаются в mainnet.
Источник данных
В качестве источник данных я выбрал свой ресурс https://market-data.icu — в нем есть возможность получать данные о курсах валют от ЦБ РФ. Для это есть специальная точка получения последних актуальных курсов:
https://market-data.icu/api/currency.php?code=840По данной ссылке будет доступен последний актуальный курс американского доллара от ЦБ РФ. Ответ в формате JSON:
{
"result":"ok",
"message":"All right!",
"currency":"USD",
"date":"2019-09-11",
"value":"65.4393"
}
Курсы обновляются в 20:00 ежедневно и после этого данные можно загрузить в блокчейн.
Запись данных в блокчейн
Для записи самое просто это использовать скрипты на языке Python. Для взаимодействия с блокчейном Waves можно использовать дополнительную библиотеку PyWaves.
Код скрипта ниже:
import pywaves as pw
import urllib.request, json
from datetime import datetime
// 1
pw.setNode(node = 'https://nodes.wavesnodes.com', chain = 'mainnet')
myAddress = pw.Address(privateKey='PRIVATE_KEY')
// 2
dd = datetime.utcnow()
d = dd.strftime("%Y-%m-%d %H:%M:%S")
// 3
with urllib.request.urlopen("https://market-data.icu/api/currency.php?code=840") as url:
data = json.loads(url.read().decode())
usd = data['value']
usdDate = data['date']
// 4
with urllib.request.urlopen("https://market-data.icu/api/currency.php?code=978") as url:
data = json.loads(url.read().decode())
eur = data['value']
eurDate = data['date']
// 5
data = [{
'type':'string',
'key': 'USD',
'value': usd
},{
'type':'string',
'key': 'USD_Date',
'value': usdDate
},{
'type':'string',
'key': 'EUR',
'value': eur
},{
'type':'string',
'key': 'EUR_Date',
'value': eurDate
},{
'type':'string',
'key': 'updateOn',
'value': d
}
]
// 6
myAddress.dataTransaction(data)
Краткое описание кода:
В самом начале нужно подключить все необходимые библиотеки.
Часть 1 — С помощью PyWaves подключаем с mainnet и используем приватный ключ созданного ранее аккаунта в блокчейне.
Часть 2 — В данных будет хранить дату обновления, здесь идет подготовка данных. Дата и время будет в UTC.
Часть 3 — Получаем от сервиса Market Data ICU данные по курсам USD.
Часть 4 — Получаем от сервиса Market Data ICU данные по курсам EUR.
Часть 5 — Формируем JSON для Data Transaction.
Часть 6 — Отправляем данные в блокчейн.
Дальше настраиваем расписание для этого скрипта на ежедневной основе и можно создавать карточку оракула на сайте https://oracles.wavesexplorer.com
Создание оракула
После перехода на https://oracles.wavesexplorer.com — делаем Log In и затем Create an oracle.
Далее заполняем все необходимы поля — чем подробнее вы опишите все, тем проще будет пользователям использовать ваш оракул.
Oracle name — указываем имя
Status — статус
Category — категория
About — краткое описание
Specification — описание данных, который можно получить. Скрипт будет добавлять пять параметров и все их нужно описать.
После заполнения всех параметров, вы добавляет эти данные и уже все пользователи могут использовать ваш оракул.
Полезные ссылки
https://oracles.wavesexplorer.com
https://docs.wavesplatform.com/en/waves-oracles/about-waves-oracles.html
Оракул в Waves Explorer