https://docs.solana.com/developing/test-validator#appendix-i-status-output
付録I:ステータス出力#
- 元帳ストレージディレクトリのファイルパス。このディレクトリは大きくなる可能性があります。でより少ないトランザクション履歴を保存する
--limit-ledger-size ...
か、で再配置します--ledger ...
ここのパスにsolanaの元帳を保存している。
test-ledger…ってどこ。solanaのフォルダの中にあった。
- バリデーターテキストログファイルのファイルパス。ログは、を渡すことによってストリーミングすることもできます
--log
。この場合、ステータス出力は抑制されます
バリデーターテキストログって何
よくわからないが、大きくなりすぎるのでrotation というのを行うと良いらしい。とりあえず、設定した。
次回からはexec solana-…で実行すればログファイルが不必要に大きくならないはず
ログローテーション#
で指定されているバリデーターログファイルは、--log ~/solana-validator.log
時間の経過とともに非常に大きくなる可能性があるため、ログローテーションを構成することをお勧めします。
バリデーターUSR1
は、ログローテーションを可能にする基本的なプリミティブであるシグナルを受信すると、再び開きます。
バリデーターがラッパーシェルスクリプトによって開始されている場合、logrotateを使用するときにexec
(exec solana-validator ...
)を使用してプロセスを起動することが重要です。これにより、USR1
シグナルがバリデーターではなくスクリプトのプロセスに送信されなくなり、両方が強制終了されます。
⇒シェルコマンドって何?シェルを動かすためのコマンド。
logrotateを使用する#
のセットアップ例。logrotate
バリデーターがと呼ばれるsystemdサービスとして実行されていることを前提としsol.service
、ログファイルを/home/sol/solana-validator.logに書き込みます。
前述のように、logrotateを使用する場合は、solanaバリデータープロセスを開始するスクリプトで「exec」を使用するようにしてください(例:「execsolana-validator …」)。そうしないと、logrotateがそのシグナルをバリデーターに送信するときに、囲んでいるスクリプトが停止し、バリデータープロセスを実行します。
なお、macでsystemdは使えなかった。systemdは従来のinitシステムに対し、起動を高速にし、設定をシンプルにすることを狙っています。Linuxでの同様の新しいinitシステムに、Ubuntuなどで用いられたUpstartがあります。また、MacOSでは新しいinitシステムとしてlaunchdが使われています。
なので、MACようにlaunchctrl restartと書き換えた
cp [オプション] コピー元 コピー先
そもそもlaunchctrlって何?
どこに保存差rたのかわからなくなってときは下記で検索する。
where notepad(notepadの場所を探せる。
cat
catコマンドの“cat”は、「conCATenate(つなぐ、連結する)」のcatです。 ファイルを連結するためのコマンドですが、ファイルの内容をサッと表示する際によく使われます。 Linuxの設定ファイルは、その多くがテキストファイルです。
- ゴシップネットワークでのバリデーターのID
ゴシップネットワークって何?
Gossip Serviceは、コントロールプレーン内のノードへのゲートウェイとして機能します。バリデーターはこのサービスを使用して、クラスター内の他のすべてのノードが情報を利用できるようにします。このサービスは、ゴシッププロトコルを使用して情報をブロードキャストします。
噂がでんぱするように、参加者ネットワーク参加者間でランダムに情報を交換してアップデートしていくのがゴシッププロトコル。このネットワークに参加する方法がゴシップサービス。そのネットワーク内でのIDがアイデンティティということだろう。
分散システムにおいて、ゴシッププロトコル(gossip-protocol, ゴシッピング、ゴシップアルゴリズム、エピデミックアルゴリズム、epidemic algorithms, epidemic protocol)とは、システムの参加者間で繰り返し確率的に情報を交換する手法であり、情報の拡散や統計値の計算などに利用される。
ゴシッププロトコルではランダムに選んだ相手と情報を交換し、自身が持つデータの更新を繰り返す。システムの参加者が不定期的に増減して全体を把握できない状況や、一時的に通信できない場合でも情報を伝搬できる。病気が伝染する様子に似ていることから、エピデミックアルゴリズムとも呼ばれる。
ゴシップの概要#
ノードは、クラスターを管理するために、署名されたデータオブジェクトをノード間で継続的に共有します。たとえば、連絡先情報、元帳の高さ、投票数を共有します。
10分の1秒ごとに、各ノードは「プッシュ」メッセージおよび/または「プル」メッセージを送信します。プッシュおよびプルメッセージは応答を引き出す可能性があり、プッシュメッセージはクラスター内の他のユーザーに転送される可能性があります。
Gossipは、既知のUDP / IPポートまたは既知の範囲のポートで実行されます。クラスターがブートストラップ(自分自身で起動)されると、ノードはゴシップエンドポイント(ソケットアドレス())の場所を相互にアドバタイズします。
ソケットアドレスって何?どこに送るのか?の情報
リモート・ホストの IP アドレス
ターゲット・サーバーが TCP/IP 通信に使用するポート番号
UDPって何?投げっぱなしにするタイプの通信方法っぽい。このゴシップネットワークではとにかく情報を共有することが大事なので届いたかどうかは重要ではなくより多くの人に届けることが大事。だからUDPなのだろう。
UDPとは「User Datagram Protocol」の略であり、インターネットで一般的に使用されている、トランスポート レイヤ(第4層)のプロトコルの1つです。 TCP等と同様に、IPの上位プロトコルとして使用されます。 … 一方的にメッセージを送る、メッセージ指向型のプロトコルです。
TCPとUDPはプロトコルとして大きく違います(図5-1)。TCPは通信の送信元と宛先がサーバーとクライアントという2者に明確に分かれており、接続の開始と終了の際に、両者がネゴシエーションしてコネクションを張り、そのコネクションを通じてデータを送ります。これに対しUDPではコネクションという概念がないため、いきなりデータを送信できます。
TCPポート番号って何?
本項ではTCPやUDPにおけるポート番号の一覧を示す。
コンピュータネットワークにおいて、インターネット・プロトコル・スイートのトランスポート層にあたるTransmission Control Protocol (TCP) やUser Datagram Protocol (UDP) では、他のプロトコル同様、ホスト間通信のエンドポイントを指定する際に数字の識別子が用いられており、これをポート番号と呼んでいる。インターネットに関連する番号を統合管理している組織であるInternet Assigned Numbers Authority (IANA) は、TCPやUDPのポート番号管理も行っており、特定のポート番号とそのポート番号を用いるアプリケーションの組合せを管理している。以下の表は、これらの組合せを示したものである
ゴシップレコード
ゴシップを介して共有されるレコードは任意ですが、それらを受信するノードにとって意味があるように、必要に応じて署名およびバージョン管理されます(タイムスタンプ付き)。ノードが同じソースから2つのレコードを受信した場合、ノードは自身のコピーを最新のタイムスタンプを持つレコードで更新します。
新しい情報でどんどんレコードを更新していくよ
ゴシップサービスインターフェース#
プッシュメッセージ#
ノードはプッシュメッセージを送信して、共有する情報があることをクラスターに通知します。ノードはプッシュメッセージをPUSH_FANOUT
プッシュピアに送信します。
プッシュメッセージを受信すると、ノードはメッセージを調べて次のことを確認します。
- 複製:メッセージが以前に表示されたことがある場合、ノードはメッセージをドロップし、
PushMessagePrune
スタックの少ないノードから転送された場合に応答する可能性があります - 新しいデータ:メッセージがノードにとって新しい場合
- 更新されたバージョンの新しい情報をクラスター情報に格納し、以前の古い値を削除します
- メッセージをに保存します
pushed_once
(重複の検出に使用され、PUSH_MSG_TIMEOUT * 5
ms後にパージされます) - メッセージを自身のプッシュピアに再送信します
- 有効期限:ノードは、より古いプッシュメッセージをドロップします
PUSH_MSG_TIMEOUT
つまり、新しい情報をもらったら自分のデータを更新して、古い情報をもってそうな近隣の仲間たちに転送もするよ
プッシュピア、プルーンメッセージ#
ノードは、既知のピアのアクティブなセットからランダムにプッシュピアを選択します。ノードはこの選択を比較的長い間保持します。プルーニングメッセージを受信すると、ノードはプルーニングを送信したプッシュピアをドロップします。プルーンは、直接プッシュよりも、そのノードへの別のより高いステーク加重パスがあることを示しています。
プッシュピアのセットは、PUSH_MSG_TIMEOUT/2
ミリ秒ごとに新しいノードをセットにローテーションすることで最新の状態に保たれます。
プルメッセージ#
ノードはプルメッセージを送信して、クラスターに新しい情報があるかどうかを尋ねます。プルメッセージはランダムに単一のピアに送信され、すでに持っているものを表すブルームフィルターで構成されます。プルメッセージを受信するノードは、その値を繰り返し処理し、フィルターを見逃してメッセージに収まるもののプル応答を作成します。
ノードは、現在の値と最近パージされた値を反復処理することにより、プルブルームフィルターを構築します。
ノードは、プッシュメッセージの新しいデータを処理するのと同じ方法で、プル応答のアイテムを処理します。
パージ#
ノードは、以前のバージョンの値(プルまたはプッシュによって更新されたもの)と期限切れの値(より古いものGOSSIP_PULL_CRDS_TIMEOUT_MS
)をpurged_values
(最近持っていたもの)に保持します。purged_values
より古いノードはパージされます5 * GOSSIP_PULL_CRDS_TIMEOUT_MS
。
日食攻撃#
日食攻撃は、敵対するエンドポイントとのノード接続のセットを乗っ取ろうとする試みです。
これは、次のように実装に関連しています。
- プルメッセージは、ネットワークからランダムなノードを選択します。プルに対する日食攻撃では、攻撃者がランダム選択に影響を与えて、敵対するノードのみがプル対象として選択されるようにする必要があります。
- プッシュメッセージはアクティブなノードのセットを維持し、プッシュメッセージごとにランダムなファンアウトを選択します。プッシュに対する日食攻撃は、アクティブなセットの選択、またはランダムなファンアウトの選択に影響を与えます。
時間とステークベースの重み#
重みはに基づいて計算されているtime since last picked
とnatural log
のstake weight
。
撮影ln
ステーク重量のすべてのノードに妥当な時間でネットワークカバレッジのより公正な機会を与えることができます。これはstake weight
、ノード間の大きな可能性のある違いを正規化するのに役立ちます。このように、stake weight
大きいノードと比較して小さいノードは、選択される前stake weight
にln(stake
)秒の数倍待つだけで済みます。
敵がこれらのパラメータに影響を与える方法はありません。
プルメッセージ#
上記の重みに基づいて、ノードがプルターゲットとして選択されます。
プッシュメッセージ#
整理メッセージは、潜在的な接続から敵を削除することしかできません。
プルメッセージと同様に、ノードは重みに基づいてアクティブセットに選択されます。
PlumTreeとの顕著な違い#
ここで説明するアクティブプッシュプロトコルは、プラムツリーに基づいてい ます。主な違いは次のとおりです。
- プッシュメッセージには、発信者によって署名されたウォールクロックがあります。ウォールクロックの期限が切れると、メッセージはドロップされます。敵対的な設定でホップ制限を実装することは困難です。
- レイジープッシュは、攻撃者がメッセージの指紋を偽造するのを防ぐ方法が明らかでないため、実装されていません。素朴なアプローチでは、敵の入力に基づいて、敵にプルの優先順位を付けることができます。
- ソフトウェアバージョン
- Gossip、 Transaction Processing Unit、JSONRPC サービスのネットワークアドレス
ここのアドレスはどこも同じ?PCのノードごとに違うと思ってたけど、俺が立てたのも同じアドレスだったのはなぜ。。。。
127.0.0.1はローカルを指すIPなので、当然同じ。自分のIPなので。
これで自分のどのポートが実際開いてるのか見れる。
# -P: ポート番号をポート名に変換しない
sudo lsof -P | grep "LISTEN"
# -i: ポート番号を指定する
sudo lsof -P -i:80 | grep "LISTEN"
Solanaノードは、JSON-RPC2.0仕様を使用してHTTPリクエストを受け入れます。
JavaScriptアプリケーション内のSolanaノードと対話するには、RPCメソッドの便利なインターフェイスを提供するsolana-web3.jsライブラリを使用し ます。
# メソッド
⠈00:36:02 | 処理済みスロット:5142 | 確認済みスロット:5142 | ファイナライズされたスロット:5110 | スナップショットスロット:5100 | トランザクション:5142 | ◎499.974295000
- セッションの実行時間、3つのブロックコミットメントレベルの現在のスロット 、最後のスナップショットのスロットの高さ、トランザクション数、 投票権限のバランス