Solidity搭建僵尸工厂

pragma solidity ^0.4.19; // 版本号

//建立智能合约

contract ZombieFactory {

    event NewZombie(uint zombieId, string name, uint dna);

//定义一个 事件 叫做 NewZombie。 它有3个参数: zombieId (uint), name (string), 和 dna (uint)。

    uint dnaDigits = 16;  //定义 dnaDigits 为 uint 数据类型, 并赋值 16

    uint dnaModulus = 10 ** dnaDigits; //建立一个uint类型的变量,名字叫dnaModulus, 令其等于 10的 dnaDigits 次方.

    struct Zombie {

        string name;

        uint dna;

    }

//建立一个struct 命名为 Zombie结构体,有两个属性: name (类型为 string), 和 dna (类型为 uint)。

    Zombie[] public zombies;

// 创建一个数据类型为 Zombie 的结构体数组,用 public 修饰,命名为:zombies.

    function _createZombie(string _name, uint _dna) private {

// 函数 createZombie。 有两个参数: _name (类型为string), 和 _dna (类型为uint),可见性为私有。

        uint id = zombies.push(Zombie(_name, _dna)) - 1;

//定义uint id为索引 为数组zombies.push返回数组的长度,所以要减一。

        NewZombie(id, _name, _dna);

//调用事件

    }

    function _generateRandomDna(string _str) private view returns (uint) {

//private 函数,命名为 _generateRandomDna。接收一个输入变量 _str (类型 string), 返回一个 uint 类型的数值,可见性为私有,view只读函数。

        uint rand = uint(keccak256(_str));

// _str 的 keccak256 散列值生成一个伪随机十六进制数,类型转换为 uint, 最后保存在类型为 uint 名为 rand 的变量中。

        return rand % dnaModulus;

// return 上面计算的数值对 dnaModulus 求余数(%)。

    }

    function createRandomZombie(string _name) public {

        uint randDna = _generateRandomDna(_name);

        _createZombie(_name, randDna);

// 创建一个 public 函数,命名为 createRandomZombie. 它将被传入一个变量 _name (数据类型是 string)。

// 函数的第一行应该调用 _generateRandomDna 函数,传入 _name 参数, 结果保存在一个类型为 uint 的变量里,命名为 randDna

// 第二行调用 _createZombie 函数, 传入参数: _name 和 randDna

    }

}

 看我的CryptoZombie 小敏! (cryptozombies.io)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值