用語集 / トランザクションと手数料
ロックタイム
別名はLocktimeです。
- ロックタイムとは?
- ロックタイムとは、トランザクションの最後の4バイトに置かれ、ネットワークがそのトランザクションをブロックに受け入れる最も早いブロック高または時刻を設定するものです。
ロックタイムは、プロトコルに書き込まれた先日付小切手のようなものだと考えてください。1つのフィールドに2つの意味があり、それはしきい値で決まります。500,000,000未満の値はブロック数を表し、それ以上の値は1970年からの秒数を表します。皆さんが送るトランザクションのほとんどにはロックタイムが付きますが、それはマイナーの巧妙な手口から守る以外に何もしません。
仕組み
ロックタイムはシリアライズされたトランザクションの末尾に置かれ、その支出に関する他のあらゆる検討より前に照合されます。
このしきい値のルールによって、1つのフィールドが2つの役割を果たします。ロックタイムが900,000であれば、そのトランザクションは高さ900,000未満のブロックには現れません。ロックタイムが1,800,000,000であればUnixタイムスタンプを表し、直前11ブロックの中央値時刻がその時点を過ぎるまで、そのトランザクションは現れません。境界線の500,000,000は1985年11月5日に相当し、ビットコインが存在する前の日付として十分に早く、考えられるどのブロック高よりも十分に高い値です。このフィールドは4バイトなので、表現できる最大の時刻は2106年2月7日です。
切り替えがあります。ロックタイムが適用されるのは、少なくとも1つの入力のシーケンス番号が0xffffffff未満である場合だけです。すべての入力を0xffffffffにすると、このフィールドは完全に無視されます。ウォレットが使い道を見つける前の長い間、トランザクションはそう動いていました。
その使い道が、手数料狙い(fee sniping)への対策です。手数料が高いとき、ブロック競争に負けたマイナーは、先へ積み上げるのではなく、直前のブロックを再マイニングしてその手数料を奪おうとする動機を持ちます。ウォレットがすべてのトランザクションのロックタイムを現在のチェーンの先端に設定すれば、それらのトランザクションはそれ以前のどのブロックでも無効になり、奪えるものの大部分と動機が取り除かれます。Bitcoin Coreは通常の支出でこれを行い、およそ10回に1回は直前100ブロックの中から高さを一様に選び、異なるウォレットソフトウェアのトランザクションが互いに目立たないようにします。
目にする場面
ブロックエクスプローラーで最近のトランザクションを開くと、ロックタイムのフィールドには通常、それがマイニングされた高さに近い数値が入っています。
これは手数料狙いへの対策の挙動であり、それを見ること自体が、支払いを構築したソフトウェアのかすかな指紋になります。このフィールドをゼロのままにするウォレットも、何かを示しています。チェーン分析企業がこのフィールドを読むのは、まさにそれについて考えるユーザーがほとんどいないからです。
意図的な用途はより限定的です。将来のロックタイムは、今署名して引き渡せるものの、それまではブロードキャストできないトランザクションを作ります。これが単純な相続の仕組みや返金経路の基礎です。ライトニングネットワークの強制クローズのトランザクションやサブマリン・スワップはタイムロックを使い、姿を消した取引相手があなたの資金を永遠に閉じ込めたままにできないようにします。これらを構築する人は、明らかな弱点に注意すべきです。ロックされたトランザクションの価値は、その背後にあるコインの価値までであり、送金者が先にそれらの入力を別の方法で支出すれば、先日付のトランザクションは無価値になります。
ロックタイムvs OP_CHECKLOCKTIMEVERIFY
ロックタイムはトランザクションを制限し、OP_CHECKLOCKTIMEVERIFYはコインを制限します。この違いが重要なのは、署名する本人以外を拘束するのは一方だけだからです。
ロックタイムはトランザクションを構築する者が選ぶので、誰も守りません。送金者はそれを付けない別のトランザクションを構築するだけで済みます。BIP65で定義され、2015年12月14日のブロック388,381からネットワーク上で有効なOP_CHECKLOCKTIMEVERIFYは、条件をアウトプット自身のスクリプトに組み込みます。そのコインを将来支出する際には、指定された時点以降のロックタイムを自ら持たなければならず、どの署名でもこれを回避できません。これによってタイムロックは意図からルールになり、保管庫、エスクロー、相続の設計がこのフィールドではなくオペコードで書かれる理由になっています。