はじめに
NEM2(Catapult)のcowに対応したnem2-cliがリリースされたので、nem2-cliを使ってcatapultを触ってみたいと思います。
事前準備: cowのプライベートネットワークを建てる
まずはcowのプライベートネットワークを建てます。
ノードはcatapult-server-bootstrapを使って建てました。
今回は特に設定は何もいじらずcloneしたものをそのまま利用しました。
アカウントを準備する
これから色々試す上で必要なアカウントを用意します。
テスト用の通貨cat.currency
が入っているアカウントは、bootstrapを使って立ち上げた場合、$(bootstrap-root)/build/generated-address/address.yaml
のnemesis_address
に出力されていますので、こちらから選んで使います。
nem2-cliをインストール
事前にnode.js(8.9.X以上, 9.X.X以上)を入れた状態で、以下のコマンドを実行してnem2-cliをインストールします。
$ npm install -g nem2-cli
cowに対応したnem2-cliのバージョンは0.11.0
となっています(2019/3/19時点)
プロファイルを作成する
nem2-cliをインストールしたら、nem2-cliでアカウントを操作するためのプロファイルを作成します。
$ nem2-cli profile create --privatekey your_private_key --network MIJIN_TEST \
--url http://your_domain:3000 --profile profile_a
privatekey
はaddress.ymalからピックアップしたもの、url
は建てたノードのurlを設定してください。
もう一つ、送金時の受け取り用のアカウントのプロファイルも作成します。こちらは空の状態でもいいのでaccount generate
を使って作成します。
$ nem2-cli account generate --network MIJIN_TEST --url http://your_domain:3000 -s --profile profile_b
アカウントを確認する
プロファイルを作成したら、account info
でアカウントの状態を確認してみましょう。まずはaddress.yamlからピックアップしたアカウントから
$ nem2-cli account info --profile profile_a
こんな感じになっていれば大丈夫です
Account: SCGWYT-G5TIX2-MF5BUX-CBGQYQ-KNSPG5-U6YPO3-IRLC
-------------------------------------------------------
Address: SCGWYT-G5TIX2-MF5BUX-CBGQYQ-KNSPG5-U6YPO3-IRLC
at height: 1
PublicKey: 0000000000000000000000000000000000000000000000000000000000000000
at height: 0
Importance: 0
at height: 0
Mosaics
650b00d30620b86a: 409090909
Mosaicsの650b00d30620b86a
はこのネットワーク基軸通貨のIDでcat.currency
というネームスペースと紐付いています。
新規で作ったもう一つのプロファイルも確認してみましょう。
$ nem2-cli account info --profile profile_b
Error {"code":"ResourceNotFound","message":"no resource exists with id 'SA7L2T5XNDELKKGB246EF3QSPU7A5HOAZZXUM62S'"}
こんな感じでエラーとなりますが、一度もトランザクションが発生していないアカウントの場合はこうなる仕様なので心配する必要はありません。
アカウントを監視する
これから送金やネームスペースの作成、モザイクの作成をしていきますが、これらがきちんと出来たかどうかを確認するためアカウントの監視をします。
アカウントの監視は以下のコマンドを実行して行います。
未承認トランザクションの追加の監視
未承認トランザクションが追加されたかどうかの監視は以下のコマンドを実行します。
$ nem2-cli monitor unconfirmed --profile profile_a
トランザクションの送信が成功すると以下の様に表示されます。
TransferTransaction: Recipient:SCGWYT-G5TIX2-MF5BUX-CBGQYQ-KNSPG5-U6YPO3-IRLC
Message:"Hello world" Mosaics: NamespaceId:85bbea6cc462b244::1000000
Signer:SA7L2T-5XNDEL-KKGB24-6EF3QS-PU7A5H-OAZZXU-M62S Deadline:2019-03-19
Hash:FF25743E6F7307A298B7F35E2F6FC22420C03FA9F549303E04ED2F72FD18BE76
承認トランザクションの監視
トランザクションが承認されてブロックに取り込まれたかどうかの監視は以下のコマンドを実行します。
$ nem2-cli monitor confirmed --profile profile_a
トランザクション送信時のエラーを監視する
トランザクションを送信した際に、エラーが発生したかどうかを監視するには以下のコマンドを実行します。
$ nem2-cli monitor status --profile profile_a
トランザクションの送信時にエラーが起きると以下の様にエラーの内容を通知します。
Hash: 2C5357A9870D7B30BAB3D142A3FDFEBB30F89E4C497160CA00DA46E450EABAED
Error code: Failure_Mosaic_Invalid_Duration
Deadline: 2019-03-19 18:45:50.658
トランザクションの送信が成功した場合は、何も表示されません。
トランザクションの送信を試す際は、少なくともmonitor unconfirmed
とmonitor status
は立ち上げておくと良いでしょう。
送金する(転送トランザクション)
profile_a
からprofile_b
のアカウントへ送金してみましょう。
送金(転送トランザクション)するにはtransaction transfer
を使います。
$ nem2-cli transaction transfer --recipient (profile_b_address) \
--mosaics @cat.currency::1000000 --message "Hello NEM" --profile profile_a
--recipient
で受け取り先のアドレスを指定、--mosaics
で送信するモザイクを指定、--message
で添付するメッセージを指定します。
モザイクの指定は@cat.currency
は基軸通貨に紐付いているネームスペースで送信するモザイクを指定し、1000000
は送信する量を指定しています。
cat.currency
は可分性6
になっているため、1,000,000
で1
単位を送ることになります。もし10,000
の場合、
0.01
となります。
トランザクションのコマンドを実行すると以下の様に、トランザクションのハッシュ値と、送信者の公開鍵が表示されます。
Transaction announced correctly
Hash: F33EE7B7E28648D441E42569BC52A6236DCBC22D271817FACFD16AF5545D2805
Signer: 66F7D91B214C0560847212377A97CF9ED1FA5EB66CE6EB91CB5AC4F17944B84A
送信後のアカウントの状態の確認
monitor confirmed
などで、トランザクションがブロックに取り込まれたのを確認したら、アカウントの状態を確認してみましょう。
以下の様にprofile_a
のモザイク650b00d30620b86a
の数量が1減って、
profile_b
のモザイク650b00d30620b86a
が1増えれば成功です。
profile_a
$ nem2-cli account info --profile profile_a
Account: SCGWYT-G5TIX2-MF5BUX-CBGQYQ-KNSPG5-U6YPO3-IRLC
-------------------------------------------------------
Address: SCGWYT-G5TIX2-MF5BUX-CBGQYQ-KNSPG5-U6YPO3-IRLC
at height: 1
PublicKey: 66F7D91B214C0560847212377A97CF9ED1FA5EB66CE6EB91CB5AC4F17944B84A
at height: 199
Importance: 0
at height: 0
Mosaics
650b00d30620b86a: 409090908
profile_b
$ nem2-cli account info --profile profile_b
Account: SA7L2T-5XNDEL-KKGB24-6EF3QS-PU7A5H-OAZZXU-M62S
-------------------------------------------------------
Address: SA7L2T-5XNDEL-KKGB24-6EF3QS-PU7A5H-OAZZXU-M62S
at height: 199
PublicKey: 0000000000000000000000000000000000000000000000000000000000000000
at height: 0
Importance: 0
at height: 0
Mosaics
650b00d30620b86a: 1
ネームスペースを作成する
ネームスペースを作成する際は、transaction namespace
を使用します。
ルートネームスペースを作成する
ルートネームスペースを作成する場合は--rootnamespace
を指定します。
--duration
はネームスペースをレンタルする期間(ブロック数)を指定します。
--name
でレンタルするネームスペース名を指定します。
$ nem2-cli transaction namespace --rootnamespace --duration 100000 --name daoka --profile profile_a
サブネームスペースを作成する
サブネームスペースを作成する場合は、--subnamespace
を指定します。
--parentname
に親のネームスペース名を指定します。
--name
でサブネームスペース名を指定します。
サブネームスペースのレンタル期間はルートネームスペースに依存します。
$ nem2-cli transaction namespace --subnamespace --parentname daoka --name token --profile profile_a
作成したネームスペースの情報を確認する
作成したネームスペースの情報を確認するには以下のコマンドを実行します。
--name
で情報を取得するネームスペース名を指定します。
$ nem2-cli namespace info --name daoka.token
Namespace: daoka.token
----------------------
hexadecimal: dc0dccef7b7bed17
uint: [ 2071719191, 3691891951 ]
type: Sub namespace
owner: SCGWYT-G5TIX2-MF5BUX-CBGQYQ-KNSPG5-U6YPO3-IRLC
startHeight: 273
endHeight: 100273
Parent Id: daoka.token
----------------------
hexadecimal: ee0edbb5737ca68c
uint: [ 1937548940, 3993951157 ]
表示される情報の内容は以下の通りです。
-
hexadecimal
,unit
がネームスペースのID、 -
type
はルートネームスペースかサブネームスペースかの種別 -
owner
はネームスペースを作成したアカウント -
startHeight
はレンタル開始ブロック数 -
endHeight
はレンタル終了ブロック数 - サブネームスペースの場合、1つ上の親ネームスペースのID情報が表示されます。
モザイクを作成する
モザイクを作成するにはtransaction mosaic
を使用します。
% nem2-cli transaction mosaic --amount 1000000 --transferable \
--supplymutable --divisibility 0 --duration 100000
指定する内容は以下の通りです
-
--amount
...供給量 -
--transferable
... 転送を許可するか -
--supplymutable
... 供給量変更を許可するか -
--divisibility
... 可分性(小数点の数) -
--duration
... モザイクの存続期間(ブロックする)
上記のコマンドを実行すると以下の様に表示されます
Do you want mosaic to have levy mutable? [y/n]: n
Transaction announced correctly
Hash: 8AE52129A6A3CEC86A554C8959A51B83AAB327284BF2493347A8787609B53681
Signer: 66F7D91B214C0560847212377A97CF9ED1FA5EB66CE6EB91CB5AC4F17944B84A
Your mosaic id is:
Hex: 412b394aec998f66
Uint64: [ 3969486694 1093351754]
levy mutableをどうするか聞かれますが、cowでは意味がないのでn
を指定します。
今まで同様、トランザクションのハッシュ値と送信者の公開鍵を表示されますが、それに加えてモザイクのIDも表示されます。
作成したモザイクの情報を取得する
作成してモザイクの情報の取得は以下のコマンドを実行します。
% nem2-cli mosaic info --hex 412b394aec998f66
--hex
で先ほど作成したモザイクのHEX値を指定します。
コマンドを実行すると以下の様にそのモザイクの情報が表示されます
Mosaic: Hex: 412b394aec998f66
Uint64: [ 3969486694, 1093351754 ]
divisibility: 0
transferable: true
supply mutable: true
block height: 335
duration: 100000
owner: SCGWYT-G5TIX2-MF5BUX-CBGQYQ-KNSPG5-U6YPO3-IRLC
supply: 1000000
表示される内容は以下の通りです
-
Hex
,Uint64
... モザイクのID -
transferable
... モザイクの転送許可 -
supply mutable
... 供給量変更許可 -
block height
... モザイク作成時のブロック数 -
duration
... モザイクの有効期間(ブロック長) -
owner
... モザイク作成者のアドレス -
supply
... 供給量
まとめ
こんな感じで、nem2-cliを使うとアカウントの作成、送金、ネームスペースの作成、モザイクの作成といった基本機能を試すことができます。
ここで触れていない機能やオプションも色々あるので、もっと触って見たい方は公式のガイドを見てみてください。