9 * 第三个参数暗示Oracle处事回调支持uint256/bytes两种范例的参数
需要说明的处所:
17 * @dev 将查询获得的功效(uint256范例)发送给客户端
· 可以或许回挪用户合约的要领
14 require(msg.value >= MIN_FEE, "Insufficient handling fee!");
4 * @param callbackAddr 回调的合约地点
19 return true;
17 // 记录日志
1 /**
23}
本文将通过上、中、下三篇文章教育各人一步步开拓实现一其中心化的Oracle处事,并通过一个抽奖合约演示如何利用我们的Oracle处事。文章内容布置如下:
15 require(bytes(callbackFUN).length > 0, "Invalid callbackFUN!");
· 让用户传callbackAddr回调地点参数,而不是直接通过msg.sender获取挪用者地点,是思量到挪用Oracle合约(付费方)和吸收数据方有大概不是一个地点。
13 require(success,"call back failed!");
· 对付用户请求的数据范例,,本文今朝实现了uint256和bytes两种范例的回调。
· 用户合约会多次请求Oracle处事,获取数据, queryId请求ID参数可以让用户合约对请求做标识。
14}
22 require(success);
3 * @param queryId 查询请求id
7 * @param respData 查询功效
2event QueryInfo(bytes32 queryId, address requester, uint fee, address callbackAddr, string callbackFUN, bytes queryData);
Oracle(预言机)是链接链上与链下的桥梁,可以或许将链下数据推送给链上。正是由于Oracle的存在,使得区块链从关闭走向开放,布满无限大概。
8 * @return bool true请求乐成,false请求失败
接下来,我将实现一个通用的Oracle合约。
5 * @param callbackFUN 回调合约的要领及参数,如getResponse(bytes32,uint64,uint256/bytes),
6 * 个中getResponse暗示回调要领名,可自界说;
20 require(address(this).balance > CALLBACK_GAS, "Insufficient balance!");
3 * @param queryId 请求id,回调时原值返回
Oracle处事分为中心化和去中心化,其焦点区别是对数据的获取和审核上。去中心化的Oracle处事会有一套机制可以或许保障推送给用户合约的数据是可信的。而无论是中心化照旧去中心化,用户合约挪用Oracle合约和Oracle处事将获取到的功效数据推送给用户合约的底层逻辑都是一样的。一、Oracle简介 8 * uint64范例参数暗示oracle处事状态码,1暗示乐成,0暗示失败;
15
18 emit QueryInfo(queryId, msg.sender, msg.value, callbackAddr, callbackFUN, queryData);
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。