我是靠谱客的博主 刻苦身影,最近开发中收集的这篇文章主要介绍【CryptoZombies - 1 Solidity 教程】007伪随机、Keccak256 与类型转换一、前言二、伪随机与Keccak256三、类型转换(Typecasting)四、实战,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一、前言

二、伪随机与Keccak256

1、Keccak256

2、伪随机

三、类型转换(Typecasting)

1、转换格式

四、实战

1、要求

2、代码


一、前言

看了一些区块链的教程,论文,在网上刚刚找到了一个项目实战,CryptoZombies。从这篇博客开始总结自己的学习笔记,与大家一同分享。

如果你想了解更多有关于机器学习、深度学习、区块链、计算机视觉等相关技术的内容,想与更多大佬一起沟通,那就扫描下方二维码加入我们吧!

二、伪随机与Keccak256

1、Keccak256

Ethereum 内部有一个散列函数keccak256,它用了SHA3版本。一个散列函数基本上就是把一个字符串转换为一个256位的16进制数字。字符串的一个微小变化会引起散列数据极大变化。示例如下:

//6e91ec6b618bb462a4a6ee5aa2cb0e9cf30f7a052bb467b0ba58b8748c00d2e5
keccak256("aaaab");
//b1f078126895a1424524de5321b339ab00408010b7cf0e6ed451514981e58aa9
keccak256("aaaac");

2、伪随机

在区块链中安全地产生一个随机数是一个很难的问题,上面产生的就是伪随机数。

三、类型转换(Typecasting)

1、转换格式

转换格式如下:

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、代码

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 - 1 Solidity 教程】007伪随机、Keccak256 与类型转换一、前言二、伪随机与Keccak256三、类型转换(Typecasting)四、实战所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部