はじめに
NEMのAPIを利用して指定のアカウントがハーベスティングを行っているかどうかを検査するためのフローを書きます。
/account/get (/account/status)
ハーベスティングの状態は /account/get 又は /account/status で取得できます。その時に見るべきフィールドは"status"と"remoteStatus"です。各ステータスとアカウントの状態の関係につい図にしました。下記参照。
リモートアカウントでハーベスティングしている時はどうすればよいか
最も確実なのは直接リモートアカウントのアドレスを指定して調べることです。ハーベスティングをしているリモートアカウントで同様に /account/get 又は account/status をしてstatusフィールドを確認すれば良いということになります。この時、remoteStatusフィールドの値は"remote"になっているはずです。
委任元アカウントのアドレスしか情報が無い場合、そのアドレスのTx送信履歴を見て最も新しいインポータンストランスファートランザクションを探せば分かりますが、この方法は確実ではありません。(APIでは最大25件までしか取得できないので)
注意点
ハーベスティングの情報を取得するときはそのアカウントがハーベスティングを行っているノードに問い合わせをしないと正しい結果が返ってきません。
というのも、アカウントのハーベスティングデータ(その時点でどのアカウントがハーベスティングに参加しているか)はNEMネットワーク上では情報交換を行っておらず、ローカルハーベスティング、委任ハーベスティング共に、各ノードが個別に管理しているのです。
もし、委任していないノードに問い合わせをすると、そのアカウントが正常に委任ハーベスティングを行っていたとしても、statusフィールドはLOCKEDとなった返事が来るでしょう。
さいごに
リファレンスは便利ですが表現が厄介(しかもちゃんと更新されていない?)なので、ちょっとしたことでも描いておけば誰かの役に立つかも知れないと思って書いておきました。
APIでの検索機能強化してくれー。