以太坊彩票合约案例

一.合约案例简介

  • 此案例为入门案例,从 合约 -> 编译 -> web3部署和调用

二.彩票合约源码

pragma solidity ^0.4.25;
// 彩票合约
contract LotteryShop{
   

    //购买彩票事件,在购买彩票方法中调用
    event BuyLottery(address indexed buyer,uint money,uint16 luckNum);
    //开奖事件,在开奖方法中调用
    event DrawLottery(address winner,uint money,uint16 luckNum);

    //购买记录(购买者的address, 彩票号码)
    mapping(address=>uint) buyMapping;
    //购买用户的地址
    address[] usrAdrList;

    //管理员地址
    address manageAdr;
    //合约地址
    address contractAdr;

    constructor() public payable{
   
        //将合约部署人的地址保存起来作为管理员地址
        manageAdr=msg.sender;
        //将当前合约对象的地址保存
        contractAdr= address(this);
    }

    //0.1 显示管理员地址
    function ShowManageAdr() constant returns(address){
   
        return manageAdr;
    }

    //0.2 显示调用者的彩票数据
    function ShowInvokerCaiPiao() constant returns(uint){
   
        return buyMapping[msg.sender];
    }

    //0.3 显示管理员余额
    function ShowManageBalance() constant returns(uint){
   
        return manageAdr.balance;
    }
    //0.4 显示合约余额
    function ShowContractMoney() constant returns(uint){
   
        return contractAdr.balance;
    }
    //0.5 获取买家地址列表
    function getAllUsrAddress() view returns(address[]){
   
        return usrAdrList;
    }

    //0.5 买彩票方法
    function BuyCaiPiao(uint16 haoMa) payable{
   
        //0. 判断用户账户是否有1 eth
        require(msg.value == 1 ether);
        //1. 判断彩票购买列表里是否已经存在当前用户
        require(buyMapping[msg.sender]==0);

        //2. 将用户的钱转到合约账户
        contractAdr.send(msg.value);

        //3.1 调用事件日志
        emit BuyLottery(msg.sender,msg.value,haoMa);

        //3.2 添加到mapping
        buyMapping[msg.sender] = haoMa;
        //3.3 将地址存入 买家数组
        usrAdrList.push(msg.sender);
    }

    //1. 开奖 - 必须是管理员才能操作
    function KaiJiang() adminOnly payable returns(uint){
   
        //1.生成一个随机的开奖号码
        uint256 luckNum = uint256(keccak256(abi.encodePacked(block.difficulty,now)));
        //1.1 取模10,保证奖号在10以内
        luckNum = luckNum 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邹伯通_AI智造

研究源码,写文章,录制视频挺好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值