ReliableBroadcast

command module
v0.0.0-...-023f5f6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 24, 2020 License: MIT Imports: 15 Imported by: 0

README

ReliableBroadcast

This is a demo reliable broadcast channel. The demo is for chatting -- each user can broadcast messages to all the other users, and if any of the users get the message all non byzantine nodes will also have recieved that message.

What is this?

A Reliable Broadcast channel ensures that all honest parties deliver the same broadcasted message or none at all. A Reliable Broadcast channel will work in the face of t byzantine faults as long as t < n / 3. Byzantine faults are when nodes can lie or go down. This is a networking primitive that is required for many MPC applications, such as threshold signatures schemes

Specifically, this project is an implementation of the Bracha Broadcast algorithm in Go.

Network Topography

This system is a fully connected graph. All nodes maintain mTLS connections with all other nodes, if the nodes are up. The system supports nodes leaving and coming back in, but if t < n / 3 the system will not make progress and messages during that time won't be delivered.

Setup + Running

You need cfssl (https://github.com/cloudflare/cfssl) which this project uses to manage keys. Do the following to install it:

go get -u github.com/cloudflare/cfssl/cmd/...

Then specify the configuration of clients in config.json. There should be 3f + 1 clients, where f is the number of byzantine nodes supported

To run the demo (which will build everything then run each client in a tmux window) run

make run

To do things manually, run make -- it will generate all the required keys for you and build the binary

Then run:

client -config config.json -id $CLI_ID

This will run a particular client

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL