5
|
1 %\input{/Users/e155753/.tex/setup}
|
3
|
2
|
|
3 %%文書開始****************************
|
|
4 \begin{document}
|
|
5 %%**************************************
|
|
6 \chapter{ブロックチェーンについて}
|
|
7
|
4
|
8 ブロックチェーンとは分散型台帳技術とも呼ばれ, 複数のトランザクションをまとめたブロック, そのブロックをハッシュによって繋げ, 前後関係を表した台帳というものを, システムに参加しているすべてのノードが保持する技術である. ブロックチェーンにはパブリック型とコンソーシアム型の2種類がある. パブリック型は不特定多数のノードを対象にしており, コンソーシアム型は管理者が許可したノードが参加している.
|
6
|
9
|
|
10 \section{P2P}
|
|
11 ブロックチェーンのネットワーク間はP2Pで動く. つまり, ブロックチェーンネットワークはサーバー, クライアントの区別がなく, すべてのノードが平等である. そのため, 非中央的にデータの管理を行う.
|
|
12
|
|
13
|
4
|
14 \section{ブロックとその構造}
|
|
15 ブロックチェーンにおけるブロックは, 複数のトランザクションをまとめたものである. ブロックの構造は使用するコンセンサスアルゴリズムによって変わるが, 基本的な構造としては次のとおりである.
|
|
16
|
|
17 \begin{itemize}
|
|
18 \item BlockHeader
|
|
19 \begin{itemize}
|
|
20 \item previous block hash
|
|
21 \item merkle root hash
|
|
22 \item time
|
|
23 \end{itemize}
|
|
24 \item TransactionList
|
|
25 \end{itemize}
|
|
26
|
|
27 BlockHeaderには, 前のブロックをハッシュ化したもの, トランザクションをまとめたmerkle treeのrootのhash, このブロックを生成したtimeとなっている.
|
|
28
|
6
|
29 previous block hashは, 前のブロックのパラメータを並べて, hash化したものである. それが連なっていることで, 図\ref{fig:chain}のようなhash chainとして, ブロックがつながっている.
|
5
|
30
|
6
|
31 \begin{figure}[H]
|
|
32 \centering
|
|
33 \fbox{
|
|
34 \includegraphics[scale=0.5]{./images/chain.pdf}
|
|
35 }
|
|
36 \caption{hash chain}
|
|
37 \label{fig:chain}
|
|
38 \end{figure}
|
|
39
|
|
40 そのため, 一つのブロックが変更されれば, その後に連なっているブロックをすべて変更しなければいけなくなる.
|
|
41
|
|
42 ブロックが生成された場合, 知っているノードにそのブロックをブロードキャストする. 実際には通信量を抑えるためにブロック高を送った後にブロックをシリアライズして送る場合もある.
|
|
43
|
|
44
|
|
45 ノードごとにブロックを検証し, 誤りがあればそのブロックを破棄し, 誤りがなければ更にそのノードがブロックをブロードキャストする. . そして, Transaction PoolというTransactionを貯めておく場所から, そのブロックに含まれているTransactionを削除し, 新しいブロックを生成する.
|
5
|
46
|
|
47
|
4
|
48
|
|
49 \section{トランザクションとその構造}
|
|
50 トランザクションとはデータのやり取りを行った記録の最小単位である. トランザクションの構造は次のとおりである.
|
5
|
51 \begin{description}
|
|
52 \item[TransactionHash] トランザクションをハッシュ化したもの.
|
|
53 \item[data] データ.
|
6
|
54 \item[sendAddress] 送り元のアカウントのアドレス.
|
|
55 \item[recieveAddress] 送り先のアカウントのアドレス.
|
|
56 \item[signature] トランザクションの一部と秘密鍵をSHA256でハッシュ化したもの. ECDSAで署名している.
|
5
|
57 \end{description}
|
4
|
58
|
6
|
59 トランザクションはノード間で伝搬され, ノードごとに検証される. そして検証を終え, 不正なトランザクションであればそのトランザクションを破棄し, 検証に通った場合はTransaction Poolに取り組まれ, また検証したノードからトランザクションがブロードキャストされる.
|
4
|
60
|
6
|
61 \section{fork}
|
4
|
62
|
6
|
63 ブロックの生成をしたあとにブロードキャストをすると, ブロック高の同じ, もしくは相手のブロック高のほうが高いブロックチェーンにたどり着く場合がある. もちろん, 相手のブロックチェーンはそのブロックを破棄する. しかしこの場合, 異なるブロックを持った2つのブロックチェーンができる. この状態をforkという. fork状態になると, 2つの異なるブロックチェーンができることになるため, 1つにまとめなければならない. 1つにまとめるためにコンセンサスアルゴリズムを使うが, コンセンサスアルゴリズムについては次章で説明する.
|
4
|
64
|
|
65
|
3
|
66
|
7
|
67
|
3
|
68 %%文書終了****************************
|
|
69 \end{document} |