Atualizando a Cadeia
Inicie a rede
Inicie a rede e acione a atualização após a proposta ter sido aprovada.
# inicie uma aplicação gaia full-node
$ crossfid start
# configure o CLI
$ crossfid config trust-node true
$ crossfid config chain-id testing
# crie uma proposta de governança de upgrade
$ crossfid tx gov submit-proposal software-upgrade
\
--title
--description
\
--from --upgrade-height --deposit 10000000mpx
# uma vez que a proposta seja aprovada você pode consultar o plano pendente
$ crossfid query upgrade plan
Realizando uma atualização
Assumindo que a proposta seja aprovada, a cadeia parará na altura de upgrade informada.
Você pode parar e iniciar o binário original quantas vezes quiser, mas ele se recusará a ser executado após a altura de upgrade.
Precisamos de um novo binário com o upgrade handler instalado. Os logs devem parecer algo como:
E[2019-11-05|12:44:18.913] UPGRADE "
" NEEDED at height: : module=main
E[2019-11-05|12:44:18.914] CONSENSUS FAILURE!!!
...
Observe que o processo ficará pendurado indefinidamente (não sai para evitar loops de reinicialização). Portanto, você deve encerrar 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 definido no app, configure o correspondente Handler de upgrade com o correto:
app.upgradeKeeper.SetUpgradeHandler("
", func(ctx sdk.Context, plan upgrade.Plan) {
// custom logic after the network upgrade has been executed
})
Você receberá um pânico em qualquer erro - isso faria a atualização falhar 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 muita dificuldade para recuperar o estado correto.
Compile o Novo Binário
Agora, compile o novo binário e execute o código atualizado para concluir a atualização:
# crie um novo binário do gaia com o upgrade handler adicionado
$ make install
# Reinicie a cadeia usando o novo binário. Você deve ver a cadeia retomar a partir de
# a altura do upgrade:
# `I[2019-11-05|12:48:15.184] aplicando atualização
na altura: module=main`
$ crossfid start
# verifique que não há nenhum plano pendente
$ crossfid query upgrade plan
# verifique se pode consultar o cabeçalho do bloco da atualização concluída
$ crossfid query upgrade applied