Я понял, что тот же метод может быть реализован гораздо проще, если транзакции могут указать номер раз / блок после того, как они не могут быть приняты в блок цепи.
В настоящее время nLockTime имеет порог:
INT LOCKTIME_THRESHOLD = 500000000; // вт 5 ноября 1985 00:53:20 UTC
Значения ниже, чем LOCKTIME_THRESHOLD считаются номера блоков и значения выше, чем LOCKTIME_THRESHOLD они считаются метки времени UNIX.
Поскольку Bitcoin не существовало с 1985 по 2009 год, я предлагаю мягкую вилку, где nLockTime в диапазонах:
nLockTime в (LOCKTIME_THRESHOLD до 510000000): Действительно до блока (nLockTime- LOCKTIME_THRESHOLD + 262634) (190 лет помогло, Шифрование до 2203)
nLockTime в (510000000 до 1230000000): Действительно до времени (nLockTime-510000000 + 1230000000): 22,8 лет помогло (до 2036)
изменение кода должно выглядеть примерно так: (обратите внимание: я не беру в расчет txin.IsFinal (), это просто пример)
Код:
BOOL IsFinal (интермедиат nBlockHeight = 0, Int64 nBlockTime = 0) Const
{
....
если ((int64) nLockTime < LOCKTIME_THRESHOLD) {
если ((int64) nLockTime < (Int64) nBlockHeight)
возвращает истину;
}
еще
если ((int64) nLockTime <510000000) {
если ((int64) nLockTime- LOCKTIME_THRESHOLD + 262634 >= (Int64) nBlockHeight)
возвращает истину;
}
еще
если ((int64) nLockTime <1230000000) {
если ((int64) nLockTime-510000000 + 1230000000 >= (Int64) nBlockTime)
возвращает истину;
}
еще
если ((int64) nLockTime > (Int64) nBlockTime)
возвращает истину;
...
}
Там может быть много больше, случай использования (Mike Хирн?)
С наилучшими пожеланиями,
Серхио.