この記事は、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では、作成時に期間を指定することができます。
とは言っても上限があり、その上限は、
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
にしたとき(ネットワーク越しのノードなし)は、一ヶ月ほどぶん回しても問題は起こらなかったです。