Bitcoin Script
Bitcoin の script について
Script - Bitcoin Wiki
stack が 0 でなければ成功
Bitcoin script 101
The Bitcoin Script language (pt. 1)
btcdeb
OP code を hex に変換できる
btcdeb> tf hex OP_CHECKSIG
script を作成
code:terminal
// stack っぽく表示する
$ btcdeb 'OP_2 02a83a8b76e592f576f45d2f429139a97e9247dedceabc26773a85638def747474 02b270fc21d62683e28dd1762845e8d800a8b44f1776b45c43d432da8b2c4e1ce1 OP_2 OP_CHECKMULTISIG'
// into hex
btcdeb> tf hex 'OP_2 02a83a8b76e592f576f45d2f429139a97e9247dedceabc26773a85638def747474 02b270fc21d62683e28dd1762845e8d800a8b44f1776b45c43d432da8b2c4e1ce1 OP_2 OP_CHECKMULTISIG'
hal script decode コマンドも便利
GUI
Bitcoin Transaction Editor
timelock
Timelock - Bitcoin Wiki
nLocktime
nLockTime - Bitcoin Wiki
size は 4 bytes
Hex では8桁
有効になる場合とならない場合がある
有効な場合は、block に含めることができる最短の時間を表現している
UNIX timestamp か Block height で指定される
500_000_000 以上だと timestamp
nLockTime はブロックに入れることができるタイミングを指定しているだけなので、それより前に他の tx が nLockTime でロックされている tx が unlock しようとしている output を unlock してしまう可能性がある
Miner は時間について嘘をつけるので、miner が指定する block time ではなくて過去11ブロックの block time の中央値を使う
ロックタイムの比較の際に使われるMedian time-past(BIP-113) - Develop with pleasure!
マイナーが正直に blocktime を指定しているとしても、nLocktime に指定した UNIX timestamp よりも遅くなる、よね?
仮に6ブロック目が中央値だったなら、現時点でのブロックに含めることができるのは、およそ1時間前を nLockTime に指定している tx
ざっくりnLockTime に指定した時間の一時間後にはブロックに入る
nLockTime の意味は OP_CLTV に与えられる squence number によって変化する
OP_CHECKLOCKTIMEVERIFY
nLockTime ではできない UTXO の使用を制限することができる
nLockTime の値が CLTV に与えられた値以上でないと tx は fail
CLTV は sciptSig なので prev tx の output で事前に指定されている
nSequence による relative timelock
input に指定する nSequence によって、input が spent する output が block に含まれてからどのくらい立たないといけないかを指定する
OP_CSV
nSequence がCSV に与えられた値以上でないと fail する
Bitcoin’s Time Locks - Summa - Medium
ビットコインのタイムロックあれこれ - Qiita