NEMのモザイクを使って独自通貨を作ってみる

はじめに

これまでCounterpartyやEthereumなどで独自通貨を作っていましたが、
今回はNEMを使って独自通貨を作成します。
NEMにはnamespaceとmosaicという
独自通貨を作る上で、便利な機能を持っている為、独自通貨という用途として考えたとき、
利便性に優れているといえます。

NEMとは

NEMはNew Economy Movementの略称。
BitcoinやEthereumと同じように仮想通貨。(仮想通貨の単位はXEM)
ブロック生成間隔が約1分程度とビットコインなど他の仮想通貨と比較すると、
トランザクション承認のスピードが早いことが特徴。

NEMのnamespaceとは

インターネットのドメインのようなもので、サブドイメインのように階層を持つことができます。
このnamespaceは永続的なものではなく、1年間の有効期限付きで、継続するためには
1年毎に使用料を支払う必要があります。(最大文字数は16文字、サブは64文字まで可能です)

NEMのmosaicとは

トークンなどと呼ばれるもので、実際に取引される通貨のようなものになります。
planets:jupiter
planets:xxxx
のような感じでnamespaceの下に紐付けされていきます。

設定可能な項目
説明
フリーテキスト。自由に記述でき、後で変更可能。
初期供給量
発行数。ロックすることもできます。

実際に作ってみる

1.nano walletをインストール

https://nem.io/downloads/

2.サービスから、ネームスペース と ドメインの設定をする

注意点としては、上位のネームスペースのレンタル料として100XEM(記事作成時点のレートで2800円前後)がかかります。またサブドメインのレンタル料として10XEM (現在レートで280円)がかかります。レンタル期間は1年となり、継続して使用する場合には手続きが必要となります。
nem-howto1.png

3.モザイクを作成する

nem-howto3.png

4.モザイクを送信する

nem-howto4.png

5.作ってみた

supernovaというドメインを取得して、その下に、
planetsというサブドメイン、その下にjupiterというような名称のモザイク(仮想通貨)を
作成してみました。

Supernova
    |-Planets
        |-Earth
        |-Mercury

http://chain.nem.ninja/#/browse/supernova.planets

nem-libraryを使ってJavaScriptから作成したモザイクを操作する

https://github.com/aleixmorgadas/nem-library-examples

インストール

npm install -g nem-library,rxjs

サンプル

get_balance.js
//アドレスのXEM + モザイクの残高を確認するサンプル
Object.defineProperty(exports, "__esModule", { value: true });
var nemlib = require("nem-library");
//MAIN_NET、TEST_NETなどから選択する
nemlib.NEMLibrary.bootstrap(nemlib.NetworkTypes.MAIN_NET);
//残高を確認するウォレットのアドレス
var address = new nemlib.Address("");
var accountOwnedMosaics = new nemlib.AccountOwnedMosaicsService(new nemlib.AccountHttp(), new nemlib.MosaicHttp());
accountOwnedMosaics.fromAddress(address).subscribe(function (mosaics) {
    console.log(mosaics);
});
get_namespace_info.js
//作成したネームスペースやモザイクの情報を取得するサンプル
var nemlib = require("nem-library");
//MAIN_NET、TEST_NETなどから選択する
nemlib.NEMLibrary.bootstrap(nemlib.NetworkTypes.MAIN_NET);
var mosaicHttp = new nemlib.MosaicHttp();
var namespace = "supernova.planets";
mosaicHttp.getAllMosaicsGivenNamespace(namespace).subscribe(function (mosaicDefinitions) {
    console.log(mosaicDefinitions);
});

おしまい