Timechain、つまり Bitcoin Blockchain は、Genesis Block からネットワークの現在の先端まで連なる有効なブロックの列です。後続の各ブロックは、前のブロックのデジタル指紋である hash を参照し、作成に必要な計算作業を示す Proof of Work を加えます。そのため各ノードは、ルールに従い、累積作業量が最も大きい履歴を独立して検証できます。ここでいう「時間」は各トランザクションの正確な時計ではなく、主に証明可能な出来事の順序を意味します。
何千台ものコンピューターが新しい各ページを独立して確認できる、公開された会計履歴を想像してください。一ページが一つのブロックです。そこには複数のトランザクションと前のブロックへの参照が入り、ページの順序が定まるので、勝手に並べ替えることはできません。Timechain は最初のブロックから現在の先端まで続く、その全体です。名前の分かる各人が bitcoin をいくら持つかを記すものではありません。取引履歴を記録し、ノードはそこから未使用のまま残る 取引出力 を導きます。一社のサーバーでもありません。どの Full Node(取引とネットワークの規則を自分で検証するノード) もコピーを取得して検証できます。 [1] [3]
Bitcoin の文脈では、どちらも同じブロック履歴を指します。現存する 2008 年 11 月の公開前コードでは、コメントや変数・関数名に timechain が使われていました。一方 whitepaper は、時刻の記録、ブロックの連鎖、Proof of Work の連鎖と表現しており、timechain という一語は登場しません。その後 Blockchain が世界で一般的な用語になりました。現在は他のネットワークやデータベースを含む広い呼び名でもありますが、Bitcoin Timechain は Bitcoin 固有のチェーンです。したがって見出しの二語は別々のプロトコルを表すのではなく、歴史的な呼称と今日の一般的な呼称を並べて残しています。 [2] [1] [8]
デジタル署名は、必要な鍵の保有者がトランザクションを承認したことを証明できます。しかし署名だけでは、過去の取引の同じ未使用出力、つまり UTXO を使おうとする相反する二つのトランザクションに署名する行為を防げません。あるノードは店舗への支払いを先に受け取り、別のノードは同じ価値を送信者へ戻す取引を先に受け取ることがあります。そこでネットワークには、どちらの支出が承認され、どちらが有効ではなくなったかを決める共通の履歴が必要です。ブロックはトランザクションに検証可能な順序上の位置を与えます。ただし、人間の時計やネットワーク上でどのメッセージが先に作られたかを証明するものではありません。未承認トランザクションをノードごとに異なる順で見た可能性があるからです。 [1]
Block Header はブロックの基本情報を持つヘッダーです。前のヘッダーの hash や、そのブロックの取引識別子を一つの hash にまとめる Merkle Root が入っています。 Hash はデジタル指紋のようなもので、入力が少し変わるだけでも結果が変わります。古いトランザクションを変えれば、Merkle Root、そのブロックの hash、次のブロックに保存された参照が変わります。変更は履歴の一行だけにとどまらず、その後の連鎖全体を壊します。ただし hash だけでは、取引がルールを守っているとは証明できません。ノードはトランザクションも検証し、各ブロックは必要な Proof of Work を満たさなければなりません。 [3] [1]
ノードは、分岐が長い、または大手マイナーが支持しているという理由だけでは受け入れません。まず Proof of Work、前のブロックとの接続、認められた報酬、トランザクション、支出条件、入力が参照する資金がすでに使われていないかなどのルールを確認します。作者の計算能力がどれだけ大きくても、無効な分岐は無効です。有効な候補同士で初めて、累積作業量が最も大きいチェーンを選びます。したがって単に「最長チェーン」と呼ぶより、「作業量が最も大きい有効な分岐」と呼ぶ方が正確です。chainwork は各ブロックの難易度でチェーンを生成するために必要と見込まれる ハッシュ計算 数を推定する値であり、マイナーが実際に試した回数ではありません。 [4] [5] [6]
Proof of Work には時間、電力、計算能力が必要ですが、結果の検証は短時間で済みます。古いブロックを変更する者は、そのブロックの有効な Proof of Work を新たに作り、その後の全ブロックをつなぎ直し、誠実な分岐が増やし続ける作業量にも追いつき続けなければなりません。ブロックが先端から深い位置にあるほど、通常の履歴の先行は大きくなります。これは過去が絶対に変わらないという数学的保証ではありません。経済と確率による防御であり、ブロックが増えるほど、成功する書き換えは通常急速に高くつきます。攻撃者が代替分岐へ無効な支払いや上限を超える bitcoin を自由に入れることもできません。他のノードがそのブロックを拒否するからです。 [1] [4]
マイナーは Block Header に タイムスタンプ を記録します。コンセンサスルールには一定の幅があるため、time の値はブロックや特定のトランザクションが作られた正確な時刻を証明しません。ブロックの タイムスタンプ は、直前のブロックより大きくなくてもよい場合があります。そこで Bitcoin は一部のルールに Median Time Past、つまり直前 11 ブロックの タイムスタンプ の中央値を使います。 時刻を順に並べて中央の値を選ぶと、中央値になります。 個々の タイムスタンプ より安定して進むためです。平均十分のブロック間隔も時刻表ではありません。二つのブロックが続けて到着し、次は長く待つこともあります。ブロック 高さ はチェーン上の正確な位置を示しますが、カレンダー上の正確な時刻は示しません。 [4] [7]
二人のマイナーが、ほぼ同時に同じ 高さ で別々の有効なブロックを見つけることがあります。先に一方の分岐を見るノードもあれば、もう一方を見るノードもあります。その後の Proof of Work により有効な分岐の累積作業量に差がつくと、ノードは作業量の多い方へ移ります。この切り替えを Reorg と呼びます。切り離されたブロックのトランザクションは、新しい分岐で承認される、Mempool に戻る、または新履歴で相反する支出が承認されたため無効になる可能性があります。ブロックへの収録が一回目の承認で、その上にブロックが一つ増えるたびに承認数が増えます。すべての支払いに共通する魔法の数字はありません。必要な確度は金額、リスク、待てる時間によって変わります。 [1] [3]
Bitcoin では、特定のブロック 高さ 以降、または指定時刻以降でなければ承認できないトランザクションを作れます。Timelock は、その時刻にトランザクションを自動実行する命令ではありません。有効なブロックが最も早く収録できる地点を決めるだけです。時間を基準にする nLockTime では、BIP 113 は作成中のブロックの動かしやすい タイムスタンプ ではなく、前のブロックの Median Time Past を使います。条件は複数ブロックの履歴に基づくことになります。条件を満たしても、トランザクションは配信され、ノードに受け入れられ、マイナーに選ばれる必要があり、特定ブロックへの収録は保証されません。 [7] [4]
RPC はノードに命令を送り、応答を読むためのインターフェースです。 Full Node は、あるブロックやトランザクションが現在の履歴に属するという公開 ブロックエクスプローラー の説明を信頼する必要がありません。特定の hash について、getblock RPC は height、承認数、Merkle Root、time、mediantime、前の hash、難易度、chainwork を示せます。各項目の役割は異なります。height は位置、previousblockhash は祖先関係、confirmations は現在の先端からの深さ、time は ヘッダー の値、mediantime は中央値、chainwork は累積した予想作業量です。一つの数字だけでは足りません。Timechain の要点は、ノードがそれらの関係とすべてのコンセンサスルールを一体として確認することにあります。 [6] [4]
理解を深めるには、この項目とあわせて次もお読みください Genesis Block, Proof of Work, トランザクション, Full Node, Difficulty Adjustment. 次の項目からも参照されています Bitcoin Whitepaper, Genesis Block, Proof of Work, Full Node.