あぶりてびちは楽してお金を儲けたい

駆け出し仮想通貨トレーダーがにわか仕込みのテクノロジーで濡れ手で粟を狙うお話

GASでTNTノードの健全性を検証するスプレッドシートを作る

こんばんは、あぶりてびちだよ。
毎日TNTのノードを建てているけどまだ一度もリワードを貰えたことがないんだ。
早くリワード欲しいな。
本当に。


さて、みんなは毎日自分のノードがちゃんと動いてるか気になって眠れない夜を過ごしたりしてないかな?
僕はもう気になって気になって毎日地道にhttps://a.chainpoint.org/nodes/...でチェックしてたけどさすがに消耗しすぎたから、ノードにエラーが出てないか全部簡単にチェックすることができるスクリプトをGAS(Google Apps Script)で書いてみたよ。

f:id:aburitebichi:20170921204138p:plain

今から導入方法を教えるから、良かったら使ってみてね。
このスクリプトでみんなの消耗を少しでも減らせたら、僕もハッピーさ。



f:id:aburitebichi:20170921204536p:plain

まずGoogle Spreadsheetsを開いて、メニューの「ツール」から「スクリプトエディタ」を開こう。
そしたらすでに書かれている「function myFunction()...」みたいなやつは全て消して、
下のコードをベタっと貼り付けて、適当なプロジェクト名をつけて保存しよう。
(2017/09/21 22:55 古いバージョンのスクリプトが公開されてしまっていたので一部修正)

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [ {name: "ノードチェック", functionName: "myFunction"}];
  ss.addMenu("スクリプト", menuEntries);

  // スプレッドシート(ヘッダ)への書き込み
  var range= SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(1, 1);
  var titles = ["アドレス", "検証時刻", "公開IPテスト", "時刻同期テスト", "カレンダーテスト", "クレジットテスト"];
  for(var i=0; i<6; i++) {
     range.offset(0, i).setValue(titles[i]);
  }
}

function U2Gtime(unixtime) {
  var newDate = new Date( );
  newDate.setTime( unixtime );
  dateString = newDate.toUTCString( );
  return dateString
}

function myFunction() {

  // スプレッドシートへの書き込み準備
  var range= SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(1, 1);
  var row= SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getLastRow();


  for(var n=0; n<(row-1); n++) {
    // アドレスを読み込み
    var address = range.offset(n+1, 0).getValue();
    
    // スプレッドシートをクリア
    range.offset(n+1, 1, n+1, 5).clearContent();
    
    // APIに問い合わせ
    var response = UrlFetchApp.fetch("https://a.chainpoint.org/nodes/"+ address +"",{ muteHttpExceptions:true });
    if(response.getResponseCode() != 200) {
      range.offset(n+1, 1).setValue("404 not found");
      continue;
    }
    // APIの結果をパース
    var testResult = JSON.parse(response.getContentText());

    // スプレッドシート(データ)への書き込み
    //for(var i=0; i<testResult.recent_audits.length; i++) {
    for(var i=0; i<1; i++) {
      var event = testResult.recent_audits[i];
      
      // 検証時刻
      range.offset(n+1, 1).setValue(U2Gtime(event.time));
      
      // 公開IPテスト
      range.offset(n+1, 2).setValue(event.public_ip_test);
      
      // 時刻テスト
      range.offset(n+1, 3).setValue(event.time_test);
      
      // カレンダーテスト
      range.offset(n+1, 4).setValue(event.calendar_state_test);
      
      // クレジットテスト
      range.offset(n+1, 5).setValue(event.minimum_credits_test);
    }
    Utilities.sleep(3000);
  }
}

保存したら虫のマークの右側を「onOpen」に合わせて、スクリプトの実行ボタンを思い切って押してみよう!

f:id:aburitebichi:20170921211356p:plain

まあ、何か色々警告が出たり承認を求められると思うけど自己責任で進めてくれ!

f:id:aburitebichi:20170921210848p:plain

そしたらスクリプトが実行され、スプレッドシートに戻ると「スクリプト」というメニューと、その中に「ノードチェック」が追加されているはずだ。

f:id:aburitebichi:20170921213152p:plain

シートの1行目に各項目のタイトルも記入されているはずだから、2行目の1列目から自分が管理しているノードのTNTアドレス(0x4125bae1…みたいなやつだね!)を追加していこう。

f:id:aburitebichi:20170921211737p:plain

できたらメニューの「スクリプト」→「ノードチェック」を押してみよう!スクリプトが走って実行結果が書き込まれていくはずだ。
「条件付き書式設定」機能を使って「TRUE」と「FALSE」のセルに色を付けると見やすくなるのでオススメだ。

f:id:aburitebichi:20170921212309p:plain

このスクリプトで、定期的に「ノードチェック」をしてサーバーがちゃんと動いているかどうか調べてみよう。
想定だと30ノードくらいまでは問題なく一度にチェックできると思うけど、それ以上はタイムアウトになってしまうかもしれないのでスクリプトの待機時間(Utilities.sleep)を調整してみよう。
ただあまり大量のチェックを短時間で走らせようとすると、Tierionのサーバーに負荷をかけてしまったり最悪アクセス禁止にされてしまうリスクもあるので気をつけて欲しい!

また、サーバーの負荷状況によっては、少ないノード数のチェックでもタイムアウトになってしまうことがあるので、その時は少し時間をおいて試してみようね。


ツールで楽しいTNTノードライフ。みんなも楽して儲けよう!
もしこの記事が皆さんのお役に立てたら、少しばかりの気持ちをいただけるととってもブログ更新の励みになるよ!
ETHアドレス:0xeC1c4556C558DA9d22D4a714272dc35457Dea8e9

みんなも何か役に立つスクリプトやツールを作ったら、あぶりてびちに教えてね!


このスクリプトを作るにあたって、以下のサイトがとても参考になったよ。ありがとう。
GAS(Google Apps Script)からATND APIにアクセスする。 - プログラマとプロマネのあいだ



TNTノード用VPSは国内より安くて高機能なDigital Oceanが断然オススメ!
あぶりてびちもめちゃくちゃお世話になってます。
下のリンクから申し込むと$10のクーポンが付いてくるよ(^_-)
m.do.co