Briolette - experimental framework for offline-enabled digital currency

Briolette is an experimental framework for researching offline digital currency designs.  This project is a proof-of-concept only and does not reflect a completed system nor a finalized design.  Its purpose is solely for research and experimentation. This is not an officially supported Google product.

Overview

At a high level, the current proof of concept is striving to enable cash-like properties:

while realizing the benefits of being digital:

There are a number of features that make up briolette's core design:

Every "wallet" carries a private secret which can have its public portion, or credential, randomized. Transference of tokens depends on valid credentials which are locked in, or committed to, by the prior holder of the token upon transference.  The prior holder must transfer the token using the credential that they themselves received the token on.  This creates a verifiable chain of history between these random credentials that are not directly linked to the participants. The credentials themselves have controlled linkability which provides different privacy properties from transactional and global system perspectives.  The current prototype is built around ECDAA, using this implementation.  Further research on the underlying crypto approach under way to improve on ECDAA.

See the theory of operation for a more detailed description of how the system services operates as well as a discussion of trust and how it is established.

See the design concepts for a more detailed discussion of the underlying design objectives and how the proof of concept attempts to meet them.

We are also beginning to work on design explainers as a means of helping make the design more approachable!

Building

System dependencies

Your system will need to have the Rust programming language installed -- version 1.68.0 or newer.

Additionally, see xaptum/ecdaa for any system requirements for building AMCL or ECDAA, such as cmake.

Diagram generation depends on PlantUML.

Building

The easiest way to build is to use cargo from the root directory (where this file is):

cargo build

Running

Simply run:

source src/utils.sh
start_servers

This will start all the servers in an order that ensures all data creation occurs in the right order. Additionally, it will perform one 2 token transaction.

Simulation

src/simulation/ carries a simple simulation system. To build:

cd src/simulation/briolettesim
cargo build

To run: ./target/debug/briolette-sim

All scenario configuration is currently hard-coded.

Contributions, etc

Please see docs for details.