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 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号