You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为赛事投注智能合约添加单场投注开启与关闭功能

赛事投注合约单场开关改造方案

改造核心思路

原合约仅通过单个全局布尔变量控制所有赛事的投注状态,要实现单场独立控制,只需新增赛事维度的投注状态映射、调整投注校验逻辑、新增单场控制接口即可完成改造。

具体实现步骤

  • 第一步:新增单场投注状态存储变量
    在合约状态变量定义区域新增映射,存储每个赛事ID对应的投注开关状态:
// 键为赛事ID,值为对应赛事是否开放投注
mapping(uint16 => bool) public matchBettingActive;

如果需要保留原有的全局投注总开关能力,可同时保留原有bettingActive全局变量,不需要的话可以直接删除该变量及对应的全局开关函数

  • 第二步:调整投注函数的校验逻辑
    在现有bet函数的校验部分新增指定赛事的投注开放状态校验:
function bet(uint16 _matchSelected, uint16 _resultSelected) public payable {
  // 原有校验逻辑保留
  require(msg.value >= minimumBet);
  // 新增单场投注开关校验,如果保留全局开关可同时增加全局校验
  require(matchBettingActive[_matchSelected], "当前赛事已关闭投注");
  // 保留全局开关的话可新增下方校验行
  // require(bettingActive, "全局投注已关闭");
  
  // --- 以下原有业务逻辑完全保持不变 ---
  //Set the player informations : amount of the bet, match and result selected
  playerInfo[msg.sender].amountBet = msg.value;
  playerInfo[msg.sender].matchSelected = _matchSelected;
  playerInfo[msg.sender].resultSelected = _resultSelected;
  
  //Add the address of the player to the players array
  players.push(msg.sender);

  //Finally increment the stakes of the team selected with the player bet
  if ( _resultSelected == 1){
      totalBetHome[_matchSelected] += msg.value;
  }
  else if( _resultSelected == 2){
      totalBetAway[_matchSelected] += msg.value;
  }
  else{
      totalBetDraw[_matchSelected] += msg.value;
  }
}
  • 第三步:新增单场投注开关控制函数
    新增两个带onlyOwner权限修饰的函数,用于单独开启/关闭指定赛事的投注:
// 开启指定赛事的投注
function beginMatchBetting(uint16 _matchId) public onlyOwner returns(bool) {
    matchBettingActive[_matchId] = true;
    return true;
}

// 关闭指定赛事的投注
function closeMatchBetting(uint16 _matchId) public onlyOwner returns (bool) {
    matchBettingActive[_matchId] = false;
    return true;
}
  • 第四步:可选兼容处理
    如果不需要保留原有的全局投注控制能力,可直接删除原来的beginVotingPeriod、closeVoting函数和对应的bettingActive全局变量。如果需要保留全局开关作为总闸,保留原有全局变量和函数,同时按第二步注释补充全局开关校验即可。

内容的提问来源于stack exchange,提问作者Lloyd Ramos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:57:00