公開日
- 19 分で読めます
第2話 「フルノードを立てよ、さもなくば死ね」
信頼ゼロ社会を生きるWEB3.0原理主義エンジニアの奇妙すぎる日常に翻弄される僕 ~フルノードを立てなきゃDAppも使えません!
注
この物語は、WEB3.0の世界を楽しく学ぶことを目的に、生成AIを活用して執筆されています。 技術的な情報の正確性には細心の注意を払っていますが、その内容がすべて真実であることを保証するものではありません。 あくまで学習の補助ツールとして、肩の力を抜いてお楽しみください。
登場人物紹介
- 私: DTPオペレータからエンジニアに転職したばかりの新米開発者
- D氏: 40代半ば、極度の警戒心を持つWEB3.0原理主義者
第2話 「フルノードを立てよ、さもなくば死ね」
D氏から受け取ったUSBメモリの内容を確認してから一週間が経った。
暗号化されたメッセージを解読すると、そこには複数の連絡手段と、「明日、秋葉原の某カフェで会おう」という短い文章だけが記されていた。
指定された日時に、私は緊張しながらカフェに足を運んだ。店内を見回すと、奥のテーブルにD氏の姿があった。彼は周囲を警戒するように見回しながら、ノートPCを操作していた。
「遅い」
私が席に着くと、D氏はそう一言だけ言った。
「すみません、電車が…」
「言い訳は不要だ。今日は重要な話がある」
D氏はノートPCの画面を私に向けた。そこには、私が最近開発に携わり始めたDAppのウェブサイトが表示されていた。
「君はこのDAppを使っているようだな」
「はい、会社の開発プロジェクトで…」
「どうやってアクセスしている?」
「普通にブラウザからですが…」
D氏の表情が一瞬で険しくなった。彼は椅子から半ば転げ落ちるようにして、胸に手を当て、まるで心臓発作を起こしたかのように演技した。
「『普通に』だと?」彼は声を抑えながらも明らかな怒りを含んだ口調で言った。「君は本当にWEB3.0に関わる仕事をしているのか?」
私は戸惑いながら答えた。
「はい…MetaMaskをインストールして、公式サイトにアクセスして、ウォレットを接続して…」
「無謀すぎる!」D氏は声を低くしながらも強く言い放った。「フルノードなしでDAppを使うのは、目隠しして地雷原を走るようなものだ!いや、それどころか、両手両足を縛られて、目隠しをされ、背中に爆弾を背負わされた状態で、サメが泳ぐ酸の池を綱渡りするようなものだ!」
彼の大げさな比喩に、私は思わず笑いそうになったが、D氏の真剣な表情を見て堪えた。
「考えてみろ。君は何を信頼しているんだ?ブラウザ?ウェブサイトのホスティング?フロントエンドコード?MetaMaskのソースコード?RPCプロバイダ?」
D氏は指を一本ずつ立てながら列挙した。
「RPCプロバイダ?」私は聞き慣れない言葉に首を傾げた。
「なんと!」D氏は目を見開いた。「それも知らないのか?RPCプロバイダを知らずにDAppを使うとは…これは想像以上に深刻だ」
彼は深呼吸をして、教師のように説明を始めた。
「RPCプロバイダとは、Remote Procedure Call Providerの略だ。君のウォレットとブロックチェーンを繋ぐ中間サービスだ。MetaMaskは裏でInfuraのようなRPCプロバイダに接続している。君がブロックチェーンから読み取るデータ、書き込むトランザクション、すべてが彼らのサーバーを経由する」
「つまり、中央集権的なサービスということですか?」
「その通り!」D氏は私の理解に少し満足げな表情を見せた。「彼らが提供する情報が正しいという保証はどこにある?彼らがトランザクションを検閲しないという保証は?」
私は黙って聞いていた。D氏の言っていることは極端に思えたが、論理的には筋が通っていた。
「WEB3.0の革命的な点は、中央集権的な権力に依存せず、自分自身でデータを検証できることだ。しかし、ほとんどのユーザーはその権利を放棄し、再び中央集権的なサービスに依存している。これでは従来のWebと何も変わらない」
D氏はテーブルに置かれたノートPCを再び開き、ターミナル画面を見せた。
「私はこのDAppを使う前に、まずGitHubからソースコードを丁寧にクローンし、依存関係を含めた全てのパッケージを精査した。特に、JavaScriptのコードに悪意のある関数がないか、不審なAPI呼び出しがないか、トラッキングコードが埋め込まれていないかを徹底的にチェックした」
彼はスクロールしながら続けた。
「そして、どのコントラクトアドレスに対してどのようなリクエストを送り、どのようなレスポンスを受け取るのかも確認した。未検証のコントラクトアドレスなど論外だ!」
D氏の熱弁は止まらなかった。
「UIに表示する情報は、RPCエンドポイントからの情報を不当に加工していないか、ウォレット接続時に要求する権限は必要最小限か…これらすべてを確認してからようやくDAppを使う準備が整う」
彼は一息ついて、私の反応を待った。
「それは…かなり徹底していますね」私は言葉を選びながら答えた。「でも、一般のユーザーがそこまでするのは現実的じゃないと思います」
「もちろんだ」D氏は意外にも同意した。「だからこそ、WEB3.0の理念は形骸化している。しかし、少なくとも最低限の自衛策として、自分でフルノードを立てることは必須だ」
「フルノード?」
「イーサリアムのフルノードだ。自分でブロックチェーンの全データを保持し、検証する。これにより、少なくともRPCプロバイダへの依存は排除できる」
D氏はバックパックから小さなポータブルSSDを取り出した。
「これには、イーサリアムのGethクライアントと、フルノード構築のための詳細な手順書が入っている。まずは自宅のPCでテストノードを立ててみろ」
私はSSDを受け取りながら尋ねた。
「でも、フルノードを立てるには大量のディスク容量が必要ですよね?同期にも時間がかかるのでは?」
「クイズだ」D氏は急に姿勢を正した。「イーサリアムのフルノードの同期に、どれくらいの時間がかかると思う?」
「えっと…数時間?」
D氏は鼻で笑った。
「甘すぎる!数日だ。場合によっては一週間以上かかることもある。だが、それこそがブロックチェーンの美点だ。すべてのトランザクションを自分の目で検証するには、それだけの時間が必要なのだ」
彼は続けた。
「現在のイーサリアムのフルノードなら約500GB程度だ。一般的なSSDで十分対応できる。初回の同期には数日かかるかもしれないが、一度同期すれば、その後は最新ブロックだけを取得するだけだ」
D氏はノートPCを操作し、自宅のサーバーにリモート接続した。画面には複数のターミナルウィンドウが表示され、様々なログが流れていた。
「これが私のフルノード環境だ。イーサリアム、ポリゴン、そして他のいくつかのチェーンのフルノードを運用している」
彼は一つのターミナルウィンドウを指さした。
「同期モードはfullだ。archiveは必要ないが、lightなど論外だ。すべてのブロックヘッダーとブロックボディを自分で検証する必要がある」
私は画面を覗き込んだ。確かに複数のブロックチェーンノードが稼働しているようだった。
「すごいですね…でも、これだけのハードウェアを用意するのは…」
「投資だと思え」D氏は即座に言った。「君がWEB3.0の世界で資産を扱うなら、その安全性に投資するのは当然だ。車を買うときにセキュリティシステムを気にするだろう?家を買うときに鍵や警報システムを考えるだろう?それと同じことだ」
彼はコーヒーカップを置き、真剣な表情で私を見つめた。
「WEB3.0の世界では、自分の安全は自分で確保するしかない。誰かに依存すれば、その瞬間に中央集権的なシステムに逆戻りだ。そして、中央集権的なシステムは必ず腐敗する」
私は黙ってうなずいた。D氏の言葉には一理あった。
そのとき、店員がテーブルに近づいてきた。
「お客様、何かご注文は?」
D氏は店員を見上げ、真剣な表情で尋ねた。
「このコーヒー、ブロックチェーンで原産地証明されているのか?」
店員は明らかに困惑した表情を浮かべた。
「え?すみません…それは…」
「豆の産地、収穫日、輸送経路、焙煎日時…これらがブロックチェーン上で検証可能でなければ、本当の意味での『フェアトレード』とは言えないのだが」
店員は助けを求めるように周囲を見回した。
「申し訳ありません…そのような証明書は…」
「理解した」D氏は諦めたように言った。「世界はまだ準備ができていないようだ。通常のコーヒーで結構」
店員が去った後、D氏は小声で付け加えた。
「将来的には、すべての商品がブロックチェーンで追跡される時代が来る。それまでは、我々は盲目的に『信頼』に依存するしかないのだ」
「今日は帰ったら、このSSDの内容を確認して、テストノードの構築に挑戦してみます」
D氏の表情が少し和らいだ。
「良い決断だ。質問があれば、暗号化されたチャンネルで連絡しろ」
D氏は立ち上がり、レジに向かった。私は少し驚いた。前回は支払いを拒否したのに。
彼はレジで店員に何やら説明している。近づいてみると、D氏は真剣な表情で言っていた。
「このコーヒー代の支払いは、ブロックチェーン上で検証可能な取引として記録されるべきだ。しかし、貴店はまだその技術的準備ができていない。よって、この取引は『オフチェーン・トランザクション』として処理する必要がある」
店員が困惑していると、D氏は私を指差した。
「彼が私の『ペイメントチャネル』として機能する。彼を通じて法定通貨を支払うことで、私自身は中央集権的システムとの直接接触を避けられる。これはライトニングネットワークの原理に似ている」
気づけば、私はまたしてもD氏のコーヒー代を支払うことになっていた。
D氏は満足げに頷き、去り際にこう付け加えた。
「あと、ノード同期中はピザを注文することをお勧めする」
「ピザ?」
「ビットコインの歴史的な瞬間、初めて実物の商品がビットコインで購入されたのはピザだった。1万BTCで2枚のピザを買った男の話を知らないのか?」
私は首を横に振った。
「ブロックチェーンの歴史的な瞬間にはピザが似合うのだ」D氏は珍しく柔らかい表情で言った。「私も自宅でノード同期中はいつもピザを注文している。伝統だと思ってくれ」
D氏が去った後、私はSSDを見つめながら考え込んだ。彼の極端な警戒心は時に滑稽にも思えるが、その根底にある哲学は間違っていないのかもしれない。
その夜、私は自宅のPCにSSDを接続し、D氏の手順書に従ってイーサリアムのテストノードの構築を始めた。画面にはGethクライアントの初期化メッセージが表示され、ブロックの同期が始まった。
「ブロック高: 1,245…まだまだ先は長いな」
私はつぶやきながら、スマホを手に取った。
「ピザの出前を頼むか…ブロックチェーンの歴史的瞬間には、ピザが似合うらしいし」
D氏の言葉を思い出しながら、私はピザを注文した。
「何一つ信頼してはいけない。 自分の目で確かめたコードだけを信じろ」
この言葉の意味を、私はこれから少しずつ理解していくことになるだろう。
豆知識
フルノードとは、ブロックチェーンの全取引履歴を保持し、独自に検証するコンピュータのことです。フルノードを運用することで、第三者のサービスに依存せず、自分自身でトランザクションやブロックの正当性を検証できます。イーサリアムの場合、Geth(Go Ethereum)やOpenEthereumなどのクライアントソフトウェアを使ってフルノードを構築できます。
RPCプロバイダ(Remote Procedure Call Provider)とは、ブロックチェーンとやり取りするためのインターフェースを提供するサービスです。Infura、Alchemy、QuickNodeなどが有名で、多くのDAppやウォレットはこれらのサービスを利用してブロックチェーンにアクセスしています。便利である一方、中央集権的なポイントとなり得るため、WEB3.0の理念からは乖離している面があります。
minifyされたJavaScriptとは、空白や改行、コメントを削除し、変数名を短くするなどして、ファイルサイズを小さくしたJavaScriptコードのことです。ウェブサイトの読み込み速度向上のために広く使われていますが、人間が読みにくくなるため、悪意のあるコードが埋め込まれていても発見しにくくなるというセキュリティ上の懸念があります。
次回予告 「第3話:メタマスクなど信用できるか」
D氏の次なる指導は、ウォレットの選定だった。「メジャーだからという理由だけでMetaMaskを使うとでも?冗談じゃない」と言うD氏。彼の推奨する「正しい」ウォレットの使い方とは…?
第2話 おわり