Turbine
Propagação de blocos via fragmentação de dados. Este guia destina-se a validadores Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1 e clientes @solana/kit 7.0.0.
Receita
Cartão de receita de referência rápida.
solana config set --url devnet
solana balanceimport { createSolanaRpc } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");Quando usar isto:
- Implementando ou depurando o Turbine em caminhos de produção
- Ensinando o conceito a engenheiros novos no Solana
- Auditando se sua stack corresponde ao comportamento da era Agave 4.1
Exemplo de Trabalho
import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const slot = await rpc.getSlot().send();
const sig = "COLE_ASSINATURA_APÓS_SEU_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 {}O que isto demonstra:
- Padrões de acesso RPC com @solana/kit 7.0.0
- Leitura de metadados de execução (erros, CU) de transações confirmadas
- Acesso a sysvars on-chain em programas Anchor 0.32.1
Mergulho Profundo
Como Funciona
- Propagação de blocos via fragmentação de dados.
- O modelo de contas do Solana requer listas explícitas de contas por instrução
- Sealevel executa transações não conflitantes em paralelo
Notas do Agave 4.1.1
- Semânticas de confirmação seguem a votação TowerBFT com ordenação PoH
- Alpenglow (Votor + Rotor) está sendo lançado para finalidade mais rápida - veja a seção de Consenso
- Desenvolvimento local: Surfpool 0.12.0 e LiteSVM 0.6.x
Notas de Rust
// Use matemática verificada e restrições explícitas em programas
require!(amount > 0, MyError::InvalidAmount);Armadilhas
- Snippets legados do web3.js v1 - A API difere do Kit. Correção: use @solana/kit 7.0.0.
- Cluster errado - Discrepância devnet vs mainnet. Correção: alinhe CLI, RPC, carteira, explorador.
- Valores SOL em ponto flutuante - Perda de precisão. Correção: lamports bigint de ponta a ponta.
- Blockhash expirado - Transações descartadas. Correção: re-busque o blockhash e re-assine.
- CU insuficiente - OOM ou orçamento excedido. Correção: otimize o programa + defina o Orçamento de Computação.
- Faltam verificações de proprietário - Explorações de contas graváveis. Correção: restrições do Anchor em cada conta mut.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| @solana/kit 7.0.0 | Novos clientes TypeScript | Manutenção de código legado temporariamente |
| Solana CLI 3.0.10 | Operações e sondagens rápidas | Assinatura de transações em produção em escala |
| Surfpool 0.12.0 | Testes de integração do Anchor | Implantação em produção |
| LiteSVM 0.6.x | Testes unitários rápidos | Validação completa do comportamento da rede |
FAQs
Como isso se aplica no Agave 4.1.1?
Validadores Agave 4.1.1 usam Turbine para distribuir fragmentos (shreds) para vizinhos com peso de stake em vez de transmitir blocos completos para todos os peers.
Qual versão do Solana CLI devo usar?
Use Solana CLI 3.0.10, que é compatível com Agave 4.1.1. Instale com agave-install init 4.1.1 (ou o arquivo de pin da sua equipe) e verifique com solana --version e agave-install --version.
Devo usar @solana/kit ou web3.js?
Use @solana/kit 7.0.0 para novos métodos RPC com tipagem TypeScript, superfície de API menor e exemplos nesta página já usam Kit. Mantenha web3.js apenas para bases de código legadas; migre chamadas RPC e construção de transações incrementalmente.
Qual nível de commitment é recomendado?
Use confirmed para dashboards e finalized antes de saques ou callbacks entre sistemas.
Como depuro falhas relacionadas?
Compare a progressão de slots com getSlot, inspecione lacunas na agenda do líder e verifique os logs do validador para falhas de reparo de fragmentos (shred repair). Finalidade lenta geralmente é rastreada até a contrapressão do Turbine, não seu programa.
Isso funciona no devnet?
Sim—aponte a CLI e o RPC para https://api.devnet.solana.com. O comportamento corresponde ao mainnet; apenas os dados da conta e a economia diferem.
Como as unidades de computação afetam isso?
Turbine é a rede do validador—seu orçamento de computação on-chain não é alterado. O congestionamento que você sente como um construtor é geralmente a competição de taxas de prioridade na fila do TPU, não o CU do Turbine.
Qual é o padrão do Anchor 0.32.1?
Anchor 0.32.1 usa #[program], Context<T> e #[derive(Accounts)] com restrições explícitas de mut/signer—execute anchor build e anchor test em 0.32.1 via avm use 0.32.1.
Como testar com Surfpool 0.12.0?
Inicie o Surfpool 0.12.0, aponte o RPC para sua porta e execute anchor test ou scripts de integração do cliente contra contas forjadas.
O LiteSVM 0.6.x pode cobrir isso?
LiteSVM exercita apenas a lógica do programa; ele não simula a propagação do Turbine ou caminhos de fragmentos de múltiplos validadores.
O que mudou na era Agave?
O cliente validador foi renomeado para Agave (4.1.1), a CLI 3.0.10 se alinha a ele, e o trabalho do Alpenglow está mudando a finalidade—fixe as versões e leia as notas de lançamento a cada atualização.
Onde encontro métodos RPC relacionados?
getSlot, getBlockHeight, getBlock (com commitment) e getLeaderSchedule ajudam a correlacionar atrasos visíveis para o cliente com a rotação do líder.
Relacionado
- Navegue por outras páginas na seção
core-architecture-componentspara tópicos complementares - Noções Básicas do Solana - orientação de conta e transação
Versões da Stack: Esta página foi 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 e LiteSVM 0.6.x.