Part I: Admin
Part II: User

Part III: Technology (this page)

Part IV: Theory

Architecture

Basically, LBC consists of 3 main components: The server, the client and the generator.

The server is what drives the web pages at https://lbc.cryptoguru.org, expects PoW from clients, issues new work to them, keeps track of what has been done already, computes stats and is the top-level instance to check PoW to make sure clients do not cheat about work done. It has some mechanisms to protect the server against DoS and blacklists misbehaving clients.

The client is the "local intelligence" you install and run on your machine. It talks to the server when asking for work or when delivering PoW of work done. It fires up the generator(s) according to the amount of work promised to do, which depends on the time committed and the capabilities of the local machine. The client also tries to make deployment of itself as easy as possible and handles updates of itself, the generator and the blf-file.

The generator is the low-level workhorse. Its sole purpose is to generate hash160s from private keys of a given range and to compare the generated hash160s against those in the BLF file (a bloom filter) containing all known hash160 with funds on them. The generator (or generators if you have a multi-CPU system) is fired up by the LBC client with the correct partitioning of search space, it is given a challenge parameter and has to answer with the correct response to be evaluated by the LBC client. The generator was originally based on brainflayer from Ryan Castellucci, but has been basically rewritten ever since.

Technologies Used

Both the server and the client are written in (modern) Perl. The client requires some decent version (5.16+) to be installed on your system to run. The server uses the Dancer2 framework. The generator is written in C.

Communication between clients and server is done via JSON datagrams. For scalability and efficiency, a minimum data approach is taken: Client-Server communication is negligible in data volume (couple of bytes every round which you define with the -t parameter). The communication is over a SSL-encrypted connection (we use a free letsencrypt certificate) as there may be sensitive data like e.g. your LBC secret (used to protect your LBC Id) or the BTC address you have attached to your LBC Id. The server is still available at a plain HTTP address: http://lbc.cryptoguru.org:5000/, but its use is deprecated.