Transaction(スクリプト)
3.スクリプト
スクリプトの命令はOpcodeで記述されます。また、スクリプト意外にも公開鍵のデータも埋め込まれます。
<スクリプトの設定方式>
支払い方法によって選ぶスクリプトの種類は変わってきます。
大きくわけて、P2PKH、マルチシグ、P2SHに別れます。
table:P2PKH
スクリプト 内容
ScriptPubKey (locking script) OP_DUP OP_HASH160 <Public key Hash A> OP_CHECKSIG OP_EQUALVERIFY
ScriptSig (unlocking script) <Signature A> <Public Key A>
検証されるスクリプト <Signature A> <Public Key A> OP_DUP OP_HASH160 <Public key Hash A>
OP_EQUALVERIFY OP_CHECKSIG
https://gyazo.com/99731f78812e6e7e316f7607dcbdb889
図4:P2PKH検証時のスタック状態遷移
table:マルチシグ
スクリプト 内容
ScriptPubKey (locking script) 2 <Public key A> <Public key B> <Public key C> 3
OP_CHECKMULTSIG
ScriptSig (unlocking script) OP_0 <Signature A> <Signature B>
検証されるスクリプト OP_0 <Signature A> <Signature B> 2 <Public key A>
<Public key B> <Public key C> 3 OP_CHECKMULTSIG
https://gyazo.com/6c5fb8ca65ca2e916975e98eb8a227d0
図5:2-of-3マルチシグのスタック状態遷移
<P2SH>
Script PubKeyにスクリプトのハッシュを設定し、トランザクションに含まれるデータを少なくしたもの。
マルチシグなんかで使う。
table:P2SH
スクリプト 内容
redeam Script 2 <Public key A> <Public key B> <Public key C> 3
OP_CHECKMULTSIG
ScriptPubKey (locking script) OP_HASH160 <redeam script hash> OP_EQUAL
ScriptSig (unlocking script) OP_0 <Signature A> <Signature B> <redeam scripy>
https://gyazo.com/3aa853bc6be862bab16d7550f6ff314d
図6:P2SH検証時の流れ
4.タイムロック
table:OP_CLTV
スクリプト 内容
ScriptPubKey (locking script) <ブロック高またはUNIXタイム> OP_CHECKLOCKTIMEVERIFY OP_DROP
<Public key A> OP_CHECKSIG
ScriptSig (unlocking script) <Signature A>
検証されるスクリプト <Signature A> <ブロック高またはUNIXタイム> OP_CHECKLOCKTIMEVERIFY
OP_DROP <Public key A> OP_CHECKSIG
table:OP_CSV
スクリプト 内容
ScriptPubKey (locking script) <ブロック高または512s単位の時間> OP_CHECKLOCKTIMEVERIFY OP_DROP
<Public key A> OP_CHECKSIG
ScriptSig (unlocking script) <Signature A>
検証されるスクリプト <Signature A> <ブロック高または512s単位の時間> OP_CHECKLOCKTIMEVERIFY
OP_DROP <Public key A> OP_CHECKSIG