Migrar de Horizon a RPC
Las aplicaciones que usan la [API REST-like de Horizon] necesitarán actualizarse para usar la API JSON-RPC RPC al migrar de Horizon a RPC. Esta guía ofrece una visión general de las principales diferencias entre las dos APIs y cómo migrar tu aplicación.
Formato de solicitud / respuesta
La API tipo REST de Horizon utiliza métodos HTTP y códigos de estado para comunicarse con los clientes. Las respuestas están en formato JSON HAL. Consulta [El formato de respuesta de Horizon].
La API JSON-RPC de RPC utiliza JSON-RPC 2.0 para comunicarse con los clientes. Las solicitudes a la API son objetos JSON que contienen una o más invocaciones de métodos. Las respuestas también son objetos JSON que contienen un resultado para cada invocación en la solicitud. Consulta JSON-RPC.
Ambos formatos utilizan JSON para la estructura general, son relativamente simples y no requieren código cliente especial, aunque hay SDKs cliente disponibles. Algunos valores que contienen están codificados en XDR y pueden decodificarse usando los SDKs de Stellar.
Mapeo de endpoint
Las aplicaciones que utilizan los siguientes endpoints de Horizon normalmente pueden migrar directamente a RPC usando los métodos referenciados.
Los endpoints sin asignaciones no tienen un reemplazo directo en la API RPC. Para crear una funcionalidad similar en una aplicación, considera asociarte con un indexador o usar la información a continuación para crear tu propia representación indexada de los endpoints de Horizon. Considera usar otros productos Data para casos de uso analíticos.
Endpoint de Horizon | Método(s) RPC correspondiente(s) | Equivalente en Indexer | Recursos de análisis |
---|---|---|---|
GET / | getLatestLedger getVersionInfo getHealth getNetwork | No aplicable | Guía para analistas |
GET /ledgers | getLedgers | Crea un getLedgers con historial completo, usando Galexie, para crear una vista histórica del ledger. | Ledgers |
GET /ledgers/{seq} | getLedgers (con filtro para secuencia) | Usa una vista getLedgers con historial completo, filtrada por secuencia del ledger | Ledgers |
GET /ledgers/{seq}/transactions | getTransactions (con filtro por secuencia del ledger) | Usa getTransactions con filtro por secuencia del ledger para obtener las transacciones de un ledger específico | Transacciones |
GET /ledgers/{seq}/operations | getTransactions | Usa getTransactions para el ledger dado, luego analiza el XDR de la transacción para operaciones individuales. | Operaciones |
GET /ledgers/{seq}/payments | getEvents getTransactions ⚠️ | Usa getEvents (específicamente eventos CAP-67 cuando estén disponibles) y analiza el meta XDR de getTransactions para identificar operaciones parecidas a pagos. | Pagos |
GET /ledgers/{seq}/effects | getEvents getTransactions ⚠️ | Usa getEvents (cuando se amplíe para cubrir todos los efectos con CAP-67) y analiza el meta XDR de getTransactions para obtener datos relevantes. | Efectos |
POST /transactions | sendTransaction | No aplicable | No aplicable |
POST /transactions_async | sendTransaction | No aplicable | No aplicable |
GET /transactions | getTransactions | Usa getTransactions para crear una lista histórica de transacciones | Transacciones |
GET /transactions/{hash} | getTransaction | Usa getTransaction para recuperar una transacción específica por su hash | Transacciones |
GET /transactions/{hash}/operations | getTransaction | Filtra getTransaction por hash y luego analiza su XDR para obtener operaciones | Operaciones |
GET /transactions/{hash}/payments | No existe equivalente directo en RPC; usa getEvents o analiza getTransactions | Filtra getTransaction por hash y analiza sus eventos y tipos de operación para identificar pagos. | Pagos |
GET /transactions/{hash}/effects | No existe equivalente directo en RPC; usa getEvents o analiza getTransactions | Filtra getTransaction por hash y analiza sus eventos y metadata para obtener datos relevantes. | Efectos |
GET /operations | getTransactions | Ingiere todos los ledgers/transacciones históricas y crea y crea una vista de operaciones para filtrar. | Operaciones |
GET /operations/{id} | No existe equivalente directo en RPC | Almacena el ID de operación de Horizon y mapea de vuelta a la secuencia del ledger y al índice de la transacción para recuperar la transacción relevante vía getTransactions . | Operaciones |
GET /operations/{id}/effects | No existe equivalente directo en RPC | Recupera la operación por ID (como arriba) y luego analiza su transacción asociada y eventos para obtener efectos. | Efectos |
GET /fee_stats | getFeeStats simulateTransaction | Datos indexados no recomendados. | Estadísticas de tarifas |
GET /accounts | No existe equivalente directo en RPC | Ingiere todo el historial de ledger vía getLedgers para crear y mantener una lista completa de cuentas. | Cuentas |
GET /accounts/{address} | getLedgerEntries | Usa getLedgerEntries para una dirección específica de cuenta. Nota: RPC no proporcionará información de líneas de confianza asociadas con la cuenta directamente, como lo hace Horizon. Necesitarás derivar esta información a partir de las entradas del ledger. | Cuentas |
GET /claimable_balances | No existe equivalente directo en RPC | Ingiere todo el historial del ledger vía getLedgers para crear y mantener una lista completa de saldos reclamables. | Saldos reclamables |
GET /claimable_balances/{id} | getLedgerEntries | Usa getLedgerEntries para recuperar un saldo reclamable específico por ID. | Saldos reclamables |
GET /claimable_balances/{id}/transactions | No existe equivalente directo en RPC | Rastrea las transacciones que interactúan con un saldo reclamable específico a partir de sus datos históricos de ledger. | Saldos reclamables |
GET /claimable_balances/{id}/operations | No existe equivalente directo en RPC | Rastrea las operaciones relacionadas con un saldo reclamable específico a partir de los datos históricos del ledger. | Saldos reclamables |
GET /liquidity_pools | No existe equivalente directo en RPC | Ingiere todo el historial del ledger vía getLedgers para crear y mantener una lista completa de fondos de liquidez. | Fondos de Liquidez |
GET /liquidity_pools/{id} | getLedgerEntries | Usa getLedgerEntries para recuperar un fondo de liquidez específico por ID. | Fondos de Liquidez |
GET /liquidity_pools/{id}/transactions | No existe equivalente directo en RPC | Rastrea las transacciones que interactúan con un fondo de liquidez específico a partir de sus datos históricos de ledger. | Fondos de Liquidez |
GET /liquidity_pools/{id}/operations | No existe equivalente directo en RPC | Rastrea las operaciones relacionadas con un fondo de liquidez específico a partir de los datos históricos del ledger. | Fondos de Liquidez |
GET /liquidity_pools/{id}/effects | No existe equivalente directo en RPC | Rastrea efectos relacionados con un fondo de liquidez específico a partir de los datos históricos del ledger. | Fondos de Liquidez |
GET /liquidity_pools/{id}/trades | No existe equivalente directo en RPC | Infiera operaciones relacionadas con un fondo de liquidez específico a partir de los datos históricos del ledger (por ejemplo, de getEvents y metadatos de getTransactions ). | Fondos de Liquidez |
GET /offers | No existe equivalente directo en RPC | Ingiere todo el historial del ledger vía getLedgers para crear y mantener una lista completa de ofertas. | Ofertas |
GET /offers/{id} | getLedgerEntries | Usa getLedgerEntries para recuperar una oferta específica por ID. | Ofertas |
GET /offers/{id}/trades | No existe equivalente directo en RPC | Infiera operaciones relacionadas con una oferta específica a partir de los datos históricos del ledger (por ejemplo, de getEvents y metadatos de getTransactions ). | Ofertas |
GET /payments | getEvents getTransactions ⚠️ | Usa getEvents (eventos CAP-67) y procesa metadatos de getTransactions para operaciones parecidas a pagos a lo largo de toda la historia. | Pagos |
GET /effects | getEvents getTransactions ⚠️ | Usa getEvents (cuando se amplíe) y procesa metadatos de getTransactions para derivar efectos a lo largo de toda la historia. | Efectos |
GET /trades | getEvents getTransactions ⚠️ | Infiera operaciones a partir de metadatos de getEvents y getTransactions a lo largo de toda la historia, ya que no existe un "evento de operación" directo en RPC. | Operaciones |
El método getTransactions
puede usarse para recuperar eventos agrupados por transacción. Los eventos están contenidos en el meta XDR de la transacción (campo resultMetaXdr
).
El método getEvents
no es un reemplazo directo de los endpoints de Horizon.
El método devuelve un flujo de eventos que actualmente solo incluye eventos de contratos en el protocolo actual. En un futuro cercano, como resultado de CAP-67, este método se ampliará para incluir eventos de operaciones no relacionadas con contratos.
Mientras tanto, el método getTransactions
puede usarse para recuperar el meta XDR de transacciones que contienen operaciones no relacionadas con contratos para determinar qué movimientos de valor han ocurrido. El meta XDR también contiene eventos de contratos.