Floc Basics Vol.5 P2Pの構造と技術

P2Pネットワークの特徴

P2Pネットワーク

クラサバ方式ではない
それぞれのノードが必要なデータを融通しあっている

SPVノードとフルノード

SPVノードは、SPV=Simplified Payment Verificationで、軽量ノード、軽量クライアント
フルノードは全てのブロックチェーンを管理する

Running A Full Node

A full node is a program that fully validates transactions and blocks. Almost all full nodes also help the network by accepting transactions and blocks from other full nodes, validating those transactions and blocks, and then relaying them to further full nodes.

P2Pの強み

システムダウンがほぼない(2つ以上のノードが正常稼働していればシステムは稼働し続ける)
DDos攻撃に強い

Digital Attack Map

A live data visualization of DDoS attacks around the globe

https://cybersecurity-jp.com/software-tool/15011

P2Pは匿名性が高くなりやすいが仮想通貨に関しては取引が公開されているのでメールアドレスと同じようなもの。
ただし、一部の仮想通貨は取引記録を完全に秘匿でき、マネーロンダリングやテロ資金供与の懸念がある。

P2Pの弱み

取引承認の時間がかかる
各ノードのデータの一貫性を常に保つことが難しい
これらの弱みを解決するためのものがプライベートチェーンやコンソーシアムチェーン

プライベート(コンソーシアム)チェーンとP2P

プライベートチェーンは一つの組織が管理者となる
アクセスできるノードは管理者による許可制
取引の承認は権限のあるノードだけのため承認スピードは早い
パブリックチェーンほど不正や攻撃への耐性はない

ブロックチェーンをCAP定理から考察する

CAP定理

分散型システムの特性を評価する
以下の3つを同時に満たすことはできない

  1. Consistency(一貫性)
  2. Availability(可用性)
  3. Partition tolerance(分断耐性)

CAP定理

CAP定理は ブリュワーの定理とも呼ばれ、 分散コンピュータシステム のマシン間の情報複製に関する定理。ウェブサービスを想定して作られた定理。 ノード間のデータ複製において、同時に次の3つの保証を提供することはできない。 一貫性 (Consistency)すべてのデータ読み込みにおいて、最新の書き込みデータもしくはエラーのどちらかを受け取る。 可用性 (Availability)ノード障害により生存ノードの機能性は損なわれない。つまり、ダウンしていないノードが常に応答を返す。単一障害点が存在しないことが必要。 分断耐性 (Partition-tolerance)システムは任意の通信障害などによるメッセージ損失に対し、継続して動作を行う。通信可能なサーバーが複数のグループに分断されるケース(ネットワーク分断)を指し、1つのハブに全てのサーバーがつながっている場合は、これは発生しない。ただし、そのようなネットワーク設計は単一障害点をもつことになり、可用性が成立しない。RDBではそもそもデータベースを分割しないので、このような障害とは無縁である。 この定理によると、分散システムはこの3つの保証のうち、同時に2つの保証を満たすことはできるが、同時に全てを満たすことはできない。単一障害点があれば、ネットワーク分断が発生した際にシステムがバラバラに分裂しても、そこを基準に一貫した応答ができる(分断耐性+一貫性)が、可用性が成立しなくなる。 一般的な 関係データベース、 LDAP、 NFS などは一貫性と可用性しか成立しない。 2相コミット はこれに該当。ネットワーク分断が発生した際は、片方を切り捨てる。Amazon Relational Database Service の Multi-AZ 配備も該当。 可用性+分断耐性のケースでも、一定時間以内に一貫性を成立させるシステム( 結果整合性; eventually consistent)は構築可能である。 Amazon SimpleDB や Apache Cassandra などがこの方式を採用している。 DNS や HTTP キャッシュなども該当。3種の中ではこの方式が最も障害に強い。 Apache HBase などが採用している。HBase の場合、 単一障害点 がある上、ネットワーク分断に対して整合性をとる仕組みが不完全であるため、可用性が犠牲となっている。 この定理は、 インクトミの創業者でもあり、 カリフォルニア大学バークレー校の 計算機科学の 教授でもあるエリック・ブリュワーが 2000年の Symposium on Principles of Distributed Computing (PODC) で提案(数学的な用語では 予想 )したのが始まりである。 2002年に MITのSeth Gilbertと ナンシー・リンチがブリュワーの予想の厳密な証明を提出し、 定理 として確立した。

中央サーバでのシステム

一貫性と分断耐性はあるが、中央サーバがダウンするとシステム全体が落ちてしまうため、可用性がない状態

中央サーバにバックアップを持たせたシステム

可溶性を持たせるためにバックアップを持たせようとしてもタイムラグができるため、一貫性が保てなくなる。

2フェーズコミットによってバックアップをリアルタイムにしたシステム

一貫性を保つことは可能だが、ネットワークが分断された場合に一貫性が保てなくなる

CAPとブロックチェーン

新しいブロックが生成されるまでにはおよそ10分程度あるが、ネットワーク上に最新のブロックが行き渡るには十分な時間。
マイニングされたブロックの最長チェーンのみが台帳として正しいというコンセンサスアルゴリズムがあるので、過去のデータは一貫性があるが、最新のブロックについては常に一貫性があるとはいえない。
世界中にノードが分散しているため可用性、分断耐性は非常に高い。
APシステム、AP型と呼ばれることもある。

ビジネスへの応用

リアルタイムデータ処理は苦手。
国際送金の効率化は可能。
権利、契約情報の管理など瞬間的なデータ処理や同期が求められない分野では可能。

スケーラビリティ問題

スケーラビリティ問題とは

トランザクション数やノード数の増加によって引き起こされる問題のこと
Bitcoinは、1ブロックが1MBなので1度のマイニングで処理できるTXが限られているため、利用者が増えて送金が活発になるとトランザクションがネットワーク上に溜まってくる。
早く処理してもらうためには手数料をあげなくてはならないという問題もある。
ノード数が増えて低スペックのノードやネット環境が悪かったりすると検証に時間がかかるという問題もある。

n-transactions-total?timespan=all

Unknown chart description

解決策の方向性

スケールアップやスケールアウトなどの一般的な解決策が考えられるが、各ノードのハードウェアの性能をコントロールできない、かつスケールアウトしても基本的にはノードの台帳を同じ状態に保つため処理量が減るわけではない。

解決策1:ブロックサイズ拡張

より多くのトランザクションを処理できるようにすれば、未承認のトランザクションがたまらなくなる。
この解決策をコミュニティで議論がなされたが、結局2017年8月BitcoinとBitcoinCashにハードフォークされた。

解決策2:トランザクションのデータサイズの削減

Segwit(SegregatedWitness)という技術は、トランザクションリストの電子署名の部分だけWitnessという別領域に移すもので、これによってデータを60%圧縮することができる。
この仕様変更で、ライトニングネットワークの実装につながってくる。

Segwitとは – 【DMMビットコイン】暗号資産(仮想通貨)ならDMM Bitcoin

Segwit(セグウィット)とは「Segregated Witness(Witness=隔離された署名領域)」の略語です。Segwitはトランザクション情報をコンパクトに圧縮することで、ビットコインの抱えていたスケーラビリティ問題の解決が期待される技術です。2017年8月にビットコインに実装されました。 …

https://kasobu.com/segwit/

ライトニングネットワーク

ライトニングネットワークとは、 ブロックチェーン(ほとんどの場合 ビットコイン)上で動作する「セカンドレイヤー」ペイメントプロトコルである。ライトニングネットワークは理論的には参加ノードの間での高速なトランザクション処理を可能にし、また ビットコインのスケーラビリティ問題の解決策と謳われている。ライトニングネットワークは資金の管理券を委譲することのない双方向 ペイメントチャネルを通して 暗号通貨の マイクロペイメントを行う ピア・ツー・ピアのシステムを特徴としている。ライトニングネットワークの実装は アトミックスワップ を簡素化する。 ライトニングネットワークは通常、関連したブロックチェーン上で開かれたペイメントチャネルにファンディング(入金)トランザクションを加えることから始まる。その後、チャネルにファンディングした額の暫定配分額を更新するライトニングトランザクションをブロックチェーンに送信することなく任意の回数行う。チャネルを閉じる際に、その時点の配分額を最終版として実際の配分を行うトランザクションをブロックチェーンに送信する。 ライトニングネットワークを想定通りに動作させるためには、ビットコインの Segregated Witness(SegWit)のような トランザクション展性 の修正が必要となる。 Joseph Poon と Thaddeus Dryja はライトニングネットワークのホワイトペーパーを2015年に発表した。より詳細な仕様が複数の団体によって開発された。非営利なものとしては、MIT Digital Currency Initiativeによる実装、 Blockstream の Bitcoin Core/bitcoind による実装、 Lightning Labs による実装、 ACINQ による実装がある。 2017年11月に、互換性のある一連の試験用トランザクションがBitcoin Core 上で作成された。 2018年1月に、Blockstream はウェブの小売業者を対象とした決済処理システムを公開した。Blockstream はこの際、ライトニングネットワークのノードは2018年1月18日現在mainnet で60あり、「試験運用中」であることを考慮すべきと付した。 2018年5月15日、Lightning Labs の CEO Elizabeth Stark は、 lnd(ライトニングネットワークの実装の一つ) の初版であるバージョン 0.4-beta(開発者向け) をリリースした。これはビットコインとライトコインのmainnet において試験する目的のためのものであった。 2018年3月、モバイル決済の起業家であるJack Dorsey がライトニングネットワークの構想を支持した。 2018年4月から2018年8月まで、ビットコインのライトニングネットワークは月に約15%の成長を遂げた。 ノード数は1,500から3,000に増加し、チャネル数は4,000から11,000に増加した。 2018年4月、eclair wallet は Google Play から公開後数日で削除された。アプリの開発者が署名用の秘密鍵を紛失し、致命的なバグを更新できなくなったからである。 2018年5月、世界初のビットコイン/金の交換所であるVaultoro.com はmainnet でのライトニングネットワークでの入金を承認した。 2018年7月1日、決済処理会社 CoinGate はライトニングネットワーク支払いを承認するためのサービスをマーチャント向けにリリースした。 2018年3月20日、ライトニングネットワークノードは DDoS 攻撃に晒された。攻撃はおよそ200のオフラインのノードに対して送られ、これによりノード数がおよそ1,050から870まで減少した。できるだけ多くのノードに対して新たな接続を妨害するために エクスプロイト が用いられた。1ヶ月前の2月、Bitcoin Core の開発者である Peter Todd はライトニングのプロトコルは「現在の実装では、DoS攻撃に対して脆弱性があることの証明」をしたと述べていた。これはブロックチェーンはもちろん、P2Pプロジェクトにも危険をもたらすとある暗号学者は述べた。 ペイメントチャネルは、その参加者が ブロックチェーンにトランザクションを公開することなく相互に資金を送り合うことを可能にする。これは協調性に欠ける参加者を罰することにより実現される。チャネルを開いたとき、参加者はファンディング(入金)をしなくてはならない(ブロックチェーン 上の ファンディングトランザクション)。CheckSequenceVerify や …

解決策3:オフチェーンによる効率化

ブロックチェーンのデータ処理を、オンチェーン(内部)とオフチェーン(外部)に分けて考え、基本的な取引処理をオフチェーンで行、最初と最後のトランザクションをオンチェーンで処理することで、60%のデータを公理化できる。
オフチェーンは「Layer2」「セカンドレイヤー」と呼ばれていて、仮想通貨取引所内の取引もオフチェーンで行われる取引。

オフチェーンなので、マイニングもなくスピーディな取引でオンチェーンの負荷を減らすことができる。
ライトニング・ネットワークもオフチェーン技術の一つ。マイクロペイメントチャンネルという技術を発展させたもので、HTLC(HashedTimeLockContracts)という仕組みによって不正を防ぐことができる。
マイクロペイメントチャンネルとは、取引をしたい二者間でチャネルという通路を開き、マルチシグアドレスでロックしてデポジットしてから、デポジットに達するまで多数の送金を行って、最初と最後のトランザクションをオンチェーンに書き込む。
ライトニングネットワークでは、これを拡張して、チャネルを開設しているノードを中間者として経由することで、取引相手ごとにチャネルを開設する手間を削減した。

Hash Time Locked Contracts

A Hash Time Locked Contract or HTLC is a class of payments that use hashlocks and timelocks to require that the receiver of a payment either acknowledge receiving the payment prior to a deadline by generating cryptographic proof of payment or forfeit the ability to claim the payment, returning it to the payer.

https://gaiax-blockchain.com/lightning-network

解決策4:サイドチェーンによる機能拡張

サイドチェーンとは、複数のブロックチェーンを相互運用することによって新たな機能を追加する仕組み。
Bitcoinは利用者も多くなり、仕様変更を行うのが難しくなってきた。(バプリックチェーン特有のガバナンス問題)
2014年にBlockstream社が実装に関するホワイトペーパーを発表。
メインチェーンと相互運用性のあるチェーンが開発されることによって、価値の担保はメインチェーンで行いつつ、サイドチェーンで柔軟に新たな技術を取り入れたり、スマートコントラクトなどの機能追加をしたりできる。
サイドチェーン上で生成された独自の通貨はメインチェーンと互換性を持たせることができる。
TwoWayPegと呼び、サイドチェーンの重要な機能。
サイドチェーンがプライベート(コンソーシアム)チェーンでもペグすることが可能。

解決策5:チェーンの再構築による合理化

EthereumではPlasmaという仕組みで、プラズマブロックチェーンと呼ばれるチャイルドチェーンを複数作り、分散処理をする。そこでデータ処理をし、最終的な状態をルートチェーンに送信することでネットワーク全体の処理速度を向上させている。 

分散ストレージの基礎

分散ストレージとは

中央集権型のストレージサービスではなく、世界中のノードが提供する秋ストレージに暗号化されたファイルを保管する方法。

分散ストレージの代表例

「Stoj」というサービスがある。
仮想通貨「STORJ」を払うことで他人のコンピュータの秋ストレージにファイルを保存することができる。
不安になるかもしれないが、Shardという32MBの断片に分割されさらに暗号化されて保存されている。

Decentralized Cloud Storage – Storj

Storj is the storage layer for the Internet. Decentralized cloud storage is a new paradigm that removes intermediaries, enabling you to control your personal data. Storj is open source, distributed, encrypted, and blazing fast object storage. Check out how Storj can help you keep your data safe and access it anywhere, anytime.

ブロックチェーンと分散ストレージ

ブロックチェーンに直接プレゼン資料や画像、動画をアップすることはできないが、「支払いをした利用者にだけ閲覧可能になる電子書籍」など分散ストレージ上のコンテンツアドレスをブロックチェーン上に記録することな可能。