klayzyb 2021-12-06 12:31 采纳率: 100%
浏览 69
已结题

solidity编译的骰子游戏出现了个问题

问题遇到的现象和发生背景

在constructor() public {
owner = msg.sender;处出现问题

问题相关代码,请勿粘贴截图

pragma solidity ^0.4.0;

contract MyDice {

// 合约创建者
address private owner;

modifier onlyOwner() {
    require(msg.sender == owner);
    _;
}

constructor() public {
    owner = msg.sender;
}

// 房主给合约钱包里充钱
function recharge() onlyOwner payable public {
}

// 房主主动从合约钱包中提现
function withdraw(uint32 _amount) onlyOwner public {
    owner.transfer(_amount);
}

// solidity不能返回结构, 但可以返回元组
// @param _num                 为选择的数字 [1, 99]之间
// @return (玩家选择数字, 筹码, 生成的数字, 赔付筹码)
function play(uint8 _num) payable public
        returns (uint8, uint256, uint8, uint256) {

    require(_num >= 1 && _num <= 99);

    // 生成[0, 99]的随机数
    uint8 tval = randomInt(0, 99);

    if ( tval < _num ) {
        // 计算赔付的值
        uint256 payout = uint256(msg.value * 100 / _num);
        msg.sender.transfer(payout);
        return (_num, msg.value, tval, payout);
    } else {
        return (_num, msg.value, tval, 0);
    }

}

// 生成[min, max]之间的一个随机数
function randomInt(uint8 min, uint8 max) private
        view returns(uint8) {

    require(max > min);

    bytes32 hash = keccak256(
        abi.encodePacked(now, msg.sender, block.difficulty)
    );

    return uint8(uint256(hash) % (max - min + 1)) + min;

}

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • togolife 2021-12-06 13:16
    关注

    必须用低版本的solidity 编译吗?这个高版本的你看一下

    pragma solidity ^0.8.0;
    
    contract MyDice {
    // 合约创建者
    address private owner;
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }
    
    constructor() {
        owner = msg.sender;
    }
    // 房主给合约钱包里充钱
    function recharge() onlyOwner payable public {
    }
    // 房主主动从合约钱包中提现
    function withdraw(uint32 _amount) onlyOwner payable public {
        payable(owner).transfer(_amount);
    }
    // solidity不能返回结构, 但可以返回元组
    // @param _num                 为选择的数字 [1, 99]之间
    // @return (玩家选择数字, 筹码, 生成的数字, 赔付筹码)
    function play(uint8 _num) payable public
            returns (uint8, uint256, uint8, uint256) {
        require(_num >= 1 && _num <= 99);
        // 生成[0, 99]的随机数
        uint8 tval = randomInt(0, 99);
        if ( tval < _num ) {
            // 计算赔付的值
            uint256 payout = uint256(msg.value * 100 / _num);
            payable(msg.sender).transfer(payout);
            return (_num, msg.value, tval, payout);
        } else {
            return (_num, msg.value, tval, 0);
        }
    }
    // 生成[min, max]之间的一个随机数
    function randomInt(uint8 min, uint8 max) private
            view returns(uint8) {
        require(max > min);
        bytes32 hash = keccak256(
            abi.encodePacked(block.timestamp, msg.sender, block.difficulty)
        );
        return uint8(uint256(hash) % (max - min + 1)) + min;
    }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月19日
  • 已采纳回答 12月11日
  • 修改了问题 12月6日
  • 赞助了问题酬金 12月6日
  • 展开全部

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,