¿Por qué no se admite el reemplazo de transacciones?

El artículo de wiki sobre contratos habla sobre las mejores cosas que puede hacer con los retrasos y el reemplazo. (Tiempo de bloqueo y números de secuencia, respectivamente). Pero según la documentación, el reemplazo aún no es compatible. ¿Por que no?

(Si la respuesta es "aún no está implementado", ¿por qué no lo ha sido?)

Respuestas (4)

Eso no es correcto. Se implementa el campo nLockTime. Se apagó deliberadamente hace algún tiempo para reducir la complejidad del protocolo. El motivo fue una serie de ataques basados ​​en protocolos que comprometieron la integridad del sistema.

En algún momento, la función se reactivará. Probablemente, después de que alguien haya escrito un conjunto de pruebas completo y un análisis técnico que demuestre que no es arriesgado volver a habilitarlo.

Presumiblemente por "Eso no es correcto" te refieres a la respuesta de Thomas, pero el formato de Stackexchange no hace que el contexto sea claro e inmutable.
¿Está realmente desactivado nLockTime? ¿Alguien podría proporcionar una fuente?

Puede hacer casi todo en esa página de Contratos sin necesidad de reemplazar la transacción. El tiempo de bloqueo funciona hoy (a partir de diciembre de 2013), las transacciones con lock_time no pueden entrar en la cadena de bloques hasta que se alcance el tiempo.

El reemplazo de transacciones no es compatible porque los desarrolladores han dicho que toda la idea del reemplazo basado en nSequence es problemática y es posible que nunca se habilite, aparentemente, causa posibles problemas de denegación de servicio. Lo comentan aquí:

https://bitcointalk.org/index.php?topic=131443.0

Sin embargo, no creo que el reemplazo de transacciones sea realmente necesario porque en algún momento reciente los desarrolladores hicieron que las transacciones que usan lock_time y version < UINT_MAX sean "no estándar". Lo que esto significa es que las transacciones que usan lock_time no se retransmitirán en la red peer-to-peer hasta que se alcance el lock_time, momento en el que puede enviar la transacción para la retransmisión y se considerará estándar y podrá entrar en la cadena de bloques. .

La razón por la que creo que esto soluciona la mayoría de los casos de uso es porque el reemplazo solo era necesario cuando las transacciones bloqueadas se retransmitían y almacenaban en los grupos de memoria, por lo que si llegaba una transacción que no estaba bloqueada, no sería aceptada. porque no se implementó el reemplazo y la transacción bloqueada ya estaba en el mempool. Dado que las transacciones bloqueadas no se retransmitirán ni almacenarán en los mempools ahora hasta que se alcance el tiempo de bloqueo, creo que el reemplazo es mucho menos importante, por lo que el hecho de que no parezca que se implementará pronto no es un problema.

aún no está implementado.

El protocolo tiene estas características definidas para que puedan implementarse en el futuro, pero actualmente se está trabajando en características más importantes.

Bifurque el repositorio y cree un parche para agregar soporte: p

Aquí hay un sitio que muestra la implementación del código nLockTime, ya sea que funcione o no. No tengo idea. Algunos dicen que está implementado, otros dicen que no.

http://brainwallet.org/#tx