priyadharsun 9cc5d46792 Outbound message re architecture (#116)
* Removing const keyword from send function definition in comm_session class.

* Rearchitecture outgoing messages.

* Removed concurrentqueue.h file out of the project.

* Updated ReadMe file.

* Minor comment reformattings.

* Readme update with concurrent queue github link.

* Removed should_stop_messaging_threads variable.

* Updated ReadMe file

* Updated and Changed the formatting of the Blake3 build script in ReadMe.

* Resolved review comment.

Co-authored-by: Savinda Senevirathne <savindadilsara@gmail.com>
2020-09-11 12:26:16 +05:30
2020-09-09 13:19:08 +05:30
2019-12-21 07:05:20 +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

Libraries

Steps to setup Hot Pocket (For Ubuntu/Debian)

Install CMAKE 3.16

  1. Download and extract cmake-3.16.0-rc3-Linux-x86_64.tar.gz
  2. Navigate into the extracted directory in a terminal.
  3. Run sudo cp -r bin/* /usr/local/bin/
  4. Run sudo cp -r share/* /usr/local/share/

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 && make && make check
  4. Run sudo make install

Install blake3

  1. Clone blake3 library repository
  2. Navigate into the directory in a terminal.
  3. cd c to navigate to the C implementation folder
  4. gcc -shared -fPIC -O3 -o libblake3.so blake3.c blake3_dispatch.c blake3_portable.c blake3_sse2_x86-64_unix.S blake3_sse41_x86-64_unix.S blake3_avx2_x86-64_unix.S blake3_avx512_x86-64_unix.S
  5. sudo cp blake3.h /usr/local/include/
  6. sudo cp libblake3.so /usr/local/lib/

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 jsoncons

  1. Download and extract jsoncons v0.153.3 source from here.
  2. Navigate to the extracted directory.
  3. Run sudo cp -r include/jsoncons /usr/local/include/
  4. Run sudo mkdir -p /usr/local/include/jsoncons_ext/ && sudo cp -r include/jsoncons_ext/bson /usr/local/include/jsoncons_ext/

Install FlatBuffers

Instructions are based on this.

  1. Clone the git respository into a new directory from here.
  2. Build with CMake
git clone https://github.com/google/flatbuffers.git
cd flatbuffers
cmake -G "Unix Makefiles"
make
  1. Run sudo cp -r include/flatbuffers /usr/local/include/
  2. Run sudo snap install flatbuffers --edge
Compiling FlatBuffers message definitions

Example: When you make a change to p2pmsg_content_.fbc defnition file, you need to run this:

flatc -o src/msg/fbuf/ --gen-mutable --cpp src/msg/fbuf/p2pmsg_content.fbs

Install libfuse

  1. sudo apt-get install -y meson ninja-build pkg-config
  2. Download libfuse 3.8 and extract.
  3. mkdir build; cd build
  4. meson .. && ninja
  5. sudo ninja install

Install reader-writer queue

  1. Download readerwritequeue 1.0.3 and extract.
  2. mkdir build; cd build
  3. cmake ..
  4. sudo make install

Install concurrent queue

  1. Download concurrentqueue 1.0.2 and extract.
  2. Run sudo cp concurrentqueue.h /usr/local/include/

Run ldconfig

sudo ldconfig

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

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.

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.

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

comm:: Handles generic web sockets communication functionality. Mainly acts as a wrapper for websocketd/websocat.

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

hpfs:: hpfs state management client helpers.

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%