Безопасность. Атака timestamp dependence / time manipulation
В Solidity переменная "now" соответствует глобальной переменной "block.timestamp", которую задает майнер, поэтому ориентироваться на ее в качестве временного показателя нельзя.
Возьмем к примеру контракт:
contract Auction {
uint jackpot = 100 ether;
uint public lastBid = 1 ether;
constructor() public payable {}
function setBid() public payable {
require(msg.value >= lastBid);
if (now%20 == 0){
msg.sender.transfer(jackpot);
}
}
}
Контракт представляет собой гибрид аукциона и лотереи: участники отправляют ставки и выигрывает тот, время ставки которого удовлетворяет определенному условию. Для гарантированного выигрыша майнер может установить подходящее значение "block.timestamp" и смайнить блок со своей выигрышной транзакцией.
#timestamp #time #безопасность
Post #359
169
- 👍 1