{
  "id": 13535120,
  "title": "Running a BFT blockchain as one native binary on a 2 GB VPS — what broke and what held",
  "url": "https://urgent.news/2026/10/10/running-a-bft-blockchain-as-one-native-binary-on-a-2-gb-vps-what",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-10-10T21:09:42.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/syriandeveloper/running-a-bft-blockchain-as-one-native-binary-on-a-2-gb-vps-what-broke-and-what-held-4ff1"
  },
  "original_language": "en",
  "account": "The Layer-1 blockchain, Janzeer, combines a stake-free BFT consensus mechanism, 15-second slots, and a two-round voting system. This system delivers finality within a single block, and the entire network - including four validator nodes, PostgreSQL, and a Telegram mini-game that pays players - runs on a single 2 GB, single-core VPS. The Node is built as a Spring Boot application in Kotlin, employing Netty for P2P communication, JPA on PostgreSQL, REST, and JSON-RPC APIs. Additionally, it serves an explorer SPA. Running multiple instances of the node would not fit within the 2 GB limit, so each process is compiled as a GraalVM native image, resulting in a ~250 MB binary that takes 3 seconds to boot and is capped at a memory usage of -Xmx256m. Shared memory pages between the four processes amount to around 200 MB per node. Peak memory usage during a 6-hour rehearsal was 933 MB. Three critical rules help the native image function effectively: avoiding lazy injections, registering classes instantiated reflectively, and building messages using reflection for the wire codec. The first native image failed to send WebSocket notifications because the notification envelope was missing from the hints generated by the tracing agent. This led to a failure in the image as Jackson serialized the envelope fine on the JVM but not in the native image. Additionally, Hibernate's bytecode provider was disabled (hibernate.bytecode.provider=none), and a capped DB pool was used to prevent the native image from growing towards the size of the physical RAM per process. Extensive testing, including a 7-day acceptance test, confirmed the effectiveness of these measures. The post concludes with advice for those seeking to replicate this setup, emphasizing the importance of writing reflection hints for everything the codec or JSON envelope touches, testing database semantics on the deployed database, measuring boot times, avoiding simultaneous restarts of the quorum, and implementing round-robin slot ownership to minimize downtime.",
  "summary": "I run a small Layer-1 called Janzeer: stake-free BFT, 15-second slots, two voting rounds, finality in one block. Mainnet went live on 2026-10-01. The whole network — four validator nodes, PostgreSQL, and a Telegram mini-game that pays players — runs on one 2 GB, single-core VPS. This post is about how that is possible and what went wrong on the way. No token talk; the coin is not on any exchange…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}