我是靠谱客的博主 稳重火,这篇文章主要介绍【CryptoZombies - 1 Solidity 教程】007伪随机、Keccak256 与类型转换一、前言二、伪随机与Keccak256三、类型转换(Typecasting)四、实战,现在分享给大家,希望可以做个参考。

目录

一、前言

二、伪随机与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
3
uint8 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
32
pragma 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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部