はじめに
nem2のSlackで、ラズパイでカタパルトノードが動くかみたいな話があった。たしか、結論として、難しいみたいな話だったと思う。
それがきっかけで、LIVAっていうミニPCを持っていたのを思い出した。
なので、これでカタパルトを動かしてみたいと思う。
LIVA
CPU Intel Bay Trail-M SoC Celeron N2807
メモリ 2GB DDR3L
ストレージ eMMC 64GB
大きさは、スマホの箱くらいでしょうか。
価格は、2万円くらいだったと思います。
電源は5V/3Aで、端子がMicro USB形状なので、モバイルバッテリーでも動かした例があるらしい。
OSインストール
Ubuntu Server 18.04.2 LTSのISOをダウンロード
Universal-USB-Installerを使ってUSBインストール
ビルド
以下の公式手順に従ってコマンドをコピペする。
半日以上かかったが、エラーなくビルドできた。
作業ディレクトリは/home/liva
だったので、バイナリは/home/liva/catapult-server/_build/bin
にできている。
liva@liva:~$ ls -l /home/liva/catapult-server/_build/bin/
total 374968
-rwxrwxr-x 1 liva liva 777832 May 11 09:17 bench.catapult.crypto.hashers
-rwxrwxr-x 1 liva liva 866408 May 11 09:17 bench.catapult.crypto.verify
drwxrwxr-x 2 liva liva 4096 May 11 09:15 boost
-rwxrwxr-x 1 liva liva 3324512 May 11 10:52 catapult.server
-rwxrwxr-x 1 liva liva 1045088 May 11 12:44 catapult.tools.address
-rwxrwxr-x 1 liva liva 1222352 May 11 12:44 catapult.tools.benchmark
-rwxrwxr-x 1 liva liva 2498432 May 11 12:44 catapult.tools.health
-rwxrwxr-x 1 liva liva 3106376 May 11 12:44 catapult.tools.nemgen
-rwxrwxr-x 1 liva liva 2306168 May 11 12:44 catapult.tools.network
-rwxrwxr-x 1 liva liva 752152 May 11 12:44 catapult.tools.statusgen
(省略)
設定
起動するためのファイル類を作っていく。
今回は、このマシンだけのプライベートチェーンで、Peerノードしか立てない。なのでトランザクションを投げる手段がないが、とりあえずやってみる。
catapult1
├── data
├── nemesis
│ └── block-properties-file.properties
├── nemgen.sh
├── start.sh
└── userconfig
└── resources
├── config-database.properties
├── config-harvesting.properties
├── config-logging.properties
├── config-messaging.properties
├── config-networkheight.properties
├── config-network.properties
├── config-node.properties
├── config-pt.properties
├── config-task.properties
├── config-timesync.properties
├── config-user.properties
├── peers-api.json
└── peers-p2p.json
特に変えたものを並べてみる
nemgen
catapult-service-bootstrapを参考に組み立てる
#!/bin/bash
PATH=/home/liva/catapult1
/bin/mkdir -p ${PATH}/data/seed/mijin-test/00000
/bin/dd if=/dev/zero of=${PATH}/data/seed/mijin-test/00000/hashes.dat bs=1 count=64
/home/liva/catapult-server/_build/bin/catapult.tools.nemgen --nemesisProperties ${PATH}/nemesis/block-properties-file.properties --resources ${PATH}/userconfig/
/bin/cp -r ${PATH}/data/seed/mijin-test/* ${PATH}/data
ネメシスブロックの出力先を指定する
...
[output]
cppFile =
binDirectory = /home/liva/catapult1/data/seed/mijin-test
...
server
同様に
/home/liva/catapult-server/_build/bin/catapult.server /home/liva/catapult1/userconfig
データファイルの場所を指定する
...
[storage]
dataDirectory = /home/liva/catapult1/data
pluginsDirectory =
実行
nemgen
うまくいった
2019-05-11 13:36:29.095706 0x00007f468b37c380: <info> (nemgen::main.cpp@87) *** Nemesis Summary ***
Height: 1
Generation Hash: C6871CB9FA666FF20B93DCE6D7E25196EFBAFDFF3989AC00C76BD8E1DCEE9AEE
Transactions Hash: 814C8164E99927A30BD6D06212EB10D1A5C3F6A4458045B40E0AD7FDF702117F
Receipts Hash: 6419DD8BAA202763D1B5946F877C9B728F344D7A5365FBC3622CB049EB7B88A5
State Hash: E20FE3D20B709572558E21C13A99BF7CFE66D3BED9C4BF082AAE0E6FC1A95612
--- Components (7) ---
+ 13067B2FEB08F5C99547B4A5C30D9581D1D8E22F817A542AEF8E02684CADA2DC
+ 7EA827EB9A862C95EED988E3D5757C7B0F23BC99757FF6925F6FCC4447C6B864
+ 1CA8F8AB2C2513B1ADFE050AB85C91D648837A52B82A19A69A9DBFCC78405B51
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
server
うまく読み込んだ
2019-05-11 13:37:28.029640 0x00007fd537d7b000: <info> (extensions::NemesisBlockLoader.cpp@54)
nemesis network id: Mijin_Test
nemesis public key: 7F78559C556642FE132616910B1C9F2C36BC144D2D3A9E909092D64A0D0DE0DE
nemesis generation hash: C6871CB9FA666FF20B93DCE6D7E25196EFBAFDFF3989AC00C76BD8E1DCEE9AEE
2019-05-11 13:37:28.039450 0x00007fd537d7b000: <debug> (utils::StackLogger.h@35) pushing scope 'PosImportanceCalculator::recalculate'
2019-05-11 13:37:28.039711 0x00007fd537d7b000: <debug> (observers::PosImportanceCalculator.cpp@67) recalculated importances (11 / 35 eligible)
2019-05-11 13:37:28.039835 0x00007fd537d7b000: <debug> (utils::StackLogger.h@41) popping scope 'PosImportanceCalculator::recalculate' (0ms)
2019-05-11 13:37:28.039997 0x00007fd537d7b000: <info> (extensions::NemesisBlockLoader.cpp@76) Nemesis Mosaics:
C 119E15661E9B2758: 8999999998000000
H 2AECBFD76AE7411B: 17000000
2019-05-11 13:37:28.046273 0x00007fd537d7b000: <info> (extensions::NemesisBlockLoader.cpp@54)
nemesis network id: Mijin_Test
nemesis public key: 7F78559C556642FE132616910B1C9F2C36BC144D2D3A9E909092D64A0D0DE0DE
nemesis generation hash: C6871CB9FA666FF20B93DCE6D7E25196EFBAFDFF3989AC00C76BD8E1DCEE9AEE
2019-05-11 13:37:28.050569 0x00007fd537d7b000: <debug> (utils::StackLogger.h@35) pushing scope 'PosImportanceCalculator::recalculate'
2019-05-11 13:37:28.050714 0x00007fd537d7b000: <debug> (observers::PosImportanceCalculator.cpp@67) recalculated importances (11 / 35 eligible)
2019-05-11 13:37:28.050776 0x00007fd537d7b000: <debug> (utils::StackLogger.h@41) popping scope 'PosImportanceCalculator::recalculate' (0ms)
2019-05-11 13:37:28.050870 0x00007fd537d7b000: <info> (extensions::NemesisBlockLoader.cpp@76) Nemesis Mosaics:
C 119E15661E9B2758: 8999999998000000
H 2AECBFD76AE7411B: 17000000
祝、ブロック生成
2019-05-11 13:37:58.303949 0x00007fd5117fa700: <debug> (consumers::BlockChainProcessor.cpp@49) cache state hash (7 components) at height 2
4EAD940B032801AA7ACA4AD6E42955BB696C1F7582E0E5F624DFA23A5FDF2F7D
+ 54B46FB6BD08EA549C78CCFF1893B1B6CD060690522FC95D0B37320F39C41433
+ 7EA827EB9A862C95EED988E3D5757C7B0F23BC99757FF6925F6FCC4447C6B864
+ 1CA8F8AB2C2513B1ADFE050AB85C91D648837A52B82A19A69A9DBFCC78405B51
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
2019-05-11 13:37:58.378151 0x00007fd510ff9700: <debug> (consumers::NewBlockConsumer.cpp@53) forwarding a new block with height 2
2019-05-11 13:37:58.378641 0x00007fd510ff9700: <info> (disruptor::ConsumerDispatcher.cpp@43) completing processing of element 1 (1 blocks (heights 2 - 2) [4D699175] empty from Local), last consumer is 0 elements behind
おわりに
普通にできた。
次があれば、100万ブロックくらいの同期だったらどうなるか、APIノードにしたらどうなるか、とかを試してみたい。