【NEO 開発】NEOのプライベートネットワークをDockerで構築してみよう!steemCreated with Sketch.

in #blockchain6 years ago (edited)

neo-logo.png

NEOはDBFTというコンセンサスアルゴリズムによって動作するブロックチェーンプラットフォームです。
投票者が投票したBookkeeper(ブロック生成者)がブロックを生成します。

https://medium.com/@masahiro.sasaki/dbft-%E6%B0%91%E4%B8%BB%E7%9A%84%E3%81%AA%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%B3%E3%82%B5%E3%82%B9%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0-5c36b80cac2b

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

Screenshot from 2018-08-23 21-55-01.png

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
        }
    ]
}

Screenshot from 2018-08-23 21-57-30.png

・おまけ

ポートを見てみると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

Sort:  

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

Do you like SteemitBoard's project? Then Vote for its witness and get one more award!

Congratulations @daidai! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

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!

Coin Marketplace

STEEM 0.20
TRX 0.26
JST 0.039
BTC 100331.97
ETH 3646.26
USDT 1.00
SBD 3.05