account
모듈과 balance
액션을 사용합니다. 기본 URL은 다음과 같은 형식을 따릅니다.GET https://<체인>.etherscan.io/api?module=account&action=balance&address=<지갑주소>&apikey=<API_KEY>
https://api.etherscan.io/api?module=account&action=balance&address=0x123...abc&apikey=YOUR_API_KEY
https://api.arbiscan.io/api?module=account&action=balance&address=0x123...abc&apikey=YOUR_API_KEY
{
"status": "1",
"message": "OK",
"result": "1234567890000000000"
}
result
는 import React, { useEffect, useState } from 'react';
import axios from 'axios';
const ETHERSCAN_APIS = {
ethereum: {
baseURL: 'https://api.etherscan.io/api',
apiKey: 'YOUR_ETHERSCAN_API_KEY', // 여기에 자신의 API Key를 입력해야 합니다.
},
arbitrum: {
baseURL: 'https://api.arbiscan.io/api',
apiKey: 'YOUR_ARBISCAN_API_KEY', // 여기에 자신의 API Key를 입력해야 합니다.
},
optimism: {
baseURL: 'https://api-optimistic.etherscan.io/api',
apiKey: 'YOUR_OPTIMISM_API_KEY', // 여기에 자신의 API Key를 입력해야 합니다.
},
};
interface BalanceResult {
chain: string;
ether: string;
}
const WalletBalances: React.FC<{ address: string }> = ({ address }) => {
const [balances, setBalances] = useState<BalanceResult[]>([]);
useEffect(() => {
const fetchBalances = async () => {
const results: BalanceResult[] = [];
for (const [chain, config] of Object.entries(ETHERSCAN_APIS)) {
try {
const res = await axios.get(config.baseURL, {
params: {
module: 'account',
action: 'balance',
address,
apikey: config.apiKey,
},
});
const wei = res.data.result;
const ether = (Number(wei) / 1e18).toFixed(4);
results.push({ chain, ether });
} catch (error) {
console.error(`${chain} 오류 발생`, error);
}
}
setBalances(results);
};
if (address) {
fetchBalances();
}
}, [address]);
return (
<div className="p-4">
<h2 className="text-xl font-bold mb-2">지갑 잔액 정보</h2>
<ul>
{balances.map(({ chain, ether }) => (
<li key={chain} className="mb-1">
*{chain}*: {ether} ETH
</li>
))}
</ul>
</div>
);
};
export default WalletBalances;
Promise.all()
을 사용하여 동시에 요청을 보내는 것도 가능합니다. 이렇게 하면 속도를 더 빠르게 개선할 수 있습니다.await Promise.all(Object.entries(ETHERSCAN_APIS).map(async ([chain, config]) => {
const res = await axios.get(config.baseURL, {
params: {
module: 'account',
action: 'balance',
address,
apikey: config.apiKey,
},
});
// 이후 로직 동일...
}))