Inicio Desarrollo y Gobernanza Revisión entre pares: cómo se audita el código de Bitcoin

Revisión entre pares: cómo se audita el código de Bitcoin

El proceso de revisión de código en Bitcoin Core funciona mediante pull requests públicos, ACKs y NACKs, y es el principal cuello de botella del desarrollo del protocolo.

El código más auditado del mundo, y aun así escaso de revisores

Bitcoin Core es software de código abierto: cualquiera puede leerlo, proponer cambios y participar en la revisión. Sin embargo, el número de personas con la profundidad técnica y el tiempo necesario para revisar cambios de consenso es pequeño, y ese cuello de botella determina el ritmo al que el protocolo puede evolucionar.

El flujo de un pull request

Un contribuidor que quiere introducir un cambio abre un pull request (PR) en el repositorio de Bitcoin Core en GitHub. El PR incluye el código, una descripción del problema que resuelve y, opcionalmente, un enlace al BIP o discusión en la lista de correo. A partir de ahí, cualquier persona puede revisar el código y dejar comentarios o una de estas señales de revisión:

ACK (Acknowledge): "He revisado el código y lo apruebo." Existen variantes: Concept ACK ("la idea me parece bien, aún no he revisado la implementación"), Code Review ACK ("he revisado el código en detalle") y Tested ACK ("además de revisar el código, he ejecutado las pruebas o lo he probado en producción").

NACK (Not Acknowledge): "Me opongo a este cambio y explico por qué." Un NACK bien argumentado es suficiente para bloquear un PR indefinidamente; no hay votación formal ni mayoría.

Qué buscan los revisores

Los criterios de revisión varían según el tipo de cambio. Para cualquier PR se evalúan: correctitud lógica (¿hace lo que dice?), seguridad (¿introduce vulnerabilidades?), rendimiento (¿degrada el funcionamiento del nodo?), y compatibilidad (¿rompe interfaces existentes?). Para cambios de consenso —los que afectan las reglas de validación— el estándar es más estricto: se busca que no haya ningún caso extremo donde el comportamiento difiera entre implementaciones, porque eso podría causar una división involuntaria de la cadena.

El proceso para un contribuidor nuevo

Empezar a contribuir a Bitcoin Core directamente con un cambio de consenso es poco realista. La reputación se construye gradualmente. El camino habitual: empezar revisando el código de otros (los comentarios de revisión son contribuciones tan valiosas como el código), luego resolver issues etiquetados como "good first issue", después proponer mejoras de rendimiento o de pruebas, y finalmente, con años de historial, participar en cambios de protocolo.

El desarrollador Jon Atack publicó una guía práctica ampliamente citada ("How to contribute to Bitcoin Core") que describe exactamente este proceso, con recomendaciones sobre qué PRs revisar primero y cómo estructurar los comentarios.

El cuello de botella real

En cualquier momento hay cientos de PRs abiertos en Bitcoin Core y docenas de personas que podrían abrir más. El limitante no es la escritura de código sino la revisión. Un PR sin suficientes revisores de calidad no avanza aunque sea técnicamente impecable. Esto no es un fallo del proceso: en un sistema donde un error de consenso puede costar cientos de millones de dólares y no hay entidad que lo remedie, ir despacio es una decisión racional.

Revisión de seguridad: el caso especial

Para cambios que afectan las reglas de validación —como los que acompañan a un soft fork— el proceso incluye revisión por criptógrafos externos, análisis de casos extremos documentados, y a menudo auditorías independientes por parte de equipos como los de Chaincode Labs o Brink. La activación de Taproot en 2021, por ejemplo, tuvo años de revisión de las especificaciones criptográficas (BIP-340, firmas Schnorr) antes de que el código de activación se escribiera.

Errores habituales

  • Creer que un Concept ACK es suficiente para que un PR avance: solo indica que la idea es bien recibida; aún se necesitan revisiones detalladas del código.
  • Pensar que los "maintainers" de Bitcoin Core aprueban cambios unilateralmente: su rol es gestionar el proceso y hacer merges cuando hay suficiente consenso, no decidir qué entra.
  • Asumir que tener muchos ACKs garantiza que el código es correcto: la revisión reduce el riesgo, pero no lo elimina; la responsabilidad es distribuida.

Conceptos relacionados

Fuentes primarias

  • Jon Atack — "How to contribute to Bitcoin Core" (jonatack.github.io)
  • Bitcoin Core Contributing Guide (github.com/bitcoin/bitcoin/blob/master/CONTRIBUTING.md)
  • Chaincode Labs — Bitcoin Protocol Development Curriculum (github.com/chaincodelabs)
  • Gloria Zhao — "Bitcoin Core PR Review Club" (bitcoincore.reviews)