Implementando tu primer programa de Solana
En esta sección, construirás, implementarás y probarás un programa simple de Solana (contrato inteligente) utilizando el framework Anchor. Al finalizar, habrás implementado tu primer programa en la blockchain de Solana.
El propósito de esta sección se centra en familiarizarte con Solana Playground. La guía explica un ejemplo más detallado en las secciones de Program Derived Address (PDA) y Cross-Program Invocation (CPI). Para más detalles, consulta la página Programas en Solana.
Crear proyecto Anchor
Primero, abre https://beta.solpg.io en una nueva pestaña del navegador.
-
Haz clic en el botón "Create a new project" en el panel izquierdo.
-
Ingresa un nombre para el proyecto, selecciona Anchor como framework, luego haz clic en el botón "Create".
Nuevo proyecto
Verás un nuevo proyecto creado con el código del programa en el archivo
src/lib.rs
.
Este programa básico de Solana crea una nueva cuenta y almacena un número en
ella. El programa contiene una instrucción (initialize
) que:
- Requiere un parámetro
data: u64
como entrada - Crea una nueva cuenta
- Guarda el valor del parámetro
data: u64
en los datos de la cuenta - Registra un mensaje en los logs del programa de la transacción
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 logsOk(())}}#[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}
Construir y desplegar el programa
Para construir el programa, simplemente ejecuta build
en la terminal. El
comando build
compila el programa. El bytecode del programa se almacena en una
cuenta de programa ejecutable cuando se despliega.
$build
Solana Playground actualiza la dirección en declare_id!()
. Esta dirección
representa la dirección en cadena de tu programa (ID del programa).
Después de compilar el programa, ejecuta deploy
en la terminal para
desplegar el programa en la red (devnet por defecto). El despliegue del programa
requiere asignar SOL a la cuenta on-chain que almacena el programa.
Antes del despliegue, asegúrate de tener suficiente SOL. Puedes obtener SOL de
devnet ejecutando solana airdrop 5
en la terminal de Playground o
usando el Web Faucet.
$deploy
También puedes usar los botones Build
y Deploy
en el panel lateral
izquierdo.
Compilar y desplegar
Después de desplegar el programa, puedes llamar a sus instrucciones.
Probar el programa
El código inicial incluye un archivo de prueba ubicado en
tests/anchor.test.ts
. Este archivo demuestra cómo invocar la instrucción
initialize
del programa desde el cliente.
// No imports needed: web3, anchor, pg and more are globally availabledescribe("Test", () => {it("initialize", async () => {// Generate keypair for the new accountconst newAccountKp = new web3.Keypair();// Send transactionconst 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 transactionawait pg.connection.confirmTransaction(txHash);// Fetch the created accountconst 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 ejecutar el archivo de prueba después de desplegar el programa, ejecuta
test
en la terminal.
$test
Busca en la salida la confirmación de que la prueba se ha completado con éxito.
También puedes usar el botón Test
en el panel lateral izquierdo.
Ejecutar prueba
Luego puedes ver los registros de la transacción ejecutando el comando
solana confirm -v
y especificando el hash de la transacción (firma) de la
salida de la prueba:
$solana confirm -v [TxHash]
Por ejemplo:
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
También puedes ver los detalles de la transacción en SolanaFM o Solana Explorer buscando la firma de la transacción (hash).
Recuerda actualizar la conexión del clúster (red) en el Explorador que uses para que coincida con Solana Playground. Solana Playground usa el clúster devnet por defecto.
Cerrar programa
Por último, cerrar el programa permite la recuperación completa del SOL asignado al programa en la cadena.
Puedes cerrar un programa ejecutando el siguiente comando y especificando la
dirección del programa que se encuentra en declare_id!()
:
$solana program close [ProgramID]
Por ejemplo:
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
Felicidades. Acabas de construir e implementar tu primer programa Solana utilizando el framework Anchor.
Is this page helpful?