CryptoZombies学习笔记——Lesson1
CryptoZombies是一个学习以太坊开发的平台,我将在这里记录学习过程中的一些笔记。
课程网址:cryptozombies.io
首先是第一课——Lesson1:Making the Zombie Factory.主要是一个solidity的简易教程
chapter1:
目标是建立一个僵尸工厂去建立一支僵尸军队,僵尸工厂有三个特征:
1.保存所有僵尸数据;
2.有制造新僵尸的功能;
3.每一个僵尸有一个随机的独特外观。
每只僵尸的独特性基于“僵尸DNA”,是一个16位数,比如:8356281049264737.其中,前两位代表僵尸的头型,3,4位代表僵尸眼睛,往下依次是衣服、皮肤、瞳色、服装颜色。因为暂时每个部位只有7种不同类型,所以计算是采用模7来得到结果。
chapter2:
介绍solidity
每个智能合约代码开头需要有版本号声明——比如pragma solidity ^0.4.20;
然后是contract contractname{
}
然后要求读者编写僵尸工厂的外壳框架:
- pragma solidity ^0.4.19//截至教程更新时间solidity最新版本是0.4.19;
- contract ZombieFactory{
- }
chapter3:状态变量和整数
状态变量是写入到以太中存储的,可以理解为一个永久数据库。
介绍了uint——无符号整型变量,solidity中,uint通常指uint256,也可以自行定义uint8,uint16,uint32等。
完善程序:
- uint dnaDigits = 16;
chapter 4:数学运算
加法:+;减法:-;乘除:*/;取余:%;乘方**;
完善程序:
- uint dnaModulus = 10**dnaDigits;
chapter5:结构体
介绍了struct的基本用法,类似c里的struct
还有字符串string。
完善程序:
- struct Zombie{
- string name;
- uint dna;
- }
chapter6:数组
有定长和动态长度两种类型数组,也可以用结构体定义动态数组,比如
- Zombie[] zombies;
可以定义一个public数组,solidity会自动创建一个getter方法,其他合约就可以读(但不可以写入)这个数组,比如
- Zombie[] public zombies;
完善程序:
- Zombie[] public zombies;
chapter7:函数
和其他高级语言类似,作者给出了一个很好的建议:在函数体中的变量名字前加一个下划线,比如_name,用来和全局变量区分。
完善程序:
- function createZombie(string _name,uint _dna){}
chapter8:使用结构体和数组
结构体动态数组可以使用push来添加元组,比如
- zombies.push(Zombie(_name,_dna));
chapter9:Private/Public函数
solidity默认为public,为了提高安全性,建议不必要情况下,将函数默认为private。
修改代码:
- function _createZombie(string _name, uint _dna) private{}
chapter10:函数返回值
函数定义里可包含返回值的数据类型:
比如:
- function sayHello() public returns (string) {
- return greetings;//greetings是一个字符串变量
- }
还可以定义前缀view,表示只能读取不能修改数据;定义前缀pure,返回值完全取决于该函数的参数。
完善程序:
- function _generateRandomDna(string _str) private view returns(uint){}
chapter11:Keccak256 和类型转换
Keccak256是sha3系列的哈希函数,现在我们用它来生成一个伪随机数序列。
类型转换:例子
- uint8 a = 5;
- uint b = 6;
- uint8 c = a * uint8(b);
chapter12:将前面所有模块连接起来
添加代码如下:
- function createRandomZombie(string _name)public {
- uint randDna = _generateRandomDna(_name);
- _createZombie(_name, randDna);
- }
chapter13:事件
事件 是当合约和区块链发生某些交互时的一种机制,前端应用进行监听并作出反应。
首先声明
- event NewZombie(uint id, string name, uint dna);
然后在需要前端监听的函数里调用。
chapter14:Web3.js
以太坊的一个JavaScript库,编译部署调用智能合约。
白皮书:https://web3js.readthedocs.io/en/1.0/
此章节中只有一些简单的例子,更多内容将在后续课程中讲解。
CryptoZombies学习笔记——Lesson1的更多相关文章
- CryptoZombies学习笔记——Lesson5
chapter1:token代币 简而言之,通证就是支持交易的包含一系列规范的函数接口的一个智能合约,发币可以用ERC20标准,但是像僵尸这种非同质化代币,需要用ERC721标准 chapter2:e ...
- 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 ...
随机推荐
- Unity 游戏框架搭建 (二十一) 使用对象池时的一些细节
上篇文章使用SafeObjectPool实现了一个简单的Msg类.代码如下: class Msg : IPoolAble,IPoolType { #region IPoolAble 实现 public ...
- swift实现一个对象池
1.创建一个对象池 对象池:对象池一般用来管理一组可重用的对象, 这些对象的集合叫做对象池. 组件可以从对象池中借用对象, 完成一些任务之后将它归还给对象池. 返回的对象用于满足调用组件的后续请求, ...
- ABAP术语-SAP GUI for HTML
SAP GUI for HTML 原文:http://www.cnblogs.com/qiangsheng/archive/2008/03/14/1104996.html An ITS impleme ...
- 08JavaScript对象
JavaScript 对象是拥有属性和方法的数据. 注:在 JavaScript 中,对象是非常重要的,当你理解了对象,就可以了解 JavaScript . 1.JavaScript 对象 在 Jav ...
- nginx ssl pathinfo 伪静态 301 配置文件
server { listen ; root /www/web/test_com/public_html; server_name test.com test.com; if ($host != '* ...
- thinkphp5.0上对redis的具体操作
一.环境搭建 首先先安装composer.thinkphp5.0版本.和redis的windows版本的redis程序或者linux版本的redis程序,linux安装教程: https://www. ...
- KEIL MDK-ARM Version 5.26正式版开发工具下载
Keil MDK最新版本已经出来啦,ARM开发工具MDK-ARM Version 5.26地址:http://www.myir-tech.com/soft.asp?id=1141,需要的可以去下载哦 ...
- GitLab 基本操作
登录 在浏览其中输入http://192.168.3.11:8888 如图1登录界面. 图1 注:第一次新增用户,会发送修改密码链接到用户的邮箱中,用户会收到如图2邮件. 图2 2. 修改密码 点 ...
- C语言中字符串赋值的几个理解
在C语言中,字符串的赋值主要有两种方法,第一种是通过指针的方式直接赋值,第二种是通过数组直接赋值. 一.首先,我们来看第一种赋值方法:指针式赋值 我们知道,上面的示例是显然可以正常执行的,也是很容易理 ...
- SAP Odata実行命令(2)
前言 $ skiptokenは.アプリケーションに送信されるエントリ数を制限するために使用されます. 膨大な数のエントリが要求された場合.これはパフォーマンスの向上にも役立ちます.次のリンクがアプリケ ...