Skip to content
A distributed key-value storage that's tolerant to Byzantine fault.
Branch: master
Clone or download
Latest commit 354ad56 Sep 14, 2018

BFTKV (to be changed)

BFTKV is a distributed key-value storage which is tolerant to Byzantine fault. See Abstract for details.

Additional documents:

Design Document (restricted)

Paper (draft)


Implementation Notes

Test Notes


  1. Install Go 1.8.
  2. go get -u
  3. Install GnuPG 2.x
  4. Install Docker (if you want to run BFTKV in a Docker container)
  5. Run in scripts ( -host bftkv for Docker)
  6. If bftkv runs with KeyTransparency, run $GOPATH/src/


cd /
go build -o bftkv cmd/main.go


A list of parameters that can be supplied to bftkv is given below:

Flag     Purpose                               Default
-home    Path to PGP home directory,           ~/.gnupg
-sec     Secret key ring path,                 $home/secring.gpg
-pub     Public key ring path,                 $home/pubring.gpg
-rev     Revocation list path,                 $home/revocation.gpg
-db      Database path,                        db
-api     Http api address,                     localhost:5792
-ws      Web socket port,                      5001

Run Options

  1. Run a node bftkv -home gnupg.key

  2. Run a BFTKV cluster cd scripts/run; ../

  3. Run a BFTKV cluster in Docker

docker build -t bftkv .
docker run -d bftkv


BFTKV includes a visualization tool (located in visual/) for observing the current system state. The tool can display

  • Trust graphs for the servers
  • Read, write and sign requests sent to the servers
  • Revoked and inaccessible servers

To show the graph, run and open visual/index.html.

Write in Action


Revoke on Read in Action

Revoke on Read


Copyright 2017, Yahoo Holdings Inc.

Licensed under the terms of the Apache license. See LICENSE file in project root for terms.

You can’t perform that action at this time.