blake3-pow

Crates.ioblake3-pow
lib.rsblake3-pow
version
sourcesrc
created_at2025-02-10 12:37:50.275919+00
updated_at2025-03-20 18:59:22.822362+00
descriptionA Proof of Work scheme using the blake3 hash function
homepage
repositoryhttps://gitlab.com/mateolafalce/blake3-pow
max_upload_size
id1549989
Cargo.toml error:TOML parse error at line 17, column 1 | 17 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Mateo Lafalce (mateolafalce)

documentation

README

Proof of Work

crates.io github docs.rs

Fork from Samuel Schlesinger repository for the kkv project.

A proof of work algorithm using the Blake3 cryptographic hash function.

let cost = 20;
let bytes = b"Hello, world!";
// client side
let nonce = blake3_pow::search(bytes, cost)?;
// server side
assert!(blake3_pow::verify(bytes, nonce, cost));

The main point is: we present some bytes and we say that a "proof of work" for some cost is a nonce : [u8; NONCE_SIZE] such that the hash of nonce concatenated to bytes has cost leading zeros.

To verify such a proof, we compute the hash and check if it has cost leading zeros. To search for such a proof, we continually generate random nonces until we guess one which constitutes a proof of work. That is to say, we randomly guess until we get it right.

Use Cases

When you want to expose functionality to the outside world without allowing bots to take advantage of it at any frequency, you must meter usage somehow. By requesting that API calls come affixed with a proof of costly work associated with the particular request, you can acheive this in a stateless way.

Why Blake3?

  • Efficient on consumer hardware
  • No known ASIC implementations
  • Awesome team behind it
  • Inverting seems incredibly hard to me, though that hardly counts as a security review

Examples

git clone https://gitlab.com/mateolafalce/blake3-pow.git
cd blake3-pow
cargo run --example http_pow

References

Commit count: 8

cargo fmt