本稿について
Origo Scalable Privacy Preserving Platform For Decentralized ApplicationsのVersion 0.1、最終更新日: 2018/5/5時点のものを対象とします。本稿では「Chapter 4. Technical Design」のうち「4.1. Protocol Roles」、「4.2. Protocol Phases」、「4.3. Transaction Privacy」の日本語訳を掲載します。
原文はこちらになります。
スポンサードサーチ
4. 技術設計
4.1. プロトコルの役割
Origoプロトコルにはスマートコントラクト実行のライフサイクル全体に関わる主な役割が3つある。
- パーティ(Parties):パーティP1, ..., PNはスマートコントラクトSCに参加するユーザの集合である。パーティはプライベートなインプットIpriv1, ..., IprivN、パブリックなインプットIpub1, ..., IpubN、コインC1, ..., CNを提示する。
- ブロックチェーン(Blockchain):ブロックチェーンBはオープンなパブリックレジャーで、パーティ間のトランザクションを効率的に、検証可能かつ永続的な方法で記録することができる。
- 実行者(Exectutor):実行者PEはOrigoのスマートコントラクト実行を促す特別なパーティである。実行者は各パーティに実行結果O1, ..., ONをアウトプットする。
4.2. プロトコルの各フェーズ
Origoプロトコルには初期化(Initialize)、コミット(Commit)、実行(Execute)、確定(Settle)の4つのフェーズがある。4つのフェーズは2つのタイムアウトT1とT2で厳密に制限されており、Tcommit < T1かつT1 ≤ Texecute < T2である。各フェーズの技術詳細を示す。
4.2.1. 初期化フェーズ
パーティはブロックチェーンBのノードNiを実行者PEとしして選出する。PEの公開鍵KEはパーティ全員に共有される。
4.2.2. コミットフェーズ
各パーティPi(i ∈ [N])は保証金として預け入れたいと思うだけのコインCi(i ∈ [N])をウォレットからスマートコントラクトに入れて凍結する。各パーティはコミットメントcm = comm(Ci||Iprivi)と、凍結したコインCiのゼロ知識証明ProofCi(i ∈ [N])を計算する。コミットメントcmとProofCiはタイムアウトT1の前にブロックチェーンに送信されることになっており、それ以外の場合、パーティはコントラクトの参加者として認められない。
ブロックチェーンBは各パーティから送られてきたProofCiを検証する役割を持ち、タイムアウトT1後に新しいパーティが誰も認められていないことを保証する。必要なパーティ全員が各自のインプットとコインをコミットするとコントラクトは実行フェーズに移行する。そうでない場合、コントラクトはアボートされてコミットされたコインは全て各パーティに返還される。
このフェーズの目的は秘密裏に各パーティのインプットとコインを提出させることにある。誰も(実行者でさえも)このフェーズで他のパーティのインプットとコインを知ることはできない。インプットとスマートコントラクトに保証金として預け入れられたコインはこのフェーズ以降変更できなくなる。他のパーティのインプットを知った後に自身のインプットやコインを変更して利益を得ることは誰もできない。
4.2.3. 実行フェーズ
各パーティPi(i ∈ [N])は自身のインプットIprivi(i[N])とコインCi(i ∈ [N])の情報を実行者PEの公開鍵KEとともに暗号化する。そして、暗号化した値が自身のコミットメントcmと一致することを証明するためにゼロ知識証明ProofEi(i ∈ [N])を作成する。暗号化データENC(Ci||Iprivi)並びにそれと対応する証明ProofEiはブロックチェーンに送信される。
ブロックチェーンが各パーティから暗号化データと証明を受け取ると、ブロックチェーンBは各パーティに関して暗号化データENC(Ci||Iprivi)がコミットフェーズで提出されたcm = comm(Ci||Iprivi)と一致するかどうかを検証する。これにより他のパーティが暗号化データを送信した後にいずれかのパーティがインプットデータを知らせてしまうのを防ぐ。ブロックチェーンBがProofEiの検証とその時点の時間TがT1 ≤ T < T2であることのチェックを正常に終えると、暗号化データを実行者PEに送信する。
検証済みの暗号化データをブロックチェーンBから受け取ると、実行者PEは自身の秘密鍵PKEで復号して各パーティのIpriviとCiを入手し、スマートコントラクトを実行する。
タイムアウトT2前にいずれかのパーティが暗号化データと証明をブロックチェーンに送信できないか、または証明が誤っている場合は、そのパーティはコントラクトをアボートしたものとみなされる。適切に罰則がコントラクトの要件に基づいてそのパーティの預け入れた保証金に適用される。
実行者がタイムアウト前にアウトプットと証明をブロックチェーンに送信できなかった場合、実行者はアボートしたものとみなされる。実行結果があるパーティにとって好ましいものでない場合、悪意ある実行者は故意にコントラクトをアボートしてしまうかもしれない。これを防ぐため、実行者には然るべき額の保証金の支払いを求める。実行者が実行結果や証明を提示できなければ、保証金を失うのである。
実行者が実行後に各パーティのインプットや結果を明らかにしていないことを確実にするために、Intel SGC[11]のような信頼できるハードウェアで実行数するのがよい。
4.2.4. 確定フェーズ
実行者PEがスマートコントラクトの実行を完了すると、各パーティPi(i ∈ [N])のアウトプットO1, ..., ONが生成される。PEはアウトプットがパーティのインプットとスマートコントラクトから正しく計算されていることを証明するために証明ProofEを作成し、アウトプットO1, ..., ONを各パーティの公開鍵KPi(i ∈ [N])で暗号化してENC(O1), ..., ENC(ON)にする。そしてPEはProofEとENC(O1), ..., ENC(ON)をブロックチェーンBに送信する。
ブロックチェーンBはコントラクトが正しく実行されていることをチェックするためにProofEを検証し、実行結果に基づいて各パーティにコインを分配する。
最後に各パーティはアウトプットを復号する。コントラクトからコインを得ていれば、プライベートトランザクションを使って自身のウォレットに入れることができる。
4.3. トランザクションプライバシー
コントラクトの通貨のインプットとアウトプットがプライベートに保たれていることを保証するために、Origoはトランザクションのプライバシーをサポートする。Zerocashと同様に、Origoはパブリックレジャーとプライベートレジャーを持つ。プライベートレジャーはプライベートな資金移動をサポートするのに利用する。プライベートレジャーはZerocashにおけるMintとPour操作[5]をサポートする。Mint操作によりユーザは非匿名コインを新規コインに変換できる。これはコミットメントスキームを利用してコインの額と所有者のアドレスの双方を秘匿するものである。Pour操作は、ユーザがプライベートコインを消費してプライベートトランザクションを発行し、新しいパブリックまたはプライベートなコインを作ることができるものである。プライベートコインの所有権と、出力額の合計と入力額の合計が等しいことはトランザクションのプライバシーを保証するためにゼロ知識証明を利用して検証される。
OrigoはFreeze操作もサポートする。Freeze操作は、ユーザが自身のプライベートコインをコントラクト内に凍結できるようにするものである。プライベートコントラクトに参加するパーティは、コントラクトにプライベートな保証金の預け入れを行うのにこの操作を利用できる。
(Origoホワイトペーパー日本語訳2 ←← 前)|(次 →→ Origoホワイトペーパー日本語訳4)
免責
邦訳には誤りがある場合がございます。予めご承知おき下さい。
確実な情報を知るためには冒頭に示した原文をご参照くださいますようお願いいたします。