solidity0.5.2使用说明
1、数组用法
僵尸工厂 zombiefactory.sol
1 pragma solidity ^0.5.2; 2 3 contract ZombieFactory { 4 //新建僵尸事件 5 event NewZombie(uint zombieId, string name, uint dna); 6 //dna位数 7 uint dnaDigits = 16; 8 //确保得到16位数 9 uint dnaModulus = 10 ** 16; 10 //僵尸结构体 11 struct Zombie { 12 //名称 13 string name; 14 //dna 15 uint dna; 16 } 17 //僵尸数组 18 Zombie[] public zombies; 19 20 //创建僵尸是函数 21 function _createZombie(string memory _name, uint _dna) private { 22 //array.push() 返回数组的长度,类型是uint 23 uint zombieId = zombies.push(Zombie(_name, _dna)) - 1; 24 //触发新建僵尸事件触发新建僵尸事件是 25 emit NewZombie(zombieId, _name, _dna); 26 } 27 //生成随机的16位dna 28 function _generateRandomDna(string memory _name) private view returns (uint) { 29 uint rand = uint(keccak256(abi.encodePacked(_name))); 30 return rand % dnaModulus; 31 } 32 //公共函数,创建僵尸 33 function createZombie(string memory _name) public { 34 uint randDna = _generateRandomDna(_name); 35 _createZombie(_name, randDna); 36 } 37 //获取僵尸数量 38 function countZombies() public view returns (uint) { 39 return zombies.length; 40 } 41 //获取指定位置的僵尸 42 function getZombie(uint i) public view returns (string memory, uint) { 43 require(i < zombies.length); 44 return (zombies[i].name, zombies[i].dna); 45 } 46 }
测试合约1
pragma solidity ^0.5.2; contract Test1 { mapping(address => uint) public accounts; address public owner; address public acct1 = 0xDF12793CA392ff748adF013D146f8dA73df6E304; constructor() public { owner = msg.sender; accounts[owner] = 1000; accounts[acct1] = 9; } function transferTo(address _to, uint value) public { require(accounts[msg.sender] >= value); accounts[msg.sender] -= value; accounts[_to] += value; } function getBalance(address _account) public view returns(uint) { return accounts[_account]; } }
彩票游戏
pragma solidity ^0.5.2; contract Lottery{ address payable[3] participants; uint8 participantsCount = 0; uint randNonce = 0; function join() public payable { require(msg.value == 5 ether, "Must send 5 ether"); require(participantsCount < 3, "User limit reached"); require(joined(msg.sender) == false, "Already joined"); participants[participantsCount++] = msg.sender; if(participantsCount == 3){ selectWinner(); } } function selectWinner() private { uint rand = uint(keccak256(abi.encodePacked(now, msg.sender, randNonce))) % 3; address payable winner = participants[rand]; winner.transfer(address(this).balance); delete participants; participantsCount = 0; } function joined(address payable _participant) private view returns(bool){ for(uint i=0; i<participantsCount; i++){ if(participants[i] == _participant){ return true; } } return false; } function countParticipants() public view returns(uint){ return participantsCount; } function participant(uint _index) public view returns(address payable){ require(_index < 3, "Please input a number less than 3"); return participants[_index]; } function contractBalance() public view returns(uint){ return address(this).balance; } }

浙公网安备 33010602011771号