【NEO 開発】NEOのプライベートネットワークをDockerで構築してみよう!
NEOはDBFTというコンセンサスアルゴリズムによって動作するブロックチェーンプラットフォームです。
投票者が投票したBookkeeper(ブロック生成者)がブロックを生成します。
NEOプライベートチェーンをデプロイするには、コンセンサスに達するために少なくとも4つのサーバが必要になってきます。
しかし、開発用にサーバーを四台借りるとなるとかなりのコストが発生します。
そこで今回はDockerを利用して、一つのサーバー上に4つのノードをたてることでプライベートチェーンを構築してみようと思います。
動作環境:Ubuntu 16.04
※docker上に環境を作るので関係ないはずです。
■目次
・docker インストール
・neo コンテナの起動
・neoコンテナに必要なパッケージをインストール
・プライベートネットワークを起動
・docker インストール
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
・neo コンテナの起動
dockerに必要なリポジトリをcloneしてきましょう。
$ git clone https://github.com/CityOfZion/neo-privatenet-docker.git
$ cd neo-privatenet-docker
以下のコマンドを順番に実行するとneoのコンテナが立ち上がっているはずです。
少し時間がかかるので気長に待ってください。
$ ./docker_build.sh
$ ./docker_run_and_create_wallet.sh
終わったようですね!
ではコンテナが立ち上がっているかどうか確認してみましょう。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6f7ed0d4ae3a neo-privnet "/bin/bash /opt/pr..." 2 hours ago Up 2 hours 0.0.0.0:20333-20336->20333-20336/tcp neo-privnet
では次にneoコンテナの中に入ります。
$ docker exec -it neo-privnet bash
* Consensus nodes are running in screen sessions, check 'screen -ls'
* neo-python is installed in /neo-python, with a neo-privnet.wallet file in place
* You can use the alias 'neopy' in the shell to start neo-python's prompt.py with privnet settings
* Please report issues to https://github.com/CityOfZion/neo-privatenet-docker
無事は入れたようです!
・neoコンテナに必要なパッケージをインストール
まずは必要なものをいれていきます。
//更新
root@neo-privnet:/neo-python# apt-get update
//nodeをたちあげるために必要なものを入れる。
apt-get install software-properties-common python-software-properties
add-apt-repository ppa:deadsnakes/ppa
apt-get update
apt-get install python3.6 python3.6-dev python3.6-venv python3-pip libleveldb-dev libssl-dev g++
root@neo-privnet:/neo-python# alias python=python3
//pythonとpipの設定エイリアス
root@neo-privnet:/neo-python# alias pip=pip3
//仮想環境を作成して有効にする
root@neo-privnet:/neo-python# python -m venv venv
root@neo-privnet:/neo-python# source venv/bin/activate
//パッケージを編集可能な形式でインストールする
(venv) root@neo-privnet:/neo-python# pip install -e .
これで準備は整いました!!!
・プライベートネットワークを起動
prompt.pyというファイルからネットワークを起動する必要があります。
なのでまずは探してみましょう。
(venv) root@neo-privnet:/# find | grep prompt.py
./usr/local/lib/python3.6/dist-packages/prompt_toolkit/shortcuts/prompt.py
./root/.neopython/.prompt.py.history
./neo-python/neo/bin/prompt.py
./neo-python/venv/lib/python3.6/site-packages/prompt_toolkit/shortcuts/prompt.py
下から二番目の場所っぽいので移動します。
(venv) root@neo-privnet:/neo-python/neo/bin# ll
total 88
drwxr-xr-x 2 root root 4096 Aug 21 01:20 ./
drwxr-xr-x 1 root root 4096 Aug 22 15:22 ../
-rw-r--r-- 1 root root 0 Aug 21 01:20 __init__.py
-rwxr-xr-x 1 root root 10551 Aug 21 01:20 api_server.py*
-rw-r--r-- 1 root root 1901 Aug 21 01:20 bootstrap.py
-rw-r--r-- 1 root root 2604 Aug 21 01:20 export_blocks.py
-rw-r--r-- 1 root root 3805 Aug 21 01:20 import_blocks.py
-rwxr-xr-x 1 root root 45285 Aug 21 01:20 prompt.py*
-rw-r--r-- 1 root root 3022 Aug 21 01:20 reencrypt_wallet.py
-rw-r--r-- 1 root root 3373 Aug 21 01:20 sign_message.py
ではプライベートネットワークを起動してみましょう!!
// -m メインネット
// -p privatenet
//指定なしだとテストネット。
(venv) root@neo-privnet:/neo-python# np-prompt -p
[I 180821 04:59:54 LevelDBBlockchain:115] Created Blockchain DB at /root/.neopython/Chains/SC234
[I 180821 04:59:54 NotificationDB:73] Created Notification DB At /root/.neopython/Chains/Test_Notif
NEO cli. Type 'help' to get started
blockを取得してみましょう!
//blockの取得
neo> block 1
{
"hash": "0x0012f8566567a9d7ddf25acb5cf98286c9703297de675d01ba73fbfe6bcb841c",
"size": 686,
"version": 0,
"previousblockhash": "0xb3181718ef6167105b70920e4a8fbbd0a0a56aacf460d70e10ba6fa1668f1fef",
"merkleroot": "0x8e3a32ba3a7e8bdb0ad9a2ad064713e45bd20eb0dab0d2e77df5b5ce985276d0",
"time": 1494400282,
"index": 1,
"nonce": "afbd1492287a1fd1",
"nextconsensus": "AdyQbbn6ENjqWDa5JNYMwN3ikNcA4JeZdk",
"script": {
"invocation": "40884037dd265cb5f5a54802f53c2c8593b31d5b8a9c0bad4c7e366b153d878989d168080ac36b930036a9eb966b48c70bb41792e698fa021116f27c09643563b840e83ab14404d964a91dbac45f5460e88ad57196b1779478e3475334af8c1b49cd9f0213257895c60b5b92a4800eb32d785cbb39ae1f022528943909fd37deba63403677848bf98cc9dbd8fbfd7f2e4f34471866ea82ca6bffbf0f778b6931483700c17829b4bd066eb04983d3aac0bd46b9c8d03a73a8e714d3119de93cd9522e314054d16853b22014190063f77d9edf6fbccefcf71fffd1234f688823b4e429ae5fa639d0a664c842fbdfcb4d6e21f39d81c23563b92cffa09696d93c95bc4893a6401a43071d00d3e854f7f1f321afa7d5301d36f2195dc1e2643463f34ae637d2b02ae0eb11d4256c507a4f8304cea6396a7fce640f50acb301c2f6336d27717e84",
"verification": "55210209e7fd41dfb5c2f8dc72eb30358ac100ea8c72da18847befe06eade68cebfcb9210327da12b5c40200e9f65569476bbff2218da4f32548ff43b6387ec1416a231ee821034ff5ceeac41acf22cd5ed2da17a6df4dd8358fcb2bfb1a43208ad0feaab2746b21026ce35b29147ad09e4afe4ec4a7319095f08198fa8babbe3c56e970b143528d2221038dddc06ce687677a53d54f096d2591ba2302068cf123c1f2d75c2dddc542557921039dafd8571a641058ccc832c5e2111ea39b09c0bde36050914384f7a48bce9bf92102d02b1873a0863cd042cc717da31cea0d7cf9db32b74d4c72c01b0011503e2e2257ae"
},
"tx": [
{
"txid": "0x8e3a32ba3a7e8bdb0ad9a2ad064713e45bd20eb0dab0d2e77df5b5ce985276d0",
"size": 10,
"type": "MinerTransaction",
"version": 0,
"attributes": [],
"vout": [],
"vin": [],
"sys_fee": "0",
"net_fee": "0",
"scripts": [],
"nonce": 679092177
}
]
}
・おまけ
ポートを見てみると4つ使用されていることがわかります。
おそらくこいつらがブロックの生成してるはずです!
(venv) root@neo-privnet:/neo-python/neo/bin# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dotnet 15 root 103u IPv4 190687 0t0 TCP *:20333 (LISTEN)
dotnet 15 root 125u IPv4 189187 0t0 TCP localhost:20333->localhost:47545 (ESTABLISHED)
dotnet 15 root 130u IPv4 189199 0t0 TCP localhost:20333->localhost:50254 (ESTABLISHED)
dotnet 15 root 140u IPv4 189209 0t0 TCP localhost:20333->localhost:58899 (ESTABLISHED)
dotnet 15 root 152u IPv4 189220 0t0 TCP *:30333 (LISTEN)
dotnet 15 root 154u IPv6 189235 0t0 TCP *:10333 (LISTEN)
dotnet 27 root 97u IPv4 190692 0t0 TCP *:20334 (LISTEN)
dotnet 27 root 98u IPv4 190695 0t0 TCP localhost:47545->localhost:20333 (ESTABLISHED)
dotnet 27 root 116u IPv4 189798 0t0 TCP localhost:20334->localhost:55485 (ESTABLISHED)
dotnet 27 root 135u IPv4 189816 0t0 TCP localhost:20334->localhost:34553 (ESTABLISHED)
dotnet 27 root 152u IPv4 189831 0t0 TCP *:30334 (LISTEN)
dotnet 27 root 154u IPv6 189832 0t0 TCP *:10334 (LISTEN)
dotnet 40 root 104u IPv4 190706 0t0 TCP *:20335 (LISTEN)
dotnet 40 root 115u IPv4 189794 0t0 TCP localhost:50254->localhost:20333 (ESTABLISHED)
dotnet 40 root 118u IPv4 189797 0t0 TCP localhost:55485->localhost:20334 (ESTABLISHED)
dotnet 40 root 130u IPv4 189817 0t0 TCP localhost:20335->localhost:46526 (ESTABLISHED)
dotnet 40 root 153u IPv4 189227 0t0 TCP *:30335 (LISTEN)
dotnet 40 root 154u IPv6 189228 0t0 TCP *:10335 (LISTEN)
dotnet 54 root 110u IPv4 190754 0t0 TCP *:20336 (LISTEN)
dotnet 54 root 112u IPv4 190757 0t0 TCP localhost:58899->localhost:20333 (ESTABLISHED)
dotnet 54 root 119u IPv4 190761 0t0 TCP localhost:34553->localhost:20334 (ESTABLISHED)
dotnet 54 root 121u IPv4 190762 0t0 TCP localhost:46526->localhost:20335 (ESTABLISHED)
dotnet 54 root 152u IPv4 190783 0t0 TCP *:30336 (LISTEN)
dotnet 54 root 154u IPv6 190784 0t0 TCP *:10336 (LISTEN)
これで記事は終わりです。
Twitterやっています。よかったらフォローお願いします!
https://twitter.com/yamamotodaa
参考:
https://medium.com/proof-of-working/how-to-run-a-private-network-of-the-neo-blockchain-d83004557359
https://github.com/CityOfZion/neo-python#getting-started
Congratulations @daidai! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :
You made your First Vote
Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word
STOP
Congratulations @daidai! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!