# 区块链浏览器 ## 版本记录 - **是**:需要使用新的数据库重新订阅,以确保获取最新的数据和功能。 - **否**:不需要更改数据库,现有数据库可以继续使用。 | 版本号 | 修改点 | 更新数据库 | |----------|--------------------------------------------|----------------| | 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等信息