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

ChainShot Solidity课程Game合约测试未通过问题求助

ChainShot Solidity入门课程Game合约问题:偶数参与者allowTeams验证失败

问题背景

正在学习ChainShot的Solidity智能合约入门课程,完成Game合约练习时遇到问题:需求为构造函数存储participants数量,仅当参与者为偶数时allowTeams设为true。当前代码通过12个测试中的9个,但3个偶数参与者(2、4、6人)的“should allow teams”测试未通过。IDE限制不可修改构造函数参数或新增函数,求修改方案。

相关代码

UIntFunctions库代码

library UIntFunctions {
    function isEven(uint x) public pure returns(bool) {
        return (x % 2 == 0);
    }
}

我的Game合约代码

import "./UIntFunctions.sol";

contract Game {
    using UIntFunctions for uint;
    uint public participants;
    bool public allowTeams;

    constructor(uint _participants) {
        participants = _participants;
    }

    function isEven(uint _participants) public returns(bool) {
        if (_participants.isEven()) {
            return allowTeams = true;
        }
        else return allowTeams;
    }
}

问题原因

测试失败的核心原因:

  1. 构造函数仅存储了participants,但未根据其奇偶性初始化allowTeams,导致allowTeams默认保持false,而测试可能直接在合约部署后检查该状态,未调用isEven函数。
  2. 现有isEven函数依赖传入的参数而非合约存储的participants判断奇偶性,逻辑不符合需求(需求要求allowTeams由构造函数存储的参与者数量决定)。

修改方案

在不修改构造函数参数、不新增函数的前提下,调整两处代码:

  1. 构造函数中初始化allowTeams为合约存储participants的奇偶性结果。
  2. 修改isEven函数逻辑,基于合约存储的participants判断奇偶性并更新allowTeams,忽略传入参数(确保逻辑符合需求)。

修改后的Game合约代码

import "./UIntFunctions.sol";

contract Game {
    using UIntFunctions for uint;
    uint public participants;
    bool public allowTeams;

    constructor(uint _participants) {
        participants = _participants;
        // 初始化时直接根据参与者数量设置allowTeams
        allowTeams = participants.isEven();
    }

    function isEven(uint _participants) public returns(bool) {
        // 基于合约存储的participants判断,更新并返回allowTeams状态
        allowTeams = participants.isEven();
        return allowTeams;
    }
}

说明

  • 构造函数初始化allowTeams后,合约部署时allowTeams就处于正确状态,满足测试直接检查的场景。
  • 修改后的isEven函数始终基于合约存储的参与者数量判断,确保无论传入什么参数,都符合需求逻辑,同时更新allowTeams状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:05:33