Este es un editorial de opinión de Bill Scoresby, propietario de una pequeña empresa basada en bitcoin y escritor de varias guías para la autocustodia de bitcoin.
Los errores que recientemente causaron que muchos nodos LND no estuvieran sincronizados con la cadena de bloques de Bitcoin probablemente fueron causados por una implementación alternativa.
Tal vez te estés preguntando, “¿Quién en el mundo está usando otra cosa que no sea Núcleo de Bitcoin?” Es posible que no supiera que existían otras implementaciones de Bitcoin. Tal vez no esté seguro de lo que significa una implementación diferente.
Bitcoin Core comenzó como el software que Satoshi Nakamoto escribió en C++ y lanzó al mundo. Ha sido actualizado con nuevas versiones llegando hasta el día de hoy. Una implementación alternativa es un software que hace lo mismo que Bitcoin Core, aplica las mismas reglas de consenso, pero está escrito de manera diferente, la mayoría de las veces en un lenguaje de codificación diferente.
¿Cómo rompió una implementación alternativa los nodos en Lightning Network?
Una de las principales versiones de nodos de Lightning Network (LND) se basa en una implementación alternativa de Bitcoin llamada btcd. Cuando un desarrollador creó una transacción multisig muy grande, btcd no la consideró válida porque contenía demasiados datos testigo. Otras implementaciones de Bitcoin, la más importante, Bitcoin Core, no tenían ese límite en los datos testigo de transacciones de Taproot y, por lo tanto, aceptaban la transacción y el bloque que la contenía como válidos.
El resultado fue que los mineros siguieron agregando nuevos bloques en la cadena porque no usaban btcd y, de acuerdo con sus reglas, nada estaba mal, pero los nodos LND Lightning no podían reconocer ninguno de estos nuevos bloques porque estaban construidos sobre el bloque que contenía esa transacción que vieron como inválida.
Cuando el error volvió a ocurrir el 1 de noviembre, no solo los nodos LND se vieron afectados. Algunas instancias de electrs (una implementación del servidor backend para Electrum Wallet) tampoco lograron llegar a un consenso con el resto de la cadena. Si bien los nodos LND quedaron fuera de consenso debido a un problema similar en btcd, fue un implementación de Bitcoin escrita en Rust que hizo que los nodos eléctricos se quedaran atrásincluidos algunos servidores muy visibles dirigido por mempool.space.
El límite en el tamaño de los datos testigo existe para prevenir ataques DoS, y también es parte de Bitcoin Core (aunque Core tiene un límite mayor para las transacciones de Taproot). Parece que las otras dos implementaciones que no estaban sincronizadas tenían un código que mantuvo el límite más pequeño.
Las diferencias muy pequeñas en las implementaciones pueden conducir a una falta de consenso.
Tener múltiples implementaciones de Bitcoin es peligroso
A Satoshi no le gustó la idea de múltiples implementaciones de Bitcoin. “No creo que una segunda implementación compatible de Bitcoin sea una buena idea”. La razón que dio fue: “Gran parte del diseño depende de que todos los nodos obtengan resultados exactamente idénticos al mismo tiempo que una segunda implementación sería una amenaza para la red”.
¿Amenaza? ¿Cual es el problema?
Probablemente haya escuchado que la cadena con la mayor cantidad de prueba de trabajo es la verdadera cadena. Cuando dos mineros diferentes encuentran un bloque al mismo tiempo, la cadena se divide y otros mineros comienzan a construir sobre el bloque del que se enteran primero.
Tan pronto como se agrega un nuevo bloque a un lado de la división, la mayoría de los nodos y mineros lo aceptan como la nueva cadena real y abandonan el otro lado de la división. Estos bloques se conocen como bloques obsoletos, aunque algunas personas los llaman bloques huérfanos.
Dado que el tiempo promedio entre bloques en Bitcoin es de 10 minutos, es probable que toda la red conozca este nuevo bloque antes de que se agregue uno al lado perdedor de la división y la cadena con más trabajo gane.
“Los nodos seguirán la cadena válida con la mayor cantidad de trabajo… La palabra clave aquí es válida. Si el nodo recibe un bloque que determina que no es válido, no importa cuánto trabajo se haga encima de ese bloque, el nodo no aceptará esa cadena”. — andres chow
La palabra clave es “válida”. La amenaza aparece cuando un minero encuentra un bloque que otros mineros y nodos piensan que no es válido. Los mineros que crean que es válido intentarán construir nuevos bloques en esa cadena. Los mineros que piensen que no es válido intentarán construir sobre el último bloque válido que conocen. El resultado: dos cadenas y no hay forma de saber cuál es la verdadera.
¿Cómo diablos sucedería tal cosa?
Bueno, como vimos en el caso del error reciente con los nodos LND, si hay un error en una implementación de Bitcoin que no está en otras implementaciones, puede generar una falta de consenso sobre si un bloque es válido o no.
Bitcoin no tiene un mecanismo para arreglar esto. La comunidad fuera del protocolo tiene que decidir qué sucede a continuación. Suena muy desagradable.
Tanto es así que el desarrollador de Bitcoin Peter Todd ha dicho que otras implementaciones deben coincidir con Bitcoin Core error por error.
Ahí lo tienes: ¡las implementaciones múltiples son peligrosas!
¿Cuáles son las otras implementaciones de Bitcoin y por qué existen?
En primer lugar, casi todo el mundo ejecuta Bitcoin Core.
Luke Dashjr ve alrededor de 43,000 nodos, 98% de los cuales ejecutan Bitcoin Core y algo llamado Coin Dance ve cerca de 15,000 nodos, 96% de los cuales ejecutan Bitcoin Core. Entonces, por el momento, parece que muy pocas personas están usando implementaciones alternativas.
Sin embargo, hay proyectos activos que intentan construir y mantener otras bases de código que implementan el protocolo Bitcoin. Incluyen:
Jameson Lopp tiene una excelente pagina con una lista más exhaustiva y enlaces a todas las demás implementaciones.
Todos estos proyectos tienen desarrolladores extremadamente talentosos trabajando en ellos, y cada uno ha existido durante más de unos pocos años. ¿Por qué poner tanto esfuerzo en algo que parece un problema?
Bitcoin no tiene permiso. Cualquiera puede descargar la cadena; cualquiera puede interactuar con la red; y nadie puede impedirle codificar o ejecutar una implementación alternativa.
Sin embargo, claramente algunas personas están a cargo de realizar cambios en el repositorio de Bitcoin y el proceso para elegirlos parece informal. Mientras esté el Proceso de propuesta de mejora de Bitcoin (BIP) por sugerir cambios a Bitcoin Core, también es bastante informal.
Nada de esto es un problema directo. Como señala Marty Bent, un consenso aproximado puede ser una fortaleza. Si el proceso de cambio de Bitcoin es difícil y poco claro, significa que los cambios se examinarán más a fondo.
El siguiente paso del consenso aproximado es tener más de una implementación popular.
No tener implementaciones múltiples podría ser más peligroso
No hay duda de que ya es un trabajo muy difícil ser una de las personas que tiene acceso de compromiso a Bitcoin Core. En un mundo donde Bitcoin juega un papel central como instrumento monetario, este trabajo será mucho más difícil. Un pequeño grupo de desarrolladores podría convertirse en un objetivo muy valioso. Como mínimo, se buscará su atención para presionar por varias inclusiones o exclusiones en la próxima versión del software.
Piense en la industria del cabildeo que existe actualmente en la política. ¿Por qué no se desarrollaría tal cosa en torno a las personas que tienen acceso de compromiso a la única implementación del protocolo Bitcoin?
Al igual que los políticos ahora, se percibirá que tienen acceso al poder. Como tal, la gente los atacará, excepto que estos desarrolladores no tendrán la fuerza de un estado para defenderlos. ¿Qué tipo de vida va a ser esa? ¿Quién lo elegiría voluntariamente?
Al final del día, el sistema financiero global es un peso bastante pesado para descansar sobre los hombros del pequeño grupo de personas que tienen acceso comprometido a un repositorio de GitHub. Tal vez no tan diferente del sistema financiero global del que estamos tratando de alejarnos, donde el futuro monetario de las personas depende de las decisiones de unos pocos banqueros centrales.
¡Múltiples implementaciones al rescate!
La presencia y el uso generalizado de múltiples implementaciones en la red de Bitcoin pueden mitigar estas presiones al dificultar mucho más que un actor malicioso cambie el protocolo de Bitcoin.
Si los participantes en la red Bitcoin se distribuyen de manera más uniforme entre diferentes implementaciones, hay más espacio para que surjan buenas ideas. Proponer cambios a Bitcoin o rechazarlos es mucho más descentralizado si no se hace todo en un solo campo.
Claramente, el uso de diferentes implementaciones de Bitcoin aumenta el riesgo de una división de la cadena. Una división catastrófica de la cadena, donde una parte significativa de los nodos y los mineros se bifurcaron accidentalmente, no sería buena para Bitcoin, y ciertamente tampoco para su precio. Pero no amenazaría la naturaleza sin permiso de Bitcoin.
Un entorno de desarrollo centralizado en el que todos solo se basan en Bitcoin Core podría amenazar la falta de permiso. La conversación sobre el tema debe abordar los riesgos de depender tanto de Bitcoin Core en lugar de centrarse únicamente en los problemas que podría causar una implementación alternativa.
Hay un gran artículo antiguo sobre este debate escrito por Aaron van Wirdum. También puede leer una más reciente, hilo informativo sobre eso
Esta es una publicación invitada de Bill Scoresby. Las opiniones expresadas son totalmente propias y no reflejan necesariamente las de BTC Inc o Bitcoin Magazine.