Читал, что советуют делать по отдельному краудсейл контракту на каждый этап ICO (preSale, preICO, ICO)
Насколько это необходимо и целесообразно?
На разных этапах разные требования. Проще (в том числе для аудита и тестирования) разнести эту логику в разные контракты, чтобы сам контракт был меньше и проще
Как управлять сменой таких краулсейл контрактов, объявлять инвесторам, мол, с такой то даты отправлять эфиры не на этот адрес, а на другой?
Инвесторы же через сайт узнают, куда кидать эфир. Вот на сайте актуальный и пропишете
Зачем в некоторых примеров краудсейл контрактов пишут что то вроде ERC20 token = new MyToken(), ведь таким образом владельцем токена становится краудсейл контракт, и ты теряешь всякую возможность управления контрактом токена, разве не правильней передавать в конструктор краудсейл контракта адрес токена и уже его там использовать?
Если токен mintable, то контракт crowdsale должен иметь права на выпуск токенов. Обычно, после завершения текущего раунда происходит вызов transferOwnership наадрес организаторов
Как можно автоматически сжечь токены по окончанию ICO, типа заложить в функционал крайдсейл контракта выполнение какой то процедуры по событию, насколько я знаю solidity такой возможностью не располагает и сжигание в любом случае должен кто-то инициировать?
Да, лучше это сделать отдельным вызовом, доступным только организаторам, по окончании распродажи. Но можно и добавить логику по сжиганию при приеме эфира (например если текущим переводом достигается хардкап, то сжигаем остаток)