Solidity中如何在if语句中使用结构体存储的总推荐数值
提取总推荐数用于条件判断的实现方法
你当前代码里存在一处无效定义:enter函数中声明的address totalreferred = user_info[level4].referred_by;属于冗余代码,和你Referal_levels结构体中存储总推荐数的uint256 _totalreferred字段无关联,可直接删除。
单个地址总推荐数的读取与判断
你在每次统计各层级推荐数时,已经同步给对应地址的_totalreferred字段做了累加,取值时直接从refer_info映射中读取对应地址的该字段即可,可直接用于条件判断:
// 替换为你实际需要的阈值 uint256 目标值 = 10; // 比如读取当前调用者的总推荐数,要查其他地址就把msg.sender换成对应地址变量 uint256 totaltransfers = refer_info[msg.sender]._totalreferred; if (totaltransfers > 目标值) { // 满足阈值后执行的业务逻辑 }
现有代码的其他必改问题
- 缺少重复参与校验:当前
enter函数没有判断用户是否已经参与过,同一地址重复调用会反复给上级地址累加推荐数,导致计数完全失真,需要在函数开头加入校验:require(!user_info[msg.sender].referred, "You have already participated"); - 全局总参与数统计缺失:如果你要判断的是整个平台的总参与人数,而非单个用户的总推荐人数,需要单独定义全局状态变量统计,不能用单个地址的
_totalreferred字段:- 合约顶层和其他状态变量同级定义全局计数:
uint256 public totalGlobalEnterCount; - 在
enter函数确认用户是首次参与后,累加全局计数:totalGlobalEnterCount += 1; - 做全局阈值判断时直接读取该变量即可:
if (totalGlobalEnterCount > 目标值) { // 对应业务逻辑 }
- 合约顶层和其他状态变量同级定义全局计数:
内容的提问来源于stack exchange,提问作者Bobo From Florida
相关产品推荐
相关产品推荐

