Можно ли использовать флаг сброса при каждой компиляции и миграции Truffle при использовании клиента TestRPC?

Я только что провел довольно много времени, ломая голову, пытаясь понять, почему моя миграция трюфелей ничего не дала при попытке развернуть на клиенте TestRPC. Он просто продолжал говорить «используя сетевой testrpc» без каких-либо последующих сообщений о состоянии. Я попытался снова запустить компиляцию, несколько раз в течение сеанса отладки, и ошибок не было.

Затем я выполнил миграцию с флагом «--reset» и обнаружил, что новый файл смарт-контракта, который я добавил, не был найден во время миграции («не определен». Все еще работаю над этим, так как код и контракт есть ).

Чтобы сэкономить время в будущем, не вредно ли всегда включать флаг --reset при компиляции и переносе Truffle, по крайней мере, при использовании клиента TestRPC?

Каковы недостатки использования флага «--reset» во времени или газе при выполнении миграции в основной сети и во времени в тестовой сети (при условии, что они есть)?

Заставляет ли флаг "--reset" компилировать медленнее, подобно "очистке" проекта C++, что вызывает необходимость повторной компиляции всех исходных файлов в объектные файлы? Вызывает ли миграция необходимость «повторно публиковать» весь код смарт-контракта в сети развертывания, а не только измененные смарт-контракты (то есть — только разность)?

Ответы (1)

Флаг --resetзаставит снова запустить все ваши сценарии миграции. Компиляция, если некоторые контракты изменились. Вы должны снова оплатить газ за всю миграцию. Для ganache/testrpc это не должно быть проблемой, это просто дополнительная задержка. Но для развертывания в общедоступной сети: mainnet, rinkeby, ropsten и т. д. может быть очень раздражающим ожидание крошечных изменений.

Флаг --allзаставит перекомпилировать все ваши контракты. Даже если они не изменились. Это больше времени на компиляцию всех ваших контрактов, а после этого ему придется снова запускать все ваши деплой-скрипты.

Я обнаружил, что truffle иногда не может подтвердить, что контракт был изменен, и не будет его снова компилировать, а также не запускать сценарии развертывания. Даже с обоими флагами --allи --resetне получится. Если ничего не помогает, вы можете удалить build/каталог. Это приведет к повторной компиляции всех ваших контрактов и повторному запуску всех ваших сценариев развертывания.

Спасибо. Думаю, некоторые вещи никогда не меняются. Это тот же набор процедур, каждая из которых становится все более экстремальной, вы должны делать почти со всеми языками с шагом компиляции, когда что-то «просто кажется неправильным».