【发布时间】:2022-08-24 05:07:43
【问题描述】:
我有一个有趣的用例,我似乎无法解决。
问题:代币每天获得 X 点。我想冻结 ERC721 代币(它们有 ID)一段时间。在此期间,他们每天获得 0 分。
我有以下计算点:
uint32 public constant SECONDS_IN_DAY = 1 days;
struct UserInfo {
uint256 itemCount;
uint256 pendingPoints;
uint256 lastUpdate;
}
mapping(address => UserInfo) public userInfo;
function pending(address account) public view returns (uint256) {
uint256 pendingPoints = userInfo[account].pendingPoints + (((block.timestamp - userInfo[account].lastUpdate) / SECONDS_IN_DAY) * (userInfo[account].itemCount));
return pendingPoints;
}
modifier updatePoints(address account) {
userInfo[account].pendingPoints = pending(account);
userInfo[account].lastUpdate = block.timestamp;
_;
}
我无法弄清楚的问题:
- 如何存储每个令牌冻结多长时间,以便我可以准确确定何时减少
pending函数中的点。 - 以省油的方式执行此操作。
我已经考虑过添加一个映射,该映射包含一个时间戳和每天在
UserInfo结构中减少的数量,但是我将无法检索此信息。mapping(uint256 => uint256) perDayPointDeductions;接下来我可以尝试什么?
标签: solidity