有効期限とタイムスタンプ
ZooBC のすべてのトランザクションは、作られた時点を Unix 秒で、署名されたバイト列の中に持っています。そのタイムスタンプが有効期間の時間枠を開きます。ブロックがトランザクションを取り込めるのはその時間枠の中だけで、それを過ぎるとトランザクションは失効し、改めて署名しなければなりません。この時間枠は署名者を守ります。混雑した時期にブロックに取り込まれなかった支払いが何日も残り続けて、後から署名者を驚かせることはありません。単に失効し、署名者は改めて判断できます。
既定の時間枠:1 時間
既定では、ブロックはトランザクションのタイムスタンプから 3,600 秒後までそれを取り込むことができます。1 時間、つまり 15 秒に 1 ブロックで 240 ブロックです。それを過ぎると、ノードは「...sign it again」で終わるメッセージとともにそれを拒否します。
時間枠には前の端もあります。3,600 秒より先の未来の日時が付けられたトランザクションも、署名者の時計を確認するよう促すヒントとともに拒否されます。これは時計の狂ったデバイスを見つけるためです。
時間枠を選ぶ:バージョン 3
バージョン 3 のトランザクションは、手数料と延命フィールドの直後に 4 バイトの有効期限フィールドを持ち、自身の時間枠を秒で示します。
- 0 は既定の 1 時間を意味します。
- より小さい値は時間枠を短くします。すぐに実行されるか、さもなければまったく実行されるべきでない支払いのためです。
- 許される最大の値は 86,400 秒、つまり 1 日です。それより大きい値は拒否されます。
バージョン 1 または 2 のトランザクションには有効期限フィールドがなく、それでも有効期限を示しているものは拒否されます。バージョンにかかわらず、未来方向に 1 時間という制限は引き続き適用されます。
より長い時間枠は、ハードウェアウォレットや マルチシグネチャ アカウントの参加者の間など、署名を集めるのに時間がかかる場合に役立ちます。
プールとチェーンの対応
2 つの付随するルールが、1 日の時間枠を安全なものにしています。
- ノードのトランザクションプールは、各トランザクションをそれ自身が示した時間枠の間保持します。
- どのチェーンも、トランザクション ID を少なくとも 25 時間保持します。最長の時間枠に、未来方向の 1 時間の許容差を加えたものです。
ノードはすでに確認済みの ID を拒否するため(トランザクションへの署名 を参照)、トランザクションがまだ有効な間にリプレイされることは決してありません。
ブロックにおける時刻
ブロックも同じ時間枠に照らして確認されるため、すべてのノードが同じ判定に達します。
- タイムスタンプが、トランザクションのタイムスタンプにその時間枠を加えた時刻を過ぎているブロックは無効です。
- ブロックより 3,600 秒以上後の日時が付けられたトランザクションを運ぶブロックも無効です。
ブロックごとに自動的に行われる決済もあります。エスクロー の期限、リキッドペイメント(ストリーム) の完了、期日を迎える スケジュール送金、マーケットの板に残っている注文の失効、手数料投票の段階です。これらはブロック自身のタイムスタンプではなく、直前のブロックのタイムスタンプを読みます。そのため生成者は、ブロックのタイムスタンプを少し先にずらして支払いをそのブロックに引き込むことはできません。
ブロックが時間的にどう間隔を空けているかは ブロックと時間 で説明しています。