以太坊实战--锁仓分红和邀请机制
Posted xiaocongcong888
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太坊实战--锁仓分红和邀请机制相关的知识,希望对你有一定的参考价值。
销毁相当于从合约地址里面减去指定的数字的代币. 调用对象的安全减法.
邀请人制度:
前端传一个参数过去,后端根据参数判断时候调用 后端根据参数将这个人的地址里面加入指定的代币
锁仓分红制度.
//佣金
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
智能合约总结:data:{ hasinvate:false, invate:0x123456789 }
msg有人来访问的话 内置了参与者这个参数 一个参与者就是一个消息. 一个管理员就是一个对象.
那一刻 我明白了业务逻辑和代码是怎么写的和运行的.
智能合约是数据和代码的集合,寄存在区块链上的地址
业务逻辑是怎么编程代码的 给每个人加钱 怎么做? 具体收银台是怎么思想的 现实生活中是怎么思想的 代码里就怎么实现.
1.游戏结束 告知每一个人 获取每一个人的地址 游戏结束了
2.邀请逻辑稍微复杂 前端传给后端数据 data和邀请人的地址 在智能合约里判断时候有邀请人为true字段 有的话 获取这个人的地址 用管理员地址给这个人打钱 也是完成一笔交易.
3.给每一个人分红的逻辑,每一个人在合约上都是一个地址 参与者就是一条信息发送者,获取这个人所有信息写一个分红的代码,取出除参与者外每一个人的账户,转入一笔钱,每一个人的账户累加,把新的钱覆盖旧数额的钱. 将这个人加入到玩家队伍当中.
以上是关于以太坊实战--锁仓分红和邀请机制的主要内容,如果未能解决你的问题,请参考以下文章