Сразу оговорюсь, что я не разбираюсь не в программировпеии, ни в смарт-контрактах тем более, но то что вы запостили вряд ли можно назвать полноценным смарт-контрактом. В частности этот код состоит только из заданных функций, которые даже не используются сами по себе. Они просто заданы и все. Разберем поподробнее:
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;
}
Тут вроде бы все просто: адрес добавляется и удаляется из вайтлиста, но непонятно где эти функции используются.