ERC-20の総供給量とウォレット残高: 自分の数字はどちら?
トークンの供給量とアカウントの残高は、別の問いに答える数字です。比較する前に、目的に合った読み取り専用の項目を選びましょう。
ERC-20トークンでは、balanceOf(account)は1つのアカウントに記録された残高を返し、totalSupply()はトークンコントラクトの総供給量を返します。 トークンのページに大きな供給量が表示されていても、それが自分のアカウントの保有量という意味ではありません。
自分の保有量を調べるためにエクスプローラーを開いたなら、アカウント残高を選びます。コントラクトが合計で何単位を報告しているか調べるなら、供給量を選びます。どちらの数字も、それだけではドル換算額、アドレスの管理権、トークンの安全性を示しません。
1つのコントラクトに対する2つの問い
ERC-20仕様では、両者は別々の読み取り専用メソッドです。totalSupply()にはアカウントの入力がありません。balanceOfには残高を調べたいアドレスが必要です。呼び出すトークンコントラクトによって、どの資産を調べるかが決まります。
| 読み取り | トークンコントラクト以外の入力 | 答える問い |
|---|---|---|
totalSupply() |
なし | このコントラクトが報告する供給量は? |
balanceOf(account) |
公開アカウントアドレス | このアカウントに記録された残高は? |
例えば、供給量が1,000単位で、そのうちアカウントAが25単位を保有するトークンを考えます。正しい結果は、供給量が1,000、アカウントAの残高が25です。差があるのは当然です。取り戻すべき975単位の保有分が行方不明になったわけではありません。
これは説明用の架空の数量で、実在するトークンの測定値ではありません。どのアドレスがアカウントを示し、どれが資産を示すか分からない場合は、どちらの項目を読む前にもウォレットアドレスとトークンコントラクトの違いを確認してください。
残高と供給量は何によって変わる?
手数料や独自の会計処理がない通常の送金を使う、単純な架空のトークンを考えます。初めにアカウントAには25、アカウントBには975トークンがあります。
| 出来事 | アカウントA | アカウントB | 総供給量 |
|---|---|---|---|
| 最初の状態 | 25 | 975 | 1,000 |
| AがBに5を送金 | 20 | 980 | 1,000 |
| Bに100を新規発行 | 20 | 1,080 | 1,100 |
| Bがバーン関数で10を焼却 | 20 | 1,070 | 1,090 |
送金は単位の保有者を変えます。発行は単位を作り、この例の仕組みによるバーンは単位を取り除きます。OpenZeppelinのERC20リファレンスには、バーン時の供給量削減を含む発行とバーンの会計処理が記載されています。
この表が示すのは、その単純なモデルです。トークンには送金の独自処理や別の会計ルールがある場合があります。「dead」と呼ばれるアドレスに送ったことを、totalSupply()が減った証拠にしないでください。実際にコントラクトが供給量を減らすか確かめる必要があります。アドレスのラベルはバーン関数を実行しません。
同様に、別の場所で供給量が変わっても、自分の残高が変わらないことがあります。OpenZeppelinの供給量ガイドでは、ERC-20が供給の仕組みを各実装に委ねていると説明しています。現在の供給量を読んでも、今後の追加発行が不可能だとは分かりません。
トークンを動かさずに両方の数字を読む
両方を同じネットワーク上の同じトークンコントラクトから読み取ります。次の手順は確認方法の提案であり、この記事のためにウォレットで実施したテストの報告ではありません。一次資料は2026年10月23日に確認しました。
- ネットワークと完全なトークンコントラクトアドレスを記録します。 発行者の公式デプロイ情報と照合してください。異なるネットワークでシンボルが同じでも、同じ条件で比較できるとは限りません。
- 調べたい公開アカウントを記録します。 そのアカウントの詳細から取得し、トークンコントラクトと区別します。管理していないアカウントも公開情報で追跡できるため、検索成功は所有権の証明になりません。
- そのネットワークの信頼できるエクスプローラーかコントラクトリーダーを開きます。 確認済みのトークンコントラクトの読み取り専用画面を選びます。
totalSupply()を読み、次にアカウントアドレスを入力してbalanceOfを読みます。画面の表記は異なるため、関数名で目的を確かめます。 - 結果と一緒に時点を保存します。 表示される場合はブロック番号を記録します。両方を同じブロックで読むのが望ましい方法です。別々に「latest」を読むと、その間に送金、発行、バーンが起きた場合、異なる状態を取得することがあります。
- 比較前に単位を記録します。 生の応答を残し、画面が既に表示用に変換しているか確認します。呼び出し失敗はデータ取得不能であり、残高ゼロではありません。
EthereumのERC-20資料には、供給量とアカウント残高の別々の呼び出し例があります。必要な結果を理解するために、開発者向けの環境構築を再現する必要はありません。公開読み取りメソッドを備えるエクスプローラーでも、同じ種類の情報を取得できます。
公開状態の読み取りに送金やトークン承認は不要です。これらの値を表示するためにリカバリーフレーズや署名を求めるページなら、その手順を中止してください。この比較にどちらも入力する必要はありません。
両方の数字に同じ単位を適用する
供給量とアカウント残高は、同じトークンの会計上の桁数を使います。OpenZeppelinのdecimalsの説明は、両方の表示変換を明記しています。小数桁数が6と確認できた架空のトークンでは、生の供給量1000000000は1,000トークン、生の残高25000000は25トークンを表します。
生の供給量を表示変換済みの残高と比較しないでください。画面が既に変換した数字を再び割らないでください。ERC-20の小数桁数ガイドでは、桁数の確認、メタデータがない場合、丸めを説明しています。ここで桁数をそろえることは、異なる2つの指標を比較するための前提にすぎず、両者を同じ値にはしません。
供給量だけでは分からないこと
ERC-20のtotalSupply()は、標準化された市場流通量の計算ではありません。情報提供者は、流通量の推計時に一部を除外することがあります。その除外は算出方法で説明される必要があり、コントラクトの応答の名前を変えても得られません。最大供給量も別の問いです。OpenZeppelinは供給上限の拡張機能を文書化していますが、ERC-20自体はすべてのトークンにその機能を要求していません。
結果が属するのは、読み取った特定のデプロイと時点です。チェーン、ラップされたトークン、関連コントラクトを自動で合算するものではありません。似た名前のデプロイを合計しても、その関係と会計処理を別途確かめなければ、意味の不明確な数字になることがあります。
ポートフォリオの確認には、ネットワーク、トークンコントラクト、アカウント、ブロック、残高、単位を短く記録します。供給量は、別の問いに答えるときだけ加えます。アカウント残高が25トークン、コントラクトの供給量が1,000なら、両方の数字に名前を付けて残してください。その差は、アカウントからトークンが消えたことを意味しません。
よくある質問
totalSupplyはウォレット内のトークン数ですか?
いいえ。totalSupplyはトークンコントラクトの総供給量を返します。balanceOfはアカウントのアドレスを受け取り、そのアカウントに記録された残高を返します。どちらも目的のトークンコントラクトとネットワークを参照する必要があります。
totalSupplyは市場流通量や最大供給量と同じですか?
いいえ。ERC-20は市場流通量の計算方法を定義せず、最大供給量の項目も必須としていません。情報提供者の流通量には独自の算出方法が必要です。上限の有無は、そのトークンの実装から確かめる必要があります。
ウォレットを接続せずに確認できますか?
はい。公開された読み取り専用の呼び出しに必要なのはトークンコントラクトとネットワーク、balanceOfの場合は公開アカウントアドレスです。送金、承認、リカバリーフレーズ、ウォレット署名は必要ありません。