Protobuf initial implementation.
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
- Crypto - Libsodium https://github.com/jedisct1/libsodium
- Websockets - Boost|Beast https://github.com/boostorg/beast
- RapidJSON - http://rapidjson.org
- Protocol - https://github.com/protocolbuffers/protobuf
Steps to setup Hot Pocket
Install Libsodium
Instructions are based on this.
- Download and extract Libsodium 1.0.18 from here.
- Navigate to the extracted libsodium directory in a terminal.
- Run
./configure - Run
make && make check - Run
sudo make install
Install Boost
Following Instructions are based on Boost getting started
- Download and extract boost 1.71 package from here.
- Navigate to the extracted boost directory in a terminal.
- Run
./bootstrap.sh - Run
sudo ./b2 install(This will compile and install boost libraries into your/usr/local/lib)
Install RapidJSON
- Download and extract RapidJSON 1.1 source from here.
- Navigate to the extracted directory.
- Run
sudo cp -r include/rapidjson /usr/local/include/
Install Protocol buffers
Instructions are based on this.
- Download and extract Protobuf 3.10.0 from here.
- Navigate to the extracted Protobuf directory in a terminal.
- Run
./configure - Run
make && make check - Run
sudo make install
Compile Protocol buffers
- Run
protoc -I=./src/p2p --cpp_out=./src/p2p ./src/p2p/message.protoEx - For message protobufprotoc -I=./src/p2p --cpp_out=./src/p2p ./src/p2p/message.proto
Run ldconfig
- Run
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
- navigate to hotpocket repo root.
- Run
cmake .(You only have to do this once) - Run
make - Run
./build/hpcore new ~/mycontract. This will initialize a new contract directorymycontractin your home directory. - Take a look at
~/mycontract/cfg/hp.cfg. This is your new contract config file. You can modify it according to your contract hosting requirements. - Optional: Run
./build/hpcore rekey ~/mycontractto generate new public/private key pair. - Run
./build/hpcore run ~/mycontractto run your smart contract (to do).
Code structure
Code is divided into subsystems via namespaces. Some subsystems mentioned here are yet to be introduced.
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 convinience functions.
proc
Handles contract process execution.
usr
Handles user connections and processing of user I/O with the smart contract. Makes use of crypto and sock.
ntn
Handles node-to-node connections and message exchange between nodes. Also handles smart contract node-party-line (npl) I/O. Makes use of crypto and sock.
cons
Handles consensus and proposal rounds. Makes use of usr, ntn and proc
sock
Handles generic web sockets functionality. Mainly acts as a wrapper for boost/beast.
shared
Contains shared data structures/helper functions used by multiple subsystems. Used by most of the subsystems.