はじめに
mijinクラウドチェーンでのトランザクションのPOSTの仕方をまとめてみました。
mijinのAPIは、nemのAPIと99%以上互換性があるようなので、現状はnemのAPIドキュメントを見て理解を深めている状態ですが、現状詳細な情報が少ないこともあり、まずは私が理解したことをアウトプットしていこうかと思います。
なので、間違いや記載不足のご指摘は是非に!
以下の記事は、2016/02/15時点での情報ですので、それ以降のアップデートで変更があるかもしれません。ご注意ください。
(少なくとも、製品版には複数の機能が追加される予定になっています。)
mijinとは
BitCoinのように誰もが参加できる「Public」なBlockChainではなく、指定したノードだけが参加できる「Private」なBlockChainを構築できるプラットフォーム。詳しくは、公式サイトへ。
現在は、各社個別の環境が提供されているクローズドβと共通の環境で提供されていて、一般参加が可能なオープンβが行われています。オープンβへの参加は、以下のフォームより登録できるようです。
mijinクラウドチェーン – オープンβプログラム登録フォーム
トランザクションAPIの種類
送金やnamespace、mosaicの作成、マルチシグ化など、色々なことがAPI経由で可能ですが、用意されているAPIは、以下の2種類です。
エンドポイントではなく、内部のTransaction typeで、実行したい処理を指定します。
/transaction/prepare-announce
prepare-announceは、ローカルのNISに対してのみリクエストが可能です。リモートのNISにリクエストしても401エラーが帰ってきます。
ローカルのNISへのPOSTなので、電子署名が不要です。NISがシリアライズして署名してannounceしてくれます。(試せてないので多分ですが)
/transaction/announce
announceは、リモートへのNISに対して使用するAPIです。現状では、mijinの各NISにはSSH等でログイン出来ないため、基本的にトランザクションはannounceを使用することになります。
トランザクションAPIのバージョン
現状は、V1、V2の2種類があります。基本的にV1の拡張がV2となっているようです。
例えば、Transfer transactionでは、mosaicの送金を行う場合はV2を使用する必要があります。
ちょいちょいV1とV2が混じっていたりと混乱しやすいところでもあり、トランザクション共通部分に指定するバージョンでもあるので、どのバージョンのAPIを叩いているのか意識しておきましょう。(エンドポイントは同じなので。。)
トランザクションのPOST手順
それでは、/transaction/announce/を使用して、トランザクションをPOSTするための手順を見ていきましょう。
- Transaction Typeに応じたJSONを作成
- JSONをserialize(serialize化した文字列 : data)
- serialize化した文字列の電子署名を作成(電子署名 : signature)
- dataとsignatureのJSONをPOST
serializeの詳細
Transactionタイプ毎に、serializeのフォーマットが決まっています。
nemのAPIドキュメントでいうと7.9 Creating a signed transactionの部分ですが、正直見づらいしアレなので図にしてみました。
Transfer Transactionを例として、記載しています。
Serializeで生成される文字列は、トランザクション共通部分とトランザクションタイプに応じた個別部分に別れます。共通部分は、全てのトランザクションタイプで共通です。正直個別部分の実装はメンドクサイですね。。
この部分の詳細は、lightwalletのservices/Transactions.jsを見てみるとより理解が深まると思います。
(もう少しコメント振ってあると、なお良いんですけどね。。)
まとめ
ざっくりmijinクラウドチェーン上でのトランザクションのPOSTの仕方について、解説しました。
BitCoinの実装部分に馴染みがない人にとっては、少々とっつきづらいものだと思うので、少しでも理解の助けになればと思います。
個人的な理解と少々のテストを元に記載しているので、間違い、記載漏れ等含まれているかと思います。
ご指摘や修正リクエスト等頂けますと、私の理解も深まるのでありがたいです。