NEM-sdkを使ってモザイクの送信を試していたのですが、自分の想像と違う動作だったので、実際の動きからその仕様を整理してみました。

といってもキチンと仕様書には書いてあったのでよく読めという話でしかないのですが。

追記:以下の画面キャプチャはNanoWallet 1.x系のものです。2.xでは表示されなくなりました。ただしNISの仕様は変わっていません。

仕様

この章の後半にちらっと書いてあるのですが、日本語訳のほうをみたらわかりやすいでしょう。

トランザクションのamountフィールドは、添付物によるトランザクションにより異なって解釈されます。

アタッチメントに記載された数量を掛ける数は金額を1,000,000で割ることによって与えられます(このバージョンでは、NISは分数転送をサポートしていません)。この例では3,000,000 / 1,000,000 = 3であり、アタッチメントが3回送信され、3つのsilverモザイクと300XEMが受信者に送信されます。

xemもネームスペースnem以下のモザイクであるため(nem:xem)、バージョン2でxemを転送する場合は、xemをモザイクとして添付することになります。

この際、バージョン1で指定していた送信するxemを表すamountは、添付したモザイクの組み合わせを何口送るかということに使用されます。

例えば、10xem、10mozを送信しようとしたときに、amountが1ならば、10xem、10mozが、amountが2ならば、20xem、20mozが送信されるということです。

なので、バージョン2のときのamountは送信されるxemの量ではないため、残高から引かれるものではありません。

NanoWalletでは「モザイクを送信」を選択すると、1xemが固定でセットされますが、この1xemは送信されるものではないということになりますね。

mosaic1

(説明されないと、1xem送っちゃいそうに見えますよね…?)

というわけで、モザイクを送信するときは、トランザクションにモザイクを添付し、「量」は倍率として考えてセットするわけです(通常は1、つまり1倍ということ)

ブラウザのデバッガなどで「量」のフィールドを2などに書き換えてその動作を確認することができます。

NanoWalletでは「モザイクを送信」にチェックをいれると1をセットしてくれるので、この辺の仕様を気にせずモザイクを添付して、送りたい量を入力すればよいです。

mosaic2

ちなみにデフォルトで添付されているxemは、デフォルトなら0xemの送信なので送られてしまうことはないです。

ただし、0xem(のモザイク)を送ったというトランザクションになるので、それが気になるなら削除することもできます。

mosaic3

テストネット用xem

何にせよ、自分で理解していないまま、なにか操作をするというのは失敗の元なので、もし不慣れな操作をする場合は、テストネットで試してみるのが良いと思います。

拙作ですがテストネット用のxemが手に入る蛇口を運用しています。

NanoWalletにはテストネットのアカウントも登録できますし、1つくらいアカウントを用意しておくと、動作のお試しができて良いと思います。

(テストネットのxemが不要になったらTDWWYDGQNBKSAJBSHZX7QWVX7WNVAWWB7HGPWRB2へ送り返してくださいね)

NanoWallet 2.xになり、amountの表示が隠され、この誤解は引き起こされなくなったかもしれません。

mosaic4

ただし、NISの仕様が変わったわけではないので、APIやSDKなどを利用する場合はこの仕様について理解しておく必要があります。