目录
一、前言
二、伪随机与Keccak256
1、Keccak256
2、伪随机
三、类型转换(Typecasting)
1、转换格式
四、实战
1、要求
2、代码
一、前言
看了一些区块链的教程,论文,在网上刚刚找到了一个项目实战,CryptoZombies。从这篇博客开始总结自己的学习笔记,与大家一同分享。
如果你想了解更多有关于机器学习、深度学习、区块链、计算机视觉等相关技术的内容,想与更多大佬一起沟通,那就扫描下方二维码加入我们吧!
二、伪随机与Keccak256
1、Keccak256
Ethereum 内部有一个散列函数keccak256
,它用了SHA3版本。一个散列函数基本上就是把一个字符串转换为一个256位的16进制数字。字符串的一个微小变化会引起散列数据极大变化。示例如下:
1
2
3
4//6e91ec6b618bb462a4a6ee5aa2cb0e9cf30f7a052bb467b0ba58b8748c00d2e5 keccak256("aaaab"); //b1f078126895a1424524de5321b339ab00408010b7cf0e6ed451514981e58aa9 keccak256("aaaac");
2、伪随机
在区块链中安全地产生一个随机数是一个很难的问题,上面产生的就是伪随机数。
三、类型转换(Typecasting)
1、转换格式
转换格式如下:
1
2
3uint8 a; uint b = 6; a = uint8(b); //类型转换
注:uint 和 uint8 操作得到的结果的数据类型是 uint。
四、实战
1、要求
给 _generateRandomDna
函数添加代码实现如下功能:
1.第一行代码取 _str
的 keccak256
散列值生成一个伪随机十六进制数,类型转换为 uint
, 最后保存在类型为 uint
名为 rand
的变量中。
2.我们只想让我们的DNA的长度为16位 (还记得 dnaModulus
?)。所以第二行代码应该 return
上面计算的数值对 dnaModulus
求余数(%
)。
创建一个 public
函数,命名为createRandomZombie
,实现如下功能:
1.它将被传入一个变量 _name
(数据类型是 string
)。 (注: 定义公共函数 public
和定义一个私有 private
函数的做法一样)。
2.函数的第一行应该调用 _generateRandomDna
函数,传入 _name
参数, 结果保存在一个类型为 uint
的变量里,命名为 randDna
。
3.第二行调用 _createZombie
函数, 传入参数: _name
和 randDna
。
4.整个函数应该是4行代码 (包括函数的结束符号 }
)。
2、代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32pragma solidity ^0.4.25; contract ZombieFactory { // 这里建立事件 uint dnaDigits = 16; uint dnaModulus = 10 ** dnaDigits; struct Zombie { string name; uint dna; } Zombie[] public zombies; function _createZombie(string _name, uint _dna) private { zombies.push(Zombie(_name, _dna)); } function _generateRandomDna(string _str) private view returns (uint) { uint rand = uint(keccak256(_str)); return rand % dnaModulus; } function createRandomZombie(string _name) public { uint randDna = _generateRandomDna(_name); _createZombie(_name, randDna); } }
最后
以上就是稳重火最近收集整理的关于【CryptoZombies - 1 Solidity 教程】007伪随机、Keccak256 与类型转换一、前言二、伪随机与Keccak256三、类型转换(Typecasting)四、实战的全部内容,更多相关【CryptoZombies内容请搜索靠谱客的其他文章。
发表评论 取消回复