Blockchain
NEM
nemDay 1

NIS APIを使ってnemのブロックチェーンネットワークにアクセスしてみる

さて始まりました、nemアドベントカレンダー!
下手な前置きはスベるので省略しますが、ご協力いただいたみなさまに感謝です。
このカレンダーを通して、nemに興味ある方はより深く、興味なかったひとは興味を持っていただければ幸いです。

nemとは?

仮想通貨のネム(NEM)/ XEMとは? 概要と最新情報

nem自体の情報はこちらが詳しいので、ざっと見ていただけると良いと思います。

この記事ではnemブロックチェーンネットワークから情報を取得するという基本の基本について記述していますが、
これを期に使ってみようと興味を示してくれるエンジニアが増えてくれれば幸いです。

チェーン上のデータをリクエストしてみる

nemのネットワークを構築しているノードをnem Infrastructure Server(以下NIS)と呼びます。
nemでは、このNISが提供するHTTP APIを用いることでチェーンへアクセスできます。

早速アクセスしてみましょう。HTTPアクセスなのでブラウザで十分です。
とりあえずPoloniex(海外の暗号通貨取引所のこと)のアドレスでも覗いてみましょう。

# Poloniexのnemアドレスです
NBZMQO7ZPBYNBDUR7F75MAKA2S3DHDCIFG775N3D

以下のリンクを開いてみてください。

アドレスの情報をみてみる

http://go.nem.ninja:7890/account/get?address=NBZMQO7ZPBYNBDUR7F75MAKA2S3DHDCIFG775N3D

{
  meta: {
    cosignatories: [ ],
    cosignatoryOf: [ ],
    status: "LOCKED",
    remoteStatus: "INACTIVE"
  },
  account: {
    address: "NBZMQO7ZPBYNBDUR7F75MAKA2S3DHDCIFG775N3D",
    harvestedBlocks: 36789,
    balance: 3308014502200,
    importance: 0.0013923152222271428,
    vestedBalance: 428886167230,
    publicKey: "2f69c71a7cd584e5f92ff787fb1d68aab53985c577eff6e9061c15768899433c",
    label: null,
    multisigInfo: { }
  }
}

アドレスのトランザクションをみてみる

http://go.nem.ninja:7890/account/transfers/all?address=NBZMQO7ZPBYNBDUR7F75MAKA2S3DHDCIFG775N3D

{
  data: [
    {
      meta: {
        innerHash: { },
        id: 1204055,
        hash: {
          data: "9b11fd4600327ea1254c0981d9fd6eee65f58dc68d5e11bad968c333a3dc4f42"
        },
        height: 1383329
      },
      transaction: {
        timeStamp: 83757784,
        amount: 180228000000,
        signature: "53d8a1baddbd9820331fe5cd2a469103034c7c7b065f162b65a9dec0d782d4b6195a3328431751ae718db48ee55def5a7f6e62543d811922f903cf4ec9a5bc0b",
        fee: 19000000,
        recipient: "NBZMQO7ZPBYNBDUR7F75MAKA2S3DHDCIFG775N3D",
        type: 257,
        deadline: 83844184,
        message: {
          payload: "61346566353862353365633362333530",
          type: 1
        },
        version: 1744830465,
        signer: "003489cdc106831b8ea4ac393dd3d30366b9cf8c5b7dbe566459d2183d0e5d65"
      }
    },
    .
    .
    .

それぞれ適当に叩いたときの結果です(他意はありません)
アドレスを見ればお察しいただけると思いますが、addressパラメタに指定したアドレスの情報を取得しています。
また、go.nem.ninja:7890がNISノードのアドレスです。

レスポンスはjson形式で返ってきます。Firefoxには整形機能がデフォルトで入っているのでそれを使うと見やすいかもしれません。

レスポンスの内容については、APIリファレンスを確認していただくとして、
ブラウザで開くだけでブロックチェーン上のトランザクションが取得できました。

また、NISはWebSocket接続も提供しており、こちらを使えばリアルタイムな情報やトランザクションを追うこともできます。

複雑なロジックや実装なしに、パラメタを渡すだけという、普段お使いのWebサービスが提供するAPI感覚で、実用的なブロックチェーンネットワークにアクセス出来てしまうのがnemの良いところです。
(他の技術をあまり確認していないので、同じようなコンセプトのチェーンもあるのかもしれませんが)

送金などのトランザクションの発信は少し複雑なトランザクションの暗号化が必要ですが、外部のNISサーバにリクエストする場合に限ります。
ローカルに立てたNISサーバであれば、暗号化無しに送金することもできます。

各種言語のAPIラッパー

各種プログラミングにて、プログラムから利用しやすいようにラッパーが提供されています。
HTTPリクエストさえ叩ければ言語やシステムは問いませんが、生のレスポンスを扱うよりは便利にラップしてくれていたりするので
実際に何かアプリケーションを作る場合はこちらを利用したほうが便利でしょう。

コア開発者の提供するライブラリはJavaScript/TypeScriptのものになりますが、他の言語も有志で開発されているものがあります。
もしお使いの言語のラッパーがなければ、利用者拡大のためにもぜひ作ってみてください。

JavaScript

以下は一例で、他にも有志で開発されている物が沢山あります。mijinフォーラムにもまとめていますので是非ご覧ください。
技術・開発資料系 - mijin discussion forums

C#

NemProject/csharp2nem: C# wrapper around NEM apis

JavaScript

nem-api

Node.JS

NemProject/nodejs2nem: A simple nodejs class to access NEM (NIS & NCC) api

Ruby

PHP

namuyan/NEM-Api-Library: An convenient NIS API PHP Library
tomotomo9696/NEMTools_PHP
evias/php-nem-laravel: Laravel Wrapper for NEM blockchain API

Java

NEMPH/nem-apps-lib: Semantic Java API Library for NEM Platform

Kotlin

ryuta46/nem-kotlin: Kotlin library for easy use of NEM API.

リファレンスなどへのリンク

技術・開発資料系 - mijin discussion forums
オープンソースとして公開されているnem関連のアプリケーションやブログ記事などの情報をまとめていますのでぜひご覧ください。
情報提供もおまちしております。

以下、上記からの抜粋ですがまずはみてみると良さそうなリンクです。

NEM NIS API Documentation
公式のAPIドキュメントです。

New Economy Movement(NEM) APIマニュアル和訳 | NEM_API_DOC
NEM API 日本語訳 リファレンス
有志による日本語訳版APIドキュメントです。

NEM Postman API
Postman - Chrome ウェブストア
Chromeの拡張をインストールしてリンクを開いてください。

開発者向け NEMデベロッパーガイド
英語ですが、もう少し深い情報だったり、開発に関する情報がまとまっています。

@DaokaTrade/devnem-jpさんはTwitterを利用しています
nemを用いたアプリケーションを開発している方々のTwitterリストです。

まとめ

私のようなWebエンジニアからしてみればHTTPが叩ければ使えちゃう、という一点だけでだいぶ気楽に利用できるところが良いと思っています。

また、同じ技術・APIでプライベートネットワークを構築できるmijinもあるため、閉じたネットワークを構築したいという要求にも答えられるという点もメリットだと思います。
(このあたりは商用のため、私の方では利用について具体的な情報を得られていないのですが)
mijin | - the Power of the Blockchain - ブロックチェーン構築プラットフォーム
NEMとMijinそしてCatapultの関係とは?

しかし、HTTPがゆえに、HTTP/2への対応、HTTPSでないと使えないブラウザの機能(WebRTC等)との相性、IoT環境でのプロトコル(より軽量なプロトコルが必要なのではないか)とか、いくらかの課題もあるとも思っています。

ほかにも、現状ではイーサリアムのようなコントラクトがない点で、アイディアを実行に落とし込みにくいという話もあります。

そのあたりは、リリース予定のカタパルト(ざっくり言うと次期バージョン)にてトランザクションの承認周りが強化されるものとされているので、また面白いアプリケーションが世にでるかもしれません。

ともかく、Web API感覚でブロックチェーンネットワークを利用できるというのは、既存の技術者に対しての学習負荷の低さ、HTTPが枯れた技術であるという点で既存システムへの組み込みがし易いと思います。

質問や相談などは以下のフォーラムやtelegramチャンネル、その他Twitterで#nemハッシュタグをつければ誰かしら反応してくれると思います。
NEM - mijin discussion forums
Telegram: Contact @nemjapan

時価の面ではいまいちパッとしないnemですが、触り始めるハードルは低いので、これを読んで触り始めてみたり、何かアイディアを形にしようと思っていただければ幸いです。

技術者ではない方へ

Webエンジニアでもなく、ITに詳しくないけどここへ来ていただいた方へ。
nemを利用するにはそれほど新しい技術を必要としないので、いわゆるWebエンジニアを集めれば、すぐにでもサービスの開発に着手することが可能でしょう。

もし、暗号通貨によるサービスを考えていて、どの暗号通貨ネットワークを利用しようか悩んでいるなら、選択肢に加えるに十分な実績と実用性をもった技術ですので是非ご検討ください。
(もちろん技術以外の流動性や換金の利便性も重要でしょうが、それらを高めるためにも是非採用いただけると、nem自体の活性化にもつながることでしょう)