Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Bitcoinのタイムロックの仕組み

 Bitcoinのタイムロックの仕組み

GBECの解説動画のスライドです。
https://goblockchain.network/2024/02/timelock/

shigeyuki azuchi

February 27, 2024
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. 1 Bitcoinで利用可能なタイムロック
 • 絶対的時刻(ブロック高)指定によるタイムロック 
 
 
 
 
 


    
 • 相対的な時刻(ブロック高)指定によるタイムロック 
 OP_CLTV
 UTXO
 OP_CSV
 UTXO
 タイムロックされたUTXOは、予め決められた時間になるまで使用できない。
 タイムロックされたUTXOは、このUTXOのTxがブロックに格納された後、
 予め定められた時間が経過するまで使用できない。

  2. 2 nLocktimeを使用したタイムロック
 Tx
 Version
 Inputs
 Outputs
 nLocktime
 0 < nLocktime

    < 0xffffffffの値が設定された場合、
 その値になるまでTxをブロックに格納できない。 
 
 • 値が500,000,000未満であれば、ブロック高として解釈され 
 • それ以上であれば、ブロック時間として解釈されれる
 
 
 
 • BIP-113(Medial Time Past)適用前は、ブロックのタイムスタンプ 
 • 適用後は、Median Time Past:
 直近11ブロックのタイムスタンプの中央値 
 
 ※ ブロックのタイムスタンプの順序を強制するコンセンサスルールはないため、
   MTPによりマイナーが意図的にタイムスタンプを調整するのを防止
 ※ 基本的には、ブロック高を採用することが多い

  3. 3 OP_CHECKLOCKTIMEVERIFY
 Tx
 Version
 Inputs
 Outputs
 nLocktime
 OP_CLTV
 UTXO
 nLocktime

    の機能だけでは、UTXOをタイムロックできない 
 (nLocktimeが設定されていないTxを作れば使えてしまうため) 
 
 
 
 BIP-65:OP_CHECKLOCKTIMEVERIFY opcodeの導入
 https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki 
 
 
 
 OP_CLTV opcodeは、TxのnLocktimeが
 スクリプトスタックの<ロックタイム>の値以上であることを強制する。 
 (かつ、インプットのnSequence != 0xffffffff→ロックタイムの無効化設定) 
 ※ 2015年にソフトフォークでBitcoinに導入される。 
 … <ロックタイム> OP_CHECKLOCKTIMEVERIFY … スクリプトインタプリターはTx内のデータしかチェックできないため、
 OP_CLTVによるnLocktimeの設定値の制御+nLocktimeのルールの組み合わせにより
 コンセンサスレベルでのUTXOのタイムロックが機能する。

  4. 4 相対時間によるタイムロック
 Tx
 Version
 Inputs
 Outputs
 nLocktime
 TxIn
 OutPoint
 scriptSig


    nSequence
 相対的ロックタイムを組み込むためには、そのロックタイムの値を
 設定可能なnLocktimeと同様のフィールドが必要
 
 nSequenceは元々Txを置換する際に使用されていたフィールド
 
 BIP-68:Relative lock-time
 https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki
 
 
 
 
 
 
 このbitがセットされていれば時間ベース、 
 セットされてなければブロックベース 
 Relative lock-timeの設定値 
 1年ちょっとまでのlock-timeが設定可能 
 • 時間ベースの場合は、設定値×512秒 
 • ブロックベースの場合は、ブロック数 
 残りの16bitは将来の拡張のため確保 
 Disable Flagがセットされていれば、 
 タイムロックは無効

  5. 5 OP_CHECKSEQUENCEVERIFY
 nSequence の機能だけでは、UTXOをタイムロックできないため、 
 OP_CLTVのように相対的なタイムロックを強制するopcodeが必要 
 
 
 


    BIP-112:OP_CHECKSEQUENCEVERIFY opcodeの導入
 https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki 
 
 
 
 OP_CSV opcodeは、インプットの nSequenceが
 スクリプトスタックの<ロックタイム>の値以上であることを強制する。 
 ※ 2016年にMTP、BIP-68と一緒にソフトフォークでBitcoinに導入される。 
 … <ロックタイム> OP_CHECKSEQUENCEVERIFY … Tx
 Version
 Inputs
 Outputs
 nLocktime
 TxIn
 OutPoint
 scriptSig
 nSequence
 OP_CSV
 UTXO
 スクリプトインタプリターはTx内のデータしかチェックできないため、
 OP_CSV(BIP-112)+ BIP-68の組み合わせにより、
 コンセンサスレベルでのUTXOのタイムロックが機能する。
 この機能を有効にするために、 
 TxのVersionは2以上である必要がある。