BIP: 113
Layer: Consensus (soft fork)
Title: Median time-past as endpoint for lock-time calculations
Authors: Thomas Kerin <me@thomaskerin.io>
Mark Friedenbach <mark@friedenbach.org>
Status: Deployed
Type: Specification
Assigned: 2015-08-10
License: PD
概要
本BIPは、時間ロック付きトランザクションがブロックに取り込まれる資格をどう判定するかについて、その意味論を再定義する提案である。ブロック自身のタイムスタンプの代わりに直近11ブロックの中央値を用いることで、その値がブロックごとに単調に増えることを保証する。
動機
現在、トランザクションは、現在時刻またはブロック高がロックタイムで指定された値以下である場合、ブロックへの取り込みから除外される。コンセンサスルールはブロックのタイムスタンプに厳密な順序を課していないため、これは望ましくない結果を招く。マイナーは、実時間ではまだ満期を迎えていないトランザクションを取り込むことでより多くの手数料を得るために、自分のブロックの時刻を偽るという歪んだ動機を持つことになる。
本BIPは、トランザクションを含むブロック自身のタイムスタンプではなく、直近11ブロックのタイムスタンプの中央値とロックタイムを比較することを提案する。既存のコンセンサスルールはこの値が単調に増加することを保証しており、これによりマイナーが自分のブロックのタイムスタンプを偽ってより多くのトランザクション手数料を主張する余地が排除される。
本提案は、BIP65(CHECKLOCKTIMEVERIFY)が要求するロックタイム計算での信頼できる挙動を確保し、BIP68(シーケンス番号)およびBIP112(CHECKSEQUENCEVERIFY)の挙動と整合させることを目指す。
仕様
トランザクションのロックタイムの値そのものは変更されない。異なるのは、トランザクションを取り込めるかどうかを判定する計算のみである。信頼できないタイムスタンプの代わりに、ロックタイム制約を検証する目的でのブロック時刻を判定するため、以下の関数が用いられる。
enum { nMedianTimeSpan=11 };
int64_t GetMedianTimePast(const CBlockIndex* pindex)
{
int64_t pmedian[nMedianTimeSpan];
int64_t* pbegin = &pmedian[nMedianTimeSpan];
int64_t* pend = &pmedian[nMedianTimeSpan];
for (int i = 0; i < nMedianTimeSpan && pindex; i++, pindex = pindex->pprev)
*(--pbegin) = pindex->GetBlockTime();
std::sort(pbegin, pend);
return pbegin[(pend - pbegin)/2];
}
ロックタイム制約はコンセンサスメソッドIsFinalTx() によって検証される。このメソッドはブロック時刻を引数の1つとして受け取る。本BIPは、有効化後はコンセンサスコード内のIsFinalTx() の呼び出しが、代わりにGetMedianTimePast(pindexPrev) の戻り値を用いることを提案する。
新しい規則は、コインベーストランザクションを含むすべてのトランザクションに適用される。
本提案のリファレンス実装は、以下のプルリクエストで提供されている。
https://github.com/bitcoin/bitcoin/pull/6566
展開
本BIPは、ビット0を用いた「バージョンビット」BIP9によって展開される。
Bitcoinメインネットでは、BIP9のstarttimeは2016年5月1日UTC深夜(エポックタイムスタンプ1462060800)、BIP9のtimeoutは2017年5月1日UTC深夜(エポックタイムスタンプ1493596800)となる。
Bitcoinテストネットでは、BIP9のstarttimeは2016年3月1日UTC深夜(エポックタイムスタンプ1456790400)、BIP9のtimeoutは2017年5月1日UTC深夜(エポックタイムスタンプ1493596800)となる。
本BIPは、BIP68およびBIP112と同一の展開機構を用いて同時に展開されなければならない。
謝辞
マーク・フリーデンバッハ — 本BIPのリファレンス実装の設計と作成に対して。
2013年7月16日、#bitcoin-wizardsで原案を思いついたグレゴリー・マクスウェルに感謝する。
トーマス・ケリンが本BIP文書を執筆した。
互換性
時間ベースのロックタイムを用いて生成されたトランザクションは、旧規則の下で想定される場合よりおよそ1時間長く承認に時間がかかる。これが既存のプロトコルとの互換性上の懸念を生むことは知られていない。
参考文献
BIP9: Versionbits (https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki)
BIP65: OP_CHECKLOCKTIMEVERIFY (https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki)
BIP68: Consensus-enforced transaction replacement signaled via sequence numbers (https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki)
BIP112: CHECKSEQUENCEVERIFY (https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki)
Softfork deployment considerations (http://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-August/010396.html)
Version bits (https://gist.github.com/sipa/bf69659f43e763540550)
著作権
本文書はパブリックドメインに置かれる。
