Este es un tutorial de hola mundo en Solana. Te guiaremos a través de los pasos para instalar Solana y solucionar los problemas que puedan surgir.
Si encuentras algún problema, por favor revisa la sección de Solución de problemas al final de este artículo.
Pasos de instalación
Instalar Rust
Omite este paso si ya tienes Rust instalado.
# install rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Instalar Yarn
Necesitarás esto para ejecutar las pruebas unitarias. Omite este paso si ya tienes yarn instalado.
# install yarn -- assumes node js is installed
corepack enable # corepack comes with node js
Instalar el CLI de Solana y Anchor
# install solana
curl --proto '=https' --tlsv1.2 -sSfL https://solana-install.solana.workers.dev | bash
Instalar Anchor
Anchor es un framework para el desarrollo en Solana. Es bastante similar a hardhat en muchos aspectos.
# install anchor
cargo install --git https://github.com/solana-foundation/anchor avm --force
avm install latest
avm use latest
Probar la instalación
Inicializar y compilar un programa de Anchor (para el hola mundo)
Usuarios de Mac: recomendamos llamar a su programa day_1 en lugar de day1 porque a veces Anchor parece insertar guiones bajos silenciosamente en máquinas Mac.
anchor init day1 # use day_1 if you have a mac
cd day1
anchor build
Dependiendo de tu máquina y conexión a internet, este paso puede tardar un poco. Aquí también es donde es probable que encuentres problemas de instalación, así que consulta la sección de solución de problemas si es necesario.
Configurar Solana para ejecutarse en localhost
# shell 1
solana config set --url localhost
Ejecutar el nodo validador de prueba
Ejecuta el siguiente comando en una nueva terminal, no en el proyecto de Anchor. Pero no cierres la terminal donde ejecutaste anchor build. Esto ejecutará una instancia local (de prueba) de un nodo de Solana en tu máquina:
# shell 2
solana-test-validator
Asegurar que el program_id esté sincronizado con la clave de Anchor
Vuelve a la terminal con el proyecto de Anchor y ejecuta el siguiente comando:
# shell 1
anchor keys sync
Ejecutar las pruebas
Ejecuta esto en el proyecto de Anchor
# shell 1
anchor test --skip-local-validator
El comando anterior ejecuta la prueba de nuestro programa. Si aún no has creado una billetera de prueba, Anchor te dará instrucciones sobre cómo hacerlo. No proporcionamos esas instrucciones aquí porque dependerán de tu sistema operativo y estructura de archivos. Es posible que también necesites enviarte algunos Sol locales mediante airdrop ejecutando solana airdrop 100 {YOUR_WALLET_ADDRESS} en la terminal. Puedes obtener la dirección de tu billetera ejecutando solana address en la línea de comandos.
La salida esperada es la siguiente:

Hola Mundo
Ahora hagamos que nuestro programa devuelva “Hello, world!”. Agrega la siguiente línea marcada con ****NEW LINE HERE**** en programs/day_1/src/lib.rs.
use anchor_lang::prelude::*;
declare_id!("...");
#[program]
pub mod day_1 {
use super::*;
pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
msg!("Hello, world!"); // **** NEW LINE HERE ****
Ok(())
}
}
#[derive(Accounts)]
pub struct Initialize {}
Antes de ejecutar la prueba nuevamente, detén el proceso del validador local y reinícialo con:
solana-test-validator --reset
Ejecutar la prueba nuevamente
anchor test --skip-local-validator
Buscar el archivo de registros (log) ejecutando
ls .anchor/program-logs/
Abrir ese archivo para ver el “Hello world” registrado

Registros (logs) de Solana en tiempo real
Alternativamente, puedes ver los registros a medida que ocurren abriendo una tercera terminal y ejecutando:
# shell 3
solana logs
Ahora ejecuta la prueba de nuevo y deberías ver el mismo mensaje en la terminal donde ejecutaste solana logs.
Preguntas y respuestas
¿Por qué declare_id! y msg! tienen signos de exclamación al final?
En Rust, el signo de exclamación indica que se trata de macros. Volveremos a ver las macros en un tutorial posterior.
¿Necesito una función initialize?
No, esa fue autogenerada por el framework Anchor. Puedes nombrarla como quieras.
No hay nada especial en el nombre initialize en este contexto, por lo que podemos cambiar el nombre al que queramos. Esto a diferencia de otras palabras clave y lenguajes, como main, que es un nombre especial en algunos lenguajes, o constructor, que es un nombre especial en Solidity.
Ejercicio: Intenta renombrar initialize en programs/day_1/src/lib.rs e initialize en tests/day_1.ts para que sea initialize2 y ejecuta la prueba nuevamente. Mira el cambio marcado en los círculos naranjas a continuación.

¿Por qué ejecutamos la prueba con --skip-local-validator?
Cuando las pruebas se ejecutan contra un nodo, podremos consultar al nodo sobre cambios de estado. Si no puedes hacer que el nodo se ejecute, está bien ejecutar anchor test sin la bandera --skip-local-validator. Sin embargo, te será más difícil desarrollar y probar, por lo que recomendamos hacer que el validador local funcione.
Solución de problemas
Solana es un software en rápido desarrollo, y es posible que te encuentres con problemas de instalación. Hemos documentado los que es más probable que encuentres en las siguientes secciones.
Nuestra serie de tutoriales fue escrita con las siguientes versiones:
- Anchor = version 0.29.0
- Solana = version 1.16.25
- Rustc = 1.77.0-nightly
Puedes cambiar la versión de Anchor ejecutando:
avm install 0.29.0
avm use 0.29.0
error: package solana-program v1.18.0 cannot be built
error: package `solana-program v1.18.0` cannot be built because it requires rustc 1.72.0 or newer, while the currently active rustc version is 1.68.0-dev
Either upgrade to rustc 1.72.0 or newer, or use
cargo update -p solana-program@1.18.0 --precise ver
Verifica la versión de Solana que estás ejecutando usando solana --version. Luego inserta esa versión en ver en el código de arriba. A continuación se muestra un ejemplo de resolución:

error[E0658]: use of unstable library feature ‘build_hasher_simple_hash_one’
Si obtienes el siguiente error:
error[E0658]: use of unstable library feature 'build_hasher_simple_hash_one'
--> src/random_state.rs:463:5
|
463 | / fn hash_one<T: Hash>(&self, x: T) -> u64 {
464 | | RandomState::hash_one(self, x)
465 | | }
| |_____^
|
= note: see issue #86161 https://github.com/rust-lang/rust/issues/86161 for more information
= help: add #![feature(build_hasher_simple_hash_one)] to the crate attributes to enable
Ejecuta el siguiente comando: cargo update -p ahash@0.8.7 --precise 0.8.6.
Créditos: https://solana.stackexchange.com/questions/8800/cant-build-hello-world
Error: Deploying program failed: Error processing Instruction 1: custom program error: 0x1
Error: Deploying program failed: Error processing Instruction 1: custom program error: 0x1
There was a problem deploying: Output { status: ExitStatus(unix_wait_status(256)), stdout: "", stderr: "" }.
Si obtienes este error, tus claves no están sincronizadas. Ejecuta anchor keys sync.
Error: failed to send transaction: Transaction simulation failed: Attempt to load a program that does not exist
Tus claves no están sincronizadas. Ejecuta anchor keys sync.
Error: Your configured rpc port: 8899 is already in use
Ejecutaste anchor test sin --skip-local-validator mientras el validador se estaba ejecutando en segundo plano. Puedes apagar el validador y ejecutar anchor test, o ejecutar anchor test --skip-local-validator con el validador en ejecución. Omitir el validador local (skip local validator) significa omitir el temporal que crea para el proyecto, no el que se está ejecutando en segundo plano.
Error: Account J7t…zjK has insufficient funds for spend
Ejecuta el comando a continuación para enviarte 100 SOL mediante airdrop a tu dirección de desarrollo:
solana airdrop 100 J7t...zjK
Error: RPC request error: cluster version query failed
Error: RPC request error: cluster version query failed: error sending request for url (http://localhost:8899/): error trying to connect: tcp connect error: Connection refused (os error 61)
There was a problem deploying: Output { status: ExitStatus(unix_wait_status(256)), stdout: "", stderr: "" }.
Esto significa que solana-test-validator no se está ejecutando en segundo plano. Ejecuta solana-test-validator en otra terminal.
thread ‘main’ panicked at ‘called Option::unwrap() on a None value’
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /Users/username/.cargo/git/checkouts/anchor-50c4b9c8b5e0501f/347c225/lang/syn/src/idl/file.rs:214:73
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Es probable que aún no hayas ejecutado anchor build.
Estoy usando Mac y obtengo Error: failed to start validator: Failed to create ledger at test-ledger: blockstore error
Sigue las instrucciones en este hilo de Stack Exchange.
No tengo corepack en mi Mac a pesar de tener node.js
Ejecuta los siguientes comandos:
brew install corepack
brew link --overwrite corepack
error: not a directory:
BPF SDK: /Users/rareskills/.local/share/solana/install/releases/stable-43daa37937907c10099e30af10a5a0b43e2dd2fe/solana-release/bin/sdk/bpf
cargo-build-bpf child: rustup toolchain list -v
cargo-build-bpf child: rustup toolchain link bpf /Users/rareskills/.local/share/solana/install/releases/stable-43daa37937907c10099e30af10a5a0b43e2dd2fe/solana-release/bin/sdk/bpf/dependencies/bpf-tools/rust
error: not a directory:
limpia la caché: ejecuta rm -rf ~/.cache/solana/*.
Error: target/idl/day_1.json doesn’t exist. Did you run anchor build?
Crea un nuevo proyecto y nómbralo day_1 en lugar de day1. Anchor parece insertar guiones bajos silenciosamente en algunas máquinas.
Aprende más con RareSkills
Este tutorial es el primero de nuestro Curso de Solana gratuito.
Publicado originalmente el 08 de febrero de 2024