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

ソースからのビルド

このガイドでは、公開ソースからコミュニティ版の qorechaind バイナリをビルドする手順を説明し、そのバイナリが何のためのもので、何のためのものではないかを解説します。

ソースからのビルドではメインネットにもテストネットにも参加できません

公開リポジトリには、スタブ Keeper を備えたモジュールインターフェースが含まれています。コンセンサスに不可欠な Keeper 実装と耐量子署名器は公開ソースツリーには含まれていません。そこからビルドしたバイナリは、ネットワークのコンセンサス状態を再現できず、Cosmos レーンのすべてのトランザクションが必要とするハイブリッド耐量子署名も作成できません。メインネットまたはテストネットでノードやバリデーターを運用するには、稼働中のマニフェスト(https://download.qore.host/mainnet/latest.json または .../testnet/latest.json)に記載されたリリースバイナリをインストールしてください。ノードの運用およびバリデーターの運用を参照してください。

前提条件​

依存関係最小バージョン備考
Go1.26+すべてのビルドに必須
CGO有効化(CGO_ENABLED=1)PQC および SVM FFI ブリッジに必須
Make3.81+ビルド自動化
Git2.xソースのチェックアウト

環境を検証します。

go version # go1.26.x or later
echo $CGO_ENABLED # must be 1
危険

すべての go build、go test、go run の呼び出しでは、CGO_ENABLED=1 を設定する必要があります。ノードは cgo を通じてネイティブライブラリ(CosmWasm ランタイム、およびリリースビルドでは PQC と SVM のライブラリ)をリンクします。

ネイティブライブラリ​

libqorepqc と libqoresvm​

耐量子(libqorepqc)と SVM(libqoresvm)のライブラリは、公開リポジトリには含まれていない Rust ソースからビルドされます(qorechain-core に rust/ ディレクトリはありません)。コミュニティ版ビルドにはこれらは不要です。各ネットワーク向けのリリースアーカイブには、コンパイル済みライブラリ(libqorepqc.so、libqoresvm.so、libwasmvm.x86_64.so)が qorechaind の隣の lib/ ディレクトリに同梱されています。これらを lib/{os}_{arch}/ に配置するか、以下のようにローダーにパスを指定してください。

ライブラリパスの設定​

リリースバイナリを使用する場合、その共有ライブラリは実行時に検出可能である必要があります。お使いのプラットフォームに応じた環境変数を設定してください。

macOS:

export DYLD_LIBRARY_PATH=$(pwd)/lib/darwin_arm64:$DYLD_LIBRARY_PATH

Linux:

export LD_LIBRARY_PATH=$(pwd)/lib/linux_amd64:$LD_LIBRARY_PATH
備考

ヒント: この export をシェルプロファイル(~/.bashrc、~/.zshrc)に追加すると、セッション間で永続化されます。

オープンコアアーキテクチャ​

QoreChain はオープンコアモデルに従っています。

  • コミュニティ版ビルド — すべての QoreChain モジュール(x/pqc、x/ai、x/reputation、x/qca、x/svm、x/crossvm など)の完全なモジュールインターフェース、CLI コマンド、protobuf 定義、メッセージタイプを含みます。プロプライエタリモジュールの Keeper は、安全なデフォルト値や no-op レスポンスを返すスタブ実装を使用します。これにより、サードパーティのツール、ウォレット、インデクサーは、プロプライエタリなコードを必要とせずにすべての QoreChain API と統合できます。
  • 完全版ビルド — 完全な Keeper 実装(コンセンサスに不可欠な実際のモジュールロジックと耐量子署名器)を含みます。download.qore.host で公開されるリリースバイナリとして配布されており、公開ソースツリーからビルドするものではありません。

どちらのビルドも同じ qorechaind バイナリ名を生成し、同一の CLI コマンドを公開します。違いは、それらのインターフェースの背後にある Keeper ロジックの実行時の動作にあります。

コミュニティ版ビルド​

CGO_ENABLED=1 go build -o qorechaind ./cmd/qorechaind/

これは、プロプライエタリ機能向けのスタブ Keeper を用いて、すべての公開モジュールインターフェースをコンパイルします。得られるバイナリは、以下の用途を想定しています。

  • ローカルでの開発とテスト(たとえば単一ノードの devnet)
  • ネットワークの照会(query ... コマンドは任意のノードに対して動作します)
  • モジュールインターフェースに対するサードパーティ統合とツールの構築

これは、バリデーターとしてメインネットやテストネットに参加したり、そこでトランザクションを実行したりする手段ではありません。耐量子署名器を持たず(tx pqc gen-key と tx pqc cosign はエラーを返します)、そのスタブ Keeper はネットワークのコンセンサスルールを再現しません。

完全版ビルド(リリースバイナリ)​

完全な Keeper 実装、および tx pqc gen-key と tx pqc cosign の背後にある署名器は、公開ソースツリーには含まれていないため、そこからビルドすることはできません。download.qore.host で公開されているバイナリが完全版ビルドです。メインネットとテストネットにはそれらを使用してください。

テストの実行​

CGO_ENABLED=1 go test ./... -count=1

-count=1 フラグはテストのキャッシュを無効化し、毎回クリーンな実行を保証します。個別のパッケージテストは次のように実行できます。

CGO_ENABLED=1 go test ./x/pqc/... -count=1 -v
CGO_ENABLED=1 go test ./x/svm/... -count=1 -v

ネイティブライブラリやプロプライエタリ Keeper を実行するテストは、完全版ビルドにのみコンパイルされ、公開テストスイートには含まれません。

ビルドの検証​

ビルドが成功したら、バイナリを検証します。

./qorechaind version
./qorechaind init test-node --chain-id qorechain-diana

init コマンドは、エラーなく ~/.qorechaind/ に genesis ファイルとノード設定を作成するはずです。上記の例は qorechain-diana テストネットに対して初期化しています。メインネットの場合は、稼働中のネットワークである --chain-id qorechain-vladi(ノードリリース v3.2.1)に置き換えてください。

Docker ビルド​

リポジトリのルートに Dockerfile が用意されています。

docker build -t qorechaind:community .

これはコミュニティ版バイナリをビルドします(Dockerfile 自身のコメントには "Public build — no PQC library" とあります)。したがってこのイメージはローカル開発とツール向けであり、メインネットやテストネットに追従するためのものではありません。Docker でネットワークノードを運用するには、代わりにリリースバイナリをラップしてください。ノードの運用を参照してください。

トラブルシューティング​

cgo: C compiler not found

Xcode CLI ツール(macOS)または build-essential(Linux)をインストールしてください

cannot find -lqorepqc

ネイティブライブラリを必要とするビルドをリンクしています。コミュニティ版ビルド(これらは不要です)か、ライブラリを同梱したリリースアーカイブを使用し、LD_LIBRARY_PATH / DYLD_LIBRARY_PATH をその lib/ ディレクトリに設定してください

undefined: sonic.*

go.sum が最新であることを確認してください: go mod tidy

signal: killed during build

利用可能なメモリを増やしてください(メモリ上限が低い Docker でよく発生します)

PQC tests fail with size mismatch

ML-DSA-87 のサイズは、公開鍵 2,592 バイト、秘密鍵 4,896 バイト、署名 4,627 バイトです。これ以外のサイズは、別のアルゴリズムか、切り詰められた値であることを意味します。