Skip to content

wnfs-wg/deterministic-bloom

Repository files navigation

Deterministic Bloom Filter

Crate Npm Code Coverage Build Status License Docs Discord

⚠️ Work in progress ⚠️

Outline

Crates

Usage

  • Add the following to the [dependencies] section of your Cargo.toml file for using the rust-only deterministic-bloom crate/workspace:
deterministic-bloom = "0.1.0"
  • Add the following to the [dependencies] section of your Cargo.toml file for using deterministic-bloom-wasm crate/workspace:
deterministic-bloom-wasm = "0.1.0"

Testing the Project

  • Run tests for crate/workspace deterministic-bloom:

    cd deterministic-bloom && cargo test
  • To run tests for crate/workspace deterministic-bloom-wasm, follow the instructions in deterministic-bloom-wasm, which leverages wasm-pack.

Benchmarking the Project

For benchmarking and measuring performance, this workspaces provides a Rust-specific benchmarking package leveraging criterion and a test_utils feature flag for integrating proptest within the suite for working with strategies and sampling from randomly generated values.

  • Run benchmarks

    cargo bench -p deterministic-bloom-benches

Note: Currently, this workspace only supports Rust-native benchmarking, as wasm-bindgen support for criterion is still an open issue. However, with some extra work, benchmarks can be compiled to wasi and run with wasmer/wasmtime or in the brower with webassembly.sh. Please catch-up with wasm support for criterion on their user-guide.

Setting-up deterministic-bloom-wasm

The Wasm targetted version of this project relies on wasm-pack for building, testing, and publishing artifacts sutiable for Node.js, web broswers, or bundlers like webpack.

Please read more on working with wasm-pack directly in deterministic-bloom-wasm.

Contributing

🎈 We're thankful for any feedback and help in improving our project! We have a contributing guide to help you get involved. We also adhere to our Code of Conduct.

Nix

This repository contains a Nix flake that initiates both the Rust toolchain set in rust-toolchain.toml and a pre-commit hook. It also installs helpful cargo binaries for development. Please install nix and direnv to get started.

Run nix develop or direnv allow to load the devShell flake output, according to your preference.

Formatting

For formatting Rust in particular, please use cargo +nightly fmt as it uses specific nightly features we recommend by default.

Pre-commit Hook

This library recommends using pre-commit for running pre-commit hooks. Please run this before every commit and/or push.

  • If you are doing interim commits locally, and for some reason if you don't want pre-commit hooks to fire, you can run git commit -a -m "Your message here" --no-verify.

Recommended Development Flow

Conventional Commits

This project lightly follows the Conventional Commits convention to help explain commit history and tie in with our release process. The full specification can be found here. We recommend prefixing your commits with a type of fix, feat, docs, ci, refactor, etc..., structured like so:

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

Getting Help

For usage questions, usecases, or issues reach out to us in our Discord channel.

We would be happy to try to answer your question or try opening a new issue on Github.

External Resources

These are references to specifications, talks and presentations, etc.

License

This project is licensed under the Apache License 2.0, or http://www.apache.org/licenses/LICENSE-2.0.

About

A deterministic Bloom filter with support for saturation. Suitable for distributed use cases and as a cryptographic primitive.

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published