レッスン01
Bitcoin、BTC、ウォレットは別のもの
Bitcoinは、共通のルールに従って送金を記録するコンピューターのネットワークです。口座を一括管理する中央の運営者はなく、参加者同士が取引を伝え合います。公開された取引履歴をブロックにまとめ、順につないだものがブロックチェーンです。BTCはそのネットワークで使う通貨の単位で、1 BTCは1億サトシに分けられます。支払いに1 BTCを丸ごと使う必要はありません。
ウォレットは、受け取りや支払いの承認に必要な情報を管理するソフトウェアや機器です。ビットコインそのものは、ネットワークの取引履歴に未使用の出力として記録されており、スマートフォンの中にコインのファイルが入っているわけではありません。秘密鍵は支払いを承認するための秘密情報です。アドレスは送金者に伝える受取先の情報であり、秘密鍵とは違います。
自分で鍵を管理する方法を自己管理、またはセルフカストディと呼びます。鍵の保護と復元も自分の責任になります。カストディ型の口座では、事業者が利用者に代わって鍵を管理します。それぞれリスクが異なります。また、発行量がルールで制限されていても、価格の安定、購買力、投資収益が保証されるわけではありません。
レッスン02
支払いはどうウォレットからブロックに届くのか
ビットコインの支払いは、一つの口座残高を書き換える仕組みではありません。取引は、以前に作られた未使用の取引出力(UTXO)を使い、新しい出力を作ります。ウォレットは、自分が使える出力を合計して残高を表示します。ある出力を支払いに使う場合、その出力は全体を使い切り、余った分は通常、送金者が管理する新しい出力にお釣りとして戻します。
例えば、10,000サトシの入力から6,000サトシを相手に払い、3,800サトシをお釣りの出力にすると、残りの200サトシが取引手数料です。この数字は金額の関係を説明する例で、今日の手数料を示すものではありません。手数料は通常、送金額の一定割合ではなく、取引のデータサイズやブロックに入りたい取引の需要に左右されます。
ウォレットは取引を作り、その入力を使うために必要な承認情報を付けてネットワークに送ります。ノードは内容を確認し、自分のメモリプール、つまり承認待ち取引の集まりに保存することがあります。マイナーはその中から取引をブロックに含められます。ノードが自分のルールに従ってそのブロックを受け入れ、採用するチェーンに加えると、その取引は1承認になります。その後にブロックが追加されるたび、承認数が増えます。
レッスン03
SHA-256とデジタル署名は役割が違う
SHA-256は暗号学的ハッシュ関数です。文章などを表すバイト列を入力すると、256ビットの結果を出します。この結果をハッシュ値、またはダイジェストと呼び、通常は64文字の16進数で表示します。同じ入力なら必ず同じ結果になります。一方、1ビットだけ変えても通常は結果が大きく変わり、簡単な近道で事前に予測することはできません。
ハッシュ化は暗号化ではありません。SHA-256の結果から元の文章に戻すための復号鍵はありません。ハッシュはデータ同士を結び付けたり、変更を検出したりするのに役立ちますが、ビットコインの公開取引履歴を隠したり、利用者を匿名にしたりするものではありません。下の実験では、サンプルの文章を変えて結果を比べられます。
デジタル署名は別の問題を扱います。取引のルールに従い、秘密鍵を公開せずに支払いを承認する仕組みです。他の参加者は、対応する公開鍵と署名対象のデータを使って署名を確認できます。ビットコインはECDSA署名を使い、TaprootではBIP340で定められたSchnorr署名も使います。どちらもsecp256k1楕円曲線を利用します。ハッシュ関数と署名は組み合わせて使いますが、同じものではありません。
レッスン04
マイニング:目標値以下のハッシュを探す
マイナーは、複数の取引を含むブロックの候補を用意します。最初の取引はcoinbaseと呼ばれ、ルールで認められた新規発行分(ブロック補助金)と取引手数料を割り当てられます。次に80バイトのブロックヘッダーを作ります。そこには前のブロックへの参照、取引の識別子一覧に結び付くマークルルート、時刻、目標値を表す情報、nonceなどが入ります。
マイニングでは、ヘッダーにSHA-256を続けて2回適用する処理を繰り返します。有効なプルーフ・オブ・ワーク(PoW)になるには、結果を整数と見たとき、コンセンサスルールの定める目標値以下でなければなりません。目標値が小さいほど、1回の試行で成功する可能性は低くなります。これは試行錯誤であり、特別な答えが隠れた実用的な方程式を解く作業ではありません。前の試行が失敗しても、次の成功率が上がるわけではありません。
nonceはヘッダー内の32ビットの値で、マイナーはこれを変えて新しいハッシュを試せます。ほかにも、ルールが認めるデータを変えられます。例えばcoinbase内のextra nonceを変えると、取引識別子、マークルルート、ヘッダーが変わります。条件に合うハッシュが見つかっても、ブロックはほかのすべての検証ルールを満たす必要があります。マイニングプールは参加者の作業と収益分配を調整しますが、報酬や利益を保証するものではありません。
レッスン05
フルノードはどうブロックと承認を確認するのか
フルノードは、ビットコインのコンセンサスルールを自分で確認するソフトウェアです。ブロックを受け取ると、PoWのハッシュだけでなく、取引が支払い条件を満たすか、入力が使用可能な出力を参照しているか、coinbaseが新規発行分と手数料の上限を超えていないかも確認します。計算に大量の電力を使っていても、無効なブロックは拒否します。
同じ位置を争う有効なブロックが、ほぼ同時に見つかることがあります。ノードは自分のルールを満たす履歴のうち、累積したPoWが最も多いチェーンを採用します。「最も長いチェーン」と呼ばれることもありますが、重要なのは計算作業の累計です。単純なブロック数や、その履歴を支持するコンピューターの台数ではありません。
取引がそのチェーンのブロックに入ると1承認になり、後続ブロックが増えるたびに承認数が増えます。作業量が積み重なるほど、その部分の履歴を置き換えることは難しくなりますが、チェーンの再編成が起きる可能性は残ります。支払いで何承認を待つかは、金額や受取人のリスク許容度によります。プロトコルはブロック間隔の平均が約10分になることを目標にしており、次のブロックが10分以内に来るとは約束していません。
レッスン06
誰が開発し、誰がルールを決めるのか
ビットコインは、最高経営責任者が全員にシステム変更を命じられる会社ではありません。参加者ごとに役割が異なります。開発者は提案、プログラムの作成、テスト、レビューを行います。マイナーは計算するブロック候補を選びます。ノードの運営者は使うソフトウェアと適用するルールを選びます。ユーザーはウォレットやサービスを選び、どの支払いを受け入れるかを決めます。
Bitcoin Improvement Proposal(BIP、ビットコイン改善提案)は、提案や標準を文書にしたものです。公開されたからといって有効になるわけではありません。提案、ソフトウェアのリリース、実際に適用されているルールは別の段階です。変更には技術的な検討、実装、参加者間の調整が必要になる場合があります。反対して採用しない人もいます。
コンセンサスルールと、ノードのローカルポリシーも区別しましょう。前者はそのノードがブロックを有効と認める条件です。後者は、どの未承認取引を転送したりメモリプールに残したりするかなどの方針です。ローカルポリシーの変更が、そのままブロックに入れられる内容の変更になるわけではありません。有名な解説者、貢献者、企業は議論に影響を与えられても、すべてのユーザーを代表してはいません。
レッスン07
実際の用途:支払い、寄付、地域の取り組み
ビットコインは、使いたい人同士で価値を送る方法になります。ネットワークのルールを満たす取引に、中央の運営者が一件ずつ許可を出す必要はありません。支払いをブロックチェーンに記録することも、Lightningなど独自の運用条件を持つ別の仕組みを使うこともできます。ネットワークに接続できることと、現地通貨への交換などが便利に使えることは別です。
具体的な例として、BTCPay Serverは店舗がビットコインを受け取るためのオープンソースのツールを提供し、設定すればLightningにも対応します。OpenSatsは開発などのオープンソース活動を支えるため、ビットコインの寄付を受け付けています。Bitcoin Beachは、エルサルバドルの地域で行う支払いと教育の取り組みを紹介しています。こうした例は可能な用途を示すもので、普遍的な普及や、どの読者にも向いたサービスであることを示すものではありません。
使う前には、誰が鍵を管理するか、手数料はいくらか、受取人はどのように資金を受け取るか、事業者が使えなくなったらどうするかを確認しましょう。価格変動、現地通貨への交換、プライバシー、適用されるルールも重要です。国境を越えてビットコインを送れても、送り先で現金を引き出せるとは限りません。まず仕組みを理解してから、使うかどうかを決めましょう。
レッスン08
なぜ支払いチャネルや別のネットワークを使うのか
ビットコインの基本となる層は、容量に限りのあるブロックに取引を記録します。その容量を使いたい取引が増えると、手数料や待ち時間が増えることがあります。日常の支払いを増やすには、単に一つのブロックに取引を詰め込む以外の工夫も必要です。主なチェーンの外で一部の処理を行い、決済や権利の実行など、特定の段階でチェーンを使う設計があります。
Lightningは支払いチャネルの残高を更新し、毎回の更新をビットコインのブロックに記録しない仕組みです。LiquidやRootstockなどのサイドチェーンは、独自のブロックと、ビットコインに対応する資産を扱う仕組みを持ちます。Fedimintは複数の共同管理者に資産の保管を分担させます。Ark型のシステムやBitVMを使う設計では、開発段階の異なる別の方法を研究しています。同じレイヤー2という呼び名でも、安全性の前提が同じとは限りません。
比べるときは、誰が鍵を管理するか、ユーザーが実際に持つ資産は何か、どこでそのシステム上の決済が確定するか、どのような流動性が必要か、事業者が機能しないときに資金を回収できるか、という5点を確認しましょう。画面がすぐに成功と表示しても、ビットコインの主なチェーンで承認されたとは限りません。次のセクションでは代表的な方式と制約を説明します。全関連プロジェクトの一覧ではありません。