ResilientDB is a High Throughput Yielding Permissioned Blockchain Fabric founded by ExpoLab at UC Davis in 2018. ResilientDB advocates a system-centric design by adopting a multi-threaded architecture that encompasses deep pipelines. Further, ResilientDB separates the ordering of client transactions from their execution, which allows it to process messages out-of-order.
- ResilientDB's core consensus protocol is based on a highly optimized PBFT [Castro and Liskov, 1998] implementation to achieve agreement among replicas. The core consensus layer is further expanded with the state-of-the-art consensus protocols [release are planned] such as GeoBFT [blog, released], PoE, RCC, RingBFT, PVP, PoC, HotStuff, and DAG.
- ResilientDB expects minimum of 3f+1 replicas, where f is the maximum number of arbitrary (or malicious) replicas.
- ReslientDB designates one of its replicas as the primary (replicas with identifier 0), which is also responsible for initiating the consensus.
- ResilientDB exposes a wide range of API services such as a Key-Value, Smart Contracts, UTXO, and Python SDK. Examples DApp that are being built on ResilientDB are: NFT Marketplace and Debitable.
- To facilitate the persistence of the chain and chain state, ResilientDB provides durability through LevelDB and RocksDB.
- To support deployment and maintenance, ResilientDB provides access to a seamless GUI display along with access to Grafana for plotting monitoring data.
- [Historial Facts] The ResilientDB project was founded by Mohammad Sadoghi along with his students (Suyash Gupta as the lead Architect, Sajjad Rahnama, Jelle Hellings) at UC Davis in 2018 and was open-sourced in late 2019. On September 30, 2021, we released ResilientDB v-3.0. In 2022, ResilientDB was completely re-written and re-architected (Junchao Chen as the lead Architect along with the entire NexRes Team), paving the way for a new sustainable foundation, referred to as NexRes (Next Generation ResilientDB); thus, on September 30, 2022, NexRes-v1.0.0 was born, marking a new beginning for ResilientDB.
You may find the latest ResilientDB documentation, including a programming guide, on our blog repository. This README file provides basic setup instructions.
- Software Stack Architecture
- Platform Layer: Consensus Manager Architecture (ordering, recovery, network, chain management, storage)
- Recovery & Checkpoint Design [TBA]
- Durability Design
- Service Layer: Transaction Manager Design (runtime and chain state) [TBA]
- Tooling & API Layer: Key-Value, Solidity Smart Contract, Unspent Transaction Output (UTXO) Model, Python SDK
- Installing & Deploying ResilientDB
- Build Your First Application: KV Service, UTXO
- Dashboard: Monitoring, Deployment, Data Pipeline
- System Parameters & Configuration [TBA]
- Continuous Integration & Testing [TBA]
Ubuntu 20.*
Install dependencies:
./INSTALL.sh
Run ResilientDB (Providing a Key-Value Service):
./service/tools/kv_service/service_tools/start_kv_service.sh
- This script will start 4 replica and 1 client. Each replica instantiates a key-value store.
Build Interactive Tools:
bazel build service/tools/kv_service/api_tools/kv_service_tools
Run tools to set a value by a key (for example, set the value with key "test" and value "test_value"):
bazel-bin/service/tools/kv_service/api_tools/kv_service_tools service/tools/config/interface/service.config set test test_value
You will see the following result if successful:
client set ret = 0
Run tools to get value by a key (for example, get the value with key "test"):
bazel-bin/service/tools/kv_service/api_tools/kv_service_tools service/tools/config/interface/service.config get test test_value
You will see the following result if successful:
client get value = test_value
Run tools to get all values that have been set:
bazel-bin/service/tools/kv_service/api_tools/kv_service_tools service/tools/config/interface/service.config getvalues
You will see the following result if successful:
client getvalues value = [test_value]