ブロックチェーン技術の秘密を解き明かす(V):ビットコイン取引スクリプトの深い理解

ブロックチェーン技術の秘密を解き明かす(V):ビットコイン取引スクリプトの深い理解

この記事の著者は、Huobi Blockchain Research Center の技術専門家である Liao Xuefeng です。彼はソフトウェア開発で 10 年の経験があり、Java/Python/Ruby/Visual Basic/Objective C/Lisp などのプログラミング言語に精通しています。彼はオープンソース フレームワークについて深く研究しており、「Spring 2.0 Core Technology and Best Practices」という本の著者でもあります。彼はまた、GitHub でホストされている複数のアマチュア オープン ソース プロジェクトも運営しています。

この記事では、ビットコインとビットコインブロックチェーンの関連知識を詳しく紹介します。

ビットコイン ブロックチェーンでは、各ブロックは前のブロックを指しており、SHA256 によって計算されるこれらのブロック ハッシュ チェーンが、ビットコイン元帳の改ざん防止の基礎となります。

ブロックでは、ビットコイン システムはトランザクションを使用してビットコインのトランザクションを表します。ブロックには少なくとも 1 つのトランザクションが含まれます。これらのトランザクションのハッシュは、マークル ツリーを介したすべてのトランザクションのマークル ハッシュを計算するために使用され、ブロック ハッシュに含まれるため、トランザクションは変更不可能になります。

各トランザクションを詳しく見ると、マイナーのマイニング収益である最初のトランザクションを除いて、各トランザクションには 1 つ以上の入力 (TxIn) と 1 つ以上の出力 (TxOut) があることがわかります。

最初のマイナーの収入取引は通常、Coinbase と呼ばれます。入力がないので、TxInのハッシュは常に00000000…0000とマークされます。

他のトランザクションの場合、TxIn は、ブロックチェーン上のこのブロックの前のトランザクション ハッシュとインデックスに一意に遡ることができます。

トランザクション ハッシュとインデックス (0 から始まる) を通じて、未使用のトランザクション出力 UTXO (Unspent Transaction Output) を一意に特定できます。このようにして、各 Tx 入力は前の Tx 出力に関連付けられます。

前回の取引で、ボブがアリスに 0.15 BTC を支払ったと仮定します。
ビットコインにはアカウントの概念がないため、このトランザクションの出力にはアリスの名前や公開鍵は含まれません。

では、アリスがこの 0.15 BTC を使いたい場合、自分がこの UTXO を所有していること、そして他人がアリスになりすましてこの UTXO を使うことができないことをどのように証明すればよいのでしょうか?
答えは、ビットコイン取引によって作成される出力は、実際には単純な公開鍵アドレスではなく、スクリプトであるということです。ボブがアリスに 0.15 BTC を支払うトランザクションでは、ボブによって作成された出力スクリプトは次のようになります。

OP_DUP OP_HASH160 abcd1234…9876 OP_EQUALVERIFY OP_CHECKSIG

このうち、abcd1234…9876 はアリスの公開鍵ハッシュです。スクリプト全体の意味は、このスクリプトを実行するための署名と公開鍵を提供できる人は誰でも、このトランザクションの 1.5 BTC を使用できるということです。

署名の作成にはアリスの秘密鍵のみを使用できるため、アリス以外の秘密鍵で作成された署名はこのスクリプトの検証に合格できず、他の人がアリスになりすましてこの出力を使用することはできません。

アリスが署名と自分の公開鍵を提供すると、この出力を使用する別のトランザクションが実際に作成されます。

誰もが、アリスが作成した新しいトランザクションが有効であることを確認できます。有効な場合、トランザクションはマイナーによって新しいブロックにパッケージ化され、ブロックチェーンの変更不可能な部分になります。

トランザクションが有効かどうかを確認するために、有名なピザトランザクションを例に挙げてみましょう。

トランザクション cca75078…4d79 では、唯一の TxIn 入力によって提供される sigScript は次のとおりです。

8b4830450221009908144ca6539e09512b9295c8 a27050d478fbb96f8addbc3d075544dc41328702

201aa528be2b907d316d2da068dd9eb1e23243d9 7e444d59290d2fddf25269ee0e0141042e930f39

ba62c6534ee98ed20ca98959d34aa9e057cda01c fd422c6bab3667b76426529382c23f42b9b08d78

32d4fee1d6b437a8526e59667ce9c4e9dcebcabb

sigScript は実際には 2 つの部分で構成されています。

署名: 30450221…ee0e01 (71 バイト + 1 バイトの署名タイプ)。実際の署名は、最後のバイト 01 のない 30450221…ee0e です。署名タイプは SIGHASH_ALL (0×01) です。
公開鍵: 042e930f…cabb (65 バイト)

トランザクションが有効であることを確認するには、まず、TxIn: a1075db5…d48d およびインデックス 0 で宣言された以前の出力ハッシュに基づいて、前のトランザクションの出力を見つける必要があります。

https://webbtc.com/tx/a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d

このトランザクションのスクリプト出力は次のとおりです。

1976a91446af3fb481837fadbb421727f9959c2d32a3682988ac

Bitcoin スクリプトは一連の命令とデータで構成され、各命令は 1 バイトを占め、データはデータ ヘッダーの長さによって決まります。上記のバイナリ スクリプトから変換された Bitcoin 命令は次のとおりです。

OP_DUP OP_HASH160 46af3fb481837fadbb421727f9959c2d32a36829 OP_EQUALVERIFY OP_CHECKSIG

これで、署名、公開鍵、スクリプトができました。

署名: 30450221…ee0e01
公開鍵: 042e930f…cabb OP_DUP OP_HASH160 46af3fb4…6829 OP_EQUALVERIFY OP_CHECKSIG

このスクリプトを実行すると、トランザクションが有効であることを確認できます。

Bitcoin スクリプトは、スタック上で実行される仮想マシン命令として設計されています。命令の数は限られており、ループや条件付きジャンプが意図的に排除されて設計されています。したがって、Bitcoin スクリプトはチューリング完全な言語ではありません。

Bitcoin スクリプトの実行は非常に簡単です。まず空のスタックを準備し、署名と公開鍵をスタックにプッシュする必要があります。

次に、TxOut スクリプトを実行します。

OP_DUP OP_HASH160 46af3fb481837fadbb421727f9959c2d32a36829 OP_EQUALVERIFY OP_CHECKSIG

まず、OP_DUPが実行されます。この命令はスタックの一番上の要素をコピーするので、結果は次のようになります。

次に、OP_HASH160 が実行され、スタックの最上位要素で SHA256/RipeMD160 が計算されます。これは実際に公開鍵ハッシュを計算するため、実行結果は次のようになります。

次の命令は実際にはデータであり、そのデータを直接スタックにプッシュします。

次に、OP_EQUALVERIFY を実行します。この命令は、スタックの一番上の 2 つの要素が等しいかどうかを比較します。等しくない場合、スクリプト全体の実行は失敗します。等しい場合、スクリプトは実行を継続し、実行結果は次のようになります。

最後に、署名を検証する命令 OP_CHECKSIG を実行します。まず、署名タイプSIGHASH_ALL(0×01)に基づいてトランザクション全体を検証します。検証方法は次のとおりです。

現在のトランザクションのすべての TxIn の scriptSig を削除し (赤い部分)、現在の TxIn の scriptSig を UTXO のスクリプトに置き換え (青い部分)、長さフィールドを調整します (緑の部分)。

最後に、リトルエンディアンの 4 バイト署名タイプ 0×01 (灰色の部分) を追加し、SHA256 を 2 回計算すると、次のようになります。

c2d48f45…2669

次に、ECDSA アルゴリズムを使用して署名を検証します。

ブール型ecdsa_verify_signature(byte[] メッセージ、byte[] 署名、byte[] 公開鍵)

署名の検証結果に基づいて、トランザクションが有効かどうかを確認できます。

スクリプトの導入により、ビットコインは実際にプログラミング スクリプトによるコンピュータ プログラムの検証に厳密に基づいたデジタル通貨所有権移転メカニズムを実装していることがわかります。コンピュータ プログラムのスケーラビリティにより、ビットコインの支払いは特定の公開鍵アドレスへの支払いに限定されません。スクリプトを使用すると、マルチ署名検証条件など、さまざまな支払い条件を構築できます。

2 3 OP_CHECKMULTISIGN

このマルチ署名スクリプトは、複数の公開鍵アドレスを提供し、複数の署名検証を必要とするため、M 個の署名のうち少なくとも N 個の署名を付与できます。上記のスクリプトを使用すると、3 つの公開鍵アドレスから任意の 2 つの有効な署名を提供できます。

サードパーティのオンラインウォレットでビットコインをホストする場合、マルチ署名を使用して、出力が自分自身とサードパーティのウォレットの署名後にのみ使用されるようにすることができます。これにより、ハッカーがサードパーティのウォレットを攻撃した後でユーザーのビットコインを使うことができなくなります。

OP_CHECKLOCKTIMEVERIFY を使用すると、トランザクションのロック時間を指定できます。この時間より前には、トランザクション出力は使用できません。この指示は、実際に資金を 7 日間ロックしてから販売者に支払うという Alipay の機能を実装します。

公開鍵ハッシュを指定しないトランザクションもいくつかあります。たとえば、このトランザクションのスクリプトは次のようになります。

OP_HASH256 6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000000 OP_EQUAL

つまり、SHA256 が 6fe28c0a…0000 であるデータを提供できる人は誰でもトランザクションを使用できるということです。
(注: このトランザクションは使用済みです。条件を満たすデータが見つかりました)

ビットコインのスクリプトから、ブロックチェーン ベースのデジタル通貨支払いは、実際にはデジタル通貨の所有権の安全な移転であることがわかります。金融資産や物理的資産をデジタル形式でブロックチェーン上に登録すれば、スクリプトを通じてさまざまな条件下で安全に所有権を移転することができます。これはブロックチェーン上のスマートコントラクトの応用です。

<<:  イエレンFRB議長:ブロックチェーンは「重要な技術」

>>:  もう一つの小さな目標:ワンダグループ初のブロックチェーン注文がデビュー、金融と税務分野に重点を置く

推薦する

視点 | GPUマイニングは今後2年間も恩恵を受け続けるだろう

新たな参入機会が出現した弱気相場は終わり、新たな強気相場サイクルが始まっています。 ‌‌なぜ弱気相場...

ビットメインは、アントマイナーF3イーサリアムマイニングマシンが悪質であるという噂を否定

本日午後(3月31日)、Ant F3マイニングのビデオがWeChatグループと友人サークルで配布され...

米国SECのイーサリアムETFに対する姿勢の変化が純粋に政治的な理由

まとめ情報筋によると、SECの取引・市場部門は月曜日、2週間前の立場から変更して、今週中に19b-4...

投資家:通貨の価格は来月下落する可能性がありますが、なぜまだ購入を主張する必要があるのでしょうか?

ビットコインの価格を予測するには、水晶玉だけでは不十分です。しかし、十分な知性があれば、ある程度の合...

Facebook の暗号通貨への参入は暗号通貨の世界にどのような影響を与えるでしょうか?

Facebookが通貨を発行します!オールインしてもいいですか?正規軍がやって来ます、ビットコイン...

最適な第 2 層ロールアップ ソリューションを見つけるにはどうすればよいでしょうか?

より多くの第 2 層ソリューションと Rollup テクノロジが採用、統合、構築されるにつれて、Et...

2017年のブロックチェーン業界標準化の分析

クレイジー解説:あらゆる新興技術の標準化プロセスには多くの複雑な手順が必要であり、特にブロックチェー...

韓国メディア:Huobiは韓国の取引所Bithumbの買収を望んでいるかもしれない

11月17日、韓国最大の投資メディア「ザ・ベル」は、Huobiが韓国最大の仮想資産取引所Bithum...

Fix Trading Communityがデジタル通貨ワーキンググループを設立

世界的な業界貿易団体であるFix Trading Communityは、デジタル通貨とブロックチェー...

コインゾーントレンド: 今週のビッグデータに基づくビットコインの価格動向 (2017-05-16)

リスク回避、現金こそが王様1. 市場動向<br/>今日は2017年5月16日です。ビット...

CCTV:仮想通貨詐欺に注意、トークン発行は証券の違法発行や金融詐欺の疑い

BlockBeatsによると、6月2日、CCTVニュースチャンネルの「ニュースライブルーム」は「仮想...

NFT 市場はピークに達した可能性があります。ギャングシリーズNFTの発売は遅すぎますか?

ラスベガスのギャングアトラクションの創設者が、ギャングをテーマにした非代替性トークン(現実世界の組織...

IPFSのマイニングマシンが異常な流行期に入り、すべてのマイニングマシンがクリーンアップされました

2018年に入り、さまざまなメインチェーンが次々と登場しています。暗号通貨の投機と比較すると、ビット...

アウトライヤーベンチャーズ:ビットコインの半減期を背景とした4年サイクルはもはや維持されない

ビットコインの半減期から4か月が経過し、半減期後の価格パフォーマンスとしてはこれまでで最悪の状況が見...

マイアミ市長、給与支払いにビットコインを受け入れる最初の人物を発表

マイアミ市長のフランシス・スアレス氏は火曜日、同市の公務員の中で給与の支払いにビットコインを受け入れ...