2019-10-17 16:06:35 +05:30
2019-10-17 16:06:35 +05:30
2019-10-08 19:41:06 +05:30
2019-10-17 11:16:37 +05:30

Hot Pocket Consensus Engine

What's here?

In development

A C++ version of hotpocket designed for production envrionments, original prototype here: https://github.com/codetsunami/hotpocket

Hot Pocket Wiki

Libraries

Steps to setup Hot Pocket

Install Libsodium

Instructions are based on this.

  1. Download and extract Libsodium 1.0.18 from here.
  2. Navigate to the extracted libsodium directory in a terminal.
  3. Run ./configure
  4. Run make && make check
  5. Run sudo make install

Install Boost

Following Instructions are based on Boost getting started

  1. Download and extract boost 1.71 package from here.
  2. Navigate to the extracted boost directory in a terminal.
  3. Run ./bootstrap.sh
  4. Run sudo ./b2 install (This will compile and install boost libraries into your /usr/local/lib)

Install RapidJSON

  1. Download and extract RapidJSON 1.1 source from here.
  2. Navigate to the extracted directory.
  3. Run sudo cp -r include/rapidjson /usr/local/include/

Install Protocol buffers

Instructions are based on this.

  1. Download and extract Protobuf 3.10.0 from here.
  2. Navigate to the extracted Protobuf directory in a terminal.
  3. Run ./configure
  4. Run make && make check
  5. Run sudo make install
Compiling Protocol buffers message definitions

When you make a change to message.proto defnition file, you need to run this:

protoc -I=./src/p2p --cpp_out=./src/p2p ./src/p2p/message.proto

Run ldconfig

sudo ldconfig

This will update your library cache and avoid potential issues when running your compiled C++ program which links to newly installed libraries.

Install CMAKE

If you use apt, run sudo apt install cmake or follow this.

Build and run Hot Pocket

  1. Navigate to hotpocket repo root.
  2. Run cmake . (You only have to do this once)
  3. Run make (Hot Pocket binary will be created as ./build/hpcore)
  4. Refer to Running Hot Pocket in the Wiki.

Refer to Hot Pocket Wiki for more info.

Code structure

Code is divided into subsystems via namespaces.

conf:: Handles contract configuration. Loads and holds the central configuration object. Used by most of the subsystems.

crypto:: Handles cryptographic activities. Wraps libsodium and offers convenience functions.

proc:: Handles contract process execution and managing user/SC I/O and npl I/O. Makes use of usr and p2p.

usr:: Handles user connections. Makes use of crypto and sock.

p2p:: Handles peer-to-peer connections and message exchange between nodes. Makes use of crypto and sock.

cons:: Handles consensus and proposal rounds. Makes use of usr, p2p and proc

sock:: Handles generic web sockets functionality. Mainly acts as a wrapper for boost/beast.

util:: Contains shared data structures/helper functions used by multiple subsystems.

Description
Consensus Engine for Codius, Linux and Mac Hosts
Readme 19 MiB
Languages
C++ 92.9%
Shell 4.5%
JavaScript 2%
CMake 0.4%
C 0.1%