Implantando Seu Primeiro Programa Solana

Nesta seção, você vai construir, implantar e testar um programa Solana simples (smart contract) usando o framework Anchor. Ao final, você terá implantado seu primeiro programa na blockchain Solana.

O objetivo desta seção é familiarizá-lo com o Solana Playground. O guia percorre um exemplo mais detalhado nas seções de Program Derived Address (PDA) e Cross-Program Invocation (CPI). Para mais detalhes, consulte a página Programas na Solana.

Criar Projeto Anchor

Primeiro, abra https://beta.solpg.io em uma nova aba do navegador.

  • Clique no botão "Create a new project" no painel do lado esquerdo.

  • Digite um nome para o projeto, selecione Anchor como framework e clique no botão "Create".

Novo ProjetoNovo Projeto

Você verá um novo projeto criado com o código do programa no arquivo src/lib.rs.

Este programa Solana básico cria uma nova conta e armazena um número nela. O programa contém uma instrução (initialize) que:

  • Requer um parâmetro data: u64 como entrada
  • Cria uma nova conta
  • Salva o valor do parâmetro data: u64 nos dados da conta
  • Registra uma mensagem nos logs do programa da transação
lib.rs
use anchor_lang::prelude::*;
// This is your program's public key and it will update
// automatically when you build the project.
declare_id!("11111111111111111111111111111111");
#[program]
mod hello_anchor {
use super::*;
pub fn initialize(ctx: Context<Initialize>, data: u64) -> Result<()> {
ctx.accounts.new_account.data = data;
msg!("Changed data to: {}!", data); // Message will show up in the tx logs
Ok(())
}
}
#[derive(Accounts)]
pub struct Initialize<'info> {
// We must specify the space in order to initialize an account.
// First 8 bytes are default account discriminator,
// next 8 bytes come from NewAccount.data being type u64.
// (u64 = 64 bits unsigned integer = 8 bytes)
#[account(
init,
payer = signer,
space = 8 + 8
)]
pub new_account: Account<'info, NewAccount>,
#[account(mut)]
pub signer: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[account]
pub struct NewAccount {
data: u64
}

Compilar e implantar o programa

Para compilar o programa, simplesmente execute build no terminal. O comando build compila o programa. O bytecode do programa é então armazenado em uma conta de programa executável quando implantado.

Terminal
$
build

O Solana Playground atualiza o endereço em declare_id!(). Este endereço representa o endereço on-chain do seu programa (ID do programa).

Após compilar o programa, execute deploy no terminal para implantar o programa na rede (devnet por padrão). A implantação do programa requer alocar SOL para a conta on-chain que armazena o programa.

Antes da implantação, certifique-se de ter SOL suficiente. Você pode obter SOL na devnet executando solana airdrop 5 no terminal do Playground ou usando o Web Faucet.

Terminal
$
deploy

Você também pode usar os botões Build e Deploy no painel lateral esquerdo.

Compilar e ImplantarCompilar e Implantar

Após implantar o programa, você pode chamar suas instruções.

Testar o programa

O código inicial inclui um arquivo de teste localizado em tests/anchor.test.ts. Este arquivo demonstra como invocar a instrução initialize no programa a partir do cliente.

anchor.test.ts
// No imports needed: web3, anchor, pg and more are globally available
describe("Test", () => {
it("initialize", async () => {
// Generate keypair for the new account
const newAccountKp = new web3.Keypair();
// Send transaction
const data = new BN(42);
const txHash = await pg.program.methods
.initialize(data)
.accounts({
newAccount: newAccountKp.publicKey,
signer: pg.wallet.publicKey,
systemProgram: web3.SystemProgram.programId
})
.signers([newAccountKp])
.rpc();
console.log(`Use 'solana confirm -v ${txHash}' to see the logs`);
// Confirm transaction
await pg.connection.confirmTransaction(txHash);
// Fetch the created account
const newAccount = await pg.program.account.newAccount.fetch(
newAccountKp.publicKey
);
console.log("On-chain data is:", newAccount.data.toString());
// Check whether the data on-chain is equal to local 'data'
assert(data.eq(newAccount.data));
});
});

Para executar o arquivo de teste após implantar o programa, execute test no terminal.

Terminal
$
test

Procure por uma saída que confirme que o teste foi aprovado com sucesso.

Você também pode usar o botão Test no painel lateral esquerdo.

Executar TesteExecutar Teste

Você pode então visualizar os logs da transação executando o comando solana confirm -v e especificando o hash da transação (assinatura) da saída do teste:

Terminal
$
solana confirm -v [TxHash]

Por exemplo:

Terminal
$
solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc

Você também pode visualizar os detalhes da transação no SolanaFM ou Solana Explorer pesquisando pela assinatura da transação (hash).

Lembre-se de atualizar a conexão do cluster (rede) no Explorer que você usa para corresponder ao Solana Playground. O Solana Playground usa o cluster devnet por padrão.

Fechar o programa

Por fim, fechar o programa permite a recuperação total do SOL alocado ao programa na blockchain.

Você pode fechar um programa executando o seguinte comando e especificando o endereço do programa encontrado em declare_id!():

Terminal
$
solana program close [ProgramID]

Por exemplo:

Terminal
$
solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

Parabéns. Você acabou de construir e implantar seu primeiro programa Solana usando o framework Anchor.

Is this page helpful?

Índice

Editar Página