mirror of
https://github.com/EvernodeXRPL/hpcore.git
synced 2026-04-29 15:37:59 +00:00
56 lines
2.3 KiB
Markdown
56 lines
2.3 KiB
Markdown
# HotPocket Consensus Engine
|
|
|
|
## What's here?
|
|
*In development*
|
|
|
|
A C++ version of hotpocket designed for production envrionments, original prototype here: https://github.com/codetsunami/hotpocket
|
|
|
|
## Libraries
|
|
* Crypto - Libsodium https://github.com/jedisct1/libsodium
|
|
* jsoncons (for JSON and BSON) - https://github.com/danielaparker/jsoncons
|
|
* P2P Protocol - https://google.github.io/flatbuffers
|
|
* Fuse filesystem - https://github.com/libfuse/libfuse
|
|
* Reader Writer Queue - https://github.com/cameron314/readerwriterqueue
|
|
* Concurrent Queue - https://github.com/cameron314/concurrentqueue
|
|
* Boost Stacktrace - https://www.boost.org
|
|
|
|
## Setting up HotPocket development environment
|
|
Run the setup script located at the repo root (tested on Ubuntu 20.04).
|
|
```
|
|
./dev-setup.sh
|
|
```
|
|
|
|
## Build HotPocket
|
|
1. Run `cmake .` (You only have to do this once)
|
|
1. Run `make` (HotPocket binary will be created as `./build/hpcore`)
|
|
1. Refer to the Wiki for instructions on running HotPocket.
|
|
|
|
## FlatBuffers message definitions
|
|
If you update flatbuffers message definitions, you need to run the flatbuffers code generator to update the stubs.
|
|
|
|
Example: When you make a change to `p2pmsg.fbs` defnition file, you need to run this:
|
|
|
|
`flatc -o src/msg/fbuf/ --gen-mutable --cpp src/msg/fbuf/p2pmsg.fbs`
|
|
|
|
## Code structure
|
|
Code is divided into subsystems via namespaces.
|
|
|
|
**conf::** Handles configuration. Loads and holds the central configuration object. Used by most of the subsystems.
|
|
|
|
**crypto::** Handles cryptographic activities. Wraps libsodium and offers convenience functions.
|
|
|
|
**sc::** Handles smart contract process execution and managing user/SC I/O and npl I/O. Makes use of **usr**, **p2p** and **hpfs**.
|
|
|
|
**usr::** Handles user connections. Makes use of **crypto** and **comm**.
|
|
|
|
**p2p::** Handles peer-to-peer connections and message exchange between nodes. Makes use of **crypto** and **comm**.
|
|
|
|
**consensus::** Handles consensus and proposal rounds. Makes use of **usr**, **p2p** and **sc**
|
|
|
|
**ledger::** Maintains the ledger and handles ledger syncing activites.
|
|
|
|
**comm::** Handles generic web sockets communication functionality. Mainly acts as a wrapper for [hpws](https://github.com/RichardAH/hpws).
|
|
|
|
**util::** Contains shared data structures/helper functions used by multiple subsystems.
|
|
|
|
**hpfs::** [hpfs](https://github.com/HotPocketDev/hpfs) state management client helpers. |