The core protocol of WoopChain
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Leo Chen 0d3101bcd3 [node] replace node.State with node.IsInSync atomic bool 4 years ago
.github/ISSUE_TEMPLATE Update issue templates 5 years ago
.hmy [blacklist] Move default file to `.hmy` & support comments in file 5 years ago
accounts [accounts] Remove dead code (#2946) 5 years ago
api Do not reinit the explorer db every restart (#3199) 4 years ago
block [RPC] Fixes for issues found during documentation (#3185) 4 years ago
cmd [node] replace node.State with node.IsInSync atomic bool 4 years ago
common/denominations Move networkType into internal config 6 years ago
consensus [log] remove cost log for each consensus message 4 years ago
contracts [project] More Spring Cleaning (#2751) 5 years ago
core Hard code 106 as the cap of bls keys per validator 5 years ago
crypto [bls] cache BLSPubKey deserialization with LRU 5 years ago
hmy [RPC] Fixes for issues found during documentation (#3185) 4 years ago
internal [rpc] change default transaction limit to 1000 4 years ago
multibls Refactor quorum calculation and signature submission process (#3201) 4 years ago
node [node] replace node.State with node.IsInSync atomic bool 4 years ago
numeric Msg copy fix (#2921) 5 years ago
p2p [bootstrap] fix bootstrap on localnet failed issue 4 years ago
scripts [node.sh] change mainnet folder 5 years ago
shard Refactor quorum calculation and signature submission process (#3201) 4 years ago
staking Hard code 106 as the cap of bls keys per validator 5 years ago
test [TxPool] Fix stuck staking transactions (#3116) 5 years ago
tools Add github.com/golangci/golangci-lint/cmd/golangci-lint@v1.15.0 as a build tool 6 years ago
webhooks Code formatting fix based on `staticcheck` (#3023) 5 years ago
.bnkey [bootnode] add a default bootnode key locally 6 years ago
.gitignore [double-sign] Provide proof of double sign in slash record sent to beaconchain (#2253) 5 years ago
.travis.yml [go] upgrade golang to 1.14 (#2779) 5 years ago
BLACKLIST.md [blacklist] Move default file to `.hmy` & support comments in file 5 years ago
CONTRIBUTING.md s/gofmt/goimports/ 6 years ago
Dockerfile [rpc] add viewID and epoch to RPCMarshalBlock (#3009) 5 years ago
FLA.md cla@ → licensing@ 6 years ago
LICENSE Add MIT License 6 years ago
Makefile [rpc] Add active status back to Validator information 5 years ago
PULL_REQUEST_TEMPLATE.md Update PULL_REQUEST_TEMPLATE.md 5 years ago
README.md [readme] update readme with static library info 5 years ago
go.mod [go.mod] use abool v1.0.1 release 4 years ago

README.md

Harmony

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

Play with the blockchain

Running the harmony blockchain with docker

The easiest way to run our blockchain locally is to use docker. If you are on OS X, then install docker via brew.

$ brew cask install docker
$ open /Applications/Docker.app

then you can run

$ docker run -it harmonyone/main:stable /bin/bash

You'll be in this current repository when the shell opens up, now let's catch up on any missing commits (all the following commands assume you are in the running docker container)

Bleeding edge master

$ git fetch
$ git reset --hard origin/master

Mainnet release intended branch

$ git fetch
$ git checkout t3
$ git reset --hard origin/t3

And now run the local blockchain

$ test/debug.sh

Using our hmy command line tool

Assuming that you got test/debug.sh running in your docker container, we can interact with the running blockchain using our hmy command line tool. Its part of our go-sdk repo, but our docker container already has it as well and built.

Find your running container's ID, here's an example

$ docker container ls
CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS              PORTS               NAMES
62572a199bac        harmonyone/main:stable   "/bin/bash"         2 minutes ago       Up 2 minutes                            awesome_cohen

now lets get our second shell in the running container:

$ docker exec -it 62572a199bac /bin/bash

The container already comes with a prebuilt hmy that you can invoke anywhere, but lets go ahead and build the latest version.

$ cd ../go-sdk
$ git fetch
$ git reset --hard origin/master
$ make
$ ./hmy version
Harmony (C) 2020. hmy, version v211-698b282 (@harmony.one 2020-01-17T00:58:51+0000)

Then checkout ./hmy cookbook for example usages. The majority of commands output legal JSON, here is one example:

root@62572a199bac:~/go/src/github.com/harmony-one/go-sdk# ./hmy blockchain latest-header
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "blockHash": "0x34a8b155f90b8fc22342fc8b5d1c969ed836a2f666c506e4017b570dc337e88c",
    "blockNumber": 0,
    "epoch": 0,
    "lastCommitBitmap": "",
    "lastCommitSig": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "leader": "one1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquzw7vz",
    "shardID": 0,
    "timestamp": "2019-06-28 15:00:00 +0000 UTC",
    "unixtime": 1561734000,
    "viewID": 0
  }
}

Developing in the container

The docker container is a full harmony development environment and comes with emacs, vim, ag, tig and other creature comforts. Most importantly, it already has the go environment with our C/C++ based library dependencies (libbls and mcl) setup correctly for you. You can also change go versions easily, an example:

$ eval $(gimme 1.14.1)

Note that changing the go version might mean that dependencies won't work out right when trying to run test/debug.sh again, get the correct environment again easily by exec bash.

Installation Requirements for directly on your MacOS X

GMP and OpenSSL

brew install gmp
brew install openssl

On Linux Box (assuming Amazon Linux 2 or Cent OS)

sudo yum install glibc-static gmp-devel gmp-static openssl-libs openssl-static gcc-c++

Dev Environment Setup

The required go version is: go1.14.1

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

Harmony docs and guides

https://docs.harmony.one

API guides

https://docs.harmony.one/home/developers/api

Running locally

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

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
  • Sharded P2P network and P2P gossiping
  • FBFT (Fast Byzantine Fault Tolerance) Consensus with BLS multi-signature
  • Consensus view-change protocol
  • Account model and support for Solidity
  • Cross-shard transaction
  • VRF (Verifiable Random Function) and VDF (Verifiable Delay Function)
  • Cross-links
  • EPoS staking mechanism
  • Kademlia routing

Features Planned after Mainnet Open Staking

  • Resharding
  • Integration with WASM
  • Fast state synchronization
  • Auditable privacy asset using ZK proof