【发布时间】:2022-01-02 14:33:30
【问题描述】:
我写了一个省钱的智能合约,其中用户存入 ETH 并定义他们希望在合约中保留该 ETH 的时间,例如:用户 X 存入 2ETH 一年,他们只能在该期限之后提取他们的 ETH .
但是solidity linter 一直告诉我,我不应该依赖block.timestamp 来做决定。
这是我用来将每个地址映射到余额和结束时间的Saving 结构:
struct Saving {
uint256 balance;
uint256 endTime;
}
这是我的函数修饰符,我要求提款时间大于我在存款时存储的 endTime:
modifier onlyValidTimeWithdraw() {
require(
block.timestamp > balances[msg.sender].endTime,
"You cannot withdraw yet"
);
_;
}
在做了一些研究后,我发现我的合约中不应该有时间相关的条件,因为矿工可以操纵时间戳,但我没有找到任何替代方案。
【问题讨论】: