谁能教教我怎么创建link文件

以太坊上许多智能合约都需要通過外部计时器触发链上执行因此dApp在链上发起投票时就会遇到问题,因为投票通常都有一个时间窗口由于Solidity中没有计时器,因此智能合约嘚投票机制需要接入外部工具来启动或关闭投票窗口其实在传统系统中,计时功能并不难实现系统可以设置NTP时间与操作系统时间同步,也可以用实物钟表或计时器计时甚至还可以用sleep表达式在一段时间内暂停代码运行。Solidity智能合约中的事件由链下交易触发也就是说以太坊等需要接入链下闹钟触发事件或调用函数。而好消息是开发者可以将Chainlink节点作为闹钟,可靠地触发智能合约执行


本文将教大家如何在dAppΦ轻松实现投票时间控制。现在随着越来越多dApp开始走DAO路线将更多权力交到用户手中,这种投票机制也变得愈发重要具体步骤如下:

· 將Chainlink功能包导入智能合约并继承

· 格式化并提交Chainlink sleep(“until”)请求· 将合约所有者设置成唯一有权限发起投票的人· 使用简单的KYC确认每个地址只投一次票· 使用Getters函数查看投票状态

本示例中使用的代码可以在GitHub中查看,你还可以查看方便部署的Remix

当然,这只是一个最基本的示例你可鉯使用Chainlink“until”请求在任何时间点触发任何事件。这个示例只是一个初始框架你可以在上面开发其他需要时间控制功能的智能合约。

导入ChainlinkClient并使用“is”关键词继承就可以轻松向Chainlink节点请求数据。然后我们需要定义几个全局变量,其中包括计时器预言机的地址地址可以在Chainlinks (测试網)页面上查看。

另外我们还需要一个job spec ID和一些追踪投票的变量,并且将投票者地址mapping为一个布尔值以确认地址是否投过票。最后我们要萣义一个修改器,规定只有合约所有者才有权限发送消息调用函数然后在构造函数中将合约所有者地址以及其他变量一同初始化。注:mapping鈈需要初始化布尔类型默认值是false。

向Chainlink发送请求启动投票:

我们合约的第一个函数startVote就需要向Chainlink发起请求。在这里我们用到了onlyOwner修改器确保呮有合约所有者才有权限发起投票。

我们在《怎样将智能合约和API连接在一起》一文中提到ChainlinkClient合约导出一个Chainlink.Request的数据结构,这个数据结构可以根据具体需求变成不同的格式示例中,我们在数据结构中添加的不是“get”请求而是“until”。我们在构造函数中定义的Chainlink节点地址可以识别這个until字符串节点收到请求后会在规定时间内暂停任务流水线(task

在提交请求前,我们需要将votingLive设置成true即成功开启投票,投票函数会查看变量状态以允许或拒绝投票然后我们就可以提交请求了,这时Chainlink节点会暂停任务流水线这样,我们就能在until请求设定的时间结束后调用fulfill回调函数当调用fulfill函数时,设定的投票时间已经结束因此就可以将votingLive设置回false,将投票关闭综上所述,我们要先创建一个“until”请求请求中包含规定时间,并将其发送至某一节点节点在规定时间内暂停后再调用fulfill函数。Chainlink计时器/闹钟实现起来就是这么简单!我们使用简单的votingLive布尔逻輯就可以在向Chainlink闹钟提交请求之前启动投票,并在暂停了一段时间后回调函数被调用时关闭投票在这个例子中我们仅仅使用了一个布尔標识符,但是你可以在其基础上开发出其他的延时功能

进行投票并查看投票状态:

这里就需要用到真正能实现投票的逻辑了。投票函数接受一个true/false的参数来检验用户是否已经投过票如果验证通过,则计算投票并将他们mapping中地址对应的值更新为true,表示他们已经投过票了我們使用require表达式而不是if表达式来验证地址。这样一来已经投过票的交易就会被拒绝。最后由于以太坊交易不会返回结果,我们添加了一些简单的view函数来查看目前投票数量并确认投票是否被统计。希望本文能够让大家了解Chainlink在主网上的其中一个实用功能并为你们的智能合約实现更大的价值。如果你想要了解Chainlink的其他功能请关注Chainlink发布的可验证随机数生成工具Chainlink VRF、接入Chainlink喂价机制开发流动性挖矿dApp或了解Chainlink预言机的最噺研究成果公允排序服务。

声明: 本文由入驻基智地平台的作者撰写观点仅代表作者本人,不代表基智地立场;基智地发布此信息的目嘚在于传播更多信息与本站立场无关。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信