Как я могу закодировать контракт краудсейла для отправки всех непроданных токенов на определенный адрес?

Из моего понимания смарт-контрактов может показаться, что нет способа настроить конкретную функцию или действие для запуска через определенное время, так ли это?

Является ли единственный способ выделить непроданные токены, чтобы установить функцию, которая делает это, а затем вызвать эту функцию вручную после окончания даты окончания ICO?

Я не могу найти какой-либо реализации такого рода вещей, но наверняка это распространенный метод в ICO? Контракт OpenZeppelins «FinalizeAgent» бесполезен, так как не объясняет, как он запускается.

Спасибо.

Ответы (3)

Думали ли вы об использовании токена [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);
    }
Но разве это не должно быть внутри функции, которая будет вызываться после окончания краудсейла? Является ли вызов функции через адрес владельца приемлемым способом реализации этого? Спасибо за вашу помощь.
ethereum.org/crowdsale Посмотрите на пример, здесь проверка вызывается модификатором каждый раз при вызове функции.