RPC & WebSockets In Depth
Clientes Solana nunca se comunicam com o ledger como um banco de dados bruto; eles se comunicam com nós RPC que expõem JSON-RPC sobre HTTP e atualizações em tempo real sobre WebSockets.
Busque em todas as páginas da documentação
Clientes Solana nunca se comunicam com o ledger como um banco de dados bruto; eles se comunicam com nós RPC que expõem JSON-RPC sobre HTTP e atualizações em tempo real sobre WebSockets.
Saldos de carteira, buscas de contas de programa, envios de transação, esperas de assinatura e (em muitos provedores) galerias de ativos digitais utilizam essa camada de acesso.
Esta página é o guarda-chuva da seção: HTTP vs. assinaturas, métodos baratos vs. caros, RPC principal vs. DAS, e como provedores, paginação e APIs de taxa/simulação completam uma stack de produção.
@solana/kit; escolher entre polling e assinatura; planejar leituras de GPA na mainnet e portfólios NFT; selecionar recursos do provedor e caminhos de estimativa de taxa.RPC (Remote Procedure Call) é como os aplicativos observam e submetem trabalho em um cluster Solana.
Um nó RPC executa (ou atua como front-end para) software de validação como o Agave, serve JSON-RPC 2.0 via HTTPS e tipicamente expõe um endpoint WebSocket complementar para assinaturas.
Clientes não precisam executar um validador; eles precisam de uma URL RPC correta para o cluster desejado (mainnet-beta, devnet, testnet ou localnet).
As requisições são objetos JSON-RPC: nomes de method como getBalance ou sendTransaction, params opcionais e um id ecoado na resposta.
As respostas contêm um result ou um error com código e mensagem; o código da aplicação deve tratar HTTP 429, timeouts e erros JSON-RPC como modos de falha de primeira classe.
Commitment (processed, confirmed, finalized) é ortogonal à escolha do método: ele informa ao nó quão profundo no consenso uma leitura ou notificação deve estar antes de responder.
Ler em processed é rápido e sensível a forks; ler em finalized é mais lento e mais seguro para decisões de produto irreversíveis.
O caminho HTTP é de requisição/resposta: obtenha esta conta, envie esta transação, simule este payload, retorne uma vez.
O caminho WebSocket é de longa duração: assine uma vez, receba notificações push quando uma conta mudar, uma assinatura atingir o commitment, ou logs correspondentes aparecerem.
HTTP e WebSocket são duas faces do mesmo produto RPC, não dois ledgers; você ainda escolhe um cluster e uma política de commitment.
Métodos de leitura principais hidratam o estado da aplicação a partir de contas que o runtime já conhece por chave pública: saldos, dados de conta única e cargas de múltiplas contas em lote.
getProgramAccounts faz uma pergunta mais difícil: retorne todas as contas pertencentes a um programa (opcionalmente filtradas), o que força uma varredura do estado pertencente ao programa e é a fonte clássica de timeouts e limites de taxa na mainnet.
APIs DAS (Digital Asset Standard) estendem JSON-RPC com métodos centrados em ativos (getAsset, getAssetsByOwner, consultas de busca/grupo) apoiados por indexadores de provedor que unem programas de token, metadados e árvores de compressão em um único modelo.
DAS não é um recurso integrado obrigatório do Agave em toda URL pública; é uma capacidade do provedor que você habilita quando a experiência do usuário de NFT, cNFT e portfólio seria dolorosa apenas com buscas de token brutas.
Provedores (RPC gerenciado, DAS, webhooks, gRPC) e validadores auto-hospedados trocam o fardo operacional por controle; aplicações de produção deixam endpoints públicos gratuitos para trás.
Paginação e eficiência mantêm você dentro dos limites de RPS e payload: agrupe chaves públicas conhecidas, histórico de assinaturas com cursor, filtre GPA rigorosamente e mova a descoberta para indexadores quando os conjuntos crescem.
APIs de simulação e taxa de prioridade ficam no caminho de escrita: estime unidades de computação e micro-lamports por CU, e use simulateTransaction para expor erros de programa sem gastar taxas da mainnet em cada execução de teste.
Juntas, essas peças formam um mapa:
Cliente (@solana/kit, carteira, worker de backend)
|
+-- HTTPS JSON-RPC --------> Borda RPC / provedor
| leituras, envio, simulação, taxas
|
+-- Assinaturas WSS -----> Mesma superfície do cluster
| conta / logs / assinatura / slot
|
+-- Métodos DAS (opcional) -> Provedor habilitado para DAS
getAsset, getAssetsByOwner, searchAssetsPáginas irmãs nesta seção aprofundam cada ramo; esta página mantém o diagrama inteiro em vista.
Uma leitura típica é um POST com Content-Type: application/json.
O nó resolve o método contra o snapshot do banco de dados no commitment solicitado, codifica os dados da conta (base64, base58 ou jsonParsed onde suportado) e retorna.
sendTransaction aceita uma transação serializada e assinada e retorna um identificador de assinatura; a durabilidade ainda requer polling ou uma assinatura WebSocket até que o commitment escolhido seja alcançado.
App constrói + assina tx
|
v
HTTP sendTransaction --> assinatura S
|
+-- poll getSignatureStatuses(S), ou
+-- signatureSubscribe(S) via WSS
|
v
Escada de commitment: processed -> confirmed -> finalizedO cliente abre wss://..., envia um método *Subscribe e recebe um ID de assinatura, seguido por mensagens *Notification.
Assinaturas comuns:
| Assinatura | Dispara quando |
|---|---|
accountSubscribe | Lamports ou dados da conta mudam |
logsSubscribe | Transações correspondem a um filtro (ex.: menções) |
signatureSubscribe | Transação atinge o commitment da assinatura |
slotSubscribe | Novos slots progridem |
Notificações são visualizações push do nó ao qual você se conectou, não um barramento global ordenado entre todos os provedores.
Cancele a assinatura (ou aborte a assinatura do kit) quando os componentes forem desmontados para evitar vazamento de conexões.
| Padrão | Métodos | Postura de custo |
|---|---|---|
| Chave pública conhecida | getBalance, getAccountInfo, getMultipleAccounts | Baixo a médio; agrupe multi-get |
| Varredura de programa | getProgramAccounts | Alto sem filtros; pode dar timeout |
| Histórico | getSignaturesForAddress, getTransaction | Médio a alto; pague e cache |
| Ativos | DAS getAsset / getAssetsByOwner | Indexado pelo provedor; depende do plano |
| UI ao vivo | Assinaturas WebSocket | Carga de conexão + notificação |
Sempre prefira leituras de chave pública conhecida quando um indexador, derivação de PDA ou resposta anterior já lhe forneceu os endereços.
Use GPA com filtros dataSize e memcmp apenas quando precisar descobrir contas por layout; nunca use GPA sem filtro na mainnet para programas grandes por padrão.
Quando GPA ainda não atender à escala do produto, mova a descoberta para pipelines do tipo Geyser/Yellowstone ou um indexador dedicado em vez de tentar a mesma varredura repetidamente.
RPC principal responde "qual é a conta neste endereço?"
DAS responde "quais ativos digitais este proprietário detém, e quais metadados/prova de compressão preciso para renderizar ou verificar?"
Use RPC principal (e kit) para contas de programa personalizadas, pagadores de taxa e submissão de transações.
Use DAS para galerias de NFT, consultas de coleção e ativos comprimidos onde o provedor já pagou o custo de indexação.
Provedores gerenciados atuam como front-end para Agave (ou equivalente) com balanceadores de carga, chaves de API e sidecars opcionais (DAS, webhooks, estimativas de taxa aprimoradas).
URLs de cluster públicas existem para aprendizado e trabalho leve em devnet; elas limitam agressivamente e não são um plano de produção.
Regras de eficiência que se aplicam em todos os lugares:
getMultipleAccounts (frequentemente ~50-100 chaves por chamada, sujeito à documentação do provedor).getSignaturesForAddress com cursores before / until e um limit.Antes de finalizar transações sensíveis, os clientes frequentemente:
simulateTransaction com opções como sigVerify: false e replaceRecentBlockhash para ler unitsConsumed, logs e erros.getRecentPrioritizationFees (e/ou APIs de percentil do provedor) para contas envolvidas no conjunto de bloqueio.A simulação não é um substituto para a confirmação na mainnet; ela reduz falhas evitáveis e inclusão subprecificada.
| Preocupação | Página principal | Lição para o desenvolvedor |
|---|---|---|
| Formato JSON-RPC, commitment, limites de taxa | RPC Basics | Defina o commitment explicitamente; trate 429 como normal |
| Saldo, informações da conta, multi-get, visão geral do GPA | Core RPC Methods | Prefira multi-get a leituras únicas verbosas |
memcmp / dataSize, discriminadores Anchor | getProgramAccounts & Filters | Filtre no lado do servidor ou não escaneie |
| Cursores, agrupamento, evitando varreduras pesadas | Pagination & Efficiency | GPA não é paginado; projete a descoberta offline |
| Amostras de taxa, opções de simulação, margem de CU | Priority Fee & Simulation APIs | Estime e depois envie; registre as escolhas de CU e taxa |
| Gerenciado vs. auto-hospedado, matrizes de recursos | RPC Providers | Combine as necessidades de DAS/gRPC com o fornecedor; mantenha as chaves fora do código-fonte |
Assinaturas WebSocket e DAS têm páginas dedicadas de "como fazer" nesta seção; operacionalmente, elas ainda dependem da mesma URL do provedor e política de commitment descritas acima.
Separe a configuração de HTTP RPC, WSS e DAS, mesmo quando um único fornecedor emite os três.
Fixe o commitment por classe de ação em um módulo em vez de espalhar literais de string.
Para produtos com muitas escritas, combine limites de CU orientados por simulação com taxas de prioridade dinâmicas e um caminho de confirmação que não trate o sucesso de sendTransaction como liquidação.
| Necessidade | Permanecer no RPC principal / WS | Abandonar para indexador / gRPC / webhooks |
|---|---|---|
| Saldo da carteira + poucos PDAs | Sim | Não |
| UI de conta única ao vivo | WebSocket | Opcional |
| Análise completa do programa | Não | Sim |
| Grande portfólio de NFT + cNFTs | DAS, se disponível | Indexador personalizado se DAS for insuficiente |
| Streams multi-conta de milissegundos | Limitado | Classe Yellowstone / Geyser |
@solana/kit 7.0.0 fornece createSolanaRpc para HTTP e createSolanaRpcSubscriptions para WSS em métodos padrão.
DAS frequentemente usa fetch direto ou um SDK do provedor até você o encapsular; mantenha as URLs base do DAS configuráveis ao lado das URLs RPC do kit.
A CLI (solana contra a mesma URL RPC) é útil para depurar os métodos idênticos que seu aplicativo chama.
sendTransaction significa que a transferência é final." A assinatura é um identificador para polling de status ou signatureSubscribe; a durabilidade é o nível de commitment para o qual você espera depois.É a superfície da API JSON-RPC (e WebSocket) pela qual os clientes leem contas, submetem transações e observam o commitment em um cluster escolhido.
Use HTTP para leituras de requisição/resposta, envios, simulação e amostras de taxa; use WebSockets quando precisar de atualizações push para contas, logs ou confirmação de assinatura sem loops de polling apertados.
Muitas ações de produto usam confirmed para uma UX responsiva; use finalized antes de efeitos externos irreversíveis; trate processed apenas como otimista.
Varreduras sem filtro ou com filtro fraco atingem o timeout ou os limites do provedor; adicione filtros dataSize e memcmp ou mova a descoberta para um indexador.
getMultipleAccounts carrega chaves públicas conhecidas em lote; GPA descobre contas por proprietário (e filtros) quando você ainda não conhece os endereços.
DAS é uma API padronizada orientada a ativos oferecida por provedores de indexação sobre dados da chain; não é garantida em todos os endpoints públicos do Agave.
Geralmente não para layouts arbitrários; DAS visa ativos digitais (tokens, NFTs, cNFTs). O estado de programa personalizado ainda usa RPC principal, filtros ou seu próprio indexador.
Não. Notificações honram o commitment com o qual você assinou; atualizações processed podem reverter em forks, então a UI deve permanecer reversível até um commitment mais profundo.
O histórico de assinaturas usa cursores (before / until) e limit; multi-get é dividido por lista de chaves públicas; GPA não é paginado por offset, então filtros ou índices externos carregam a descoberta em grande escala; DAS frequentemente expõe page / limit nas APIs do provedor.
Opções gerenciadas incluem Helius, Triton e QuickNode para RPC hospedado, além de DAS, gRPC ou webhooks opcionais; auto-hospedar Agave troca custo operacional por controle; RPC público gratuito é para uso leve não produtivo.
Simule para estimar unidades de computação e capturar erros de programa; amostre taxas de prioridade recentes (ou percentis do provedor) para definir o preço da CU; em seguida, envie e aguarde o commitment.
Não. O Kit 7.0.0 tipa e encapsula as mesmas superfícies JSON-RPC e de assinatura; você ainda escolhe corretamente os métodos, commitment, filtros e provedores.
Não. Use endpoints de provedor autenticados (e frequentemente URLs HTTP/WSS/DAS separadas), limite a taxa no lado do cliente e planeje o failover para caminhos críticos.
Quando você precisa de análise histórica completa, descoberta em larga escala de programas ou streams multi-conta que excedem a capacidade de GPA filtrado e assinatura.
Comece com RPC Basics para commitment e configuração do cliente, depois Core RPC Methods para leituras do dia a dia; aborde GPA, paginação, taxas e provedores conforme esses pontos problemáticos surgirem.
getAccountInfo, getBalance, getMultipleAccounts, visão geral do GPAmemcmp, dataSize e varreduras seguras de programasimulateTransaction e margem de CUVersões da stack: Esta página foi escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, Rust 1.91.1 e @solana/kit 7.0.0.
Revisado por Chris St. John·Última atualização: 15 de jul. de 2026