¿Cómo se aseguran los desarrolladores de Bitcoin de que sus modificaciones no afecten las reglas de consenso o el protocolo de red en ejecución?
Entiendo que las reglas de consenso de Bitcoin son aplicadas por cada nodo individualmente . Sin embargo, la mayoría de las personas ejecutan la versión predeterminada de Bitcoin Core, lo que hace que las implementaciones realizadas por los desarrolladores de Bitcoin sean sumamente importantes.
Entonces mi pregunta está en el título: ¿cómo garantizan que las implementaciones no afecten las reglas de consenso o el protocolo de red?
Si bien también entiendo que cada versión de Bitcoin se publica con extremo cuidado y pruebas exhaustivas, sigo preguntándome si existe una práctica sistemática para esto. Cualquier puntero sería muy apreciado.
Respuestas
"Mejor esfuerzo". Las pruebas formales no ayudan. Todo lo que se puede hacer es escribir pruebas, como cualquier otro software bien escrito.
También mantienen bifurcaciones de algunas dependencias como LevelDB y no actualizan algunas de ellas como BerkeleyDB .
Vea lo que salió mal . Especialmente, el hardfork de 2013 no habría sucedido si pudieran garantizar un protocolo de consenso sin cambios.
Los contribuyentes de Core a largo plazo tienen un conocimiento general de qué partes de la base de código Core tocan o podrían afectar el consenso entre los nodos de la red. Sin embargo, el consenso es "resbaladizo" y ha habido ejemplos en el pasado en los que se realizaron cambios que no se consideraron críticos en ese momento, pero que resultaron serlo. MCCCS destaca algunos de estos ejemplos en la respuesta anterior.
Pieter Wuille discutió los desafíos de definir qué es consenso y qué no en el podcast de Chaincode Labs en enero de 2020.
Una de las cosas que creo que aprendí de eso es que especificar cuáles son las reglas de consenso es realmente difícil. Eso no significa que no pueda intentarlo, pero quién hubiera pensado que un ajuste de configuración en la capa de base de datos que está utilizando en realidad se filtró semánticamente en las reglas de consenso definidas implícitamente de Bitcoin. Puedes atribuir eso al fracaso humano, por supuesto. Deberíamos haber leído la documentación y ser conscientes de eso.
Podemos hablar sobre el límite al tratar de abstraer la parte del código base que contribuye intencionalmente al consenso, pero es muy difícil decir claramente que este código no tiene impacto en el código de consenso porque los errores pueden filtrarse. Creo que una de las cosas que hay que aprender es que realmente quieres un software que esté diseñado para usarse en un sistema de consenso donde no solo tienes el requisito de que si todos se comportan correctamente, todos aceptan la respuesta correcta, sino también que todos estarán de acuerdo sobre lo que es un pieza de datos inválida en sincronía.