WEB3DEV

Cover image for Como Fazer um Programa Solana Imutável
Isabela Curado Nehme
Isabela Curado Nehme

Posted on

Como Fazer um Programa Solana Imutável

Visão Geral

Programas são os equivalentes na Solana aos contratos inteligentes. Os Programas Solana são mutáveis ​​por padrão, pois podem ser atualizados pela “autoridade de atualização” do Programa, uma chave pública definida pelo implantador do Programa. A imutabilidade em um Programa Solana é uma prática recomendada padrão, pois garante aos usuários que um programa nunca será atualizado ou modificado por um malfeitor. Neste guia, você implantará um Programa Anchor local da Solana e aprenderá como torná-lo imutável para sempre.

TLDR ou Resumo

Torne qualquer Programa Solana imutável removendo a autoridade de atualização com este comando:


solana program set-upgrade-authority <PROGRAM_ID> -u <YOUR_QUICKNODE_ENDPOINT> --final

Enter fullscreen mode Exit fullscreen mode

AVISO: este processo é irreversível. Depois de remover a autoridade de atualização, o programa nunca mais poderá ser alterado.

O Que Você Vai Fazer

  • Executar um validador local;
  • Implantar um Programa Solana em seu host local usando Anchor;
  • Remover a autoridade de atualização de um Programa Solana.

O Que Você Vai Precisar

Ou:

Implantar um Programa Solana em seu Host Local Usando Anchor

Nesta seção, você implantará um Programa Solana em seu host local usando Anchor (você pode usar as mesmas etapas para implantar um Programa Solana na Devnet - rede de desenvolvimento - ou na rede principal).

Criar um Novo Projeto

NOVO NO ANCHOR?

Anchor é um framework de desenvolvimento popular para a construção de Programas em Solana. Para começar, confira nosso Guia de Introdução ao Anchor.

Crie um novo diretório de projeto em seu terminal com o seguinte:


mkdir immutable-demo
cd immutable-demo

Enter fullscreen mode Exit fullscreen mode

Crie um novo projeto Anchor usando o seguinte comando:


anchor init solana-immutable-program

Enter fullscreen mode Exit fullscreen mode

Como estamos apenas testando como atualizar a autoridade de um programa, não alteraremos o programa padrão “Inicialize” (inicializar) dentro de lib.rs.

Atualizar a Configuração do Programa

Antes de implantar seu programa, precisaremos atualizar a configuração do programa. Abra o arquivo Anchor.toml e atualize o campo provider.cluster para localhost.


[
provider
]
cluster = "Localnet"
wallet = "~/.config/solana/id.json"

Enter fullscreen mode Exit fullscreen mode

Verifique novamente se o caminho para sua carteira está correto. Você pode usar qualquer chave .json (confira nosso Guia sobre como criar endereços Vanity na Solana).

Vá em frente e construa seu programa. No seu terminal, digite:


cd solana-immutable-program
anchor build

Enter fullscreen mode Exit fullscreen mode

A primeira compilação pode levar alguns minutos. Seja paciente.

Você deverá ver a seguinte saída:


  Compiling anchor-lang v0.26.0
  Compiling solana-immutable-program v0.1.0 (~/immutable-demo/solana-immutable-program/programs/solana-immutable-program)
   warning: unused variable: `ctx`
       --> programs/solana-immutable-program/src/lib.rs:9:23
       |
       9 |     pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
       |                       ^^^ help: if this is intentional, prefix it with an underscore: `_ctx`
       |
       = note: `#[warn(unused_variables)]` on by default

       warning: `solana-immutable-program` (lib) generated 1 warning
   Finished release [optimized] target(s) in 1m 22s

Enter fullscreen mode Exit fullscreen mode

Não se preocupe com os avisos, pois eles não terão impacto no que estamos demonstrando aqui.

Bom trabalho. Agora você tem um programa compilado que pode ser implantado no host local.

Iniciar um Validador Local

Antes de implantar seu programa, precisaremos iniciar um validador local. Em um terminal separado, inicie um validador local usando o seguinte comando:


solana-test-validator -r

Enter fullscreen mode Exit fullscreen mode

O sinalizador -r redefinirá o livro-razão para genesis, se existir (em vez de retomar a partir de uma instância anterior).

Para obter mais informações sobre como executar um validador local, verifique a documentação da CLI Solana ou você pode entrar no menu de ajuda digitando o seguinte comando em seu terminal:


solana-test-validator --help

Enter fullscreen mode Exit fullscreen mode

Você deverá ver seu validador começar a produzir blocos:

https://www.quicknode.com/guides/assets/images/1-9a74c441226064ed3084cf706011df0d.png

Defina a Configuração da Sua CLI Solana

Antes de implantar seu programa, você precisará definir a configuração da CLI Solana como host local e a mesma carteira referenciada em Anchor.toml. Você pode definir a configuração da CLI Solana usando o seguinte comando:


solana config set --url localhost --keypair ~/.config/solana/id.json

Enter fullscreen mode Exit fullscreen mode

Você deverá ver a seguinte saída:


Config File: ~/.config/solana/cli/config.yml
RPC URL: http://localhost:8899
WebSocket URL: ws://localhost:8900/ (computed)
Keypair Path: ~/.config/solana/id.json
Commitment: confirmed

Enter fullscreen mode Exit fullscreen mode

Finalmente, vamos certificar-nos de que sua carteira possui algum SOL em seu cluster local. Você pode obter algum SOL por airdrop usando o seguinte comando:


solana airdrop 100

Enter fullscreen mode Exit fullscreen mode

Observação: os airdrops de host local não são limitados, como os servidores de rede de desenvolvimento e rede de testes, portanto, você pode lançar mais de 1 ou 2 SOL por vez.

Devemos estar prontos para ir! Vamos implantar nosso programa no host local.

Implantar o Programa

Com seu validador local em execução, é possível implantar seu programa usando o seguinte comando:


anchor deploy

Enter fullscreen mode Exit fullscreen mode

Você deverá ver a seguinte saída:


quicknode solana-immutable-program % anchor deploy
Deploying workspace: http://localhost:8899
Upgrade authority: ~/.config/solana/id.json
Deploying program "solana-immutable-program"...
Program path: <PATH>/solana-immutable-program/target/deploy/solana-immutable-program.so...
Program Id: TESTxAHSs72DNFzhxmWhD9cVJjYqcgH2kHuDsq2NzEz
Deploy success

Enter fullscreen mode Exit fullscreen mode

Bom trabalho! Você implantou seu programa com sucesso no host local. Certifique-se de copiar o ID do Programa, pois precisaremos dele na próxima etapa.

Remover a Autoridade de Atualização de um Programa Solana

Nosso Programa é atualmente mutável. Para alterá-lo para ser imutável indefinidamente, você pode remover a autoridade de atualização usando o seguinte comando (certifique-se de substituir o ID do Programa pelo que você copiou na etapa anterior):


solana program set-upgrade-authority <PROGRAM_ID> -u localhost --final

Enter fullscreen mode Exit fullscreen mode

Algumas notas sobre nosso comando:

  • PROGRAM_ID é o ID do programa que você deseja tornar imutável.
  • -u localhost define o URL do cluster em que estamos trabalhando para localhost (é o mesmo que o sinalizador --url localhost). Você não precisa definir o URL se já tiver definido a configuração da CLI Solana como localhost. No entanto, gostamos de fazer isso ao efetuar alterações importantes como essa para garantir que estamos trabalhando no cluster correto.
  • --final é o sinalizador que remove a autoridade de atualização (torna o programa imutável).

Você deverá ver a seguinte saída:


Account Type: Program
Authority: none

Enter fullscreen mode Exit fullscreen mode

Incrível! Bom trabalho. Você removeu com sucesso a autoridade de atualização de um Programa Solana e o tornou imutável. Se quiser verificar se o programa é imutável, você pode tentar atualizá-lo usando o seguinte comando:


anchor upgrade --program-id <PROGRAM_ID> <PATH_TO/solana-immutable-program>

Enter fullscreen mode Exit fullscreen mode

Certifique-se de usar o mesmo ID do Programa usado na etapa anterior e o caminho correto para o seu programa.

Você deverá ver a seguinte saída:


Error: Program <PROGRAM_ID> is no longer upgradeable
There was a problem deploying: Output { status: ExitStatus(unix_wait_status(256)), stdout: "", stderr: "" }.

Enter fullscreen mode Exit fullscreen mode

Você também pode verificar a autoridade do seu programa usando Solana Explorer. Substitua seu Program_ID no seguinte URL e abra-o em seu navegador:


https://explorer.solana.com/address/<PROGRAM_ID>?cluster=custom&customUrl=http://localhost:8899

Enter fullscreen mode Exit fullscreen mode

Você deverá ver que o campo “ Upgradeable” (atualizável) do programa está definido como “No” (não):

https://www.quicknode.com/guides/assets/images/0-1e4c48c97832116b014fa29e353a109e.png

Implantando na Rede Principal com QuickNode

Quando estiver pronto, você pode aplicar as mesmas etapas ao seu Programa na rede principal. Tome cuidado! Depois de remover a autoridade de atualização de um programa, ela se torna imutável. Você não poderá atualizar o programa depois que a autoridade de atualização for removida.

A implantação de programas na rede principal é um processo intensivo – se você deseja tempos de resposta 8x mais rápidos, pode deixar o trabalho pesado conosco. Veja por que mais de 50% dos projetos em Solana escolhem o QuickNode e inscreva-se para uma conta gratuita aqui. Para usar seu ponto de extremidade do QuickNode com este guia, basta substituir localhost pelo seu ponto de extremidade do QuickNode nos sinalizadores -u and --url acima, por exemplo:

solana program set-upgrade-authority <PROGRAM_ID> -u <YOUR_QUICKNODE_ENDPOINT> --final
Enter fullscreen mode Exit fullscreen mode

Conclusão

Bom trabalho! Você implantou com sucesso um programa Solana imutável no host local. Você pode desligar seu validador local digitando ctrl (ou cmd) + c no terminal do validador.

Tem dúvidas? Ou apenas deseja compartilhar aquilo em que está trabalhando? Escreva-nos no Discord do QuickNode ou no Twitter e teremos prazer em ajudá-lo!

Nós <3 Feedbacks!

Se você tiver algum comentário ou dúvida sobre este guia, informe-nos aqui! Adoraríamos ouvir de você!

Este artigo foi escrito por Aaron Milano, e traduzido por Isabela Curado Nehme. Seu original pode ser lido aqui.

Top comments (0)