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

JSON-RPC — Solana 互換

QoreChain は、SVM(Solana Virtual Machine)ランタイムを通じて Solana 互換の JSON-RPC インターフェースを提供しており、既存の Solana ツールや SDK が QoreChain とネイティブに連携できます。

接続

トランスポートアドレス
HTTP(自前ノード)http://127.0.0.1:8899
HTTPS(パブリック、メインネット、読み取り専用)https://svm.qore.host
HTTPS(パブリック、テストネット、読み取り専用)https://svm-testnet.qore.host

JSON-RPC サーバーは qorechaind start によって起動されデフォルトで有効になっており、127.0.0.1:8899 でリッスンします。設定は app.toml[svm-rpc] セクション(enable + address)で行います。起動したばかりのノードはすでにこのインターフェースを提供しており、追加のプロセスは不要です。パブリックエンドポイントは読み取り専用です(トランザクションの送信はエッジで無効化されています)。

注記

チェーンバージョン v3.1.82 以降、SVM インターフェースはアカウントのネイティブ QOR 残高(Cosmos および EVM インターフェースで見えるものと同一の統合資金)を lamports 建て(小数点以下 9 桁、1 uqor = 1,000 lamports)で提供します。詳細は SVM インターフェース上のネイティブ QOR を参照してください。


メソッド

メソッドパラメータ説明
getAccountInfopubkey(base58 文字列)アカウントのデータ、所有者、lamports、実行可能フラグを返します
getBalancepubkey(base58 文字列)指定した公開鍵のネイティブ QOR 残高を lamports 単位で返します
getSignaturesForAddressaddress(base58 文字列)指定アドレスが関与するトランザクション署名を返します(入金検知用)
getSlotなし現在のスロット番号を返します
getMinimumBalanceForRentExemptiondataLength(整数)指定したデータサイズに対するレント免除の最小残高を返します
getVersionなしノードのソフトウェアバージョンを返します
getHealthなしノードのヘルス状態を返します(正常な場合は "ok"

レスポンス形式

すべてのレスポンスは JSON-RPC 2.0 仕様に従います。オンチェーン状態を参照するレスポンスには、現在の slot を含む context オブジェクトが含まれます:

{
"jsonrpc": "2.0",
"id": 1,
"result": {
"context": {
"slot": 123456
},
"value": { ... }
}
}

使用例

getAccountInfo

リクエスト:

curl -X POST http://localhost:8899 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "getAccountInfo",
"params": [
"4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T",
{ "encoding": "base64" }
],
"id": 1
}'

レスポンス:

{
"jsonrpc": "2.0",
"id": 1,
"result": {
"context": {
"slot": 123456
},
"value": {
"data": ["AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", "base64"],
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0
}
}
}

getBalance

リクエスト:

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

レスポンス:

{
"jsonrpc": "2.0",
"id": 2,
"result": {
"context": {
"slot": 123456
},
"value": 1000000000
}
}

getVersion

リクエスト:

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

レスポンス:

{
"jsonrpc": "2.0",
"id": 3,
"result": {
"solana-core": "1.18.0-qorechain",
"feature-set": 1
}
}

バージョン文字列 1.18.0-qorechain は、QoreChain の SVM ランタイム上で動作する Solana 1.18.0 RPC インターフェースとの互換性を示します。


@solana/web3.js との連携

既存の Solana アプリケーションは、Connection オブジェクトをローカルの SVM エンドポイントに向けるだけで QoreChain に接続できます:

import { Connection, PublicKey, LAMPORTS_PER_SOL } from "@solana/web3.js";

const connection = new Connection("http://127.0.0.1:8899", "confirmed");

// Check version
const version = await connection.getVersion();
console.log("Node version:", version["solana-core"]);

// Get balance
const pubkey = new PublicKey("4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T");
const balance = await connection.getBalance(pubkey);
console.log("Balance:", balance / LAMPORTS_PER_SOL);

// Get slot
const slot = await connection.getSlot();
console.log("Current slot:", slot);

// Get account info
const accountInfo = await connection.getAccountInfo(pubkey);
if (accountInfo) {
console.log("Owner:", accountInfo.owner.toBase58());
console.log("Executable:", accountInfo.executable);
console.log("Data length:", accountInfo.data.length);
}

注意事項

  • アドレス形式: SVM アカウントは base58 エンコードされた公開鍵(標準的な Solana 形式)を使用し、ネイティブの Cosmos SDK モジュールで使われる qor1 Bech32 プレフィックスは使用しません。
  • クロス VM ブリッジ: EVM ランタイムと SVM ランタイムの間で資産を移動するには、Cross-VM モジュール(x/crossvm)を使用します。crossvm call の構文についてはトランザクションコマンドを参照してください。
  • プログラムのデプロイ: BPF プログラムは CLI(qorechaind tx svm deploy-program)またはプログラムから SVM ランタイムを通じてデプロイできます。
  • コンピュートバジェット: SVM ランタイムはデフォルトでトランザクションあたり 1,400,000 コンピュートユニットのコンピュートバジェットを適用します。この値はモジュールパラメータで設定可能です。