Python
Python3
Blockchain
NEM

Python3でNEMのAPIを叩く-008-[最終回]アカウントのトランザクションデータを取得する

はじめに

前回→こちら

今回はアカウントのトランザクションデータを取得するAPIを紹介します。
NanoWalletのダッシュボードに表示されているトランザクションデータのうち、最大25個のトランザクションの結果が返るようです。
本当に25個なのかまだ試せていないので、試す機会があれば記事を更新しようと思います。

NanoWalletでいうと、下図のトランザクションデータですね。
スクリーンショット 2018-03-12 21.00.25.png
※画像はNanoWallet ver2.1.2 mac版

モザイクの作成、ネームスペースの作成は含まれないようです。
どうやって取得するかまだ分かっていませんが、おいおい勉強していきます。

使うAPI

/account/transfers/incoming を使います。
パラメータは以下の3つあるようですが、hashとidが難しいですね。どちらもオプションなので、今回は無視してaddressだけにパラメータを入れましょう。
- address:アカウントのアドレス。
- hash:トランザクションが返された256bitのsha3ハッシュ。
- id:トランザクションが返されるまでのトランザクションID。

スクリーンショット 2018-03-12 21.13.43.png
スクリーンショット 2018-03-12 21.13.57.png
(解説:和訳)https://www.pr1sm.com/crypto-coin/nem-nis-api-documentation-in-japanese/#requesting-transaction-data-for-an-account

スクリーンショット 2018-03-12 21.13.02.png
(解説:本家)https://nemproject.github.io/#requesting-transaction-data-for-an-account

サンプル

コード

実行環境が無い方はpaizaで試せます。
https://paiza.io/ja

Python3
import requests
import json

node = 'http://23.228.67.85:7890'
api = '/account/transfers/incoming'
parameter = 'address=TCJC5VFBIYF5TKEUS273XS7IXUKJ36I3JCJQ7WOH'
url = str(node + api + '?' + parameter)

r = requests.get(url).json()

print(json.dumps(r,indent=4))

結果の例

json
{
    "data": [
        {
            "transaction": {
                "signature": "5ad853f7c0ef067f037f23c1bc0b82e45b1cc68b53e02aca76d169c3d89abc3e68815b68ba8add39df636c52dbcc0d577b72bd55c20c68e37799fac5beaaad03",
                "message": {},
                "amount": 91000000,
                "fee": 1000000,
                "timeStamp": 93107763,
                "type": 257,
                "signer": "fa97f4fd052e40937180f72987189df429cc1f79996d439787cd13b76ff46caf",
                "recipient": "TCJC5VFBIYF5TKEUS273XS7IXUKJ36I3JCJQ7WOH",
                "version": -1744830463,
                "deadline": 93114963
            },
            "meta": {
                "height": 1370611,
                "innerHash": {},
                "id": 181942,
                "hash": {
                    "data": "b5251c210bbf5be14dd1f218ad11e2b3533e792f4fa62d39da3d5a09e03eb549"
                }
            }
        },
        {
            "transaction": {
                "signature": "36ef09878d87431c8721959abf82c2076a264959097387b88f6428608681c90ab116dd604bb85223397ec04451e335ad98a08db3b5e4c49f355cb9ac0f626d00",
                "message": {
                    "type": 1,
                    "payload": "31303030"
                },
                "amount": 102000000,
                "fee": 2000000,
                "timeStamp": 92663377,
                "type": 257,
                "signer": "fa97f4fd052e40937180f72987189df429cc1f79996d439787cd13b76ff46caf",
                "recipient": "TCJC5VFBIYF5TKEUS273XS7IXUKJ36I3JCJQ7WOH",
                "version": -1744830463,
                "deadline": 92670577
            },
            "meta": {
                "height": 1363267,
                "innerHash": {},
                "id": 180120,
                "hash": {
                    "data": "3abc95d2ff7151594918409605c3f498a79b238e51372659bec440938dca6103"
                }
            }
        }
    ]
}

解説

APIを実行すると、トランザクションメタデータオブジェクト(TransactionMetaDataPair)が返ってきます。

スクリーンショット 2018-03-18 23.41.19.png
(引用元)https://www.pr1sm.com/crypto-coin/nem-nis-api-documentation-in-japanese/#transactionMetaDataPair

結果の例では、累計2件のトランザクションが返ってきていますね。

metaデータとtransactionデータに分かれますが、transactionデータについて見ていきたいと思います。

キー 内容
signature トランザクション署名(マルチシグニチャトランザクションの一部である場合は失われます)。
message オプションでトランザクションにメッセージを含めることができます。この場合トランザクションにはメッセージの下部構造が含まれます。そうでない場合、フィールドはnullです。
amount 送信者から受信者に転送されるマイクロNEMの量。
fee トランザクションの手数料。料金が高ければ高いほど、トランザクションの優先順位は高くなります。高優先度のトランザクションは、優先度の低いトランザクションよりも前にブロックに含まれます。
timeStamp ネメシスブロックの作成から経過した秒数。
type トランザクションタイプ。
signer トランザクションを作成したアカウントの公開鍵。
recipient 受信者のアドレス。
version 構造のバージョン。
deadline トランザクションの期限。deadlineは、ネメシスブロックの作成から経過した秒数で与えられます。締め切りに達する前にトランザクションがブロックに含まれない場合、トランザクションは削除されます。

次回

これが最終回です。
秘密鍵を使用するプログラムは自分にはハードルが高かったので、主にデータを照会するAPIについて紹介してきました。
これ以外にあまり書くネタがなくなってきたため、これでいったん「Python3でNEMのAPIを叩く」シリーズは終了します。
自分の知識が増えて、何か共有できることがあればまた記事を書こうと思います。