search
LoginSignup
0
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

nem2-cliでcatapultを触ってみる(cow対応版)

はじめに

NEM2(Catapult)のcowに対応したnem2-cliがリリースされたので、nem2-cliを使ってcatapultを触ってみたいと思います。

事前準備: cowのプライベートネットワークを建てる

まずはcowのプライベートネットワークを建てます。
ノードはcatapult-server-bootstrapを使って建てました。
今回は特に設定は何もいじらずcloneしたものをそのまま利用しました。

アカウントを準備する

これから色々試す上で必要なアカウントを用意します。
テスト用の通貨cat.currencyが入っているアカウントは、bootstrapを使って立ち上げた場合、$(bootstrap-root)/build/generated-address/address.yamlnemesis_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 unconfirmedmonitor 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,0001単位を送ることになります。もし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を使うとアカウントの作成、送金、ネームスペースの作成、モザイクの作成といった基本機能を試すことができます。
ここで触れていない機能やオプションも色々あるので、もっと触って見たい方は公式のガイドを見てみてください。

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
What you can do with signing up
0
Help us understand the problem. What are the problem?