Programas

Qualquer desenvolvedor pode escrever e implantar programas na blockchain Solana. Programas (conhecidos como contratos inteligentes em outros protocolos) servem como a base para atividades na cadeia, alimentando desde DeFi e NFTs até mídia social e jogos.

Fatos

Ficha Informativa

  • Programas processam instruções tanto de usuários finais quanto de outros programas
  • Todos os programas são sem estado (stateless): todos os dados com os quais eles interagem são armazenados em contas separadas que são transmitidas por meio de instruções
  • Os programas em si são armazenados em contas marcadas como executable (executáveis)
  • Todos os programas são de propriedade do BPF Loaderopen in new window executados pelo Solana Runtimeopen in new window
  • Os desenvolvedores geralmente escrevem programas em Rust ou C++, mas podem escolher qualquer linguagem que compile para o backend BPFopen in new window do LLVMopen in new window
  • Todos os programas têm um único ponto de entrada onde ocorre o processamento de instruções (ou seja, process_instruction); os parâmetros sempre incluem:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

Mergulho Profundo

Ao contrário da maioria das outras blockchains, a Solana separa completamente o código dos dados. Todos os dados com os quais os programas interagem são armazenados em contas separadas e passados como referências por meio de instruções. Esse modelo permite que um único programa genérico opere em várias contas sem exigir implantações adicionais. Exemplos comuns desse padrão são vistos nos programas Nativos e nos programas SPL.

Programas Nativos & Biblioteca de Programas da Solana (Solana Program Library, ou SPL)

A Solana vem equipada com vários programas que servem como blocos de construção principais para interações na cadeia. Esses programas são divididos em Programas Nativosopen in new window e Programas da Biblioteca de Programas da Solana (SPL)open in new window.

Os Programas Nativos fornecem a funcionalidade-base que é necessária para operar validadores. Entre esses programas, o mais conhecido é o Programa do Sistema (System Program)open in new window, que é responsável por administrar novas contas e transferir SOL entre duas partes.

Os Programas SPL suportam várias atividades na cadeia, incluindo criação, troca e empréstimo de tokens, além de gerar pools de staking e manter um serviço de nome na cadeia (Solana Name Service, ou SNS). O Programa de Tokens SPL (SPL Token Program)open in new window pode ser invocado diretamente via CLI, enquanto outros, como o Programa de Conta de Tokens Associada (Associated Token Account Program)open in new window são normalmente compostos por programas personalizados.

Escrevendo Programas

Os programas são mais comumente desenvolvidos com Rust ou C++, mas podem ser desenvolvidos com qualquer linguagem que compile para o backend BPF do LLVM. Iniciativas recentes da Neon Labsopen in new window e da Solangopen in new window possibilitam a compatibilidade com a EVMopen in new window e permitem que os desenvolvedores escrevam programas em Solidity.

A maioria dos programas baseados em Rust adere à seguinte arquitetura:

ArquivoDescrição
lib.rsRegistro de módulos
entrypoint.rsPonto de entrada para o programa
instruction.rsAPI do programa, desserializa dados de instrução
processor.rsLógica do programa
state.rsObjetos de programa, desserializa o estado
error.rsErros específicos do programa

Recentemente, o Anchoropen in new window surgiu como um framework popular para o desenvolvimento de programas. O Anchor é um framework opinativo, semelhante ao Ruby on Rails, que reduz o boilerplate e simplifica o processo de desserialização para o desenvolvimento em Rust.

Os programas são geralmente desenvolvidos e testados no Localhost e na Devnet (Rede de Desenvolvimento) antes de serem implantados na Testnet (Rede de Testes) ou na Mainnet (Rede Principal). A Solana suporta os seguintes ambientes:

Ambiente de ClusterURL de Conexão RPC
Mainnet-betahttps://api.mainnet-beta.solana.com
Testnethttps://api.testnet.solana.com
Devnethttps://api.devnet.solana.com
LocalhostPorta padrão: 8899 (exemplos: http://localhost:8899, http://192.168.1.88:8899)

Depois de implantados em um ambiente, os clientes podem interagir com programas na cadeia por meio de conexões RPCopen in new window com o respectivo cluster.

Implantando Programas

Os desenvolvedores podem implantar seus programas por meio da CLIopen in new window:

solana program deploy <PROGRAM_FILEPATH>

Quando um programa é implantado, ele é compilado em um objeto compartilhado ELFopen in new window (contendo o bytecode BPF) e carregado no cluster Solana. Os programas residem em contas (assim como tudo na Solana), exceto que essas contas são marcadas como executable e atribuídas ao BPF Loader. O endereço desta conta é referido como program_id e é usado para referenciar o programa em todas as transações futuras.

A Solana suporta vários BPF Loaders, sendo o mais recente o Upgradable BPF Loaderopen in new window. O BPF Loader é responsável por administrar as contas do programa e disponibilizá-las aos clientes por meio do program_id. Todos os programas têm um único ponto de entrada onde o processamento de instruções ocorre (ou seja, process_instruction) e os parâmetros sempre incluem:

  • program_id: pubkey
  • accounts: array,
  • instruction_data: byte array

Uma vez chamados, os Programas são executados pelo tempo de execução (Solana Runtime).

Outros Recursos

Last Updated:
Contributors: Daniel Cukier