Fundamentos de Solana
9 ejemplos para empezar con los fundamentos de Solana: 6 básicos y 3 intermedios. Cubre cuentas, programas, transacciones, SOL, clústeres y el flujo de trabajo del desarrollador en Agave 4.1.1.
Busca en todas las páginas de la documentación
9 ejemplos para empezar con los fundamentos de Solana: 6 básicos y 3 intermedios. Cubre cuentas, programas, transacciones, SOL, clústeres y el flujo de trabajo del desarrollador en Agave 4.1.1.
Instala la CLI de Solana 3.0.10 y crea un par de claves predeterminado en devnet.
sh -c "$(curl -sSfL https://release.anza.xyz/v3.0.10/install)"
solana --version
solana config set --url devnet
solana-keygen new --no-bip39-passphrase -o ~/.config/solana/id.json
solana airdrop 2Para los ejemplos del cliente TypeScript, usa @solana/kit 7.0.0:
npm install @solana/kit@7.0.0Cada dirección en Solana se mapea a una cuenta, incluso si tiene cero lamports.
import { createSolanaRpc, address, lamports } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const pubkey = address("11111111111111111111111111111111");
const { value } = await rpc.getBalance(pubkey).send();
console.log(`Balance: ${Number(lamports(value)) / 1e9} SOL`);getBalance devuelve los lamports directamente del campo lamports de la cuenta.Relacionado: SOL, Lamports y Unidades - precisión y conversiones
Las cuentas son la única abstracción para todo el estado en la cadena.
// Diseño conceptual - cada cuenta tiene estos campos
pub struct Account {
pub lamports: u64, // Saldo de SOL en lamports
pub data: Vec<u8>, // buffer de bytes arbitrario
pub owner: Pubkey, // programa permitido para escribir datos
pub executable: bool, // true para programas desplegados
pub rent_epoch: u64, // seguimiento de alquiler (campo heredado)
}executable = true y código en data.Relacionado: El Modelo Mental de Solana frente a EVM - cuentas vs contratos
Una transacción con una instrucción del Programa del Sistema mueve SOL entre cuentas.
solana transfer <CLAVE_PÚBLICA_DEL_DESTINATARIO> 0.1 --allow-unfunded-recipientTransfer del Programa del Sistema.--allow-unfunded-recipient crea el destino si aún no tiene una cuenta.Relacionado: Cómo Fluye una Transacción - del cliente a la confirmación
Usa la CLI o RPC para ver instrucciones, firmantes y unidades de cómputo consumidas.
solana confirm -v <FIRMA>-v imprime el ID del programa, las cuentas y los datos de cada instrucción.Relacionado: Pares de Claves y Direcciones - quién firma qué
Solana ejecuta múltiples clústeres independientes con diferentes propósitos.
solana config set --url devnet # SOL de prueba gratuito, RPC público
solana config set --url testnet # pruebas de validadores, menos estable
solana config set --url mainnet-beta # producción - SOL real
solana-test-validator # nodo Agave 4.1.1 localRelacionado: Clústeres y Redes - cuándo usar cada uno
Solana tiene como objetivo ranuras de ~400 ms; los líderes producen bloques por ranura.
solana slot
solana block-time $(solana slot)Relacionado: Ranuras, Bloques y Épocas - detalles del calendario de épocas
Kit usa una tubería funcional para ensamblar transacciones versionadas.
import {
createSolanaRpc,
createTransactionMessage,
setTransactionMessageFeePayer,
setTransactionMessageLifetimeUsingBlockhash,
appendTransactionMessageInstruction,
pipe,
address,
getSignatureFromTransaction,
signTransactionMessageWithSigners,
} from "@solana/kit";
import { getTransferSolInstruction } from "@solana-program/system";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const feePayer = address("TU_CLAVE_PÚBLICA_PAGADORA_DE_TARIFAS");
const recipient = address("CLAVE_PÚBLICA_DEL_DESTINATARIO");
const { value: blockhash } = await rpc.getLatestBlockhash().send();
const transferIx = getTransferSolInstruction({
source: feePayer,
destination: recipient,
amount: 100_000_000n, // 0.1 SOL en lamports
});
const txMessage = pipe(
createTransactionMessage({ version: 0 }),
(m) => setTransactionMessageFeePayer(feePayer, m),
(m) => setTransactionMessageLifetimeUsingBlockhash(blockhash, m),
(m) => appendTransactionMessageInstruction(transferIx, m),
);
// Firma con tu firmante de par de claves, luego envía a través de sendTransactionbigint lamports, nunca números flotantes de JavaScript.Relacionado: Billeteras y Exploradores - flujo de trabajo de devnet
Los pares de claves Ed25519 son la raíz de la identidad y la firma en Solana.
solana-keygen new --outfile ./dev-wallet.json --no-bip39-passphrase
solana-keygen pubkey ./dev-wallet.jsonimport { createKeyPairSignerFromBytes } from "@solana/kit";
import { readFileSync } from "node:fs";
const secret = JSON.parse(readFileSync("./dev-wallet.json", "utf8"));
const signer = await createKeyPairSignerFromBytes(Uint8Array.from(secret));
console.log(signer.address);Relacionado: Pares de Claves y Direcciones - modelo de firma
Sigue una transferencia desde la sumisión del cliente hasta la confirmación finalizada.
# 1. Enviar
SIG=$(solana transfer <DESTINATARIO> 0.01 --output json | jq -r .signature)
# 2. Consultar confirmación
solana confirm $SIG --commitment confirmed
# 3. Inspeccionar en el explorador
echo "https://explorer.solana.com/tx/$SIG?cluster=devnet"Relacionado: Cómo Fluye una Transacción - canalización completa
Versiones de la pila: Esta página se escribió para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0 y LiteSVM 0.6.x.
Revisado por Chris St. John·Última actualización: 16 jul 2026