
Bitcoin Dev
Programando la red P2P de Bitcoin: Construye tu propio nodo
Sobre el curso
En este curso vas a aprender cómo un nodo de Bitcoin se une a la red P2P construyendo uno desde cero en el lenguaje de tu preferencia. Aprenderás a codificar/decodificar los mensajes del protocolo P2P, descubrir peers a partir de las semillas DNS de Bitcoin Core, y establecer conexiones (handshake) con otros nodos en la red. También implementarás la lógica para aceptar conexiones entrantes, e inspeccionarás el tráfico P2P para entender qué sucede en la red de Bitcoin desde adentro.
Qué incluye
- clases
- 5
- sesión en vivo
- 1
- tareas
- 5
- quiz
- 1
- recursos
- 11
- certificado
- Sí
Temario
5 clases · 1 sesión en vivo
- 01Conclusión
02Clase 1 – Introducción al curso y Peer discovery
Objetivos de aprendizaje
Al terminar esta clase, los estudiantes podrán:Explicar cómo un nodo se conecta a la red sin conocer las direcciones de los demás participantes
Obtener una lista de direcciones IP de nodos candidatos a partir de semillas DNS
Entender por qué no se puede confiar ciegamente en la información proporcionada por las semillas DNS
Temas a cubrir
Bloque 1: Presentación del cursoLo que vamos a programar: un nodo que se conecta a la red de Bitcoin y observa y entiende sus mensajes
Lo que NO construiremos: bloques, mempool, validación ni consenso
Objetivo del curso: comprender cómo funciona la capa P2P de Bitcoin
Metodología: seminario y demostración en clase, implementación independiente, con lenguaje libre
Forma de entrega y evaluación
Bloque 2: El problema del arranque y las semillas DNS
Cómo localizas al primer participante en la red
Es necesario contar con una dirección antes de solicitar otra
Qué otras alternativas hay y por qué DNS es el mecanismo predeterminado
Qué información proporciona la consulta, y qué te asegura esa respuesta y qué no
Las direcciones embebidas en el código cuando las semillas no responden
Bloque 3: Los límites de las semillas
Un punto centralizado en un sistema diseñado para evitar la centralización
Qué puede y qué no puede hacer una semilla maliciosa
Por qué se acepta de igual manera
Actividades
Demo: consultar las semillas con dig y leer la respuesta
Demo: recorrer el código de Bitcoin Core donde se declaran las semillas y las direcciones embebidas
Demo: programa que consulta las semillas y loguea las direcciones obtenidas
03Clase 2 – Gestión de direcciones: Addrman
Objetivos de aprendizaje
Conectar por TCP a las direcciones obtenidas a partir de las semillas y registrar cuáles no responden
Implementar un gestor de direcciones básico: guardar, clasificar el resultado de cada intento y persistirlo
Explicar cómo Bitcoin Core almacena las direcciones que conoce
Temas a cubrir
Bloque 1: Vamos a conectarnos a un candidato vía TCPRepaso de cómo funciona TCP
Por qué conectarse es la única forma de saber qué direcciones sirven
Qué ocurre cuando una dirección está muerta
Qué registrar en cada intento: cuándo se probó, si respondió y cuántas veces falló
Bloque 2: Qué recuerda un nodo
Direcciones que te pasaron y direcciones que ya probaste
Por qué conviene guardarlas en disco y no solo en memoria
Cómo lo resuelve Bitcoin Core: AddrMan y peers.dat
Por qué Core las guarda separadas y qué gana un atacante que llena tu almacén
Actividades
Demo: programa que conecta a las direcciones de la clase anterior y registra cuáles responden
Demo: peers.dat en un nodo de Bitcoin Core
04Clase 3 – Mensajes
Objetivos de aprendizaje
Serializar y deserializar los primitivos del protocolo
Armar el header de un mensaje y calcular su checksum
Construir un version y un verack listos para enviar
Temas a cubrir
Bloque 1: PrimitivosCompactSize
Arrays y strings
IPv4/IPv6
Bloque 2: Header y payload
Magic
Comando
Longitud del payload
Checksum
Bloque 3: Armando el par version y verack
Campos del payload de version
Bits de servicio
verack sin payload
Actividades
Demo: armar un version desde cero
05Clase 4 – Conectando con un peer
Objetivos de aprendizaje
Hacer un handshake con un nodo real de la red
Leer lo que el otro nodo declara sobre sí mismo en su mensaje version
Mantener conexiones abiertas mientras se procesan los mensajes entrantes
Temas a cubrir
Bloque 1: Completar el handshakeSecuencia completa del intercambio
Negociación de la versión en común
Uso del nonce
Mensajes de negociación entre version y verack
Leer el mensaje version del peer
Bloque 2: Mantener la conexión
Bucle de recepción
Reconstruir mensajes P2P
Manejo de mensajes desconocidos
ping / pong
Bloque 3: Varias conexiones a la vez
Qué mantener de cada peer
Slots de conexión
Qué hacer cuando una conexión se cae
Actividades
Demo: handshake, tráfico entrante y un intercambio ping/pong contra un nodo de mainnet
06Clase 5 – Conexiones entrantes y addr relay
Objetivos de aprendizaje
Escuchar en un puerto y aceptar conexiones entrantes de otros peers de la red
Pedir, recibir y anunciar direcciones
Alimentar su gestor de direcciones con lo que llega de la red
Temas a cubrir
Bloque 1: Aceptar conexionesExponer tu nodo en un puerto
Responder a solicitudes de handshake entrantes
Diferencia entre conexiones inbound y outbound
Bloque 2: Addr relay
getaddr y addr
Estructura del payload de addr
addrv2 y su negociación con sendaddrv2
Pueden llegar direcciones sin que las pidas
Anunciar tu propia dirección para que otros te encuentren
Alimentar el gestor de direcciones
Actividades
Demo: tu nodo expuesto en mainnet y los peers inbound que ya se le conectaron
Demo: getaddr a un peer y las direcciones que devuelve
Este curso todavía no tiene cupo abierto
Déjanos tu email y te avisamos en cuanto se abra una nueva cohorte.
Un momento…
¡Listo! Te avisaremos por email cuando este curso abra.
No pudimos registrar tu interés. Inténtalo de nuevo.
Esta función estará disponible pronto.
Inicio 7 sept 2026
Estoy interesado/a