PythonでSymbolのハーベスト成功日時を計算する


概要

@nobu_kyutech さんの下の記事を参考に取得したハーベスト履歴から、さらにハーベストが成功した日時を求めて表示してみました。

ハーベスト日時の求め方

参考記事の手順でハーベスト履歴を取得すると、ハーベストが成功したheight(ブロック高)と収穫量が結果として得られます。このheightから、そのブロックが生成された日時を取得していきます。

ポイント

  • heightからそのブロックの詳細情報を求めるAPIを利用しました。
    • 上記のAPIから取得できるブロック生成時のTimeStampは、 ネメシスブロック生成時からの経過時間(ミリ秒) となっているので注意が必要です。
  • 基準となる、 ネメシスブロックの生成時刻 は、Symbol Blockchain Explorerで確認できます。
    • このとき、上記のブロック詳細に記載されている生成時刻は、アメリカ基準時間となってますのでここも注意です。

結果

ブロック情報を取得する部分のみ抜粋。その他の部分は@nobu_kyutech さんの記事を参照ください。

import datetime

# ネメシスブロックの生成日時(アメリカ時間)
NEMESIS_BLOCK_TIMESTAMP = "2021-03-16 00:06:25"

# heightからブロック情報を取得する関数
def get_blocks( height ):
    req = urllib.request.Request(NODEURL + '/blocks/' + height)
    with urllib.request.urlopen(req) as res:
        return json.load(res)

# ブロックの生成日時を取得して日本時間で返す
def get_datetime( height ):
    data = get_blocks( height ) 
    # ネメシスブロック生成時からのミリ秒が返る
    ts = int(data['block']['timestamp'])
    # 日本時間に合わせる(9時間追加)
    ts += 32400000
    nb_ts = datetime.datetime.strptime(NEMESIS_BLOCK_TIMESTAMP, '%Y-%m-%d %H:%M:%S')
    dt = nb_ts + datetime.timedelta(milliseconds=ts)
    return datetime.datetime.strftime(dt,'%Y-%m-%d %H:%M:%S')

ハーベスト成功したブロックのheightから、それぞれの生成時刻(日本時間)を取得していけば、
ハーベスト履歴として日時も一緒に表示することができます。

height:138196, datetime:2021-05-04 08:51:25, amount:134.42294
height:16699, datetime:2021-03-23 03:31:53, amount:135.382769
height:8870, datetime:2021-03-20 10:17:53, amount:140.428445

まとめ

SymbolはAPIやSDKが凄く親切かつドキュメントも見やすくてとても良いですね。
ハーベスト履歴の日時表示とかは、XemBookさんはじめ有志の皆様が既に見やすい/使いやすい
ツールを多数作ってくれていますが、勉強も兼ねてあえて自前でやってみました。

これで、ハーベスト成功した間隔に合わせてメッセージを変えて通知を飛ばしたり、
ハーベスト生活をより楽しむためのツールを自分なりに作ってみる予定。

Python不慣れなのでダサい書き方になってるかもしれませんがご容赦ください。
もっと良い書き方あるよ!やり方あるよ!って場合はアドバイスいただけると嬉しいです。