Aller au contenu principal

JSON-RPC — Compatible Solana

QoreChain fournit une interface JSON-RPC compatible avec Solana via son runtime SVM (Solana Virtual Machine), permettant aux outils et SDK Solana existants d'interagir nativement avec QoreChain.

La soumission de transactions SVM est actuellement désactivée

Depuis la version de chaîne v3.1.89 (22 août), suite à un incident, la voie d'exécution SVM est désactivée pour l'ensemble du réseau pour la soumission de transactions — toute transaction renvoie code 11, "SVM module is disabled". Cela s'applique à l'ensemble du réseau, pas seulement aux points de terminaison publics en lecture seule. Les méthodes de type lecture du tableau ci-dessous (par ex. getBalance, getAccountInfo) répondent normalement sur les points de terminaison publics, mais ne tentez pas d'intégration réelle qui soumet des transactions SVM tant que la voie n'a pas rouvert — il s'agit d'une désactivation au moment de la compilation, et non d'un paramètre d'exécution, elle ne peut donc pas être réactivée par un vote de gouvernance ; elle devrait rester désactivée jusqu'à ce qu'un audit externe la valide.

Connexion​

TransportAdresse
HTTP (nœud propre)http://127.0.0.1:8899
HTTPS (public, mainnet, lecture seule)https://svm.qore.host
HTTPS (public, testnet, lecture seule)https://svm-testnet.qore.host

Le serveur JSON-RPC est démarré par qorechaind start et est activé par défaut, à l'écoute sur 127.0.0.1:8899. Il est configuré via une section [svm-rpc] dans app.toml (enable + address). Un nœud tout juste démarré sert déjà cette interface — aucun processus supplémentaire n'est requis. Les points de terminaison publics sont en lecture seule (la soumission de transactions est désactivée en périphérie).

remarque

Depuis la version de chaîne v3.1.82, l'interface SVM sert le solde QOR natif du compte — les mêmes fonds unifiés visibles sur les interfaces Cosmos et EVM — libellé en lamports (9 décimales ; 1 uqor = 1 000 lamports). Voir QOR natif sur l'interface SVM.


Méthodes​

MéthodeParamètresDescription
getAccountInfopubkey (chaîne base58)Renvoie les données du compte, le propriétaire, les lamports et l'indicateur exécutable
getBalancepubkey (chaîne base58)Renvoie le solde QOR natif en lamports pour la clé publique donnée
getSignaturesForAddressaddress (chaîne base58)Renvoie les signatures de transaction impliquant l'adresse (détection de dépôt)
getSlotaucunRenvoie le numéro de slot actuel
getMinimumBalanceForRentExemptiondataLength (entier)Renvoie le solde minimum pour l'exemption de loyer compte tenu de la taille des données
getVersionaucunRenvoie la version du logiciel du nœud
getHealthaucunRenvoie l'état de santé du nœud ("ok" si sain)
getBlockHeightaucunRenvoie la hauteur de bloc actuelle
getLatestBlockhashaucunRenvoie un blockhash récent et lastValidBlockHeight
getRecentBlockhashaucunForme héritée de getLatestBlockhash
getFeeForMessagemessage (base64)Renvoie les frais d'un message (lamports)
getMultipleAccountspubkeys (tableau)Renvoie plusieurs comptes en un seul appel
getProgramAccountsprogramId (base58)Renvoie les comptes détenus par un programme
getTokenAccountsByOwnerowner, filtreRenvoie les comptes de tokens d'un propriétaire
getTokenAccountsByDelegatedelegate, filtreRenvoie les comptes de tokens d'un délégué

Les méthodes absentes de cette liste, telles que getGenesisHash et getEpochInfo, renvoient -32601 method not found (vérifié sur https://svm.qore.host et https://svm-testnet.qore.host, le 20 octobre 2026). Depuis la v3.2.2, les adresses base58 dans les requêtes RPC et gRPC doivent être canoniques et de longueur bornée ; une adresse mal formée est refusée. getTransaction est accepté mais répond actuellement par une enveloppe sans champ result ; ne vous y fiez donc pas. Le slot rapporté par getSlot suit la hauteur de bloc de la chaîne.


Format de réponse​

Toutes les réponses suivent la spécification JSON-RPC 2.0. Les réponses faisant référence à l'état on-chain incluent un objet context avec le slot actuel :

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

Exemples​

getAccountInfo​

Requête :

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

Réponse :

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

getBalance​

Requête :

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

Réponse :

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

getVersion​

Requête :

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

Réponse :

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

La chaîne de version 1.18.0-qorechain indique la compatibilité avec l'interface RPC Solana 1.18.0 exécutée sur le runtime SVM de QoreChain.


Intégration @solana/web3.js​

Les applications Solana existantes peuvent se connecter à QoreChain en pointant l'objet Connection vers le point de terminaison 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);
}

Notes​

  • Format d'adresse : les comptes SVM utilisent des clés publiques encodées en base58 (format Solana standard), et non le préfixe Bech32 qor1 utilisé par les modules natifs du SDK Cosmos.
  • Pont inter-VM : pour déplacer des actifs entre les runtimes EVM et SVM, utilisez le module Cross-VM (x/crossvm). Voir Commandes de transaction pour la syntaxe crossvm call. La voie SVM est désactivée et MsgCrossVMCall est désactivé sur le mainnet ; il s'agit donc aujourd'hui d'une simple référence.
  • Déploiement de programmes : déployez des programmes BPF via la CLI (qorechaind tx svm deploy-program) ou par programmation via le runtime SVM.
  • Budget de calcul : le runtime SVM applique par défaut un budget de calcul de 1,400,000 unités de calcul par transaction. Ceci est configurable via les paramètres du module.