出典: 劉嬌連
木曜日、BTCは86〜87kの範囲でわずかに横ばいに変動しました。 2025年3月ももうすぐ終わりです。 3月が終わり、第一四半期も終わろうとしています。 Today’s Teaching Chainが述べたように、この第1四半期は2018年以来最悪の四半期になるかもしれない。
時間は水のようなもので、年月は歌のようなものだ。 BTC は時間によって演奏される音楽です。しかし、初期の頃、具体的には2013年以前には、この運動には不協和音のようなものがいくつかありました。これらの不一致な紙幣は、繰り返されるコインベースの取引(コイン鋳造取引)です。
いわゆるコインベース トランザクション (コイン ミント トランザクション) は、コインベース トランザクションとも呼ばれ、新しく生成された各 BTC ブロックの最初のトランザクションです。ブロックをマイニングするマイナーは通常、このトランザクションを使用してブロック報酬を自分のアドレスに送信します。
ご存知のとおり、通常の BTC 取引は繰り返すことができません。通常のトランザクションでは、既存のトランザクションの未使用の出力、いわゆる「コイン」と比較される UTXO を使用する必要があるためです。これらのコインは異なるため、これらのコインを使用するトランザクションも異なる必要があります。コインが 2 つのトランザクションで使用される場合、いわゆる「二重支出」となり、BTC では厳しく禁止されています。
しかし、例外がありました。それがコインベース取引です。 Coinbase のトランザクションはミントトランザクションであるため、UTXO コインを使用する代わりに、マイナーへの報酬として新しい BTC を直接無から作成できます。
マイナーが複数のブロックを連続してマイニングし、コインベーストランザクションデータを構築するときに受信アドレスやその他の追加情報などまったく同じ情報を使用すると、まったく同じトランザクションを 2 つ構築することが可能になります。これは、ブロックチェーンでは、異なるブロックにあるが、同じトランザクション データとハッシュ値を持つ 2 つのコインベースのトランザクションとして反映されます。
これは繰り返しのCoinbaseトランザクションです。
このビットコインのバグは本物です。ここに実際の例を 2 つ示します。任意の BTC ブロックチェーン ブラウザを開いて確認できます。
ブロック高 91812 とブロック高 91842 には、まったく同じハッシュ値を持つ 2 つのコインベース トランザクションがあります。
ブロック高 91722 とブロック高 91880 には、まったく同じハッシュ値を持つ 2 つのコインベース トランザクションがあります。
幸いなことに、このような重複したコインベーストランザクションを使用して、その後に同じ通常のトランザクションを構築し、UTXO 空間全体を汚染した人は誰もいません。 2012 年 3 月 15 日にソフトフォークによって BIP-30 が実装された後、このタイプの重複トランザクションは使用できなくなりました。
さらに、2013年3月にはBIP-34ソフトフォークが有効化され、コインベーストランザクションの構築にブロック高の情報が「バージョン番号」として追加され、コインベーストランザクションのハッシュ値が重複することが不可能になりました。
具体的には、技術的な観点から、ブロックの高さがコインベーストランザクションの scriptSig の先頭に追加されます。最初のバイトはブロックの高さの値のバイト数です。現在は 0x03 で、後続の 3 バイトはコインベース トランザクションのブロックの高さを示します。 Coinbase トランザクションの scriptSig は、Coinbase スクリプトとも呼ばれます。マイナーが自由にカスタマイズできるフィールドです。初期の頃は、任意のデータを書き込むことができました。たとえば、サトシ・ナカモトはこのフィールドに The Times のタイトルを書きました。
より直感的な比較。まず、重複した Coinbase トランザクション問題が発生しているブロック #91812 の Coinbase トランザクションの scriptSig を見てみましょう: 0456720e1b00 (OP_PUSHBYTES_4 56720e1b OP_0)。
この記事を書いている時点で、Jiaolian によって生成されたブロック #889678 の Coinbase トランザクション スクリプト シグは、034e930d044260e5672f466f756e6472792055534120506f6f6c202364726f70676f6c642f23648154608b150000000000 (OP_PUSHBYTES_3 4e930d OP_PUSHBYTES_4 4260e567 OP_PUSHBYTES_47) です。
0x03 から始まり、次の 3 バイトは 43930d です。つまり、ブロックの高さは 16 進数で 0x0d934e、10 進数で 889678 になります。
残念なことに、2013 年の修正前に生成された一部の Coinbase トランザクションも 0x03 で始まっていました。これにより、将来のマイナーがこれを悪用して、重複したコインベーストランザクションを意図的に構築することが可能になります。
具体的な例を挙げてみましょう。ブロック #164384 の coinbase スクリプトは 0x03: 03d6441e014b0136 (OP_PUSHBYTES_3 d6441e OP_PUSHBYTES_1 4b OP_PUSHBYTES_1 36) で始まります。
鉱夫がこのスクリプトを書いたときの意図はわかりません。しかし、私たちが知っているのは、彼がこの脆弱性を悪用し、将来的に完全に同一のコインベース取引を構築しようとする機会があるということです。
正確な時間は何時ですか?簡単な計算をする必要があります。
BIP-34 の定義によれば、0x03 に続く 3 バイトはブロックの高さを表します。上記の例では、これは d6441e であり、16 進数では 0x1e44d6、10 進数では 1983702 になります。
ブロック #1983702 はいつ生成されますか? BTC は約 10 分ごとにブロックを生成するため、現在のブロック #889678 から将来のブロック #1983702 までには (1983072 - 889678)/6/24/365 = 20.8 年、つまり約 2046 年かかることが簡単に推測できます。
残念なことに、そのようなブロックはまだたくさんあります。完全な表は次のとおりです。
ブロックの高さ、コインベースの高さ、等しい
164384,1983702,真
169895,3708179,真
170307,3709183,真
171896,3712990,真
172069,3713413,真
172357,3714082,真
172428,3714265,真
174151,5208854,真
176684,490897,本当
183669,3761471,真
196988,4275806,真
201577,5327833,真
206039,7299941,真
206354,7299941,真
209920,209921,真

上の棒グラフからわかるように、2078 年頃が最もリスクが高い時期です。
上の棒グラフからわかるように、2078 年頃が最もリスクが高い時期です。
幸いなことに、現在の巨大な、そして将来さらに大きくなるネットワークの計算能力を考えると、当時のマイナーがこのアイデアを持っていたとしても、その高さでブロックのパッケージング権(生成権、採掘権)を獲得することは難しいでしょう。
さらに、採掘権を獲得するためにあれほど苦労し、その後二度と使うことのできない取引を構築し、過去のデータを模倣して無駄に損失を被るほど、採掘者たちは退屈しているはずがない。
したがって、結論としては、コインベースの重複トランザクションバグは100%完璧に解決されたとは言えないが、大きな波紋を引き起こす可能性は低いということになる。
全てのコメント