CryptoZombies学习笔记——Lesson4
第四课主要介绍payable函数相关。
chapter1: payable修饰函数
以太坊允许同时调用函数和eth转账。msg.value显示发送到合约的以太币数,ether是内置整型数。如果函数没有payable,将不能接受前端调用时附加的eth。
chapter2:transfer
transfer函数可以发送eth,this.balance是当前账户所有资产。格式:
address.transfer(value);
address是目的地址,value是发送的eth数。
当你发送eth到合约账户中时,eth是一直存储在合约账户里的,直到你通过一个函数把它取走,实例如下:
contract GetPaid is Ownable {
function withdraw() external onlyOwner {
owner.transfer(this.balance);
}
}
chapter3:zombieBattles
就是利用payable新建一个功能函数
chapter4:随机数
solidity里,用keccak256生成随机数,生成随机数的参数只能用一次,其实是一种伪随机。这样易被不诚实节点攻击。
因为solidity采用pow共识机制,大量挖矿竞争者需要竞争解决一个数学问题,优先解决者将工作量证明和事务共同发布。此时该挖矿者可以在自己节点无限生成随机数直到达到满意结果后再发布。
这个问题解决比较复杂,可以参考https://ethereum.stackexchange.com/questions/191/how-can-i-securely-generate-a-random-number-in-my-smart-contract的回答。有一种思路是利用oracles访问外部函数生成随机数。
当然,这种攻击需要耗费大量资源,所以像我们做的这种小游戏可以直接用random函数来生成随机数,没有谁那么闲来攻击一个效益极差的节点。
chapter5:Zombie Fighting
一个新功能
chapter6,7:重构通用逻辑
把代码里使用了好多次的require打包成了一个modifier。
chapter8:完善attack函数
chapter9之后:新增一些函数参数,和一些完善
最新文章
- Mina入门教程(二)----Spring4 集成Mina
- gradle相关配置内容解析
- MVC5+EF6 入门完整教程七
- DOM事件机制进一步理解
- C#12种顺序排序
- javaweb回顾第四篇Servlet异常处理
- android 小记
- C语言数据结构之栈:括号匹配
- Postman用法简介-Http请求模拟工具
- XCode7中不能使用http的临时配置解决办法
- 打印 PHP $_SERVER 常量
- mysql5.6.16绿色版配置、运行
- 懵懂oracle之存储过程2
- project euler做题记录
- 2-创建spring boot项目
- CentOS7中安装MySQL5.7
- MySQL高可用方案MHA在线切换的步骤及原理
- 检测到目标URL存在http host头攻击漏洞
- R read.tabe line 5 did not have 2 elements
- 查询ip