ブラウザで暗号通貨NEMのアカウント残高や送金トランザクションを調べてみる。

NEMアカウントを作ったら、さっそく送金テスト！と行きたいところですが、通貨となるXEMが入ってないとそのアカウントは使い物になりません。今回はもう少し遠回りして作成したアカウントの状態を調べてみましょう。

暗号通貨のアカウント状態を調べるためには、ブロックチェーンを形成しているP2Pノードにアクセスしなければいけません。ただし、NEMの場合はブラウザで簡単にアクセスできます。
ちなみにnanowalletに登録されているノードは以下の通りです。

```html:node_list
http://62.75.171.41:7890
http://san.nem.ninja:7890
http://go.nem.ninja:7890
http://hachi.nem.ninja:7890
http://jusan.nem.ninja:7890
http://nijuichi.nem.ninja:7890
http://alice2.nem.ninja:7890
http://alice3.nem.ninja:7890
http://alice4.nem.ninja:7890
http://alice5.nem.ninja:7890
http://alice6.nem.ninja:7890
http://alice7.nem.ninja:7890
```

NEMのAPIドキュメントはこちらです。
[NEM NIS API Documentation](http://bob.nem.ninja/docs/)

さらっと書きました。そうですNEMにはRESTfulなAPIがあるのです。NEMではノードの保有者が報酬をもらう代わりに最新のAPI環境をアクセスユーザに提供することが義務付けられています。誰がいつメンテしたのかもわからないサードパーティが運用するAPIに大事なお金の送金を託すのとは大違いであることに注目ください。

では早速アカウント情報にアクセスしてみましょう。今回は事前に”NAFYRW5DCJR7L5JKOOF2XQ4YFYNDQN6Y5C3UI4PM”というアカウントを作成しておきました。作成方法は前回までの記事を参考にしてください。ノードはalice2.nem.ninjaを使用してみます。ブラウザで以下のURLを叩いてみてください。

http://alice2.nem.ninja:7890/account/get?address=NAFYRW5DCJR7L5JKOOF2XQ4YFYNDQN6Y5C3UI4PM

簡単に取れました。node.jsか何か建てました？

```json:get_address.json

{
	"meta":{
		"cosignatories":[],
		"cosignatoryOf":[],
		"status":"LOCKED",
		"remoteStatus":"INACTIVE"
	},
	"account":{
		"address":"NAFYRW5DCJR7L5JKOOF2XQ4YFYNDQN6Y5C3UI4PM",
		"harvestedBlocks":0,
		"balance":0,
		"importance":0.0,
		"vestedBalance":0,
		"publicKey":null,
		"label":null,
		"multisigInfo":{}
	}
}
```

meta情報とaccount情報が確認できます。各項目の詳しい説明は後日必要になった時に説明します。
作ったばかりのアカウントなのでbalance(残高) が0 になっています。 注目すべきは publicKey がnull になっています。ノード側ではこのアカウントが実際に正当な手続きで生成されたものか確認が取れていないことを意味します。ここに値が入るのは実際にユーザが誰かに送金した後、つまり、アカウントの持ち主が秘密鍵を持っていることが確認できた後、ということになります。もちろん秘密鍵情報はここには出てきません。

では次に、このアカウントにXEMという暗号通貨を入れてみましょう。
今回はなむやんさんの[Mainnet Faucet](http://namuyan.dip.jp/nem/mainnet_nodb/)を利用させていただきます。

3等 5XEM が当たりました。
ところが、このサイトの仕様上5XEMでは送金できないようです（現在は手数料1XEMから送金可能）。
もう一回抽選して0.008XEMが当たりました。5XEMの手数料を払って0.008XEMの送金ができました。
もう一度アカウント情報を確認してみます。

```json:
{
	"meta":{
		"cosignatories":[],
		"cosignatoryOf":[],
		"status":"LOCKED",
		"remoteStatus":"INACTIVE"
	},
	"account":{
		"address":"NAFYRW5DCJR7L5JKOOF2XQ4YFYNDQN6Y5C3UI4PM",
		"harvestedBlocks":0,
		"balance":8000,
		"importance":0.0,
		"vestedBalance":0,
		"publicKey":null,
		"label":null,
		"multisigInfo":{}
	}
}

```
balanceを見ると0.008XEMの送金で残高が8000となっています。ブロックチェーンに新たなデータが刻み込まれました。計算機では小数点の計算を避けるためにすべて整数値で扱うことはよくあることです。このパラメータも1,000,000倍されたものが使用されています。

ではどんなトランザクションが処理されてたのかをブラウザで見てみましょう。
http://alice2.nem.ninja:7890/account/transfers/all?address=NAFYRW5DCJR7L5JKOOF2XQ4YFYNDQN6Y5C3UI4PM

```json:/account/transfers/all
{
	"data":[
		{
			"meta":{
				"innerHash":{},
				"id":701404,
				"hash":{
					"data":"0df49387e680a4d3b5277a3382e9332625c8064e1aa3ad159a850341e5148332"
				},
				"height":1076042
			},
			"transaction":{
				"timeStamp":65168770,
				"amount":1000000,
				"signature":"593b103393877d916c261aa05db5db5e6d6e852221f8a76033776da450b6a38ef063e726f8ca454cd9b408baf9d6e98baefd1c3930bf0acb037ffbc139950e00",
				"fee":4000000,
				"recipient":"NAFYRW5DCJR7L5JKOOF2XQ4YFYNDQN6Y5C3UI4PM",
				"mosaics":[
					{
						"quantity":1,
						"mosaicId":{
							"namespaceId":"namuyan",
							"name":"faucet"
						}
					},
					{
						"quantity":8000,
						"mosaicId":{
							"namespaceId":"nem",
							"name":"xem"
						}
					}
				],
				"type":257,
				"deadline":65211970,
				"message":{
					"payload":"feba80c8ee14cfbf3aeb1710ceb52beda8186345cfda3cf2c5581db5cb034092ce",
					"type":1
				},
				"version":1744830466,
				"signer":"9718b701553575e78ac5cf16714b2ca4b309619040e8f15b4e49c40b115a4fda"
			}
		}
	]
}
```


data配列構成の中にmeta情報とtransaction情報が内包されています。

meta情報から見ていきます。height がブロックチェーンの由来ともなるつないできたブロック（勘定）の長さになります。1ブロックは1分単位で新しいブロックが継ぎ合わされ、1ブロック内には複数のトランザクションが含まれることがあります。hash->data がトランザクションハッシュ値となり、将来、今回のトランザクションを参照したい場合にこのIDで瞬時に抽出することが可能です。innerHashが空ですね。これは今後マルチシグなどで複数承認を行う場合に参照することになります。今回は無視しておきましょう。

次にtransaction情報です。signatureが送信者の署名、feeを参照すると4xemの手数料を払っています。宛先アドレスはrecipient、amount が1000000とありますが、これは以下に内包するmosaicsを1セット送信するという意味になります。
mosaicsの中身が実際に送信されるアセットとなり、今回はnamuyan.faucet 1単位と nem.xem 8000 単位を送っています。message->payloadにて送信時にメッセージを添付することが可能です。今回は暗号化されています。signerが送信者の公開鍵となり、署名を公開鍵で複合することで今回のトランザクションが改ざんされていないことを確認することができます。

このようにNEMでは、ブラウザを使って誰でも簡単にあらゆるアカウントの状態を調べることができます。これなら簡単にWebアプリも作れそうですね。取引所が扱ってる総額も知ることができ、ブロックチェーンが透明性のあるシステムと言われる所以が実感できると思います。

次回はJavaScriptを使ってこれらの取引履歴を一覧化してみたいと思います。
それでは！

----
以下のNEMアドレスは、全てNEM上でエンジニアが活動できるための資金に使用します。
これから私が書く記事に共感していただけましたら、ご寄附いただけると助かります。
NEM ADDRESS: NBZNQL-2JDWTG-UAW237-PXV4SS-XSPORY-43GUSW-GSB7