Resumo
Programas implantados via loader-v3 podem ser atualizados quando uma autoridade de atualização é definida. Revogar a autoridade torna o programa imutável. Abrange o mecanismo de atualização, instruções de implantação e atualização do loader-v3, verificação de build e os programas de carregamento disponíveis.
Implantação de programas
Rust nativo
Implante usando a CLI da Solana com solana program deploy.
Anchor
Implante usando o framework Anchor com anchor deploy.
Atualização de programas
Para atualizar um programa, uma conta deve possuir a autoridade de atualização
(normalmente a conta que originalmente
implantou o programa). Durante a implantação ou
atualização, o novo bytecode é carregado para uma conta de buffer temporária, e
depois escrito na conta de dados do programa. Definir a autoridade de
atualização como None torna o programa imutável e impede permanentemente
futuras atualizações.
Mecanismo de atualização
Quando
UpgradeableLoaderInstruction::Upgrade
é processado, o runtime:
- Verifica se a conta do programa é gravável e pertence ao loader-v3.
- Verifica se a conta de buffer contém um estado
Buffercom a autoridade correta. - Verifica se o
upgrade_authority_addressda conta ProgramData corresponde e não éNone. - Verifica se o programa ainda não foi implantado no slot atual
(
clock.slot != slot). - Carrega e verifica os novos bytes ELF do buffer.
- Copia o novo bytecode do buffer para a conta ProgramData e zera os bytes restantes.
- Financia a conta ProgramData para isenção de aluguel.
- Drena a conta de buffer (define lamports como 0) e trunca seus dados.
- A nova versão entra em vigor no próximo slot (
deployment_slot + 1).
A própria conta Program (seu estado e o ponteiro programdata_address) não
muda durante uma atualização. Apenas o bytecode da conta ProgramData e os
metadados de slot são atualizados.
Referência de instruções do Loader-v3
O Loader-v3 (BPF Loader Upgradeable) é o carregador padrão atual para implementar programas na Solana.
| Instrução | Descrição |
|---|---|
InitializeBuffer | Define o estado de uma conta de buffer como Buffer com a autoridade especificada. Falha se já estiver inicializada. |
Write | Grava bytes no deslocamento especificado em uma conta de buffer. A autoridade deve assinar. |
DeployWithMaxDataLen | Cria um novo programa: deriva o endereço ProgramData, cria a conta ProgramData via CPI para o System Program, verifica e implanta o ELF a partir do buffer, define o estado da conta do programa e marca-a como executável. |
Upgrade | Substitui o bytecode na conta ProgramData de um programa existente a partir de um buffer. |
SetAuthority | Altera a autoridade de uma conta Buffer ou ProgramData. Definir como None em ProgramData torna o programa imutável. A autoridade do Buffer não pode ser definida como None. |
SetAuthorityChecked | Semelhante a SetAuthority, mas exige que a nova autoridade também assine a transação. |
Close | Fecha uma conta de buffer, não inicializada ou ProgramData transferindo seus lamports para um destinatário. Fechar ProgramData também grava uma marca Closed no cache do programa. Não é possível fechar um programa que foi implantado no slot atual. |
ExtendProgramChecked | Estende a alocação da conta ProgramData em bytes adicionais, financiando o aluguel extra a partir do pagador. |
Verificação de programas
A Solana suporta builds verificáveis, que permitem aos usuários confirmar que o bytecode onchain de um programa corresponde ao seu código-fonte público. O framework Anchor fornece suporte integrado para builds verificáveis.
Para verificar o status de verificação de um programa implantado, pesquise seu ID de programa no Solana Explorer, ou use o Solana Verifiable Build CLI da Ellipsis Labs para verificar programas onchain de forma independente.
Programas de carregamento
| Loader | Endereço | Atualizável | Descrição |
|---|---|---|---|
| Native Loader | NativeLoader1111111111111111111111111111111 | Apenas via atualização de software do validador | Possui builtins (Sistema, Voto, Stake) e outros loaders |
| BPF Loader (v1) | BPFLoader1111111111111111111111111111111111 | Não (gerenciamento do loader desativado) | Programas legados |
| BPF Loader (v2) | BPFLoader2111111111111111111111111111111111 | Não (gerenciamento do loader desativado) | Programas legados |
| BPF Loader Upgradeable | BPFLoaderUpgradeab1e11111111111111111111111 | Sim, se a autoridade de atualização estiver definida | Possui todos os programas recém-implantados |
Is this page helpful?