node/peer-list/allで取得してきたノードに対してchain/heightで高さを取得して信頼できるノードを探してみる。— xiaca@aahub (@scrpgil) February 5, 2018
たまにズレが激しいものもある。謎い。 #NEM pic.twitter.com/qn270sREmr
結論からいうと、複数のNISの情報を取得して最大チェーン数を取得して乖離が少ないものを信頼するのがよさそうです。
スーパーノードの取得方法
NEMのノードは以下のURLで取得できます。
「/node/peer-list/all」がAPIのパスです。それより前の「http://go.nem.ninja:7890」は他のNISのURLでも構いません。
「/node/peer-list/all」を叩くとInacitve、Acitve、Busyのノードが返却されます。普通に考えればactiveが動いているノードなんですが・・・。
考えればいけないのはそこだけではなかった・・・。
しかし、先程のAPIで取得できる全てが信頼おけるNISではない
Activeで取得できるNISは全てが信頼おけるNISではないようです。
反応が返ってこなかったり、ブロックチェーンの同期が最大チェーンから乖離しているノードがあったりします。
つまり、信頼のおけるノードを探すためになにかしらの策を講じる必要があるようです。
それについて、mijinフォーラムで聞いてみました。
それによると正しいNISを取得する一案を教えていただきました。
それが、冒頭のNISの一覧を取得し、最大チェーンの高さから乖離の少ないNISをピックアップするというものでした。
とりあえず作ってみた
教えていただいた方法でとりあえず作ってみたのが以下のプログラムです。
8割動きます。ただし、たまに応答が遅いノードがあるのでまだ完璧ではないです。今後、モザイク周りを探しながら完璧なプログラムにしていきたいですね。