以下の内容はhttps://blog-smatsuzaki.hatenablog.com/entry/2025/10/06/163905より取得しました。


【Node.js】ether.jsとINFURAでEthereumのウオレットの残高を取得する

Metamask (Ethereum mainnet) 上の通貨の残高を取得する方法のメモ。

概要

  • Node.js + Infura + ether.jsで割と簡単に取得できる。ただし、本記事のサンプルコードだと秘匿情報の管理方法に問題があるので、その点については追加の考慮が必要。エラー処理についても同様。
  • ERC20対応のUSDCなど、ETH以外の通貨についてはスマートコントラクトのclientを追加で実装する必要がある。

Infura (インフューラ)

  • API経由でアクセス可能な、Ethereum mainnetのフルノードサービス。
  • Metamaskの提供会社が提供しており、Metamask Developer に会員登録し、API KEYを発行することで利用可能になる。

  • 詳細は以下ページを参照。

docs.metamask.io

ether.js

  • EthereumノードにRPCリクエストを送信するためのjsのライブラリ。
  • Infuraと組み合わせることで、任意のwalletのbalanceを簡単に取得できる。

サンプルコード

最も簡素なコード

import { ethers } from "ethers";

const INFURA_API_KEY = "xxx";
const provider = new ethers.InfuraProvider("mainnet", INFURA_API_KEY);

const WALLET_ADDRESS = "xxx";

const balance = await provider.getBalance(WALLET_ADDRESS);
console.log("Address:", WALLET_ADDRESS);
console.log("Balance:", ethers.formatEther(balance), "ETH");

ERC20対応の他の通貨のbalanceを取得したい場合

  • Ethereumでは、ETH以外の通貨はスマートコントラクトとして実装されている。従って、個々のスマートコントラクト毎に専用のclientを生成する必要がある。
const usdc = new ethers.Contract(USDC_ADDRESS, ERC20_MIN_ABI, provider);
  • コード全文は以下
import { ethers } from "ethers";

const INFURA_API_KEY = "xxx";
const ADDRESS        = "xxx";

// Ethereum Mainnetに接続
const provider = new ethers.InfuraProvider("mainnet", INFURA_API_KEY);

// USDC(Ethereum Mainnet)のコントラクトアドレスと最小ABI
const USDC_ADDRESS = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
const ERC20_MIN_ABI = [
  "function balanceOf(address) view returns (uint256)",
  "function decimals() view returns (uint8)",
  "function symbol() view returns (string)"
];

const usdc = new ethers.Contract(USDC_ADDRESS, ERC20_MIN_ABI, provider);

const main = async () => {
  // ETH(ネイティブ)の残高
  const ethBal = await provider.getBalance(ADDRESS);
  console.log("ETH:", ethers.formatEther(ethBal));

  // USDC(ERC-20)の残高
  const [raw, decimals, symbol] = await Promise.all([
    usdc.balanceOf(ADDRESS),
    usdc.decimals(),
    usdc.symbol(),
  ]);
  console.log(`${symbol}:`, ethers.formatUnits(raw, decimals));
};

main().catch(console.error);



以上の内容はhttps://blog-smatsuzaki.hatenablog.com/entry/2025/10/06/163905より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14