本稿について
本稿では、Tendermint: Consensus without Miningのうち第3章「Terms」、第4章「Block Structure」、第5章「Validators」の日本語訳を掲載します。
原文はこちらになります。
※Tendermintホワイトペーパーの翻訳は第5回までで終了しますが、未完の部分があったり説明が簡潔過ぎると感じる部分があります。2016年6月にTendermintのCTOであるEthan Buchmanが発表している詳細な論文があるので、後日その論文からいくつか仕組み的に重要そうな部分を抜粋して翻訳するかもしれません。
スポンサードサーチ
3.用語
「ノード(nodes)」はピアトゥピアネットワークで互いに接続し、「ゴッシプに(by gossip)」新しい情報をリレーする。各ノードはBitcoinのように、「ブロックチェーン(blockchain)」の形で完全に順序通りのイベント配列の完全なコピーを保持する。「ユーザ(users)」はシステム内に「アカウント(account)」を持ち、アカウントはユーザの公開鍵か「アドレス(address)」で識別される。各アカウントは、新しい「トランザクション(transactions)」と交換可能な「コイン(coins)」の総額を保持する。ユーザが新しいトランザクションに署名してネットワークのノードに送信すると、ノードはそのトランザクションをリレーする。トランザクションは、Tendermintの定めるプロトコルのルール(例:送信に十分な資金など)を遵守していれば「有効(valid)」である。
4.ブロック構造
有効なトランザクションは図1に示す構造を持つ「ブロック(blocks)」にまとめられる。「バリデーションハッシュ(validation hash)」はブロックに含まれる署名のマークル木のルートハッシュであり、「トランザクションハッシュ(transactions hash)」はブロックに含まれるトランザクションデータのマークル木のルートハッシュである[7]。「ヘッダ(header)」に含まれている「ステートハッシュ(state hash)」は、ブロックのトランザクション適用後の永続的なアカウントステート(ブロックチェーンの外部)のマークルルートハッシュと同じである。最後に「ブロックハッシュ(block hash)」はヘッダハッシュ・バリデーションハッシュ・トランザクションハッシュをハッシュ化することで計算される。このように、ブロックハッシュ自体がマークルルートハッシュであるので、ブロックハッシュにつながるマークルハッシュを辿ることでブロックの任意の構成要素を検証することができる。ブロック内のトランザクション全てが有効であり、かつバリデーション内に十分な署名が含まれているとき、そのブロックは有効であるという。
5.バリデータ
「バリデータ(validators)」はアカウントを持つユーザのうち、「担保トランザクション(bond transaction)」を出すことにより担保預金にコインをロックしたものである。これらのバリデータは暗号学的な署名または「投票(votes)」をブロードキャストすることでコンセンサスプロトコルに参加し、次のブロックに合意する。バリデータは担保として預託したコインの総額と等しい「投票パワー(voting power)」を持つ。バリデータは「担保解除トランザクション(unbonding transaction)」を出すことであとからロック中のコインをロック解除することができる。その後、コインは「担保解除期間(unbonding period)」という予め決められた期間中はロックされたままとなり、その後にバリデータは自由にコインを他のアカウントに送金したり使用したりすることができる。また、最低でも2/3の合計投票力を有するバリデータの集合を「バリデータの2/3を占める集団(2/3 majority of validators)」という。同様に、最低でも1/3の合計投票力を有するバリデータの集合を「バリデータの1/3を占める集団(1/3 majority of validators)」という。
バリデータの2/3を占める集団があるブロックに対する投票に署名してコミットすると、そのブロックは「コミットされた(be commited)」とみなされる。同じ高さで2つのブロックがバリデータの2/3を占める集団の署名を得ている場合、「分岐(fork)」が起きる。単純計算で、分岐は少なくともバリデータの1/3を占める集団が「どちらにも(duplicitously)」署名している場合に限り起こる。
あるバリデータがどちらにも署名した場合、誰でもその対立する2つのコミット投票署名と一緒に簡潔な「証拠トランザクション(evidence transaction)」を生成できる。この証拠トランザクションはブロックチェーンへコミットされて、不正を冒したバリデータらの担保コインを没収する。不正を冒したバリデータのコインが使用される前(つまり、担保解除期間が過ぎる前)に証拠トランザクションがコミットされる限り、そのバリデータは正しく処罰される。このことは、バリデータの2/3を占める集団がコインの担保を解除して不審なパーティに売り払った後にブロックチェーンの分岐を高揚するのを防ぐことはできない点には注意されたい。これは、「ロングレンジ二重支払い攻撃(long-range double-spend attack)」と呼ばれるものである。ユーザは担保解除期間の制限以内に定期的にブロックチェーンを同期することでロングレンジ攻撃を回避できる。
二重支払い攻撃はブロックチェーンの分岐を示唆する。「ショートレンジ二重支払い攻撃(short-range double-spend attack)」は直近のブロック高で分岐が発生した時に起こる。不正を冒したバリデータがまだ担保にコインをロックしているほどの直近を意図している。分岐には少なくともバリデータの1/3を占める集団がどちらにも署名している必要があるので、ショートレンジ二重支払い攻撃に対するペナルティは担保に入れられているコイン総額のかなりの割合(1/3)になる。ゆえに、バリデータになるためのインセンティブをチューニングすることで、二重支払い攻撃の実行にかかる最小限のコストを調整できる。例えば、バリデータの投票パワーに比例してブロック報酬を分割するといった手段により暗号通貨をインフレの性質を持つものにすることができる。インフレ率を固定する必要はないが、coin-days-destroyed(筆者注:使われていないコインの量に注目して実際のトランザクション出来高を測定するための指標。トランザクションに含まれるコインの量×前回使われてから次に使われるまでの日数で算出する。相当する日本語訳はないが、あえて訳するなら、期間あたりに失われたコインの量といったところか)で測定されるようなネットワークの過去の重み付きトランザクション出来高の平均に頼ることができる[8]。バリデータの保護にかかる限界費用が無視d系るほど小さいものであれば、報酬スキームはインフレ的である必要はない。ユーザが支払うトランザクション手数料で十分であろう。
(Tendermintホワイトペーパー日本語訳1 ←← 前)|(次 →→ Tendermintホワイトペーパー日本語訳3)
免責
邦訳には誤りがある場合がございます。予めご承知おき下さい。
確実な情報を知るためには冒頭に示した原文をご参照くださいますようお願いいたします。