Nayutaの広報、Hitomiです!
秘密鍵(失くすと残高や履歴まですべて失う重要なもの)を、自分で管理するタイプのWalletを使おうとすると、「フルノード型」や「SPVノード型」という言葉がよく出てきます。自分で秘密鍵を管理するタイプのWalletは、さらにこの2種類から選ぶことになります。ここでは、この「フルノード」と「SPVノード」をおさえていきます。
フルノード
フルノードでは、ブロックチェーンの情報がすべてダウンロードされます。ブロックチェーンは誰でも閲覧できる公開台帳です。その台帳の中にある1期~今期までの全取引が、すべてダウンロードされるのです。
なぜ、すべての情報をダウンロードするかというと、ブロックチェーンの妥当性を保証するためです。妥当性とかたく書いていますが、簡単にいうと、各ブロックに入っているトランザクションが本当に有効なものかを確かめています。
例えば、悪意のある第三者が偽りのブロックチェーンをつくり出し、ユーザーを騙そうとしている場合を考えます(厳密にいえば、ユーザーが使うフルノード型ウォレットを騙す。以下、ユーザーとよぶ。)。ユーザーは、すべての情報をダウンロードすることで、偽りのない本当に有効なブロックチェーンであるかを確かめているのです。
ちなみに、騙すためには、本物のブロックチェーンよりも長いブロックチェーンが必要です。そのようなブロックチェーンを作ることは、理論的に不可能ではありませんが、膨大な時間的・金銭的コストの面から、事実上不可能と言われています。
ただしこの安全性と引き換えに、膨大な情報を取り込むためのディスク容量が必要です。例えば、Bitcoin Coreはフルノードとして大変有名ですが、そのBitcoin Core 0.16.2(2018年7月29日リリース)では、210GBのデータ量を一度にダウンロードしなくてはいけません。さらに、毎月5-10GBのデータをダウンロードします。そのため、フルノードを使い始めるまでに数時間~数日かかってしまいます。
このように膨大なデータ量を取り込むため、フルノードはデスクトップで使われることがほとんどです。AndoroidやiOSでは、そもそも本体に空き容量がないのでフルノードになることは出来ないのです。
SPVノード
SPVノードは、ブロックチェーンの全情報のなかから、必要と思われる情報のみをダウンロードします。その情報とは、ブロックの一部分(詳しくいえば、ヘッダ部分)とユーザー自身に関係するトランザクションのデータです。
SPVとは Simplified Payment Verification の略です。Simplified(簡潔化された)Payment(支払い)Verification(検証)、つまり、ブロックチェーンという公開台帳から取引の情報を、簡潔に検証してきますよ、ということです。すべての情報をダウンロードする余裕はないけれど、重要な情報だけは最低限ダウンロードしたいという時に便利です。
SPVノードが存在する理由は、フルノードに比べると圧倒的に少ないデータ量で済むからです。例えば、2018年7月31日現在のブロックヘッダの総容量は42.8MBです(ブロックヘッダのデータ80バイト × 現在の総ブロック数534,493ブロック)。このおかげで、デスクトップだけではなく、スマートフォン等の大きなデータを管理できないデバイスでも使用することが出来ます。
ただし、SPVノードはフルノードと接続する必要があります。これは、SPVノード単体はフルノードとはちがい、UTXOの管理ができないため、あるトランザクションがブロックに含まれているかどうかを判断することが出来ないからです。UTXOとは、Unspent(送金されていない)Transaction(取引) Output(出力)の略です。まだ使用されていないの残高にあたります。
ですのでSPVノードは、信頼できるフルノードや、リスク分散のために複数のフルノードに、接続することが必要となります。