Saltar al contenido principal

JSON-RPC — Compatible con Solana

QoreChain proporciona una interfaz JSON-RPC compatible con Solana a través de su entorno de ejecución SVM (Solana Virtual Machine), lo que permite que las herramientas y los SDK existentes de Solana interactúen con QoreChain de forma nativa.

El envío de transacciones SVM está actualmente deshabilitado

A partir de la versión de cadena v3.1.89 (22 de agosto), tras un incidente, el lane de ejecución SVM está deshabilitado en toda la red para el envío de transacciones — cualquier transacción devuelve code 11, "SVM module is disabled". Esto se aplica en toda la red, no solo en los endpoints públicos de solo lectura. Los métodos de tipo lectura de la tabla siguiente (p. ej. getBalance, getAccountInfo) responden con normalidad en los endpoints públicos, pero no intentes una integración en vivo que envíe transacciones SVM hasta que el lane vuelva a abrirse — se trata de una deshabilitación en tiempo de compilación, no de un parámetro en tiempo de ejecución, por lo que no puede reactivarse mediante una votación de gobernanza; se espera que permanezca deshabilitado hasta que una auditoría externa lo apruebe.

Conexión​

TransporteDirección
HTTP (nodo propio)http://127.0.0.1:8899
HTTPS (público, mainnet, solo lectura)https://svm.qore.host
HTTPS (público, testnet, solo lectura)https://svm-testnet.qore.host

El servidor JSON-RPC es iniciado por qorechaind start y está habilitado por defecto, escuchando en 127.0.0.1:8899. Se configura mediante una sección [svm-rpc] en app.toml (enable + address). Un nodo recién iniciado ya sirve esta interfaz — no se requiere ningún proceso adicional. Los endpoints públicos son de solo lectura (el envío de transacciones está deshabilitado en el borde).

nota

A partir de la versión de cadena v3.1.82, la interfaz SVM sirve el saldo nativo de QOR de la cuenta — los mismos fondos unificados visibles en las interfaces Cosmos y EVM — denominado en lamports (9 decimales; 1 uqor = 1,000 lamports). Consulta QOR nativo en la interfaz SVM.


Métodos​

MétodoParámetrosDescripción
getAccountInfopubkey (cadena base58)Devuelve los datos de la cuenta, el propietario, los lamports y el indicador executable
getBalancepubkey (cadena base58)Devuelve el saldo de QOR nativo en lamports para la clave pública dada
getSignaturesForAddressaddress (cadena base58)Devuelve las firmas de transacciones que involucran la dirección (detección de depósitos)
getSlotningunoDevuelve el número de slot actual
getMinimumBalanceForRentExemptiondataLength (entero)Devuelve el saldo mínimo para la exención de renta según el tamaño de los datos
getVersionningunoDevuelve la versión del software del nodo
getHealthningunoDevuelve el estado de salud del nodo ("ok" si está sano)
getBlockHeightningunoDevuelve la altura de bloque actual
getLatestBlockhashningunoDevuelve un blockhash reciente y lastValidBlockHeight
getRecentBlockhashningunoForma heredada de getLatestBlockhash
getFeeForMessagemessage (base64)Devuelve la tarifa de un mensaje (lamports)
getMultipleAccountspubkeys (array)Devuelve varias cuentas en una sola llamada
getProgramAccountsprogramId (base58)Devuelve las cuentas que pertenecen a un programa
getTokenAccountsByOwnerowner, filtroDevuelve las cuentas de token de un propietario
getTokenAccountsByDelegatedelegate, filtroDevuelve las cuentas de token de un delegado

Los métodos fuera de esta lista, como getGenesisHash y getEpochInfo, devuelven -32601 method not found (comprobado contra https://svm.qore.host y https://svm-testnet.qore.host, 20 de octubre de 2026). Desde v3.2.2, las direcciones base58 en las consultas RPC y gRPC deben ser canónicas y de longitud acotada; una dirección mal formada se rechaza. getTransaction se acepta, pero actualmente responde con un sobre que no tiene el campo result, así que no cuentes con él. El slot que informa getSlot sigue la altura de bloque de la cadena.


Formato de respuesta​

Todas las respuestas siguen la especificación JSON-RPC 2.0. Las respuestas que hacen referencia al estado en cadena incluyen un objeto context con el slot actual:

{
"jsonrpc": "2.0",
"id": 1,
"result": {
"context": {
"slot": 123456
},
"value": { ... }
}
}

Ejemplos​

getAccountInfo​

Solicitud:

curl -X POST http://localhost:8899 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "getAccountInfo",
"params": [
"4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T",
{ "encoding": "base64" }
],
"id": 1
}'

Respuesta:

{
"jsonrpc": "2.0",
"id": 1,
"result": {
"context": {
"slot": 123456
},
"value": {
"data": ["AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", "base64"],
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0
}
}
}

getBalance​

Solicitud:

curl -X POST http://localhost:8899 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "getBalance",
"params": ["4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T"],
"id": 2
}'

Respuesta:

{
"jsonrpc": "2.0",
"id": 2,
"result": {
"context": {
"slot": 123456
},
"value": 1000000000
}
}

getVersion​

Solicitud:

curl -X POST http://localhost:8899 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "getVersion",
"params": [],
"id": 3
}'

Respuesta:

{
"jsonrpc": "2.0",
"id": 3,
"result": {
"solana-core": "1.18.0-qorechain",
"feature-set": 0
}
}

La cadena de versión 1.18.0-qorechain indica compatibilidad con la interfaz RPC de Solana 1.18.0 ejecutándose sobre el entorno de ejecución SVM de QoreChain.


Integración con @solana/web3.js​

Las aplicaciones existentes de Solana pueden conectarse a QoreChain apuntando el objeto Connection al endpoint SVM local:

import { Connection, PublicKey, LAMPORTS_PER_SOL } from "@solana/web3.js";

const connection = new Connection("http://127.0.0.1:8899", "confirmed");

// Check version
const version = await connection.getVersion();
console.log("Node version:", version["solana-core"]);

// Get balance
const pubkey = new PublicKey("4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T");
const balance = await connection.getBalance(pubkey);
console.log("Balance:", balance / LAMPORTS_PER_SOL);

// Get slot
const slot = await connection.getSlot();
console.log("Current slot:", slot);

// Get account info
const accountInfo = await connection.getAccountInfo(pubkey);
if (accountInfo) {
console.log("Owner:", accountInfo.owner.toBase58());
console.log("Executable:", accountInfo.executable);
console.log("Data length:", accountInfo.data.length);
}

Notas​

  • Formato de direcciones: las cuentas SVM usan claves públicas codificadas en base58 (formato estándar de Solana), no el prefijo Bech32 qor1 utilizado por los módulos nativos del Cosmos SDK.
  • Puente entre VMs: para mover activos entre los entornos de ejecución EVM y SVM, usa el módulo Cross-VM (x/crossvm). Consulta los Comandos de transacción para la sintaxis de crossvm call. El lane SVM está deshabilitado y MsgCrossVMCall está desactivado en la mainnet, por lo que hoy es solo de referencia.
  • Despliegue de programas: despliega programas BPF mediante la CLI (qorechaind tx svm deploy-program) o de forma programática a través del entorno de ejecución SVM.
  • Presupuesto de cómputo: el entorno de ejecución SVM aplica por defecto un presupuesto de cómputo de 1,400,000 unidades de cómputo por transacción. Esto es configurable mediante los parámetros del módulo.