Aller au contenu principal

JSON-RPC — Espace de noms eth_

QoreChain implémente une interface JSON-RPC compatible EVM, de sorte que les outils Ethereum standards (MetaMask, Hardhat, Foundry, ethers.js, web3.js) peuvent lire l'état de la chaîne et estimer le gas sans modification. L'envoi d'une transaction depuis le lane EVM nécessite une étape supplémentaire depuis la version de chaîne v3.2.0 : le compte émetteur doit disposer d'une clé post-quantique enregistrée et d'une fenêtre d'autorisation EVM ouverte (voir Envoi de transactions).

Connexion​

TransportAdresse par défaut
HTTPhttp://localhost:8545
WebSocketws://localhost:8546
remarque

L'interface JSON-RPC EVM est servie par le mainnet qorechain-vladi (chain ID EVM 9801, hexadécimal 0x2649, version de nœud v3.2.3, en production depuis le 7 juin 2026 ; v3.2.4 à partir de la hauteur 3 742 566) et le testnet qorechain-diana (chain ID EVM 9800, hexadécimal 0x2648, version de nœud v3.2.4 depuis le 19 octobre 2026). Les adresses locales ci-dessus s'appliquent à un nœud que vous exécutez vous-même. Les points de terminaison HTTP publics sont https://evm.qore.host (mainnet) et https://evm-testnet.qore.host (testnet), listés dans Réseaux. Le seul WebSocket EVM public est celui du testnet (wss://evm-ws-testnet.qore.host) ; il n'existe pas de WebSocket EVM public pour le mainnet.

Espaces de noms pris en charge​

Espace de nomsDescription
eth_Méthodes JSON-RPC Ethereum de base
web3_Méthodes utilitaires (version du client, hachage)
net_Méthodes de statut réseau
txpool_Inspection du pool de transactions
rpc_Introspection du serveur (rpc_modules)

Méthodes eth_​

MéthodeParamètresDescription
eth_blockNumberaucunRenvoie le dernier numéro de bloc
eth_getBalanceaddress, blockNumberRenvoie le solde d'une adresse en wei
eth_getTransactionCountaddress, blockNumberRenvoie le nonce (nombre de transactions) d'une adresse
eth_sendRawTransactionsignedTxDataSoumet une transaction signée pour diffusion
eth_callcallObject, blockNumberExécute un appel en lecture seule sur l'EVM
eth_estimateGascallObjectEstime le gas requis pour une transaction
eth_getBlockByNumberblockNumber, fullTx (bool)Renvoie les données d'un bloc par numéro
eth_getTransactionByHashtxHashRenvoie les données d'une transaction par hachage
eth_getTransactionReceipttxHashRenvoie le reçu d'une transaction minée
eth_getLogsfilterObjectRenvoie les journaux correspondant à un filtre
eth_chainIdaucunRenvoie l'ID de chaîne (encodé en hexadécimal)
eth_gasPriceaucunRenvoie le prix du gas actuel en wei
eth_feeHistoryblockCount, newestBlock, rewardPercentilesRenvoie l'historique des frais (EIP-1559)
eth_getBlockByHashblockHash, fullTx (bool)Renvoie les données d'un bloc par hachage
eth_getCodeaddress, blockNumberRenvoie le bytecode d'un contrat
eth_getStorageAtaddress, slot, blockNumberRenvoie un emplacement de stockage
eth_getBlockReceiptsblockNumberRenvoie tous les reçus d'un bloc
eth_getProofaddress, storageKeys, blockNumberRenvoie une preuve de compte
eth_createAccessListcallObject, blockNumberConstruit une liste d'accès pour un appel
eth_maxPriorityFeePerGasaucunRenvoie les frais de priorité suggérés (wei)
eth_syncingaucunRenvoie false lorsque le nœud est à jour
eth_newFilter, eth_newBlockFilter, eth_getFilterChangesobjet de filtre / ID de filtreFiltres par interrogation

Méthodes web3_​

MéthodeParamètresDescription
web3_clientVersionaucunRenvoie la chaîne de version du client
web3_sha3data (hex)Renvoie le hachage Keccak-256 de l'entrée

Méthodes txpool_​

MéthodeParamètresDescription
txpool_statusaucunRenvoie le nombre de transactions en attente et en file d'attente
txpool_contentaucunRenvoie les transactions en attente et en file d'attente (absent des points de terminaison publics)
txpool_inspectaucunRenvoie un résumé du pool (absent des points de terminaison publics)

Méthodes net_​

MéthodeParamètresDescription
net_versionaucunRenvoie l'ID du réseau
net_listeningaucunRenvoie true si le nœud est à l'écoute
net_peerCountaucunRenvoie le nombre de pairs connectés (hex)

Configuration​

Activez et configurez le serveur JSON-RPC dans 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 (a node initialised by v3.2.3 or later defaults to "eth,net,web3";
# txpool is opt-in because it publishes the node's pending transactions)
api = "eth,web3,net,txpool"

# 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

Limites des points de terminaison publics​

remarque
  • eth_getLogs accepte au plus 10 000 blocs entre fromBlock et toBlock. Une plage plus large renvoie {"code":-32000,"message":"maximum [from, to] blocks distance: 10000"}. Interrogez par fenêtres de 10 000 blocs ou moins. Le paramètre distinct filter-cap limite le nombre de journaux renvoyés.
  • txpool_status fonctionne sur les points de terminaison publics. txpool_content et txpool_inspect sont désactivés à la fois sur le point de terminaison mainnet public et sur le point de terminaison testnet public (ils fonctionnent sur un nœud que vous exécutez vous-même, avec txpool dans sa liste api).
  • Les méthodes debug_* et eth_signTransaction ne sont pas disponibles.
  • eth_subscribe nécessite une connexion WebSocket. Via HTTP, il renvoie -32601 notifications not supported. Voir Événements WebSocket.
  • L'état aux hauteurs anciennes est élagué sur les points de terminaison publics ; un eth_call sur un bloc historique lointain peut donc échouer avec une erreur de version d'état.
  • Si un script reçoit 403 Forbidden, définissez un en-tête User-Agent explicite ; l'agent urllib par défaut de Python est bloqué, tandis que les clients requests, curl, Node et Go fonctionnent tels quels.

Envoi de transactions​

Le lane EVM exige une clé PQC et une fenêtre ouverte

Depuis la version de chaîne v3.2.0, le lane EVM n'admet une transaction (MsgEthereumTx, y compris les déploiements de contrats) que d'un compte disposant d'une clé post-quantique enregistrée et d'une fenêtre d'autorisation EVM ouverte. Un wallet EVM classique qui n'a pas effectué cette configuration ne peut pas soumettre de transactions : le nœud les refuse avec une erreur du module pqc (codes 26, 27 ou 28) au lieu de les inclure. La lecture des soldes, eth_call et l'estimation du gas ne nécessitent aucune fenêtre. Depuis la v3.2.2, une transaction signée sans chain id (pré-EIP-155) est également refusée, et depuis la v3.2.3, une fenêtre peut être limitée aux simples transferts de QOR (native_only) ou à une liste de destinataires (allowed_targets) ; une transaction hors de ce périmètre est refusée avec le code 27.

Vérifiez un compte avant d'envoyer :

  • GET /qorechain/pqc/v1/account/{address} (found: true signifie qu'une clé est enregistrée)
  • GET /qorechain/pqc/v1/evm_window/{address} (live: true signifie qu'une fenêtre admet actuellement des transactions)

Les deux sont décrits dans Points de terminaison REST / gRPC (la réponse de la fenêtre indique aussi native_only et allowed_targets). Une fenêtre s'ouvre avec une transaction QoreChain (MsgOpenEVMWindow, limitée à 17 280 blocs et 1 000 transactions au plus, plus un plafond de valeur), et non avec une transaction Ethereum. Voir Développement EVM pour une vue d'ensemble du lane.

Exemples​

eth_blockNumber​

Requête :

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

Réponse :

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

eth_chainId​

Requête :

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

Réponse (mainnet qorechain-vladi, chain ID 9801) :

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

Sur le testnet qorechain-diana (chain ID 9800), cette méthode renvoie "0x2648".

eth_getBalance​

Requête :

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

Réponse :

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

Connexion avec 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
  • L'ID de chaîne est renvoyé sous forme de chaîne hexadécimale. Convertissez-le en décimal pour la configuration du portefeuille — 0x2649 correspond à 9801 (mainnet), 0x2648 correspond à 9800 (testnet).
  • La tarification du gas suit le modèle EIP-1559. Utilisez eth_feeHistory pour estimer les frais de base et les frais de priorité.
  • Tags de bloc acceptés : "latest", "earliest", "pending", ou un numéro de bloc hexadécimal.
  • Limitations de filtrage : eth_getLogs est plafonné à filter-cap résultats par requête (10 000 par défaut), et les points de terminaison publics rejettent les plages de plus de 10 000 blocs. Utilisez des plages de blocs plus étroites pour les jeux de données volumineux.