CLIAptos CLI経由でローカルネットワークを実行する
ローカルネットワークは、コードをテストする時役立ちます。メインネットのようなAptosネットワークにはどのプロダクションも接続されていませんが、主に次の3つの事由で役立ちます。
- レート制限なし: Node API、Indexer API、Faucet等のホストされたサービスとレート制限なしでやり取りして、テストを高速化できます。
- 再現性: 特定のオンチェーンシナリオを設定し、いつでもネットワークを最初から再起動して白紙の状態に戻す事ができます。
- 高有用性: Aptosのdevnetおよびtestnetネットワークは定期的にアップグレードされるため、その間は利用できない場合があります。ローカル開発ネットワークは、インターネットにアクセス出来ない場合でも常に利用できます。
ローカルネットワークの開始
- Aptos CLIがインストールされていることを確認してください。
- Dockerがインストールされていることを確認してください。
- これは、インデクサーAPIを実行して本番環境の様な環境を作成するためにのみ必要です。Aptos SDK等の多くのダウンストリームツールは、インデクサーAPIに依存しています。
- 自動更新を取得するため、DockerはDockerデスクトップ経由でインストールすることをお勧めします。
- Dockerを起動します。
- プライベートネットワークを開始するには、新しいターミナルで以下のコマンドを実行します。
aptos node run-local-testnet --with-indexer-api
注: 名前(local-testnet
)にも関わらず、これは Aptosテストネットで何もせず、マシンで完全にローカルなネットワークを実行します。
以下と同様の出力が表示されることが予想されます。
Readiness endpoint: http://0.0.0.0:8070/
Indexer API is starting, please wait...
Node API is starting, please wait...
Transaction stream is starting, please wait...
Postgres is starting, please wait...
Faucet is starting, please wait...
Completed generating configuration:
Log file: "/Users/dport/.aptos/testnet/validator.log"
Test dir: "/Users/dport/.aptos/testnet"
Aptos root key path: "/Users/dport/.aptos/testnet/mint.key"
Waypoint: 0:397412c0f96b10fa3daa24bfda962671c3c3ae484e2d67ed60534750e2311f3d
ChainId: 4
REST API endpoint: http://0.0.0.0:8080
Metrics endpoint: http://0.0.0.0:9101/metrics
Aptosnet fullnode network endpoint: /ip4/0.0.0.0/tcp/6181
Indexer gRPC node stream endpoint: 0.0.0.0:50051
Aptos is running, press ctrl-c to exit
Node API is ready. Endpoint: http://0.0.0.0:8080/
Postgres is ready. Endpoint: postgres://postgres@127.0.0.1:5433/local_testnet
Transaction stream is ready. Endpoint: http://0.0.0.0:50051/
Indexer API is ready. Endpoint: http://127.0.0.1:8090/
Faucet is ready. Endpoint: http://127.0.0.1:8081/
Applying post startup steps...
Setup is complete, you can now use the localnet!
-
Setup is complete, you can now use the localnet!
の最終行を待ちます。注意エラーが発生した場合は、以下の一般的なエラーセクションへ進んで下さい。
上記の出力例から分かる様に、ローカルネットワークが実行されると、以下のサービスへアクセス出来ます。
- ノードAPI: これはノード上で直接実行されるREST APIです。トランザクションの送信などのコア書き込み機能と、アカウントリソースやMoveモジュール情報の読み取り等の限定された読み取り機能を有効にします。
- インデクサーAPI:これはインデックス付ブロックチェーンデータへの豊富な読み取りアクセスを提供するGraphQLAPIです。 上記のインデクサーAPIのURLhttp://127.0.0.1:8090をクリックすると、インデクサーGraphQL APIのクエリに役立つWeb UIであるHasuraコンソールが開きます。
- トランザクションストリームサービス: これは、インデクサーAPIが使用するトランザクションのgRPCストリームです。これはカスタムプロセッサを開発している場合にのみ関係します。
- Postgres: これは、インデクサープロセッサが書き込むデータベースです。インデクサーAPIはこのデータベースから読み取ります。
- フォーセット: これを使用して、ローカル ネットワーク上のアカウントへ資金を投入できます。
ネットワークのこれらのサブコンポーネントを実行したくない場合は、それらを無効にするフラグがあります。
スクリプトを書いていて、ローカル ネットワークがすべてのサービスに対応するまで待機したい場合は、 http://127.0.0.1:8070
へGETリクエスト出来ます。最初は http コード503が返されます。200が返された場合は、全てのサービスが準備完了である事を意味します。
ローカル ネットワークを起動するときに渡すことができる異なるフラグや、特定のサービスが実行されるポートの変更などの構成設定の詳細については、help コマンドを実行してください。
aptos node run-local-testnet --help
ネットワーク起動時の一般的なエラー
ローカル ネットワークを正常に起動した場合はローカル ネットワークの使用へ進みます。
アドレスはすでに使用されています
panicked at 'error binding to 0.0.0.0:8080: error creating server listener: Address already in use (os error 48)
これは、ローカルネットワークが必要とするポートの1つが既に別のプロセスによって使用されている事を意味します。
Unixシステムでこれを修正するには、以下が可能です。
lsof -i :8080
を実行して、プロセスの名前と PIDを識別します。kill <pid>
を実行し、PIDが分かったら実行して、そのポートを解放します。
開いているファイルが多すぎるエラー
panicked at crates/aptos/src/node/local_testnet/logging.rs:64:10:
called `Result::unwrap()` on an `Err` value: Os { code: 24, kind: Uncategorized, message: \"Too many open files\" }"""
これは、システム上で開いているファイルが多過ぎる亊を意味します。多くの Unix システムでは、次のようなものを.zshrc
追へ加する事で、開いているファイルの最大数を増やす事が出来ます。
ulimit -n 32768
Dockerは利用出来ません
Unexpected error: Failed to apply pre-run steps for Postgres: Docker is not available, confirm it is installed and running. On Linux you may need to use sudo