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 は、添付したモザイクの組み合わせを何口送るかということに使用されます。
例えば、10 xem、10 mozを送信しようとしたときに、amount が 1 ならば、10 xem、10 mozが、amount が 2ならば、20 xem、20 moz が送信されるということです。
なので、バージョン2 のときの amount は送信される xem の量ではないため、残高から引かれるものではありません。
NanoWalletでは「モザイクを送信」を選択すると、1 xem が固定でセットされますが、この1xemは送信されるものではないということになりますね。
(説明されないと、1xem 送っちゃいそうに見えますよね…?)
というわけで、モザイクを送信するときは、トランザクションにモザイクを添付し、「量」は倍率として考えてセットするわけです(通常は1、つまり1倍ということ)
ブラウザのデバッガなどで「量」のフィールドを2などに書き換えてその動作を確認することができます。
NanoWallet では「モザイクを送信」にチェックをいれると1をセットしてくれるので、この辺の仕様を気にせずモザイクを添付して、送りたい量を入力すればよいです。
ちなみにデフォルトで添付されている xem は、デフォルトなら 0 xem の送信なので送られてしまうことはないです。
ただし、0xem (のモザイク)を送ったというトランザクションになるので、それが気になるなら削除することもできます。
テストネット用xem
何にせよ、自分で理解していないまま、なにか操作をするというのは失敗の元なので、もし不慣れな操作をする場合は、テストネットで試してみるのが良いと思います。
拙作ですがテストネット用のxemが手に入る蛇口を運用しています。
NanoWalletにはテストネットのアカウントも登録できますし、1つくらいアカウントを用意しておくと、動作のお試しができて良いと思います。
- NEM Testnet Faucet
(テストネットのxemが不要になったらTDWWYDGQNBKSAJBSHZX7QWVX7WNVAWWB7HGPWRB2
へ送り返してくださいね)
*
NanoWallet 2.x になり、amount の表示が隠され、この誤解は引き起こされなくなったかもしれません。
ただし、NISの仕様が変わったわけではないので、API や SDK などを利用する場合はこの仕様について理解しておく必要があります。