pragma solidity ^0.4.19; //solidity版本
//合约创建
contract ZombieFactory {
//事件
event NewZombie(uint zombieId, string name, uint dna);
//变量定义
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
//结构定义
struct Zombie {
string name;
uint dna;
}
//数组定义,此处为无限长度,可以在括号中加数字表示长度
Zombie[] public zombies;
//函数定义,private表私有,只能此合约调用
function _createZombie(string _name, uint _dna) private {
//数组使用push加入新数据,返回长度
uint id = zombies.push(Zombie(_name, _dna)) - 1;
//合约调用
NewZombie(id, _name, _dna);
}
//view:此函数只读不修改数据,pure:此函数既不能读,也不能修改
function _generateRandomDna(string _str) private view returns (uint) {
//后者生成256位的16进制数
uint rand = uint(keccak256(_str));
return rand % dnaModulus;
}
function createRandomZombie(string _name) public {
uint randDna = _generateRandomDna(_name);
_createZombie(_name, randDna);
}
}