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) :
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
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit