コンセンサスエコノミクス
ハイウェイコンセンサスは、ブロックチェーンのグローバルステートへの変更履歴を表示する確定ブロックの線形チェーンを増進させるスケジュールされたコミュニケーションに、固定グループのバリデーターが従事する継続的かつトラストレスな処理です。固定されたバリデーターセットは、各era毎に変更されることもあります。このレイヤーのエコノミクス(経済性)は、バリデーターの選択とスケジュールに従った参加に対するインセンティブによって左右されます。
エントリー
ジェネシス(生成)以降では、システムがステーク・オークション・プロセスを用いてバリデーターセットの選択を行います。オークションは、スウィッチ(入替)ブロックとも呼ばれるeraの最後のブロックにて行われます。オークションコントラクトは、バリデーターの選択プロセスを管理し、chainspecの設定ファイルはいくつかの重要なパラメーターを指定します。
- auction_delay は、新しいバリデーターセットをシステムが用意する前に、渡す必要のある合計時間を指定します。例えば、メインネットでの auction_delay は、1です。従って、1eraの遅れの後は、落札したバリデーターが新しいeraのグループに加わります。
- validator_slots のパラメーターは、1オークションで何人のバリデーターが落札できるかを指定します。オークションでは、掛け金の高さに基づいて一定のバリデーター数を選択します。
入札
各入札は、今後なり得るもしくは現在そうであるバリデーターとそのデリゲーターからの、オークションにてシングル合計としてみなされるトークンのコレクションです。入札とデリゲートは、自由に増加できますが、引き出しはunbonding_delayのchainspecパラメーターによって管理されているアンボンド期間が対象となります。アンボンド期間のトークンは、オークションにて合計額の一部とはみなされません。その結果、落札したバリデーターのプロトコルウェイトに換算される正確な入札合計額は、era内で異なります。入札は、落札者を決定するスウィッチ(入替)ブロックにて確認できます。
各入札には、デリゲート率とアクティビティの状態が加味されています。デリゲート率はいつ何時も変化します。これらプロパティの詳細については、後程お伝えします。
デリゲーション
デリゲーションは、第三者が好きなバリデーターにウェイトを与えることでコンセンサスへ参加することを可能にします。バリデーターから受理した報酬は、入札したトークンとデリゲートの割合によって配分されます。現在もしくは今後、入札を担当するバリデーターは、デリゲート率によって設定されたデリゲーターの報酬分を受け取ります。
現時点では、デリゲーションに特に制限はありません。デリゲーションのコストと関連する詳細情報については、「デリゲーションについて」を参照してください。
インセンティブ
ハイウェイプロトコルの正しいオペレーションには、安全性と活発な参加者へのインセンティブに対する曖昧さを減らす為に、プラットフォームのエコノミクスを必要とします。時間通りのブロック提案とブロック提案に対するタイムリーな応答をすることで、参加は成り立っています。
安全性は、曖昧なものをスラッシュ(引き下げ)することで増すかもしれません。この機能は、現時点では使用不可となっていますが、将来的には再度使用可能になるかもしれません。
ネットワークは、時間通りの提案と応答への報酬アップやブロック確定のスピードを考慮することで、参加に対してインセンティバイズします。全ての報酬は、入札への応答とデリゲーションに直接追加されます。
参加
新しいトークンの発行とそれらのバリデーターへの配布は、トランザクションの負荷が低い状態であっても作業に対してインセンティバイズします。
CSPRは、固定レートにて発行され、バリデーターにステークの配当分が(間接的に、デリゲーターへも)支給されます。これは、プルーフ・オブ・ワークのブロックチェーンでのブロック報酬に類似しています。下記は、概要です。
- CSPRの供給量は指数関数的に増加する
- CSPRのスラッシュ(引き下げ)を考慮した上で発行する
スラッシュを無効にした場合、これらのパラメーターを持つ以下の式を用いてブロック報酬を計算することができます。
- i – 正数[0, 1, 2, …, n]の eraのインデックス
- initial_supply – 開始時のCSPR数
- issuance_rate – 新しくCSPRが鋳造された年間レート
- ticks_per_year – 31,536,000,000に等しい年間ミリ秒数
supply(i) = initial_supply * (1 + issuance_rate)^(tick_at_era_start(i) / ticks_per_year)私たちは、 round issuance rate (chainspecのパラメーターである round_seigniorage_rate に相当)を下記式にて推奨しています。
round_issuance_rate = (1 + issuance_rate)^(2^minimum_round_exponent / ticks_per_year) - 1ラウンド発行レート(round issuance rate)は、chainspecのパラメーターであるminimum_round_exponentで決められる1ラウンドの長さに調整された年間発行レートのことです。例として、指数14は約16秒のラウンドの長さに相当します。
最後に、ベースラウンド報酬が下記のように計算されます。
base_round_reward(i) = round_issuance_rate * supply(i)私たちは、この値によって、バリデーターがブロック提案によって得られるCSPRの最大合計数を知り得ます。
配布
バリデーターは、ブロック提案や確定などの稼働に対してトークンを受け取ります。ウェイト(weight)の概念は、この配布スキーマを理解するには必須となります。
- Weight: コンセンサスにて使用したバリデーターがボンドしているステーク
- Assigned weight of a block/round: あるブロックへの参加を予定されているバリデーターのステーク合計
- Participated weight of a block/round: 参加を終えるバリデーターの合計ステーク、もしくは、各ラウンドの終了前にブロック確定のメッセージを送信すること
参加資格を判断する為に、オンタイムファイナライゼーション(OTF)を確認します。バリデーターは、各ラウンドの終了前に必要なメッセージを送信し、時間通りにブロックを確定しなくてはなりません。
スウィッチ(入替)ブロックには、発行計算処理(スウィッチブロック自体が、この計算処理を各eraにて行います)の対象外であり、その結果、スウィッチブロックにはトークンが発行されません。
参加スケジュール
参加スケジュールはラウンドに区分され、バリデーターの指数と決定論的な(era開始時にランダム化される)割り当てにより、eraのミリ秒間にてバリデーターに動的に割り当てられます。よって、ラウンド指数 n を持つバリデーターは、毎2^n 刻みにて繰り返されるラウンドに参加しなくてはなりません。
各バリデーターは、そのラウンド指数に従って評価されます。割り当てられた全てのバリデーターは、各バリデーターのラウンド内で送信されたメッセージによってブロックが確定される限り、トークンを受け取る資格を有しています。
資格
一度、ブロックが提案され十分に時間が経過すると、プロトコルメッセージの履歴は、ブロックが時間通りに確定されたかどうかを上記の状態に従って検知する為に調べられます。ブロックが時間通りに確定されていなかった場合、chainspecのパラメーターである reduced_reward_multiplier で管理されている為、バリデーターは想定していたトークンの何割かを受け取ることになります。ブロックが時間通りに確定されている場合は、担当していたバリデーターがステークに対する報酬の配当を、メッセージの送信の有無に関わらず、共有します。
インアクティビティ
Era全体において、一度もメッセージを送信していないバリデーターは、インアクティブと見なされ、彼らの入札が再度アクティベートされる特殊なデプロイを送信する迄は、オークションへの参加を停止します。
スラッシング
イクイボケーション(曖昧さ)に対するポリシーを見直してみてください。インセンティブメカニズムとしてスラッシングの有用性について、現在リサーチを進めています。
鋳造バリデーター
鋳造バリデーターは、トークンロックアップの対象となり、90日間は入札トークンを引き出せないようにし、向こう90日間において毎週直線的に初期入札トークンはリリースされます。