Mercurial > hg > Papers > 2019 > aka-midterm
changeset 5:a3739448a63a
update make a draft
author | akahori |
---|---|
date | Tue, 13 Nov 2018 23:04:37 +0900 |
parents | e8b8a3fdf5e8 |
children | d8977c76fff3 |
files | midterm/midterm.pdf midterm/midterm.tex |
diffstat | 2 files changed, 17 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/midterm/midterm.tex Sun Nov 11 22:58:11 2018 +0900 +++ b/midterm/midterm.tex Tue Nov 13 23:04:37 2018 +0900 @@ -63,9 +63,9 @@ \section{ブロックチェーン} ブロックチェーンとは分散型台帳技術とも呼ばれ, 複数のトランザクションをまとめたブロックをつなげたものを, システムに参加しているすべてのノードが参照できる技術である. ブロックチェーンはデータの追跡, 検証が容易であり, 中央管理者が存在しないと言うメリットがある. -ブロックの中身は前のブロックの暗号化ハッシュ, タイムスタンプなどのメタデータと複数のトランザクションが入っている. ブロックは前のブロックと暗号化ハッシュでつながっており, 現在のブロックのハッシュは前のブロックのハッシュに依存して作られる. そのため, もしブロックを改ざんしたいとしたら, そのブロックにつながるすべてのブロックを改ざんしなければならない. しかし, その仕組みだけならば複数のブロックのハッシュを同時に改ざんすることで, データが改ざんされてしまう可能性がある. そのため, ブロックに付け加える場合にはある作業を行わせ, それによってある条件に収まるHashを作らせる. 例えば, ビットコインだとProof of Workという計算問題を解かせ, Hashを生成する. これは単純には +ブロックの中身は前のブロックの暗号化ハッシュ, タイムスタンプなどのメタデータと, 複数のトランザクションが入っている. ブロックは前のブロックと暗号化ハッシュでつながっており, 現在のブロックのハッシュは前のブロックのハッシュに依存して作られる. そのため, もしブロックを改ざんしたいとしたら, そのブロックにつながるすべてのブロックを改ざんしなければならない. しかし, その仕組みだけならば複数のブロックのハッシュを同時に改ざんすることで, データが改ざんされてしまう可能性がある. そのため, ブロックに付け加える場合にはある作業を行わせ, それによってある条件に収まるHashを作らせる. 例えば, ビットコインだとProof of Workという計算問題を解かせ, Hashを生成する. これは単純にはソースコード\ref{code:proof of work}のような問題を解くのと同義である. -\begin{lstlisting} +\begin{lstlisting}[caption="Proof of Workを単純にしたコード", label={code:proof of work}] while(1){ randomSeed(前のHash + nonce) // 0 < rand() < 10000 @@ -78,15 +78,15 @@ \end{lstlisting} -と言う問題を解くのと同義である. 実際には $0 < rand() < 10000$はもっと大きな値であり, またこれは複数ノードでの分散環境下で計算される. もし, 条件に合うブロックのハッシュが生成できたならば, 他のノードによってそのハッシュが実際に生成されるかどうかを調べる. この仕組みにより, 改ざんを起きにくくしている. +実際には $0 < rand() < 10000$はもっと大きな値であり, またこれは複数ノードでの分散環境下で計算される. もし, 条件に合うブロックのハッシュが生成できたならば, 他のノードによってそのハッシュが実際に生成されるかどうかを調べる. この仕組みにより, 改ざんを起きにくくしている. -このような, 計算量の多くするコンセンサスアルゴリズムを用いることで, 中央管理者が存在しないにもかかわらずにデータの整合性保持が行われる. +このような, 計算量の多くするコンセンサスアルゴリズムを用いることで, 中央管理者が存在しないにもかかわらずにデータの整合性保持が行われる. -トランザクションの中身はデータ, 前のトランザクションと後ろのトランザクションのハッシュ, 暗号鍵でのトランザクションの署名となっている. 署名により, 誰のトランザクション化が簡単にわかる. +トランザクションの中身はデータ, 前のトランザクションと後ろのトランザクションのハッシュ, 暗号鍵でのトランザクションの署名となっている. 署名により, 誰のトランザクションかが簡単にわかる. -もし至るところでブロックが作られ, 競合した場合, 競合したブロック同士でつながっているブロックが多いものを正しいブロックとする. +もし至るところでブロックが作られた場合, ブロックに分岐が発生する場合がある. これをフォークという. これは一種の競合状態である. 分岐したブロック同士にある一定の差がついた場合, 長い方を正しいものとし, 競合を解決する. -通信はp2pで行われ, ブロックが承認された場合, 他のノードにブロードキャストされる. +通信はp2pで行われ, トランザクションやブロックが来た場合, ノードはそれらが正当なものかをルールに従って検証する. そしてトランザクション, ブロックが承認された場合, 他のノードにそのトランザクション, もしくはブロックを送り, 承認されなかった場合は破棄する. これによって, 承認されたものだけがネットワーク上に伝搬されていく. @@ -94,17 +94,23 @@ Christieは当研究室で開発している分散フレームワークである. ChristieはJavaで書かれているが, 当研究室で開発しているGearsOSに組み込まれる予定がある. そのため, GearsOSを構成する言語Continuation based Cと似たCodeGear(以下CG)とDataGear(以下DG)という概念がある. CGはメソッドであり, DGは変数データに相当する. また, ChristieにはCodeGearManager(以下CGM)とDataGearManager(以下DGM)という概念もある. CGMはノードに当たり, DGM, CG, DGを管理する. DGMはDGを管理するものであり, putという操作により変数データ, つまりDGを格納できる. -DGMにはLocalとRemoteと2つの種類があり, Localであれば, そのCGMにDGを格納していき, Remoteであれば接続したRemote先のCGMにDGを格納できる. DGを取り出す際にはアノテーションを付けることで, データの取り出し方も指定できる. Take, Peekという操作があり, Takeは読み込んだDGが消えるが, PeekはDGを消さずにそのまま残す. +DGMにはLocalとRemoteと2つの種類があり, Localであれば, DGMを管理しているCGMにDGを格納していき, Remoteであれば接続したRemote先のCGMにDGを格納できる. DGを取り出す際にはアノテーションを付けることで, データの取り出し方も指定できる. Take, Peekという操作があり, Takeは読み込んだDGが消えるが, PeekはDGを消さずにそのまま残す. CGはCGMによって実行されるが, 実行するにはDGが全て揃う必要がある. もしDGが全て揃わない場合, CGMはずっとlistenし, データが揃うまで実行を待つ. +\section{やったこと} +中間予稿までにやったこととして, コンセンサスアルゴリズムPaxosの論文を読み, ChristieにTopologyManagerという機能を実装した. -\section{やったこと} -実際に, ブロックの実装と +Paxosを読んだ理由は, コンセンサスアルゴリズムの調査である. 実際, Paxosもビットコインで使用される候補に上がったコンセンサスアルゴリズムである. 分散システムはどのようなコンセンサスアルゴリズムを用いているかで性能が変わる. ビットコインのコンセンサスアルゴリズムProof of Workは, 計算量を多くして改ざんを起こりにくくしているが無駄が多く, 10分以内で解かれないように動的に条件を変更している. これは先ほどの, 同時にブロックを変更するのを防ぐため, つまり信頼性を上げるためであるが, 速度面で大きな課題となる. 分散ファイルシステムを構成するにはスケーラビリティが課題であり, ノードの数が多くなればなるほど通信時間がかかる. そのため, コンセンサスリズムとして有名なPaxosの論文を読んだ. + +ChristieにTopologyManagerを実装した理由は, Christieのコードに慣れるため, そしてTopologyManager上に分散システムを実装するのが容易になるからである. TopologyManagerとは, ノードにTopologyを構成させ, ノードごとにどこのノードにつながればいいかを指定する機能である. Christieでは静的, 動的なトポロジー管理ができる. 静的ではdotファイルというものにノードごとの関係を記述する. 動的ではノードの木構造を作る. -\section{やること} +また, ブロックチェーンについては実際にブロックを実装し, 簡易的ではあるがProof of Workを動かして理解を深めた. 分散環境の実装はまだ行っていない. + +\section{これからやること} +ブロックチェーンのトランザクション部分と分散環境を実装していく. コンセンサスアルゴリズムも調査していき, Proof of Work以外のコンセンサスアルゴリズムを探していく. そして, 実際に分散環境下においてブロックチェーンが動くか検証していく. \nocite{*}