🦁
Infuraを活用したブロックチェーンデータの収集と保存
1. Infuraとは?
Infura(インフューラ) は、EthereumやPolygonなどのブロックチェーンネットワークにアクセスするための クラウドベースのノードプロバイダー です。自前でフルノードを運用することなく、簡単にブロックチェーンのデータを取得できます。
1.1 なぜInfuraを使うのか?
- 簡単にブロックチェーンへアクセス → 自分でノードを立てる必要がない。
- 信頼性が高い → Ethereum Foundationから公式に推奨されている。
- 無料プランあり → 小規模なプロジェクトなら無料で利用可能。
- APIキーで利用可能 → JSON-RPC APIを使用して簡単にアクセス。
1.2 Infuraの登録方法
- Infuraの公式サイトにアクセス。
- Sign Up からアカウントを作成。
- 新しいプロジェクトを作成 し、Ethereumメインネットまたはテストネット(Goerliなど)を選択。
- APIキー(Project ID) を取得し、後ほど利用。
2. Infuraを利用したデータ収集
2.1 必要なライブラリのインストール
まず、PythonでInfuraを利用するために web3.py
ライブラリをインストールします。
pip install web3
2.2 Infura経由でEthereumデータを取得
Ethereumの最新ブロック情報を取得するサンプルコードを見てみましょう。
from web3 import Web3
# Infuraのエンドポイント
INFURA_URL = "https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID"
# Web3インスタンスを作成
w3 = Web3(Web3.HTTPProvider(INFURA_URL))
# 最新ブロック番号を取得
latest_block_number = w3.eth.block_number
print(f"Latest Block Number: {latest_block_number}")
# 最新ブロック情報を取得
latest_block = w3.eth.get_block(latest_block_number)
print(latest_block)
このコードを実行すると、現在のEthereumの最新ブロック番号とその詳細情報が取得できます。
3. 取得したデータをデータベースに保存
ブロックデータやトランザクションデータを PostgreSQL などのデータベースに保存する方法を説明します。
3.1 PostgreSQLのセットアップ
PostgreSQLがインストールされていない場合、以下のコマンドでインストールできます。
Mac(Homebrew)
brew install postgresql
Ubuntu
sudo apt update
sudo apt install postgresql postgresql-contrib
3.2 データベースの作成
まず、データベースを作成します。
CREATE DATABASE blockchain_data;
次に、ブロックとトランザクションを保存するためのテーブルを作成します。
CREATE TABLE blocks (
block_number BIGINT PRIMARY KEY,
timestamp TIMESTAMP,
miner VARCHAR(255),
transactions_count INT
);
CREATE TABLE transactions (
tx_hash VARCHAR PRIMARY KEY,
block_number BIGINT REFERENCES blocks(block_number),
from_address VARCHAR(255),
to_address VARCHAR(255),
value NUMERIC,
gas_price BIGINT,
gas_used BIGINT
);
3.3 データの保存スクリプト
次に、取得したデータをPostgreSQLに保存するPythonスクリプトを作成します。
import psycopg2
from web3 import Web3
# Infuraのエンドポイント
INFURA_URL = "https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID"
w3 = Web3(Web3.HTTPProvider(INFURA_URL))
# PostgreSQLの接続設定
DB_PARAMS = {
"dbname": "blockchain_data",
"user": "your_username",
"password": "your_password",
"host": "localhost",
"port": "5432"
}
# データベース接続
conn = psycopg2.connect(**DB_PARAMS)
cursor = conn.cursor()
# 最新ブロック取得
latest_block_number = w3.eth.block_number
latest_block = w3.eth.get_block(latest_block_number, full_transactions=True)
# ブロックデータを挿入
cursor.execute(
"INSERT INTO blocks (block_number, timestamp, miner, transactions_count) VALUES (%s, to_timestamp(%s), %s, %s) ON CONFLICT (block_number) DO NOTHING",
(latest_block.number, latest_block.timestamp, latest_block.miner, len(latest_block.transactions))
)
# トランザクションデータを挿入
for tx in latest_block.transactions:
cursor.execute(
"INSERT INTO transactions (tx_hash, block_number, from_address, to_address, value, gas_price, gas_used) VALUES (%s, %s, %s, %s, %s, %s, %s) ON CONFLICT (tx_hash) DO NOTHING",
(tx.hash.hex(), tx.blockNumber, tx['from'], tx['to'], w3.from_wei(tx.value, 'ether'), tx.gasPrice, tx.gas)
)
# コミットして接続を閉じる
conn.commit()
cursor.close()
conn.close()
print(f"Block {latest_block_number} and {len(latest_block.transactions)} transactions stored successfully.")
このスクリプトを実行すると、Ethereumの最新ブロックとトランザクションデータがデータベースに保存されます。
4. まとめ
- Infura は、Ethereumのデータを取得するための便利なクラウドAPI。
- Web3.py を使えば簡単にEthereumのブロックやトランザクションデータを取得できる。
- PostgreSQL にデータを保存し、解析や可視化に活用できる。
この方法を活用すれば、リアルタイムでブロックチェーンのデータを収集・保存し、取引の分析や異常検知に応用できます!
Discussion