关于 Altscan explorers
Altscan 是开源多链区块浏览器平台,以同一代码库提供 BNB Chain 和 Ethereum 浏览器。它面向链上数据浏览者与开发者,涵盖区块、交易、地址、代币、分析和 REST API。
主要功能
- 01浏览区块、交易、地址与代币
- 02搜索地址、交易哈希与区块号
- 03查看 DEX 交易、巨鲸转账和 Gas 数据
- 04识别仿冒代币并展示合约状态
- 05REST API、Webhook 与 CSV 导出
适用场景
- 01查询 BNB Chain 或 Ethereum 交易及代币转账
- 02检查地址持仓、NFT 与历史活动
- 03通过 API 查询链上数据并导出地址交易
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://altscan.io/mcpclaude mcp add --transport http io-altscan-explorers https://altscan.io/mcp{"mcpServers":{"io-altscan-explorers":{"type":"http","url":"https://altscan.io/mcp"}}}在 Cursor 中打开{"servers":{"io-altscan-explorers":{"type":"http","url":"https://altscan.io/mcp"}}}在 VS Code 中打开{"mcpServers":{"io-altscan-explorers":{"type":"http","url":"https://altscan.io/mcp"}}}{"mcpServers":{"io-altscan-explorers":{"serverUrl":"https://altscan.io/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
Altscan
开源多链区块浏览器平台。
目前,同一套代码支持 BNB Chain 和 Ethereum 的独立浏览器,并且架构支持随时间推移添加更多链。
Next.js 15、Drizzle ORM 和 ethers.js。由 Measurable Data Token (MDT) 维护。
altscan.io | bnbscan.com | ethscan.io
这是什么?
Altscan 是一个开源多链区块浏览器平台。目前,同一套代码支持两个独立的浏览器——BNBScan(bnbscan.com,BNB Chain)和 EthScan(ethscan.io,Ethereum)——并且设计上支持随时间推移扩展至更多链。它们与 BscScan、Etherscan、Binance 或 Ethereum Foundation 完全独立,提供简洁、快速的界面,用于浏览区块、交易、地址、代币和链上活动。
通过一个 CHAIN 环境变量即可选择部署所服务的链——前端、索引器和架构均相同。
截图
| EthScan 首页,深色模式 | 区块 |
|---|---|
![]() | ![]() |
| 交易 | 地址 |
|---|---|
![]() | ![]() |
| 代币 | 状态页面 |
|---|---|
![]() | ![]() |
截图于 2026 年 10 月 12 日从生产环境截取,赞助展示位已关闭。
功能特性
浏览
- 区块带 — 将最新区块绘制为实时滚动带(宽度 = 交易数,填充量 = 已用 Gas),显示在首页以及区块、交易、地址和分析页面中
- 区块 — 显示最新区块及其验证者、Gas 和交易数量;每个区块页面都会列出其中的交易
- 交易 — 用一行概述发生的情况,并展示费用明细、日志以及代币和 NFT 转账;配置跟踪端点后可查看内部交易(默认关闭)
- 地址 — 余额和已跟踪代币持仓、以账本形式呈现的交易历史、代币转账和 NFT
- 代币 — 提供 ERC-20 / BEP-20 页面,展示市场数据、持有者和转账;相似外观(同形异义字符)代币会标记出来
- 搜索 — 搜索地址、交易哈希、区块编号以及代币名称或符号
分析
- DEX 交易 — Uniswap-V2 风格的兑换(BNB Chain 上的 PancakeSwap V2,Ethereum 上的 Uniswap V2);不索引 V3 风格的流动性池
- 巨鲸追踪器 — 显示过去一小时、过去一天或整个保留时间范围内最大的原生代币、封装代币和稳定币转账
- Gas 追踪器 — 根据近期区块的百分位数计算慢速、标准和快速价格
- 网络图表 — 显示交易数、产出的区块数以及(在 Ethereum 上)平均基础费用;索引器积累满三天数据前按小时显示
- 验证者(BNB Chain)— 显示验证者集合及其投票权、佣金和过去 24 小时产出的区块数
开发者工具
- REST API — v1 查询 API、可选的 API 密钥(通过钱包签名消息生成)以及 Webhook
- CSV 导出 — 导出本地索引的某个地址最近 1,000 笔交易
- 合约状态 — 显示合约是否已在 Sourcify 上验证;可在 sourcify.dev 验证新的源代码
其他
- 深色模式,跟随系统设置,并采用适合手机的布局
- 关注列表 — 在浏览器中保存地址(无需账户,数据不会离开设备)
- 网络切换器 — 链接到另一条链上的姊妹区块浏览器
- 状态页面 — status.altscan.io 跟踪托管区块浏览器的正常运行时间、区块延迟和响应时间
架构
altscan/
├── apps/
│ ├── explorer/ Unified Next.js 15 frontend + API routes
│ │ CHAIN=bnb → bnbscan.com
│ │ CHAIN=eth → ethscan.io
│ ├── indexer/ Unified block indexer (direct polling loop)
│ │ CHAIN=bnb → indexes BNB Chain
│ │ CHAIN=eth → indexes Ethereum
│ ├── status/ Hono status page for the hosted explorers
│ │ Polls /api/health on bnbscan.com and ethscan.io
│ ├── altscan-site/ altscan.io umbrella site (Astro on Cloudflare Workers)
│ └── admin/ Operator console behind Cloudflare Access (Astro on Cloudflare Workers)
├── packages/
│ ├── chain-config/ getChainConfig() — chain-specific config
│ ├── db/ Drizzle ORM schema + Postgres client
│ ├── explorer-core/ Shared utils (rate limiting, formatting, Redis cache)
│ ├── providers/ Third-party data adapters (Moralis) and their spend budgets
│ ├── settings-schema/ Runtime settings shared by the explorer and the admin console
│ └── types/ Shared TypeScript types
├── render.yaml Render blueprint for the hosted explorers
├── docker-compose.yml Self-host stack: Postgres, Redis, indexer, explorer
├── turbo.json Turborepo pipeline config
└── pnpm-workspace.yaml
技术栈
| 层级 | 技术 |
|---|---|
| 前端 | Next.js 15 (App Router)、React 19、Tailwind CSS 3 |
| 后端 | Next.js API 路由、Hono(状态页面) |
| 数据库 | PostgreSQL(通过 Drizzle ORM) |
| 索引器 | ethers.js、JSON-RPC(直接轮询循环,无任务队列) |
| 缓存 | Redis(速率限制、缓存、Moralis CU 账本) |
| 边缘站点 | Cloudflare Workers 上的 Astro(altscan.io、管理控制台) |
| Monorepo | pnpm + Turborepo |
| 托管 | Render.com(Web 服务 + workers + Postgres + Redis) |
工作原理
- 索引器连接到链的 JSON-RPC 端点,轮询新区块,并通过 Drizzle ORM 将区块、交易和代币数据写入 Postgres。
- 区块浏览器通过 ISR(增量静态再生成)提供 Next.js 前端——每个页面按自身计划重新验证,间隔从 45 秒到五分钟不等,在提供最新数据的同时减轻服务器压力。依赖请求的页面(例如搜索页面)会针对每个请求进行渲染。
- 链配置包集中管理所有链特定差异(区块时间、货币、主题颜色、RPC URL、功能标志),让相同代码可以在两条链上运行。
- 状态页面通过每 30 秒轮询两个托管区块浏览器的
/api/health端点,独立监控其正常运行时间、区块延迟和响应时间,并跟踪过去 24 小时和 30 天的数据。其监控目标固定在apps/status/src/server.ts中,不属于 Docker 堆栈或 Render blueprint。
开始使用
运行自己的浏览器(Docker)
git clone https://github.com/heathermhuang/altscan.git
cd altscan
cp .env.docker.example .env
docker compose up -d
打开 http://localhost:3000。这会启动 Postgres、Redis、索引器和浏览器——无需配置即可启动,索引器会在首次启动时创建自己的架构。要使用 Ethereum,请在 .env 中设置 CHAIN=eth,然后使用 --build 重新运行。
完整指南(包括 Render 部署、保留策略调优和局限性): docs/SELF_HOSTING.md。
本地开发(不使用 Docker)
前置条件
- Node.js 22 — CI 和 Docker 镜像使用的版本
- pnpm 10 — 在
package.json中固定;corepack enable会采用精确版本 - PostgreSQL 16
- Redis 7 — 可选:未设置
REDIS_URL时,速率限制和缓存会退回到进程内存
安装
# Clone the repo
git clone https://github.com/heathermhuang/altscan.git
cd altscan
# Install dependencies
pnpm install
# Start Postgres from the Docker stack (localhost:5432; user, password and database all "altscan")
docker compose up -d postgres
# Set up the explorer environment (defaults match the local Docker Postgres)
cp apps/explorer/.env.example apps/explorer/.env.local
# Start the BNB explorer
CHAIN=bnb NEXT_PUBLIC_CHAIN=bnb pnpm --filter @altscan/explorer dev
BNB 浏览器将在 http://localhost:3000 提供服务。索引器会在首次启动时创建数据库架构,因此请先运行一次索引器(见下文),再期待数据出现;面对空数据库时,单独运行浏览器没有可读取的数据表。pnpm dev 通过 Turborepo 一次启动所有应用:浏览器、索引器、状态页和两个 Astro 站点。
运行指定链
# BNB Chain explorer only
CHAIN=bnb NEXT_PUBLIC_CHAIN=bnb pnpm --filter @altscan/explorer dev
# Ethereum explorer only
CHAIN=eth NEXT_PUBLIC_CHAIN=eth pnpm --filter @altscan/explorer dev -p 3001
# BNB indexer only — build the packages it imports first (see below)
pnpm --filter @altscan/db build && pnpm --filter @altscan/chain-config build && pnpm --filter @altscan/explorer-core build && pnpm --filter @altscan/providers build
CHAIN=bnb pnpm --filter @altscan/indexer dev
# Status page only (monitors the hosted sites)
pnpm --filter @altscan/status dev
CHAIN 用于驱动服务端;NEXT_PUBLIC_CHAIN 会内联到客户端构建包中,因此两者必须设置为同一条链。索引器从环境变量或 apps/indexer/.env 读取设置:至少需要 DATABASE_URL(或 ETH_DATABASE_URL)、该链的 RPC URL,以及靠近链头的 START_BLOCK——内置的起始区块会回溯数百万个区块。
浏览器会从源码编译工作区软件包,但索引器会加载这些软件包已构建的 dist/ 输出,而这些文件不会提交到版本库——克隆后需构建一次,修改后也需重新构建。
环境变量
部署时需要设置以下变量。apps/explorer/.env.example
还列出了可选的提供商上限,docs/SELF_HOSTING.md 介绍了索引器的保留策略和磁盘设置。
| 变量 | 必需 | 说明 |
|---|---|---|
CHAIN | 是 | bnb 或 eth——选择要提供服务或索引的链 |
NEXT_PUBLIC_CHAIN | 浏览器 | 与 CHAIN 相同的值;在构建时由客户端组件读取 |
DATABASE_URL | CHAIN=bnb | PostgreSQL 连接字符串(BNB Chain) |
ETH_DATABASE_URL | CHAIN=eth | PostgreSQL 连接字符串(Ethereum) |
BNB_RPC_URL | CHAIN=bnb | BSC JSON-RPC 端点,也可用逗号分隔的列表配置故障转移 |
ETH_RPC_URL | CHAIN=eth | Ethereum JSON-RPC 端点,也可用逗号分隔的列表配置故障转移 |
REDIS_URL | 建议设置 | Redis 连接字符串;未设置时,速率限制和缓存按进程隔离 |
MORALIS_API_KEY | 否 | 用于余额和 NFT 增强的 Moralis API |
ADMIN_SECRET | 否 | /api/admin/* 端点的 Bearer 令牌;未设置时,这些端点会拒绝所有请求 |
GA_MEASUREMENT_ID | 否 | Google Analytics 衡量 ID;未设置时,不会加载分析脚本 |
BINANCE_REF_CODE | 否 | 赞助 Binance 展示位的推荐码;未设置时,这些展示位不会显示 |
免费 RPC 端点
无需付费 RPC 提供商即可开始使用:
| 链 | 免费端点 |
|---|---|
| BNB Chain | https://bsc-dataseed1.binance.org/ |
| Ethereum | https://ethereum-rpc.publicnode.com |
这些是 Docker 堆栈的默认值。两者都支持历史区块的 eth_getBlockReceipts,索引器依赖此功能(于 2026 年 10 月检查)。依赖其他端点之前,也要用同样的方法检查:请求它返回几千个区块深度处某个区块的收据。一些公共 RPC 在链上最新区块处可以响应,但不支持该方法;还有一些会为该方法返回空列表。索引器会拒绝收据未涵盖其所有交易的区块,因此这两种情况都会导致索引器无法继续处理。一些免费套餐还会限制 JSON-RPC 批次大小:eth.drpc.org 的免费套餐会拒绝包含超过 3 个请求的批次,因此如果使用它,请在索引器上设置 RPC_BATCH_MAX_COUNT=1。
用于生产环境时,请使用付费 RPC 提供商:免费端点在索引器负载下会限制请求频率。
API
两个浏览器都提供 v1 REST API。任一网站上的 /api-docs 都是端点参考文档,/developer 则介绍如何通过使用钱包签署消息来创建 API 密钥。API 密钥是可选的:不带密钥的调用会受到 IP 限流。
# Example: query transactions for an address
curl -X POST https://bnbscan.com/api/v1/query \
-H "X-API-Key: bnbs_..." \
-H "Content-Type: application/json" \
-d '{"entity":"transactions","filter":{"address":"0x..."}}'
测试
pnpm test
运行每个工作区的 Vitest 测试套件。需要真实 Postgres 或 Redis 的测试套件会跳过,除非设置了相应的环境变量 — CONTRIBUTING.md 列出了这些测试以及运行方法。CI 会运行除两个保留分区测试套件之外的所有测试,还会运行 lint、对索引器和管理控制台进行类型检查,以及构建生产环境版本的浏览器。
部署
托管的浏览器通过 Render.com 使用 render.yaml 运行:每条链各有一个 Web 服务和一个索引器工作进程,并配有 Postgres 和 Redis。若要使用 Docker 或 Render 自行部署,请参阅 docs/SELF_HOSTING.md。
数据保留
索引器每 6 小时执行一次保留清理。超过 RETENTION_DAYS(默认值为 7 天)的日志、DEX 交易和 Gas 历史记录会被删除,每笔交易的输入数据也会被移除,并在需要时从 RPC 重新获取;交易本身仍可查询。除非同时设置 COMPACT_RETENTION_DAYS,否则交易、代币转账和区块会永久保留,因此该设置决定了区块历史记录的上限。addresses 表永远不会清理,会随着链的增长而不断增大。请参阅
docs/SELF_HOSTING.md。
还有一个手动清理端点。它会删除整行数据——包括交易和区块——删除早于 days 指定时间的数据,然后运行 VACUUM。请先请求试运行:
curl -X POST "https://your-explorer.example/api/admin/db-prune?days=7&dry=true" \
-H "Authorization: Bearer $ADMIN_SECRET"
已知限制
- 不是创世区块归档 — 索引器会从起始区块开始向前推进。较早的地址和代币历史记录会按需从服务提供商获取并缓存,而不是在本地编入索引。完整的历史归档需要采用不同的架构。
- 查询深层历史需要 Moralis 密钥 — 如果没有密钥,地址历史记录仅限于本地已编入索引的区块,持币者数量则会改用估算值,并附带说明。这是唯一的第三方商业依赖。
- 实时持币者数据来自 Moralis — 为提高索引器吞吐量,已关闭逐区块持币者跟踪功能,因此本地存储的持币者数量是固定快照,界面会标注为“已索引持币者”。实时总数和持币者排行榜来自 Moralis;没有密钥时,持币者列表会根据近期转账估算,并附带说明。
- 每个部署只支持一条链 —
NEXT_PUBLIC_CHAIN会在构建时内联到客户端捆绑包中,因此切换链需要重新构建,而不只是重启。 - 支持两条链 — BNB Chain 和 Ethereum。目前要添加第三条链需要修改代码,而不是更改配置。
- 合约验证仅支持 Sourcify,区块浏览器会读取验证结果,而不接受源代码。
- 规范域名和网络切换器的目标地址按链写入代码,位于
packages/chain-config中,因此公开分叉时需要在那里进行修改。除非完成配置,否则分析功能和推荐广告均处于关闭状态。请参阅 docs/SELF_HOSTING.md。
参与贡献
欢迎贡献。请阅读 CONTRIBUTING.md,了解开发环境设置、CHAIN 模型和 PR 规范;同时请阅读我们的 行为准则。
- Fork 此仓库
- 创建功能分支:
git checkout -b feat/my-feature - 进行修改并添加测试
- 运行 CONTRIBUTING.md 中列出的检查
- 向
main提交拉取请求
首次贡献者:请在第一次 PR 中将姓名添加到 CONTRIBUTORS.md,以接受 贡献者许可协议。你仍拥有作品的所有权——CLA 是授予许可,而非转让版权;这使我们能够提供下文所述的商业许可。CI 检查会确认你的姓名已列出。
发现安全漏洞?请遵循我们的 安全政策——不要公开提交问题。
许可证
基于 AGPL-3.0 开源——经 OSI 批准的许可证。人人均可永久免费使用:
- 运行它,用于任何目的,包括商业用途和付费服务
- Fork 它、修改它,并分发你的分支
- 围绕它销售服务——托管、支持、咨询、托管式部署、RaaS
- 授予的权利不可撤销——已发布版本将继续采用 AGPL-3.0,我们无法撤回
AGPL 要求你做一件事作为回报:如果你修改了 Altscan,并通过网络向他人提供服务,也要向这些用户提供修改后的源代码。未作修改直接运行,或仅在内部保留修改,则无需履行此义务。
对于无法使用 AGPL 代码,或需要保修和支持条款的组织,可申请商业许可证。请参阅 LICENSING.md,了解其涵盖内容,以及这些条款与其他仅提供源代码的许可方案有何不同。
© Measurable Data Token(MDT)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。





