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 proyectoNuevo 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
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
}

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.

Terminal
$
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.

Terminal
$
deploy

También puedes usar los botones Build y Deploy en el panel lateral izquierdo.

Compilar y desplegarCompilar 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.

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 ejecutar el archivo de prueba después de desplegar el programa, ejecuta test en la terminal.

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 pruebaEjecutar 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:

Terminal
$
solana confirm -v [TxHash]

Por ejemplo:

Terminal
$
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!():

Terminal
$
solana program close [ProgramID]

Por ejemplo:

Terminal
$
solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

Felicidades. Acabas de construir e implementar tu primer programa Solana utilizando el framework Anchor.

Is this page helpful?

Tabla de Contenidos

Editar Página