開発の小技・Tips

nemアプリケーションを作るにあたって、ちょっとした小技やTipsを紹介したいとおもいます。

# 取引所などのアドレス

引用元: http://free.userboard.net/t306-topic
（変わるかもしれません。保証はできません）

```
NBZMQO-7ZPBYN-BDUR7F-75MAKA-2S3DHD-CIFG77-5N3D //Poloniex, hot wallet
NAHPYR-2PHSZ5-MGXKQS-W3HFDM-IXM36J-BHDHCP-XDQB //Poloniex, cold storage, exchange wallet
ND2JRP-QIWXHK-AA26IN-VGA7SR-EEUMX5-QAI6VU-7HNR //Bittrex, exchange wallet
NCP7UH-5BT5OH-PAWPFF-VNR245-3BNODJ-UZJ677-7N3N //HitBTC
NCXDAH-KIRVCM-S2HEXB-HYDSUW-XABAYG-VNLB3H-ZFWJ //HitBTC
NCCFO5-QDFV5F-S3BTBP-EU2QO6-UHZD7P-HGFNCP-ISDL //Bitcoin Indonesia
ND7HQ7-3YTGNE-YJT6PP-VOR6GM-2RHTVJ-TNRG2N-W5B6 //Btc38
NC2MYW-XT3YOS-AIBTWB-CW7ZKC-E4R4NI-KYCF7S-76UC //BTER
NDKTFW-VFDHDU-L4L3GX-Q32RVO-HQ5IJ5-DEAYHO-J7YS //BTER ?
NAGJG3-QFWYZ3-7LMI7I-QPSGQN-YADGSJ-ZGJRD2-DIYA //Zaif, exchange wallet
NC3BI3-DNMR2P-GEOOMP-2NKXQG-SAKMS7-GYRKVA-5CSZ //Coincheck
NCQJR6-47FLD7-UM6FFV-L4Z7DY-LWJ3I6-OGV5TM-ALUO //Changelly
NBLQ6P-E7Z5CV-ANJNXG-OR74UQ-LOJ2YM-GJJOZ4-YFAQ //Changelly
NCR2CQ-E6AI3D-IRHPHE-PBSVDB-OQFSHX-FSQF4N-IUAH //tipnem
```


# NEMタイムスタンプについて

nem時間では`0`にあたる現実の時間です。ネメシスブロックと呼ばれます。
"2015-03-29 00:06:25 UTC"
http://chain.nem.ninja/#/block/1


# NEMタイムスタンプを日時に変換するワンライナー(JavaScript)

```
new Date(Date.UTC(2015, 2, 29, 0, 6, 25, 0) + (NEMTIME * 1000));
```


# 未承認トランザクションを残しておきたい

未承認トランザクションは`/account/unconfirmedTransaction`にて取得できますが、調子が良ければ数秒で承認されてしまい、取得できなくなってしまいます。

開発やデバッグなどで何度も要求したい場合は、インターネット接続を切断し、
ローカルにNISを立て、それにトランザクションをリクエストします。
すると未承認トランザクションとして残り続けます。
インターネット接続を再開すると承認されてしまいます(たまにずっと承認されず、期限切れになったりもします)
私は面倒だったのでWiFiをOffにしたりしていますが、FWなどでポート単位でブロックしてもいいかもしれません。

受信は試したことがないのですが、未承認トランザクションを受信したタイミングで切断すれば行けそうな気がします。


# NEMロゴのカラーコード

たしかデザインドキュメントのガイドラインから抜粋。

```
#f7a800
#67b2e7
#00c4b3
#000000
#ffffff
```


# nembexで表示される文字をデコる

nembexのnodeを見ているといくつかのノード名に色がついていたりします。
node名はbootNameで設定できますが色はどうやって付けるのか。

ふと、NISに http://127.0.0.1:7890/node/peer-list/all でアクセスして返ってきたノード情報を見ていたらフォーマットがわかりました。

```
{
  "metaData": {
    "features": 1,
    "application": null,
    "networkId": 104,
    "version": "0.6.93-BETA",
    "platform": "Oracle Corporation (1.8.0_144) on Linux"
  },
  "endpoint": {
    "protocol": "http",
    "port": 7890,
    "host": "78.46.241.158"
  },
  "identity": {
    "name": "[c=#e1a92b]N[/c][c=#41ce7c]E[/c][c=#8e8e8e]M[/c]pragt1",
    "public-key": "a165b56f840f8ad6811391fcaf78db35eb0a5138674b49506527d0d14b4eaf6b"
  }
},
```

このようなフォーマットで文字色を指定できるようです。

```
nis.bootName = [c=#{16進数カラーコード}]任意の文字[/c]
```

![screenshot-chain.nem.ninja-2017-12-02-00-15-48-351.png](https://qiita-image-store.s3.amazonaws.com/0/2353/df232814-d107-5f37-f19f-5639630d46b0.png)


ただし、nembexがパースしてくれるから色が付くのであって、apiの返却値としては上記のように文字列として読みにくく、扱いずらくなってしまいます。


# nem-sdk で暗号化メッセージを送る

https://github.com/44uk/test-nem-faucet/blob/master/routes/claims.js#L61

テストフォーセットの実装で使いました。

```
let transferTx = nem.model.objects.create('transferTransaction')(
  ADDRESS,
  AMOUNT,
  MESSAGE
);

transferTx.messageType = 2;
transferTx.recipientPublicKey = publicKey;
```

まだREADMEには書かれていなかったのでソースから掘り起こし。
ただ、この暗号化の実装は一度変わっていて、ドキュメントに起されるまでは、また急に変わるかもしれません。

https://github.com/44uk/test-nem-faucet/commit/06974386e9194c7bf44c6acfbd268a2122b5a56b
以前のバージョンでのやり方。


# h2dbの中身を覗いてみる

NISはローカルに`nis5_mainnet.h2.db`としてデータベースを持っています。
この中にはアカウントやトランザクションなどの情報が含まれています。

このDBにアクセスしてみましょう。

[H2 Database Engine](http://www.h2database.com/html/main.html)
All Platforms (zip, 8 MB)をダウンロードして、展開します。
`bin/h2.bat`や`bin/h2.sh`を実行してサーバを立ち上げます。

それぞれ、以下のように設定してください。

![h2db-1.png](https://qiita-image-store.s3.amazonaws.com/0/2353/5eb5a49e-70ec-acdf-2f07-935b1b10774f.png)

Driver Class: org.h2.Driver
JDBC URL: jdbc:h2:{h2.dbファイルへのフルパス(拡張子h2.dbはつけない)}
User Name: {空白}
Password: {空白}

![h2db-2.png](https://qiita-image-store.s3.amazonaws.com/0/2353/5c5872f7-b4f8-9ace-6596-ff3cbb15c54a.png)

SQLを実行できます。NIS APIを使うのとはまた違った情報を得られるかもしれません。
まぁCatapaltでは別のKVSが用いられるなどの情報もありますし、あまりここの情報に頼ったアプリケーションを今のタイミングで作り込むのは微妙かもしれませんが。


# まとめ

わたしが色々といじっていた時にメモっていたことを整理してみました。
よかったら開発の参考にしてみてください。