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

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

推薦する

ビットコインの価格は高値を維持しており、5,000ドルを突破。人民元の下落が最大の要因

ビットコインは今年最もパフォーマンスの良い投資の一つです。本日、ビットコインの価格は再び5,000元...

電力会社がビットコインマイナーの電気料金を値上げ

ビットコインマイナーはビットコインの採掘に大量の電力を使用するため、ワシントン州の電力会社は大規模な...

ストレイト・ヘラルド:漳州市の女性は「ビットコイン」投資の罠に陥り、1ヶ月で9万元以上をだまし取られた

12月16日、漳州市の中心部に住む江さんは、詐欺師が仕掛けた「ビットコイン」投資の罠に陥り、わずか1...

フアン: 「Filecoin マイナーの皆さん、よくやった!」

8月25日北京時間午前6時に、 Filecoin宇宙競争が正式に始まりました。 Protocol ...

ビットコインコア開発チームがイーサリアムのフォーク計画について初めて語る:これは大きな間違いだ

DAO事件は発生して半月近く経ちますが、その影響は全く衰えていません。攻撃者はスマートコントラクトの...

Ethereum 2.0 がリリースされました。ステーキングの仕組みと参加方法について学ぶ

11月24日、WeChatモーメントには「ダブル」という言葉が溢れていた。 Eth2ステーキング契約...

北京市が「北京政府サービスブロックチェーン応用イノベーションブルーブック(第1版)」を発表 添付:PDFダウンロードリンク

著者: 北京市政府サービス管理局 / 出典: 北京市政府習近平総書記の重要演説「ブロックチェーン技術...

失われたコンピューティングパワーは大規模なマイニングファームによって独占されている

マルクスはかつてこう言いました。「100%の利益があれば、資本家はリスクを負うだろう。200%の利益...

BitNation、イーサリアムブロックチェーン上で世界初の仮想国家憲法を発表

編集者注:ブロックチェーンにはさまざまな用途があることは誰もが知っています。 BitNation は...

ビットコインは命に関わる問題を提起し、取引所、マイナー、DeFiは書類を提出せざるを得なくなった

テキスト |黄雪嬌、秦暁峰、王イエ 編集者 |ハオ・ファンジョウ制作 | Odaily プラネットデ...

米国は暗号通貨を取り締まる準備をしているが、最初のターゲットはビットコインやイーサリアムではない

ここ数週間、暗号通貨市場は再び活況を呈しており、ビットコインは最近53,000ドルまで回復したが、そ...

新華社:ビットコイン - ブロックチェーン技術の最初の成功した応用

耿強羅宇漢ビットコインは間違いなく近年最もホットな話題の一つです。これは通貨の今後の発展における避け...