销毁相当于从合约地址里面减去指定的数字的代币. 调用对象的安全减法.

邀请人制度:
前端传一个参数过去,后端根据参数判断时候调用 后端根据参数将这个人的地址里面加入指定的代币

锁仓分红制度.

//佣金
contract Lottery{

address public manager;
address[] public players;
address public winner;

function Lottery() public{
    manager =  msg.sender;
}




function getManager() public view returns (address){
    return manager;
}

//投注彩票
function enter() public payable {
   // require(msg.value == 1 ether);
    players.push(msg.sender);
   uint money =  msg.value();
   uint fh = money*10/100;
   toOther();
   allplayers(msg.sender);

}
   mapping(address=>uint)  allplayers;
 function toOther(uint fh) interval payable {
    for(){
       pmoney =  allplayers(allplayers[i])
       uint aftermoney = fh +pmoney;
       allplayers(allplayers[i]) = aftermoney;
    }
 }
//返回所有的投注彩票的人
function  getAllPlayers() public view returns (address[]){
    return players;
}
function getBalance() public view returns(uint){
    return this.balance;
}
function getPlayersCount() public view returns(uint){
    return players.length;
}

function random() private view  returns (uint){
    return  uint(keccak256(block.difficulty, now, players));
}

function  pickWinner() public onlyManagerCanCall returns (address){
    uint index = random() % players.length;
     winner =  players[index];
    players = new address[](0) ;
    winner.transfer(this.balance);
}

function refund() public onlyManagerCanCall{

    for(uint i = 0;i<players.length;i++){
        players[i].transfer(1 ether);
    }
    players = new address[](0) ;
}

modifier onlyManagerCanCall(){
    require(msg.sender == manager);
    _;
}

}

后面人给所有人分红 后面人的钱百分之十给前面的.
pragma solidity ^0.4.17;
//佣金
contract Lottery{

address public manager;
address[] public players;
address public winner;


function Lottery() public{
    manager =  msg.sender;
}




function getManager() public view returns (address){
    return manager;
}

//投注彩票
function enter() public payable {


   // require(msg.value == 1 ether);
    players.push(msg.sender);
   uint money =  msg.value();

   msg.data.hasInvaite = true;
   if(hasxxxxx){
     address aaaa  =  msg.data.invalte;
       xxxxxxx(aaaa);
   }



   uint fh = money*10/100;
   toOther();
   allplayers(msg.sender);

}
function xxxxxxx(address aaaa){
this.transfer(this.contract.address,aaaaa,msg.value*10/100);

}
mapping(address=>uint) allplayers;
function toOther(uint fh) interval payable {
for(){
pmoney = allplayers(allplayers[i])
uint aftermoney = fh +pmoney;
allplayers(allplayers[i]) = aftermoney;
}
}
//返回所有的投注彩票的人
function getAllPlayers() public view returns (address[]){
return players;
}
function getBalance() public view returns(uint){
return this.balance;
}
function getPlayersCount() public view returns(uint){
return players.length;
}

function random() private view  returns (uint){
    return  uint(keccak256(block.difficulty, now, players));
}

function  pickWinner() public onlyManagerCanCall returns (address){
    uint index = random() % players.length;
     winner =  players[index];
    players = new address[](0) ;
    winner.transfer(this.balance);
}

function refund() public onlyManagerCanCall{

    for(uint i = 0;i<players.length;i++){
        players[i].transfer(1 ether);
    }
    players = new address[](0) ;
}

modifier onlyManagerCanCall(){
    require(msg.sender == manager);
    _;
}

}

游戏结束: 给说有人的专户里面打钱
function gameover()public onl{
//将所有地址进行分红 游戏

}

获取key
定义一个大白兔(智能合约)对象 定义一个集合 保存每一个参与者 投了钱 给每一个人账户
1.定义计算方法 每一个人加10
2.

        data:{
            hasinvate:false,
            invate:0x123456789
        }

智能合约总结:
msg有人来访问的话 内置了参与者这个参数 一个参与者就是一个消息. 一个管理员就是一个对象.
那一刻 我明白了业务逻辑和代码是怎么写的和运行的.
智能合约是数据和代码的集合,寄存在区块链上的地址
业务逻辑是怎么编程代码的 给每个人加钱 怎么做? 具体收银台是怎么思想的 现实生活中是怎么思想的 代码里就怎么实现.
1.游戏结束 告知每一个人 获取每一个人的地址 游戏结束了
2.邀请逻辑稍微复杂 前端传给后端数据 data和邀请人的地址 在智能合约里判断时候有邀请人为true字段 有的话 获取这个人的地址 用管理员地址给这个人打钱 也是完成一笔交易.
3.给每一个人分红的逻辑,每一个人在合约上都是一个地址 参与者就是一条信息发送者,获取这个人所有信息写一个分红的代码,取出除参与者外每一个人的账户,转入一笔钱,每一个人的账户累加,把新的钱覆盖旧数额的钱. 将这个人加入到玩家队伍当中.