@cybearl/celk :: about 1.10.0

A B O U T

Celk is a personal experiment in brute-forcing crypto addresses at scale, it started as a CLI in 2023 and grew into a distributed engine with C++ workers, a Next.js dashboard, and far too many rewrites, here's how it got here, and what it's made of.

How it got here

2023

It started as a CLI

Pure TypeScript, I wrote the engine, every algorithm it needed, and CyBuffer, an extension of Node.js's Uint8Array built specifically for shuffling bytes through SHA256, RIPEMD160 and secp256k1 without allocating on every step, CyBuffer eventually moved to CyPack, where it still lives.

2024

Then a Cybearl service

Celk got absorbed into the main Cybearl app as one of its modules, that site is now being rebuilt as a plain vitrine, with no worker plumbing, so Celk had to move out and stand on its own again.

2025

Standalone app, C++ workers

I split the engine into a separate native binary and ran it through Next.js instrumentation at first, that didn't scale well, so I separated it into runners and workers: workers do the cryptographic grinding, runners orchestrate them, they first talked over RabbitMQ, then I switched to an HTTP sync endpoint, simpler infra, fewer moving parts.

Next

GPU backend

An optional CUDA backend, reusing the same worker protocol so a GPU worker looks identical to a CPU one from the outside, the idea is to reach four to five orders of magnitude over the current CPU baseline, i'm planning on building an home server that'll be powered by some solar panels and will eventually be the subject of a YouTube video.

Under the hood

C++ workers

Native binaries running the actual brute-force loop: PCG64 / sequential / random-bytes key generators, secp256k1 derivation, SHA256 + RIPEMD160 for Bitcoin, Keccak for Ethereum, and a closest-match comparator that records the longest consecutive byte run per target, so even when no key matches, you can see how close it got.

Runners

Node daemons that spawn workers per address list, forward their events, and sync with the app on a heartbeat, they handle process lifecycle and local match storage so the orchestrator only sees a clean stream of progress.

Orchestrator + dashboard

A Next.js app with a tRPC API, a Drizzle-backed Postgres, and an instrumentation-time orchestrator that merges hash rates, attempt counters, and closest matches across runners. The dashboard you're using right now is the same surface I use to babysit it.

A note on the algorithms

I wrote them all myself the first time around, I don't anymore, because I won't spend years trying to achieve 10% of the performance of the algorithms written by some guys that spent their entire careers on this stuff, my current C++ engine leans on libsecp256k1.

Built with

FrontendNext.js · React · Tailwind · Radix
APItRPC · Drizzle ORM · Postgres
WorkersC++ · libsecp256k1 · vcpkg
SharedCyPack (logger, env checks, CyBuffer)
InfraDocker · HTTP sync
Celk is more of a brag than a tool, the odds of hitting a funded address are astronomically low, it's here because I wanted to build it, not because it's going to find anything.