Sari la conținutul principal

Dezvoltare EVM

QoreChain rulează un mediu de execuție complet compatibil cu EVM pe QoreChain EVM Engine, permițându-vă să implementați și să interacționați cu contracte inteligente Solidity folosind uneltele obișnuite. Modulul EVM expune o interfață JSON-RPC pe portul 8545 (WebSocket pe 8546) care suportă fluxurile de lucru standard de dezvoltare Ethereum.

notă

Exemplele de mai jos vizează rețeaua mainnet qorechain-vladi (chain ID EVM 9801), activă din 7 iunie 2026, rulând versiunea de chain v3.1.97. Pentru testnet-ul qorechain-diana, folosiți chain ID EVM 9800.


Endpoint JSON-RPC

ProprietateValoare
URL implicithttp://localhost:8545
URL WebSocketws://localhost:8546
Spații de nume suportateeth_, web3_, net_, txpool_, qor_
Chain ID (mainnet)9801 (qorechain-vladi)
Chain ID (testnet)9800 (qorechain-diana)
Simbol monedăQOR

Spațiul de nume qor_ oferă metode specifice QoreChain. Vezi Spațiul de nume personalizat mai jos.


Configurare portofel (MetaMask)

Adăugați QoreChain ca rețea personalizată în MetaMask:

CâmpValoare MainnetValoare Testnet
Nume rețeaQoreChain (qorechain-vladi)QoreChain Diana
URL RPChttp://localhost:8545http://localhost:8545
Chain ID98019800
Simbol monedăQORQOR
URL explorator blocuri(folosiți exploratorul oficial de mainnet)(lăsați necompletat pentru testnet local)

Hardhat

Instalați Hardhat și configurați fișierul hardhat.config.js:

require("@nomicfoundation/hardhat-toolbox");

module.exports = {
solidity: "0.8.24",
networks: {
qorechain: {
url: "http://localhost:8545",
accounts: ["0xYOUR_PRIVATE_KEY_HEX"],
chainId: 9801, // mainnet qorechain-vladi (use 9800 for qorechain-diana testnet)
},
},
};

Implementați un contract:

npx hardhat run scripts/deploy.js --network qorechain

Rulați teste pe EVM-ul QoreChain:

npx hardhat test --network qorechain

Foundry

Creați și implementați un contract cu Foundry:

# Create a new project
forge init my-project && cd my-project

# Build
forge build

# Deploy
forge create --rpc-url http://localhost:8545 \
--private-key 0xYOUR_PRIVATE_KEY_HEX \
src/MyContract.sol:MyContract

# Interact
cast call <contract-address> "myFunction()" --rpc-url http://localhost:8545
cast send <contract-address> "setValue(uint256)" 42 \
--rpc-url http://localhost:8545 \
--private-key 0xYOUR_PRIVATE_KEY_HEX

Ethers.js

import { ethers } from "ethers";

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

// Get chain info
const network = await provider.getNetwork();
console.log("Chain ID:", network.chainId); // 9801n on mainnet (9800n on testnet)

// Read balance
const balance = await provider.getBalance("0xYourAddress");
console.log("Balance:", ethers.formatEther(balance), "QOR");

// Send transaction
const wallet = new ethers.Wallet("0xYOUR_PRIVATE_KEY_HEX", provider);
const tx = await wallet.sendTransaction({
to: "0xRecipientAddress",
value: ethers.parseEther("1.0"),
});
await tx.wait();

Modelul de gas

QoreChain folosește un model de taxă de bază dinamică EIP-1559 pentru tranzacțiile EVM:

  • Taxa de bază se ajustează per bloc, în funcție de gradul de utilizare
  • Utilizatorii pot seta maxFeePerGas și maxPriorityFeePerGas
  • Taxele de prioritate merg către propunătorul blocului

Puntea de denominare

Tokenul nativ QOR are 6 zecimale (uqor), în timp ce EVM-ul așteaptă 18 zecimale. Modulul x/precisebank gestionează conversia fără probleme:

ContextDenominareZecimaleExemplu
Chain nativuqor61000000 uqor = 1 QOR
EVMwei181e18 wei = 1 QOR

Această conversie este transparentă — când verificați un sold prin eth_getBalance, răspunsul este denominat în wei cu 18 zecimale. Când același cont este interogat prin modulul nativ de bank, soldul apare în uqor cu 6 zecimale.


Perechi de tokenuri ERC-20

Modulul x/erc20 oferă înregistrarea automată a perechilor de tokenuri între denominările native Cosmos SDK și contractele ERC-20:

  • Tokenurile native pot fi folosite în cadrul contractelor EVM ca ERC-20
  • Tokenurile ERC-20 implementate pe EVM pot fi convertite în denominări native
  • Conversia este bidirecțională și gestionată la nivel de protocol
# Register a new token pair (governance proposal)
qorechaind tx erc20 register-coin <denom> --from mykey

# Convert native tokens to ERC-20
qorechaind tx erc20 convert-coin 1000000uqor --from mykey

# Convert ERC-20 back to native
qorechaind tx erc20 convert-erc20 <contract-addr> 1000000000000000000 --from mykey

Compatibilitate PQC și EVM

Tranzacțiile EVM folosesc semnături ECDSA clasice (secp256k1) pentru compatibilitate completă cu uneltele, portofelele și bibliotecile Ethereum existente. Acest lucru asigură că MetaMask, Hardhat, Foundry, ethers.js și toate uneltele EVM standard funcționează fără modificări.

Pentru securitate post-cuantică în cadrul EVM:

  • Folosiți precompilatul PQC Verify (0x0000...0A01) pentru a verifica pe chain semnături ML-DSA-87 din Solidity. Vezi Precompilate EVM.
  • Mesajele cross-VM de la EVM către CosmWasm sau SVM pot fi semnate PQC la nivelul tranzacției Cosmos SDK.
  • Conturile pot înregistra opțional chei publice PQC prin x/pqc pentru securitate hibridă.

Spațiul de nume personalizat qor_

QoreChain extinde JSON-RPC cu un spațiu de nume qor_ pentru interogări specifice chain-ului:

MetodăDescriere
qor_getPQCKeyStatusVerifică dacă un cont are o cheie publică PQC înregistrată
qor_getAIStatsRecuperează statistici ale motorului AI (număr de anomalii, distribuția riscului)
qor_getCrossVMMessageInteroghează starea unui mesaj cross-VM după ID
qor_getPoolClassificationObține clasificarea pool-ului de validatori (RPoS/DPoS/PoS)
qor_getReputationScoreInteroghează scorul de reputație al unui validator
qor_getAbstractAccountRecuperează configurația contului abstract

Exemplu cu curl:

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

Pașii următori