Atualizando a Cadeia
Iniciar a Rede
Inicie a rede e acione a atualização após a proposta ter sido aprovada.
# iniciar um nó completo da aplicação gaia
$ crossfid start
# configure o cli
$ crossfid config trust-node true
$ crossfid config chain-id testing
# crie uma proposta de atualização de governança
$ crossfid tx gov submit-proposal software-upgrade
\
--title
--description
\
--from --upgrade-height --deposit 10000000mpx
# assim que a proposta for aprovada, você pode consultar o plano pendente
$ crossfid query upgrade plan
Realizando uma atualização
Presumindo que a proposta seja aprovada, a cadeia irá parar na altura de atualização dada.
Você pode parar e iniciar o binário original quantas vezes quiser, mas ele se recusará a rodar após a altura da atualização.
Precisamos de um novo binário com o manipulador de atualização instalado. Os logs devem se parecer com isso:
E[2019-11-05|12:44:18.913] ATUALIZAÇÃO "
" NECESSÁRIA na altura: : módulo=main
E[2019-11-05|12:44:18.914] FALHA DE CONSENSO!!!
...
Note que o processo ficará suspenso indefinidamente (não sai para evitar loops de reinício). Portanto, você deve matar o processo manualmente e substituí-lo por um novo binário. Faça isso agora com Ctrl+C
ou killall crossfid
.
Em gaia/app/app.go
, após upgrade.Keeper
ser inicializado e configurado no app, defina o Handler
de atualização correspondente com o
correto:
app.upgradeKeeper.SetUpgradeHandler("
", func(ctx sdk.Context, plan upgrade.Plan) {
// lógica personalizada após a execução da atualização da rede
})
Você receberá um pânico em qualquer erro - isso causaria a falha da atualização se a migração não pudesse ser executada, e nenhum nó avançaria - permitindo uma recuperação manual. Se ignorássemos os erros, então prosseguiríamos com uma atualização incompleta e teríamos um tempo muito difícil para recuperar o estado correto.
Compilar o Novo Binário
Agora, compile o novo binário e execute o código atualizado para completar a atualização:
# crie um novo binário do gaia com o manipulador de atualização adicionado
$ make install
# Reinicie a cadeia usando o novo binário. Você deve ver a cadeia retomar a partir
# da altura de atualização:
# `I[2019-11-05|12:48:15.184] aplicando atualização
na altura: módulo=main`
$ crossfid start
# verifique se não há plano pendente
$ crossfid query upgrade plan
# verifique se você pode consultar o cabeçalho do bloco da atualização concluída
$ crossfid query upgrade applied