LoginSignup
5
2

More than 1 year has passed since last update.

[Symbol] Pythonでハーベスト履歴を取得

Last updated at Posted at 2021-07-07

概要

  • デスクトップウォレットに表示されるような内容をプログラム(Python)から取得する方法を残しています。
  • 全コードはGithubにて公開中
    • バグや次回の要望あればコメントください
  • 投げXYMは「NDLS6GYOIPHATATNAVVOUNJXBD6X4BXU6IRBHIY」まで
  • あなたの委任お待ちしております。
    • symbol-node.takagi-tech.com
    • ハーベスト報酬は技術検証や記事執筆、ノード維持費に使わせていただきます。

前回記事

事前準備

公式ドキュメントはこちら。v1.0.0で動作確認しています。

ハーベスト履歴の取得

https://docs.symbolplatform.com/symbol-openapi/v1.0.0/#operation/searchReceipts
こちらを叩きます。

確認したいウォレットのアドレスとノードURL、定数としてHarvest_FeeのEnum値を設定します。
他の定数はこちら

import urllib.request
import json

# メインネットで安定しているノードURL
NODEURL = "http://00fabf14.xym.stir-hosyu.com:3000"
# 確認対象ウォレットアドレス
ADDRESS = "NBMWZZZOCUKZXXHKB7R3P3G2ZCO4CSGIXC37USI"
# Harvest_FeeのEnum値
ENUM_Harvest_Fee = 8515

APIの返却値のウォレットアドレスには48桁のものが使用されるので、自分のアドレスの48桁版を前回の記事を参考に取得します。

# 48桁のアドレスを取得
req = urllib.request.Request(NODEURL + '/accounts/' + ADDRESS)
with urllib.request.urlopen(req) as res:
    accountInfo = json.load(res)
ADDRESS48 = accountInfo['account']['address']

自分のウォレットアドレスの場合
ADDRESS = "NBMWZZZOCUKZXXHKB7R3P3G2ZCO4CSGIXC37USI"
ADDRESS48 = "68596CE72E15159BDCEA0FE3B7ECDAC89DC148C8B8B7FA49"
となりました。
わざわざAPIを叩かなくともADRESSか公開鍵から求められる(python SDKでできる?)気がしているので、
ご存じの方はそっとコメントで教えてくださいmm

次にトランザクション履歴を問い合わせます。

url = NODEURL + '/statements/transaction'
params = {
    'targetAddress': ADDRESS,
    'order': 'desc',
}

req = urllib.request.Request('{}?{}'.format(url, urllib.parse.urlencode(params)))
with urllib.request.urlopen(req) as res:
    data = json.load(res)
    print(json.dumps(data, indent=2))

結果

{
  "data": [
    {
      "statement": {
        "height": "193175",
        "source": {
          "primaryId": 0,
          "secondaryId": 0
        },
        "receipts": [
          {
            "version": 1,
            "type": 8515,
            "targetAddress": "68596CE72E15159BDCEA0FE3B7ECDAC89DC148C8B8B7FA49",
            "mosaicId": "6BED913FA20223F8",
            "amount": "129334920"
          },
          {
            "version": 1,
            "type": 8515,
            "targetAddress": "68693706B3EA603157D423C4F29ED6701CF70960E831D2AD",
            "mosaicId": "6BED913FA20223F8",
            "amount": "9238208"
          },
          {
            "version": 1,
            "type": 8515,
            "targetAddress": "685F060B8CD3197D5DC270B61167EDD81749C4CBC3DF0EFA",
            "mosaicId": "6BED913FA20223F8",
            "amount": "46191042"
          },
          {
            "version": 1,
            "type": 20803,
            "mosaicId": "6BED913FA20223F8",
            "amount": "183764522"
          }
        ]
      },
      "id": "60A9BCD3067648686E551012"
    },
    ..........
    ..........
  ],
  "pagination": {
    "pageNumber": 1,
    "pageSize": 20
  }
}

typetargetAddress が一致しているものを探します。

for d in data['data']:
    height = d['statement']['height']
    for receipt in d['statement']['receipts']:
        if receipt['type'] == ENUM_Harvest_Fee and receipt['targetAddress'] == ADDRESS48:
            amount = int(receipt['amount'])/1000000
            print("height:{}, amount:{}".format(height, amount))

直近のハーベスト履歴が表示できました。

height:193175, amount:129.33492
height:178610, amount:128.647486
height:168289, amount:134.39793
height:148821, amount:134.52498
height:6433, amount:143.702062

全コードはこちら

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2