LoginSignup
12
1

More than 3 years have passed since last update.

fushicho-2のTIPS

Last updated at Posted at 2019-12-13

この記事は、nemアドベントカレンダー#2の13日目の記事です。

色々いじっている中で、疑問に思って調べたりnem2-slackで教えてもらったことを備忘録的にまとめておきます。
手元に残していたメモを参考に書いているので、あんまりまとまっていませんが、許してください。

一応、nemのアドベントカレンダーに投稿した記事「プライベートチェーン用にカスタマイズしたfushicho-2を動かす」の内容を補足する感じで書いていきます。

トランザクションの手数料

minFeeMultiplier

最小手数料乗数(txのサイズ1byteあたりの手数料)

詳細は、@44uk_i3さんの記事に詳しく書かれているので、簡単に。

catapultの手数料は以下の式で求められます。

手数料 = minFeeMultiplier × txのサイズ

txのサイズ=177byte、minFeeMultiplier=100の時、手数料=177×100=17700となります。

例えば、catapultでの基軸通貨(手数料として払う通貨)を

  • nem:xem
  • 可分性=6

とした時(要するにNIS1と同じ)、177byteのTxを送信するときの手数料は、0.0177xemとなります。

モザイク

有効期間

catapultのモザイクはネームスペースから独立します。
そのため(?)、モザイクの有効期間に無期限を設定可能です。

config-network.propertiesにモザイクの有効期間の設定項目maxMosaicDuration=3650d(71行目)がありますが、これはモザイクの有効期間を設定する場合の最大値です。
生成時に期間=0を設定すれば、無期限モザイクができます。

モザイク名

catapultでは、モザイクは名前を持ちません。

例えば、NIS1のモザイクsonohanashi:sutekiyanは、
ネームスペースsonohanashiに紐づいたsutekiyanという名前のモザイクです。

catapultで、同様の構造を実現する場合は、
ネームスペースsonohanashiを取得後、子ネームスペースsutekiyanを取得します。
その後、別途取得したモザイクを子ネームスペースsutekiyanに紐付けるという方法をとります。

# NIS1
sonohanashi:sutekiyan
=> rootNamespace:mosaic

# NIS2(catapult)
sonohanashi.sutekiyan
=> rootNamespace.childNamespace(=mosaic)

catapultでは、モザイク自体には名前のプロパティが存在せず、そのモザイクIDとネームスペースを紐づけるという手法をとります。

また、同様の手法でアドレスとネームスペースも紐づけることができます。

詳しくは:https://nemtech.github.io/ja/concepts/namespace.html#alias

ネームスペース

手数料

ネームスペースの作成手数料は以下の式で求められる。

手数料 = defaultDynamicFeeMultiplier × rootNamespaceRentalFeePerBlock × 期間(ブロック数)

defaultDynamicFeeMultiplier

ネームスペース作成手数料に関連する項目。ネームスペースの作成手数料は、この値とrootNamespaceRentalFeePerBlock、期間(ブロック数)の積となる。

この項目さっぱり分からなかったので、nem2-slackで質問したところ、planethoukiさんから以下のような回答をいただきました。

defaultDynamicFeeMultiplier はdefaultとあるように、ネットワークの状況で変動するらしいです。
変動した場合、rootNamespaceRentalFeePerBlock とその変動した値とブロック数の積になるようです。
どうやって変動するのかわからないですが・・・

詳細わかり次第追記予定(と書いてても忘れちゃうんだよなぁ)

rootNamespaceRentalFeePerBlock

ネームスペース作成手数料に関連する項目。ネームスペースの作成手数料は、この値とdefaultDynamicFeeMultiplier、期間(ブロック数)の積となる。

「RentalFee per Block」なので、有効期間に対して乗算される値ってことですね。

期間

NIS1のネームスペースの有効期間は作成から1年でしたが、catapultでは、作成時に期間を指定することができます。
とは言っても上限があり、その上限は、

config-network.properties
maxNamespaceDuration = 365d

により、定められています。

これは、ネームスペースの最大有効期間が365日であることを表しています。

プライベートチェーンで、実質無期限のネームスペースを作成しようとする場合は、
この最大有効期間を、十分大きい数字(365000d=1000年とか)とします。

前述の通り、ネームスペースの最大有効期間の単位はd(day:日)ですが、
ネームスペースを取得するTx作成時には、ブロック数で指定します。

この変換は次の式で求められます。

duration ≈ numberOfDays * 86400 / blockGenerationTargetTimeInSeconds
参考:https://nemtech.github.io/ja/concepts/namespace.html

要するに、numberOfDays(日数)×86400(24h×60m×60s)で日数を秒単位にして、
それをblockGenerationTargetTimeInSeconds(ブロックの生成感覚)で徐算してるわけです。

ちなみにblockGenerationTargetTimeInSecondsは、デフォルトで15sです。

プライベートチェーンのカスタマイズとして、blockGenerationTargetTimeInSecondsもいじりたいのですが、正直どんな不都合が出てくるか分からないので、まだ試せてないです。

参考までに、elephant-2でblockGenerationTargetTimeInSeconds=5sにしたとき(ネットワーク越しのノードなし)は、一ヶ月ほどぶん回しても問題は起こらなかったです。

12
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
1