# 区块链浏览器
## 版本记录
- **是**:需要使用新的数据库重新订阅,以确保获取最新的数据和功能。
- **否**:不需要更改数据库,现有数据库可以继续使用。
| 版本号 | 修改点 | 更新数据库 |
|----------|--------------------------------------------|----------------|
| v4.0.1 | - 后端:合约升级后重新识别合约类型。
- 后端:dquery-v2.4.0支持图表自动初始化。
- 后端:dquery-v2.4.0支持新链自动发现,不在需要主动配置。
- 前端:优化样式。 | 否 |
| v4.0.0 | - 前端:前端页面全部改版,UI / 交互 / 视觉风格全面升级。
- 后端:订阅模块重构,引入**双订阅架构**(实时订阅 + 延迟订阅):实时处理保持原订阅链路不变;延迟处理(历史区块同步)**显著加快历史数据同步速度**。
- **不兼容升级**:本版本**不支持平滑升级**,必须重新部署浏览器并**重新订阅**所有链。 | 是 |
| v2.3.9 | - 主子链:新增同步模式。
- 跨链交易列表:修改跨链交易列表字段,增加模式字段,同步交易数,链名称修改为链id。
- 子链列表:子链列表调整为链列表显示子链+主链,去掉链名称。
- 跨链交易详情:增加同步模式交易详情页
- 子链详情:链名称调整为链id
- 区块详情:增加交易依赖关系图
- 合约验证:go合约验证支持开源ide编译:https://ide230.chainmaker.org.cn
- dquery-backend服务:优化数据库连接,优化替换源数据后需要重创建任务的问题
| 是 |
| v2.3.8 | - 合约列表:增加合约类型检索。
- 新增跨合约调用功能:显示合约直接的相互调用关系和合约方法调用合约的关系。
- 新增统计合约调用频率:增加合约调用频率列表,支持时间,合约检索。
- 新增api数据解析功能:按照给出的abi示例文件上传合约abi文件,系统根据abi文件继续合约事件数据,并且支持解析数据检索功能。
- 数据看板:新增合约频率统计看板| 是 |
| v2.3.7 | - 合约验证功能优化:增加dockerGo合约验证功能,注意compiler服务配置的docker_go_ide_url要和部署的合约是在同一个地址下编译的才支持验证。
- 新增did数据解析功能:解析did相关数据。
- 新增多个图表查询:支持多种图表展示。
- 链账户优化:更加精准统计链上相关账户信息。
- 自定义查询优化:增加暂停查询功能,临时释放资源。 增加临时表功能,支持基于临时表数据二次解析| 是 |
| v2.3.6 | - 合约详情页优化:增加交易列表的复杂查询功能,支持在海量数据下进行复杂查询(注意:性能可能较低)。
- 交易详情页改进:增加读写集合约名称的展示,提升用户理解;优化跨合约名称的展示,便于查看相关信息。
- 节点列表功能增强:支持全量节点的展示,提供更全面的网络节点情况;新增节点与区块的映射查询功能。
- EVM合约验证功能:新增EVM合约的验证功能,增强合约安全性。
- 统计功能优化:优化交易数量和事件数量的统计功能,提供更准确的数据反馈。 | 是 |
| v2.3.5 | XXXX | 否 |
## 概述
区块链浏览器项目致力于提供高效、全面的区块链数据展示与交互能力,支持主链与子链的多链架构需求。通过创新的技术架构设计与功能优化,项目能够精准呈现区块、交易、流转、持仓等多维度数据,并支持多种主流合约解析,包括ERC20、ERC721、DockerGo合约、存证合约、身份认证合约及数据资产合约等,进一步增强用户的交互体验。同时,浏览器还提供链上合约验证与源码查看功能,为区块链开发与透明性提供了强有力的支持。
该浏览器主要由前端、后端及数据库三部分组成。数据库支持mysql, pgsql,人大金仓,clickhouse等,后端使用Go语言开发,前端则基于React框架,确保系统的高效性与可扩展性。
浏览器采用**前后端分离部署**模式:后端(`chainmaker-explorer-backend`)、前端(`chainmaker-explorer`)、自主查询服务(`dquery-backend`)和合约编译服务(`contract-compiler-service`)分别由独立仓库维护和发布,配套的 docker-compose 编排、自带数据库 / Redis 等依赖统一放在前端仓库的 `docker/` 目录。v4.0.0 起,订阅模块升级为**双订阅架构**(实时订阅 + 延迟订阅):实时处理保持原订阅链路不变,延迟处理(历史区块同步)由原来的 RPC 拉取改造为基于订阅数据的批量处理,**显著加快了历史数据同步速度**。v2.4.0 起,dquery-backend 支持**图表自动初始化**,服务启动后自动创建图表定时任务,无需手动执行初始化脚本。
## 安装指南
### 常见问题速查(FAQ)
在开始部署之前,请先了解以下常见问题:
| 问题 | 答案 |
|------|------|
| **需要单独安装MySQL吗?** | ❌ **不需要**。Docker一键启动脚本已包含MySQL容器,会自动创建数据库 |
| **需要单独安装Redis吗?** | ❌ **不需要**。Docker一键启动脚本已包含Redis容器 |
| **需要单独安装Nginx吗?** | ❌ **不需要**。前端服务容器内置了Nginx |
| **只想查看数据,不验证合约可以吗?** | ✅ **可以**。合约编译服务(cm_compiler_server)仅用于合约验证功能,不使用该功能时可以忽略 |
| **有多个config.yml,以哪个为准?** | 每个服务有**独立的**config.yml,互不影响,详见下方说明 |
### 架构说明(必读)
区块链浏览器采用 **Docker 一键部署**,所有服务都已容器化,**无需单独安装任何依赖**。
```
┌─────────────────────────────────────────────────────────────────┐
│ Docker 容器组(一键启动) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ MySQL │ │ Redis │ │ 前端服务 (内置Nginx) │ │
│ │ (数据库) │ │ (缓存) │ │ 端口: 9996 │ │
│ │ 端口: 33061 │ │ │ └──────────────────────┘ │
│ └──────────────┘ └──────────────┘ │
│ │
│ ┌──────────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ 浏览器后端服务 │ │ 自主查询服务 │ │ 合约编译服务 │ │
│ │(cm_explorer_server)│ │(cm_dquery) │ │ (可选,仅合约验证)│ │
│ └──────────────────┘ └──────────────┘ └──────────────────────┘│
└─────────────────────────────────────────────────────────────────┘
```
**配置文件说明**(各服务独立配置,互不干扰):
| 配置文件路径 | 所属服务 | 主要用途 |
|-------------|---------|---------|
| `cm_explorer_server/config.yml` | 浏览器后端服务 | **核心配置**:订阅链信息、数据库连接、节点地址等 |
| `cm_dquery/config.yml` | 自主查询服务 | SQL查询功能配置 |
| `cm_compiler/config.yml` | 合约编译服务 | 合约验证功能配置(可选) |
| `cm_explorer_web/_config.json` | 前端服务 | 前端功能开关配置 |
> 💡 **重点提示**:大多数用户只需要修改 `cm_explorer_server/config.yml` 中的**链节点地址**和**证书路径**即可!
---
### 环境依赖
**唯一依赖:Docker 和 Docker Compose**
`docker`版本为`20.10.7`或以上
```sh
# 以centos7为例,其他安装方式见下方官网
$ sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
$ sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
```
`docker-compose`版本为`1.29.2`或以上
```sh
# 以centos7为例,其他安装方式见下方官网
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
```
下载地址:
- [https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/)
- [https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/)
若已安装,请通过命令查看版本:
```bash
$ docker -v
$ docker-compose -v
```
---
### 浏览器部署(详细步骤)
#### 前置条件
浏览器部署需要依赖一个**已运行的** ChainMaker 区块链网络。具体的 ChainMaker 环境安装部署请参考对应的文档[通过命令行体验链](../quickstart/通过命令行体验链.md)。
> ⚠️ **确保您的区块链节点已经正常运行**,否则浏览器将无法订阅数据!
代码版本:v4.0.1
#### 第一步:下载浏览器代码
```bash
$ git clone -b v4.0.1 --depth=1 https://git.chainmaker.org.cn/chainmaker/chainmaker-explorer.git
# 进入docker目录
$ cd chainmaker-explorer/docker
```
下载完成后,目录结构如下:
```
chainmaker-explorer/docker/
├── docker-compose.yml # Docker编排文件(一键启动所有服务)
├── restart.sh # 重启脚本
├── cm_explorer_server/ # 浏览器后端配置目录
│ ├── config.yml # ⭐ 核心配置文件(建议修改管理员密码)
│ ├── crypto-config/ # 证书目录(仅"配置文件订阅"方式需要)
│ └── log/ # 日志目录
├── cm_dquery/ # 自主查询服务配置目录
│ └── config.yml # 查询服务配置
├── cm_compiler/ # 合约编译服务配置目录
│ └── config.yml # 编译服务配置
└── cm_explorer_web/ # 前端服务配置目录
├── default.conf # Nginx配置
├── _config.json # 前端功能开关
└── assets/ # 静态资源(可替换logo等)
```
#### 相关仓库源码地址
浏览器由以下三个仓库协同构成,部署时**只需下载**上面 `chainmaker-explorer` 仓库即可,`docker/` 目录下的编排文件会自动拉取其它两个服务的官方镜像;下方地址仅供需要二次开发 / 调试源码的同学参考:
| 仓库 | 说明 | 地址 | 最新版本 |
|---|---|---|---|
| `chainmaker-explorer` | 浏览器后端 + docker-compose 编排 | https://git.chainmaker.org.cn/chainmaker/chainmaker-explorer | v4.0.1 |
| `chainmaker-explorer-backend` | 浏览器前端 | https://git.chainmaker.org.cn/19132027458/chainmaker-explorer-web | v4.0.1 |
| `dquery-backend` | 自主查询服务(图表数据查询 / 自定义 SQL,含图表自动初始化) | https://git.chainmaker.org.cn/chainmaker/dquery-backend | v2.4.0 |
| `contract-compiler-service` | 合约编译服务(合约验证) | https://git.chainmaker.org.cn/chainmaker/contract-compiler-service | v2.3.9 |
#### 启动运行
> 提示:
> 若以前启动过浏览器则需要将以前数据清除,
> 可以使用 `docker-compose -f docker-compose.yml down -v`
##### 启动docker
```shell
cd chainmaker-explorer/docker
# 常规启动(MySQL,快速)----如果没有特殊情况,配置文件基本不需要更改
docker-compose -f docker-compose.yml up -d
# PostgreSQL(人大金仓)版本
# docker-compose -f docker-compose-pgsql.yml up -d
# ARM 架构版本
# docker-compose -f docker-compose-arm.yml up -d
```
> ⚠️ **使用 PostgreSQL(人大金仓)的用户请先阅读 [PostgreSQL 部署配置说明](#postgresql部署配置说明-必读)**,默认配置文件均为 MySQL 配置,使用 PostgreSQL 需要修改多个 `config.yml` 中的 `db_provider` 等参数,否则服务无法正常启动。
---
#### 第二步:配置订阅链信息
浏览器支持 **两种订阅方式**,请根据您的需求选择:
| 方式 | 适用场景 | 操作难度 | 是否需要修改配置文件 |
|-----|---------|---------|-------------------|
| **方式A:页面订阅(推荐新手)** | 快速体验、临时订阅 | ⭐ 简单 | ❌ 不需要 |
| **方式B:配置文件订阅** | 生产环境、固定订阅 | ⭐⭐ 中等 | ✅ 需要 |
---
##### 方式A:页面订阅(推荐新手)✅
> 💡 **最简单的方式**:直接启动浏览器,然后在页面上添加链订阅,无需修改任何配置文件!
**此方式下,您只需修改管理员密码即可**:
编辑 `cm_explorer_server/config.yml`:
```yaml
web:
admin_password: passw0rd # 改成您自己的密码(用于登录浏览器后台)
```
**不需要修改的配置**:
- ❌ 不需要配置 `chains:` 部分
- ❌ 不需要复制证书到 `crypto-config/` 目录
配置修改完成后,可直接跳到 **[第三步:一键启动所有服务](#第三步一键启动所有服务)** 启动浏览器,然后在浏览器页面上进行链的订阅操作。
**页面订阅操作步骤**:
1. 启动浏览器后,访问 http://localhost:9996
2. 登录管理员账号(密码:您设置的admin_password)
3. 进入「链管理」或「订阅管理」页面
4. 点击「添加链」,填写链信息(链ID、节点地址等)
5. 上传用户证书文件(通过页面上传,无需手动复制)
6. 点击「订阅」即可
---
##### 方式B:配置文件订阅
> 💡 **适用于生产环境**:预先配置好链信息,浏览器启动后自动订阅。
###### B.1 复制链的证书文件
将您的 ChainMaker 链的**用户证书**复制到 `cm_explorer_server/crypto-config/` 目录下:
```bash
# 示例:从chainmaker链目录复制证书
$ cp -r /path/to/chainmaker-go/build/crypto-config/* ./cm_explorer_server/crypto-config/
```
###### B.2 修改后端配置文件
编辑 `cm_explorer_server/config.yml`,**修改以下配置**:
```yaml
# ===== 修改点1:管理员密码(用于浏览器登录)=====
web:
admin_password: passw0rd # 改成您自己的密码
# ===== 修改点2:链ID =====
chain:
main_chain_id: chainmaker_pk # 改成您的链ID(如:chain1)
# ===== 修改点3:订阅链配置(最重要)=====
chains:
- chain_id: chainmaker_pk # 改成您的链ID
auth_type: public # 链的认证模式:public(公钥模式) 或 permissioned(证书模式)
hash_type: SM3 # 哈希算法:SM3 或 SHA256
tls: false # 是否开启TLS(根据您的链配置)
user:
# ⭐ 证书路径:相对于容器内的路径,确保证书已复制到crypto-config目录
user_sign_key_file_path: ../configs/crypto-config/node1/user/client1/client1.key
user_sign_crt_file_path: # 证书模式需要填写
nodes:
# ⭐ 节点地址:改成您的区块链节点地址
- tls_host: chainmaker.org
remotes: 127.0.0.1:12301 # 改成您的节点IP:端口
- tls_host: chainmaker.org
remotes: 127.0.0.1:12302 # 可配置多个节点
```
**不同认证模式的配置示例**:
📌 公钥模式 (public) 配置示例
```yaml
chains:
- chain_id: chain1
auth_type: public
hash_type: SM3
tls: false
user:
user_sign_key_file_path: ../configs/crypto-config/node1/user/client1/client1.key
nodes:
- tls_host: chainmaker.org
remotes: 192.168.1.100:12301
```
📌 证书模式 (permissionedwithcert) 配置示例
```yaml
chains:
- chain_id: chain1
auth_type: permissionedwithcert
org_id: wx-org1.chainmaker.org
hash_type: SHA256
tls: true
user:
user_sign_key_file_path: ../configs/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.key
user_sign_crt_file_path: ../configs/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.crt
user_tls_key_file_path: ../configs/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.key
user_tls_crt_file_path: ../configs/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.crt
nodes:
- tls_host: chainmaker.org
ca_paths: ../configs/crypto-config/wx-org1.chainmaker.org/ca/ca.crt
remotes: 192.168.1.100:12301
```
---
#### 第三步:一键启动所有服务
```bash
# 进入docker目录
$ cd chainmaker-explorer/docker
# 一键启动(包含MySQL、Redis、前端、后端等所有服务)
$ docker-compose up -d
# 或使用重启脚本
$ ./restart.sh
```
> 💡 **说明**:首次启动会自动拉取Docker镜像,可能需要几分钟时间。
##### 查看服务状态
```bash
# 查看所有容器运行状态
$ docker-compose ps
# 应该看到以下5个服务都是 Up 状态:
# cm_explorer_db (MySQL数据库)
# redis (Redis缓存)
# cm_explorer_server (浏览器后端)
# cm_dquery_server (自主查询服务)
# cm_compiler_server (合约编译服务)
# cm_explorer_web (前端服务)
```
##### 查看日志(排查问题)
```bash
# 查看后端服务日志
$ docker logs -f --tail 200 docker-cm_explorer_server-1
# 查看前端服务日志
$ docker logs -f --tail 200 docker-cm_explorer_web-1
# 查看数据库日志
$ docker logs -f --tail 200 docker-cm_explorer_db-1
```
---
#### 第四步:访问浏览器
浏览器访问:**http://localhost:9996**
> 如果是远程服务器,将 `localhost` 替换为服务器IP地址
---
#### 第五步:图表数据自动初始化
> dquery-backend v2.4.0 起,图表数据已支持**自动初始化**,无需手动执行脚本。
图表初始化功能用于展示首页的统计图表(数据看板)。如果不需要图表功能,可在 `cm_dquery/config.yml` 中将 `chart_init.enabled` 设为 `false` 关闭。
**自动初始化机制**:dquery-backend 服务启动后,会自动读取 `scripts/chart_yaml/` 目录下的 YAML 配置文件,创建图表查询任务并定时执行。用户无需额外操作。
如需自定义图表内容,可修改 dquery-backend 源码仓库 `scripts/chart_yaml/` 目录下对应的 YAML 文件(MySQL / PostgreSQL 各自独立):
```
scripts/chart_yaml/
mysql_chart_init_chain.yaml # 第一阶段:基础数据统计,落地临时表
mysql_chart_second_chain.yaml # 第二阶段:单链聚合统计(日/周/月)
mysql_chart_second_cross_chain.yaml # 第二阶段:跨链聚合统计
pgsql_chart_init_chain.yaml
pgsql_chart_second_chain.yaml
pgsql_chart_second_cross_chain.yaml
pgsql_chart_second_risk_guardian.yaml # 风险防护相关统计(PostgreSQL 专属)
```
图表初始化由 `cm_dquery/config.yml` 中的 `chart_init` 配置项控制,详细配置见下方 [浏览器自主查询服务配置](#浏览器自主查询服务配置)。
---
### 停止与清理
```bash
# 停止所有服务
$ docker-compose down
# 停止并清除所有数据(重新部署时使用)
$ docker-compose down -v
```
---
### 配置调整(如果没有特殊情况,配置文件基本不需要更改)
> 💡 **提示**:以下是各配置文件的详细说明,通常情况下使用默认配置即可,仅供高级用户参考。
>
> ⚠️ **PostgreSQL 用户注意**:以下配置示例均为 MySQL 默认值。使用 PostgreSQL 时需将 `db_provider` 改为 `Pgsql`、端口改为 `54321`,详见上方 [PostgreSQL 部署配置说明](#postgresql部署配置说明-必读)。
#### 各服务配置文件说明
| 服务 | 配置文件 | 核心配置项 | 修改场景 |
|-----|---------|-----------|---------|
| 浏览器后端 | `cm_explorer_server/config.yml` | 数据库连接、Redis连接、订阅链配置 | 需要连接自定义链时必须修改 |
| 自主查询 | `cm_dquery/config.yml` | 数据库连接、查询超时时间 | 使用SQL查询功能时 |
| 合约编译 | `cm_compiler/config.yml` | 数据库连接、IDE地址 | 使用合约验证功能时 |
| 前端服务 | `cm_explorer_web/_config.json` | 功能开关 | 需要隐藏某些功能时 |
##### 浏览器后端服务配置
浏览器配置文件:`cm_explorer_server/config.yml`,它的配置内容包括五部分,以下是详细说明:
```
web:
# Web监听网卡地址
address: 0.0.0.0
# Web监听端口
port: 9997
# evm合约编译服务,http://127.0.0.1:8888
contract_compile_url: http://cm_compiler_server:9999
# prometheus监控端口
monitor_port: 13582
#管理后台密钥,用于管理后台调用浏览器接口校验
manage_backend_api_key: AdSGavFKmbrzesqkZPQaVD2UGnqbbC
# 登录过期时间,单位:天
login_expire_time: 7
# admin账户登录密码
admin_password: passw0rd
#是否开启pprof
pprof:
is_open: false
port: 16660
#mysql配置信息
db:
#数据库连接信息
host: cm_explorer_db
#数据库端口
port: 3306
#数据库用户名
username: root
#数据库密码
password: chainmaker
#数据库名称
database: chainmaker_explorer
# 表/索引-名称前缀(用于同一个数据库启动不同浏览器)
prefix:
#db类型: ClickHouse / Mysql / Pgsql
db_provider: Mysql
#批量插入最大字节数(单位kb),默认256kb
max_byte_size: 1024
#单表插入,更新线程池最大并发数,默认10,最大50.
max_pool_size: 10
# redis缓存信息
db_redis:
#cluster:集群/node:单机
type: node
host:
- redis:6379
username:
password: explorer_redis
chain:
# 是否订阅链
subscribe: true
#是否主链
is_main_chain: true
#主链名称
main_chain_name: 国家级区块链网络主网络
#主链ID
main_chain_id: chainmaker_pk
#链子did合约名称,默认使用第一个did合约
# 订阅链配置
chains:
- chain_id: chainmaker_pk
auth_type: public
org_id:
hash_type: SM3
tls_model: 0 #0:单证书模式,1:双证书模式
tls: false #是否开启tls,ture/false
user:
user_sign_key_file_path: ../configs/crypto-config/node1/user/client1/client1.key
user_sign_crt_file_path:
user_tls_key_file_path:
user_tls_crt_file_path:
user_enc_key_file_path:
user_enc_crt_file_path:
nodes:
- tls_host: chainmaker.org
ca_paths:
remotes: pre-chain1.cnbn.org.cn:12391
- tls_host: chainmaker.org
ca_paths:
remotes: pre-chain2.cnbn.org.cn:12392
# 敏感词过滤腾讯云服务
sensitive:
enable: false
secret_id: 123456
secret_key: 123456
# 告警
alarmer:
# 开启企业微信告警
wechat_enable: false
# 开启钉钉告警
ding_enable: false
# 企业应用token
wechat_access_token: 0f4b72d5-09dc-4e7e-afa3-5e8258d1a1da
# 钉钉应用token
ding_access_token: 123456
# 告警信息前缀
prefix: 123456
# 监控(告警信息请填写alarmer)
monitor:
# 是否启用
enable: false
# 敏感词过滤预警返回最大交易数
safe_word_limit: 10
# 单用户短期大批量交易监控
monitor_tx:
# 间隔期内用户最大发交易数
max_tx_num: 10000
# 单次查询交易数
tx_limit: 1000
# 节点间允许最大区块高度差
max_height_diff: 10
# 最大尝试连接节点次数
try_conn_num: 3
# 触发间隔 (min) 至少10min
interval: 1
# 监控节点信息
chains:
- chain_id: chainmaker_pk
auth_type: public
org_id:
hash_type: SM3
tls_model: 1 #0:单证书模式,1:双证书模式
tls: false #是否开启tls,ture/false
user:
user_sign_key_file_path: ../configs/crypto-config/node1/user/client1/client1.key
user_sign_crt_file_path:
user_tls_key_file_path:
user_tls_crt_file_path:
user_enc_key_file_path:
user_enc_crt_file_path:
nodes:
- tls_host: chainmaker.org
ca_paths:
remotes: pre-chain1.cnbn.org.cn:12391
- tls_host: chainmaker.org
ca_paths:
remotes: pre-chain2.cnbn.org.cn:12392
```
##### 浏览器自主查询服务配置
浏览器配置文件:`cm_dquery/config.yml`,它的配置内容包括以下部分:
```
web:
# Web监听网卡地址
address: 0.0.0.0
# Web监听端口
port: 9998
# prometheus监控端口
monitor_port: 13582
pprof:
is_open: false
port: 16660
#定时任务配置
performance:
max_query_goroutine_pool: 20 # 定时任务允许的SQL并发查询量
max_query_user: 200 # 每个用户允许创建的最大的SQL查询语句
max_query_result_size: 10 # SQL查询结果的最大size,单位M
#服务存储配置
db:
host: cm_explorer_db
port: 3306
username: root
password: chainmaker
#数据库
database: chainmaker_dquery
#db类型: ClickHouse / Mysql / Pgsql
db_provider: Mysql
db_redis:
#cluster:集群/node:单机
type: node
host:
- redis:6379
username:
password: explorer_redis
prefix: dquery_
#自主查询数据库配置信息(浏览器链存储配置)
chainmaker_db:
#浏览器链存储数据库
host: cm_explorer_db
port: 3306
#链数据库账户信息
username: root
password: chainmaker
#链存储DB
database: chainmaker_explorer
#链存储数据库类型,ClickHouse / Mysql/ Pgsql
db_provider: Mysql
#sql语句单次查询超时时间,单位秒,超出后自定停止,防止慢查询占用资源
query_timeout: 300
# 链列表自动从 {database}.chain 表读取,prefix = chain_id(v2.4.0 起无需手动配置 chain_list)
# 刷新间隔(秒)。不配置 → 默认 30s;设为 0 → 关闭定时刷新
refresh_interval: 30
# 图表自动初始化配置(v2.4.0 新增)
# 服务启动时自动读取 yaml_dir 下的 YAML 文件并创建图表定时任务
chart_init:
enabled: true # 是否开启图表自动初始化
yaml_dir: ./scripts/chart_yaml # YAML 配置文件目录
# admin 账户密码(必须与 cm_explorer_server/config.yml 中 web.admin_password 一致)
admin_password: "passw0rd"
# Init 任务每日执行时刻(HH:MM,24h 制),默认 02:00
daily_run_time: "02:00"
```
##### 浏览器合约编译服务配置
编译服务配置文件:`cm_compiler/config.yml`,该服务主要用于合约验证功能,将合约源码编译成合约执行文件,然后比对执行文件进行合约验证。
```
web:
# Web监听网卡地址
address: 0.0.0.0
# Web监听端口
port: 9999
# 是否开启跨域:
cross_domain: true
# prometheus监控端口
monitor_port: 13582
#dockergo合约IDE地址
docker_go_ide_url: https://ide230.chainmaker.org.cn
#mysql配置信息
db:
host: cm_explorer_db
port: 3306
username: root
password: chainmaker
#数据库
database: contract_compile
#db类型: ClickHouse / Mysql/ Pgsql
db_provider: Mysql
db_redis:
#cluster:集群/node:单机
type: node
host:
- redis:6379
username:
password: explorer_redis
```
##### 浏览器前端服务配置
- 浏览器前端配置文件:`cm_explorer_web/_config.json`
```
{
"APP_IS_SHOW_DB_QUERY": true,
"APP_IS_SHOW_TRANSACTION_ADVANCED_SEARCH": false
}
```
参数说明:
- APP_IS_SHOW_DB_QUERY: 是否显示数据库查询功能(true:显示,false:隐藏)
- APP_IS_SHOW_TRANSACTION_ADVANCED_SEARCH: 是否显示合约详情中交易列表高级搜索功能(true:显示,false:隐藏)
- 浏览器前端配置文件:`cm_explorer_web/assets`
```
assets目录下支持替换如下静态资源(可选项,默认长安链图片):
- logo.png: 浏览器logo
- favicon.ico: 浏览器图标
配置图标则会替换浏览器默认资源,替换时请确保文件命名(包含格式)一致。
```
- 浏览器前端配置文件:`cm_explorer_web/default.conf`
```
gzip on;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
application/atom+xml
application/javascript
application/json
application/rss+xml
application/vnd.ms-fontobject
application/x-font-ttf
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
application/octet-stream
font/opentype
image/svg+xml
image/x-icon
text/css
text/plain
text/x-component;
server {
listen 9996 http2;
root /usr/share/nginx/html;
index index.html;
client_max_body_size 10m;
gzip on;
gzip_vary on;
gzip_types text/plain application/javascript application/x-javascript text/css text/xml application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
location / {
try_files $uri $uri/ /index.html;
}
location ^~ /assets/ {
try_files /override$uri $uri =404;
add_header Cache-Control max-age=2592000;
}
location ~* \.(css|js|png|jpg|jpeg|gif|gz|svg|mp4|ogg|ogv|webm|htc|xml|woff)$ {
add_header Cache-Control max-age=2592000;
}
#浏览器后端服务
location /chainmaker/ {
add_header 'Access-Control-Allow-Origin' "$http_origin" always;
add_header 'Access-Control-Allow-Headers' '*' always;
add_header 'Access-Control-Allow-Methods' '*' always;
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_read_timeout 300;
proxy_pass http://cm_explorer_server:9997/chainmaker;
}
#自主查询服务
location /dquery/sqlQuery {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Headers' '*' always;
add_header 'Access-Control-Allow-Methods' '*' always;
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_read_timeout 300;
proxy_pass http://cm_dquery_server:9998/dquery/sqlQuery;
}
}
```
Docker配置文件:`docker-composer.yml`
`包括mysql,redis服务,浏览器前端,后端服务,编译服务,自主查询服务`
```
services:
cm_explorer_db:
image: hub-dev.cnbn.org.cn/tools/mysql:8.0.28
volumes:
- ./explorer_db/mysql:/var/lib/mysql
- ./mysql-config/my.cnf:/etc/mysql/my.cnf:ro
restart: always
environment:
MYSQL_ROOT_PASSWORD: chainmaker
MYSQL_USER: chainmaker # 可选:在容器启动时创建用户
MYSQL_PASSWORD: chainmaker # 可选:为用户设置密码
TZ: Asia/Shanghai # 设置时区为东八区
ports:
- "33061:3306"
redis:
image: hub-dev.cnbn.org.cn/tools/redis:7.4.1
volumes:
- ./explorer_db/redis:/data
restart: always
command: redis-server --requirepass explorer_redis
cm_explorer_server:
image: hub-dev.cnbn.org.cn/opennet/chainmaker-explorer-backend:v4.0.1
depends_on:
- cm_explorer_db
- redis
- cm_compiler_server
- cm_dquery_server
restart: always
volumes:
- ./cm_explorer_server/config.yml:/chainmaker-explorer-backend/configs/config.yml
- ./cm_explorer_server/crypto-config:/chainmaker-explorer-backend/configs/crypto-config
- ./cm_explorer_server/log/:/chainmaker-explorer-backend/log/
cm_dquery_server:
image: hub-dev.cnbn.org.cn/opennet/dquery-backend:v2.4.0
depends_on:
- cm_explorer_db
- redis
restart: always
volumes:
- ./cm_dquery/config.yml:/dquery-backend/configs/config.yml
- ./cm_dquery/log/:/dquery-backend/log/
cm_compiler_server:
image: hub-dev.cnbn.org.cn/opennet/compiler-service:v2.3.9
depends_on:
- cm_explorer_db
- redis
restart: always
volumes:
- ./cm_compiler/config.yml:/compiler-service/configs/config.yml
- ./cm_compiler/log/:/compiler-service/log/
cm_explorer_web:
image: hub-dev.cnbn.org.cn/opennet/explorer_front:v4.0.1
depends_on:
- cm_compiler_server
- cm_dquery_server
- cm_explorer_server
ports:
- "9996:9996"
restart: always
command: /bin/sh -c "sleep 10 && nginx -g 'daemon off;'" # 延迟 10 秒启动
volumes:
- ./cm_explorer_web/default.conf:/etc/nginx/conf.d/default.conf
- ./cm_explorer_web/_config.json:/usr/share/nginx/html/_config.json
- ./cm_explorer_web/assets:/usr/share/nginx/html/override/assets
```
编排文件位于 `chainmaker-explorer/docker/` 目录下,包含三套:
- `docker-compose.yml`:默认编排(MySQL + Redis),x86 架构。
- `docker-compose-pgsql.yml`:PostgreSQL(人大金仓)编排。
- `docker-compose-arm.yml`:ARM 架构编排。
启动时通过 `-f` 指定对应文件即可,例如:
```bash
docker-compose -f docker-compose.yml up -d # 默认 MySQL 版本
docker-compose -f docker-compose-pgsql.yml up -d # PostgreSQL/人大金仓
docker-compose -f docker-compose-arm.yml up -d # ARM 架构
```
---
### PostgreSQL 部署配置说明(必读)
> ⚠️ 默认所有配置文件均为 **MySQL 配置**。如果使用 PostgreSQL(人大金仓),必须修改以下配置项,否则服务无法正常启动。
#### 与 MySQL 部署的核心差异
| 对比项 | MySQL(默认) | PostgreSQL(人大金仓) |
|-------|-------------|---------------------|
| 编排文件 | `docker-compose.yml` | `docker-compose-pgsql.yml` |
| 数据库服务名 | `cm_explorer_db`(MySQL 容器) | `cm_explorer_db`(KingBase 容器) |
| 数据库端口 | `3306` | `54321` |
| `db_provider` | `Mysql` | `Pgsql` |
| 浏览器后端 `database` | `chainmaker_explorer` | `chainmaker_explorer`(不变) |
| dquery `database` | `chainmaker_dquery` | `chainmaker_dquery`(不变) |
| compiler `database` | `contract_compile` | `contract_compile`(不变) |
#### 第一步:使用 PostgreSQL 编排文件启动
```shell
cd chainmaker-explorer/docker
docker-compose -f docker-compose-pgsql.yml up -d
```
#### 第二步:修改浏览器后端配置
编辑 `cm_explorer_server/config.yml`,修改数据库相关配置:
```yaml
db:
host: cm_explorer_db
port: 54321 # MySQL 默认 3306 → PostgreSQL 54321
username: root # 根据实际数据库用户名填写
password: chainmaker # 根据实际数据库密码填写
database: chainmaker_explorer
prefix:
db_provider: Pgsql # MySQL → Pgsql
max_byte_size: 1024
max_pool_size: 10
```
#### 第三步:修改自主查询服务(dquery)配置
编辑 `cm_dquery/config.yml`,需要修改 **两处** `db_provider` 和端口:
```yaml
# ===== 修改点1:dquery 自身存储数据库 =====
db:
host: cm_explorer_db
port: 54321 # MySQL 默认 3306 → PostgreSQL 54321
username: root
password: chainmaker
database: chainmaker_dquery
db_provider: Pgsql # Mysql → Pgsql
# ===== 修改点2:浏览器链存储数据库(chainmaker_db) =====
chainmaker_db:
host: cm_explorer_db
port: 54321 # MySQL 默认 3306 → PostgreSQL 54321
username: root
password: chainmaker
database: chainmaker_explorer
db_provider: Pgsql # Mysql → Pgsql
query_timeout: 300
refresh_interval: 30
```
#### 第四步:修改合约编译服务配置
编辑 `cm_compiler/config.yml`:
```yaml
db:
host: cm_explorer_db
port: 54321 # MySQL 默认 3306 → PostgreSQL 54321
username: root
password: chainmaker
database: contract_compile
db_provider: Pgsql # Mysql → Pgsql
```
#### 修改汇总(快速检查清单)
使用 PostgreSQL 时,以下 **4 处** `db_provider` 必须从 `Mysql` 改为 `Pgsql`,**3 处** `port` 必须从 `3306` 改为 `54321`:
| 文件 | 配置路径 | 修改项 |
|-----|---------|-------|
| `cm_explorer_server/config.yml` | `db.db_provider` | `Mysql` → `Pgsql` |
| `cm_explorer_server/config.yml` | `db.port` | `3306` → `54321` |
| `cm_dquery/config.yml` | `db.db_provider` | `Mysql` → `Pgsql` |
| `cm_dquery/config.yml` | `db.port` | `3306` → `54321` |
| `cm_dquery/config.yml` | `chainmaker_db.db_provider` | `Mysql` → `Pgsql` |
| `cm_dquery/config.yml` | `chainmaker_db.port` | `3306` → `54321` |
| `cm_compiler/config.yml` | `db.db_provider` | `Mysql` → `Pgsql` |
| `cm_compiler/config.yml` | `db.port` | `3306` → `54321` |
---
### 常见问题排查
#### 问题1:无法拉取Docker镜像
**现象**:执行 `docker-compose up -d` 时报错,提示镜像拉取失败
**解决方案**:
```bash
# 检查网络连接
$ ping hub-dev.cnbn.org.cn
# 如果网络不通,可以尝试手动拉取镜像
$ docker pull hub-dev.cnbn.org.cn/opennet/chainmaker-explorer-backend:v2.3.9
```
#### 问题2:浏览器无法订阅链数据
**现象**:浏览器启动成功,但首页没有数据
**排查步骤**:
1. 检查区块链节点是否正常运行
2. 检查 `cm_explorer_server/config.yml` 中的节点地址是否正确
3. 检查证书路径是否正确,证书是否已复制到 `crypto-config` 目录
4. 查看后端日志:`docker logs -f docker-cm_explorer_server-1`
#### 问题3:访问 http://localhost:9996 无响应
**排查步骤**:
```bash
# 检查容器是否正常运行
$ docker-compose ps
# 检查端口是否被占用
$ netstat -tlnp | grep 9996
# 查看前端服务日志
$ docker logs -f docker-cm_explorer_web-1
```
#### 问题4:数据库连接失败
**现象**:后端日志显示数据库连接错误
**解决方案**:
- Docker 内部服务使用容器名 `cm_explorer_db` 作为数据库地址(已在默认配置中设置)
- 等待数据库容器完全启动后再启动其他服务(docker-compose 会自动处理依赖顺序)
---
### 浏览器版本升级
#### 升级到 v4.0.1(从 v2.3.x 升级:不支持平滑升级,必须重新部署并重新订阅)
> v4.0.0 起重写了订阅模块(双订阅架构),数据库表结构、订阅任务模型、数据存储格式均发生了**不兼容变更**,因此**不支持**通过 `upgrader.bin` 原地升级,必须**完全卸载旧版、清理数据、按最新版本文档全新部署并重新订阅所有链**。原有的 v2.3.8 → v2.3.9 upgrader 升级链路在 v4.0.x 上不再适用。
升级步骤如下:
1. 停止旧版浏览器
```bash
# 切到旧版 chainmaker-explorer/docker 目录
cd chainmaker-explorer/docker
# 同时清空数据卷(v4.0.x 数据库结构不兼容)
docker-compose down -v
```
2. 清理历史数据目录(防止残留数据影响 v4.0.1)
```bash
# 删除 v2.3.x 留下的 MySQL/Redis 数据
rm -rf chainmaker-explorer/docker/explorer_db/
# 若使用了 PostgreSQL(人大金仓)版本
rm -rf chainmaker-explorer/docker/explorer_db/sql_data/
# 若升级前手动挂载过证书 / 日志目录,按需清理
# rm -rf chainmaker-explorer/docker/cm_explorer_server/crypto-config
```
3. 拉取 v4.0.1 源码并启动
```bash
# 浏览器前端 + docker-compose 编排
git clone -b v4.0.1 --depth=1 https://git.chainmaker.org.cn/chainmaker/chainmaker-explorer.git
cd chainmaker-explorer/docker
# 如需后端源码调试,可选拉取
# git clone -b v4.0.1 --depth=1 https://git.chainmaker.org.cn/chainmaker/chainmaker-explorer-backend.git
# 一键启动 v4.0.1
docker-compose up -d
```
4. 在浏览器前端「区块链管理」页面**重新订阅**所有需要的链(v4.0.x 不会自动继承 v2.3.x 的订阅配置)。
5. 图表数据会自动初始化(v2.4.0 起 dquery-backend 支持自动图表初始化,无需手动执行脚本)。如需自定义图表,可参考上方 [图表数据自动初始化](#第五步图表数据自动初始化) 章节。
> 提示:v4.0.1 的 `docker/` 目录随 `chainmaker-explorer` 仓库一起发布,升级时无需单独从 `chainmaker-explorer-backend` 仓库拷贝 docker 文件。
#### 升级到 v4.0.1(从 v4.0.0 平滑升级)
> v4.0.1 为小版本更新,**不涉及数据库变更**,支持从 v4.0.0 平滑升级,无需重新订阅。
升级步骤如下:
1. 拉取 v4.0.1 源码
```bash
git clone -b v4.0.1 --depth=1 https://git.chainmaker.org.cn/chainmaker/chainmaker-explorer.git
cd chainmaker-explorer/docker
```
2. 停止旧版服务并拉取新镜像
```bash
# 停止 v4.0.0 服务(保留数据)
docker-compose down
# 拉取 v4.0.1 最新镜像
docker-compose pull
# 启动 v4.0.1
docker-compose up -d
```
3. 检查服务状态
```bash
docker-compose ps
```
> 注意:如果之前修改过 `cm_explorer_server/config.yml` 等配置文件,升级时会保留原配置,无需重新修改。配置文件有新增项时请对比 v4.0.1 版本 `docker/` 目录下的默认配置进行补充。
#### v2.3.8 升级 v2.3.9(历史升级路径,仅作参考)
> 注意:v2.3.x 内部的 upgrader 升级链路已被 v4.0.x 替代,下列步骤**仅适用于 v2.3.8 → v2.3.9 的原地升级**,无法用于升级到 v4.0.x。升级到 v4.0.1 请使用上一节"完全重新部署"方案。
1. 停止订阅链数据:修改 `chainmaker-explorer/docker/cm_explorer_server/config.yml` 中的 `chain.subscribe=false`,停止订阅数据。
2. 进入容器执行升级命令:
```bash
# 进入容器(docker-cm_explorer_server-1 替换为自己的容器名)
docker exec -it -w /chainmaker-explorer-backend docker-cm_explorer_server-1 bash
# 执行升级命令(chain1 为链 id)
nohup ./bin/upgrader.bin chain1 v2.3.8 > upgrader.log 2>&1 &
# 等待升级结束,查看 upgrader.log 中是否输出:
# ======success %s====TotalCrossTx %d=======
```
3. 升级结束后重新开启订阅:修改 `chainmaker-explorer/docker/cm_explorer_server/config.yml` 中的 `chain.subscribe=true`,开始订阅。
## 使用手册
> v4.0.0 对前端页面进行了**全面改版**(UI / 交互 / 视觉风格全面升级),下文中涉及页面截图的内容主要基于 v2.3.x 旧版界面,整体功能模块(首页 / 订阅 / 区块 / 交易 / 合约 / 组织 / 节点 / 链账户 / 数据看板 / 自定义查询 / 合约验证等)保持不变,功能使用方式仍可参考。
### 初始化
- 初始化时,需要先订阅一条链,请确保所填写的信息和要订阅的链是一致的,并且用来订阅的节点的网络连接是通畅的。
- 如需订阅多条链,后续可在区块链管理处继续添加订阅。
- 参数说明
- 区块链ID:使用命令行创建的链默认链ID为chain1
- 节点ip和端口:ip为部署链的机器ip,port使用对应节点的rpc地址,一般默认为12301
- 组织ID:可以从每个节点对应的配置文件chainmaker.yml(`chainmaker-go/build/config/node1/chainmaker.yml`)获取
- TLS:请根据您的链的实际情况,选择是否开启TLS。目前通过官方开源文档教程上起的链,默认TLS(路径:`chainmaker-go/build/config/node1/chainmaker.yml对应的参数net.tls.enabled`)是开启的,默认的TLSHostname为chainmaker.org,如您自定义修改过,请按照实际情况填写。
- 组织ca证书:根据选择的组织id,从对应的节点中拿到对应组织下的ca.crt(eg:组织id为wx-org1.chainmaker.org的证书路径`chainmaker-go/build/config/node1/certs/ca/wx-org1.chainmaker.org/ca.crt`)
- 用户证书、私钥:需要使用sign证书和私钥,一般默认使用admin.sign.crt和admin.sign.key(路径:`chainmaker-go/build/config/node1/certs/user/`)
### 首页
- 通过右上角可以切换跳转到已经订阅的其他链的浏览器页面,也可继续添加订阅链。
- 在搜索框左边的下拉框可筛选搜索类型,搜索类型包含区块哈希、区块高度、交易ID、合约名称、合约地址
- 点击左下角统计当前链的相关数据,如区块高度,交易数等,点击将跳转到对应的区块列表页、交易列表页、合约列表页、组织列表页、节点列表页、账户列表页等。
- 首页将展示当前最新的区块信息,包含每个区块的区块高度、包含交易数、出块节点。
- 首页将展示当前最新的区块信息,包含每笔交易的交易id、交易发起者、所调用的合约以及交易发起时间。
- 首页将展示当前最新的区块信息,包含每个合约的合约名称、合约创建者、合约版本、合约部署时间。
### 订阅区块链
- 支持同时订阅多条链,再订阅链时,请确保所填写的信息和要订阅的链是一致的,并且用来订阅的节点的网络连接是通畅的。
- 支持订阅Cert,和Public两种账户模式的链。
- 不允许同时订阅同一条链,也不允许同时订阅ChainID相同的链。
- 如果订阅后,所订阅的节点运行出现异常,如停机了,或者被踢出网络了,则浏览器也将无法获取信息,您可以通过重新订阅按钮,修改到正常运行的节点,恢复订阅。
- 支持删除订阅,删除后,将不会再获取该链的信息,且原来的已经订阅的数据都会被删除,如需重新获取,需要再次订阅。
### 区块信息
- 此处展示区块列表,点击查看,可以查看该区块的详情。
- 支持查看某一区块的具体信息,包括区块哈希,读写集哈希,DAG信息,以及本区块内的交易信息。
### 交易信息
- 此处展示交易列表,支持通过实际时间维度筛选交易,点击查看,可以查看该交易的详情。
- 支持查看某一条交易详情,包括交易的所属区块信息,交易发起人信息,交易所调用的合约执行情况。
### 合约信息
- 此处展示合约列表,默认进入全部合约,点击可切换Token类和NFT类,点击可以查看该合约的详情。
- 如果安装了长安链Web3插件v1.5.2+,可以直接把合约订阅到插件内。
#### 合约详情
- 支持查看合约信息,包括合约的地址,合约的创建者信息
- 可以切换查看交易信息、合约源码、流转记录、持有者、事件记录和版本记录。
#### CMDFA合约详情
- 如果所订阅的合约符合长安链合约标准协议规范,类型为CMDFA则浏览器处会额外展示CMDFA内的合约资产的流转记录和持有者记录。
#### CMNFA合约详情
- 如果所订阅的合约符合长安链合约标准协议规范,类型为CMNFA则浏览器处会额外展示CMNFA内的合约资产的流转记录、持有者和NFT总览。
- 以及可以查看合约内的数字藏品资产详情。
- 注意,相关数字藏品的metadata信息必须符合长安链合约标准规范否则将解析失败。具体如下:
```json
{
"author":"凌风出品",
"orgName":"北京美好景象图片有限公司",
"name":"Lionel Messi",
"description":"利昂内尔·安德烈斯·“利奥”·梅西·库奇蒂尼,简称梅西(西班牙语:Lionel Messi),生于阿根廷圣菲省罗萨里奥,现正效力于法甲俱乐部巴黎圣日耳曼,同时担任阿根廷国家足球队队长,司职边锋、前锋及前腰。目前他共获得7座金球奖、6次世界足球先生及6座欧洲金靴奖。",
"image":"https://www.strikers.auction/images/cards/000.png",
"seriesHash":"5fabfb28760f946a233b58e99bfac43f3c53b19afa41d26ea75a3a58cbfc1491"
}
```
- 请注意metadata必须是一段标准的json,且字段名称需与上述例子保持一致,否则将无法解析到对应的数据。其中
- 作品URL为该NFT图片资源存放的地址,
- 作品哈希为该图片对应的sha256哈希值,通过将资源哈希值上链进行存证,确保就算是存储在中心化云服务的NFT也不可被篡改。
#### 合约自定义解析(ABI解析)
- 合约类型为OTHER时,点击”ABI解析“入口,密码登录/插件钱包登陆后,上传ABI文件
- ABI信息详情页中,左上角可以切换版本号,查看不同版本号下的ABI详情
#### 跨合约调用统计
- 跨合约调用标签下,从两个纬度展示了该合约的跨合约调用关系。“合约级调用关系”,展示了合约执行时跨合约之间的依赖关系即调用了哪些合约,又被哪些合约所调用;而“方法级调用关系”展示了目标合约下的所有的合约方法,合约方法的依赖关系,即每个方法依赖了哪些合约
### 组织信息
- 此处展示参与该区块链的组织信息。
- 因public模式的链没有组织概念,故而该模式下不展示组织信息模块。
### 节点信息
- 此处展示参与该区块链的节点信息。
### 链账户信息
- 此处展示该区块链目前已经发送过或者接收过交易的用户信息,同步展示交易信息、持有Token信息和持有NFT信息。
- 无论是证书账号还是公钥账户都有其对应的链账户地址。
### 数据看板
● 点击“更多”进入数据看板详情页
● 数据看板分为”节点“、”交易“、”合约“和”自定义”四个板块
● “节点”板块下,交易贡献率统计各共识节点处理的交易数量占总比,反映节点的性能和可靠性;同理,区块贡献率统计每个节点在单位时间内产出区块数量,反映节点的参与度和贡献量
● “交易”板块下,“交易确认时间-单链”统计从交易发起到被确认所需的时间,评估网络的响应速度;“交易速率-单链”测量每秒处理的交易数量(TPS),即系统的吞吐量;”交易耗时情况统计“统计交易耗时的比例,反映网络拥堵情况
● “Top 10交易链账户”统计交易数量排名前十的链账户,定位活跃链账户
● “合约”板块,“合约验证数”和“部署合约数”直观展现一定时间内合约验证数和部署合约数的起伏变化,可以反应区块链的生态活跃度
- 统计被调用频率最频繁的前十个合约,点击右下角“查看列表”可进入合约调用详情
- 合约调用频率统计列表,统计被调用频率最频繁的前十个合约详情信息包括合约地址、合约名等
### 自定义查询
* 首页点击进入自定义查询(即链上数据sql查询)
* 用户必须先用长安链Web3插件钱包登陆。如果不登陆,仅可以查看“公共”的sql查询结果,且无法新建自己的sql查询表
* 成功登陆后,点击新建查询表
* 用户可以选取数据库中的字段名,在右侧输入查询条件
* 点击运行,下方返回查询结果后,用户可以点击“保存查询结果”
* 保存查询结果时,除了输入标题之外,可以选择查询结果是否公开,如果公开,所有人可见;如果不公开,只有当你登陆Web3插件钱包后,才能看到该查询结果。
* 除此之外,定时执行代表每隔XX小时,浏览器会自动更新查询结果
### 合约验证
- 进入一个尚未验证合约的合约详情页面,下方选择合约源码标签,点击合约验证。
- 进入合约验证的详情页面,填写合约地址、程序执行入口、合约版本、编译器版本、开源许可类型并上传合约源码之后,点击提交
- 提交验证后,页面会弹出验证结果。在合约详情的版本记录标签下,可以查看合约所有版本的验证结果。
- 对于已经通过验证的合约,可以在合约详情页的合约源码标签下,查看合约源码、Contract ABI等信息