はじめに
Solanaのステーキングを理解するために、バリデータの担う仕事を理解し、報酬の根拠を知りましょう。Solanaのバリデータは、トランザクションを中継するだけのサーバーではなく、ブロックチェーンの状態を保持し、トランザクションを検証し、次のブロック(Solanaではスロットと呼ぶ)に投票します。自分がリーダーに選ばれた場合は、自ら次のスロットを生成します。
バリデータが担う処理
Solanaのバリデータが担う主な処理は、次のとおりです。
- ネットワークからトランザクションを受け取る
- 署名、残高、プログラム実行結果などを検証する
- 他のリーダーが生成したスロットに投票する
- 自分がリーダーに指定されたスロットでは自分でスロットを生成する
- ブロックチェーンデータとアカウント状態を保持し、他のノードと同期する
Solanaでは、バリデータの投票がステーク量で重みづけされます。ステークを多く集めたバリデータほど、コンセンサス上の投票重みが大きくなり、リーダーに指定されブロックを生成する機会も増えます。
ステーキングでは、委任者(デリゲーター)はSOLの所有権を手放しません。特定のバリデータへ、投票の重みを割り当てるだけです。
Stake アカウントとvote アカウント
デリゲーションを実施する際、通常のウォレットとは異なる stake アカウント(専用の口座)を使います。stake アカウントにSOLを入れ、どのバリデータへ委任するかを設定します。1つのstake アカウントが同時に委任できるバリデータは1つだけです。複数のバリデータへ分散したいときは、stake アカウントを分けます。
バリデータはvote アカウントをもちます。vote アカウントは、そのバリデータの投票履歴や手数料率、報酬計算に関わる情報を持つアカウントです。
バリデータが扱う3つの鍵
バリデータ運用で分けて扱う鍵は、役割の異なる次の3つです。
- identity key(識別鍵): バリデータをネットワーク上で識別する鍵で、投票やスロット生成の署名に使います。
- vote account key: vote アカウントのアドレスにあたる鍵で、vote アカウントの作成時に使います。日々の投票の署名には使いません。
- authorized withdrawer key(引き出し権限鍵): vote アカウントからの資金の引き出しに加え、手数料率やidentityの変更まで行える最上位の鍵です。
どの鍵をどこに置くかは、その鍵が持つ権限で決まります。identity keyは投票のたびに署名し、その手数料も負担するため、常時バリデータサーバー上に置きます(ホットな鍵)。vote account keyは、作成後は常時サーバーに置いておく必要はありません。
authorized withdrawer keyはサーバーに置かず、オフラインで保管します。この鍵を盗まれると、資金の引き出しから手数料率・identityの変更まで、バリデータの支配権を丸ごと奪われるためです。
Epochとリーダースケジュール
epochはバリデータのステーク量・状態やリーダーに指定されるスケジュール(リーダースケジュール)が更新される期間の単位で、Solanaではおおよそ2日です。デリゲーション開始・解除、委任先切り替えはepochが切り替わるタイミングで反映され、途中の変更は同一Epoch中は反映されません。
epochの途中で委任したstake アカウントはactivatingになり、通常は次のepochでactiveになります。解除したstake アカウントも、deactivatingを経てinactiveになるまでは引き出せません。
ただしネットワーク全体では、1回のepochで切り替えられるステーク量に上限があります。委任や解除が集中すると、activeやinactiveになるまで複数epochかかることがあります。
リーダースケジュールもepoch単位で決まる仕組みです。ステークが大きいバリデータほど、自分がブロックを作るリーダースロットを多く割り当てられます。
リーダースロットでスロットを生成できないと、そのスロットの手数料やMEV(取引の並び順から生じる追加収益)を受け取れません。投票に失敗すると、得られるvote credit(投票が成立するたびに積み上がる実績値)が減り、インフレ報酬の取り分が減少する場合があります。
このため、Solanaのバリデータ評価では「ノードが起動しているか」だけでは足りません。投票が遅れていないか、リーダースロットでスロットを生成できているか、ステーク量に見合う報酬を獲得できているかを監視する必要があります。
スラッシングはどう扱うか
多くのPoSチェーンでは、二重署名や悪意ある行為に対して、委任された資産の一部を没収するスラッシングがあります。Solanaについては現時点でプロトコル内のスラッシング実装はなく、通常の運用不備で即座にステークが没収される設計ではありません。
SIMD-0204は、スラッシュ対象の違反行為をオンチェーンで検証・記録するプログラムを提案しています。このプログラムはstakeやrewardを直接変更せず、違反を記録する検証レイヤーで、資産没収としてのスラッシングには該当しませんが、情報の収集は始まろうとしています。
収益はどこから来るか
バリデータの収益源は、大きく次の3つです。
- インフレ報酬:発行(インフレ)によるステーキング報酬。投票実績と委任量に応じてepochごとに配られ、委任者に自動で分配されるのは、標準ではこのインフレ報酬だけです。
- トランザクション手数料:基本手数料と優先手数料。委任者には自動で回らず、ブロックを作ったバリデータ側の収益になります(基本手数料は一部が焼却されます)。
- MEV:Jitoの仕組みを使う場合に、委任者にも分配されます。
手数料やMEVを委任者へどこまで回すかは事業者ごとに違い、選ぶときの分かれ目です。
次の記事では、この報酬の仕組みからバリデータの選び方を整理します。