Из моего понимания смарт-контрактов может показаться, что нет способа настроить конкретную функцию или действие для запуска через определенное время, так ли это?
Является ли единственный способ выделить непроданные токены, чтобы установить функцию, которая делает это, а затем вызвать эту функцию вручную после окончания даты окончания ICO?
Я не могу найти какой-либо реализации такого рода вещей, но наверняка это распространенный метод в ICO? Контракт OpenZeppelins «FinalizeAgent» бесполезен, так как не объясняет, как он запускается.
Спасибо.
Думали ли вы об использовании токена [mintable] ( https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC20/MintableToken.sol )? Тогда бы не было непроданных токенов, о сгорании которых можно было бы беспокоиться 😉
Но, если вы не можете этого сделать.
Тогда да, вы правы в том, что смарт-контракт не может заставить себя что-то сделать, поскольку для этого потребуется какой-то цикл. И можете ли вы представить, насколько облажался бы EVM, если бы все смарт-контракты зацикливались на ожидании события, основанного на времени? Нет буэно. Мало того, смарт-контракты не могут оплачивать расходы на газ (IIRC находится в разработке или является EIP).
Прямой ответ:
function burnTokens() public onlyOwner onlyCrowdsaleOver {
address(0).transfer(remainingTokens);
}
Вы правы, говоря, что нет способа настроить действие, которое будет запускаться после определенного периода времени само по себе. Должна быть транзакция, которая делает это.
Транзакция может вызвать такую функцию
function burnTokensAfterSale() {
if (finalized && (block.number > 6000000)) {
_transfer(0, remainingTokens)
}
}
В Эфириуме есть now
ключевое слово, равное метке времени.
Почему бы вам не использовать что-то вроде:
if(now > 1500000)
{
sendTo(0x123456789213456789123456789);
}
Джон Мерфи
Бечег