見出し画像

【Jaguar's Blog 8】Shoestringを用いたローカルビルド

この記事は12月30日にNEM/Symgolのコア開発者Jaguar氏によって投稿された記事「Shoestring Local Build」をChatGPTを用いて翻訳したものです。


Symbol Shoestring は Symbol Bootstrap の後継です。新しいノードのデプロイには Shoestring の使用を強くお勧めします。Bootstrap はサポートされなくなり、将来的には動作しなくなる可能性があります。

Shoestring を使用すると、テストネットまたはメインネットノードを簡単にデプロイできます。しかし、Shoestring をローカルでビルドした Catapult クライアントとどのように使用するかは、あまり文書化されていません。このガイドでは、ソースコードからビルドされた Catapult を使用して、テストネットに接続するように Shoestring を実行します。これは開発に非常に便利です。

このガイドは、ビルド手順に従ってすでにローカルマシンにCatapultをビルドしていることを前提としています。


Step 1 - CA Keyの準備

各ノードには、ルート証明書を署名しノードを識別するために使用されるメイン(またはCA)の秘密キーが必要です。このアイデンティティはネットワーク全体で一意である必要があります。このメインアカウントに関連する残高は、ノードがピアとして選択される可能性や、時間同期などの特定の操作での重みづけに影響します。直感的には、残高が大きいノードは、ネットワークにより多くの投資をしているため、信頼性が高い可能性が高いと考えられます。

ただし、ノードには残高の要件はありません。残高が低いノードと残高が高いノードの唯一の違いは、特定の操作の選択の可能性です。それ以外の点では、彼らはまったく同じように振る舞います。実際、この違いは彼らにとって完全に外部のものです。

ShoestringはCAの秘密キーがPEMファイルに存在することを期待しています。setupディレクトリを作成し、CAの秘密キーを準備しましょう。

mkdir setup && cd setup

opensslを使用して新しい(ランダムな)CAの秘密キーを簡単に生成できます:

openssl genpkey -algorithm ed25519 -outform PEM -out ca.key.pem

または、既存の秘密キーからShoestringを使用して生成し、オプションでパスワード保護することもできます(--ask-passを使用)。

python3 -m shoestring pemtool --ask-pass --output ca.key

いずれの場合も、opensslを使用して生成された ca.key.pem ファイルの内容を確認できます:

openssl pkey -in ca.key.pem -text -noout

これにより、プライベートキーとパブリックキーの両方がコンソールに出力されます。パブリックキーのみを表示したい場合は、-text-text_pubに置き換えてください。

Step 2 - Shoestring Configurationの準備

Shoestringのinitコマンドを実行して、必要なネットワークの構成テンプレートをダウンロードする必要があります。テストネット(コードネーム:sai)に接続する予定なので、それをパッケージ名として指定する必要があります:

python3 -m shoestring init --package sai sai.ini

最終的な目標は、ローカルにビルドしたCatapultを実行することなので、多くの設定は関連がありません。変更する必要があるのは、nodeセクションの設定だけです:

  • features - ローカルノードがサポートする機能

    • PEERは同期のための最小のノード

    • APIはブローカープロセスとRESTを追加

    • HARVESTERはノードをハーベストするように構成

    • VOTERはノードを投票するように構成

  • apiHttps - ローカル開発用に、これをfalseに設定します

  • caCommonName - CA証明書の名前を入力します(任意の名前を使用できます)

  • nodeCommonName - ノード証明書の名前を入力します(任意の名前を使用できます)

また、ローカルホストが使用されることを示すためにオーバーライドファイルを追加する必要があります。local-overrides.iniファイルを作成し、次の内容を入力します:

node.localnode]

host = 127.0.0.1

Step 3 - Shoestring Setupの実行

最後に、Shoestringのセットアップを実行しよう!

python3 -m shoestring setup \
    --package sai \
    --directory ./output \
    --ca-key-path ./setup/ca.key.pem \
    --config ./setup/sai.ini \
    --overrides ./setup/local-overrides.ini

重要なのは、--packagesaiに設定されており、これは接続したいテストネットです。Shoestringのすべての出力は--directoryの下に作成されます。

⚠️ --directoryで指定されたディレクトリは存在していて、空である必要があります!通常、各実行前にそのディレクトリを完全に削除することが推奨されています。以下のように行います:

rm -rf output && mkdir output

最後に、CAの秘密キー(--ca-key-path)および先に作成した構成ファイル(--configおよび--overrides)へのパスを指定しています。

ℹ️ パスワードで保護されたCAファイルを使用している場合、Shoestringは複数回パスワードを求めます。これは正常な動作ですが、少し面倒です。

Step4 - Catapult User Configurationの更新

ローカルにビルドしたノードを使用するためには、output/userconfig/resources/config-user.propertiesのパスを調整する必要があります。

ℹ️ Shoestringはresources内のすべてを読み取り専用にします。これは通常、展開時には問題ありません。すべてはShoestringを介して適切に構成され、偶発的な上書きを防ぎます。開発中はこれらの一部を書き込み可能にしても構いません。実際、config-user.propertiesを書き込み可能にする必要があります!

次のように変更してみよう:

seedDirectory = /path/to/output/seed
certificateDirectory = /path/to/output/keys/cert
dataDirectory = /path/to/output/data
pluginsDirectory = ..
votingKeysDirectory = /path/to/output/keys/voting

ℹ️ /path/to/output/は、先に作成した出力ディレクトリへの完全なパスである必要があります。相対パスが特定の状況で機能する場合がありますが、これらの設定には一般的に完全なパスを使用することが推奨されています。

あるいは、これらをoverridesファイル(local-overrides.ini)のuser.storageセクションに設定することもできます。ノードを定期的にリセットする場合、これにより構成が簡単になります。

Step 5 - 実行

それでは、catapult.serverプロセスを実行できるか試してみましょう! 🍀

client/catapult/_buildディレクトリに戻り、次のコマンドを実行します:

./bin/catapult.server /path/to/output/userconfig

このようなログが出力されるか見てみよう:

<important> (extensions::NemesisBlockLoader.cpp@54)
      nemesis network id: Testnet
      nemesis public key: 76E94661562762111FF7E592B00398554973396D8A4B922F3E3D139892F7C35C
 nemesis generation hash: 96FAA65899ED0EF309D17D7456C052BB2D7618B239C03BEDDCCBDEC6D82CBC0F

このログは、ノードが正常に起動したことを示しています。すぐに仲間と通信を開始し、同期を始めるはずです。

簡単なチェックとして、data/index.datに格納されているリトルエンディアンの数値が増加していることに気付くはずです。

hexdump -C data/index.dat

これはローカルで確認されたブロックの高さです。それが1でない限り、すべてが動作しています!おめでとうございます! 🎉

この記事が気に入ったらサポートをしてみませんか?