Announcing Crux, a secure enclave 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.