Introducción al desarrollo en Solana (usando sólo tu navegador)

Para esta guía rápida de "hola mundo", utilizaremos Solana Playground, un IDE basado en el navegador para desarrollar y desplegar nuestro programa en Solana. Para utilizarlo, NO tienes que instalar ningún programa en tu ordenador. Simplemente abre Solana Playground en el navegador de su elección, y estará listo para escribir y desplegar programas en Solana.

Lo que aprenderás #

  • cómo empezar con Solana Playground
  • cómo crear una billetera de Solana en el Playground
  • cómo escribir un programa de Solana básico en Rust
  • cómo compilar e implementar un programa de Solana en Rust
  • cómo interactuar con un programa usando JavaScript

Usando Solana Playground #

Solana Playground es una aplicación basada en navegador que te permitirá escribir, compilar y desplegar programas en Solana. Todo desde tu navegador. Sin instalaciones necesarias.

Es un gran recurso para desarrolladores comenzando con el desarrollo en Solana, especialmente en Windows.

Importar nuestro proyecto de ejemplo #

En una nueva pestaña de su navegador, abra nuestro ejemplo proyecto "Hola Mundo" en Solana Playground

A continuación, importa el proyecto a tu espacio de trabajo local haciendo clic en el icono "Import" y nombrando el proyecto hola_mundo.

Info

Si no importas el programa a tu Solana Playground, entonces no podrás realizar cambios en el código. Pero aun así podrá compilar y desplegar el código en un clúster de Solana.

Crear una billetera de Playground #

Normalmente al desarrollar localmente, necesitarás crear una billetera en el sistema de archivos para usar con el CLI de Solana. Pero con Solana Playground, basta con pulsar unos pocos botones para crear una billetera basada en el navegador.

Info

Tu Playground Wallet se guardará en el almacenamiento local de tu navegador. Limpiar la caché de tu navegador eliminará tu billetera guardada. Al crear una nueva billetera, tendrá la opción de guardar una copia local del archivo del par de llaves (keypair) de su billetera.

Haga clic en el botón rojo que indica el estado, situado en la parte inferior izquierda de la pantalla, (opcionalmente) guarde el archivo del par de llaves de su billetera en su ordenador para realizar una copia de seguridad y, a continuación, haga clic en "Continuar".

Una vez creada su Playground Wallet, observará que en la parte inferior de la ventana aparece ahora la dirección de su wallet, su balance en SOL y el clúster de Solana al que está conectado (Devnet suele ser la opción predeterminada/recomendada, pero un "localhost" validador de prueba también es aceptable).

Crea un programa en Solana #

El código para tu programa en Solana basado en Rust vivirá en tu archivo src/lib.rs. Dentro de src/lib.rs podrás importar tus crates de Rust y definir tu lógica. Abre el archivo src/lib.rs dentro de Solana Playground.

Importa el solana_program crate #

En la parte superior de lib.rs, importamos el crate solana-program y traemos nuestros elementos necesarios al namespace local:

use solana_program::{
    account_info::AccountInfo,
    entrypoint,
    entrypoint::ProgramResult,
    pubkey::Pubkey,
    msg,
};

Escribe la lógica del programa #

Cada programa en Solana debe definir un entrypoint que indica el tiempo de corrida a la cadena de bloques donde empezará a ejecutar el código. El entrypoint de su programa debe proporcionar una función pública llamada process_instruction:

// declara y exporta el punto de entrada del programa
entrypoint!(process_instruction);
 
// implementación del punto de entrada del programa
pub fn process_instruction(
    program_id: &Pubkey,
    accounts: &[AccountInfo],
    instruction_data: &[u8]
) -> ProgramResult {
    // registrar un mensaje en la cadena de bloques
    msg!("¡Hola, mundo!");
 
    // sale del programa
    Ok(())
}

Cada programa debe devolver Ok result enum con un valor de (). Esto indica a Solana que su programa se ha ejecutado correctamente y sin errores.

Nuestro programa anterior registrará un mensaje de "¡Hola, mundo!" en el clúster, y luego saldrá con Ok(()).

Compila tu programa #

En la barra lateral izquierda, selecciona la pestaña "Build & Deploy". A continuación, haga clic en el botón "Build".

En la terminal de Playground deberías ver que tu programa en Solana comenzará a compilarse. Una vez completado, verás un mensaje de éxito.

Info

Es posible que reciba warning al compilar su programa debido a variables no utilizadas. No te preocupes, esta advertencia no afectará tu compilación. Se debe a que nuestro muy sencillo programa, no utiliza todas las variables que declaramos en la función process_instruction.

Despliega tu programa #

Puede hacer clic en el botón "Deploy" para desplegar su primer programa en la red de Solana. Específicamente para su clúster seleccionado (por ejemplo: Devnet, Testnet, etc).

Después de cada despliegue, verá cómo cambia el balance de su Playground Wallet. De forma predeterminada, Solana Playground solicitará automáticamente airdrops de SOL en su nombre para garantizar que su wallet tiene suficiente SOL para cubrir el coste del despliegue.

Info

Nota: Si necesitas más SOL, puede solicitar más escribiendo el comando de airdrop en el terminal del playground:

solana airdrop 2

Encuentra tu program id #

Cuando ejecutes un programa usando web3.js o desde otro programa en Solana, necesitarás proporcionar el program id (la dirección pública de tu programa).

Dentro de la barra lateral de "Build & Deploy" de Solana Playground, puede encontrar su program id en el menú desplegable "Program Credentials".

¡Felicidades! #

Has configurado, compilado y desplegado con éxito un programa en Solana utilizando el lenguaje Rust directamente en el navegador. A continuación, demostraremos cómo interactuar con su programa en la cadena de bloques.

Interactúa con tu programa onchain #

Una vez que hayas desplegado con éxito tu programa de Solana, querrás poder interactuar con ese programa.

Como la mayoría de los desarrolladores que crean dApps y sitios web, interactuaremos con nuestro programa utilizando JavaScript. En concreto, se utilizará el código open source NPM package @solana/web3.js en nuestra aplicación cliente.

Info

Este paquete web3.js es una capa de abstracción sobre la JSON RPC API que reduce el código repetitivo, ayudando a simplificar el código de la aplicación del lado del cliente.

Inicializa el cliente #

Utilizaremos Solana Playground para la generación de clientes. Crea una carpeta cliente ejecutando el comando run en la terminal de Solana Playground:

run

Hemos creado la carpeta client y un client.ts por defecto. Aquí es donde vamos a trabajar para el resto de nuestro programa hola_mundo.

Variables Globales de Solana Playground #

En el Solana Playground, hay muchas utilidades que están disponibles globalmente para que las utilicemos sin instalar ni configurar nada. Los más importantes para nuestro programa hola_mundo son web3 para @solana/web3.js y pg para las utilidades de Solana Playground.

Info

Puedes revisar todos las variables globales disponibles pulsando CTRL+SPACE (o CMD+SPACE en macOS) dentro del editor.

Ejecuta el programa #

Para ejecutar tu programa, debes enviarle una transacción. Cada transacción enviada a la blockchain de Solana contiene un listado de instrucciones (y el programa con el que interactuará esa instrucción).

Aquí creamos una nueva transacción y le añadimos una única "instrucción":

// crea una transacción vacia
const transaction = new web3.Transaction();
 
// añade una instrucción del programa hola mundo a la transacción
transaction.add(
  new web3.TransactionInstruction({
    keys: [],
    programId: new web3.PublicKey(pg.PROGRAM_ID),
  }),
);

Cada instruction debe incluir todas las llaves de las cuentas utilizadas por la operación y el identificador del programa que queremos ejecutar. En este ejemplo keys está vacío porque nuestro programa sólo registra hola_mundo y no necesita ninguna cuenta.

Con nuestra transacción creada, podemos enviarla al clúster:

// envia la transacción al clúster de Solana
console.log("Sending transaction...");
const txHash = await web3.sendAndConfirmTransaction(
  pg.connection,
  transaction,
  [pg.wallet.keypair],
);
console.log("Transaction sent with hash:", txHash);
Info

Las comisiones (fees) se cobran por defecto a la primera cuenta que se encuentra en el arreglo de signers. En este caso, estamos firmando con nuestro par de llaves (keypair) pg.wallet.keypair.

Ejecuta la aplicación #

Con la aplicación cliente escrita, puedes ejecutar el código mediante el mismo comando run.

Una vez completada la aplicación, verá un resultado similar al siguiente:

Running client...
  client.ts:
    My address: GkxZRRNPfaUfL9XdYVfKF3rWjMcj5md6b6mpRoWpURwP
    My balance: 5.7254472 SOL
    Sending transaction...
    Transaction sent with hash: 2Ra7D9JoqeNsax9HmNq6MB4qWtKPGcLwoqQ27mPYsPFh3h8wignvKB2mWZVvdzCyTnp7CEZhfg2cEpbavib9mCcq

Obtén los registros de transacciones #

Utilizaremos solana-cli directamente en playground para obtener la información sobre cualquier transacción:

solana confirm -v <TRANSACTION_HASH>

Cambia <TRANSACTION_HASH> por el hash que recibiste al llamar al programa hola_mundo.

Debería ver "Hola, mundo!" en la sección Log Messages de la salida. 🎉

¡¡¡Felicidades!!! #

Has escrito una aplicación cliente para tu programa en la cadena de bloques de Solana. ¡Ya eres un desarrollador de Solana!

PD: Intenta actualizar el mensaje de tu programa y luego vuelve a compilar, desplegar y ejecutar tu programa.

Siguientes pasos #

Consulte los siguientes enlaces para obtener más información sobre cómo escribir programas en Solana y cómo configurar su entorno de desarrollo local: