Как восстановить историю миграций контракта CosmWasm
При миграции на другой код адрес экземпляра сохраняется. Поэтому один и тот же адрес на разных высотах может означать разные реализации.
Прочитайте историю экземпляра
В CONTRACT укажите адрес экземпляра, в GRPC — TLS gRPC wasmd с reflection. Для каждой записи проверьте operation, codeId и позицию updated. Если вернулся ключ продолжения, дочитайте следующие страницы.
grpcurl -d "{\"address\":\"$CONTRACT\",\"pagination\":{\"limit\":\"50\"}}" "$GRPC" cosmwasm.wasm.v1.Query/ContractHistory
Пусть запись instantiate указывает код 8, а последующая migrate — код 12. По позиции изменения выясните, какая реализация обслуживала вызов во время инцидента. Если миграция и вызов попали в один блок, изучите порядок транзакций.
Отделите версию кода от состояния
История позволяет восстановить изменения реализации. Для повторного запроса на старой высоте также понадобится состояние приложения на тот момент. Одного прежнего кода недостаточно для восстановления балансов и настроек контракта. github.com wasmd Query API