Turbine
Propagación de bloques mediante fragmentación de datos. Esta guía está dirigida a validadores de Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1 y clientes de @solana/kit 7.0.0.
Receta
Tarjeta de referencia rápida.
solana config set --url devnet
solana balanceimport { createSolanaRpc } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");Cuándo usar esto:
- Implementar o depurar Turbine en rutas de producción
- Enseñar el concepto a ingenieros nuevos en Solana
- Auditar si tu stack coincide con el comportamiento de la era Agave 4.1
Ejemplo de Trabajo
import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const slot = await rpc.getSlot().send();
const sig = "PASTE_SIGNATURE_AFTER_YOUR_TX";
const tx = await rpc
.getTransaction(sig, { encoding: "json", maxSupportedTransactionVersion: 0 })
.send();
console.log({ slot, err: tx?.meta?.err, cu: tx?.meta?.computeUnitsConsumed });use anchor_lang::prelude::*;
#[program]
pub mod demo {
use super::*;
pub fn log_slot(_ctx: Context<LogSlot>) -> Result<()> {
let clock = Clock::get()?;
msg!("slot: {}", clock.slot);
Ok(())
}
}
#[derive(Accounts)]
pub struct LogSlot {}Lo que esto demuestra:
- Patrones de acceso RPC con @solana/kit 7.0.0
- Lectura de metadatos de ejecución (errores, CU) de transacciones confirmadas
- Acceso a sysvars en la cadena en programas Anchor 0.32.1
Análisis Profundo
Cómo Funciona
- Propagación de bloques mediante fragmentación de datos.
- El modelo de cuentas de Solana requiere listas explícitas de cuentas por instrucción.
- Sealevel ejecuta transacciones no conflictivas en paralelo.
Notas de Agave 4.1.1
- La semántica de confirmación sigue la votación TowerBFT con ordenación PoH.
- Alpenglow (Votor + Rotor) se está implementando para una finalidad más rápida; consulta la sección de Consenso.
- Desarrollo local: Surfpool 0.12.0 y LiteSVM 0.6.x.
Notas de Rust
// Usa matemáticas comprobadas y restricciones explícitas en los programas
require!(amount > 0, MyError::InvalidAmount);Errores Comunes
- Snippets de web3.js v1 heredados - La API difiere de Kit. Solución: usa @solana/kit 7.0.0.
- Cluster incorrecto - Desajuste entre devnet y mainnet. Solución: alinea CLI, RPC, wallet y explorador.
- Cantidades de SOL en punto flotante - Pérdida de precisión. Solución: lamports bigint de extremo a extremo.
- Hash de bloque caducado - Transacciones descartadas. Solución: vuelve a obtener el hash de bloque y vuelve a firmar.
- CU insuficiente - Memoria agotada o presupuesto excedido. Solución: optimiza el programa y establece el Presupuesto de Cómputo.
- Faltan comprobaciones del propietario - Exploits de cuentas escribibles. Solución: restricciones de Anchor en cada cuenta
mut.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| @solana/kit 7.0.0 | Nuevos clientes TypeScript | Mantenimiento de código heredado temporalmente |
| Solana CLI 3.0.10 | Operaciones y sondeos rápidos | Firma de transacciones en producción a escala |
| Surfpool 0.12.0 | Pruebas de integración de Anchor | Despliegue en producción |
| LiteSVM 0.6.x | Pruebas unitarias rápidas | Validación del comportamiento de la red completa |
Preguntas Frecuentes
¿Cómo se aplica esto en Agave 4.1.1?
Los validadores de Agave 4.1.1 usan Turbine para distribuir fragmentos a vecinos ponderados por participación en lugar de transmitir bloques completos a cada par.
¿Qué versión de Solana CLI debo usar?
Usa Solana CLI 3.0.10, que se empareja con Agave 4.1.1. Instala con agave-install init 4.1.1 (o el archivo de fijación de tu equipo), luego verifica con solana --version y agave-install --version.
¿Debo usar @solana/kit o web3.js?
Usa @solana/kit 7.0.0 para nuevos métodos RPC tipados en TypeScript, una superficie de API más pequeña y los ejemplos de esta página ya usan Kit. Conserva web3.js solo para bases de código heredadas; migra las llamadas RPC y la construcción de transacciones de forma incremental.
¿Qué nivel de compromiso se recomienda?
Usa confirmed para dashboards y finalized antes de retiros o callbacks entre sistemas.
¿Cómo depuro fallos relacionados?
Compara la progresión de slots con getSlot, inspecciona las brechas en el horario del líder y revisa los registros del validador en busca de fallos en la reparación de fragmentos. La lentitud en la finalidad a menudo se debe a la contrapresión de Turbine, no a tu programa.
¿Funciona esto en devnet?
Sí, apunta la CLI y el RPC a https://api.devnet.solana.com. El comportamiento coincide con mainnet; solo los datos de cuenta y la economía difieren.
¿Cómo afectan las unidades de cómputo a esto?
Turbine es la red del validador; tu presupuesto de cómputo en la cadena no cambia. La congestión que sientes como desarrollador suele ser competencia de tarifas de prioridad en la cola de la TPU, no de CU de Turbine.
¿Cuál es el patrón de Anchor 0.32.1?
Anchor 0.32.1 usa #[program], Context<T> y #[derive(Accounts)] con restricciones explícitas de mut/signer; ejecuta anchor build y anchor test en 0.32.1 a través de avm use 0.32.1.
¿Cómo pruebo con Surfpool 0.12.0?
Inicia Surfpool 0.12.0, apunta el RPC a su puerto y ejecuta anchor test o scripts de integración de clientes contra cuentas bifurcadas.
¿Puede LiteSVM 0.6.x cubrir esto?
LiteSVM solo ejercita la lógica del programa; no simula la propagación de Turbine ni las rutas de fragmentos de múltiples validadores.
¿Qué cambió en la era Agave?
El cliente validador pasó a llamarse Agave (4.1.1), Solana CLI 3.0.10 se alinea con él y el trabajo de Alpenglow está cambiando la finalidad; fija las versiones y lee las notas de la versión en cada actualización.
¿Dónde encuentro métodos RPC relacionados?
getSlot, getBlockHeight, getBlock (con compromiso) y getLeaderSchedule ayudan a correlacionar los retrasos visibles para el cliente con la rotación del líder.
Relacionado
- Explora otras páginas de la sección
core-architecture-componentspara temas complementarios. - Fundamentos de Solana - Orientación sobre cuentas y transacciones.
Versiones del Stack: Esta página fue escrita 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.