经典智能合约案例之发红包
经典智能合约案例:发红包
角色分析:发红包的人和抢红包的人
功能分析:
发红包:发红包的功能,可以借助构造函数实现,核心是将 ether 打入合约;
抢红包:抢红包的功能,抢成功需要一些断言判断,核心操作是合约转账给抢红包的人;
退还:当红包有剩余的时候,允许发红包的人收回余额,可以用合约销毁来实现;
实现发红包功能
需要一个有支付功能的地址,用于发红包(谁创建合约,谁就是发红包的人)
需要传入一个红包的数量(number),红包的金额从 msg.value 传入
在构造函数中,指定发红包的人和红包数量
需要一个查询红包余额的功能函数(提示:address(this).balance)
实现抢红包的功能
需要一个给抢红包的人转账的功能函数
函数中需要判断:1. 红包余额大于 0; 2. 红包剩余个数大于 0;(提示:断言)
红包数量随着函数执行的次数相应减少;
抢红包的金额采用随机的方式(提示:用 keccak256 函数计算当前时间戳的哈希),红包的金额是 100 以内的数(提示:哈希值对 100 取余)
转账功能:
msg.sender.transfer(amount)
(amount 为金额);
实现退还红包余额
可以借助 selfdestruct 函数,用于销毁合约,其原型如下:
function selfdestruct(address user)
user 代表合约销毁时的受益人;
实现一个 kill 函数,用它来销毁合约,指定发红包的人为受益人;
合约代码:
合约执行截图:
首先 deploy 该红包合约:
在抢红包之前先查询一下相关的信息:
可见总额度为 20230324wei,按照 delpoy,一共是 6 个红包,发送者的地址如下:
然后进行抢红包:
可见,总额度相应减少,红包的个数也减少 1。
最后,kill 销毁合约,实现退还红包余额。
版权声明: 本文为 InfoQ 作者【timerring】的原创文章。
原文链接:【http://xie.infoq.cn/article/410c398a74c5c512fe65ca587】。未经作者许可,禁止转载。
评论