メインコンテンツへスキップ
Wallet APIはベータ版です。エンドポイントおよびレスポンス形式は変更される可能性があります。

概要

Historical Balanceエンドポイントは、過去の特定の時点でウォレットの特定のトークン(またはネイティブSOL)の残高がどうだったのかを答えます。Balances エンドポイントが現在の保有を報告するのに対し、balance-atは任意のタイムスタンプ、日時、またはスロットでの保有を報告します。 ウォレットとトークンが関与する要求された時点の直前またはその時点での最新の取引を見つけ、その取引からウォレットの取引後の残高を読み取ります。取引の取引後の残高は、その取引から次の取引までの間に保有した残高です。したがって「時刻Tの残高」は、時刻T以前またはその時点でのブロック時間(またはスロット)での最後の関連取引の取引後の残高です。通常のウォレットでは、これは推定ではなく正確な値です。
  • トークン (SPL / Token-2022): 取引の取引後トークン残高から読み取り、そのミントに対するウォレットのトークンアカウントで合計します。
  • ネイティブSOL: 取引のラプトルの取引後残高から読み取ります。ネイティブSOLを擬似ミントとしてアドレス指定します。So11111111111111111111111111111111111111111

使用するタイミング

Historical Balance APIを使用する場合:
  • PnL計算: 期間の開始と終了時の保有を決定します。
  • コストベースと税ロット: 取得または処分イベントでの残高を再構築します。
  • 紛争解決: 特定の瞬間にウォレットが何を保持していたかを証明します。
  • スナップショットの検証: エアドロップやガバナンススナップショット時のウォレットの残高を確認します。
  • 会計と監査: 期間境界でのウォレット状態を再構築します。

クイックスタート

タイムスタンプでのトークン残高

UnixタイムスタンプでのウォレットのUSDC残高を取得します:

日時でのトークン残高

タイムスタンプの代わりに人間が読める日時を渡します。スペースは%20でURLエンコードすることを忘れないでください。

スロットでのネイティブSOL残高

ネイティブSOLの場合は、擬似ミントSo11111111111111111111111111111111111111111を使用します。スロットに基づいたクエリは正確で決定的です。

クエリパラメータ

time, datetime, slotいずれか一つを提供する必要があります。0または複数を提供すると、400エラーが返されます。

日時形式

受け入れ可能な形式:
  • 日付のみ: 2025-01-10 → UTCの真夜中
  • 日付 + 時刻: 2025-01-10 19:20:00 または 2025-01-10T19:20:00(秒はオプション) → UTC
  • 明示的なタイムゾーン: 2025-01-10T19:20:00Z, 2025-01-10T19:20:00+02:00, 2025-01-10T19:20:00-05:00 → 指定通りに処理
無効またはサポートされていない形式(01/10/2025, 2025-13-10, 2025-02-30)は400エラーを返します。
日時はデフォルトではUTCとして解釈されます。2025-01-10 19:20:00のような単純な日時は、あなたの現地時間ではなくUTCとして扱われます。別の意図がある場合は明示的なタイムゾーンオフセットを含めてください。レスポンスのrequested.timeフィールドは、解釈を確認できるように解決されたエポック秒を示します。

レスポンス形式

フィールドノート

  • wallet: 照会されたウォレットアドレスのエコー。
  • mint: 照会されたミントのエコー(ネイティブの場合はSOLの擬似ミント)。
  • isNative: 結果がネイティブSOLの場合はtrue
  • balance: 10進文字列としての人間が読める量 — 文字列であり数値ではないため、大きな残高でも精度を失いません。末尾のゼロはトリムされます("1.5"ではなく"1.500000")。
  • balanceRaw: 最小単位での正確な量(SOLの場合はラプトル)として、文字列。
  • decimals: トークンの小数点以下の桁数(SOLでは9)。
  • requested: クエリのエコー。datetimeが使用された場合、timeも解決されたエポック秒で設定され、UTCの解釈が表示されます。
  • asOf: 残高が読み取られた取引(slot, blockTime, signature)。
asOf: nullはエラーではなくゼロを意味します。要求された時点でウォレットに一致する取引がない場合、エンドポイントは200を返し、balance: "0"asOf: null — ウォレットはその時点までにトークンを保持していなかったことを示します。

使用ケース

期間中の残高変動

2つの時点での保有を比較します。

スナップショットの適格性確認

ウォレットがスナップショットスロットでトークンを保持していたかを確認します。

ベストプラクティス

  • 決定的な結果にはslotを使用します。 timedatetimeはバリデーター報告のブロック時間を通じて解決され、数秒のドリフトが発生する可能性があります。正確さが重要な場合(スナップショット、監査)、slotでクエリします。
  • 残高を文字列として解析します。 balancebalanceRawは精度を維持するために文字列です。計算にはBigInt(balanceRaw)(またはあなたの言語の任意精度整数)を使用します - 浮動小数点数にキャストしないでください。
  • asOf: nullをゼロと見なします。 null asOfは、要求された時点でそのトークンに対するウォレットの活動がなかったことを意味する成功した応答です。エラーとして扱わないでください。
  • 過去の結果をキャッシュします。 過去の時点での残高は変わりません。繰り返しのAPI呼び出しを避けるために結果を永久にキャッシュします。

共通のエラー

制限事項

  • マルチトークンアカウントウォレットは過少カウントされる可能性があります。 残高は最新の一致する取引から読み取られます。一般的なケース(ミントごとに1つの関連トークンアカウント)は正確です。複数のトークンアカウントに同じミントを保持しているウォレットでは、最新の取引がそれらの一部にしか触れていない場合、過少カウントされる可能性があります。
  • 非常に大きな残高のネイティブSOLの精度。 約9,007,199 SOL(2⁵³ラプトル)を超えるSOL残高は、上流で精度が失われる可能性があります。トークン量は影響されません。
  • time/datetimeの精度はバリデーター報告のブロック時間に依存しますが、数秒ドリフトする可能性があります。正確で決定的な結果にはslotを使用します。
  • リクエストあたり1つのトークンのみ。 複数のミントや「時刻Tでのすべての残高」のバッチ形式はありません。

次のステップ

ウォレットの残高

USD値を含むウォレットの現在のトークンおよびNFT保有を取得。

ウォレットAPIの概要

すべてのウォレットAPIエンドポイントおよび共通規約。

APIリファレンス

履歴のある残高のリクエストおよびレスポンススキーマ。