用于在线Remix IDE开始在Vyper中撰写智能合约的是最简单的工具。由于它是一个在线IDE,因此需要加装或研发环境设置,您可以关上该站点并开始用于!Remix获取在线环境中展开调试,静态分析和部署的工具。要将Remix与Vyper一起用于,首先必须从插件管理器选项卡落成Vyper插件。1. 在dapp中容许任何用户用于eth派发赏金2. 当符合一定拒绝时,任何享有以太坊帐户的用户都可以在ETH中派发赏金3. 任何用户都可以递交一份赏金的遵守情况和证明4. 赏金发行人拒绝接受遵守缴纳我们首先清理编辑器的内容,并将文件命名为Bounty.vy。
我们首先定义智能合约的结构。结构是自定义类型,可以对多个变量展开分组。struct Bounty:issuer: addressdeadline: timestampdata: bytes32status: uint256amount: wei_valuestruct Fulfillment:accepted: boolfulfiller_address: addressdata: bytes32要测试一切否长时间,请单击“compile”按钮以编译器合约。如果一切正常,您应当在Bytecode,Runtime Bytecode和LLL选项卡中看见输入,这指出编译器顺利。
派发赏金现在我们早已享有智能合约的基本框架,我们可以开始加到功能了。首先我们解决问题容许用户派发赏金的问题。声明状态变量就像Solidity一样,Vyper有状态变量。状态变量是永久存储在合约存储中的值。
接下来,我们定义合约的事件。Vyper可以记录在运营时捕捉的事件并为用户表明它。BountyIssued: event({_id: int128, _issuer: indexed(address),_amount: wei_value, data: bytes32 })BountyCancelled: event({ _id: int128, _issuer: indexed(address),_amount: uint256 })BountyFulfilled: event({ _bountyId: int128, _issuer: indexed(address),_fulfiller: indexed(address), _fulfillmentId: int128, _amount: uint256})FulfillmentAccepted: event({ _bountyId: int128, _issuer: indexed(address), _fulfiller: indexed(address), _fulfillmentId: int128, _amount: uint256 })我们有四个有所不同领域的活动。
客户端有可能期望侦听合约变更的事件。声明用作追踪赏金状态的常量值:CREATED: constant(uint256) = 0ACCEPTED: constant(uint256) = 1CANCELLED: constant(uint256) = 2定义2个数组,网卓新闻网,我们存储有关每个已派发的赏金和遵守的数据:bounties: map(int128, Bounty)fulfillments: map(int128, Fulfillment)为每个遵守和赏金定义索引。
我们必须这个来取得现有的遵守和赏金的当前方位。nextBountyIndex: int128nextFulfillmentIndex: int128留意:如果没能定义索引,则在尝试测试合约时最后不会遇上此错误。
Persistent variable undeclared: nextBountyIndex公布赏金功能现在我们早已声明了我们的状态变量,我们可以加到函数以容许用户与我们的智能合约展开交互。将public decorator加到到函数中,以便外部用户可以从合约中调用它。为了将eth发送到我们的合约中,我们必须在函数中加到payable关键字。
如果没这个payme关键字,合约将拒绝接受通过此函数向其发送到eth的所有尝试@public@payabledef issueBounty(_data: bytes32, _deadline: timestamp):assert msg.value0assert _deadlineblock.timestampbIndex: int128 = self.nextBountyIndexself.bounties[bIndex] = Bounty({ issuer: msg.sender, deadline:_deadline, data: _data, status: 0, amount: msg.value })self.nextBountyIndex = bIndex + 1log.BountyIssued(bIndex, msg.sender, msg.value, _data)函数issueBounty接管一个取名为_data的bytes32变量和一个timestamp_deadline作为参数。assert msg.value0assert _deadlineblock.timestamp由于Vyper不反对修饰符,因此我们用于assert关键字检查来保证符合每个条件。
如果不符合任何条件,该函数将回到错误。bIndex: int128 = self.nextBountyIndex我们定义一个int128变量来留存赏金的当前Index方位。
这是适当的,因为我们必须用于它来存储赏金列表中的新赏金。我们的函数体有两行:self.bounties[bIndex] = Bounty({ issuer: msg.sender, deadline: _deadline,data: _data, status: 0, amount: msg.value })self.nextBountyIndex = bIndex + 1首先,我们用于bIndex将新的Bounty放入到我们的bounties数组中,将BountyStatus设置为CREATED。
在Vyper中,msg.sender自动设置为发送到方的地址,msg.value设置为Wei的数量(1 ETH = 1000000000000000000 Wei)。我们将msg.sender设置为发行者,将msg.value设置为赏金金额。log.BountyIssued(bIndex, msg.sender, msg.value, _data)最后,我们记录BountyIssued事件可供用户订阅者。
特地尝试一下既然您早已理解了如何加到函数来派发赏金,请求尝试将以下函数加到到Bounties合约中:1. ulfilBounty(uint _bountyId,string _data)此函数存储可选到等价赏金的遵守记录。不应将msg.sender记录为遵守者。2. acceptFulfilment(uint _bountyId,uint _fulfilmentId)此函数拒绝接受等价的遵守,并且如果不存在针对等价赏金的记录。然后它应当向遵守者缴纳赏金。
3.。
本文来源:aifa官方入口-www.abmbp.com