annotate final_main/chapter2/chapter2.tex @ 7:d6cca85616e2

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