用語集 / ノードとソフトウェア
Electrumサーバー
別名はElectrumサーバー、Electrum serverです。
- Electrumサーバーとは?
- Electrumサーバーはブロックチェーンをスクリプトごとに索引化し、軽量ウォレットからのアドレス照会に応答するため、そうしたウォレットはチェーンを自分でダウンロードしなくても残高を即座に取得できます。
誰かが検索を行わなければなりません。フルノードはどのコインが未使用かを把握していますが、アドレスから履歴への対応表は保持していないため、その履歴を1時間ではなく1秒で得たいウォレットは、対応表を構築したサーバーに問い合わせます。標準的な運用は、自分のノードと並べて自分のサーバーを動かすことです。そうしなければ、自分が保有する全アドレスの一覧を他人に渡すことになるからです。
仕組み
ElectrumサーバーはBitcoin Coreとウォレットの間に位置し、両者の間で変換を行います。
ノードから届く各ブロックを読み取り、すべてのアウトプットスクリプトを抽出し、そのスクリプトからそれに関わるトランザクションへの対応を保存します。ウォレットはその後、行ベースの単純なJSONプロトコルで接続し、ポート50001では平文、ポート50002ではTLSを使い、質問を送るか、答えが変わったときに通知を受けるよう購読します。この購読が、Electrumウォレットを即時的に感じさせる仕組みです。支払いが届いた瞬間にサーバーが通知を送るため、ウォレットが繰り返し問い合わせる必要はありません。
ウォレットはその接続でアドレスを送信しません。送信するのはスクリプトハッシュで、これはアウトプットスクリプトのSHA-256ダイジェストのバイト順を反転したものであり、プライバシー対策ではなくプロトコルの慣習です。それでもサーバーは、あなたが監視しているコインを正確に把握します。そのハッシュの履歴を返し、対応するアドレスを自身の索引からすぐに引けるからです。スクリプトハッシュを匿名性とみなすことが、このソフトウェアに関する最も一般的な誤解です。
ウォレットが手元に保つのは検証です。ブロックヘッダーの連鎖をダウンロードし、サーバーが各トランザクションについて提示するマークルプルーフを検証するため、実際のプルーフ・オブ・ワークに裏付けられた偽のヘッダー連鎖も作り出さない限り、サーバーが存在しない支払いをでっち上げることはできません。それでもサーバーは、トランザクションや支出を隠すことで、あなたに知らせずに嘘をつくことができ、これはより小さいものの実際のリスクです。
ほぼすべての導入を3つの実装がカバーします。小さい索引で好まれるRust製のelectrs、照会速度で好まれるC++製のFulcrum、そして元祖であるPython製のElectrumXです。Electrum Personal Serverは別の方法をとり、チェーン全体を索引化するのではなく設定ファイルに列挙したウォレットだけを監視するため、ディスクをほとんど消費しませんが、他人のアドレスについては何も応答しません。
どこで使われているか
Electrumサーバーは、ほとんどのデスクトップ用ビットコインウォレットの目に見えない半分です。
Electrum自体は、2011年11月にThomas Voegtlinによって最初に公開され、そう設定しない限りボランティアが運営する公開サーバーに接続します。Sparrow、Specter、BlueWalletはいずれも同じプロトコルに対応しています。Umbrel、Start9、RaspiBlitz、myNodeを含む人気のノードバンドルはすべて、まさにノートパソコンのウォレットが自分のマシンに照会でき、誰にもあなたのアドレスを知られないようにするためにelectrsまたはFulcrumを同梱しています。
それが重要な理由は仮定の話ではありません。2018年12月後半から、攻撃者は公開されたElectrumネットワーク上で悪意のあるサーバーを運営し、3.3.3より前のバージョンの弱点を悪用しました。そこではサーバーが任意のリッチテキストをエラーメッセージとして返すことができました。支払いを送ろうとしたユーザーには、更新をインストールするよう求める公式のプロンプトに見えるものが表示され、そのダウンロードはマルウェアでした。報告された損失は数百ビットコインに達しました。クライアントはサーバーのメッセージから書式を取り除くよう変更されましたが、教訓は残ります。公開サーバーは、あなたのウォレットが絶えず通信する信頼できない相手です。
Electrumサーバーvs Neutrino
Electrumサーバーは検索を代行し、あなたが何を探していたかを知ります。Neutrinoは素材をあなたに送るため、ほとんど何も知りません。Electrumのモデルは安価で、照会あたり数キロバイト、応答は即時であり、ハードウェア機器と組み合わせるデスクトップウォレットで主流となっている理由です。Neutrinoのモデルはすべてのブロックについてコンパクトフィルターをダウンロードし、ローカルで検査するため、どのスクリプトが一致したかを明かさない代わりに、はるかに多くの帯域幅を消費します。サーバーが自分のものであるときはサーバーのモデルを、そうできないときはフィルターモデルを選んでください。