elephant-2をカスタマイズしたい

NEM

はじめに

  • ここで紹介したカスタムが原因で何かしらの問題が発生する可能性は大いにあるので、自己責任で。
  • 今回は、一台のサーバのみで構成し、検証した。ネットワーク越しの複数ノード構成では試していないため、悪しからず。

目的

  • とにかくファイナリティを早くしたい
  • namespaceやmosaicの取得に手数料が必要なのは鬱陶しい
  • namespaceの有効期間が最大1年とか短い。もっと長く(できれば無期限に)したい

前提条件

catapult-service-bootstrap(投稿日時点で最新のもの)を使用する。

removal of broker port mappings, not needed after websocket host fix … · tech-bureau/catapult-service-bootstrap@1889022
…on gateway

1. ファイナリティを早くしたい

※ この項目は特に、今後何らかの問題が起こる可能性はありそう。数日動かして、今のところ問題は出てませんが…

a. ブロックの生成感覚を早める。

デフォルトでは、15sなので、今回は5sにする。
公式のドキュメントにも書いてあるが、この数字はあくまでも目安。

Namespace — Symbol Documentation
# 15行目
- blockGenerationTargetTime = 15s
+ blockGenerationTargetTime = 5s

peer-nodeの方も同様に変更する。

# 15行目
- blockGenerationTargetTime = 15s
+ blockGenerationTargetTime = 5s

b.ロールバックの最大値を小さくする。

デフォルトでは、40block経過すると覆らなくなるが、今回は2blockにする。

# 20行目
- maxRollbackBlocks = 40
+ maxRollbackBlocks = 2

peer-nodeの方も同様に変更する。

# 20行目
- maxRollbackBlocks = 40
+ maxRollbackBlocks = 2

2. mosaicとnamespaceのレンタル手数料を0にしたい

# 69行目
- mosaicRentalFee = 500'000'000
+ mosaicRentalFee = 0
# 87,88行目
- rootNamespaceRentalFeePerBlock = 1'000'000
- childNamespaceRentalFee = 100'000'000
+ rootNamespaceRentalFeePerBlock = 0
+ childNamespaceRentalFee = 0

peer-nodeの方も同様に変更する。

# 69行目
- mosaicRentalFee = 500'000'000
+ mosaicRentalFee = 0
# 87,88行目
- rootNamespaceRentalFeePerBlock = 1'000'000
- childNamespaceRentalFee = 100'000'000
+ rootNamespaceRentalFeePerBlock = 0
+ childNamespaceRentalFee = 0

3. namespaceの最大期間を無期限にしたい

色々試してみたが、無期限なnamespaceの取得はnemesis block生成時にしかできない模様。
今回は、途中で作成するnamespaceも更新を意識せずに使用したいため、最大期限をデフォルトの365dから365000dにする。
(365,000日は、1000年なので実質無期限と考える)

# 82行目
- maxNamespaceDuration = 365d
+ maxNamespaceDuration = 365000d

peer-nodeの方も同様に変更する。

# 82行目
- maxNamespaceDuration = 365d
+ maxNamespaceDuration = 365000d

実行後、うまく動かない場合

api-nodeにこんなログが出ることがある。

api-node-0_1  | 2019-07-17 01:38:08.301519 0x00007f38f2ffd700: <warning> (consumers::BlockChainProcessor.cpp@136) block 3 failed hit
api-node-0_1  | 2019-07-17 01:38:08.301529 0x00007f38f2ffd700: <warning> (consumers::BlockChainSyncConsumer.cpp@248) processing of peer chain failed with Failure_Chain_Block_Not_Hit
api-node-0_1  | 2019-07-17 01:38:08.311456 0x00007f38f1ffb700: <info> (disruptor::ConsumerDispatcher.cpp@43) completing processing of element 84 (43 blocks (heights 3 - 45) [B611B270] from Remote_Pull), last consumer is 0 elements behind
api-node-0_1  | 2019-07-17 01:38:08.311481 0x00007f38f1ffb700: <warning> (consumers::ReclaimMemoryInspector.cpp@32) consumer aborted at position 83 while processing 43 blocks (heights 3 - 45) [B611B270] from Remote_Pull due to Failure_Chain_Block_Not_Hit

解決方法

先に./cmds/setup-networkしておくと、うまくいく。

catapult-service-bootstrap$ ./cmds/clean-all
...
catapult-service-bootstrap$ ./cmds/setup-network
...
catapult-service-bootstrap$ ./cmds/start-all

まとめ

今回紹介したカスタムはこちら → https://github.com/m1z0-753/catapult-service-bootstrap

色々いじってみると、楽しい。

カスタム後をエクスプローラーでみるとこんな感じ。
ブロック生成感覚が短くなっているのが分かる。

f:id:taberu_salad:20190808124831p:plain

namespaceの期間が6,307,200,000となっている。
これは、ブロック数なので、以下の式で計算すると1000年(365,000日)になる。

duration ≈ numberOfDays * 86400 / blockGenerationTargetTimeInSeconds

f:id:taberu_salad:20190808124838p:plain

コメント

タイトルとURLをコピーしました