第四课主要介绍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之后:新增一些函数参数,和一些完善

  

  

  

CryptoZombies学习笔记——Lesson4的更多相关文章

  1. CryptoZombies学习笔记——Lesson1

    CryptoZombies是一个学习以太坊开发的平台,我将在这里记录学习过程中的一些笔记. 课程网址:cryptozombies.io 首先是第一课——Lesson1:Making the Zombi ...

  2. CryptoZombies学习笔记——Lesson5

    chapter1:token代币 简而言之,通证就是支持交易的包含一系列规范的函数接口的一个智能合约,发币可以用ERC20标准,但是像僵尸这种非同质化代币,需要用ERC721标准 chapter2:e ...

  3. CryptoZombies学习笔记——Lesson3

    第三课就开始深入讲解solidity编程技巧了. chapter1: 智能合约的不变性. 合约一旦部署到以太坊后,就不可更改了,所以从一方面来说,智能合约代码的安全性是如此重要,因为一旦发现你的代码里 ...

  4. CryptoZombies学习笔记——Lesson2

    第二课是僵尸猎食,将把app变得更像一个游戏,添加多人模式,建立更多创造僵尸的方法. chapter1 依然是简介 chapter2:映射和地址 映射相当于一个索引,指向不同地址,不同地址存储的数据不 ...

  5. 孙鑫视频VC++深入详解学习笔记

    孙鑫视频VC++深入详解学习笔记 VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Le ...

  6. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  7. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  8. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  9. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

随机推荐

  1. Oracle 常用脚本

    ORACLE 默认用户名密码 sys/change_on_install SYSDBA 或 SYSOPER 不能以 NORMAL 登录,可作为默认的系统管理员 system/manager SYSDB ...

  2. Oracle中按规定的字符截取字符串

    CREATE OR REPLACE FUNCTION "F_SPLIT" (p_str IN CLOB, p_delimiter IN VARCHAR2) RETURN ty_st ...

  3. Swift_100个Swift必备Tips 王巍 PDF

    Swift_100个Swift必备Tips 王巍 PDF GitHub下载地址

  4. js 单引号和双引号的使用注意事项

    前言: 刚入行时,对单双引号没有过研究,使用时也是碰到什么用什么,后来慢慢遇到引号嵌套时报错,才了解问题.因之前的文章稍显混乱,现重新编辑,帮助需要的人儿. 正文: 1.一般情况下(没有嵌套)在js中 ...

  5. MySQL学习之流程结构

    流程结构 流程结构:代码的执行顺序. if分支 根据要求选择合适的执行部分. 基本语法 if在MySQL中有两种基本用法 1.用在select查询当中,当作一种条件来进行判断. 基本语法:if(条件, ...

  6. 前端模块化小总结—commonJs,AMD,CMD, ES6 的Module

    随着前端快速发展,需要使用javascript处理越来越多的事情,不在局限页面的交互,项目的需求越来越多,更多的逻辑需要在前端完成,这时需要一种新的模式 --模块化编程 模块化的理解:模块化是一种处理 ...

  7. Ubuntu 16.04 搭建 ELK

    1.安装Java JDK sudo apt-get install default-jdk 2.安装Elasticsearch 1.导入Elasticsearch的GPG公钥 wget -qO - h ...

  8. Centos7验证Kickstart文件是否完整方法

    1.1    功能简介 CentOS 7 包含 ksvalidator 命令行程序,可使用该程序进行确认Kickstart文件.这个工具是 pykickstart 软件包的一部分.要安装pykicks ...

  9. Java : logback简单配置

    需要把logback.xml文件放在类路径下,如果是spring boot项目可以用 logging.config=classpath:log/xxxxxx.xml来指定配置文件 logback la ...

  10. JZOJ 4273. 【NOIP2015模拟10.28B组】圣章-精灵使的魔法语

    4273. [NOIP2015模拟10.28B组]圣章-精灵使的魔法语 (File IO): input:elf.in output:elf.out Time Limits: 1000 ms  Mem ...