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

 

posted @ 2019-04-23 15:47  将王相  阅读(538)  评论(0)    收藏  举报