可分性を考慮したSymbolプログラミング

<p>ここでは、可分性について説明します。</p>

<h2><span style="font-size: 18pt;"><strong>可分性とは何か</strong></span></h2>
<p>可分性(divisibility)とは小数点以下の桁数のことです。<br />XYMの場合、可分性は6です。つまり、小数点以下は6けたです。つまり、小数点以下の0の数は6つあることになりますので、<br />1,000,000&mu;XYM(マイクロXYM) = 1XYM<br />ということになります。<br />もし、可分性が3の場合、<br />1,000 mMosaic(ミリモザイク) = 1 Mosaic</p>
<p>になります。</p>

<p>ここで、可分性に関する部分に注目して、以下のコードを見ていきます。</p>
<pre class="language-markup"><code>&lt;!DOCTYPE html&gt;
&lt;html lang="ja"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"&gt;&lt;/script&gt;
    &lt;link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/uikit@3.5.8/dist/css/uikit.min.css" /&gt;
    &lt;script src="https://cdn.jsdelivr.net/npm/uikit@3.5.8/dist/js/uikit.min.js"&gt;&lt;/script&gt;
    &lt;script src="https://cdn.jsdelivr.net/npm/uikit@3.5.8/dist/js/uikit-icons.min.js"&gt;&lt;/script&gt;
    &lt;script src="symbol-sdk-0.21.0.js"&gt;&lt;/script&gt;
    &lt;title&gt;Symbol mosaicの可分性を確認する&lt;/title&gt;
  &lt;/head&gt;
  &lt;body style="margin:30px;"&gt;
    &lt;h1&gt;Symbolを触ってみる&lt;/h1&gt;
    
    &lt;h2&gt;可分性(モザイクが小数点以下何桁で表現されるか)&lt;/h2&gt;
    &lt;div style="margin-top:10px;"&gt;Mosaic ID:&lt;input type="text" id="mosaic_id" class="uk-input"&gt;&lt;/div&gt;
    &lt;div style="margin-top:10px;"&gt;可分性:&lt;span id="divisibility"&gt;0&lt;/span&gt;桁&lt;/div&gt;
    &lt;div id="issue_tx" class="uk-button uk-button-primary" style="margin-top:10px;"&gt;可分性確認&lt;/div&gt;

    &lt;script&gt;
      const symbol=require("/node_modules/symbol-sdk");
      const nodeAddress='http://api-01.ap-northeast-1.0.10.0.x.symboldev.network:3000';
      const mosaicHttp = new symbol.MosaicHttp(nodeAddress);

      $('#issue_tx').click(function(){
        mosaicHttp.getMosaic(new symbol.MosaicId($('#mosaic_id').val()))
        .subscribe(mosaicInfo=&gt;$('#divisibility').text(mosaicInfo.divisibility),err=&gt;console.error(err));
      });
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre>

<p>まず、以下のコードを見ます。</p>
<p><em><strong>const mosaicHttp = new symbol.MosaicHttp(nodeAddress);</strong></em></p>
<p>MosaicHttpというオブジェクトを定数mosaicHttpに代入します。<br />この定数を用いて以下のコードを考えます。</p>
<p><em><strong> mosaicHttp.getMosaic(new symbol.MosaicId($('#mosaic_id').val()))</strong></em><br /><em><strong>.subscribe(mosaicInfo=&gt;$('#divisibility').text(mosaicInfo.divisibility),err=&gt;console.error(err));</strong></em></p>
<p>mosaicHttpの中にある<strong>getMosaic(new symbol.MosaicId($('#mosaic_id').val()))</strong>に入力したモザイクIDを入れます。</p>
<p>すると、mosaicInfoというやつに、<strong>mosaicHttp.getMosaic(new symbol.MosaicId($('#mosaic_id').val()))</strong>を実行した結果が非同期処理(subscribe)として返ってきて、そして、</p>
<p>mosaicInfoの中のdivisibilityをIDがdivisibilityと名付けた以下の要素内のテキストに書き込みなさいという事になります。</p>
<pre class="language-markup"><code>   &lt;div style="margin-top:10px;"&gt;可分性:&lt;span id="divisibility"&gt;0&lt;/span&gt;桁&lt;/div&gt;</code></pre>
<p>そうなると、ボタンをクリックして実行すると、0という数字が変わります。</p>
<p>こうして、調べたいモザイクの可分性がわかります。</p>

<h2><strong><span style="font-size: 18pt;">なぜ可分性を考えるのか</span></strong></h2>
<p>XYMの場合は可分性は6と決められているので、それに合わせてコードを組めばいいのですが、実際のモザイクは可分性が必ずしも6とは限りません。そこで可分性を考慮した柔軟なプログラムを組む必要があり、以上のコードはその時に役に立ちます。</p>
<p>&nbsp;</p>
※この記事は、nemlogで企画されたイベントであるしゅうさんの勉強会「しゅうさんといっしょ!」の内容の一部をまとめたものです。