RAILGUN 运行状态 API
Anon 运行着一个监控器,用来检查其钱包所依赖的 Railgun 服务:PPOI 节点、Anon 自己的索引器、Subsquid、广播者和 Waku。监控器按链逐一复查,大约每 30 秒一次,并把结果作为一份小型 JSON 文档发布在公开的 URL 上。任何人都可以读取:钱包、仪表板、状态页和脚本。无需 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。 - 一次响应涵盖每条链上的每项服务。获取一次后自行筛选即可。
示例响应
下面是精简后的报告,包含五个检查项,数值仅为示例。真实报告会列出每条链上的每项服务。
{
"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 的监控器连续三次探测都没有得到可用的回答。observedAt是最近一次失败的探测,而lastSuccessAt保留了该服务上一次有响应的时间。失败不带任何指标。- 检查项目前按
waku、ppoi、broadcasters、indexer、subsquid排序,各服务内按chainId升序。请勿依赖这一顺序。
字段
报告
| 字段 | 类型 | 含义 |
|---|---|---|
schemaVersion |
整数 | 目前为 1。测试期间可能更改。 |
generatedAt |
时间戳 | 快照的组装时间,而不是提供服务的时间。监控器存活期间,它至少每 30 秒推进一次。 |
checks |
数组 | 每个服务和范围对应一个对象。每个服务与 chainId 的组合最多出现一次。 |
检查项
| 字段 | 类型 | 含义 |
|---|---|---|
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 填充,因此切勿把缺失的键当作零。未被监控的行是 "metrics": {}。
position 可能大于 head:参考链头按其自身节奏读取,可能最多滞后一分钟。请把落后量限制为不小于 0。
状态与原因
状态
以下是目前的状态。这不是封闭集合:在测试期间,状态值可能在不通知的情况下增加或改名。把你不认识的状态仅对该行当作 unknown。
| 状态 | 含义 | 处理方式 |
|---|---|---|
current |
服务有响应,并已在允许范围内赶上其参考值。 | 展示为已有响应且已赶上,时间以 observedAt 为准。 |
catching-up |
服务有响应,但落后其参考值的幅度超过了允许范围。 | 预期会有延迟。这不是故障。 |
degraded |
服务有响应,但受到严重影响:长时间大幅落后,或只覆盖了应覆盖范围的一部分。 | 发出警告。不要在对时间敏感的工作中依赖它。 |
unavailable |
Anon 的监控器连续三次探测都没有得到可用的回答。 | 视为没有响应。 |
unknown |
暂无可用证据,或证据无法安全地进行比较。 | 既不是好消息,也不是坏消息。不要显示绿色状态。 |
unmonitored |
Anon 不监控此检查项。 | 不是故障。显示为未覆盖。 |
超过其 expiresAt 的行,无论其状态如何,都已过期,宕机服务的行也可能以这种方式到达你手中。见新鲜度与缓存。
原因
| 原因 | 对应状态 | 含义 |
|---|---|---|
synced |
current |
位置在其链头的允许范围内,或 PPOI 节点已验证到其自身当前的索引。 |
behind |
catching-up、degraded |
位置落后其链头的幅度超过了允许范围。 |
responding |
current |
用于没有可比较位置的服务:Waku 和广播者。 |
partial-coverage |
degraded |
被监控的成员中只有部分有响应。用于广播者。 |
unreachable |
unknown、unavailable |
探测无法连接或无法理解该服务。连续失败最多两次为 unknown,三次为 unavailable。 |
not-configured |
unmonitored |
Anon 不监控此检查项。 |
no-observation |
unknown |
尚未有任何观测,或服务有响应但没有此链的数据。 |
incompatible-reference |
unknown |
服务有响应,但其数字无法安全地进行比较。例如 PPOI 节点没有所需的列表,或用作参考的链头太旧。 |
原因同样不是封闭集合。请这样编写你的客户端:遇到不认识的原因时,只依据 status 行动。对 Waku 和广播者的监控仍可能带来新的原因。
阈值
这些是上线时的取值。它们属于监控策略,而不是 schema 的一部分,因此 Anon 可能在不更改 schema 版本的情况下重新调整。
| 规则 | 取值 |
|---|---|
| 复查 | 有响应的来源大约每 30 秒复查一次,另有最多 3 秒的抖动。持续失败的来源复查得更少:每连续失败一次,等待时间翻倍,先是 30 秒,然后 60 秒,上限为 2 分钟。 |
| 行有效期 | 150 秒:expiresAt 为 observedAt 加 150 秒。 |
| 故障 | 连续 3 次探测失败后为 unavailable。前两次为 unknown。 |
| 落后容差 | 只要落后量不超过 10 个区块与约 2 分钟区块数中的较大者,indexer 和 subsquid 就是 current。 |
| 降级 | 连续 2 次评估中落后 30 分钟或更多。 |
| PPOI 落后 | 节点已验证的索引持续 45 秒落后于其自身当前的索引。 |
| 参考链头 | 用作参考的链头距今不得超过 60 秒,否则该行为 unknown,原因是 incompatible-reference。 |
服务与链
| 服务 | Anon 检查什么 | position |
head |
|---|---|---|---|
ppoi |
所配置的 PPOI 节点必须提供该网络所需的列表。将其已验证的 TXID 索引与同一节点当前的索引比较。 | 已验证的 TXID 索引 | 节点当前的 TXID 索引 |
indexer |
Anon 自己的索引器最后处理的区块,与链头减去索引器确认深度后的值比较。 | 最后处理的区块 | 扣除确认深度后的参考链头 |
subsquid |
所配置的 Subsquid 部署已索引的高度,与链头减去该 squid 自身确认深度后的值比较。 | 已索引的高度 | 扣除确认深度后的参考链头 |
broadcasters |
每条链:一组有限的广播者中有多少个有响应。自 2026-10-04 起监控。 | — | — |
waku |
对 Anon 所监控的 Waku 连接的一项共享检查。自 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键。请按测试版状态中的说明处理。 - 参考链头。 链头来自公共 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 秒:即一次复查。 |
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 |
你超过了合理使用中的速率限制:此路径上每个 IP 每分钟超过 120 个请求。 | 来自 CDN(Cloudflare 错误 1015),而不是 API。持续约 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 会以 TypeError 拒绝,与其他网络或 CORS 故障无异。你的代码看不到状态码或 Retry-After。请把任何网络故障都当作 429 或 503 处理:退避,保留最近一次正常的报告,并让其中的行通过 expiresAt 自然过期。
加载第一份快照之后,故障绝不会产生 503。服务器会继续提供最后一份快照,其中的行会通过 expiresAt 自然过期。
CORS
该报告是公开的,不包含因调用者而异的内容,所以每个响应都允许所有来源:
| 响应头 | 值 |
|---|---|
Access-Control-Allow-Origin |
* |
Access-Control-Expose-Headers |
ETag |
每个应答(200、304、204、405 和 503)都会发送这些响应头,无论请求的 Origin 是什么。没有 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)。 - 每个 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键。 - 只让一行失败,而不是整份报告。 一行读不懂,不应让其他所有行都变成空白。
- 检查
schemaVersion。 如果它不是你认识的值,结构可能已经改变。请把报告视为不可读,直到你完成更新,而不是自行猜测。
目前成立的情况。这是端点现在的行为,请正确处理,但这并不是承诺:
- 指标。 每个检查项都有
metrics对象,未知指标的键会被省略。未被监控的行为metrics: {}。切勿把缺失的指标当作0。 - 每个范围一行。 每个服务与
chainId的组合最多出现一次。waku是唯一的共享行,其chainId: null。不要不加判断地对各行求和。请用你自己的链白名单来决定哪些属于主网:Sepolia(11155111)从不计入主网汇总。 - 新鲜度按行计算。 使用新鲜度与缓存中的规则。目前只有
unknown和unmonitored行的expiresAt为null。 - 数字。 由于
position可能超过head,请把落后量限制为不小于 0。responding绝不会超过monitored。所有指标都是非负的安全整数。
它不能告诉你什么
- 它不是 Railgun 官方状态。 它是 Anon 的监控器,从 Anon 的基础设施读取 Anon 所配置使用的服务。你看到的这些服务的情况可能与此不同。
- 它不是“可安全交易”的信号。
ppoi为current,并不意味着某笔屏蔽已可花费,或某个证明有效。它只表示所配置的 PPOI 节点已验证到其自身当前的索引。它不涉及任何单个钱包的 PPOI 有效性、合规性或可用余额。 - 广播者部分异常只是一个不完整的读数。 它表示被监控的广播者中有一部分没有响应。其他广播者或递送方式可能仍然可用。请在广播者网络中查看相应方式及其隐私限制。
- Waku 的节点数不等于消息送达。
peers统计的是 Anon 所监控连接的连接数。它并不能证明消息会到达广播者并返回。 - 索引器和 Subsquid 的行不代表你的钱包同步状态。 它们表示这些服务是否已追平各自的链。你自己的钱包同步是另一回事。参见钱包同步。
历史
过去 14 天内,GET https://api.anon.inc/api/v1/railgun/liveness/history 会把相同的行以 5 分钟时间桶的形式返回,并附带 24 小时、7 天和 14 天的可用率。它是一个独立的端点,有自己的缓存,适合图表和状态页。见运行状态历史 API。要了解当下的真实情况,仍应使用本端点。
隐私
对此端点的请求不携带任何与你的钱包有关的信息:没有地址,也没有账户。Anon 和它前面的 CDN 仍会像对待任何 HTTPS 请求一样看到你的 IP 地址和 User-Agent。按定时器轮询的钱包,会以 30 秒的节奏显示该 IP 对 Railgun 的关注。如果你在意这一点,请按需轮询,或者由自己的服务器获取报告,再用这份缓存为你的用户提供服务。
变更日志
2026-10-04
现在 Waku 和广播者已被监控,它们的行会报告真实状态,而不再是 unmonitored。速率限制已开始执行:此路径上每个 IP 每分钟超过 120 个请求,将在约 60 秒内收到 429。
版本 1(测试版)
首次发布,处于测试阶段,不作稳定性承诺。schemaVersion 1。服务为 ppoi、indexer、subsquid、broadcasters 和 waku,覆盖 Ethereum、Arbitrum、Polygon、BNB Chain 和 Sepolia。Waku 和广播者已列出,但在发布时未被监控。每个检查项的有效期为 150 秒,监控器对有响应的来源大约每 30 秒复查一次(持续失败的来源复查得更少),响应可在共享缓存中缓存 30 秒。