Skip to content

Razor Network预言机

概览

开发者现在可以使用Razor Network预言机在Moonbase Alpha测试网上部署桥接合约,从而获取价格信息。桥接合约作为中间件发出事件信息,该信息被Razor Network预言机基础设施获取,并向桥接合约发送报价。

要想获取喂价,就需要与下表中的桥接合约地址进行交互:

网络 合约地址
Moonbase Alpha 0xa7f180fb18EF0d65049fE03d4308bA33a28b6513

此处提供的信息仅供参考,由第三方提供。 Moonbeam文档网站(https://docs.moonbeam.network/)上列出和描述的任何项目与Moonbeam立场无关。

Jobs

每个喂价数据都与一个Job ID相对应,例如:

Job ID 标的报价[美元]
1 ETH
2 BTC
3 Microsoft Stocks

通过Razor网络浏览器可以查看喂价数据对应的Job ID(喂价每5分钟更新一次)。更多详情,请访问Razor文档

从桥接合约获取数据

合约通过执行桥接合约接口可调用getResultgetJob函数以使用Razor Network预言机来获取代币价格等链上数据。

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使用对应Job ID的数据源来获取报价。例如,输入1就会收到Job ID为 1的相应报价。

第二个函数getJob使用对应Job ID的数据源来获取关于数据源的基本信息,如名称、价格、获取价格的URL等。

合约示例

Moonbase Alpha测试网上已经预先部署了桥接合约(地址为0xC6F33c0F15FE5e3A51A019524ac43574cFF29EFB),方便您快速查看Razor Network预言机的喂价信息。

您只需要桥接合约接口,该接口可调出getResult结构,让合约可以调用函数进行报价请求。

您可以使用以下Demo脚本,它包括了多个函数:

  • fetchPrice - 一个请求单一Job ID的_视图_函数。例如,输入任务ID1即可获取ETH/USD报价。
  • fetchMultiPrices - 一个请求多个Job ID的_视图_函数。例如,输入任务ID[1,2]即可同时获取ETH/USDBTC/ USD报价。
  • savePrice - 一个请求单一Job ID的_公有_函数。函数将发送交易并修改储存在合约中的price变量。
  • saveMultiPrices - 一个请求多个Job ID的_公有_函数。例如,输入任务ID[1,2]即可同时获取ETH/USDBTC/USD报价。函数将发送交易并修改储存在合约中的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上进行测试

测试预言机功能最简单的方式就是将接口指向部署在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 - 根据函数中对应输入的数据,提供单一Job ID喂价。例如,输入任务ID1就会收到ETH/USD的报价。
  • getMultiPrices - 根据函数中对应输入的阵列,提供多个Job ID喂价。例如,输入Job ID[1,2]就会收到ETH/USDBTC/USD的报价。

下面您可以尝试通过Remix获取BTC/ USD 的报价。

创建文件和编译合约后,点击Deploy and Run Transactions标签,输入合约地址(0xC6F33c0F15FE5e3A51A019524ac43574cFF29EFB)并点击At Address。请确保已将ENVIRONMENT设置为Injected Web3,只有在该设置下才能与Moonbase Alpha连接(通过Web3 提供者的钱包)。

Razor Remix deploy

通过这一方法,您将创建一个可以进行交互的demo合约实例。使用getPrice()getMultiPrices()函数即可请求相应报价对的数据。

Razor check price

本网站的所有信息由第三方提供,仅供参考之用。Moonbeam文档网站(https://docs.moonbeam.network/)上列出和描述的任何项目与Moonbeam立场无关。Moonbeam Foundation不保证网站信息的准确性、完整性或真实性。如使用或依赖本网站信息,需自行承担相关风险,Moonbeam Foundation不承担任何责任和义务。这些材料的所有陈述和/或意见由提供方个人或实体负责,与Moonbeam Foundation立场无关,概不构成任何投资建议。对于任何特定事项或情况,应寻求专业权威人士的建议。此处的信息可能会包含或链接至第三方提供的信息与/或第三方服务(包括任何第三方网站等)。这类链接网站不受Moonbeam Foundation控制。Moonbeam Foundation对此类链接网站的内容(包括此类链接网站上包含的任何信息或资料)概不负责也不认可。这些链接内容仅为方便访客而提供,Moonbeam Foundation对因您使用此信息或任何第三方网站或服务提供的信息而产生的所有责任概不负责。
Last update: January 25, 2024
| Created: March 26, 2021