11.1.3 BSN测试网中的预言机服务开发指南
1. 应用合约开发说明
用户可以参考 APISampleOracle.sol 合约实现自己的oracle业务合约。 合约解析如下:
- 用户合约需继承 FiscoOracleClient 合约
contract APISampleOracle is FiscoOracleClient
- 构造函数需要传入指定的 Truora 服务方地址
constructor(address oracleAddress) public {
oracleCoreAddress = oracleAddress;
}
- 设定自己要访问的 url。修改 url 变量赋值即可。
function request() public returns (bytes32 requestId){
// Set your URL
// url = "plain(https://www.random.org/integers/?num=100&min=1&max=100&col=1&base=10&format=plain&rnd=new)";
url = "json(https://api.exchangerate-api.com/v4/latest/CNY).rates.JPY";
bytes32 requestId = oracleQuery(oracleCoreAddress, url, timesAmount);
validIds[requestId] = true;
return requestId;
}
必须实现callback(bytes32 _requestId, int256 _result) 方法,用于TrustOracle预言机回调获取的结果。
get()方法获取本次请求结果, 可自行修改此函数, 获取结果后进行自己业务逻辑的计算。
2. 链下API接口开发说明
目前Truora提供了两种链下API(获取链下随机数、获取人民币对其他币种汇率)供用户调用:
//获取链下随机数API
plain(https://www.random.org/integers/?num=100&min=1&max=100&col=1&base=10&format=plain&rnd=new)
//获取人民币对日元汇率API
json(https://api.exchangerate-api.com/v4/latest/CNY).rates.JPY
如果用户需要自行开发链下API接口,需遵循以下规则:
- 链下API接口目前支持json 和 text/plain 两种访问格式。并且链下API的url必须支持HTTPS访问。
- json格式遵循jsonpath格式,子元素 用 "." 表示
- text/plain格式默认取第一行结果值
- 目前预言机返回类型值仅支持int256型数据,由于solidity不支持浮点数。 会将结果放大timesAmount倍, 合约里可以设置timesAmount参数, 默认值是10*18
3. 示例合约
GitHub: https://github.com/WeBankBlockchain/Truora-Service/tree/bsn/contracts/1.0/sol-0.4/oracle