Bitcoin Scriptとは
Bitcoinをはじめ、BitcoinからハードフォークしてできたBitcoinCash、BitcoinSV、LitecoinなどでBitcoin Scriptが動作しています。
Bitcoin Scriptの基本動作はスタックマシンです。OP_CODEというオペレータをスタックに積んで順番に処理するようになっています。BitcoinはBitcoin Scriptを使って送金処理を行なっています。
Bitcoin Scriptの仕組みは同じでもそれぞれの通貨で使用できるOP_CODEが違ったり、実行されているScriptの中身が少し異なります。Bitcoinで使われているOP_CODEは下記に定義されています。
P2PKH Pay-to-Public-Key-Hashとは
P2PKHはBitcoinがSegWitを導入する前に使われていた送金するためのスクリプトです。現在はBitcoinCash、BitcoinSV、Litecoinなどで使われています。
送金のスクリプトの基本的なルールは、UTXOのoutputに含まれるLocking Script(scriptPubKey)を解除するためにUnlocking Script(scriptSig)をinputに入れて解除することです。このトランザクションに対して秘密鍵で署名してブロードキャストすることで送金が完了します。
上記を踏まえて、P2PKHはLocking Scriptに送金相手のPublicKey:公開鍵のRIPEMD160(SHA256(PublicKey))したハッシュ値を含むLockgin Scriptで送金することを言います。
では実際にLocking ScriptとUnlocking Scriptの中身を見ていきます。
※補足解説:スクリプト中に現れる<>
は中の値をスタックにプッシュするという意味です。
Locking Script
OP_DUPはスタックの1番上に入っている値をコピーしてスタックに追加します。OP_HASH160はスタックの1番上に入っているスタックを取り出してRIPEMD160(SHA256())に処理を通してスタックに追加します。
20-bytes-pubkey-hashは送金先の公開鍵をRIPEMD160(SHA256(PublicKey))した値で20 Bytesのハッシュ値になります。
OP_EQUALVERIFYはスタックの1番上と2番目の値を取り出し比較します。
OP_CHECKSIGは公開鍵と署名の値を取り出し、トランザクションデータと一致するか検証を行います。一致した場合Trueがスタックに積まれUTXOを使用できることになります。
OP_DUP OP_HASH160 <20-bytes-pubkey-hash> OP_EQUALVERIFY OP_CHECKSIG
Unlocking Script
自身の秘密鍵で署名した結果と、秘密鍵に対応する公開鍵をセットします。
<signature> <pubkey>
上記で紹介したLocking ScriptとUnlocking Scriptを同時に実行して検証が成功すれば送金することができます。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す