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

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

推薦する

EIP-1559はイーサリアムをデフレにする可能性 - マネーサプライ問題が議論を激化

暗号通貨コミュニティでは、ビットコイン愛好家とイーサリアムコミュニティの間で長年にわたる議論が続いて...

BCHウォレットの入手方法

多くのユーザーから、BCH ウォレット アドレスを取得する方法がわからないという報告があります。ウォ...

世界的なリスク資産は引き続き上昇、BBAE Proは暗号通貨取引を展開

デルタ変異株の拡大や米連邦準備制度理事会(FRB)の早期利上げ計画などのマイナス要因にもかかわらず、...

意見 |ビットコイン価格の強気相場は1,000日続く可能性

出典: ブロックチェーンペンシルウィリアム・スバーグ著編集者: ペニービットコインの価値は、2020...

DeFi の波を引き起こした流動性マイニングは、最終的にどのようにして消滅したのでしょうか? (ウーはトレンドと言う)

流動性マイニングは、この DeFi の波の出発点です。今では中国の選手たちがそれを真似し始めています...

ネットワークエンジニア: アンチASICマイニングは間違っているかもしれない、将来のIPプロトコルのアップグレードは大規模なブロック拡張に有益となるだろう

「マスター、最近は小型の採掘コインが人気です。私が中関村に行って採掘用の機械を組み立てるのはどう思い...

Bitmainがコンテナマイニング製品ANTBOXをリリース

Bitmain は、標準コンテナで構築され、内部が単列設計で、ウォーターカーテン冷却とファン冷却を備...

ブロックチェーン上の仮想株に関する SEC 委員長の警告はどのようなシグナルを発しているのでしょうか?

ゲンスラー氏は、登録せずにそのような資産を提供している可能性のある者を追及するために、SECの執行資...

イーサリアム共同創設者:イーサリアム ETF が ETH 供給の縮小を引き起こす理由

米国証券取引委員会(SEC)は、スポットイーサリアムETFを承認する準備ができているようだ。イーサリ...

Filecoin に参加することがなぜそれほど重要なのか? ? ?

01 IPFSとFilecoinとは何かIPFS と Filecoin に初めて触れたとき、誰もが次...

2020 年には中央銀行デジタル通貨の最初のバッチが登場するかもしれません。楽しみにしていますか?

フェイスブックのリブラがもたらした「デジタル通貨推進戦争」は、次第に各国中央銀行の通貨主権を守るため...

日本ブロックチェーンアライアンスには100を超える会員がいる

クレイジー解説:4月に設立されたばかりの日本ブロックチェーン連盟BCCは、短期間で三井住友、マイクロ...

リアルビジョン共同創設者:暗号通貨市場は、崩壊せず、損失が納税者に分配されることのない、新しい、脆弱でない金融システムです。

死ななければ強くなる—死ななければ強くなる。過去2週間、暗号通貨市場は前例のない暴落に見舞われ、ビッ...

TSMC:7nmは2018年に量産開始、ビットコインマイニングマシンチップが再び増加

11月16日のマイニングウェブサイトのレポートによると、ビットコインマイニングマシンの主流チップは現...

アップグレードされたビットコインソフトウェアは、まず分離証人コードを追加します

Crazy Review : ビットコイン ブロックチェーンのスケーラビリティの問題は、その幅広い適...