Skip to content
Blockchain developed from MediBloc, using Go language.
Branch: develop
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmd Remove unnecessary files Feb 8, 2019
common Fix missing error check in voted list conversion Feb 28, 2019
conf Set testnet configuration based on running stg-testnet configuration Jun 17, 2019
consensus/dpos Refactor GetCandidates method in dpos state Feb 27, 2019
core Fix missing error check in voted list conversion Feb 28, 2019
crypto Fix fmt Jan 21, 2019
event Comment event related tests Jan 30, 2019
keystore Refactor testutil's network constructor Jan 29, 2019
medlet Remove unnecessary field in proto Feb 27, 2019
metrics Modify import path of influxdb client Mar 20, 2019
net Make test ports local Jan 31, 2019
rpc Fix missing error check in voted list conversion Feb 28, 2019
script
storage Fix fmt Jan 21, 2019
sync Fix possible goroutine leak in sync download Feb 25, 2019
util Remove unnecessary field in proto Feb 27, 2019
.codecov.yml Add ignored files in code coverage Jul 18, 2018
.gitignore Update gitignore Feb 20, 2019
.travis.yml Refactor travis script Feb 8, 2019
Gopkg.lock Import influxdb client package Mar 20, 2019
Gopkg.toml Import influxdb client package Mar 20, 2019
LICENSE add license term and header May 25, 2018
Makefile add clean testcache to makefile Nov 6, 2018
README.md Update README.md Mar 20, 2019
TESTNET.md Update testnet configuration Sep 18, 2018
repo.go Add empty go file in the repository top to fix go get error Mar 20, 2019

README.md

Go MediBloc

Official implementation of the medibloc blockchain.

Go Report Card Build Status codecov

How to Build

Install RocksDB

git clone https://github.com/facebook/rocksdb.git
  • Checkout to v5.15.10
cd rocksdb/
git reset --hard v5.15.10
  • Compile
sudo apt-get update
sudo apt-get -y upgrade
sudo DEBUG_LEVEL=0 make shared_lib install-shared
  • Set Environment Variable(save to profile to keep setting)
export LD_LIBRARY_PATH=/usr/local/lib

Build Requirements

go get -u github.com/golang/dep/cmd/dep
  • goimports
go get -u golang.org/x/tools/cmd/goimports
  • golint
go get -u golang.org/x/lint/golint

Building

# Go get medibloc repository.
go get -u github.com/medibloc/go-medibloc

# Change directory to medibloc repository.
cd $GOPATH/src/github.com/medibloc/go-medibloc

# Download dependencies.
make dep

# Build
make build

Running a blockchain node

Test Configuration

Running

$ cd $GOPATH/src/github.com/medibloc/go-medibloc

$ build/medi conf/local/single_node/node.conf
INFO[2018-05-18T06:55:28Z] Start medibloc...                             file=main.go func=main.runMedi line=48
INFO[2018-05-18T06:55:28Z] Setting up Medlet...                          file=medlet.go func="medlet.(*Medlet).Setup" line=92
INFO[2018-05-18T06:55:28Z] Set up Medlet.                                file=medlet.go func="medlet.(*Medlet).Setup" line=115
INFO[2018-05-18T06:55:28Z] Starting MedService...                        file=net_service.go func="net.(*MedService).Start" line=41
INFO[2018-05-18T06:55:28Z] Starting MedService Dispatcher...             file=dispatcher.go func="net.(*Dispatcher).Start" line=67
INFO[2018-05-18T06:55:28Z] Starting MedService Node...                   file=node.go func="net.(*Node).Start" line=81
INFO[2018-05-18T06:55:28Z] Starting MedService StreamManager...          file=stream_manager.go func="net.(*StreamManager).Start" line=56
INFO[2018-05-18T06:55:28Z] Starting MedService RouteTable Sync...        file=route_table.go func="net.(*RouteTable).Start" line=79
INFO[2018-05-18T06:55:28Z] Started MedService Node.                      file=node.go func="net.(*Node).Start" id=12D3KooWJkTULyR1Eb3Ps4dwm968fsGZXDDET4MNv8Xb6E29aSgX line=97 listening address="[/ip4/127.0.0.1/tcp/9900 /ip4/127.0.0.1/tcp/9910]"
INFO[2018-05-18T06:55:28Z] Started MedService.                           file=net_service.go func="net.(*MedService).Start" line=57
INFO[2018-05-18T06:55:28Z] GRPC Server is running...                     file=server.go func="rpc.(*Server).Start" line=39
INFO[2018-05-18T06:55:28Z] GRPC HTTP Gateway is running...               file=server.go func="rpc.(*Server).RunGateway" line=63
INFO[2018-05-18T06:55:28Z] Starting BlockManager...                      file=block_manager.go func="core.(*BlockManager).Start" line=96
INFO[2018-05-18T06:55:28Z] Starting TransactionManager...                file=transaction_manager.go func="core.(*TransactionManager).Start" line=46 size=262144
INFO[2018-05-18T06:55:28Z] Started Medlet.                               file=medlet.go func="medlet.(*Medlet).Start" line=145
INFO[2018-05-18T06:55:28Z] Started Dpos Mining.                          file=dpos.go func="dpos.(*Dpos).loop" line=415
INFO[2018-05-18T06:55:28Z] Started NewService Dispatcher.                file=dispatcher.go func="net.(*Dispatcher).loop" line=75
INFO[2018-05-18T06:55:28Z] Started MedService StreamManager.             file=stream_manager.go func="net.(*StreamManager).loop" line=128
INFO[2018-05-18T06:55:28Z] Started MedService RouteTable Sync.           file=route_table.go func="net.(*RouteTable).syncLoop" line=101
INFO[2018-05-18T06:55:30Z] New block is minted.                          block="<Height:2, Hash:53f8e720dc9636544807e0b06fd3fb1901952405dfecc75e212cdf0cfba63833, ParentHash:0000000000000000000000000000000000000000000000000000000000000000>" file=dpos.go func="dpos.(*Dpos).mintBlock" line=234 proposer=02fc22ea22d02fc2469f5ec8fab44bc3de42dda2bf9ebc0c0055a9eb7df579056c
INFO[2018-05-18T06:55:30Z] Block pushed.                                 block="<Height:2, Hash:53f8e720dc9636544807e0b06fd3fb1901952405dfecc75e212cdf0cfba63833, ParentHash:0000000000000000000000000000000000000000000000000000000000000000>" file=block_manager.go func="core.(*BlockManager).push" lib="<Height:1, Hash:0000000000000000000000000000000000000000000000000000000000000000, ParentHash:0000000000000000000000000000000000000000000000000000000000000000>" line=235 tail="<Height:2, Hash:53f8e720dc9636544807e0b06fd3fb1901952405dfecc75e212cdf0cfba63833, ParentHash:0000000000000000000000000000000000000000000000000000000000000000>"

Running a Local Testnet

Running

cd $GOPATH/src/github.com/medibloc/go-medibloc

# Run 6 nodes
build/medi conf/local/single_node/node.conf

Endpoints of the Local Testnet

  • RPC : localhost:9920
  • HTTP : localhost:9921

Check the running nodes.

# Get blockchain state
$ curl localhost:9921/v1/node/medstate | jq .
{
  "chain_id": 1,
  "tail": "9964d1dfde18bdae9ff2122be87222a3cc0f5c665f22f7359b113310d2c4a4f5",
  "height": "2942"
}

# Get account state
$ curl localhost:9921/v1/account?address=02fc22ea22d02fc2469f5ec8fab44bc3de42dda2bf9ebc0c0055a9eb7df579056c
{"balance":"1000000000"}

# View each node's logs
$ tail -f logs/log/medibloc.log

for more details, visit http://testnet-node.medibloc.org/swagger/

Demo

Library

Testing

cd $GOPATH/src/github.com/medibloc/go-medibloc

make test

License

Copyright (C) 2018  MediBloc

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
You can’t perform that action at this time.