Blockchain for African countries election monitoring
# ubu-block
Uchaguzi bila Ubaguzi Blockchain
A transparent, tamper-evident, and community-driven blockchain platform for election results.
It is currently focused on Kenyan election's data but can easily be adapted for other countries.
> [!NOTE]
> This code is actively in active development and may break. PRs welcome
## Node Types
- **Submission Nodes:** Allow users to submit polling station results.
- **Observer Nodes:** Provide public, read-only access for transparency and independent verification.
- **Verification Nodes:** Cross-reference submitted results with official sources and participate in reward submission.
## Features
1. **Immutable:** You can't make changes, only append—no `fungua server` and other shenanigans.
2. **Distributed:** No single point of data storage.
3. **Accessible:** Runs on SQLite, widely supported.
4. **Community Driven:** Dynamic number of signatories.
5. **Node Roles:** Submission, Observer, and Verification nodes for robust, transparent operations.
6. **BFT Consensus:** Tolerates up to 1/3 malicious nodes.
7. **Audit Trail:** All submissions (accepted or rejected) are recorded.
8. **Encrypted Communication:** End-to-end encryption for all node interactions.
## Getting Started
```sh
git clone ubu-block
cd ubu-block
mkdir data
```
If you want to run binaries without installing Rust:
1. Get the latest binary from the releases page.
2. Replace `cargo run` with `ubu-block`
3. Download the relevant files (see "Setup initial files").
### Setup initial files
```sh
mkdir data
# Create the db files
cp src/sql/empty.db data/blockchain.db
cp src/sql/empty.db data/private.db
```
### Initialize a Blockchain
```sh
cargo run init --init setup_constituencies.sql
```
You should get:
```
INFO ubu_block] Blockchain was successfully initialized!
```
### Add Some Blocks
Currently `ubu-block` has very limited dummy data, but this should change as soon as IEBC publishes the voter register.
For testing purposes, limited data from pr …