Despliega tu primer programa de Solana
Construye, despliega y prueba tu primer programa en la blockchain de Solana utilizando el framework Anchor. Esta guía te ayudará a familiarizarte más con Solana Playground y te preparará para usar Program Derived Address (PDA) y Cross Program Invocation (CPI).
Crear proyecto Anchor
- Abre Solana Playground en tu navegador web
- En el panel izquierdo, haz clic en + Create a new project
- Ingresa un Project name (nombre del proyecto)
- Selecciona Anchor (Rust) como framework
- Haz clic en Create
Nuevo proyecto
Se abrirá el archivo fuente src/lib.rs
. Contiene una estructura llamada
Initialize
, que hace lo siguiente:
- Recibe un parámetro requerido llamado
data: u64
- Crea una nueva cuenta
- Guarda el valor de
data: u64
en la nueva cuenta - Añade un mensaje a los registros 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}
Compilar y desplegar el programa
- Compila el código del programa
$build
Tu ID de programa, definido en
declare_id!()
, ahora será actualizado.
- Añade SOL a tu billetera (Opcional)
Desplegar un programa requiere SOL en la cuenta on-chain del programa. Si es necesario, añade SOL a tu billetera antes de proceder al paso 3.
- Despliega el programa en la red
$deploy
Cuando se despliega, el bytecode del programa se almacena en una program account ejecutable.
Nota: Si lo prefieres, puedes usar los botones Build y Deploy en el panel izquierdo, como se muestra en la captura de pantalla a continuación.
Build and Deploy
Probar el programa
- Abre el archivo de prueba llamado
tests/anchor.test.ts
. Este archivo demuestra cómo invocar la estructurainitialize
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));});});
- Ejecuta el archivo de prueba
$test
- Guarda el hash de la transacción (
TxHash
) incluido en la salida
(En el ejemplo anterior, el hash de la transacción es
3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
.)
Nota: Si lo prefieres, puedes usar el botón Test
en el panel izquierdo.
Ejecutar prueba
- Ejecuta
solana confirm -v [TxHash]
para ver los registros de la transacción
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
- Ver los detalles de la transacción
Abre SolanaFM o Solana Explorer y busca el hash de la transacción.
Solana Explorer: Configura el cluster de red a devnet
, para que coincida
con el de Solana Playground.
Cerrar el programa
Cierra el programa para recuperar el SOL asignado al programa en la cadena. Para
hacerlo, ejecuta solana program close [ProgramID]
, usando la dirección del
programa almacenada en la macro declare_id!()
.
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
Los programas solo pueden ser cerrados o actualizados por una cuenta con autoridad de actualización. Tu cartera de Playground automáticamente se convierte en la autoridad de actualización para cada programa cuando se despliega. Si se revoca la autoridad de actualización, el programa se vuelve inmutable.
¡Felicidades! Has construido y desplegado tu primer programa de Solana usando Anchor.
Próximos pasos
Ahora que has desplegado tu primer programa, estás listo para explorar direcciones derivadas de programas e invocación entre programas.
Is this page helpful?