(57)【要約】【課題】ブロックチェーンにおいて無効となるブロックを少なくする。【解決手段】所定の情報を含むデータの集合であるブロックを連結したブロックチェーンのデータに、新たなブロックを連結して、新たなブロックチェーンのデータを生成する処理をコンピュータに実行させるブロックチェーンプログラムであって、前記ブロックチェーンのデータに含まれる第１ブロックに続く第２ブロックを生成する際に、前記第２ブロックの生成前に承認され、かつ分岐するブロックのうち、前記第１ブロックとともに並列承認可能なブロックを特定し、前記第１ブロック及び前記第１ブロックとともに並列承認可能なブロックに続く第２ブロックを生成して登録する、処理を含むブロックチェーンプログラムが提供される。【選択図】図１３
2019176381.tif 000002
【特許請求の範囲】
【請求項１】
所定の情報を含むデータの集合であるブロックを連結したブロックチェーンのデータに、新たなブロックを連結して、新たなブロックチェーンのデータを生成する処理をコンピュータに実行させるブロックチェーンプログラムであって、
前記ブロックチェーンのデータに含まれる第１ブロックに続く第２ブロックを生成する際に、前記第２ブロックの生成前に承認され、かつ分岐するブロックのうち、前記第１ブロックとともに並列承認可能なブロックを特定し、
前記第１ブロック及び前記第１ブロックとともに並列承認可能なブロックに続く第２ブロックを生成して登録する、
処理を含むブロックチェーンプログラム。
【請求項２】
前記特定する処理は、
前記分岐するブロックのすべての組み合わせの集合のうち、トランザクションのインプット情報の仮想通貨断片の識別情報を同一にするトランザクションが、組み合わせに含まれる異なるブロックに存在する場合、該組み合わせに含まれるブロックを除外し、除外されなかった組み合わせに含まれるブロックを、前記第１ブロックとともに並列承認可能なブロックと特定する、
請求項１に記載のブロックチェーンプログラム。
【請求項３】
前記特定する処理は、
前記分岐するブロックであって、前記第１ブロックの前のブロックからつながるブロックのうち、前記第１ブロックとともに並列承認可能なブロックを特定する、
請求項１に記載のブロックチェーンプログラム。
【請求項４】
前記特定する処理は、
前記分岐するブロックであって、前記第１ブロックの前のブロックからつながるブロックのすべての組み合わせの集合のうち、トランザクションのインプット情報の仮想通貨断片の識別情報を同一にするトランザクションが、組み合わせに含まれる異なるブロックに存在する場合、該組み合わせに含まれるブロックを除外し、除外されなかった組み合わせに含まれるブロックを、前記第１ブロックとともに並列承認可能なブロックと特定する、
請求項３に記載のブロックチェーンプログラム。
【請求項５】
特定した前記第１ブロック及び前記第１ブロックとともに並列承認可能なブロックの数を加算して、連結される前記ブロックの長さを算出する、
請求項１〜４のいずれか一項に記載のブロックチェーンプログラム。
【請求項６】
前記算出する処理は、
連結される前記ブロックの長さに応じて前記第２ブロックを生成して登録する処理に対する報酬を算出する、
請求項５に記載のブロックチェーンプログラム。
【請求項７】
所定の情報を含むデータの集合であるブロックを連結したブロックチェーンのデータに、新たなブロックを連結して、新たなブロックチェーンのデータを生成する処理をコンピュータが実行するブロックチェーン方法であって、
前記ブロックチェーンのデータに含まれる第１ブロックに続く第２ブロックを生成する際に、前記第２ブロックの生成前に承認され、かつ分岐するブロックのうち、前記第１ブロックとともに並列承認可能なブロックを特定し、
前記第１ブロック及び前記第１ブロックとともに並列承認可能なブロックに続く第２ブロックを生成して登録する、
処理を含むブロックチェーン方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブロックチェーンプログラム及びブロックチェーン方法に関する。
【背景技術】
【０００２】
ビットコイン(登録商標)等の仮想通貨（以下、「コイン」ともいう。）を用いた取引では、ブロックチェーンと呼ばれる技術が用いられている（例えば、特許文献１参照）。ブロックチェーンは、参加者間の仮想通貨の取引情報を一定数まとめて生成したブロックを、連結してリスト化したものである。ブロックチェーンにおける取引情報の承認とは、その取引情報を含めた形で新たなブロックを生成することをいう。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２０１７／０８２２３８号パンフレット
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ブロックチェーンでは、最終的に有効となるブロックを生成した計算ノードに報酬が支払われる。従って、世界中のノードが同時並行かつ投機的に競ってブロックを生成しようとするため、一つのブロックから複数のブロックの分岐が発生する場合がある。
【０００５】
また、最終的に最も長く成長した分岐上に存在するブロックのみを有効とし、その他の分岐上に存在するブロックをすべて無効とする手法がある。しかし、この手法では、最も長い分岐上のブロック以外のブロックの生成に使用したＣＰＵリソースが、結果的に無駄に消費されたことになる。また、無効ブロックの生成に使用したＣＰＵリソースの消費量が増加するということは、そうでない時と比べてトランザクション性能が悪化していることを意味する。
【０００６】
そこで、１つの側面では、ブロックチェーンにおいて無効となるブロックの数を少なくすることを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様では、所定の情報を含むデータの集合であるブロックを連結したブロックチェーンのデータに、新たなブロックを連結して、新たなブロックチェーンのデータを生成する処理をコンピュータに実行させるブロックチェーンプログラムであって、前記ブロックチェーンのデータに含まれる第１ブロックに続く第２ブロックを生成する際に、前記第２ブロックの生成前に承認され、かつ分岐するブロックのうち、前記第１ブロックとともに並列承認可能なブロックを特定し、前記第１ブロック及び前記第１ブロックとともに並列承認可能なブロックに続く第２ブロックを生成して登録する、処理を含むブロックチェーンプログラムが提供される。
【発明の効果】
【０００８】
１つの側面では、ブロックチェーンにおいて無効となるブロックを少なくすることができる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態に係る取引システムの構成の一例を示す図。
【図２】一実施形態に係る取引の一例を示す図。
【図３】一実施形態に係る取引システムにおける仮想通貨価値の移転の一例を示す図。
【図４】仮想通貨における署名を説明する図。
【図５】仮想通貨におけるブロックチェーンを説明する図。
【図６】一実施形態に係るブロックチェーンの一例を示す図。
【図７】一実施形態に係るブロックチェーン生成装置の機能構成の一例を示す図。
【図８】一実施形態に係るブロックチェーン生成装置のハードウェア構成の一例を示す図。
【図９】一実施形態に係る承認済みブロック列及び未承認トランザクションのデータ構造の一例を示す図。
【図１０】一実施形態に係るブロック内のデータ構造の一例を示す図。
【図１１】一実施形態に係るブロックチェーン処理の一例を示すフローチャート。
【図１２】一実施形態に係る並列承認処理の一例を示すフローチャート。
【図１３】一実施形態に係る並列承認処理の結果の一例を示す図。
【図１４】一実施形態に係る並列承認処理の結果の一例を示す図。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態について添付の図面を参照しながら説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複した説明を省く。
【００１１】
［取引システムの全体構成］
まず、一実施形態に係る取引システム１の構成の一例について、図１を参照しながら説明する。図１は、本実施形態に係る取引システム１の構成の一例を示す。本実施形態に係る取引システム１は、ブロックチェーン生成装置１０ａ〜１０ｆ及び端末２０ａ〜２０ｃを有する。ブロックチェーン生成装置１０ａ〜１０ｆ及び端末２０ａ〜２０ｃは、Ｐ２Ｐ（Ｐｅｅｒ  Ｔｏ  Ｐｅｅｒ）ネットワーク４０を介して接続されている。ただし、図１の取引システム１の構成は一例であり、取引システム１を構成する生成装置１０及び端末２０の個数は、図１に示す数に限らない。
【００１２】
ブロックチェーン生成装置１０ａ〜１０ｆは、ブロックを生成する計算ノードであり、「マイナー」とも呼ばれる。本実施形態では、ブロックチェーン生成装置１０ａ〜１０ｆを総称して生成装置１０という。生成装置１０は、サーバ、ＰＣ等のいずれの情報処理装置であってもよい。
【００１３】
端末２０ａ〜２０ｃは、仮想通貨を用いた取引に参加するユーザの機器である。端末２０ａ〜２０ｃは、ユーザの操作に応じて送金等の取引を行うためのトランザクションを生成する。端末２０ａ〜２０ｃを総称して端末２０ともいう。
【００１４】
端末２０は、生成した取引のトランザクションのデータをブロードキャストする。生成されるトランザクションとしては、仮想通貨を用いた送金等、Ｐ２Ｐネットワーク４０を介して実行される金融取引に使用することができる。端末２０としては、スマートフォン、ＰＣ、タブレット型端末、ウェアラブルデバイス等のいずれのコンピュータであってもよい。
【００１５】
生成装置１０は、端末２０がブロードキャストしたトランザクションを承認し、承認したトランザクションを所定数まとめてブロック化し、該ブロックを連結したブロックチェーンに、生成した新たなブロックを連結して新たなブロックチェーンのデータを生成する。新たなブロックは、既存のブロックチェーンの生成後に発生したトランザクションのデータを含む。
【００１６】
例えば、図２に示す取引の一例では、端末２０ａ〜２０ｄのそれぞれが、取引Ａ〜Ｄのトランザクションを生成する。取引Ａ〜Ｄのトランザクションのデータは、Ｐ２Ｐネットワーク４０を介してブロードキャストされ、複数の生成装置１０と共有される。
【００１７】
図２の例では、ブロックチェーン生成装置１０ａ〜１０ｃは、端末２０ａ〜２０ｄが生成した新たな４つの取引Ａ〜Ｄのトランザクションから、一部又は全部のトランザクションのデータをまとめたブロックを生成する。生成装置１０が、生成されたトランザクションを一定数まとめて承認し、ブロック化することを「マイニング」ともいう。ここでの「承認」とは、任意に選択した複数のトランザクションのデータをブロックの中に取り入れてハッシュ値を計算することにより、以降改ざんできないデータとして保持を開始することをいう。
【００１８】
図１に戻り、生成装置１０が生成した新たなブロックチェーンのデータは、Ｐ２Ｐネットワーク４０を介して、他の生成装置１０と共有される。ブロックチェーン生成装置１０ａ〜１０ｆは、例えば５０ＧＢのメモリ装置３０ａ〜３０ｆと一対一に接続され、データを共有してもよい。ブロックチェーン生成装置１０ａ〜１０ｆが、メモリ装置３０ａ〜３０ｆに記憶する主な共有データには、後述する承認済みトランザクション及び未承認トランザクションが含まれる。
【００１９】
［仮想通貨価値の移転］
図３は、仮想通貨価値の移転の一例を示す。本実施形態では、トランザクションは、仮想通貨価値の移転、つまり送金の記録を示し、インプット情報とアウトプット情報を有する。
【００２０】
インプット情報には、仮想通貨の一塊（以下、「通貨断片」という。）及び通貨断片を識別するための通貨断片ＩＤが含まれる。例えば、図３のインプット情報（Ｉｎｐｕｔ）では、取引を行うユーザ「Ｏｗｎｅｒ１」が１０ＢＴＣの通貨断片を入金したことを示す。
【００２１】
通貨断片ＩＤは、通貨断片の識別情報の一例であり、トランザクションのデータに含まれる。図３の例では、インプット情報の通貨断片「１０ＢＴＣ」は、通貨断片ＩＤ「ＩＤ１」により識別可能である。
【００２２】
また、アウトプット情報（Ｏｕｔｐｕｔ）には、送金金額（仮想通貨量）、未使用の通貨断片（ＵＴＸＯ：unspent transaction output）、取引手数料が含まれる。アウトプットの情報には、公開鍵等の情報が含まれてもよい。インプット情報の通貨断片に対して、アウトプット情報ではユーザ「Ｏｗｎｅｒ２」が１ＢＴＣ、ユーザ「Ｏｗｎｅｒ１」が８．９９９ＢＴＣ、取引手数料が０．００１ＢＴＣに分割され、取引が行われたことを示す。取引手数料は、トランザクション毎に取引を行うユーザから支払われる仮想通貨である。
【００２３】
なお、一つのトランザクションでは一のユーザへの送金処理が行われ、複数のユーザに送金することはできない。図３の例では、当該トランザクションＴＲで一のユーザ「Ｏｗｎｅｒ２」に通貨断片「１ＢＴＣ」が送金されている。そのときに未使用の「Ｏｗｎｅｒ１」の通貨断片「８．９９９９ＢＴＣ」から、別のトランザクションＴＲを生成し、他のユーザに送金することは可能である。
【００２４】
［トランザクション］
次に、図４を参照して、仮想通貨における署名について説明する。例えば、第１のトランザクションＴＲ１は、ユーザ「Ｏｗｎｅｒ０」の端末２０がトランザクションを生成し、ユーザ「Ｏｗｎｅｒ１」の端末２０に送金し、ユーザ「Ｏｗｎｅｒ１」の端末２０が受け取る処理であるとする。第２のトランザクションＴＲ２は、ユーザ「Ｏｗｎｅｒ１」の端末２０がトランザクションを生成し、ユーザ「Ｏｗｎｅｒ２」の端末２０に送金し、ユーザ「Ｏｗｎｅｒ２」の端末２０が受け取る処理であるとする。
【００２５】
第２のトランザクションを生成する端末２０は、最新のトランザクション（例えば、第１のトランザクションＴＲ１）のデータとユーザ「Ｏｗｎｅｒ１」の公開鍵を合わせたデータに対して暗号学的ハッシュ関数を適用し、「Ｏｗｎｅｒ１」の秘密鍵を用いて署名を施す。これにより、端末２０は、第２のトランザクションＴＲ２のデータを生成する。
【００２６】
コインを受け取るユーザ「Ｏｗｎｅｒ２」の端末２０は、そのひとつ手前の取引（第１のトランザクションＴＲ１）における受け手（Ｏｗｎｅｒ１）の公開鍵を用いて、第２のトランザクションＴＲ２の署名を検証するとともに、ハッシュ値を再計算する。これにより、ユーザ「Ｏｗｎｅｒ２」の端末２０は、コインが正当な所有者から渡されたことを確かめる。なお、各トランザクションのデータには、取引された通貨断片の値などのトランザクションの内容や、トランザクションを生成するユーザの公開鍵に対応するアドレスが含まれる。
【００２７】
［トランザクションのブロック化］
生成された複数のトランザクションのデータは、所定条件下で、図５に示すように、生成装置１０によってブロックにまとめられ、既存のブロックチェーンに連結される。このとき、生成装置１０は、新たなブロック（例えば、図５のＢｎ＋１ブロック）を生成する際、ブロックチェーンに含まれていないトランザクションのデータを収集する。生成装置１０は、新たなブロックＢｎ＋１に、収集したトランザクションのデータ（例えば、図５のＴＲ２１〜ＴＲ２６）と、現在のブロックチェーンの末尾のブロックＢｎのハッシュ値（２５６ビット）を含める。ハッシュ値の計算では、現在生成中のブロックＢｎ＋１に対して、暗号学的ハッシュ関数を適用した場合のハッシュ値の先頭のｋビットがすべて"０"になる条件を満たすようにする。具体的には、生成装置１０は、Nonce領域に保持された値を総当たりで探索する。生成装置１０は、探索の結果、現在生成中のブロックＢｎ＋１に含める適切値（例えば、０００００３Ｆ３Ｂ９Ａ７・・・等、ハッシュ値の条件を満たす値）を見つけたとする。そうすると、生成装置１０は、適切値を含むブロックＢｎ＋１を、現在のブロックチェーンの末尾のブロックＢｎに連結してブロードキャストする。生成したブロックを改ざんするにはハッシュ値の再計算が必要であり、これにより、ブロックの耐改ざん性を高めることができる。
【００２８】
［ブロックチェーン］
生成されたブロックチェーンの一例を図６に示す。ブロックチェーンは、生成装置１０のそれぞれが生成したブロックＢ１〜Ｂ１５が連結されたツリー構造になっている。各ブロックは、そのブロックの生成前に承認されたブロックに連結できる。生成装置１０のそれぞれは、同時並行かつ投機的にブロックを生成してブロックチェーンを伸ばそうとするため、分岐が発生する。
【００２９】
ブロックを生成する際に、取引に参加するユーザが提供するコストに関するコンセンサス方式の一つとして、Ｐｒｏｏｆ  ｏｆ  Ｗｏｒｋ  （ＰｏＷ）と呼ばれる手法が提案されている。この手法では、ブロックチェーンのうち、最も長いチェーンのブロックのみを有効とし、その他の分岐上のブロックはすべて無効とする。
【００３０】
つまり、分岐したブロックのうち、ブロックの根からブロックの先端までの長さが最も長いチェーンに含まれるブロックが有効であり、その他のブロックは無効になる。例えば、図６の例では、最も長いチェーンＬのブロックＢ１〜Ｂ１０が有効になり、ブロックＢ１１〜Ｂ１５は無効になる。
【００３１】
この結果、無効になったブロックについては、取引システム１全体として、非効率にＣＰＵリソースを消費したことになる。また、ブロック生成時のコストが取引システム１全体のトランザクション性能、すなわち、単位時間当たりに処理可能なトランザクション数のボトルネック要因になり得る。
【００３２】
ブロック生成時の主なコストとしてハッシュ計算時のＣＰＵリソースの消費量がある。よって、ハッシュ計算に時間がかかるとトランザクション性能が低下し、システム全体としての性能が低下する。また、生成装置１０は、無効なブロックを生成すると、その報酬を得られないため、無効ブロックが増えると生成装置１０がブロックを生成するインセンティブが働き難くなる。
【００３３】
そこで、以下に説明する一実施形態に係るブロックチェーン方法では、複数の分岐ブロックを一括して承認できるようにする。これにより、無効になるブロックが減り、単位時間当たりのブロック生成個数が増え、トランザクション性能が向上する。また、投機的に生成されているはずのブロックが有効活用される確率が高まるため、非効率なＣＰＵリソースの消費を少なくし、生成装置１０にブロックを生成するインセンティブを与えることができる。以下、生成装置１０の構成及び動作について説明する。
【００３４】
［機能構成］
まず、一実施形態に係る生成装置１０の機能構成の一例について、図７を参照しながら説明する。図７は、一形態に係る生成装置１０の機能構成の一例を示す図である。
【００３５】
一実施形態に係る生成装置１０は、通信部１１、算出部１２、特定部１３、生成部１４、登録部１５及び記憶部１６を有する。記憶部１６は、共有データテーブル１７、ブロックチェーンプログラム１８を記憶する。共有データテーブル１７は、未承認トランザクションデータ１７ａ及び承認済みブロック列１７ｂを記憶する。
【００３６】
通信部１１は、Ｐ２Ｐネットワーク４０に接続される生成装置１０、端末２０及びその他のコンピュータと通信を行う。
【００３７】
算出部１２は、トランザクションのデータの集合であるブロックを生成する際のハッシュ値の計算を行う。
【００３８】
特定部１３は、ブロックチェーンのデータに含まれる一のブロック（以下、「第１ブロック」ともいう。）に続くブロック（以下、「第２ブロック」ともいう。）を生成する際に、第２ブロックの生成前に承認され、かつ分岐するブロックのうち、第１ブロックとともに並列承認可能なブロックを特定する。ここで、ブロックの分岐とは、連結するブロックの一のブロックから２つ以上のブロックに分かれていることをいう。
【００３９】
特定部１３は、ブロックチェーンの分岐するブロックのすべての組み合わせの集合のうち、トランザクションのインプット情報の通貨断片の識別情報が同一のトランザクションが、組み合わせに含まれる異なるブロックに存在するかを判定する。特定部１３は、インプット情報の通貨断片の識別情報が同一のトランザクションが、組み合わせに含まれる異なるブロックに存在すると判定した場合、異なるブロックに含まれるトランザクションに依存関係があると判断し、該組み合わせに含まれるブロックを除外する。特定部１３は、除外されなかった組み合わせに含まれるブロックを、第１ブロックとともに並列承認可能なブロックに特定する。
【００４０】
特定部１３は、トランザクションに依存関係があるブロックの組み合わせを除外し、除外されなかった組み合わせに含まれるブロックを、第１ブロックとともに並列承認可能なブロックに特定する。
【００４１】
なお、特定部１３は、分岐するブロックであって、第１ブロックの前のブロックからつながるブロックのうちから、第１ブロックとともに並列承認可能なブロックを特定してもよい。
【００４２】
生成部１４は、ブロックチェーンのデータに、新たなブロックを連結して、新たなブロックチェーンのデータを生成する。
【００４３】
登録部１５は、第１ブロック及び第１ブロックとともに並列承認可能であると特定されたブロックに続く第２ブロックを生成して登録する。
【００４４】
算出部１２は、第１ブロック及び特定した並列承認可能なブロックの個数を、ブロックチェーンのブロック列の長さに加算する。また、算出部１２は、第２ブロックを生成して登録する処理に対する報酬を、ブロック列の長さに応じて算出する。
【００４５】
記憶部１６に記憶された共有データテーブル１７の未承認トランザクションデータ１７ａは、ブロック化される前の、未承認のトランザクションのデータの集合である。承認済みブロック列１７ｂは、未承認のトランザクション１７ａが承認され、ブロック化されて連結されたデータの集合である。未承認トランザクションデータ１７ａ及び承認済みブロック列１７ｂは、ブロードキャストされ、すべての生成装置１０で共有される共有データの一例である。
【００４６】
ブロックチェーンプログラム１８は、複数の未承認のトランザクションをブロック化する処理及び並列承認可能なブロックを特定する処理を行うためのプログラムである。
【００４７】
［ハードウェア構成］
次に、一実施形態に係る生成装置１０のハードウェア構成の一例について、図８を参照しながら説明する。図８は、一実施形態に係る生成装置１０のハードウェア構成の一例を示す図である。
【００４８】
生成装置１０は、入力装置１０１、表示装置１０２、外部Ｉ／Ｆ１０３、ＲＡＭ（Random Access Memory）１０４、ＲＯＭ（Read Only Memory）１０５、ＣＰＵ（Central Processing Unit）１０６、通信Ｉ／Ｆ１０７及びＨＤＤ（Hard Disk Drive）１０８を備え、それぞれがバスＢで相互に接続されている。
【００４９】
入力装置１０１は、キーボードやマウスなどを含み、生成装置１０に各操作信号を入力するために用いられる。表示装置１０２は、ＬＣＤ（Liquid crystal Display）モニタ等のディスプレイ、プリンタ、ＣＲＴ（Cathode Ray Tube）などを含み、各種の処理結果を表示する。
【００５０】
通信Ｉ／Ｆ１０７は、生成装置１０をＰ２Ｐネットワーク４０に接続するインターフェースである。これにより、生成装置１０は、通信Ｉ／Ｆ１０７を介してユーザの端末２０や他の生成装置１０とトランザクションのデータやブロックチェーンのデータを通信する。
【００５１】
ＨＤＤ１０８は、プログラムやデータを格納している不揮発性の記憶装置である。格納されるプログラムやデータには、生成装置１０の全体を制御するソフトウェア及びアプリケーションソフトウェアがある。例えば、ＨＤＤ１０８には、共有データテーブル１７及びブロックチェーンプログラム１８が格納されてもよい。
【００５２】
外部Ｉ／Ｆ１０３は、外部装置とのインターフェースである。外部装置には、記録媒体１０３ａなどがある。これにより、生成装置１０は、外部Ｉ／Ｆ１０３を介して記録媒体１０３ａの読み取り及び／又は書き込みを行うことができる。記録媒体１０３ａには、ＣＤ（Compact Disk）、及びＤＶＤ（Digital Versatile Disk）、ならびに、ＳＤメモリカード（SD Memory card）やＵＳＢメモリ（Universal Serial Bus memory）等がある。
【００５３】
ＲＯＭ１０５は、電源を切っても内部データを保持することができる不揮発性の半導体メモリである。ＲＯＭ１０５には、ネットワーク設定等のプログラム及びデータが格納されている。ＲＡＭ１０４は、プログラムやデータを一時保持する揮発性の半導体メモリである。ＣＰＵ１０６は、ＨＤＤ１０８やＲＯＭ１０５などの記憶装置から、プログラムやデータをＲＡＭ１０４上に読み出し、処理を実行することで、装置全体の制御や搭載機能を実現する演算装置である。
【００５４】
なお、図７は機能に着目したブロック図を描いており、これらの機能ブロックで示した各部のソフトウェアを実行するプロセッサはハードウェアである。例えば、算出部１２、特定部１３、生成部１４及び登録部１５の機能は、ブロックチェーンプログラム１８がＣＰＵ１０６に実行させるブロックチェーン処理及び並列承認処理により実現される。
【００５５】
通信部１１の機能は、例えば、通信Ｉ／Ｆ１０７により実現可能である。記憶部１６の機能は、例えば、ＲＡＭ１０４、ＲＯＭ１０５及びＨＤＤ１０８により実現可能である。共有データテーブル１７に記憶された未承認トランザクションデータ１７ａ及び承認済みブロック列１７ｂは、ＲＡＭ１０４、ＨＤＤ１０８又はＰ２Ｐネットワーク４０を介して生成装置１０に接続されるクラウド上のサーバ等に格納されてもよい。
【００５６】
[承認済みブロック列及び未承認トランザクションのデータ構造]
承認済みブロック列１７ｂの一例を、図９の（ａ）に示す。承認済みブロック列１７ｂの各ブロックＢ１、Ｂ２、Ｂ３、Ｂ４・・・は、ポインタにより連結され、すべてのブロックのブロック情報（ブロックに含まれるトランザクション情報等）が管理される。
【００５７】
実線のポインタは、すべてのブロックのブロック情報を管理するためのポインタであって、ブロックを生成した順番とは関係しない。これに対して、点線で示す承認列のポインタは、ブロックを生成した順序を示す。前述の通り、ブロックチェーンにおける承認とは、新たなブロックを生成することをいい、このときに既に作成されている複数のブロックのどれと繋がるかを承認列のポインタにより示す。承認列のポインタは、どのブロックを連結したかを逆向きのポインタで示す。図９の（ａ）の例では、ブロックＢ４の生成時にブロックＢ３と連結され、ブロックＢ３の生成時にブロックＢ２と連結されブロックＢ２の生成時にブロックＢ１と連結されたことが、承認列のポインタから把握できる。
【００５８】
未承認トランザクションデータ１７ａの一例を、図９の（ｂ）に示す。未承認トランザクションデータ１７ａは、共有データテーブル１７に含まれる未承認トランザクションリストに基づきブロック化されていない未承認のトランザクションがポインタで連結されている。図９の（ｂ）の例では、未承認のトランザクションＴＲ１、ＴＲ２、ＴＲ３、ＴＲ４・・・がポインタにより連結され、すべての未承認のトランザクション情報が管理される。
【００５９】
承認済みブロック列１７ｂのデータ構造について、図１０を参照してさらに説明する。図１０は、図６のブロックＢ５から分岐したブロックＢ１１、Ｂ６、Ｂ１２及びブロックＢ６に連結するブロックＢ７のデータ構造の一例を示す。図１０の連結するブロックは、承認済みブロック列１７ｂの一部を示す。
【００６０】
ブロックＢ６、Ｂ７、Ｂ１１、Ｂ１２には、複数のトランザクション情報が記憶されている。例えば、ブロックＢ６には、トランザクション列（ＴＲ６１，ＴＲ６２・・・ＴＲ６ｍ）の情報が記憶されている。トランザクション列は、トランザクションの取引を要約するデータのみブロック内に格納されてもよい。
【００６１】
各ブロックには、予め許されているブロックの並列承認数だけポインタの領域が確保されている。従来は、ブロックの並列承認は認められていなかったため、ブロック間のつながりを示すポインタの領域は一つ確保されていた。これに対して、本実施形態では、所定の条件を満たす場合、ブロックの並列承認が認められる。このため、ブロックのつながりを示すポインタの領域は複数必要になる。例えば、ブロックＢ６に対してブロックＢ１１、Ｂ１２が並列承認された場合には、ブロックＢ７のポインタ１〜３には、ブロックＢ６、Ｂ７、Ｂ１２の情報が記憶される。
【００６２】
以上に説明したデータ構造の未承認トランザクションデータ１７ａ及び承認済みブロック列１７ｂは、Ｐ２Ｐネットワーク４０に接続されるすべての生成装置１０の記憶部１６に記憶され、共有データとして管理される。
【００６３】
次に、未承認トランザクションデータ１７ａ及び承認済みブロック列１７ｂをどのタイミングで一の生成装置１０から他の生成装置１０へ送信するのかの処理を含むブロックチェーン処理及び並列承認処理について、図１１及び図１２を参照して説明する。図１１は、一実施形態に係るブロックチェーン処理の一例を示すフローチャートである。図１２は、一実施形態に係る並列承認処理の一例を示すフローチャートである。
【００６４】
［ブロックチェーン処理］
本処理は、各生成装置１０においてそれぞれ実行される。ここでは、説明の便宜上、本処理を実行する生成装置１０を生成装置Ａとして説明するが、すべての生成装置１０が生成装置Ａになり得る。また、説明の便宜上、本処理を実行する生成装置１０以外の一の生成装置１０を生成装置Ｂとして説明する。
【００６５】
生成装置Ａの管理者の指示に従い、生成装置Ａがブロックチェーン処理のプロセスの開始を実行すると、本処理が開始される。生成装置Ａの通信部１１は、ＤＮＳ（Domain Name System）を利用して他の生成装置１０のうちの一つを探索し、探索した一つの生成装置１０（生成装置Ｂ）に接続する（ステップＳ１０）。
【００６６】
次に、通信部１１は、これまでにブロードキャストされたすべての承認済みブロック列と未承認トランザクションデータを生成装置Ｂに要求する（ステップＳ１２）。通信部１１は、要求に応じて新規にブロードキャストされた承認済みブロック列と未承認トランザクションデータの集合を受信する（ステップ１４）記憶部１６は、受信した承認済みブロック列と未承認トランザクションの集合を、共有データテーブル１７に記憶する。これにより、生成装置Ａは、最新の未承認トランザクションデータ１７ａ及び承認済みブロック列１７ｂを記憶する。生成部１４は、未承認トランザクションデータ１７ａに含まれる所定個の未承認トランザクションをまとめたブロックを生成する。
【００６７】
次に、特定部１３は、並列承認処理を実行する（ステップＳ１６）。並列承認処理は、図１２に示すフローチャートに従い実行され、一のブロックと並列承認可能なブロックが特定される。並列承認処理を実行後、通信部１１は、生成装置Ａが生成したブロックと端末２０がダイレクトに生成装置Ａに通知した新規トランザクションの集合を、生成装置Ｂを経由してブロードキャストする（ステップＳ１８）。
【００６８】
次に、通信部１１は、生成装置Ａの管理者の指示に従い、生成装置Ａがプロセスの終了の要求を通知したかを判定する（ステップＳ２０）。通信部１１は、生成装置Ａがプロセスの終了の要求を通知していないと判定すると、ステップＳ１４に戻り、ステップＳ１４〜Ｓ２０の処理を繰り返す。通信部１１は、生成装置Ａがプロセスの終了の要求を通知したと判定すると、本処理を終了する。
【００６９】
［並列承認処理］
図１１のステップＳ１６にて呼び出される図１２の並列承認処理について説明する。並列承認処理では、算出部１２は、現在のブロックチェーンの列（承認済みブロック列１７ｂ）の枝の集合をＰとする（ステップＳ３０）。例えば、図１３（ａ）に示す承認済みブロック列では、分岐するブロックＢ６、Ｂ７、Ｂ１１、Ｂ１２が、枝の集合Ｐとなる。
【００７０】
次に、算出部１２は、枝の集合Ｐの要素のすべての組み合わせ集合を抽出し、Ｑとする（ステップＳ３２）。図１３（ａ）の例では、Ｑの組み合わせは、各ブロックのポインタが３の場合、３つの要素の組み合わせとなる。具体的には、（Ｂ６，Ｂ７，Ｂ１１）、（Ｂ６，Ｂ７，Ｂ１２）、（Ｂ６，Ｂ１１，Ｂ１２）、（Ｂ７，Ｂ１１，Ｂ１２）の組み合わが抽出される。
【００７１】
図１２に戻り、次に、算出部１２は、Ｑが空ではないかを判定する（ステップＳ３４）。算出部１２は、Ｑが空であると判定すると、ステップＳ４４に進む。一方、算出部１２は、Ｑが空ではないと判定すると、Ｑから一つの組み合わせ（組み合わせＡとする）を取り出し、Ｑから組み合わせＡを削除する（ステップＳ３６）。例えば、例えば、（Ｂ６，Ｂ７，Ｂ１１）を組み合わせＡとして取り出した場合、Ｑから組み合わせＡを削除する。
【００７２】
次に、特定部１３は、Ａの枝の組み合わせのブロックにおいて、任意の２つの枝のブロックに含まれるトランザクションの列が互いに独立であるかを判定する（ステップＳ３８）。（Ｂ６，Ｂ７，Ｂ１１）が組み合わせＡの場合、任意の２つの枝のブロックとしては、（Ｂ６，Ｂ７）、（Ｂ６，Ｂ１１）、（Ｂ７，Ｂ１１）が挙げられる。そして、特定部１３は、これらの任意の２つの枝のブロックに含まれるトランザクションが互いに独立であるかが判定される。ただし、この時点で有効ブロック（Ｂ６，Ｂ７）については、本判定処理を行わなくてもよい。
【００７３】
任意の２つの枝のブロックに含まれるトランザクションが互いに独立であるか否かは、任意の２つの枝の異なるブロック内のトランザクションに、インプット情報の通貨断片の識別情報が同一のトランザクションがあるか否かにより判定できる。任意の２つの枝の異なるブロック内のトランザクションに、インプット情報の通貨断片の識別情報が同一のトランザクションがある場合、その任意の２つの枝のブロックの組み合わせには取引の依存関係があると判断できる。よって、特定部１３は、その任意の２つの枝のブロックの組み合わせを並列承認可能なブロックから除外し、すなわち、その任意の２つの枝のブロックを集合Ｒへ入れずにステップＳ３４に戻り、ステップＳ３４以降の処理を繰り返す。
【００７４】
例えば、任意の２つの枝のブロックが（Ｂ６，Ｂ１１）の場合、ブロックＢ６に含まれるトランザクションのインプット情報の通貨断片の識別情報と、ブロックＢ１１に含まれるトランザクションのインプット情報の通貨断片の識別情報とが一致する場合、（Ｂ６，Ｂ１１）のブロックの組み合わせを集合Ｒへ入れずにステップＳ３４に戻る。
【００７５】
一方、ステップＳ３８において、特定部１３は、Ａの枝の組み合わせのブロックのうち、任意の２つの枝のブロック内のトランザクションが互いに独立であると判定された場合、並列承認が可能であると判定し、その任意の２つの枝のブロックを集合Ｒへ含める（ステップＳ４０）。
【００７６】
次に、特定部１３は、並列承認が可能なブロックがｎブロックである場合には、ブロックチェーンのブロック列の長さにｎを加算する（ステップＳ４２）。例えば、図１３（ｂ）に示すように、（Ｂ６，Ｂ１１）及び（Ｂ６，Ｂ１２）が並列承認可能なブロックの場合には、ブロックチェーンのブロック列の長さにｎ＝３（ブロックＢ６，Ｂ１１、Ｂ２の３つ）が加算される。
【００７７】
Ｑが空になるまでステップＳ３４〜Ｓ４２の処理が繰り返され、Ｑが空になったとき、ステップＳ４４において、算出部１２は、集合Ｒの中で承認済みブロック列の長さが最も長い組み合わせの集合に対して、ＰｏＷのハッシュ計算を行い、本処理を終了する。
【００７８】
本処理によれば、枝のブロックの組み合わせの集合Ｑのうち、一の組み合わせＡに依存関係が含まれていないか（つまり、互いに独立か）を判定し、互いに独立の場合には、そのブロックの組み合わせは並列承認可能と判断し、そのブロックの組み合わせＡを集合Ｒに入れる。一のブロックの組み合わせＡに依存関係が含まれている場合には、並列承認不可能と判断し、そのブロックの組み合わせＡを集合Ｒに入れないようにする。
【００７９】
集合Ｒは一回で承認（並列承認を含む）するブロックの集合である。一回で承認するブロックの総数が多い程、無効ブロックの数が減り、一回で承認する際のＣＰＵリソースの使用効率が良くなる。そこで、ブロックの総数が最も多いブロックの組み合わせを集合Ｒから取り出し、その取り出した組み合わせのブロックに対してＰｏＷのハッシュ計算を行い、並列承認処理を実行する。
【００８０】
例えば、（Ｂ６，Ｂ１１）及び（Ｂ６，Ｂ１２）に含まれるトランザクションに依存関係がないと判定された場合、集合Ｒには、（Ｂ６，Ｂ１１）及び（Ｂ６，Ｂ１２）が含まれる。これにより、集合Ｒに含まれるブロックＢ６とブロックＢ１１、Ｂ１２との並列承認が可能と判断される。図１３（ｂ）の例では、ブロックＢ１〜Ｂ７の７つのブロックに加えて、ブロックＢ１１、Ｂ１２の２つのブロックの数が承認済みブロック列の個数に加算される。
【００８１】
ただし、（Ｂ６，Ｂ１１）の組み合わせに依存関係がなくても、（Ｂ７，Ｂ１１）の組み合わせに依存関係がある場合には、ブロックＢ１１は並列承認から除外される。同様に（Ｂ６，Ｂ１２）の組み合わせに依存関係がなくても、（Ｂ７，Ｂ１２）の組み合わせに依存関係がある場合には、ブロックＢ１１は並列承認から除外される。
【００８２】
そして、ブロックの総数が最も多い組み合わせを集合Ｒから取り出し、その取り出した組み合わせのブロックに対してＰｏＷのハッシュ計算を行うことで、図１３（ｂ）に示すように、ブロックＢ６とブロックＢ１１、Ｂ１２との並列承認が実現される。
【００８３】
なお、ＰｏＷのハッシュ計算時には、複数ブロックを例えばＸＯＲ（exclusive or）などの軽量な計算で畳み込み、その結果に対してハッシュ値を計算してもよい。これにより、ハッシュ計算の計算量を減らすことができる。
【００８４】
以上、所定の情報（例えば取引情報）を含むトランザクションデータの集合であるブロックを連結したブロックチェーンのデータに新たなブロックを連結して、新たなブロックチェーンのデータを生成する、一実施形態に係るブロックチェーン方法について説明した。
【００８５】
なお、例えば、図１３のブロックＢ６は、ブロックチェーンのデータに含まれる第１ブロックの一例であり、ブロックＢ７は第１ブロックに続く第２ブロックの一例である。また、図１４（ａ）のブロックＢ３は、ブロックチェーンのデータに含まれる第１ブロックの一例であり、ブロックＢ４は第１ブロックに続く第２ブロックの一例である。
【００８６】
本ブロックチェーン方法によれば、分岐したブロックの枝の集合のうち、トランザクションに依存関係がない場合、並列承認可能なブロックと判定する。従来のブロックチェーン方法では、図１３（ａ）に示すように、分岐したブロックのうち、ブロックの根からブロックの先端までの長さが最も長いチェーンに含まれるブロックが有効であり、その他のブロックは無効になる。このため、無効ブロックの数が増える程、取引システム全体として非効率にＣＰＵリソースを消費することになり、トランザクション性能のボトルネック要因になる。
【００８７】
これに対して、上記に説明したように一実施形態に係るブロックチェーン方法では、複数の分岐ブロックを一括して承認（並列承認）できるようにする。例えば、図１３（ｂ）に示すように、従前は無効とされたブロックＢ１１、Ｂ１２を有効ブロックとすることができる。
【００８８】
また、図１４（ｂ−１）では、分岐の集合ブロックＢ３、Ｂ４、Ｂ１３、Ｂ１４、Ｂ１５のうち、任意の２つのブロックの組み合わせに含まれるトランザクションの依存関係を判定し、すべてのブロックの組み合わせに依存関係がないと判定された例を示す。この場合、ブロックＢ１３、Ｂ１４、Ｂ１５はブロックＢ３と並列承認されるブロックと判定される。これにより、図１４（ａ）に示すように、従前は無効とされたブロックＢ１３、Ｂ１４、Ｂ１５を有効ブロックとすることができる。
【００８９】
図１４（ｂ−２）では、分岐の集合ブロックＢ３、Ｂ４、Ｂ１３、Ｂ１４、Ｂ１５のうち、任意の２つのブロックの組み合わせに含まれるトランザクションの依存関係を判定し、ブロックＢ１３とブロックＢ３との組み合わせ又はブロックＢ１３とブロックＢ４との組み合わせに依存関係があると判定された例である。それ以外の任意のブロックの組み合わせには依存関係がないと判定されている場合、ブロックＢ１３と、ポインタによってブロックＢ１３につながるブロックＢ１４を除外し、ブロックＢ１５がブロックＢ３と並列承認されるブロックと判定される。これにより、従前は無効とされたブロックＢ１５を有効ブロックとすることができる。
【００９０】
なお、図１０に示すブロックのデータ構造に無効ブロックであることを表す属性情報を含めることで、ブロックＢ１３と、ポインタによってブロックＢ１３に接続されているブロックＢ１４との有効及び無効をそれぞれの属性情報によって判定することができる。この場合、ブロックＢ１３を除外し、ブロックＢ１４及びブロックＢ１５がブロックＢ３と並列承認されるブロックと判定される。これにより、従前は無効とされたブロックＢ１４及びブロックＢ１５を有効ブロックとすることができる。
【００９１】
これにより、並列に生成された複数のブロックを一括して承認処理するため、単位時間当たりのブロック生成個数が増え、ブロックチェーンのトランザクション性能を高速化できる。また、無効となるブロックが減り、ブロックが有効活用される確率が高まるため、ブロックチェーンのＣＰＵリソース消費量を効率化できる。
【００９２】
生成装置１０は、ユーザの手数料と、ブロックを生成したことの報酬を受ける。よって、本実施形態では、並列承認した場合には、並列承認しない場合と比べて、無効ブロックを減らし、多くの報酬を得られる可能性が高まる。例えば、一実施形態におけるブロックチェーン方法では、特定した第１ブロックとともに並列承認可能なブロックの個数を加算してブロックチェーンの承認済みブロック列の長さを算出する。そして、特定した第１ブロックとともに並列承認可能なブロックの個数に応じて、第１ブロックにつながる第２ブロックを生成して登録する処理に対する報酬を算出する。
【００９３】
つまり、本実施形態に係るブロックチェーン方法では、並列承認された場合のブロック列の長さを並列承認されたブロック数だけ長く評価して、並列承認をより多く発生させる。これにより、並列承認された場合のマイニングの報酬を通常より高くして、一括承認をより多く発生させることができる。
【００９４】
なお、一実施形態におけるブロックチェーン方法では、ブロックは、所定の情報を含むデータの集合であり、所定の情報を含むデータには、通貨断片のＩＤを含むトランザクションのデータが含まれる。所定の情報を含むデータの集合であるブロックは、１つのトランザクションデータを含んでもよいし、複数のトランザクションデータを含んでもよい。ただし、生成装置１０が取得可能な手数料にはトランザクション毎の手数料が含まれるため、生成装置１０はトランザクションの数を多くしてブロックを生成した方が有利である。
【００９５】
以上、ブロックチェーンプログラム及びブロックチェーン方法を上記実施形態により説明したが、本発明に係るブロックチェーンプログラム及びブロックチェーン方法は上記実施形態に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能である。また、上記実施形態及び変形例が複数存在する場合、矛盾しない範囲で組み合わせることができる。
【００９６】
以上の説明に関し、更に以下の項を開示する。
（付記１）
所定の情報を含むデータの集合であるブロックを連結したブロックチェーンのデータに、新たなブロックを連結して、新たなブロックチェーンのデータを生成する処理をコンピュータに実行させるブロックチェーンプログラムであって、
前記ブロックチェーンのデータに含まれる第１ブロックに続く第２ブロックを生成する際に、前記第２ブロックの生成前に承認され、分岐するブロックのうち、前記第１ブロックとともに並列承認可能なブロックを特定し、
前記第１ブロック及び前記第１ブロックとともに並列承認可能なブロックに続く第２ブロックを生成して登録する、
処理を含むブロックチェーンプログラム。
（付記２）
前記特定する処理は、
前記分岐するブロックのすべての組み合わせの集合のうち、トランザクションのインプット情報の仮想通貨断片の識別情報を同一にするトランザクションが、組み合わせに含まれる異なるブロックに存在する場合、該組み合わせに含まれるブロックを除外し、除外されなかった組み合わせに含まれるブロックを、前記第１ブロックとともに並列承認可能なブロックと特定する、
付記１に記載のブロックチェーンプログラム。
（付記３）
前記特定する処理は、
前記分岐するブロックであって、前記第１ブロックの前のブロックからつながるブロックのうち、前記第１ブロックとともに並列承認可能なブロックを特定する、
付記１に記載のブロックチェーンプログラム。
（付記４）
前記特定する処理は、
前記分岐するブロックであって、前記第１ブロックの前のブロックからつながるブロックのすべての組み合わせの集合のうち、トランザクションのインプット情報の仮想通貨断片の識別情報を同一にするトランザクションが、組み合わせに含まれる異なるブロックに存在する場合、該組み合わせに含まれるブロックを除外し、除外されなかった組み合わせに含まれるブロックを、前記第１ブロックとともに並列承認可能なブロックと特定する、
付記３に記載のブロックチェーンプログラム。
（付記５）
特定した前記第１ブロック及び前記第１ブロックとともに並列承認可能なブロックの数を加算して、連結される前記ブロックの長さを算出する、
付記１〜４のいずれか一項に記載のブロックチェーンプログラム。
（付記６）
前記算出する処理は、連結される前記ブロックの長さに応じて前記第２ブロックを生成して登録する処理に対する報酬を算出する、
付記５に記載のブロックチェーンプログラム。
（付記７）
所定の情報を含むデータの集合であるブロックを連結したブロックチェーンのデータに、新たなブロックを連結して、新たなブロックチェーンのデータを生成する処理をコンピュータが実行するブロックチェーン方法であって、
前記ブロックチェーンのデータに含まれる第１ブロックに続く第２ブロックを生成する際に、前記第２ブロックの生成前に承認され、かつ分岐するブロックのうち、前記第１ブロックとともに並列承認可能なブロックを特定し、
前記第１ブロック及び前記第１ブロックとともに並列承認可能なブロックに続く第２ブロックを生成して登録する、
処理を含むブロックチェーン方法。
（付記８）
前記特定する処理は、
前記分岐するブロックのすべての組み合わせの集合のうち、トランザクションのインプット情報の仮想通貨断片の識別情報を同一にするトランザクションが、組み合わせに含まれる異なるブロックに存在する場合、該組み合わせに含まれるブロックを除外し、除外されなかった組み合わせに含まれるブロックを、前記第１ブロックとともに並列承認可能なブロックと特定する、
付記７に記載のブロックチェーン方法。
（付記９）
前記特定する処理は、
前記分岐するブロックであって、前記第１ブロックの前のブロックからつながるブロックのうち、前記第１ブロックとともに並列承認可能なブロックを特定する、
付記７に記載のブロックチェーン方法。
（付記１０）
前記特定する処理は、
前記分岐するブロックであって、前記第１ブロックの前のブロックからつながるブロックのすべての組み合わせの集合のうち、トランザクションのインプット情報の仮想通貨断片の識別情報を同一にするトランザクションが、組み合わせに含まれる異なるブロックに存在する場合、該組み合わせに含まれるブロックを除外し、除外されなかった組み合わせに含まれるブロックを、前記第１ブロックとともに並列承認可能なブロックと特定する、
付記９に記載のブロックチェーン方法。
（付記１１）
特定した前記第１ブロック及び前記第１ブロックとともに並列承認可能なブロックの数を加算して、連結される前記ブロックの長さを算出する、
付記７〜１０のいずれか一項に記載のブロックチェーン方法。
（付記１２）
前記算出する処理は、
連結される前記ブロックの長さに応じて前記第２ブロックを生成して登録する処理に対する報酬を算出する、
付記１１に記載のブロックチェーン方法。
【符号の説明】
【００９７】
１    取引システム
１０  生成装置（ブロックチェーン生成装置）
１０ａ〜１０ｆ  ブロックチェーン生成装置
１１  通信部
１２  算出部
１３  特定部
１４  生成部
１５  登録部
１６  記憶部
１７  共有データテーブル
１７ａ  未承認トランザクション
１７ｂ  承認済みブロック列
１８  ブロックチェーンプログラム
２０  端末
２０ａ〜２０ｃ  端末
３０ａ〜３０ｆ  メモリ装置
４０  Ｐ２Ｐネットワーク
【図１】
2019176381.tif 000003
【図２】
2019176381.tif 000004
【図３】
2019176381.tif 000005
【図４】
2019176381.tif 000006
【図５】
2019176381.tif 000007
【図６】
2019176381.tif 000008
【図７】
2019176381.tif 000009
【図８】
2019176381.tif 000010
【図９】
2019176381.tif 000011
【図１０】
2019176381.tif 000012
【図１１】
2019176381.tif 000013
【図１２】
2019176381.tif 000014
【図１３】
2019176381.tif 000015
【図１４】
2019176381.tif 000016