CryptoZombies学习笔记——Lesson5
chapter1:token代币
简而言之,通证就是支持交易的包含一系列规范的函数接口的一个智能合约,发币可以用ERC20标准,但是像僵尸这种非同质化代币,需要用ERC721标准
chapter2:erc721 和多继承
erc721目前仍是草稿,没有官方建议标准。
contract ERC721 {
event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
function balanceOf(address _owner) public view returns (uint256 _balance);
function ownerOf(uint256 _tokenId) public view returns (address _owner);
function transfer(address _to, uint256 _tokenId) public;
function approve(address _to, uint256 _tokenId) public;
function takeOwnership(uint256 _tokenId) public;
}
solidity支持多继承,用逗号隔开继承的父类。
chapter3:balanceOf , ownerOf函数的应用
chapter4:重构
注意到ownerOf函数和前面课程中一个modifier重名了,此时我们不能修改erc721中的函数名,因为这是一个标准,所有其他也用了erc721的合约希望函数名是相同的,这样才能实现通信,所以我们要改变自己定义的那个函数名。
chapter5:erc721交易逻辑
erc721有两种交易方法。
第一种: transfer函数,参数tokenid和目标账户地址,完成转账;
第二种:approve函数,参数tokenid和目标账户,标记目标账户为允许提取代币;当外部账户通过takeOwnerShip发起提取时,合约检查账户是否有许可,如果有则完成转账。
chapter9:防止溢出
在以太坊虚拟机(EVM) 中, 整数指定了固定大小的数据类型。这是指一个整型变量只
能有一定范围的数字表示。 比如,一个 uint8 的范围是[0,255]。 如果输入 256,则会表示
成 0。不加注意的话,只要没有检查用户输入又执行计算,导致数字超出存储它们的数据类
型允许的范围, Solidity 中的变量就可以被用来组织攻击。 今年 4 月,黑客对 BEC 智能合
约进行溢出漏洞攻击,造成代币增发贬值。
OpenZepplin 提供了一个 SafeMath 库,可以保障数值避免出现溢出,能够有效的避免
溢出漏洞的出现
。
chapter10:SafeMath第二部分
出现了一个新关键词:library。可以利用using关键字让library中的方法运用在其他数据类型上。比如:
using SafeMath for uint;
// now we can use these methods on any uint
uint test = 2;
test = test.mul(3); // test now equals 6
test = test.add(5); // test now equals 11
在safeMath库中,有一个assert语句,和require类似,会抛出异常。和require不同的是,require失败会返还gas,但assert不会。
所以在solidity中我们对数值进行操作时一定要使用safemath库,比如:
myUint++;
更改为:
myUint = myUint.add(1);
chapter 11:
但是存在一个问题,safemath是针对uint256的,如果输入的数据是uint16或uint8之类,会强制转换成uint256,那么对于uint8溢出的数据转换后就不溢出了,容易造成错误。
所以safemath库中还提供了safemath32,safemath16的library,可以直接using调用。
chapter12:
编程时加一些标签是一个好习惯:
//这是一个普通注释
///@notice:这时候一个带标签的netspec tag。标签有@title,@author,@notice解释该合约或函数做什么,@dev解释对开发者的更多细节,@param,@return。
到这里整个教程的代码部分就结束了,下一章学习的是如何部署智能合约。
CryptoZombies学习笔记——Lesson5的更多相关文章
- CryptoZombies学习笔记——Lesson1
CryptoZombies是一个学习以太坊开发的平台,我将在这里记录学习过程中的一些笔记. 课程网址:cryptozombies.io 首先是第一课——Lesson1:Making the Zombi ...
- CryptoZombies学习笔记——Lesson3
第三课就开始深入讲解solidity编程技巧了. chapter1: 智能合约的不变性. 合约一旦部署到以太坊后,就不可更改了,所以从一方面来说,智能合约代码的安全性是如此重要,因为一旦发现你的代码里 ...
- CryptoZombies学习笔记——Lesson2
第二课是僵尸猎食,将把app变得更像一个游戏,添加多人模式,建立更多创造僵尸的方法. chapter1 依然是简介 chapter2:映射和地址 映射相当于一个索引,指向不同地址,不同地址存储的数据不 ...
- CryptoZombies学习笔记——Lesson4
第四课主要介绍payable函数相关. chapter1: payable修饰函数 以太坊允许同时调用函数和eth转账.msg.value显示发送到合约的以太币数,ether是内置整型数.如果函数没有 ...
- 孙鑫视频VC++深入详解学习笔记
孙鑫视频VC++深入详解学习笔记 VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Le ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
随机推荐
- 摩尔吧 FPGA培训
摩尔吧 FPGA培训 2017.7.30 第一天与非网摩尔吧创始人苏公雨给我们介绍了FPGA的发展历史,以及目前FPGA厂家的市场定位. 2017.7.30~2017.8.4 这个星期主要是学习画电 ...
- Mybatis Mapper动态代理方式 typeAliases 别名的使用
目录结构及配置文件与原始dao方法相比更简便 只需一个UserMapper的接口,放在一起的配置文件,配置文件中namespace的地址确定jdk动态代理的对象 <?xml version=&q ...
- 纯JS实现轮播图特效——详解
<div id="slider"> <div id="sliderImgs"> <img src="img/mi04.j ...
- Scala 语法(一)
(1)基本语法 变量 val var(可变变量): 数据类型 Byte,Char,Int,Short,Long,String(字符),Float,Double,Boolean(true,flase). ...
- 学习 Git的使用过程
原文链接: http://www.cnblogs.com/NickQ/p/8882726.html 学习 Git的使用过程 初次使用 git config --global user.name &qu ...
- centos系统安装后无法稳定连接wifi的解决方法
在安装双系统的时候遇到的问题,虽然不知道原理,但是弄好能用就可以,这类bug太邪恶了 wifi不能用的情况: 先查看wifi状态: rfkill list all 0: hci0: Bluetooth ...
- vim 配色方案
1. 自己电脑上的vim 注释很难看清,又不想取消高亮.原来显示: 在 if has("syntax") syntax onendif 语句下面追加一句: colorscheme ...
- LeetCode初级算法的Python实现--链表
LeetCode初级算法的Python实现--链表 之前没有接触过Python编写的链表,所以这里记录一下思路.这里前面的代码是和leetcode中的一样,因为做题需要调用,所以下面会给出. 首先定义 ...
- 成都Uber优步司机奖励政策(4月9日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- nio之netty5应用
1.netty5和netty4的区别不是很大,但是与netty3差别还是有的.这里不介绍netty4,因为和netty5的方式都差不多.netty5的复杂性相对于netty3要多很多了.基本上架构都被 ...