はじめに
本記事は、XEM(NEM)のデリゲートハーベスティング(委任)をしている際、リモートノード(Super Node)の状態変化によってハーベスティングが停止してしまっていることを検知・通知するためのServerlessアプリケーションを紹介するものです。
Super Nodeによっては、結構、切断が発生してしまうのですが、確認するためにはNano Walletを開いて確認しなければならず、気が付かない間はハーベストが完全に止まってしまいます。ですので、久しぶりに開いて悲しい思いをすることになります・・・。それをナルハヤで気がつけるようにしよう!という試みです。
いわゆるガチホする方で条件を満たす方は、できるだけハーベストの機会を逃したくないですよね!
利用の前提
- XEMのデリゲート(委任)ハーベスティングを行っていること
- AWSアカウントがあること
アーキテクチャ&動作概要
- CloudWatch Eventsのスケジュール(cron)で定期的にLambda Functionをトリガー。
- デリゲートハーベスティング委任先のリモートノード(Super Node)へリモートアカウントのステータスを確認。有効でない場合、SNS TopicへPublish。
- SNSから利用者へE-mailを送信。
実装
以下を利用しています。
- デプロイ ⇒ Serverless Framework
- ステータス確認 ⇒ NEM NIS API
以下の用にリモートノードへリクエストを送ると
const URL = 'http://' + IpAddress + ':7890/account/status?address=' + RemoteWalletAddress;
次のようなJSONオブジェクトがresponseとして返ります。このオブジェクトのstatusがUNLOCKED以外の場合は、ハーベストが有効になっていない状態となり、これをチェックしています。
{
"cosignatories": [ ],
"cosignatoryOf": [ ],
"status": "LOCKED",
"remoteStatus": "ACTIVE"
}
コーディングのレベルが低すぎて恥ずかしいのですが、GitHubに置いています。
使い方
Serverless.ymlのcustomセクションの項目をセットし、デプロイ(serverless deploy
)します。
- emailAddress
- 通知先のメールアドレスを設定
- accountId:
- AWS Account ID(12桁の数値)
- IpAddress
- リモートノードのIPアドレス or ホスト名
- RemoteWalletAddress
リモートノードと接続が切れた場合は、上記をLambdaの環境変数にしていますので、IpAddressを新しいリモートノードへ更新すればOKです。
おわりに
XEMのAPIは他にもたくさんあり、結構ドキュメントも揃っていますし、拡張も控えていますので、これからどんどん盛り上がりそうですね!いろいろ作ったり、こういった機能もサービス化してみたいところです。
XEMほしい・・・(ノ∀`)