본문으로 건너뛰기

EVM 개발

QoreChain은 QoreChain EVM Engine 위에서 완전한 EVM 호환 실행 환경을 구동하므로, 익숙한 도구를 사용해 Solidity 스마트 컨트랙트를 배포하고 상호작용할 수 있습니다. EVM 모듈은 표준 이더리움 개발 워크플로를 지원하는 JSON-RPC 인터페이스를 포트 8545(WebSocket은 8546)에 노출합니다.

노트

아래 예제는 qorechain-vladi 메인넷(EVM 체인 ID 9801)을 대상으로 하며, 이 메인넷은 2026년 6월 7일부터 체인 버전 v3.1.82로 운영 중입니다. qorechain-diana 테스트넷의 경우 EVM 체인 ID 9800을 사용하세요.


JSON-RPC 엔드포인트

속성
기본 URLhttp://localhost:8545
WebSocket URLws://localhost:8546
지원되는 네임스페이스eth_, web3_, net_, txpool_, qor_
체인 ID (메인넷)9801 (qorechain-vladi)
체인 ID (테스트넷)9800 (qorechain-diana)
통화 기호QOR

qor_ 네임스페이스는 QoreChain 고유 메서드를 제공합니다. 아래 커스텀 네임스페이스를 참고하세요.


지갑 설정 (MetaMask)

MetaMask에서 QoreChain을 커스텀 네트워크로 추가하세요:

필드메인넷 값테스트넷 값
네트워크 이름QoreChain (qorechain-vladi)QoreChain Diana
RPC URLhttp://localhost:8545http://localhost:8545
체인 ID98019800
통화 기호QORQOR
블록 익스플로러 URL(공식 메인넷 익스플로러를 사용)(로컬 테스트넷의 경우 비워 둠)

Hardhat

Hardhat을 설치하고 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)
},
},
};

컨트랙트 배포:

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

QoreChain EVM에 대해 테스트 실행:

npx hardhat test --network qorechain

Foundry

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();

가스 모델

QoreChain은 EVM 트랜잭션에 EIP-1559 동적 기본 수수료(base fee) 모델을 사용합니다:

  • 기본 수수료는 사용률에 따라 블록마다 조정됩니다
  • 사용자는 maxFeePerGasmaxPriorityFeePerGas를 설정할 수 있습니다
  • 우선순위 수수료(priority fee)는 블록 제안자에게 지급됩니다

단위 브리지

네이티브 QOR 토큰은 소수점 6자리(uqor)를 가지는 반면, EVM은 소수점 18자리를 기대합니다. x/precisebank 모듈이 매끄러운 변환을 처리합니다:

컨텍스트단위소수 자릿수예시
네이티브 체인uqor61000000 uqor = 1 QOR
EVMwei181e18 wei = 1 QOR

이 변환은 투명하게 이루어집니다. eth_getBalance로 잔액을 조회하면 응답은 18자리 wei 단위로 표시됩니다. 동일한 계정을 네이티브 bank 모듈로 조회하면 잔액은 6자리 uqor로 나타납니다.


ERC-20 토큰 페어

x/erc20 모듈은 네이티브 Cosmos SDK 단위와 ERC-20 컨트랙트 간의 토큰 페어를 자동으로 등록합니다:

  • 네이티브 토큰을 EVM 컨트랙트 내에서 ERC-20으로 사용할 수 있습니다
  • EVM에 배포된 ERC-20 토큰을 네이티브 단위로 변환할 수 있습니다
  • 변환은 양방향이며 프로토콜 수준에서 처리됩니다
# 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

PQC 및 EVM 호환성

EVM 트랜잭션은 기존 이더리움 도구, 지갑, 라이브러리와의 완전한 호환성을 위해 고전적 ECDSA (secp256k1) 서명을 사용합니다. 이를 통해 MetaMask, Hardhat, Foundry, ethers.js 및 모든 표준 EVM 도구가 수정 없이 작동합니다.

EVM 내에서의 양자내성 보안을 위해:

  • PQC Verify 프리컴파일(0x0000...0A01)을 사용해 Solidity에서 ML-DSA-87 서명을 온체인으로 검증하세요. EVM 프리컴파일을 참고하세요.
  • EVM에서 CosmWasm 또는 SVM으로 보내는 크로스-VM 메시지는 Cosmos SDK 트랜잭션 계층에서 PQC 서명될 수 있습니다.
  • 계정은 하이브리드 보안을 위해 x/pqc를 통해 선택적으로 PQC 공개 키를 등록할 수 있습니다.

커스텀 qor_ 네임스페이스

QoreChain은 체인 고유 쿼리를 위해 JSON-RPC를 qor_ 네임스페이스로 확장합니다:

메서드설명
qor_getPQCKeyStatus계정에 등록된 PQC 공개 키가 있는지 확인
qor_getAIStatsAI 엔진 통계 조회 (이상 탐지 횟수, 위험 분포)
qor_getCrossVMMessageID로 크로스-VM 메시지의 상태를 조회
qor_getPoolClassification밸리데이터 풀 분류 조회 (RPoS/DPoS/PoS)
qor_getReputationScore밸리데이터의 평판 점수를 조회
qor_getAbstractAccount추상 계정 설정을 조회

curl을 사용한 예제:

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

다음 단계