function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override
{
super._beforeTokenTransfer(from, to, amount);
if (!whiteList[from]) {
require(timeLimit(from) >= 172800, "Hodl period is not reached, wait pls.");
}
lastIncomes[to] = block.timestamp;
}
Как вы сказали если адрес в вайтлисте, то проверяется как давно были получены токены. С момента получения токенов (lastIncomes[to]) должно пройти 48 часов. Это кстати странно, потому что в комментарии выше пишут про 24 часа:
Coin Hodl can be sold 24 hours after purchase
function timeLimit(address _address) public view returns(uint) {
uint difference = block.timestamp - lastIncomes[_address];
return difference;
}
Эта функция вызывается в предыдущей функции и здесь подсчитывается разница между временем текущего блока и значением lastIncomes, которое было объяснено выше как время получения токенов.
Честно говоря, я не понимаю почему в функции _beforeTokenTransfer используется эта строчка:
lastIncomes[to] = block.timestamp;
Это присвоение значения текущего блока времени получения токена, но по такой логике нужный timeLimit никогда не будет достигнут и эта функция никогда не вернет нужное значение для вывода токенов.
Далее:
function addToWhiteList(address _address) onlyOwner public {
whiteList[_address] = true;
}
function removeFromWhiteList(address _address) onlyOwner public {
whiteList[_address] = false;
}