本文へスキップ
Anon Wallet

RAILGUN稼働状況API

Anonは、ウォレットが依存するRailgunサービスを確認するモニターを運用しています。対象はPPOIノード、Anon独自のインデクサー、Subsquid、ブロードキャスター、Wakuです。モニターはチェーンごとにおよそ30秒ごとに再確認し、結果を公開URLの小さなJSONドキュメント1つとして公開します。ウォレット、ダッシュボード、ステータスページ、スクリプトなど、誰でも読み取れます。APIキーもアカウントも不要です。

GET https://api.anon.inc/api/v1/railgun/liveness

これはAnon独自のモニターから見た独立した状況です。Railgunの公式ステータスではなく、「安全に取引できる」ことを示すシグナルでもありません。限界はわからないことにまとめています。

ベータ版: このAPIはベータ版です。フィールド、列挙値、レスポンスの形は予告なく変更されることがあります。予告期間はなく、非推奨化や提供終了の約束もありません。未知のフィールドや値は無視するようにクライアントを作ってください。ベータ版についてを参照してください。

プロパティ 値
ベースURL https://api.anon.inc
認証 なし
CORS すべてのオリジン、認証情報なし(GET、HEAD、OPTIONS)
ステータス ベータ版:予告なく変更されることがあります(ベータ版について)
形式 JSON、schemaVersion 1(JSON Schema)
再確認 およそ30秒ごと。失敗が続くソースはそれより間隔があきます
キャッシュ ブラウザは15秒、共有キャッシュは30秒

リクエストがプローブを起動することはありません。すべての応答は、保存済みのスナップショットから返されます。

クイックスタート

curl -i https://api.anon.inc/api/v1/railgun/liveness

レスポンスには、レポートとキャッシュ関連のヘッダーが含まれます。

HTTP/2 200
content-type: application/json; charset=utf-8
cache-control: public, max-age=15, s-maxage=30, stale-while-revalidate=30, stale-if-error=300
etag: "79d583eb71a37058"
access-control-allow-origin: *
access-control-expose-headers: ETag

ETagをIf-None-Matchで送り返すと、変更の有無を確認できます。変更がなければ、本文のない304 Not Modifiedが返ります。

curl -i https://api.anon.inc/api/v1/railgun/liveness \
  -H 'If-None-Match: "79d583eb71a37058"'

ブラウザでは、通常のfetchをどのオリジンからでも使えます。

const response = await fetch("https://api.anon.inc/api/v1/railgun/liveness", {
  headers: { Accept: "application/json" },
  signal: AbortSignal.timeout(8000),
});
if (!response.ok) throw new Error(`liveness: HTTP ${response.status}`);
const report = await response.json();

各行は、自身の有効期限までしか信頼できません。表示する前に、自分の時計と照らして各行を判定してください。使える根拠のない行はunknown、有効期間を過ぎた行はstaleです。どちらも正常として表示してはいけません。

const FIVE_MINUTES = 5 * 60 * 1000;
const CLOCK_SKEW = 30 * 1000;
const ACTIONABLE = new Set(["current", "catching-up", "degraded", "unavailable"]);

function effectiveStatus(check, now = Date.now()) {
  // Neither of these asserts anything that could go stale.
  if (check.status === "unmonitored" || check.status === "unknown") return check.status;
  // A status this client does not know is not evidence.
  if (!ACTIONABLE.has(check.status)) return "unknown";
  const observed = Date.parse(check.observedAt);
  const expires = Date.parse(check.expiresAt);
  // Missing, unparseable or inconsistent timestamps are not evidence either.
  if (!Number.isFinite(observed) || !Number.isFinite(expires)) return "unknown";
  if (observed > now + CLOCK_SKEW || expires <= observed) return "unknown";
  const stale = expires <= now || now - observed >= FIVE_MINUTES;
  return stale ? "stale" : check.status;
}

// Decide for yourself which chains count as mainnets.
const MAINNETS = new Set([1, 42161, 137, 56]);
const ppoi = report.checks.filter((c) => c.service === "ppoi" && MAINNETS.has(c.chainId));
console.log(ppoi.map((c) => `${c.chainId}: ${effectiveStatus(c)}`));

エンドポイント

GET https://api.anon.inc/api/v1/railgun/liveness

  • 認証もパラメーターも不要です。クエリ文字列は無視されます。
  • HEADはヘッダーのみを返します。OPTIONSはCORSのプリフライトに応答します。
  • 本文はapplication/json; charset=utf-8で、数KB程度です。
  • 1つのレスポンスに、すべてのチェーンのすべてのサービスが含まれます。一度取得して、必要な行に絞り込んでください。

レスポンス例

5件のチェックに絞った抜粋レポートで、値は例示用です。実際のレポートには、すべてのチェーンのすべてのサービスが並びます。

{
  "schemaVersion": 1,
  "generatedAt": "2026-10-03T12:00:05.418Z",
  "checks": [
    {
      "service": "waku",
      "chainId": null,
      "status": "current",
      "reason": "responding",
      "observedAt": "2026-10-03T11:59:40.993Z",
      "lastSuccessAt": "2026-10-03T11:59:40.993Z",
      "expiresAt": "2026-10-03T12:02:10.993Z",
      "metrics": { "peers": 2 }
    },
    {
      "service": "ppoi",
      "chainId": 1,
      "status": "current",
      "reason": "synced",
      "observedAt": "2026-10-03T11:59:52.206Z",
      "lastSuccessAt": "2026-10-03T11:59:52.206Z",
      "expiresAt": "2026-10-03T12:02:22.206Z",
      "metrics": { "position": 139296, "head": 139296 }
    },
    {
      "service": "broadcasters",
      "chainId": 1,
      "status": "current",
      "reason": "responding",
      "observedAt": "2026-10-03T11:59:40.993Z",
      "lastSuccessAt": "2026-10-03T11:59:40.993Z",
      "expiresAt": "2026-10-03T12:02:10.993Z",
      "metrics": { "responding": 82, "monitored": 85 }
    },
    {
      "service": "indexer",
      "chainId": 1,
      "status": "catching-up",
      "reason": "behind",
      "observedAt": "2026-10-03T11:59:58.731Z",
      "lastSuccessAt": "2026-10-03T11:59:58.731Z",
      "expiresAt": "2026-10-03T12:02:28.731Z",
      "metrics": { "position": 26115307, "head": 26115332 }
    },
    {
      "service": "subsquid",
      "chainId": 137,
      "status": "unavailable",
      "reason": "unreachable",
      "observedAt": "2026-10-03T12:00:01.093Z",
      "lastSuccessAt": "2026-10-03T11:58:09.870Z",
      "expiresAt": "2026-10-03T12:02:31.093Z",
      "metrics": {}
    }
  ]
}
  • wakuの行は共有のWakuチェックなので、chainIdはnullです。ステータスはcurrentで、peersはAnonが監視するWaku接続のピア数です。
  • broadcastersの行はcurrentです。そのチェーンでAnonが監視しているブロードキャスター85件のうち82件が応答しました。monitoredが実際の分母です。
  • ppoiの行は最新の状態です。positionはPPOIノードの検証済みTXIDインデックスで、headは同じノードの現在のインデックスです。
  • indexerの行は参照値より25ブロック遅れており、許容範囲を超えているためcatching-upと報告されます。
  • subsquidの行はunavailableです。Anonのモニターは、3回連続のプローブで使える応答を得られませんでした。observedAtは最後に失敗したプローブの時刻で、lastSuccessAtはサービスが最後に応答した時刻を保持します。失敗には指標が付きません。
  • チェックは現在、waku、ppoi、broadcasters、indexer、subsquidの順に並び、各サービス内ではchainIdの昇順です。この順序に依存しないでください。

フィールド

レポート

フィールド 型 意味
schemaVersion 整数 現時点では1です。ベータ版の間は変わることがあります。
generatedAt タイムスタンプ スナップショットが組み立てられた時刻で、配信された時刻ではありません。モニターが稼働している間、少なくとも30秒ごとに進みます。
checks 配列 サービスとスコープごとに1つのオブジェクトです。サービスとchainIdの組み合わせは最大1回しか現れません。

チェック

フィールド 型 意味
service 文字列 現時点ではppoi、broadcasters、waku、indexer、subsquidのいずれかです。今後増える可能性があります。
chainId 整数またはnull 正のチェーンIDです。現時点では、共有チェックであるwakuがnullです。
status 文字列 この行をどう扱うかを示します。ステータスを参照してください。
reason 文字列 この行がそのステータスである理由です。新しい値が追加されることがあります。理由を参照してください。
observedAt タイムスタンプまたはnull 最新のプローブが完了した時刻です。失敗したプローブも観測として扱います。一度もチェックされていない場合や監視対象外の場合はnullです。
lastSuccessAt タイムスタンプまたはnull サービス自体が最後に応答し、比較された時刻です。その後に失敗しても保持されます。一度もなければnullです。
expiresAt タイムスタンプまたはnull この観測が意味を持たなくなる時刻です。observedAtに行の有効期間(公開時点では150秒)を加えた値です。対応が必要なすべてのステータス(current、catching-up、degraded、unavailable)で設定されます。
metrics オブジェクト 測定値です。常に存在し、不明なキーは省略されます。

タイムスタンプはUTCで、ミリ秒精度、末尾にリテラルのZが付きます:YYYY-MM-DDTHH:mm:ss.sssZ。

指標

キー 意味
position サービス自身の位置です。ppoiでは検証済みTXIDインデックス、indexerとsubsquidではインデックス済みブロックです。
head 比較の対象です。PPOIノードの現在のTXIDインデックス、またはチェーンの最新ブロックからそのサービス自身の承認の深さを引いた値です。
responding 応答したブロードキャスターの数です。monitoredと一緒に設定され、それを超えることはありません。
monitored 実際に確認したブロードキャスターの数です。これが本当の分母です。
peers 監視対象のWaku接続に現在つながっているピアの数です。

新しいキーが追加されることがあります。知らないキーは無視してください。ここに挙げた指標はすべて、2^53 − 1以下の非負整数です。不明な指標は省略され、0で埋められることはないので、存在しないキーを0として読まないでください。監視対象外の行は"metrics": {}です。

positionがheadより大きくなることがあります。参照先の最新ブロックは独自の周期で読み取られ、最大で1分ほど古い場合があるためです。遅れは0以上に丸めてください。

ステータスと理由

ステータス

現時点のステータスは次のとおりです。これは閉じた集合ではありません。ベータ版の間は、予告なく値が追加されたり名前が変わったりすることがあります。認識できないステータスは、その行に限ってunknownとして扱ってください。

ステータス 意味 対応
current サービスが応答し、許容範囲内で参照値に追いついています。 応答して追いついている状態として、observedAt時点のものと表示します。
catching-up サービスは応答しましたが、参照値より許容範囲を超えて遅れています。 遅延を想定してください。障害ではありません。
degraded サービスは応答しますが、深刻に機能が低下しています。長時間大きく遅れているか、本来カバーすべき範囲の一部しかカバーしていません。 警告を出します。時間に厳しい処理では頼らないでください。
unavailable Anonのモニターは、3回連続のプローブで使える応答を得られませんでした。 応答していないものとして扱います。
unknown まだ使える根拠がないか、根拠を安全に比較できません。 良い知らせでも悪い知らせでもありません。緑色の状態は表示しないでください。
unmonitored Anonはこのチェックを監視していません。 失敗ではありません。対象外として表示してください。

expiresAtを過ぎた行は、ステータスが何であっても期限切れです。停止中のサービスの行も、そのような形で届くことがあります。鮮度とキャッシュを参照してください。

理由

理由 対応するステータス 意味
synced current 位置がheadから許容範囲内にあるか、PPOIノードが自身の現在のインデックスまで検証済みです。
behind catching-up、degraded 位置がheadより許容範囲を超えて遅れています。
responding current 比較できる位置を持たないサービス、つまりWakuとブロードキャスター向けです。
partial-coverage degraded 監視対象のメンバーの一部しか応答していません。ブロードキャスターに使われます。
unreachable unknown、unavailable プローブがサービスに到達できなかったか、応答を理解できませんでした。連続2回までの失敗はunknown、3回でunavailableになります。
not-configured unmonitored Anonはこのチェックを監視していません。
no-observation unknown まだ何も観測されていないか、サービスは応答したもののこのチェーンのデータがありません。
incompatible-reference unknown サービスは応答しましたが、その数値を安全に比較できません。たとえば、PPOIノードに必要なリストがない場合や、参照に使うチェーンのheadが古すぎる場合です。

理由も閉じた集合ではありません。知らない理由はstatusだけを見て判断するように、クライアントを作ってください。Wakuやブロードキャスターの監視によって、新しい理由が今後も増えることがあります。

しきい値

以下は公開時点の値です。スキーマの一部ではなくモニターのポリシーなので、Anonはスキーマのバージョンを変えずに調整することがあります。

ルール 値
再確認 応答するソースはおよそ30秒ごと、最大3秒のジッターを加えて確認します。失敗が続くソースはそれより間隔があきます。連続して失敗するたびに待ち時間が倍になり、30秒、60秒、そして上限の2分です。
行の有効期間 150秒です。expiresAtはobservedAtに150秒を加えた値です。
障害 プローブが3回連続で失敗するとunavailableです。最初の2回はunknownです。
遅れの許容範囲 indexerとsubsquidは、遅れが10ブロックと約2分相当のブロック数のうち大きいほう以下であればcurrentです。
機能低下 2回連続の評価で、遅れが30分以上の場合です。
PPOIの遅れ ノードの検証済みインデックスが、そのノード自身の現在のインデックスより45秒間連続して遅れている場合です。
参照先のhead 参照に使うチェーンのheadは60秒以内のものでなければならず、そうでなければその行はunknownで、理由はincompatible-referenceになります。

サービスとチェーン

サービス Anonが確認する内容 position head
ppoi 設定済みのPPOIノードが、そのネットワークに必要なリストを持っている必要があります。検証済みのTXIDインデックスを、同じノードの現在のインデックスと比較します。 検証済みTXIDインデックス ノードの現在のTXIDインデックス
indexer Anon独自のインデクサーが最後に処理したブロックを、チェーンのheadからインデクサーの承認の深さを引いた値と比較します。 最後に処理したブロック 承認の深さを引いた参照先のhead
subsquid 設定済みのSubsquidデプロイのインデックス済み高さを、チェーンのheadからそのsquid自身の承認の深さを引いた値と比較します。 インデックス済みの高さ 承認の深さを引いた参照先のhead
broadcasters チェーンごとに、限られた数のブロードキャスターのうち何件が応答するかを確認します。2026-10-04から監視しています。 — —
waku Anonが監視するWaku接続の共有チェックが1つあります。2026-10-04から監視しています。 — —
  • チェーン。 監視対象のメインネットは、Ethereum(1)、Arbitrum(42161)、Polygon(137)、BNB Chain(56)です。Sepolia(11155111)はテストネットワークで、メインネットの集計には含まれず、Subsquidのデプロイもないため、そのsubsquidの行は監視対象外です。予告なくチェーンが追加されることがあります。
  • Wakuとブロードキャスター。 両方とも2026-10-04から監視されており、実際のステータスを報告します。理由はrespondingまたはpartial-coverageで、指標はpeers、responding、monitoredです。新しいreasonの値やmetricsのキーが今後も付くことがあります。その場合はベータ版についてのとおりに扱ってください。
  • 参照先のhead。 チェーンのheadは公開RPCエンドポイントから取得します。それ自体の行はありません。
  • 運用主体。 PPOIノードとSubsquidのデプロイはAnonが運用していません。そこでの障害は、設定済みのデプロイに対するAnonの読み取り結果として現れます。

各サービスそのものについては、PPOI プロキシ、ブロードキャスターネットワーク、ウォレットの同期を参照してください。

鮮度とキャッシュ

モニターは、応答する各ソースをおよそ30秒ごとに再確認し、スナップショットを保存します。すべてのリクエストは、メモリ上のこのスナップショットから応答します。レスポンスには次が含まれます。

Cache-Control: public, max-age=15, s-maxage=30, stale-while-revalidate=30, stale-if-error=300
ディレクティブ 効果
max-age=15 ブラウザは自身のコピーを15秒間再利用します。
s-maxage=30 CDNなどの共有キャッシュは、自分のコピーを30秒間再利用します。再確認1回分です。
stale-while-revalidate=30 キャッシュは、その後さらに最大30秒間、新しいコピーを取得しながら古いコピーを返せます。
stale-if-error=300 オリジンがエラーを返した場合、キャッシュはコピーを最大5分間返し続けられます。

行はどのくらい古くなり得るか。 応答するソースの場合、オリジンでは、行は最大で約44秒古くなります。30秒の周期、3秒のジッター、最大10秒かかるプローブ、公開にかかる1秒の合計です。キャッシュはさらに最大60秒を加えます(s-maxageの30秒とstale-while-revalidateの30秒)。したがって、正常な行は観測から最大で約104秒後に届き、150秒の有効期間内に収まるため、届いた時点ですでに期限切れになっているはずはありません。

失敗が続くソースは、再確認の間隔があきます。 連続して失敗するたびに、モニターはそのソースを再び試すまでの待ち時間を倍にします。30秒、60秒、そして上限の2分です。ジッターと最大10秒かかるプローブを加えると、停止しているソースの行は、オリジンでは最大で約133秒、キャッシュから届く時点では最大で約193秒古くなります。これは150秒の有効期間を超えるため、unavailableの行は、届いた時点ですでに期限切れのことがあります。その場合はunavailableではなく期限切れとして表示されます。期限切れの行は「最近の読み取りなし」として扱い、決して正常として扱わないでください。停止しているサービスは、まさにそのように見えることがあります。

鮮度は、HTTPではなく各行に属します。 行のexpiresAtが自分の時計の現在時刻と同じかそれより前の場合、またはobservedAtから5分以上たっている場合は、statusが何であっても期限切れとして扱ってください。ステータスに必要なタイムスタンプがない、または読み取れない場合、observedAtが現在より約30秒を超えて未来の場合、expiresAtがobservedAtより後でない場合は、その行をunknownとして扱ってください。200、304、キャッシュヒットのいずれも、行を更新しません。

モニターが止まった場合。 モニターが稼働している間は、すべてのプローブが停止していても、generatedAtは少なくとも30秒ごとに進みます。モニターが止まると、保存済みのレポートはそのまま残り、各行はexpiresAtによって期限切れになります。stale-if-errorで返されたコピーでも同じです。どちらも期限切れに見え、正常に見えることはありません。

ETagと304。 ETagは強い検証子で、本文から得た、引用符で囲まれた16文字のハッシュです。モニターはプローブが完了するたびに、そして少なくとも30秒ごとに公開し、generatedAtが本文に含まれるため、ETagも少なくともその頻度で変わります。If-None-Matchは弱い比較で判定され、W/接頭辞は無視され、*はすべてに一致します。304にはETag、Cache-Control、CORSのヘッダーが付き、本文はありません。

HTTPステータスコードとエラー

ステータス 発生条件 備考
200 スナップショットです。 サービスが不調のときも同じです。200はレポートを読めるという意味であり、サービスが正常という意味ではありません。
304 If-None-Matchが一致しました。 本文はありません。
204 OPTIONSのプリフライトです。 CORSを参照してください。
405 それ以外のメソッドです。 Allow: GET, HEAD, OPTIONS。キャッシュされません。
503 応答したサーバーがまだ最初のスナップショットを読み込んでいません。 短時間で解消し、たとえばデプロイ直後に発生します。キャッシュされません。バックオフを入れて再試行してください。
404 それ以外のパスです。 ゲートウェイが応答します。
429 公正な利用のレート制限を超えています。このパスへのリクエストが1 IPあたり毎分120件を超えた場合です。 APIではなくCDN(Cloudflareのエラー1015)から返ります。約60秒間続き、Retry-Afterは約60です。キャッシュヒットも数えられます。

このルートでは、エラーは{"error": "<message>"}の形式で、Content-Type: application/json; charset=utf-8とCache-Control: no-storeが付きます。

{"error":"liveness report unavailable"}

HTTPステータスコードで分岐し、メッセージの文言では分岐しないでください。ゲートウェイの404({"message":"Not Found"})とCDNの429は、別の本文を使います。429はCloudflareのtext/plainページです。

ブラウザーでは、429は読み取れません。 CDNの429ページにはAccess-Control-Allow-Originが付かないため、ブラウザーはこれをブロックし、fetchは他のネットワークエラーやCORSエラーと同じくTypeErrorで拒否されます。コードからステータスやRetry-Afterは見えません。ネットワーク障害は429や503と同じように扱ってください。バックオフし、最後に取得できた正常なレポートを保持し、その各行はexpiresAtで期限切れになるに任せます。

最初のスナップショットを読み込んだ後は、障害が起きても503にはなりません。サーバーは最後のスナップショットを返し続け、その各行はexpiresAtによって期限切れになります。

CORS

レポートは公開されており、呼び出し元ごとの内容を含まないため、すべてのレスポンスですべてのオリジンを許可します。

ヘッダー 値
Access-Control-Allow-Origin *
Access-Control-Expose-Headers ETag

これは、リクエストのOriginに関係なく、すべての応答(200、304、204、405、503)で送信されます。Access-Control-Allow-Credentialsはありません。応答はVary: Originを送りませんが、CDNはOriginリクエストヘッダーの値ごとに別々のキャッシュコピーを保持するため、新しいオリジンからの最初のリクエストはキャッシュのMISSになることがあります。クエリ文字列は無視されるので、?x=が付いたリクエストでも同じコピーが使われます。

プリフライト(OPTIONS)には204で応答し、次のヘッダーが付きます。

ヘッダー 値
Access-Control-Allow-Methods GET, HEAD, OPTIONS
Access-Control-Allow-Headers Accept, Content-Type, If-None-Match
Access-Control-Max-Age 86400

Acceptヘッダー付きの通常のfetchは単純リクエストなので、プリフライトは不要です。If-None-Matchを自分で設定するスクリプトにはプリフライトが必要で、そのヘッダーは許可されています。

公正な利用

  • キーもSLAもありません。ベータ版のベストエフォートの公開フィードです。
  • Cache-Controlに従い、ETagとIf-None-Matchを使って、変更のないレポートが304で済むようにしてください。
  • 15〜30秒より短い間隔でポーリングしないでください。データはおよそ30秒ごとに変わるため、それより速く取得してもキャッシュ済みのコピーが返るだけです。
  • ウォレットは、タイマーで取得するのではなく、ユーザーがこれに依存する画面を開いたときに取得してください。
  • ポーリングするサーバーは、自分が誰であるかを示す説明的なUser-Agentを送ってください。例:my-wallet/1.4 (+https://example.com/contact)。
  • このパスへのリクエストが1 IPあたり毎分120件を超えると、レート制限され、約60秒間429が返ります。キャッシュヒットも数えられます。429や5xxが返ったらバックオフしてください。
  • ブラウザーでは、429は読み取れるレスポンスではなく、CORSエラーまたはネットワークエラーとして現れます。ネットワーク障害は429や503と同じように扱ってください。バックオフし、最後に取得できた正常なレポートを保持し、その各行はexpiresAtで期限切れになるに任せます(HTTPステータスコードとエラーを参照)。

ベータ版について

このAPIはベータ版で、Anonは現時点で安定性についての約束をしていません。

  • 予告なく変わることがあります。 フィールド、列挙値、レスポンスの形は、予告期間なしに追加、名前変更、型変更、削除されることがあります。Anonは、非推奨化や提供終了の手続き、またDeprecationヘッダーやSunsetヘッダーを約束しません。
  • schemaVersionは変わることがあります。 /api/v1はゲートウェイのデプロイ全体のルートバージョンであり、このエンドポイントのバージョンではありません。このエンドポイント自体のschemaVersionは本文にあり、現在は1ですが、これも変わることがあります。JSON Schemaは寛容に作られており、現時点のレスポンスを記述するもので、約束ではありません。
  • ホストは当面api.anon.incです。 将来api.railscan.ioのようなエイリアスが加わるかもしれませんが、時期は約束しません。
  • 変更履歴。 変更は、可能な範囲で下の変更履歴に記録します。

変更があっても動き続けるクライアントの作り方:

  • 未知のフィールドは無視する。 レポート、各チェック、metricsのあらゆる階層で、未知のオブジェクトフィールドを無視してください。
  • 閉じた集合に頼らない。 認識できないstatusは、その行に限ってunknownとして扱ってください。認識できないreasonは「詳細なし」として扱い、statusを基準に動いてください。使わないserviceやchainIdの行は無視し、知らないmetricsのキーも無視してください。
  • 失敗するのは1行だけにする。 読めない行が1つあっても、他のすべての行を空にしないでください。
  • schemaVersionを確認する。 知らない値であれば、形が変わっている可能性があります。推測せず、更新するまでレポートを読めないものとして扱ってください。

現時点で成り立っていること。これはエンドポイントの現在の挙動なので、正しく扱ってください。ただし約束ではありません。

  • 指標。 すべてのチェックにはmetricsオブジェクトがあり、不明な指標のキーは省略されます。監視対象外の行はmetrics: {}です。存在しない指標を0として読まないでください。
  • スコープごとに1行。 サービスとchainIdの組み合わせは最大1回しか現れません。wakuは唯一の共有行で、chainId: nullです。行をむやみに合算しないでください。メインネットに含めるかどうかは、自分で決めたチェーンの許可リストで判断してください。Sepolia(11155111)はメインネットの集計に含まれません。
  • 鮮度は行ごと。 鮮度とキャッシュのルールを使ってください。現時点でexpiresAtがnullになるのは、unknownとunmonitoredの行だけです。
  • 数値。 positionがheadを超えることがあるため、遅れは0以上に丸めてください。respondingがmonitoredを超えることはありません。すべての指標は非負の安全な整数です。

わからないこと

  • Railgunの公式ステータスではありません。 Anonのモニターが、Anonのインフラから、Anonが使うよう設定されたサービスを読み取った結果です。これらのサービスについて、利用者から見える状況は異なる場合があります。
  • 「安全に取引できる」ことを示すシグナルではありません。 ppoiがcurrentであっても、特定のシールドが使える、あるいは特定の証明が有効だという意味ではありません。設定済みのPPOIノードが自身の現在のインデックスまで検証済みだという意味です。個々のウォレットのPPOI有効性、コンプライアンス、使用可能な残高については何も示しません。
  • ブロードキャスターの行が機能低下なのは、部分的な読み取りだというだけです。 監視対象のブロードキャスターの一部が応答しなかったという意味です。ほかのブロードキャスターや配信方法は引き続き使える可能性があります。その方法とプライバシー上の限界は、ブロードキャスターネットワークで確認してください。
  • Wakuのピア数は配信を意味しません。 peersは、Anonが監視する接続の接続数を数えたものです。メッセージがブロードキャスターに届いて戻ってくることを示すものではありません。
  • インデクサーとSubsquidの行は、ウォレット自体の同期ではありません。 これらのサービスがそれぞれのチェーンに追いついているかを示すだけです。ウォレット自体の同期は別です。ウォレットの同期を参照してください。

履歴

GET https://api.anon.inc/api/v1/railgun/liveness/historyは、直近14日分の同じ行を5分バケットで返し、24時間・7日・14日の稼働率も付けます。独自のキャッシュを持つ別のエンドポイントで、チャートやステータスページ向けです。稼働状況履歴APIを参照してください。今この瞬間の状況を知るには、引き続きこのエンドポイントを使ってください。

プライバシー

このエンドポイントへのリクエストには、ウォレットに関する情報は含まれません。アドレスもアカウントもありません。それでも、Anonとその前段のCDNは、ほかのHTTPSリクエストと同じように、IPアドレスとUser-Agentを確認できます。タイマーでポーリングするウォレットは、そのIPがRailgunに関心を持っていることを30秒間隔で示すことになります。それが気になる場合は、必要なときだけポーリングするか、自分のサーバーでレポートを取得し、そのキャッシュからユーザーに提供してください。

変更履歴

2026-10-04

Wakuとブロードキャスターが監視対象になり、その行はunmonitoredではなく実際のステータスを報告するようになりました。レート制限が適用されます。このパスへのリクエストが1 IPあたり毎分120件を超えると、約60秒間429が返ります。

バージョン1(ベータ版)

初回リリースです(ベータ版で、安定性の約束はありません)。schemaVersion 1。サービスはppoi、indexer、subsquid、broadcasters、wakuで、Ethereum、Arbitrum、Polygon、BNB Chain、Sepoliaを対象とします。Wakuとブロードキャスターは掲載されていますが、リリース時点では監視対象外でした。各チェックの有効期間は150秒で、モニターは応答するソースをおよそ30秒ごと(失敗が続くソースはそれより間隔があき)に再確認し、レスポンスは共有キャッシュで30秒間キャッシュできます。