LCNEMの仕事ついでに、NEMモザイクの仕組みを解剖する

[mathjax]

ビットコイン方面で有名な大石さんも

NEMモザイクの仕組みを今理解されたようで、NEMモザイクの仕組みへの理解をもっと広めたほうがいいと感じましたので、NEMモザイクのしくみを解説します。私が代表を務めるLCNEMの仕事のついでです。

NEMモザイクの作成は、Nano wallet上で行うことができます。

モザイク作成

モザイクを作成するには、まずネームスペースを取得しなければなりません。

ネームスペースとは、インターネットにおけるドメインのようなものです。

ネームスペースは、レベル3まで作ることができます。レベルとは、サブドメインの階数のようなもので、

例えばLCNEMのネームスペースlcはレベル1で、もしlc.sub.subsubというネームスペースを取得するとこれはレベル3になります。

レベル4はつくることができません。lc.sub.subsub.subsubsubはつくれないということです。

受信側アドレスNAMESP-ACEWH4…は、ネームスペース登録用のアドレスです。

うまいことNAMESPACEという名前になっています。

なにがすごいの?という方は、

NEMのコールドウォレットは難しいのか

をご覧ください。簡単にここで紹介すると、アドレスとは公開鍵を加工したもので、公開鍵はランダムに生成される秘密鍵から作られます。アドレスがうまいことNAMESP-ACE…となるような秘密鍵を探し当てるのは、難しいんです。

ネームスペースを作成すると、次はモザイク作成です。

モザイク作成

lc:1000usdというモザイクを作ろうとしている画面です。

モザイク名は、記号から始めることはできません。しかし、数字から始めることはできないとの情報をインターネットでちょくちょくみかけましたが、数字から始めることはできます。(lc:1000jpyで証明済み。)

受信側アドレスNBMOSA-ICOD4F…は、モザイク作成用のアドレスです。

mainnetのNEMアドレスはNから始まるので、NAMESPACEほどうまいこといっていませんが、それなりにうまいアドレスになっています。

各設定について説明します。

初期供給量

これは言葉そのままです。モザイクを作成すると、モザイク作成者はこの量のモザイクを所有することになります。

最大値は9,000,000,000です。

可分性

これはモザイクに小数点何桁まで分割を許容するかを設定する値です。0から6まで設定できます。

LCNEMはもともとlc:jpyの可分性を0、lc:usdの可分性を2にすることを想定していましたが、検討した結果、lc:1000jpyの可分性を6、lc:1000usdの可分性を6にすることにしました。

なぜ6なのか

NEMブロックチェーン上では、nem:xem含め、モザイクの量は少数ではなく整数で管理しています。

浮動小数点数で扱うと、丸め誤差が発生する可能性があるからです。

次の例を考えてみましょう。

$$x=\frac{1}{3}$$

とします。xは浮動小数点数です。

次に、

$$y=3x$$

とします。

数学では$$y=1$$ですが、コンピュータ上ではどうなるでしょうか?実はこれは$$y=1$$になるとは保証されていないんです。

$$\frac{1}{3}=0.333\cdots$$のような循環小数を扱うとき、いくら循環していようと、浮動小数点数の許容量で桁数を終わりにする必要があります。ここで発生するのが、丸め誤差です。ブロックチェーンのように資産を管理するシステムでは、このような誤差は重大なトラブルを起こす可能性があるのです。

NEMブロックチェーンでは、モザイク量を整数で管理し、1単位を1,000,000としています。1XEMは、NEM内部では1,000,000nem:xemと保存されています。NEM内部での1nem:xemこそが、XEMの最小単位μXEMなわけです。

$$1000000=10^6$$

ですから、この6が可分性の最大値6にあたります。

譲渡許可

譲渡許可設定をオフにすると、モザイク作成者を送信者もしくは受信者に含めないと送信できないようになります。この設定を利用すれば、譲渡不可の権利をモザイクで証明できたりします。

供給量変更可

これは言葉そのままです。Nano walletのモザイク設定画面から、供給量を変更できるようになります。

徴収を要求

この設定によって、送金毎に税金のような感じで徴収をするよう設定することができます。逆に、税金を納めなければ送金することができません。

この仕組みを応用し、自分以外誰も持っていないモザイクを徴収するように設定すれば、送金することができないモザイクを作ることができます。

コインチェック事件のハッカーに、この仕組みを応用したモザイクを送り付け、マーキングするという使われ方もしました。


誰も持っていないモザイクを納めなければ所有権を放棄することができないモザイク”mizunashi.coincheck_stolen_funds_do_not_accept_trades:owner_of_this_account_is_hacker” をハッカーアドレスに送り付けることによって、マークしているわけです。

http://explorer.ournem.com/#/s_account?account=NDODXOWEIZGJSMAEURXACF4IEHC2CB7Q6T56V7SQ

理論上は、この仕組みを応用することで、負債を表現することも可能です。

譲渡不可にすることによって転送を禁止し、lc:minus1000jpyをモザイク作成者(この場合LCNEM)に返すにはlc:1000jpyを納めなければならない、という感じですね。

※LCNEMはこのようなモザイクを発行する予定はございません。あくまで思いついたアイデアの紹介です。

いかかでしたか。このようにNEMはモザイクを作ることができるだけでなく、様々な設定を応用することもできます。

モザイクへの理解の普及に繋がれば幸いです。