データサイエンティストハトリのブログ

PythonとインテリジェントクラウドとAIが好きな学生エンジニア。データ分析、スクレイピング、就職活動などについて書いていきます。

PHPでEthereumのアドレスからトランザクション履歴を出力するプログラム

f:id:hatorihatorihatorik:20180930042430j:plain

 

こんにちは、どうもハトリです!!です。

TwitterでプログラミングやIT関連のことについてつぶやいているのでよかったら是非フォローしてください→→(@tori_engineer)

 


PHPを使って、ブロックチェーンのアドレスから、そのアドレスのトランザクションのリストを取得するプログラムを作りました。

Etherscanとは

EtherscanというETHの情報を確認することができるサイトがあるのでこれを使ってみました。

Etherscanはこちら

EtherscanAPIに登録

EtherscanにはEtherscanAPIというのがあり、Etheriumの取引データをブロックチェーンに直接見に行かなくても取得することができます。

EtherscanAPIはこちらから。メールアドレスを登録することで、APIキーを取得できます。

Ethereum Developers APIs and Services

 

APIキーがなくてもデータを取得することはできますが、APIの利用制限がかかるそうです。できれば取得しておくことをおすすめします。

トランザクションが取得できるAPI

f:id:hatorihatorihatorik:20180930042427j:plain

【Accounts】→【Get a list of 'Normal' Transactions By Address】→【[Optional Parameters] startblock: starting blockNo to retrieve results, endblock: ending blockNo to retrieve results】

を選択。

 

URLをクリックしてみると以下のような表示が現れる。

 

https://cdn-ak.f.st-hatena.com/images/fotolife/h/hatorihatorihatorik/20180803/20180803220428.png




 

これらの値を全部取得します。

サンプルコード

 

<?php
 $address = '取得したいアドレスをいれる';
 $url = 'http://api.etherscan.io/api?module=account&action=txlist&address=' . $address . '&startblock=0&endblock=99999999&page=1&offset=10&sort=desc&apikey=YourApiKeyToken';


 $response = file_get_contents($url);

 $data = json_decode($response, true);
 $json_count = count($data["result"]);

 $a_blockNumber = array();
 $a_timeStamp = array();
 $a_hash = array();
 $a_nonce = array();
 $a_blockHash = array();
 $a_transactionIndex = array();
 $a_from = array();
 $a_to = array();
 $a_value = array();
 $a_gas = array();
 $a_gasPrice = array();
 $a_isError = array();
 $a_txreceipt_status = array();
 $a_input = array();
 $a_contractAddress = array();
 $a_cumulativeGasUsed = array();
 $a_gasUsed = array();
 $a_confirmations = array();

 print("--------------------------------------------------------------------\n");

 for($i=$json_count-1;$i>=0;$i--){
  print($data['result'][$i]['blockNumber']."\n");
  print($data['result'][$i]['timeStamp']."\n");
  print($data['result'][$i]['hash']."\n");
  print($data['result'][$i]['nonce']."\n");
  print($data['result'][$i]['blockHash']."\n");
  print($data['result'][$i]['transactionIndex']."\n");
  print($data['result'][$i]['from']."\n");
  print($data['result'][$i]['to']."\n");
  print($data['result'][$i]['value']."\n");
  print($data['result'][$i]['gas']."\n");
  print($data['result'][$i]['gasPrice']."\n");
  print($data['result'][$i]['isError']."\n");
  print($data['result'][$i]['txreceipt_status']."\n");
  print($data['result'][$i]['input']."\n");
  print($data['result'][$i]['contractAddress']."\n");
  print($data['result'][$i]['cumulativeGasUsed']."\n");
  print($data['result'][$i]['gasUsed']."\n");
  print($data['result'][$i]['confirmations']."\n");
  print("\n");

  print("--------------------------------------------------------------------\n");
}
?>

 

phpコマンドで実行して出力できました。