メインコンテンツまでスキップ

EVM開発

QoreChainは、QoreChain EVM Engine上で完全にEVM互換の実行環境を稼働しており、使い慣れたツールを使ってSolidityスマートコントラクトをデプロイ・操作できます。EVMモジュールは、標準的なEthereum開発ワークフローをサポートするJSON-RPCインターフェースをポート8545(WebSocketは8546)で公開しています。

注記

以下の例は、2026年6月7日から稼働しているチェーンバージョンv3.1.95を実行中の**qorechain-vladiメインネット(EVMチェーンID9801**)を対象としています。qorechain-dianaテストネットの場合は、EVMチェーンID9800を使用してください。


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動的ベースフィーモデルを採用しています。

  • ベースフィーは、使用率に基づいてブロックごとに調整されます
  • ユーザーはmaxFeePerGasmaxPriorityFeePerGasを設定できます
  • プライオリティフィーはブロックプロポーザーに支払われます

単位変換ブリッジ

ネイティブの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トランザクションは、既存のEthereumツール、ウォレット、ライブラリとの完全な互換性のために**従来のECDSA(secp256k1)**署名を使用します。これにより、MetaMask、Hardhat、Foundry、ethers.js、その他すべての標準的なEVMツールが変更なしで動作します。

EVM内でのポスト量子セキュリティのために:

  • Solidityからオンチェーンで ML-DSA-87 署名を検証するには、PQC Verifyプリコンパイル0x0000...0A01)を使用します。詳細はEVM Precompilesを参照してください。
  • EVMからCosmWasmまたはSVMへのクロスVMメッセージは、Cosmos SDKトランザクション層でPQC署名できます。
  • アカウントは、ハイブリッドセキュリティのためにx/pqc経由でPQC公開鍵を任意で登録できます。

カスタムqor_名前空間

QoreChainは、チェーン固有のクエリのためにqor_名前空間でJSON-RPCを拡張しています。

メソッド説明
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
}'

次のステップ