main.h: CTransaction :: IsFinal () решает, когда сделка считается окончательным.
Теперь, похоже, nLockTime на самом деле не используется в настоящее время, так что если это линия
если (nLockTime == 0) возвращает истину;
которая обычно делает свою работу здесь.
Чуть ниже в коде есть эта маленькая штучка:
если ((int64) nLockTime < (nLockTime < 500000000? (Int64) nBlockHeight: nBlockTime)) возвращает истину;
который лично я ожидал бы быть
если ((int64) nLockTime < nBlockTime) возвращает истину;
Какова цель сравнения с BlockHeight в случае nLockTime меньше, чем 500 000 000 500 000 000, безусловно, в прошлом?
Как nLockTime сравнивается с GetAdjustedTime () ранее в коде, это абсолютное время Unix эпохи. 500 000 000 5 ноября 1985, 1:53:20 в моем часовом поясе. Что идея сравнить с этой датой в прошлом?!? Более того: если nLockTime < 500000000 то почти наверняка также nLockTime < nBlockHeight так это раньше тест не имеет смысла?!?
Я был бы признателен за любые идеи, проливают некоторый свет на эту строку кода.
И, в то же время в этой части кода, немного ниже в IsFinal () мы находим:
BOOST_FOREACH (Const CTxIn& txin, Vin), если) возвращает ложь (txin.IsFinal (!);
Логика очевидна: Если вход в сделку не является окончательным, то сделка при рассмотрении не является окончательной. Но ... гм ... не должно ли это быть очень первое, что нужно проверить? Существуют различные случаи, ранее в функции, которая позволяет системе решить, что сделка является окончательным - не сделав эту проверку.