A collection of helper scripts to run gochain docker container as a local network.
-
Download and install Docker
-
goloop/gochain-icon
docker image- Build
$ git clone https://github.com/icon-project/goloop.git $ cd goloop $ make gochain-icon-image
- Verify the generated image
$ docker images goloop/gochain-icon REPOSITORY TAG IMAGE ID CREATED SIZE goloop/gochain-icon latest 74676aec69ef 2 minutes ago 513MB
- Build
You can start and stop the docker container using the Makefile.
make start
This command does the following things in order:
- Reverts back genesis.json
- Update genesis.json to use
- Modded governance contract (to bypass network proposal to open btp network)
- Set revision to
0x15
which introduces BTP.
- Start the docker container using this updated genesis.json.
- Prep configuration (make godwallet a prep and configure it)
- Open BTP Network
- Deploy a contract that can send BTP Message
Send BTP Message using the network using the following command:
make test-btp
To stop the container
make stop
btp-optimized.jar
is simple contract which will be used to open a BTP Network and send BTP Messagesgovernace-optimized.jar
is governance contract with one method added to it, which aids to open BTP network.
You can start or stop the docker container using the following script. You can also use docker compose to start or stop the container.
$ ./run_gochain.sh
Usage: ./run_gochain.sh [start|stop|pause|unpause|ps]
$ ./run_gochain.sh start
>>> START with compose-single.yml
Creating network "gochain-local_default" with the default driver
Creating gochain-iconee ... done
$ ./run_gochain.sh ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------------------
gochain-iconee /entrypoint /bin/sh -c /go ... Up 8080/tcp, 9080/tcp, 0.0.0.0:9082->9082/tcp,:::9082->9082/tcp
Note that log messages will be generated at ./chain/iconee.log
.
$ head ./chain/iconee.log
I|20211008-03:27:35.242715|b6b5|-|main|main.go:433 ____ ___ ____ _ _ _ ___ _ _
I|20211008-03:27:35.243626|b6b5|-|main|main.go:433 / ___|/ _ \ / ___| | | | / \ |_ _| \ | |
I|20211008-03:27:35.243644|b6b5|-|main|main.go:433 | | _| | | | | | |_| | / _ \ | || \| |
I|20211008-03:27:35.243659|b6b5|-|main|main.go:433 | |_| | |_| | |___| _ |/ ___ \ | || |\ |
I|20211008-03:27:35.243678|b6b5|-|main|main.go:433 \____|\___/ \____|_| |_/_/ \_\___|_| \_|
I|20211008-03:27:35.243693|b6b5|-|main|main.go:435 Version : v1.0.0
I|20211008-03:27:35.243713|b6b5|-|main|main.go:436 Build : linux/amd64 tags(rocksdb)-2021-10-05-08:13:18
I|20211008-03:27:35.243732|b6b5|-|metric|metric.go:150 Initialize rootMetricCtx
T|20211008-03:27:35.244757|b6b5|-|TP|transport.go:383 registerPeerHandler &{0xc0001ca540 0xc0001ca4e0 map[] {{0 0} 0 0 0 0} 0xc0001ca5a0} true
T|20211008-03:27:35.244925|b6b5|-|TP|transport.go:383 registerPeerHandler &{0xc0001ca4b0 :8080} true
$ ./run_gochain.sh stop
>>> STOP with compose-single.yml
Stopping gochain-iconee ... done
Removing gochain-iconee ... done
Removing network gochain-local_default
$ ./run_gochain.sh pause
$ ./run_gochain.sh unpause
There are two docker Compose files as the following.
compose-single.yml
: run a single gochain node as the previous script examplecompose-multi.yml
: run multiple (four) gochain nodes which validate the same blocks
$ docker-compose -f compose-single.yml up -d
Creating network "gochain-local_default" with the default driver
Creating gochain-iconee ... done
$ docker-compose -f compose-single.yml ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------------------
gochain-iconee /entrypoint /bin/sh -c /go ... Up 8080/tcp, 9080/tcp, 0.0.0.0:9082->9082/tcp,:::9082->9082/tcp
$ docker-compose -f compose-multi.yml up -d
Creating network "gochain-local_default" with the default driver
Creating gochain-local_node3_1 ... done
Creating gochain-local_node0_1 ... done
Creating gochain-local_node1_1 ... done
Creating gochain-local_node2_1 ... done
$ docker-compose -f compose-multi.yml ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------
gochain-local_node0_1 /entrypoint /bin/sh -c /go ... Up 8080/tcp, 0.0.0.0:9080->9080/tcp,:::9080->9080/tcp
gochain-local_node1_1 /entrypoint /bin/sh -c /go ... Up 8080/tcp, 0.0.0.0:9081->9080/tcp,:::9081->9080/tcp
gochain-local_node2_1 /entrypoint /bin/sh -c /go ... Up 8080/tcp, 0.0.0.0:9082->9080/tcp,:::9082->9080/tcp
gochain-local_node3_1 /entrypoint /bin/sh -c /go ... Up 8080/tcp, 0.0.0.0:9083->9080/tcp,:::9083->9080/tcp
$ docker-compose -f compose-single.yml down
or
$ docker-compose -f compose-multi.yml down
If you want to persist your data across docker restarts, set GOCHAIN_CLEAN_DATA
in ./data/single/iconee.env
to false
.
In case of the multiple nodes, modify ./data/multi/common.env
instead.
Tracker folder contains a docker-compose.yml
and .env
files to run a local blockchain explorer (a.k.a. tracker).
After starting the local gochain nodes (single or multi), run the following command to start the tracker.
$ cd tracker
$ docker-compose up -d
Creating network "tracker_default" with the default driver
Creating tracker_mysql ... done
Creating tracker_app ... done
Creating tracker_nginx ... done
Then open the page http://127.0.0.1 with your favorite web browser.