ブロックチェーン技術の秘密を解き明かす(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議長:ブロックチェーンは「重要な技術」

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

推薦する

HuobiマイニングプールがEOSスーパーノードの選出を発表

HuobiマイニングプールがEOSスーパーノードの選出を発表Huobiマイニングプールは信頼できるH...

ビットコインのボラティリティは過度ではない

ビットコインのボラティリティは通貨の採用による自然な機能であり、このボラティリティは最終的にビットコ...

雄安科技はカナンクリエイティブと協力し、カナンに代わってブロックチェーン機器を1億5000万ドル以下で購入または配布する予定だ。

Hexun.comによると、雄安科技(01647)は、子会社の雄安衛成と杭州カナン創意情報技術有限...

ゴールドマン・サックス速報:ビットコインは最終的に「王冠」を失うことになる!代わりに、イーサリアム

テキスト |徐超ゴールドマン・サックスは、実際の使用、ユーザーベース、技術の反復速度などの複数の要素...

ビットコインキャッシュブロック難易度調整分析

マイナーが次々と現れては去っていく中、ビットコイン キャッシュ (BCH、BCC) の誕生は非常に興...

Filecoin ロードマップ アップデート 2020 年 8 月

2020 年 8 月のロードマップ更新では、前回のロードマップ更新以降の進捗状況について取り上げ、特...

デジタル通貨グループ:ビットコインの国境を越えた取引量は2016年に約10倍に増加

ビットコインは国際通貨として小額取引を処理できないと批判されることが多いが、国境を越えた送金や取引の...

意見:XEN の失敗は失敗に終わり、イーサリアムにとってのメリットは何か

最近、Googleの21番目の従業員を自称するジャック・レビン氏が創設したプロジェクトであるXEN ...

海外メディア:モンタナ州政府がビットコイン採掘企業に資金提供

海外メディアtrustnodes.comによると、ビットコインの価格が史上最高の3,000ドルに上昇...

Binanceはイーサリアムのガス料金を意図的に引き上げたとして非難されている。データ分析で何が起こったかがわかる

Ethereum 2.0 が近づき、Layer2 ソリューションが次々と登場しているにもかかわらず、...

ピアツーピア送金会社Cashaaが正式に業務を開始

クレイジーコメント: Cashaa は新しい現金送金会社です。同社は取引モデルをテストするために3か...

ブロックチェーン 3.0 (VI): 分散型公共サービス

記事概要画像最初のブロックチェーン結婚最初のブロックチェーン結婚は、2015年10月に米国で行われま...

【マイニングマシンレビュー】謎を解き明かす、Jinbei X5マイニングマシン分解レビュー

執筆者:ジャック、レイアウト:チャン・ウェイWeChat 公開アカウント: Xinshixiang ...

ベネズエラのデザートショップは、信頼の問題にもかかわらずビットコインでの支払いを受け入れている

著者: ManjiMashaラテンアメリカのビットコイン情報誌「Bitcoin Daily」によると...