Solidity中无法将整数变量与时间变量结合的问题求助
Solidity时间计算错误解决方案:变量与时间单位结合问题
错误原因
你遇到的ParserError是因为Solidity的时间单位后缀(如days、hours)仅支持和字面量整数搭配使用,不能直接跟变量(比如你的daystohold1)拼接。编译器无法识别daystohold1 days这种写法,因此抛出语法错误。
解决方案
有两种标准写法可以实现需求:
方法1:硬编码一天的秒数(86400)
直接将天数变量乘以一天的总秒数(1天=24×60×60=86400秒),再与block.timestamp相加:
endHold = block.timestamp + daystohold1 * 86400;
方法2:用Solidity内置时间单位转秒数(更可读)
利用Solidity对字面量的时间单位支持,先获取1天对应的秒数,再乘以变量,避免硬编码数字:
endHold = block.timestamp + daystohold1 * uint256(1 days);
注:这里需要把
1 days转成uint256类型,确保和daystohold1(uint256)的类型匹配,避免隐式转换问题。
修正后的完整代码片段
function setFormula(uint256 fromPrice1, uint256 toPrice1, uint256 daystohold1, uint256 fromPrice2, uint256 toPrice2, uint256 daystohold2, uint256 fromPrice3, uint256 toPrice3, uint256 daystohold3, uint256 elsedaystohold4) public onlyOwner { if(getLastPrice <= fromPrice1 && getLastPrice <= toPrice1){ onHold = true; // 替换为以下任意一种正确写法 endHold = block.timestamp + daystohold1 * uint256(1 days); // 或者 endHold = block.timestamp + daystohold1 * 86400; } }
内容的提问来源于stack exchange,提问作者Masood
相关产品推荐
相关产品推荐

