Оракул сети Razor

Moonbeam in Russian
4 min readApr 21, 2021

--

Вступление

Теперь разработчики могут получать цены из оракула Razor Network, используя контракт моста, развернутый в Moonbase Alpha TestNet. Этот мост действует как промежуточное программное обеспечение, и генерируемые им события извлекаются инфраструктурой оракула Razor Network, отправляя цены в контракт моста.

Чтобы получить доступ к этим ценовым фидам, нам нужно взаимодействовать с адресом контракта моста, который можно найти в следующей таблице:

Работа

К каждому каналу данных прикреплен идентификатор задания. Например:

Вы можете проверить идентификаторы задачи для каждого потока данных по следующей ссылке. Прайс-каналы обновляются каждые 5 минут. Дополнительную информацию можно найти на [веб-сайте документации Razor] [https://docs.razor.network/].

Получить данные из контракта моста

Контракты могут запрашивать данные в цепочке, такие как цены на токены, из оракула сети Razor , реализуя интерфейс контракта Bridge, который предоставляет функции getResult иgetJob.

pragma solidity 0.6.11;

interface Razor {

function getResult(uint256 id) external view returns (uint256);

function getJob(uint256 id) external view returns(string memory url, string memory selector, string memory name, bool repeat, uint256 result);
}

Первая функция, getResult, берет идентификатор задания, связанный с потоком данных, и получает цену. Например, если мы передадим 1, мы получим цену потока данных, связанную с идентификатором задачи.

Вторая функция, getJob, принимает идентификатор задания, связанный с фидом данных, и извлекает общую информацию о фиде данных, такую ​​как имя фида данных, цена и URL-адрес, используемый для получения цен.

Пример контракта

Мы развернули контракт моста в Moonbase Alpha TestNet (по адресу 0xC6F33c0F15FE5e3A51A019524ac43574cFF29EFB), чтобы Вы могли быстро проверить информацию, поступающую от оракула сети Razor .

Единственное требование — это интерфейс Bridge, который определяет структуру getResult и делает функции доступными контракту для запросов.

Мы можем использовать следующий Demo скрипт. Он предоставляет различные функции:

  • fetchPrice: функция просмотра, которая запрашивает один идентификатор задания. Например, чтобы получить цену ETH в USD США, нам нужно будет отправить идентификатор задачи 1.
  • fetchMultiPrices: функция просмотра, которая запрашивает несколько идентификаторов задач. Например, чтобы получить цену ETH и BTC в USD, нам нужно будет отправить идентификаторы задач [1,2].
  • savePrice: общедоступная функция, которая запрашивает один идентификатор задачи. Это отправляет транзакцию и изменяет ценовую переменную, хранящуюся в контракте.
  • saveMultiPrices: общедоступная функция, которая запрашивает несколько идентификаторов задач. Например, чтобы получить цену ETH и BTC в USD, нам нужно будет отправить идентификаторы задач[1,2]. Это отправляет транзакцию и изменяет массив pricesArr, хранящийся в контракте, который будет содержать цену каждой пары в том же порядке, как указано во входных данных.
pragma solidity 0.6.11;

interface Razor {
function getResult(uint256 id) external view returns (uint256);
function getJob(uint256 id) external view returns(string memory url, string memory selector, string memory name, bool repeat, uint256 result);
}

contract Demo {
// Interface
Razor internal razor;

// Variables
uint256 public price;
uint256[] public pricesArr;

constructor(address _bridgeAddress) public {
razor = Razor(_bridgeAddress); // Bridge Contract Address
// Moonbase Alpha 0xC6F33c0F15FE5e3A51A019524ac43574cFF29EFB
}

function fetchPrice(uint256 _jobID) public view returns (uint256){
return razor.getResult(_jobID);
}

function fetchMultiPrices(uint256[] memory jobs) external view returns(uint256[] memory){
uint256[] memory prices = new uint256[](jobs.length);
for(uint256 i=0;i<jobs.length;i++){
prices[i] = razor.getResult(jobs[i]);
}
return prices;
}

function savePrice(uint _jobID) public {
price = razor.getResult(_jobID);
}

function saveMultiPrices(uint[] calldata _jobIDs) public {
delete pricesArr;

for (uint256 i = 0; i < _jobIDs.length; i++) {
pricesArr.push(razor.getResult(_jobIDs[i]));
}

}
}

Попробуйте на Moonbase Alpha

Самый простой способ попробовать их реализацию Oracle — это указать интерфейс на контракт Bridge, развернутый по адресу 0xC6F33c0F15FE5e3A51A019524ac43574cFF29EFB:

pragma solidity 0.6.11;

interface Razor {
function getResult(uint256 id) external view returns (uint256);
function getJob(uint256 id) external view returns(string memory url, string memory selector, string memory name, bool repeat, uint256 result);
}

С его помощью Вам будут доступны две функции просмотра, очень похожие на наши предыдущие примеры:

  • getPrice: предоставляет поток цен для одного идентификатора задачи, который вводится в функцию. Например, чтобы получить цену ETH вUSD, нам нужно будет отправить идентификатор задачи 1.
  • getMultiPrices: предоставляет поток цен для нескольких идентификаторов задач, заданных как входной массив функции. Например, чтобы получить цену ETH and BTC in USD США, нам нужно будет отправить идентификаторы задач[1,2]

Давайте воспользуемся Remix, чтобы получить цену BTC в USD.

После создания файла и компиляции контракта перейдите на вкладку «Deploy and Run Transactions», введите адрес контракта (0xC6F33c0F15FE5e3A51A019524ac43574cFF29EFB) и нажмите «At Address».

Убедитесь, что Вы установили «Environment» на «Injected Web3», чтобы Вы подключились к Moonbase Alpha (через провайдера Web3 кошелька).

Это создаст экземпляр демонстрационного контракта, с которым Вы можете взаимодействовать. Используйте функции getPrice() иgetMultiPrices() для запроса данных соответствующей пары.

Если у Вас есть фидбек относительно реализации Razor Network Oracle в Vашем проекте или по любой другой теме, связанной с Moonbeam, не стесняйтесь обращаться к нам через наш официальный сервер в Discord.

Подготовлено при участии Anpol, Lyn.

--

--

Moonbeam in Russian
Moonbeam in Russian

Written by Moonbeam in Russian

Moonbeam — это совместимая с Ethereum платформа смарт-контрактов на Polkadot

No responses yet