【仮想通貨NEM】 NEM2-CliでCatapultネットワークに触れる3
前回の続きです。
今回やること
今回は、前回までに用意したローカルのmijinネットワークにNEM2-Cliを使ってトランザクションを投げるところまでやります。
これ以降はNEM2-Cliのリファレンスを見ながらコマンド叩いていくだけですね。
私の使っているOSはこんなかんじ。
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04 LTS (Bionic Beaver)"
まずはGithubページのREADMEを見て必要なものの確認
下記ページのREADMEを見ましょう。
今回は、このリポジトリのダウンロードは不要です。 NEM2-CliはNode.jsのパッケージ管理システムのnpmに登録されたものを利用します。(自分でビルドしたければしてもいいですが…)
必要なものは、先程も行ったとおりNode.js(npmはNode.jsのインストール時に一緒についてくる。)
The nem2-cli is distributed using the node package manager npm.
npm install nem2-cli -g
The nem2-cli works on NodeJS versions:
8.9.X
9.X.X
https://github.com/nemtech/nem2-cli Installationより
Node.jsのバージョン確認しましょう。ちなみに私は...
$ node -v
v9.11.1
$ npm -v
6.1.0
でした。
npmを使ってNEM2-Cliをインストール
READMEに書いてあるとおり、
$ npm install nem2-cli -g
を叩きます。すると、管理者権限で実行せよと怒られる。なので…
$ sudo npm install nem2-cli -g --unsafe-perm
で、無事NEM2-Cliがインストールされた。 しれっと追加されている --unsafe-perm オプションは、管理者権限が必要な操作をする時に、必要になることがあるオプションなんだとか。
(この前にsudoだけでnpm install すると権限が無いと言われ、--unsafe-permを追加すると無事インストールできた。これが無いと制限がかかるみたいだけど詳しく調べてはないので説明は出来ない。)
インストールしたら確認しましょう。コンソールに " nem2-cli " と打つだけ。
おぉ…それっぽい…
xemを持っているアカウント情報を取得する
Catapultネットワークでは、全てのxemはnemesisブロックで生成され、最初に設定した各アカウントに割り振られます。
ということは、送金を試す前にまず最初にxemを持っているアカウントの情報を得ないといけません。(具体的には秘密鍵)
とりあえずヒントをbootstrapのREADMEから探しましょう。「キーの設定」の項に普通に書いてあります。
前回までで、bootstraopをダウンロードし、docker-composeしている方は、そのディレクトリ内部の build/generated-addresses/ の中に、3つのファイルを見つけることが出来るはずです。
- README.md
- addresses.yaml
- raw-addresses.txt
の3つです。このうち、addresses.yamlには、各アカウントの秘密鍵、公開鍵、アドレスに加えて、各アカウントの役割が記載されています。ここからxemを持っているアカウントを選択しましょう。
今回は、addresses.yaml内の " nemesis_adresses " の一番上にあるものを使います。
[ catapult/catapult-service-bootstrap-master/build/generated-addresses/addresses.yaml ]
nemesis_addresses:
- private: D4DA2B736DAFC494939CEB0583E39450C8EA629E0998A54ACFAD7C97DFED0A00
public: EA2E9D94E0A3A6AD57C45C0EB30EC86C0DDAC864F9B13864333012CD4DD10971
address: SBBT7VPHPAWNTJ5JQQABGOTZUCQWG4FUV6ZELD4H
これで準備が出来ました。ここからがNEM2-Cliの操作です。mijinネットワークは動かしっぱなしにしておいてください。
1. プロフィールを作成する
まずは、addresses.yamlから選択したアカウントを、NEM2-Cliのプロフィールに登録します。プロフィールの作成のコマンドは下記の通り
$ nem2-cli profile create \
--privatekey your_private_key \
--network MIJIN_TEST \
--url http://localhost:3000 \
--profile mijin_test_net_profile
なので、今回は...
$ nem2-cli profile create --privatekey D4DA2B736DAFC494939CEB0583E39450C8EA629E0998A54ACFAD7C97DFED0A00 --network MIJIN_TEST --url http://localhost:3000 --profile mijin_test_net_profile
とします。--profileオプションはプロフィール名なので任意で変えても問題ありません。
2. 作成したプロフィールを確認する
ちゃんと出来たか確認。
$ nem2-cli profile list
Profile stored correctly
mijin_test_net_D4DA->
Network: MIJIN_TEST
Url: http://localhost:3000
Address: SBBT7VPHPAWNTJ5JQQABGOTZUCQWG4FUV6ZELD4H
PublicKey: EA2E9D94E0A3A6AD57C45C0EB30EC86C0DDAC864F9B13864333012CD4DD10971
PrivateKey: D4DA2B736DAFC494939CEB0583E39450C8EA629E0998A54ACFAD7C97DFED0A00
出来ていれば問題なし。
3. 作成したプロフィールを登録
作成したプロフィールは環境変数の " NEM2_PROFILE " にプロフィール名を入れることで登録できます。
$ export NEM2_PROFILE=mijin_test_net_profile
恒久化したければ .bash_profile などに書いておくのをお忘れなく。windowsだとコマンド違うのかな?(分からないけど環境変数NEM2_PROFILEを作ってプロフィール名を入れればいけるんじゃないかな?)
これにより、トランザクション生成等のコマンドはこのアカウントから生成されるものであるとNEM2-Cliは認識してくれます。
4. アカウントの情報を確認
とりあえずプロフィールに設定したアカウントの情報を取ってみます。
$ nem2-cli account info --profile mijin_test_net_profile
Account: SBBT7V-PHPAWN-TJ5JQQ-ABGOTZ-UCQWG4-FUV6ZE-LD4H
-------------------------------------------------------
Address: SBBT7V-PHPAWN-TJ5JQQ-ABGOTZ-UCQWG4-FUV6ZE-LD4H
at height: 1
PublicKey: 0000000000000000000000000000000000000000000000000000000000000000
at height: 0
Importance: 409090909
at height: 5026
Mosaics
nem:xem: 409090909
5. 適当なアドレスの用意
プロフィールに設定したアカウントからxemを送信するための受取アドレスを適当に用意します。
適当に用意したアドレス:
SBJS4J5HOZLOWISW7KJIKP3CBN3TM2Y7FYABBAGM
中身見てみましょう。
$ nem2-cli account info --address SBJS4J5HOZLOWISW7KJIKP3CBN3TM2Y7FYABBAGM
Error {"code":"ResourceNotFound","message":"no resource exists with id 'SBJS4J5HOZLOWISW7KJIKP3CBN3TM2Y7FYABBAGM'"}
はい。まだネットワーク上にアカウント情報がないのでエラーです、
6. 送信トランザクションの送信
受取アドレスの準備も出来たところで、送信を試してみます。TransferTransactionを使います。
$ nem2-cli transaction transfer \
--recipient recipient_address \
--message "message" \
--mosaics nem:xem::send_amound
今回は...
$ nem2-cli transaction transfer --recipient SBJS4J5HOZLOWISW7KJIKP3CBN3TM2Y7FYABBAGM --message "payout of 10 xem" --mosaics nem:xem::10000000
Transaction announced correctly
Hash: 5E6C4C8D40B77FF709E51C77D293A24840F7594F5F43C6E2386F3F079E4AD349
Signer: EA2E9D94E0A3A6AD57C45C0EB30EC86C0DDAC864F9B13864333012CD4DD10971
これで、SBJS4J5HOZLOWISW7KJIKP3CBN3TM2Y7FYABBAGMに向けて10xemが送られます。注意すべき事項は、xemは可分性が有り1/1,000,000xemが最小単位なので、10xemを送りたければamountを 10,000,000 とするところぐらいでしょうか。
7. 送信できたか確認してみる
受け取り側アカウントの状態
$ nem2-cli account info --address SBJS4J5HOZLOWISW7KJIKP3CBN3TM2Y7FYABBAGM
Account: SBJS4J-5HOZLO-WISW7K-JIKP3C-BN3TM2-Y7FYAB-BAGM
-------------------------------------------------------
Address: SBJS4J-5HOZLO-WISW7K-JIKP3C-BN3TM2-Y7FYAB-BAGM
at height: 5335
PublicKey: 0000000000000000000000000000000000000000000000000000000000000000
at height: 0
Importance: 0
at height: 0
Mosaics
nem:xem: 10
送信したトランザクション
$ nem2-cli transaction info --hash 5E6C4C8D40B77FF709E51C77D293A24840F7594F5F43C6E2386F3F079E4AD349
TransferTransaction:
Recipient:SBJS4J-5HOZLO-WISW7K-JIKP3C-BN3TM2-Y7FYAB-BAGM
Message:"payout of 10 xem"
Mosaics: d525ad41d95fcf29:10000000
Signer:SBBT7V-PHPAWN-TJ5JQQ-ABGOTZ-UCQWG4-FUV6ZE-LD4H
Deadline:2018-07-02
Hash:5E6C4C8D40B77FF709E51C77D293A24840F7594F5F43C6E2386F3F079E4AD349
ということで、送信できたことまで確認できました。 " Mosaics: d525ad41d95fcf29:10000000 " の最初の項目はmosaicIDで、xemのmosaicID=d525ad41d95fcf29ということです。
今回はここまで(続く)
