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。
}
}


被折叠的 条评论
为什么被折叠?



