Skip to content

Latest commit

Β 

History

History
103 lines (80 loc) Β· 1.97 KB

File metadata and controls

103 lines (80 loc) Β· 1.97 KB

Bloc Bootstrap Server

A QUIC-based bootstrap server for the Bloc blockchain network.
Its sole responsibility is peer discovery and coordination β€” not consensus, validation, or block storage.

This server allows nodes behind NAT/firewalls to:

  • register themselves
  • discover other peers
  • prepare for UDP hole punching

πŸš€ Features

  • QUIC (UDP + TLS) based transport
  • Secure peer registration
  • Stateless protocol design (no blockchain state)
  • JSON-based message envelope
  • Graceful session handling
  • Designed for NAT traversal workflows

🧠 Architecture Overview

Node ──QUIC──▢ Bootstrap Server β”‚ β”‚ β”‚ register β”‚ │────────────────▢│ β”‚ β”‚ stores observed addr β”‚ β”‚ │◀──────── peer list / responses

  • One QUIC session per peer
  • One stream per request
  • Server does not retain long-term state (yet)

πŸ“‘ Network Details

  • Protocol: QUIC
  • Transport: UDP
  • Default Port: 4242
  • TLS: Self-signed certificates (for now)

πŸ“‚ Project Structure

bootstrap/ β”œβ”€β”€ certificate/ β”‚ β”œβ”€β”€ server.crt β”‚ └── server.key β”œβ”€β”€ types/ β”‚ β”œβ”€β”€ message.go β”‚ └── peer.go β”œβ”€β”€ utils/ β”‚ └── logger/ β”œβ”€β”€ main.go β”œβ”€β”€ peers.json └── README.md


🧾 Message Protocol

All messages follow a common envelope:

{
  "version": 1,
  "header": {
    "application/json": "true"
  },
  "type": "register",
  "length": 17,
  "payload": { ... }
}
Type Description
register Register node with bootstrap
ping Health check
punch Hole punching coordination (WIP)

🧩 Example: Register Message

{
  "version": 1,
  "header": {
    "application/json": "true"
  },
  "type": "register",
  "length": 17,
  "payload": {
    "id": "node-123"
  }
}