TezosのProof-of-stake

提供: tezos-wiki
移動先: 案内検索

Tezosにおけるステークの証拠[編集]

このドキュメントでは、Tezos証明証明アルゴリズムの詳細な説明を提供します。 PVSSが導入した変更は含まれていません」と述べています。

ブロック[編集]

Tezosブロックチェーンはブロックのリンクされたリストです。ブロックには、ヘッダーと操作のリストが含まれます。ヘッダー自体はシェルヘッダー(すべてのプロトコルに共通)とプロトコル固有のヘッダーに分解されます。

シェルヘッダ ? ?

シェルヘッダーには

  • level :起点ブロックからのブロックの高さ
  • proto :起源以来のプロトコル変更の数(mod 256)
  • previous :先行ブロックのハッシュ。
  • timestamp :ブロックが作成されたと主張されているタイムスタンプ。
  • validation_pass :検証パス数(操作リストのリスト数)
  • fitness :符号なしバイト列のシーケンス。長さ順、辞書順。これは、このブロックで終了する連鎖の主張された適合度を表します。
  • operations_hash ブロック内のさまざまな操作セットのMerkleツリーのルートハッシュリストのMerkleツリーのルートハッシュ。
  • context このブロックの適用後のコンテキストの状態のハッシュ。軽いクライアントに便利です。

プロトコルヘッダ(tezos.alpha用): ? > </sub> ~~

  • signature :シェルとプロトコルヘッダーのデジタル署名(署名自体を除く)。
  • priority :tezos.alphaのすべてのブロックの高さは、ベーカーズの順序付けられたリストに関連付けられています。そのリストの最初のパン屋は、前のブロックの1分後にその高さでブロックを焼くことができる最初のパンです。リストの2番目のパン屋はそうすることができるが、3分後に3番目のパン屋は、前のブロックなどの後2分だけである。この整数はブロックの優先順位です。
  • seed_nonce_hash :チェーン上でエントロピーを生成するために使用される乱数へのコミットメント。 ( BLOCKS_PER_COMMITMENT = 32)ブロックのうちの1つにのみ存在します。
  • proof_of_work_nonce :スパム対策として、難易度の低い難解な作業実績をブロックに渡すために使用されるノンスです。

ブロックサイズ ?? ~~

Tezosは一度にブロックをダウンロードするのではなく、ヘッダーとさまざまな操作のリストを別々に検討します。 Tezos.alphaでは、トランザクションのリスト MAX_TRANSACTION_LIST_SIZE = 500kB(最大でも10MBごとに5MB)に最大サイズのバイトが適用されます。

他の操作リスト(支持、宣言、公開)は操作の数の点で制限されています(防御的なプログラミングスタイルでも、予想される操作のサイズに制限があります)。

これにより、コンセンサス重大操作がブロック空間のトランザクションと競合しないようにします。

委譲[編集]

Tezos.alphaは委任された証明証明モデルを使用します。 DPOSは、Bitsharesなどで使用される特定のタイプのアルゴリズムを設計するようになりました。これはTezos.alphaで使用されているモデルではありませんが、委任という概念があります。

デリゲート?? ?

tezos.alphaでは、トークンは、「マネージャーキー」と呼ばれる私有鍵によって制御される。 Tezos.alphaアカウントは、マネージャがパブリックデリゲートキーを指定できるようにします。このキーは、管理者自身によって、または他の当事者によって制御されてもよい。代表者の責任は、ステークスの合意アルゴリズムとTezosのガバナンスに参加することです。 管理者は、いつでもデリゲートを変更することができますが、契約に不変のデリゲートを指定するようにマークすることはできます。委任を動的に変更することはできますが、変更は数サイクル後にのみ有効になります。

Tezosには、公開鍵のハッシュだけのデフォルトアカウントもあります。これらのアカウントには、代理キーが添付されておらず、ステークの証明アルゴリズムに参加していません。

最後に、デリゲートアカウント(セーフティデポジットの配置に使用される)はデリゲート自体に自動的に委任されます。

アクティブおよびパッシブの代理人 ? / sub> ?

デリゲートには、アクティブまたはパッシブのいずれかのマークを付けることができます。パッシブデリゲートは、ベーキングまたは承認のために選択することはできません。

過去の CYCLES_BEFORE_DEACTIVATION = 5サイクルでブロックや保証の作成に失敗したり、セキュリティデポジットを変更しなかった場合、デリゲートはサイクル n でパッシブになります。つまり、この場合、 n-1 n-3 、...、 n-CYCLES_BEFORE_DEACTIVATION サイクルです。

小ブロックまたは保証を作成する機会が与えられていないため、ブロックされていない可能性がある小さなデリゲートは、2サイクルに1回、セキュリティデポジットとの意味のない小さなトランザクションを行うことによって、

ディスカッション: CYCLES_BEFORE_DEACTIVATION に小さな値を指定すると、チェーンが消えていく参加者に素早く適応します。これは、「難易度調整」とは異なります。 Bitcoinのしかし、長い値を指定すると、少数派フォークが大部分のフォークよりも長い時間ゆっくりと進展することが保証されます。 CYCLES_BEFORE_DEACTIVATION は、多数派チェーンに&quot;ヘッドスタート&quot;を与えます。

これはプロトコル変更の議決権には影響しません。

Rolls ? ~~

理論的には、各トークンにシリアル番号を指定し、特定の代理人に割り当てられた特定のトークンを追跡することは可能です。しかし、そのような粒度レベルでの割り当てを追跡することは、ノードの要求が高すぎるであろう。ロールの概念を紹介します。ロールとは、指定されたキーに委任されたコインの集合を表します。トークンが移動されるか、契約の代理人が変更されると、ロールは次のアルゴリズムに従ってデリゲートに変更されます。

各デリゲートにはロールIDのスタックといくつかの「変更」が加えられています。これは常に TOKENS_PER_ROLLS より小さい量です。トークンが1つのデリゲートから別のデリゲートに移動すると、まずその変更が使用されます。それが十分でない場合、ロールは「壊れている」必要があります。これはデリゲートスタックからグローバルに割り当てられていないロールスタックに移動することを意味します。これは金額がカバーされるまで行われ、若干の変更が残っている可能性があります。

次に、もう一方の代理人が入金されます。最初に、量が「変更」に加えられる。それが TOKENS_PER_ROLLS より大きくなると、グローバルな未割り当てロールスタックからデリゲートスタックにロールがアンスタックされます。グローバルスタックが空の場合は、新しいロールが作成されます。

これにより、デリゲートが複数のトランザクションによって変更された場合、各操作がフルロールよりも少なくてもロールの割り当てが保持されるという特性が維持されます。

このようにトークンを追跡する利点は、悪意のあるフォークを作成するデリゲートが、そのトークンを制御してシャッフルしても、割り当てられた特定のロールを簡単に変更できないことです。

ロールは TOKENS_PER_ROLLS = 10,000のトークンを保持しているため、テゾス基金の計画起源ブロックに約80,000ロールがあるはずですが、ロールアップの回数はインフレーションや委任に伴って増加します。

ロールスナップショット ロールスナップショットは、指定されたブロックのロール状態を表します。ロールスナップショットは、 BLOCKS_PER_ROLL_SNAPSHOT = 256ブロックごとに、つまり1サイクルにつき16回使用されます。メモリ消費と経済効率の間にはトレードオフがあります。ロールスナップショットが頻繁に発生すると、大量のメモリが消費されます。彼らがあまりにも稀である場合、戦略的参加者はスナップショットを予期して多くのトークンを購入し、直後に再販することができます。

サイクル数[編集]

Tezos.Alphaブロックチェーン内のブロックは、「サイクル」にグループ分けされている。の BLOCKS_PER_CYCLE = 4,096ブロック。ブロックは少なくとも TIME_BETWEEN_BLOCKS = 1分間隔であるため、サイクルは「少なくとも」「2日、20時間、および16分」ということを意味します。以下の説明では、現在のサイクルは n と呼ばれ、チェーンの先頭からn番目のサイクルです。サイクル(n-1)は、前のサイクル(n-2)のサイクル(n + 1) は1つ後などです

どの時点でも、tezosシェルは、フォークポイントが過去に ALLOWED_FORK = 5サイクル以上のサイクル(つまり、少なくとも「14日5時間以上」であるブランチを暗黙的に受け入れることはありません、および20分)。

セキュリティデポジット? ? ?

保証金の費用はブロックごとに BLOCK_SECURITY_DEPOSIT = 512 XTZ、裏書ごとに ENDORSEMENT_SECURITY_DEPOSIT = 64 XTZです。

各デリゲートキーには、同じ鍵で管理されるセキュリティデポジットアカウントが添付されています。代理人はこの口座に引き出して入金することができますが、「凍結した」口座より引き出せません。量。作成された各ブロック、署名された各裏書きは、固定された量を増加させます。

この堆積物を必要とするブロックを作る直前に結合物を堆積させることが可能である。サイクル n のブロックと保証の入金は、未凍結です。サイクル n + ALLOWED_FORK の最後に

預金は( BLOCK_SECURITY_DEPOSIT + ENDORSEMENT_SECURITY_DEPOSIT * ENDORSERS_PER_BLOCK)いつでも<code> ALLOWED_FORK の期間ロックされているので、 BLOCKS_PER_CYCLE )/ 763e6 =すべてのトークンの8.25%は保証金として保持する必要があります( ALLOWED_FORK また、デリゲートは、ブロックの作成を逃さないために委任されたトークンの量の8.25%以上を所有する必要があることを意味します。

ベイキングの権利 ? ~~

tezos.alphaを焼くことは、ブロックに署名して公開する行為です。 Bitcoinでは、ブロックを公開する権利は、作業証明パズルを解決することに関連しています。 tezos.alphaでは、 n サイクルでブロックを公開する権利は、 n-ALLOWED_FORK-2 サイクルからランダムに選択されたロールスナップショットのランダムに選択されたロールに割り当てられます。

当面は、プロトコルが各サイクルごとにランダムなシードを生成することを認める。このランダムシードから、サイクルのベーキング権を引き出すために使用されるCSPRNGをシードできます。

サイクル中の各位置またはスロットには、パン製造者の優先順位リストが関連付けられる。これは、アクティブなロールのセットから、置き換えてランダムに描画されます。各ロールはデリゲートの公開鍵に関連付けられているため、サイクルの各スロットに対して、ブロックを作成して署名するための公開鍵の順序付きリストがあります。このリストに同じ公開キーが複数回表示される可能性があります。

最も優先度の高いデリゲートは、 timestamp_of_previous_block TIME_BETWEEN_BLOCKS = 1分より大きいタイムスタンプでブロックをベイク処理できます。優先度がk番目に高いものは、 TIME_BETWEEN_BLOCKS + k * TIME_DELAY_FOR_PRIORITY =(1 + k)分です。

将来のバージョンでは、 TIME_DELAY_FOR_PRIORITY TIME_BETWEEN_BLOCKS よりも低い値に設定されます。

ブロックをベイク処理すると、 BLOCK_REWARD = 16 XTZにブロック内のトランザクションによって支払われたすべての手数料のブロック報酬が与えられます。

支持語 ? ?

各ベーキングスロットに、 ENDORSERS_PER_BLOCK = 32 "endorsers"のリストを関連付ける。エンドーサは、置き換えて32個のロールをランダムに選択することにより、デリゲートのセットから引き出されます。

エンドースヤーは報酬を受け取る(ブロッククリエイターと同じように)。報酬はブロック優先度が1から始まる ENDORSEMENT_REWARD = 2 / BLOCK_PRIORITY です。したがって、特定スロットの優先度2のブロックが承認されている場合、

インフレ?? ?

ブロック報酬と裏書報酬からのインフレは、多くとも ENDORSERS_PER_BLOCK * ENDORSEMENT_REWARD + BLOCK_REWARD = 80 XTZです。これは、最大5.51%の年間インフレを意味します。

ランダムシード ? ??

Cycle n はサイクル(n(n-ALLOWED_FORK-1))のコミットを使用してサイクル<code> -ALLOWED_FORK-2)をすべての BLOCKS_PER_COMMITMENT = 32ブロックのうちの1つに含めます。

コミットメントは、保証金を没収する罰則の対象となる(n-ALLOWED_FORK-1)サイクル中に元のパン屋によって明らかにされなければなりません。

「啓示」とは、操作であり、複数の啓示をブロックに含めることができます。この啓示はサイクル(n-ALLOWED_FORK-1)の最後にランダムシードを生成するために一緒にハッシュされます。

啓示は、ブロック空間のトランザクションと競合しない自由な操作です。 MAX_REVELATIONS_PER_BLOCK = 32までの啓示を任意のブロックに含めることができます。したがって、1 /( MAX_REVELATIONS_PER_BLOCK * BLOCKS_PER_COMMITMENT )=サイクル内のブロックの1/1024は、すべての啓示を含めるには十分です。

デナンシエーション[編集]

同じスロットに対して2つの裏書きが行われた場合、または同じ高さで2つのブロックが代理人によって作成された場合、これは却下される可能性があります。この区別は、典型的には、それを特別な操作として含むパン屋によって行われる。初めて、告発は二重署名された操作の保証金を没収するだけです。しかし、偶発的な二重署名のリスクが十分に小さくなると、時間の経過とともに、却下は安全預金の全体を没収することになります。半分が焼かれ、半分がブロック報酬に追加されます。