8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NEM SymbolのトークンをブラウザJavaScriptだけで作成する方法

Last updated at Posted at 2020-04-13

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

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?