カタパルトのCowをとにかく動かす

# はじめに

カタパルトのCowが出ました。catapult-service-bootstrapを待ち望んでいます。

待ちきれないので、とにかく動かす方法を探しました。

# 手順

Cow用に、見よう見まねで設定ファイルを書き換えました。

```bash
$ git clone -b mycow https://github.com/planethouki/catapult-service-bootstrap.git
$ cd catapult-service-bootstrap
```

まずは、アカウント類とアドレスと設定ファイル作ります。

```bash
$ docker-compose up generate-raw-addresses store-addresses generate-configs
catapult-service-bootstrap_generate-raw-addresses_1 exited with code 0
catapult-service-bootstrap_store-addresses_1 exited with code 0
catapult-service-bootstrap_generate-configs_1 exited with code 0
```

ここで、`peer-node-0`のハーベスティングアドレスを確認します。

```bash
$ less build/generated-addresses/addresses.yaml
```

`nemesis_addresses_harvesting`のひとつめの`SD3SCXF5WXBJOSQYUWPSGHGMATLN35H226BTP2B5`です。

```yaml
nemesis_addresses_harvesting:
- private: 700C459F74C7794D7B2B21D80ACEEDE6D197524F1675A7E963078F13281AED1D
  public: C5A62EBBDCB09916B8BCF364A4BDBA909640E36BDB1E931D7B7B69982ED740C2
  address: SD3SCXF5WXBJOSQYUWPSGHGMATLN35H226BTP2B5
- private: F10E50687890B54A4C7AE5767C992C6E700EFA58D9EFB2C33B720849DD373D14
  public: A355B69F593C062279B9334FFDEACC0A6C33DB3823439C56271C5F4128A974E0
  address: SCFELA4MKARDJSCJZYWEBGD35CFTEE22OTWIAPXP
- private: CD3804C48C09D6F6BDB668FB1B1E5D4451C81A4A2BB906F2BAA69D4780754375
  public: A919C089640F32120A35F0BBA6774E817D30F458064CA8BC41079B4F178D8670
  address: SBCDNRCYHU7HTL5J6ZA5ID3XVNMINT7XOXFZRNBE
```

ネメシスブロックの設定ファイルを開いて、さっきのアドレスにハーベスティングモザイクが付与されるようにします。

`[distribution>cat:harvest]`の箇所にあるどれかのアドレスを上書きます。

```
$ sudo vi build/nemesis/block-properties-file.properties
[distribution>cat:harvest]

SD3SCXF5WXBJOSQYUWPSGHGMATLN35H226BTP2B5 = 1'000'000
```

次に、ネメシスブロック作成を仮で行います。

```
$ docker-compose up peer-node-0-nemgen
$ docker-compose logs peer-node-0-nemgen
...
peer-node-0-nemgen_1      | 2019-02-21 14:55:17.665365 0x00007f6069004ec0: <debug> (nemgen::NemesisConfigurationLoader.cpp@57) Mosaic Summary 
peer-node-0-nemgen_1      | 2019-02-21 14:55:17.666004 0x00007f6069004ec0: <debug> (nemgen::NemesisConfigurationLoader.cpp@32)  - cat:currency (396E3124A791F12E) 
peer-node-0-nemgen_1      | 2019-02-21 14:55:17.666579 0x00007f6069004ec0: <debug> (nemgen::NemesisConfigurationLoader.cpp@66)  - Owner: E165853BF867C76899334533161A7004D1A33575DD55D7CFFF21232DB9AB91FD
...
peer-node-0-nemgen_1      | 2019-02-21 14:55:17.667892 0x00007f6069004ec0: <debug> (nemgen::NemesisConfigurationLoader.cpp@32)  - cat:harvest (4CB37DF1DF29E66F) 
peer-node-0-nemgen_1      | 2019-02-21 14:55:17.668429 0x00007f6069004ec0: <debug> (nemgen::NemesisConfigurationLoader.cpp@66)  - Owner: E165853BF867C76899334533161A7004D1A33575DD55D7CFFF21232DB9AB91FD
...
```

ログから、`cat:currency (396E3124A791F12E)`が基軸通貨のモザイクID、`cat:harvest (4CB37DF1DF29E66F) `がハーベスティングのモザイクIDだとわかります。

これを、`config-network.properties`に設定していきます。

```
$ sudo vi build/catapult-config/peer-node-0/userconfig/resources/config-network.properties
...
[chain]
...
currencyMosaicId = 0x396E'3124'A791'F12E
harvestingMosaicId = 0x4CB3'7DF1'DF29'E66F
...
```

ほかの２つのノードも同様に行います。

```
$ sudo vi build/catapult-config/peer-node-1/userconfig/resources/config-network.properties
$ sudo vi build/catapult-config/api-node-0/userconfig/resources/config-network.properties
```

これで準備は完了です。ノードを立ち上げます。

```
$ docker-compose up -d rest-gateway peer-node-0 peer-node-1 api-node-0
```

ログを確認します。

```
$ docker-compose logs -f rest-gateway peer-node-0 peer-node-1 api-node-0
```

以下のようなログが出ていれば、ブロックが作成されていることになります。


```
peer-node-0_1             | 2019-02-21 15:24:51.063012 0x00007f6d57e51700: <debug> (utils::StackLogger.h@35) pushing scope 'generating candidate block' 
peer-node-0_1             | 2019-02-21 15:24:51.065922 0x00007f6d57e51700: <debug> (utils::StackLogger.h@41) popping scope 'generating candidate block' (2ms) 
peer-node-0_1             | 2019-02-21 15:24:51.066071 0x00007f6d57e51700: <info> (src::ScheduledHarvesterTask.cpp@35) successfully harvested block at 2 with signer C5A62EBBDCB09916B8BCF364A4BDBA909640E36BDB1E931D7B7B69982ED740C2 
peer-node-0_1             | 2019-02-21 15:24:51.066157 0x00007f6d57e51700: <debug> (disruptor::Disruptor.cpp@42) disruptor queuing element 1 (1 blocks (heights 2 - 2) [0090855B] from Local) 
peer-node-0_1             | 2019-02-21 15:24:51.097148 0x00007f6d45feb700: <debug> (consumers::BlockChainProcessor.cpp@49) cache state hash (7 components) at height 1
peer-node-0_1             | A61EC901B56E9944BD76AE227CFC8E9A5A523CC8865E8DEB56EE703CA30FCED4
peer-node-0_1             |  + EAE4F8AC304F8C8B9710E5235E51022BB65FA9671A44E6F20F370EBFE08DB9EA
peer-node-0_1             |  + CF91BBA0DF5A4BC30FEEDB53FA7596869F65C8CECAAD5A640B501296033B8B47
peer-node-0_1             |  + B6C58A6EED52B3BF8469A7CDE14DAA0C7D7DAAC38ED9FF35826FC017CE181AB2
peer-node-0_1             |  + 0000000000000000000000000000000000000000000000000000000000000000
peer-node-0_1             |  + 0000000000000000000000000000000000000000000000000000000000000000
peer-node-0_1             |  + 0000000000000000000000000000000000000000000000000000000000000000
peer-node-0_1             |  + 0000000000000000000000000000000000000000000000000000000000000000 
peer-node-0_1             | 2019-02-21 15:24:51.097696 0x00007f6d45feb700: <debug> (consumers::BlockChainProcessor.cpp@49) cache state hash (7 components) at height 2
peer-node-0_1             | 09780501A1494610F4A679B4146A41E3E4CDA0F75771710ABC4F734B54B8DE5E
peer-node-0_1             |  + 64E75C3394DBAC3FA99504AB7C13C48F2680C3F5B436BF089F9E733D7AE76A03
peer-node-0_1             |  + CF91BBA0DF5A4BC30FEEDB53FA7596869F65C8CECAAD5A640B501296033B8B47
peer-node-0_1             |  + B6C58A6EED52B3BF8469A7CDE14DAA0C7D7DAAC38ED9FF35826FC017CE181AB2
peer-node-0_1             |  + 0000000000000000000000000000000000000000000000000000000000000000
peer-node-0_1             |  + 0000000000000000000000000000000000000000000000000000000000000000
peer-node-0_1             |  + 0000000000000000000000000000000000000000000000000000000000000000
peer-node-0_1             |  + 0000000000000000000000000000000000000000000000000000000000000000 
peer-node-0_1             | 2019-02-21 15:24:51.126782 0x00007f6d2ffff700: <debug> (consumers::NewBlockConsumer.cpp@53) forwarding a new block with height 2 
peer-node-0_1             | 2019-02-21 15:24:51.126873 0x00007f6d2ffff700: <info> (disruptor::ConsumerDispatcher.cpp@43) completing processing of element 1 (1 blocks (heights 2 - 2) [BC8213E2] empty from Local), last consumer is 0 elements behind 
```

# 補足

## ハーベストモザイクIDが正しく設定されていない場合

もし、ネメシスブロックのハーベストモザイクIDの設定がうまくいってない場合は、以下のようなログがでます。

```
peer-node-0_1             | 2019-02-22 00:02:23.495985 0x00007f154788df00: <info> (extensions::NemesisBlockLoader.cpp@76) Nemesis Mosaics:
peer-node-0_1             |       C 119E15661E9B2758: 0
peer-node-0_1             |       H 2AECBFD76AE7411B: 0
peer-node-0_1             |         002861624D6376FA: 17000000
peer-node-0_1             |         0EFBDB8A4ED2F9DE: 8999999998000000 
```

`C`が基軸通貨の、`H`がハーベスティングの、ネメシスブロックでのモザイクIDです。

基軸通貨とハーベストモザイクの発行量がともにゼロ。そしてよくわからないモザイクが発行されているという状態になります。

## ハーベストモザイクの発行量が正しく設定されていない場合

ネメシスブロックにおけるハーベストモザイクの総発行量と、設定ファイル上の総インポータンス量は一致している必要があります。


```:config-network.properties
totalChainImportance = 17'000'000
```

```:block-properties-file.properties
[mosaic>cat:harvest]

...
supply = 17'000'000
...

[distribution>cat:harvest]

SCU3YHRCDVVYVOCDZQPJAFFY7Q6IUCOMNTCTXFRD = 1'000'000
SBUUBSE7JKYMNZ3RYXWDFODRJCUFGRLMNDHF4N2T = 1'000'000
SCBPD56T6QMCARQKM2Z2TFIDKHLXE43GVMI2EI3F = 1'000'000
SC7TA6DQGU4V7UJ5XHTOUCCRZS3RPJ5HXFGOZUP2 = 1'000'000
SCBMF3J664F5OMNTCNKREOOL34PNSXUX427EI7TY = 4'000'000
SAXAJQ5TLHRKVNMF3ZLFSEFQHO7BU7G72KUPO7MN = 1'000'000
SCFPV4URVZ6IG7PIKWJ4CY55GBKNE6YBJQYVCBUW = 1'000'000
SDBYRSQSEDBIXJDPNCUWARIMKVC5EJPZOQND62G4 = 1'000'000
SA3A76DLLJ5732QIVPTPA3LTFFAIFH4MCM3S5S3A = 1'000'000
SBUG5Z26I44ZI2J6OX6Y66WZYL2RQPFXCQMGYFBP = 1'000'000
SBUE3WM2QY2GACCEIOO33M23T5VOSVUXAWBRIFBR = 4'000'000
```

これが一致してないと、以下のようなエラーが出ます。

```
peer-node-0_1             | 2019-02-22 00:02:23.496047 0x00007f154788df00: <error> (extensions::NemesisBlockLoader.cpp@107) Throwing exception: harvesting outflows (0) do not add up to power ten multiple of expected importance (17000000) 
```

## mongoDBの設定がわからない

`init-db`では、mongoDBにインデックスを作成しているようなのですが、これがどうすればいいかよくわかりません。なんとなく設定してます。

なので`/mosaic/{mosaicID}`とかのAPIがうまく動きません。どうやっても`ResourceNotFound`が返ってきます。

## ライブラリ類の対応

ts/jsのnem2-sdkは、もうすぐ対応しそうな雰囲気があります。

javaももうすぐかもしれません。

ブロックエクスプローラーは対応しています。

# とりあえずの

## ウォレットと蛇口

https://github.com/planethouki/nem2-tiny-wallet

https://github.com/planethouki/nem2-tiny-faucet


## ノードとか

動かしてます。いつ止まるかわかりません。

http://54.178.241.129:3000/

http://54.178.241.129:8000/

https://faucet-cow.azurewebsites.net/

http://54.178.241.129:5000/


# おわりに

いかがでしたでしょうか。