Sari la conținutul principal

JSON-RPC — Spațiul de nume eth_

QoreChain implementează o interfață JSON-RPC complet compatibilă cu EVM, permițând instrumentelor standard Ethereum (MetaMask, Hardhat, Foundry, ethers.js, web3.js) să interacționeze cu lanțul fără modificări.

Conexiune

TransportAdresă implicită
HTTPhttp://localhost:8545
WebSocketws://localhost:8546
notă

Interfața JSON-RPC EVM este servită de mainnet-ul qorechain-vladi (EVM chain ID 9801, hex 0x2649, activ pe versiunea de lanț v3.1.85) și de testnet-ul qorechain-diana (EVM chain ID 9800, hex 0x2648). Adresele locale de mai sus se aplică unui nod pe care îl rulezi tu însuți; înlocuiește-le cu endpoint-ul de mainnet sau testnet al furnizorului tău pentru acces la distanță.

Spații de nume acceptate

Spațiu de numeDescriere
eth_Metode JSON-RPC Ethereum de bază
web3_Metode utilitare (versiunea clientului, hashing)
net_Metode de stare a rețelei
txpool_Inspecția pool-ului de tranzacții
qor_Extensii specifice QoreChain (vezi Spațiul de nume qor_)

Metode eth_

MetodăParametriDescriere
eth_blockNumberniciunulReturnează cel mai recent număr de bloc
eth_getBalanceaddress, blockNumberReturnează soldul unei adrese în wei
eth_getTransactionCountaddress, blockNumberReturnează nonce-ul (numărul de tranzacții) pentru o adresă
eth_sendRawTransactionsignedTxDataTrimite o tranzacție semnată pentru difuzare
eth_callcallObject, blockNumberExecută un apel read-only împotriva EVM
eth_estimateGascallObjectEstimează gas-ul necesar pentru o tranzacție
eth_getBlockByNumberblockNumber, fullTx (bool)Returnează datele unui bloc după număr
eth_getTransactionByHashtxHashReturnează datele unei tranzacții după hash
eth_getTransactionReceipttxHashReturnează chitanța pentru o tranzacție minată
eth_getLogsfilterObjectReturnează jurnalele care corespund unui filtru
eth_chainIdniciunulReturnează ID-ul lanțului (codat în hex)
eth_gasPriceniciunulReturnează prețul curent al gas-ului în wei
eth_feeHistoryblockCount, newestBlock, rewardPercentilesReturnează date istorice despre taxe (EIP-1559)

Metode web3_

MetodăParametriDescriere
web3_clientVersionniciunulReturnează șirul cu versiunea clientului
web3_sha3data (hex)Returnează hash-ul Keccak-256 al intrării

Metode net_

MetodăParametriDescriere
net_versionniciunulReturnează ID-ul rețelei
net_listeningniciunulReturnează true dacă nodul ascultă
net_peerCountniciunulReturnează numărul de peers conectați (hex)

Configurare

Activează și configurează serverul JSON-RPC în app.toml:

[json-rpc]
# Enable the JSON-RPC server
enable = true

# HTTP server address
address = "0.0.0.0:8545"

# WebSocket server address
ws-address = "0.0.0.0:8546"

# Enabled API namespaces
api = "eth,web3,net,txpool,qor"

# Maximum number of logs returned by eth_getLogs
filter-cap = 10000

# Maximum gas for eth_call and eth_estimateGas
gas-cap = 25000000

# EVM execution timeout
evm-timeout = "5s"

# Transaction fee cap (in QOR)
txfee-cap = 1

# Maximum open WebSocket connections
max-open-connections = 0

Exemple

eth_blockNumber

Cerere:

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

Răspuns:

{
"jsonrpc": "2.0",
"id": 1,
"result": "0x53b35"
}

eth_chainId

Cerere:

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

Răspuns (mainnet qorechain-vladi, chain ID 9801):

{
"jsonrpc": "2.0",
"id": 2,
"result": "0x2649"
}

Pe testnet-ul qorechain-diana (chain ID 9800) această metodă returnează "0x2648".

eth_getBalance

Cerere:

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

Răspuns:

{
"jsonrpc": "2.0",
"id": 3,
"result": "0x56bc75e2d63100000"
}

Conectarea cu ethers.js

import { ethers } from "ethers";

const provider = new ethers.JsonRpcProvider("http://localhost:8545");

// Get latest block
const block = await provider.getBlockNumber();
console.log("Latest block:", block);

// Get balance
const balance = await provider.getBalance("0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28");
console.log("Balance:", ethers.formatEther(balance), "QOR");
info
  • Chain ID-ul este returnat ca șir hex. Convertește-l în zecimal pentru configurarea portofelului — 0x2649 este 9801 (mainnet), 0x2648 este 9800 (testnet).
  • Stabilirea prețului gas-ului urmează modelul EIP-1559. Folosește eth_feeHistory pentru estimarea taxei de bază și a taxei prioritare.
  • Etichete de bloc acceptate: "latest", "earliest", "pending" sau un număr de bloc în hex.
  • Limitări ale filtrului: eth_getLogs este plafonat la filter-cap rezultate per interogare (implicit 10.000). Folosește intervale de blocuri mai înguste pentru seturi mari de date.