Chainlink闹钟在链上发起投票使用方法和教程

admin
admin
admin
1265
文章
1
评论
2020年10月23日15:42:27 评论

Eth以太坊um中的很多智能契约需要通过一个外部定时器触发才能在链上执行,所以dApp在链上发起投票时会遇到问题,因为投票通常是有时间窗的。由于Solidity中没有计时器,智能契约的投票机制需要访问外部工具来启动或关闭投票窗口。事实上,在传统系统中,定时功能并不难实现。系统可以设置NTP时间与操作系统时间同步,或者使用物理时钟或定时器计时,甚至使用睡眠表达式将代码暂停一段时间。实度智能契约中的事件由离线交易触发,这意味着区块链如以太网需要访问离线闹钟触发事件或调用函数。好消息是,开发人员可以使用Chaink节点作为闹钟来可靠地触发智能合同执行。

Chainlink闹钟在链上发起投票使用方法和教程
这篇文章将教你如何在dApp中轻松控制投票时间。现在,随着越来越多的dApp走DAO路线,把更多的权力交给用户,这种投票机制变得越来越重要。具体步骤如下:
将Chainlink函数包导入智能合同并继承它。
格式化并提交链接睡眠请求(“直到”)。
将合同所有人设置为唯一有权发起投票的人。
用简单的KYC确认每个地址只投票一次。
使用Getters函数查看投票状态。
这个例子中使用的代码可以在GitHub中查看,也可以查看Remix,方便部署。
当然,这只是一个基本的例子。您可以使用链接“直到”来请求随时触发任何事件。这个例子只是一个初始框架,你可以在这个框架上开发其他需要时间控制的智能合同。
合同定义和构造函数:
导入"github.com/smartcontractkit/chainlink/EVM-contracts/src/v0.6/chainlinkclient.sol";
contractchainlinktimedvoteinlinkclient.
{
uintprivateoraclePayment
addressprivateoracle
bytes32privatejobId
uintprivateyesCount
uintprivatenoCount
boolprivatevotingLive
映射(address=>bool)publictolers;
//只有承包商有权投票.
addresspayableowner
modifierlonlyowner{
require(msg.sender==owner);
_;
{}
constructor()public{
setpublicchanlinktoken();
owner=msg.sender
oraclePayment=0.1*10**18//0.1LINK.
//Kovanalarmacle.
Oracle=0x2f90a6d021db21e1b2a077C5a37B3c7e75d15b7e;
jobId="a7ab70d561d34EB49e9b1612FD2e044b";
//初始化投票.
yescount=0;
nocount=0;
votingLive=false
{}
导入链接客户端,并使用关键字“是”来继承,然后您可以轻松地从链接节点请求数据。然后,我们需要定义几个全局变量,包括定时器预测器的地址,可以在链接页面上查看。
此外,我们需要一个jobspecID和一些变量来跟踪投票,并将投票者地址映射为布尔值,以确认该地址是否已经投票。最后,我们需要定义一个修饰符,规定只有合同拥有者才有权发送消息调用函数。然后在构造函数中初始化合同所有者地址和其他变量。注意:映射不需要初始化,布尔类型的默认值为false。
向链接发送开始投票的请求:
functionstartVote投票(uintvoteMinutes)publiconly所有者{
链环。requestmemoryreq=buildChainlinkRequest(JobID,address(this),this.fulfill.selector);
req.addUint("直到",now+voteMinutes*1分钟);
//startvotingwindowthensubmitsubrequesttoleepfor$voteMinutes.
votingLive=true
发送链接请求至(甲骨文、请求、甲骨文支付);
{}
//callbackforstvoterequest.
functionfulfill(bytes32_RequestId)publicRecordchainLinkFullment(_RequestId){
//$voteminutesminuteshevaeded,stopvoting.
votingLive=false
{}
我们合同的第一个功能,开始投票,需要向链接发送请求。在这里,我们使用onlyOwner修饰符来确保只有合同所有者有投票权。
我们在“如何用API连接智能合同”一文中提到,链接客户端合同导出了链接的数据结构。请求,可根据具体要求更改为不同格式。在示例中,我们在数据结构中添加了“直到”而不是“获取”请求。构造函数中定义的chaink节点的地址可以标识这个直到字符串,节点会在收到请求后的指定时间内挂起taskpipeline(注意:指定时间是指“voteMinutes”)。
在提交请求之前,我们需要将votingLive设置为true,即投票成功启动,投票功能将检查变量状态以允许或拒绝投票。然后我们可以提交请求,链链接节点将暂停任务管道。通过这种方式,我们可以在由直到请求结束所设置的时间之后调用Fulfillcallback函数。当完成函数被调用时,设置的投票时间已经结束,所以你可以将votingLive设置回false并关闭投票。综上所述,我们应该先创建一个“直到”的请求,其中包含指定的时间,并发送给某个节点,然后在节点在指定的时间内暂停后,调用fulfill函数。链环计时器/闹钟就这么简单!我们用简单的voti。

admin
  • 本文由 发表于 2020年10月23日15:42:27
  • 转载请务必保留本文链接:https://www.biyungu.com/qkl/3027.html
区块链3.0是什么意思,代表着进步吗? 区块链技术

区块链3.0是什么意思,代表着进步吗?

区块链3.0是什么含意?区块链3.0技术性基本原理剖析,伴随着区块链3.0来临,有着极大创业商机合理布局的时期,在“热情”与“显摆”之后,现如今早已踏入以技术性过程和安全防范措施为重要的数字时代。可是...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: