Я также рассматриваю идею, что если замена сделки не включена, во многих случаях использования будут включены путем изменения семантики nLockTime таким образом, что операции с nLockTime в будущем (либо номер блока или время) не должны быть приняты в память бассейн вообще.
Некоторые предостережения думать о том:
- CTransaction :: IsNewerThan, кажется, есть недостаток в окончательном цикле метода, если нет побочных эффектов, люди заботятся о. В текущем воплощении (которая восходит к когда-то в 2009 году или, возможно, даже вернуться к исходному коду), это возможно для некоторых входов, чтобы иметь более высокие порядковые номера, чем в предыдущей версии сделки и некоторые имеют более низкие порядковые номера и до сих пор сделка выйти, как "новее." Если это не будет сделано для определенных побочных эффектов, по-видимому, ошибка (хотя легко исправить). Насколько я могу судить, только код, который вызывает CTransaction :: IsNewerThan является CTransaction :: AcceptToMemoryPool, и этот код путь никогда не попал из-за отключения замены транзакций. Кроме того, этот код не использует какие-либо побочные эффекты этого цикла, насколько я могу видеть.
- Я не нашел какой-либо код, который предотвращает транзакцию с использования выходов неконечных сделок в CTransaction :: AcceptToMemoryPool. В случае замены транзакции, такой код будет необходимо в случае выходов изменилось. Это может быть желательным, чтобы ограничить путь выхода может быть изменено, чтобы предотвратить двойной тратит.
- По крайней мере, нам нужно добавить вывод RPC и, возможно, пользовательский интерфейс, чтобы показать, является ли неподтвержденные транзакции являются окончательными или нет. Это будет иметь важное значение для продавцов, чтобы гарантировать, что они не принимают 0-Confirm сделок, которые могут быть заменены из-под них, вызывая двойную сумму расходов на самом деле, независимо от того, как они распространяются через сеть.
- Некоторые формы уныния должны быть предприняты, чтобы предотвратить шахтер из версий в том числе сделок, которые не последняя версия. Если это использует отказ блока, это приведет к шахтерам не следует правила большинства в шахтные блоки, которые не будут приняты в консенсусной цепи, в результате чего множества тупиковых ветвей. Если используются операционные издержки, чтобы стимулировать шахтеров, чтобы получить максимальные сборы от включая самую последнюю версию, это может быть хорошей идеей, чтобы ограничить новые версии, чтобы заставить их платить более высокие сборы с каждой версией. Это по-прежнему требует догадок со стороны отправителя, чтобы предсказать, сколько плата за транзакцию того бы шахтеры готовы утвердить новую версию сделки. Это также означает, что мы, возможно, потребуется изменить правила замены сделки в отношении ресурсов, что позволяет новый вход, чтобы покрыть дополнительные операционные издержки, если это необходимо (это будет означать изменение, по меньшей мере CTransaction :: FetchInputs а).
- Там нет никаких стимулов к пересылают несколько версий сделки; на самом деле, есть препятствие: каждый раз, когда новая версия будет получена, оно должно быть подтверждено, прежде чем быть принятым в пул памяти и пересылаются. Такое использование ресурсов может фактически вызвать отказ в обслуживании, как упоминалось Gavin, если слишком много версий транзакции передаются через сеть. Anti-DOS код должен быть добавлен к распространению как-то дроссельный новых версий; некоторые люди могут даже изменить их узлы не распространяются такие сделки вообще, что бы поражение цели всей этой дискуссии.
- Изменение семантики nLockTime означает, что неконечные сделки не могут быть в пуле памяти не изменяют правила проверки блока. Оно также предотвращает не шахтер узлы от необходимости проверять много разных версии транзакции, вызывая отказ в обслуживании. Проблема заключается в том, что в реальных условиях эксплуатации, nLockTime должны быть достаточно далеко, что окончательный вариант сделки имеет практически 0 шанс не делает его в блок по времени nLockTime истекает. Это позволит предотвратить timelocked транзакции принимаются шахтерами по финализации сделки с более низкой платой.