harmony

module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 18, 2020 License: MIT

README

Harmony

Build Status gopherbadger-tag-do-not-edit Discord Coverage Status Go Report Card

Installation Requirements

GMP and OpenSSL

brew install gmp
brew install openssl

Dev Environment Setup

The required go version is: go1.12

export GOPATH=$HOME/<path_of_your_choice>

mkdir -p $HOME/<path_of_your_choice>/src/github.com/harmony-one

cd $HOME/<path_of_your_choice>/src/github.com/harmony-one

git clone git@github.com:harmony-one/mcl.git
git clone git@github.com:harmony-one/bls.git
git clone git@github.com:harmony-one/harmony.git

cd harmony

make

Note: make sure to run scripts/install_build_tools.shto make sure build tools are of correct versions.

Build

If you want to bypass the Makefile:

export CGO_CFLAGS="-I$GOPATH/src/github.com/harmony-one/bls/include -I$GOPATH/src/github.com/harmony-one/mcl/include -I/usr/local/opt/openssl/include"
export CGO_LDFLAGS="-L$GOPATH/src/github.com/harmony-one/bls/lib -L/usr/local/opt/openssl/lib"
export LD_LIBRARY_PATH=$GOPATH/src/github.com/harmony-one/bls/lib:$GOPATH/src/github.com/harmony-one/mcl/lib:/usr/local/opt/openssl/lib
export LIBRARY_PATH=$LD_LIBRARY_PATH
export DYLD_FALLBACK_LIBRARY_PATH=$LD_LIBRARY_PATH
export GO111MODULE=on

Note : Some of our scripts require bash 4.x support, please install bash 4.x on MacOS X.

Build all executables

You can run the script ./scripts/go_executable_build.sh to build all the executables.

Build individual executables

Harmony server / main node:

./scripts/go_executable_build.sh harmony

Wallet:

./scripts/go_executable_build.sh wallet

Tx Generator:

./scripts/go_executable_build.sh txgen

Usage

You may build the src/harmony.go locally and run local test.

Running local test

The debug.sh script calls test/deploy.sh script to create a local environment of Harmony blockchain devnet based on the configuration file. The configuration file configures number of nodes and their IP/Port. The script starts 2 shards and 7 nodes in each shard.

./test/debug.sh
Test local blockchain
source scripts/setup_bls_build_flags.sh
./bin/wallet list
./bin/wallet -p local balances
Terminate the local blockchain
./test/kill_nodes.sh

Testing

Make sure you use the following command and make sure everything passed before submitting your code.

./test/test_before_submit.sh

License

Harmony is licensed under the MIT License. See LICENSE file for the terms and conditions.

Harmony includes third-party open source code. In general, a source subtree with a LICENSE or COPYRIGHT file is from a third party, and our modifications thereto are licensed under the same third-party open source license.

Also please see our Fiduciary License Agreement if you are contributing to the project. By your submission of your contribution to us, you and we mutually agree to the terms and conditions of the agreement.

Contributing To Harmony

See CONTRIBUTING for details.

Development Status

Features Done
  • Fully sharded network with beacon chain and shard chains
  • Cuckoo-rule based resharding
  • Staking on beacon chain
  • Distributed randomness generation with VRF and VDF (Proof-of-Concept VDF)
  • Sharded P2P network and P2P gossiping
  • FBFT (Fast Byzantine Fault Tolerance) Consensus with BLS multi-signature
  • Account model and support for Solidity
  • Simple wallet program
  • Information disposal algorithm using erasure encoding (to be integrated)
  • Blockchain explorer with performance report and transaction lookup
  • Transaction generator for loadtesting
Features To Be Implemented
  • Secure VDF
  • Consensus view-change protocol
  • Cross-shard transaction
Features Planned after Mainnet
  • Integration with WASM
  • Fast state synchronization
  • Kademlia routing

Directories

Path Synopsis
Package accounts implements high level Ethereum account management.
Package accounts implements high level Ethereum account management.
abi
Package abi implements the Ethereum ABI (Application Binary Interface).
Package abi implements the Ethereum ABI (Application Binary Interface).
abi/bind
Package bind generates Ethereum contract Go bindings.
Package bind generates Ethereum contract Go bindings.
keystore
Package keystore implements encrypted storage of secp256k1 private keys.
Package keystore implements encrypted storage of secp256k1 private keys.
api
v0
v1
v2
cmd
common
Package core implements the Ethereum consensus protocol.
Package core implements the Ethereum consensus protocol.
rawdb
Package rawdb contains a collection of low level database accessors.
Package rawdb contains a collection of low level database accessors.
rawdb/mock
Package mock_rawdb is a generated GoMock package.
Package mock_rawdb is a generated GoMock package.
state
Package state provides a caching layer atop the Ethereum state trie.
Package state provides a caching layer atop the Ethereum state trie.
types
Package types contains data types related to Ethereum consensus.
Package types contains data types related to Ethereum consensus.
vm
Package vm implements the Ethereum Virtual Machine.
Package vm implements the Ethereum Virtual Machine.
vm/runtime
Package runtime provides a basic execution model for executing EVM code.
Package runtime provides a basic execution model for executing EVM code.
crypto
bls
pki
vdf
Package vdf is a proof-of-concept implementation of a delay function and the security properties are not guaranteed.
Package vdf is a proof-of-concept implementation of a delay function and the security properties are not guaranteed.
vrf
Package vrf defines the interface to a verifiable random function.
Package vrf defines the interface to a verifiable random function.
vrf/p256
Package p256 implements a verifiable random function using curve p256.
Package p256 implements a verifiable random function using curve p256.
internal
configs/node
Package nodeconfig includes all the configuration variables for a node.
Package nodeconfig includes all the configuration variables for a node.
configs/sharding
Package shardingconfig defines types and utilities that deal with Harmony sharding configuration schedule.
Package shardingconfig defines types and utilities that deal with Harmony sharding configuration schedule.
ctxerror
Package ctxerror provides a context-aware error facility.
Package ctxerror provides a context-aware error facility.
ctxerror/mock
Package mock_ctxerror is a generated GoMock package.
Package mock_ctxerror is a generated GoMock package.
hmyapi/filters
Package filters implements an ethereum filtering system for block, transactions and log events.
Package filters implements an ethereum filtering system for block, transactions and log events.
utils/mock
Package mock_utils is a generated GoMock package.
Package mock_utils is a generated GoMock package.
utils/mock_log
Package mock_log is a generated GoMock package.
Package mock_log is a generated GoMock package.
Package msgq implements a simple, finite-sized message queue.
Package msgq implements a simple, finite-sized message queue.
p2p
Package p2p is a generated GoMock package.
Package p2p is a generated GoMock package.
host/mock
Package mock_p2p is a generated GoMock package.
Package mock_p2p is a generated GoMock package.
staking
test

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL