Announcing Crux, a secure enclave for Quorum

Announcing Crux, a secure enclave for Quorum
Crux Data privacy for Quorum

We’ve been working with and contributing one way or another to Quorum since it was made public back in November 2016. Regardless of your views of JP Morgan, having one of the worlds largest financial firms putting their weight behind Ethereum blockchain technology and creating Quorum, was always a significant statement, and it helped further cement our view on the potential of Ethereum in enterprise.  

Quorum itself is made up of two parts — the Quorum client which is a fork of Geth, and a secure enclave which is written in Haskell. In order to bring Constellation in line with the Geth and Quorum clients, and tap into the significant Golang community, we decided to rewrite it from scratch in Go, creating Crux.  

Crux is a drop in replacement for Constellation in Quorum blockchains. It supports the same configuration arguments as Constellation to ensure a straight forwards migration.  

We’ve got some great enhancements planned for Crux in the future, and we’re really keen to grow a strong community around it going forwards. To make it as straight forwards as possible to get up and running with it, we’ve got a version of the Quorum 7 nodes example that uses Crux available on GitHub.  

Otherwise, you can head to the repo and dig around the code.  

git clone https://github.com/blk-io/crux.git
cd crux
make setup && make
./bin/crux

Usage of ./crux:
    crux.config              Optional config file
    --alwayssendto string    List of public keys for nodes to send all
 transactions too

    --berkeleydb             Use Berkeley DB for working with an
existing Constellation data store [experimental]

    --generate-keys string   Generate a new keypair

    --othernodes string      "Boot nodes" to connect to to discover
the network

    --port int               The local port to listen on (default -1)

    --privatekeys string     Private keys hosted by this node

    --publickeys string      Public keys hosted by this node

    --socket string          IPC socket to create for access to the
Private API (default "crux.ipc")

    --storage string         Database storage file name 
(default "crux.db")

    --url string             The URL to advertise to other nodes 
(reachable by them)

    --verbosity int          Verbosity level of logs (default 1)

    --workdir string         The folder to put stuff in (default: .) 
(default ".")

Crux uses the same NaCl crypto library that constellation supports, and you can generate new keys using the generate-keys parameter:

crux --generate-keys myKey

Then you can run it up in a manner almost identical to Constellation:

crux --url=http://127.0.0.1:9001/ --port=9001 --workdir=crux --
publickeys=tm.pub --privatekeys=tm.key --
othernodes=https://127.0.0.1:9001/

We’ve migrated away from BerkeleyDB for storage and default to LevelDB used by Geth. However, bindings for BerkeleyDB are available if you want to work with an existing Constellation instance.