Sari la conținutul principal

JSON-RPC — Compatibil cu Solana

QoreChain oferă o interfață JSON-RPC compatibilă cu Solana prin runtime-ul său SVM (Solana Virtual Machine), permițând instrumentelor și SDK-urilor Solana existente să interacționeze nativ cu QoreChain.

Conexiune

TransportAdresă
HTTP (nod propriu)http://127.0.0.1:8899
HTTPS (public, mainnet, doar citire)https://svm.qore.host
HTTPS (public, testnet, doar citire)https://svm-testnet.qore.host

Serverul JSON-RPC este pornit de qorechaind start și este activat implicit, ascultând pe 127.0.0.1:8899. Este configurat printr-o secțiune [svm-rpc] în app.toml (enable + address). Un nod proaspăt pornit servește deja această interfață — nu este necesar niciun proces suplimentar. Endpoint-urile publice sunt doar pentru citire (trimiterea tranzacțiilor este dezactivată la nivel de edge).

notă

Începând cu versiunea de lanț v3.1.82, interfața SVM servește soldul nativ QOR al contului — aceleași fonduri unificate vizibile pe interfețele Cosmos și EVM — denominat în lamports (9 zecimale; 1 uqor = 1.000 lamports). Vezi QOR nativ pe interfața SVM.


Metode

MetodăParametriDescriere
getAccountInfopubkey (șir base58)Returnează datele contului, proprietarul, lamports și indicatorul executable
getBalancepubkey (șir base58)Returnează soldul nativ QOR în lamports pentru cheia publică dată
getSignaturesForAddressaddress (șir base58)Returnează semnăturile tranzacțiilor care implică adresa (detectarea depunerilor)
getSlotniciunulReturnează numărul slotului curent
getMinimumBalanceForRentExemptiondataLength (număr întreg)Returnează soldul minim pentru scutirea de chirie pentru dimensiunea de date dată
getVersionniciunulReturnează versiunea software-ului nodului
getHealthniciunulReturnează starea de sănătate a nodului ("ok" dacă este sănătos)

Formatul răspunsurilor

Toate răspunsurile respectă specificația JSON-RPC 2.0. Răspunsurile care fac referire la starea on-chain includ un obiect context cu slot-ul curent:

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

Exemple

getAccountInfo

Cerere:

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

Răspuns:

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

getBalance

Cerere:

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

Răspuns:

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

getVersion

Cerere:

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

Răspuns:

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

Șirul de versiune 1.18.0-qorechain indică compatibilitatea cu interfața RPC Solana 1.18.0 care rulează pe runtime-ul SVM QoreChain.


Integrare cu @solana/web3.js

Aplicațiile Solana existente se pot conecta la QoreChain direcționând obiectul Connection către endpoint-ul 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);
}

Note

  • Formatul adreselor: Conturile SVM folosesc chei publice codificate base58 (formatul standard Solana), nu prefixul Bech32 qor1 folosit de modulele native Cosmos SDK.
  • Punte cross-VM: Pentru a muta active între runtime-urile EVM și SVM, folosește modulul Cross-VM (x/crossvm). Vezi Comenzile de tranzacție pentru sintaxa crossvm call.
  • Implementarea programelor: Implementează programe BPF prin CLI (qorechaind tx svm deploy-program) sau programatic prin runtime-ul SVM.
  • Buget de calcul: Runtime-ul SVM impune implicit un buget de calcul de 1.400.000 de unități de calcul per tranzacție. Acesta este configurabil prin parametrii modulului.