본문으로 건너뛰기

EVM 개발

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

노트

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


JSON-RPC 엔드포인트

속성
기본 URLhttp://localhost:8545
웹소켓 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 동적 기본 수수료 모델을 사용합니다.

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

단위 변환 브리지

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

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

이 변환은 사용자에게 투명하게 이루어집니다. eth_getBalance로 잔액을 조회하면 응답은 18자리 wei 단위로 표시됩니다. 동일한 계정을 네이티브 뱅크 모듈로 조회하면 잔액은 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 내에서 양자 내성 보안을 확보하려면 다음을 활용하세요.

  • Solidity에서 온체인으로 ML-DSA-87 서명을 검증하려면 PQC Verify 프리컴파일(0x0000...0A01)을 사용하세요. 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
}'

다음 단계