chromeブラウザのデベロッパーツールだけでNEM Symbolのトークンを作成してみましょう。
(デスクトップウォレットを使用したトークンの作成方法はこちらがわかりやすいです)
Symbol(NEM)なら誰でも簡単にGUIでトークンが発行できる
まず、F12キーでchromeブラウザの開発者コンソールを開きます。
コマンドプロンプトに以下のコードを入力してエンターキーを押してください。
(script = document.createElement('script')).src = 'https://xembook.github.io/nem2-browserify/symbol-sdk-pack-0.21.0.js';
document.getElementsByTagName('head')[0].appendChild(script);
これは強制的にsymbol-sdkを今開いているHTMLページに埋め込むスクリプトです。埋め込む場所はGoogleのホームでもどこでも大丈夫です。
現在Googleのトップページはセキュリティが厳しくScriptを埋め込めないことを確認しています。適当にノードにアクセスしてその場所でコンソールを開いてください。例:http://api-01.us-west-2.0.10.0.x.symboldev.network:3000/chain/info
初期設定
nem = require("/node_modules/symbol-sdk");
NODE = 'https://sym-test.opening-line.jp:3001';
GENERATION_HASH = '6C1B92391CCB41C96478471C2634C111D9E989DECD66130C0430B5B8D20117CD';
txHttp = new nem.TransactionHttp(NODE);
alice = nem.Account.generateNewAccount(nem.NetworkType.TEST_NET);
console.log("privateKey:" + alice.privateKey)
"http://faucet-0.10.0.x-01.symboldev.network/?recipient=" + alice.address.plain() +"&amount=200"
symbol-sdkのライブラリを読み込んでnem
で使えるようにします。
アクセスするノードはオープニングラインさんのHTTPS対応ノードを借ります。
今回はSymbolのテストネット上にaliceというアカウントを生成し、そのアカウントからトークンを作成します。
上記スクリプトを実行すると最後にaliceの秘密鍵と蛇口サイトへのリンクが表示されるので、今後作成したトークンを使いたい人は秘密鍵のメモをしてから蛇口サイトへいって200XYMほど入金します。
トークン名の定義
NAMESPACE = "xembook";
今回はxembookで作成してみます。
トランザクション作成
//ネームスペース作成
namespaceTx = nem.NamespaceRegistrationTransaction.createRootNamespace(
nem.Deadline.create(),
NAMESPACE,
nem.UInt64.fromUint(180000),
nem.NetworkType.TEST_NET
);
//モザイク作成
//ランダムのnonce値を元にモザイクを作成します。
nonce = nem.MosaicNonce.createRandom();
mosaicDefTx = nem.MosaicDefinitionTransaction.create(
nem.Deadline.create(),
nonce,
nem.MosaicId.createFromNonce(nonce, alice.publicAccount),
nem.MosaicFlags.create(true, true, true),
0,
nem.UInt64.fromUint(0),
nem.NetworkType.TEST_NET
);
//モザイク変更
mosaicChangeTx = nem.MosaicSupplyChangeTransaction.create(
nem.Deadline.create(),
mosaicDefTx.mosaicId,
nem.MosaicSupplyChangeAction.Increase,
nem.UInt64.fromUint(1000000),
nem.NetworkType.TEST_NET
);
//モザイクとネームスペースのリンク
mosaicAliasTx = nem.AliasTransaction.createForMosaic(
nem.Deadline.create(),
nem.AliasAction.Link,
namespaceTx.namespaceId,
mosaicDefTx.mosaicId,
nem.NetworkType.TEST_NET
);
各メソッドについてリファレンスのリンクを載せておきます。
NamespaceRegistrationTransaction.createRootNamespace
MosaicDefinitionTransaction.create
MosaicSupplyChangeTransaction.create
AliasTransaction.createForMosaic
トランザクションの集約
aggregateTx = nem.AggregateTransaction.createComplete(
nem.Deadline.create(),
[
namespaceTx.toAggregate(alice.publicAccount),
mosaicDefTx.toAggregate(alice.publicAccount),
mosaicChangeTx.toAggregate(alice.publicAccount),
mosaicAliasTx.toAggregate(alice.publicAccount),
],
nem.NetworkType.TEST_NET,
[],
nem.UInt64.fromUint(1000000)
);
NEM Symbolでは整合性の取れたトランザクションであれば集約させて1ブロックに詰め込むことができます。整合性が取れていない場合はネットワークへの通知後にステータスがErrorになります。
署名とネットワークへのアナウンス
signedTx = alice.sign(aggregateTx,GENERATION_HASH);
txHttp
.announce(signedTx)
.subscribe(_ => console.log(_), err => console.error(err));
"https://sym-test.opening-line.jp:3001/transactionStatus/" + signedTx.hash
出力されたリンクをクリックすると、ステータスが確認できます。
エクスプローラーで確認してみましょう
http://explorer-0.10.0.x-01.symboldev.network/mosaics