WeBASE 技术文档

_images/logo_smaller_new.png

WeBASE(WeBank Blockchain Application Software Extension) 是在区块链应用和FISCO BCOS节点之间搭建的一套通用组件。


            解决方案


            更多开源工具

什么是WeBASE

WeBASE(WeBank Blockchain Application Software Extension) 是在区块链应用和FISCO-BCOS节点之间搭建的一套通用组件。围绕交易、合约、密钥管理,数据,可视化管理来设计各个模块,开发者可以根据业务所需,选择子系统进行部署。WeBASE屏蔽了区块链底层的复杂度,降低开发者的门槛,大幅提高区块链应用的开发效率,包含节点前置、节点管理、交易链路,数据导出,Web管理平台等子系统。

建立区块链应用开发标准

WeBASE将区块链应用开发标准化,按照部署、配置、开发智能合约、开发应用层、在线运维管理五个步骤即可完成一个区块链应用的开发,详细开发流程请参阅 使用WeBASE开发区块链应用

设计原则

按需部署 WeBASE抽象应用开发的诸多共性模块,形成各类服务组件,开发者根据需要部署所需组件。

微服务 WeBASE采用微服务架构,基于Spring Boot框架,提供RESTful风格接口。

零耦合 WeBASE所有子系统独立存在,均可独立部署,独立提供服务。

可定制 前端页面往往带有自身的业务属性,因此WeBASE采用前后端分离的技术,便于开发者基于后端接口定制自己的前端页面。

整体架构

完整的部署架构如下,其中WeBASE-Front需要和区块链节点同机部署。 _images/architecture.png

功能介绍

从可视化,智能合约,交易,数据四个维度设计各个中间件,各模块主要功能如下 _images/function.png

各子系统简介

  • 节点前置服务

    集成FISCO BCOS JavaSDK,提供RESTful风格的接口,客户端可以使用http的形式和节点进行交互,内置内存数据库,采集节点健康度数据。内置web控制台,实现节点的可视化操作。

    Github地址

    Gitee地址

    说明文档

  • 节点管理服务

    处理前端页面所有web请求,管理各个节点的状态,管理链上所有智能合约,对区块链的数据进行统计、分析,对异常交易的审计,私钥管理等。

    Github地址

    Gitee地址

    说明文档

  • WeBASE管理平台 可视化操作平台,可基于此平台查看节点信息,开发智能合约等。

    Github地址

    Gitee地址

    说明文档

  • 私钥托管和签名服务 托管用户私钥,提供云端签名。

    Github地址

    Gitee地址

    说明文档

版本及兼容

支持FISCO-BCOS 3.X.X系列版本

WeBASE lab-rc1

WeBASE lab-rc1 版本支持 FISCO-BCOS 3.0.0-rc1及以上版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用 FISCO BCOS 3.0.0-rc1版本。

WeBASE子系统名称 配套版本地址 FISCO-BCOS 2.X.X
节点前置服务 WeBASE-Front Release lab-rc1 FISCO BCOS 3.0.0-rc1
节点管理服务 WeBASE-Node-Manager Release lab-rc1 FISCO BCOS 3.0.0-rc1
WeBASE管理平台 WeBASE-Web Release lab-rc1 FISCO BCOS 3.0.0-rc1
签名服务 WeBASE-Sign Release lab-rc1 FISCO BCOS 3.0.0-rc1

支持FISCO-BCOS 2.X.X系列版本

WeBASE v1.5.3

WeBASE v1.5.3 版本支持 FISCO-BCOS 2.5.x及以上版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用 FISCO BCOS 2.8.0版本。

WeBASE子系统名称 配套版本地址 FISCO-BCOS 2.X.X
节点前置服务 WeBASE-Front Release v1.5.3 FISCO BCOS 2.8.0
节点管理服务 WeBASE-Node-Manager Release v1.5.3 FISCO BCOS 2.8.0
WeBASE管理平台 WeBASE-Web Release v1.5.3 FISCO BCOS 2.8.0
签名服务 WeBASE-Sign Release v1.5.3 FISCO BCOS 2.8.0
交易服务 WeBASE-Transaction Release v1.4.0 FISCO BCOS 2.8.0

WeBASE v1.5.2

WeBASE v1.5.2 版本支持 FISCO-BCOS 2.5.x及以上版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用 FISCO BCOS 2.7.2版本。

WeBASE子系统名称 配套版本地址 FISCO-BCOS 2.X.X
节点前置服务 WeBASE-Front Release v1.5.2 FISCO BCOS 2.7.2
节点管理服务 WeBASE-Node-Manager Release v1.5.2 FISCO BCOS 2.7.2
WeBASE管理平台 WeBASE-Web Release v1.5.2 FISCO BCOS 2.7.2
签名服务 WeBASE-Sign Release v1.5.0 FISCO BCOS 2.7.2
交易服务 WeBASE-Transaction Release v1.4.0 FISCO BCOS 2.7.2

WeBASE v1.5.1

WeBASE v1.5.1 版本支持 FISCO-BCOS 2.5.x及以上版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用 FISCO BCOS 2.7.2版本。

WeBASE子系统名称 配套版本地址 FISCO-BCOS 2.X.X
节点前置服务 WeBASE-Front Release v1.5.1 FISCO BCOS 2.7.2
节点管理服务 WeBASE-Node-Manager Release v1.5.1 FISCO BCOS 2.7.2
WeBASE管理平台 WeBASE-Web Release v1.5.1 FISCO BCOS 2.7.2
签名服务 WeBASE-Sign Release v1.5.0 FISCO BCOS 2.7.2
交易服务 WeBASE-Transaction Release v1.4.0 FISCO BCOS 2.7.2

WeBASE v1.5.0

WeBASE v1.5.0 版本支持 FISCO-BCOS 2.5.x及以上版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用 FISCO BCOS 2.7.2版本。

WeBASE子系统名称 配套版本地址 FISCO-BCOS 2.X.X
节点前置服务 WeBASE-Front Release v1.5.0 FISCO BCOS 2.7.2
节点管理服务 WeBASE-Node-Manager Release v1.5.0 FISCO BCOS 2.7.2
WeBASE管理平台 WeBASE-Web Release v1.5.0 FISCO BCOS 2.7.2
签名服务 WeBASE-Sign Release v1.5.0 FISCO BCOS 2.7.2
交易服务 WeBASE-Transaction Release v1.4.0 FISCO BCOS 2.7.2

WeBASE v1.4.3

WeBASE v1.4.3 版本支持 FISCO-BCOS 2.5.x及以上版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用 FISCO BCOS 2.7.1版本。

WeBASE子系统名称 配套版本地址 FISCO-BCOS 2.X.X
节点前置服务 WeBASE-Front Release v1.4.3 FISCO BCOS 2.7.1
节点管理服务 WeBASE-Node-Manager Release v1.4.3 FISCO BCOS 2.7.1
WeBASE管理平台 WeBASE-Web Release v1.4.3 FISCO BCOS 2.7.1
签名服务 WeBASE-Sign Release v1.4.3 FISCO BCOS 2.7.1
交易服务 WeBASE-Transaction Release v1.4.0 FISCO BCOS 2.7.1

WeBASE v1.4.2

WeBASE v1.4.2 版本支持 FISCO-BCOS 2.4.x及以上版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用 FISCO BCOS 2.7.0版本。

WeBASE子系统名称 配套版本地址 FISCO-BCOS 2.X.X
节点前置服务 WeBASE-Front Release v1.4.2 FISCO BCOS 2.7.0
节点管理服务 WeBASE-Node-Manager Release v1.4.2 FISCO BCOS 2.7.0
WeBASE管理平台 WeBASE-Web Release v1.4.2 FISCO BCOS 2.7.0
签名服务 WeBASE-Sign Release v1.4.2 FISCO BCOS 2.7.0
交易服务 WeBASE-Transaction Release v1.4.0 FISCO BCOS 2.7.0

WeBASE v1.2.4

WeBASE v1.2.4版本支持FISCO-BCOS 2.0.0-rc1,FISCO-BCOS 2.0.0-rc2,FISCO-BCOS 2.0.0-rc3,FISCO-BCOS 2.0.0及以上版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用FISCO BCOS 2.3.0版本。

WeBASE子系统名称 配套版本地址 FISCO-BCOS 2.X.X
节点前置服务 WeBASE-Front Release v1.2.4 FISCO BCOS 2.3.0
节点管理服务 WeBASE-Node-Manager Release v1.2.4 FISCO BCOS 2.3.0
WeBASE管理平台 WeBASE-Web Release v1.2.4 FISCO BCOS 2.3.0
数据导出代码生成子系统 WeBASE-Codegen-Monkey V1.2.0 FISCO BCOS 2.3.0
数据导出子系统 WeBASE-Collect-Bee V1.2.0 FISCO BCOS 2.3.0
签名服务 WeBASE-Sign Release v1.2.2 FISCO BCOS 2.3.0
交易服务 WeBASE-Transaction Release v1.2.2 FISCO BCOS 2.3.0

WeBASE v1.2.3

WeBASE v1.2.3版本支持FISCO-BCOS 2.0.0-rc1,FISCO-BCOS 2.0.0-rc2,FISCO-BCOS 2.0.0-rc3,FISCO-BCOS 2.0.0及以上版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用FISCO BCOS 2.2.0版本。

WeBASE子系统名称 配套版本地址 FISCO-BCOS 2.X.X
节点前置服务 WeBASE-Front Release v1.2.3 FISCO BCOS 2.2.0
节点管理服务 WeBASE-Node-Manager Release v1.2.2 FISCO BCOS 2.2.0
WeBASE管理平台 WeBASE-Web Release v1.2.2 FISCO BCOS 2.2.0
数据导出代码生成子系统 WeBASE-Codegen-Monkey V1.2.0 FISCO BCOS 2.2.0
数据导出子系统 WeBASE-Collect-Bee V1.2.0 FISCO BCOS 2.2.0
签名服务 WeBASE-Sign Release v1.2.2 FISCO BCOS 2.2.0
交易服务 WeBASE-Transaction Release v1.2.2 FISCO BCOS 2.2.0

WeBASE v1.2.2

WeBASE v1.2.2版本支持FISCO-BCOS 2.0.0-rc1,FISCO-BCOS 2.0.0-rc2,FISCO-BCOS 2.0.0-rc3,FISCO-BCOS 2.0.0及以上版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用FISCO BCOS 2.2.0版本。

WeBASE子系统名称 配套版本地址 FISCO-BCOS 2.X.X
节点前置服务 WeBASE-Front Release v1.2.2 FISCO BCOS 2.2.0
节点管理服务 WeBASE-Node-Manager Release v1.2.2 FISCO BCOS 2.2.0
WeBASE管理平台 WeBASE-Web Release v1.2.2 FISCO BCOS 2.2.0
数据导出代码生成子系统 WeBASE-Codegen-Monkey V1.2.0 FISCO BCOS 2.2.0
数据导出子系统 WeBASE-Collect-Bee V1.2.0 FISCO BCOS 2.2.0
签名服务 WeBASE-Sign Release v1.2.2 FISCO BCOS 2.2.0
交易服务 WeBASE-Transaction Release v1.2.2 FISCO BCOS 2.2.0

WeBASE v1.2.1

WeBASE v1.2.1版本支持FISCO-BCOS 2.0.0-rc1,FISCO-BCOS 2.0.0-rc2,FISCO-BCOS 2.0.0-rc3,FISCO-BCOS 2.0.0,FISCO-BCOS v2.1.0。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用FISCO BCOS 2.1.0版本。

WeBASE子系统名称 配套版本地址 FISCO-BCOS 2.X.X
节点前置服务 WeBASE-Front Release v1.2.1 FISCO BCOS 2.1.0
节点管理服务 WeBASE-Node-Manager Release v1.2.1 FISCO BCOS 2.1.0
WeBASE管理平台 WeBASE-Web Release v1.2.1 FISCO BCOS 2.1.0
数据导出代码生成子系统 WeBASE-Codegen-Monkey V1.2.0 FISCO BCOS 2.1.0
数据导出子系统 WeBASE-Collect-Bee V1.2.0 FISCO BCOS 2.1.0
签名服务 WeBASE-Sign Release v1.1.0 FISCO BCOS 2.1.0
交易服务 WeBASE-Transaction Release v1.2.0 FISCO BCOS 2.1.0

WeBASE v1.2.0

WeBASE v1.2.0版本支持FISCO-BCOS 2.0.0-rc1,FISCO-BCOS 2.0.0-rc2,FISCO-BCOS 2.0.0-rc3,FISCO-BCOS 2.0.0,FISCO-BCOS v2.1.0。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用FISCO BCOS 2.1.0版本。

WeBASE子系统名称 配套版本地址 FISCO-BCOS 2.0.X
节点前置服务 WeBASE-Front Release v1.2.0 FISCO BCOS 2.1.0
节点管理服务 WeBASE-Node-Manager Release v1.2.0 FISCO BCOS 2.1.0
WeBASE管理平台 WeBASE-Web Release v1.2.0 FISCO BCOS 2.1.0
数据导出代码生成子系统 WeBASE-Codegen-Monkey V1.2.0 FISCO BCOS 2.1.0
数据导出子系统 WeBASE-Collect-Bee V1.2.0 FISCO BCOS 2.1.0
签名服务 WeBASE-Sign Release v1.1.0 FISCO BCOS 2.1.0
交易服务 WeBASE-Transaction Release v1.2.0 FISCO BCOS 2.1.0

WeBASE V1.1.0

WeBASE V1.1.0版本支持FISCO-BCOS 2.0.0-rc1,FISCO-BCOS 2.0.0-rc2,FISCO-BCOS 2.0.0-rc3,FISCO-BCOS 2.0.0,FISCO-BCOS v2.1.0。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用FISCO BCOS 2.1.0版本。

WeBASE子系统名称 配套版本地址 FISCO-BCOS 2.0.X
节点前置服务 WeBASE-Front Release v1.1.0 FISCO BCOS 2.1.0
节点管理服务 WeBASE-Node-Manager Release v1.1.0 FISCO BCOS 2.1.0
WeBASE管理平台 WeBASE-Web Release v1.1.0 FISCO BCOS 2.1.0
数据导出代码生成子系统 WeBASE-Codegen-Monkey V1.1.0 FISCO BCOS 2.1.0
数据导出子系统 WeBASE-Collect-Bee V1.1.0 FISCO BCOS 2.1.0
签名服务 WeBASE-Sign Release v1.1.0 FISCO BCOS 2.1.0
交易服务 WeBASE-Transaction Release v1.0.0 FISCO BCOS 2.1.0

支持FISCO-BCOS 1.3.X系列版本

WeBASE V0.5.X版本支持FISCO-BCOS 1.3.X系列版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS推荐使用FISCO BCOS 1.3.8 Release

服务搭建详见Release tag代码里的README.md

系统名称 配套版本地址 兼容底层版本地址
节点前置服务,文档 WeBASE-Front Release V0.5.4 FISCO BCOS 1.3.8 Release
节点管理服务,文档 WeBASE-Node-Manager Release V0.5.4 FISCO BCOS 1.3.8 Release
WeBASE管理平台,文档 WeBASE-Web Release V0.5.4 FISCO BCOS 1.3.8 Release

快速入门搭建

在区块链应用开发阶段建议用户使用快速入门搭建。在快速入门搭建模式,开发者只需要搭建节点和节点前置服务(WeBASE-Front),就可以通过WeBASE-Front的合约编辑器进行合约的编辑,编译,部署,调试。

节点搭建

节点搭建的方法建议使用build_chain

节点前置服务搭建

前提条件

依赖软件 支持版本
Java JDK 8 至JDK 14

备注:部署出现问题请查看问题记录

  1. 下载安装包

    wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/lab-rc1/webase-front.zip
    
  2. 解压

    unzip webase-front.zip && cd webase-front
    
  3. 拷贝sdk证书文件(build_chain的时候生成的)

    将节点所在目录nodes/${ip}/sdk下的所有文件拷贝到当前conf目录,供SDK与节点建立连接时使用

    • 拷贝命令可使用cp -r nodes/${ip}/sdk/* ./conf/

    • 证书为以下两种之一:

      非国密:ca.crtsdk.crtsdk.key

      国密:sm_ca.crtsm_sdk.crtsm_sdk.keysm_ensdk.crtsm_ensdk.key

  4. 修改配置

    vi conf/application.yml
    
    sdk:
      useSmSsl: false  # sdk连接节点是否使用国密ssl
      peers: ['127.0.0.1:20200','127.0.0.1:20201'] # 节点ip和rpc端口
    
  5. 服务启停

    返回根目录,服务启停命令:

    启动: bash start.sh
    停止: bash stop.sh
    检查: bash status.sh 
    

启动成功将出现如下日志:

...
	Application() - main run success...

状态检查

成功部署后,可以根据以下步骤确认各个子服务是否启动成功

1. 检查各子系统进程

通过ps命令,检查节点与节点前置的进程是否存在

  • 包含:节点进程nodeXX,节点前置进程webase.front

检查方法如下,若无输出,则代表进程未启动,需要到webase-front/log中查看日志的错误信息,并根据错误提示或根据WeBASE-Front常见问题进行错误排查

检查节点进程

$ ps -ef | grep node

输出如下,此处部署了两个节点node0, node1

root     29977     1  1 17:24 pts/2    00:02:20 /root/fisco/webase/webase-deploy/nodes/127.0.0.1/node1/../fisco-bcos -c config.ini
root     29979     1  1 17:24 pts/2    00:02:23 /root/fisco/webase/webase-deploy/nodes/127.0.0.1/node0/../fisco-bcos -c config.ini

检查节点前置webase-front的进程

$ ps -ef | grep webase.front 

输出如下

root     31805     1  0 17:24 pts/2    00:01:30 /usr/local/jdk/bin/java -Djdk.tls.namedGroups=secp256k1 ... conf/:apps/*:lib/* com.webank.webase.front.Application

2. 检查进程端口

通过netstat命令,检查节点与节点前置的端口监听情况

检查方法如下,若无输出,则代表进程端口监听异常,需要到webase-front/log中查看日志的错误信息,并根据错误提示或根据WeBASE-Front常见问题进行错误排查

检查节点channel端口(默认为20200)是否已监听

$ netstat -anlp | grep 20200

输出如下

tcp        0      0 0.0.0.0:20200           0.0.0.0:*               LISTEN      29069/fisco-bcos

检查webase-front端口(默认为5002)是否已监听

$ netstat -anlp | grep 5002

输出如下

tcp6       0      0 :::5002                 :::*                    LISTEN      2909/java 

3. 检查服务日志

日志中若出现报错信息,可根据信息提示判断服务是否异常,也可以参考并根据错误提示或根据WeBASE-Front常见问题进行错误排查

  • 如果节点进程已启用且端口已监听,可跳过本章节
  • 如果节点前置异常,如检查不到进程或端口监听,则需要webase-front/log中查看日志的错误信息
  • 如果检查步骤出现检查不到进程或端口监听等异常,或者前置服务无法访问,可以按以下顺序逐步检查日志:
    • 检查webase-front/log中查看节点前置日志的错误信息,如果无错误,且日志最后出现application run success字样则代表运行成功
    • 检查nodes/127.0.0.1/nodeXXX/log中的节点日志

查看运行成功日志:webase-front运行成功后会打印日志main run success,可以通过搜索此关键字来确认服务正常运行。

如,检查webase-front日志,其他webase服务可进行类似操作

$ cd webase-front
$ grep -B 3 "main run success" log/WeBASE-Front.log

输出如下:

2020-12-09 15:47:25.355 [main] INFO  ScheduledAnnotationBeanPostProcessor() - No TaskScheduler/ScheduledExecutorService bean found for scheduled processing
2020-12-09 15:47:25.378 [main] INFO  TomcatEmbeddedServletContainer() - Tomcat started on port(s): 5002 (http)
2020-12-09 15:47:25.383 [main] INFO  Application() - Started Application in 6.983 seconds (JVM running for 7.768)
2020-12-09 15:47:25.383 [main] INFO  Application() - main run success...

启动失败或无法使用时,欢迎到WeBASE-Front提交Issue或到技术社区共同探讨

  • 提交Issue或讨论问题时,可以在issue中配上自己的环境配置,操作步骤,错误现象,错误日志等信息,方便社区用户快速定位问题

访问

访问 http://{deployIP}:{frontPort}/WeBASE-Front,示例:

```
http://localhost:5002/WeBASE-Front 
```

:若服务启动后无异常,但仍然无法访问,可以检查服务器的网络安全策略:

  • 开放节点前置端口:如果希望通过浏览器(Chrome Safari或Firefox)直接访问webase-front节点前置的页面,则需要开放节点前置端口frontPort(默认5002)

_images/front-overview.png

一键部署

​ 一键部署可以在 同机 快速搭建WeBASE管理台环境,方便用户快速体验WeBASE管理平台。

​ 一键部署会搭建:节点(FISCO-BCOS 3.0+)、管理平台(WeBASE-Web)、节点管理子系统(WeBASE-Node-Manager)、节点前置子系统(WeBASE-Front)、签名服务(WeBASE-Sign)。其中,节点的搭建是可选的,可以通过配置来选择使用已有链或者搭建新链。一键部署架构如下:

前提条件

环境 版本
Java JDK 8 至JDK 14
MySQL MySQL-5.6及以上
Python Python3.6及以上
PyMySQL

检查环境

平台要求

推荐使用CentOS 7.2+, Ubuntu 16.04及以上版本, 一键部署脚本将自动安装openssl, curl, wget, git, nginx, dos2unix相关依赖项。

其余系统可能导致安装依赖失败,可自行安装openssl, curl, wget, git, nginx, dos2unix依赖项后重试

检查Java

推荐JDK8-JDK13版本,使用OracleJDK安装指引

java -version

注意:不要用sudo执行安装脚本

检查mysql

MySQL-5.6或以上版本:

mysql --version
检查Python

使用Python3.6或以上版本:

python --version
# python3时
python3 --version

如已安装python3,也可通过python3 --version查看,在运行脚本时,使用python3命令即可

PyMySQL部署(Python3.6+)

Python3.6及以上版本,需安装PyMySQL依赖包

  • CentOS

    sudo yum -y install python36-pip
    sudo pip3 install PyMySQL
    
  • Ubuntu

    sudo apt-get install -y python3-pip
    sudo pip3 install PyMySQL
    

CentOS或Ubuntu不支持pip命令的话,可以使用以下方式:

git clone https://github.com/PyMySQL/PyMySQL
cd PyMySQL/
python3 setup.py install

检查服务器网络策略

网络策略检查:

  • 开放WeBASE管理平台端口:检查webase-web管理平台页面的端口webPort(默认为5000)在服务器的网络安全组中是否设置为开放。如,云服务厂商如腾讯云,查看安全组设置,为webase-web开放5000端口。若端口未开放,将导致浏览器无法访问WeBASE服务页面
  • 开放节点前置端口:如果希望通过浏览器直接访问webase-front节点前置的页面,则需要开放节点前置端口frontPort(默认5002);由于节点前置直连节点,不建议对公网开放节点前置端口,建议按需开放

拉取部署脚本

获取部署安装包:

wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/lab-rc1/webase-deploy.zip

解压安装包:

unzip webase-deploy.zip

进入目录:

cd webase-deploy

修改配置

① mysql数据库需提前安装,已安装直接配置即可,还未安装请参看数据库部署

② 修改配置文件(vi common.properties);

③ 一键部署支持使用已有链或者搭建新链。通过参数if.exist.fisco配置是否使用已有链,以下配置二选一即可:

  • 当配置yes时,需配置已有链的sdk证书路径sdk.dir。路径下存放sdk证书,包含以下两种之一:

    非国密:ca.crtsdk.crtsdk.key

    国密:sm_ca.crtsm_sdk.crtsm_sdk.keysm_ensdk.crtsm_ensdk.key

  • 当配置no时,需配置节点fisco版本和节点安装个数,未修改时搭建的新链默认两个群组

​ 如果不使用一键部署搭建新链,可以参考FISCO BCOS官方文档搭建 FISCO BCOS部署流程

④ 服务端口不能小于1024

[common]
# WeBASE子系统的最新版本(lab或以上版本)
webase.web.version=lab-rc1
webase.mgr.version=lab-rc1
webase.sign.version=lab-rc1
webase.front.version=lab-rc1

# 节点管理子系统mysql数据库配置
mysql.ip=localhost
mysql.port=3306
mysql.user=dbUsername
mysql.password=dbPassword
mysql.database=webasenodemanager

# 签名服务子系统mysql数据库配置
sign.mysql.ip=localhost
sign.mysql.port=3306
sign.mysql.user=dbUsername
sign.mysql.password=dbPassword
sign.mysql.database=webasesign

# 节点前置子系统h2数据库名
front.h2.name=webasefront

# WeBASE管理平台服务端口
web.port=5000
# 节点管理子系统服务端口
mgr.port=5001
# 节点前置子系统端口
front.port=5002
# 签名服务子系统端口
sign.port=5004

# SDK连接加密类型 (0: ECDSA SSL, 1: 国密SSL)
encrypt.type=0

# 是否使用已有的链(yes/no)
if.exist.fisco=no

# 搭建新链时需配置[if.exist.fisco=no]
# 节点监听Ip
node.listenIp=127.0.0.1
# 节点p2p端口
node.p2pPort=30300
# 节点rpc端口
node.rpcPort=20200
# FISCO-BCOS版本(v3.0.0或以上版本)
fisco.version=v3.0.0-rc1
# 搭建节点个数(默认两个)
node.counts=nodeCounts

# 使用已有链时需配置[if.exist.fisco=yes]
# 已有链节点rpc端口列表
node.rpcPeers=['127.0.0.1:20200','127.0.0.1:20201']
# sdk目录,需包含已有链SSL所需的证书(如: ca.crt,sdk.crt,sdk.key)
sdk.dir=/data/app/nodes/127.0.0.1/sdk

部署

  • 执行installAll命令,部署服务将自动部署FISCO BCOS节点,并部署 WeBASE 中间件服务,包括签名服务(sign)、节点前置(front)、节点管理服务(node-mgr)、节点管理前端(web)

备注:

  • 部署脚本会拉取相关安装包进行部署,需保持网络畅通
  • 首次部署需要下载编译包和初始化数据库,重复部署时可以根据提示不重复操作
  • 部署过程中出现报错时,可根据错误提示进行操作,或根据本文档中的常见问题进行排查
  • 不要用sudo执行脚本,例如sudo python3 deploy.py installAll(sudo会导致无法获取当前用户的环境变量如JAVA_HOME)
# 部署并启动所有服务
python3 deploy.py installAll

部署完成后可以看到deploy has completed的日志:

$ python3 deploy.py installAll
...
============================================================
              _    _     ______  ___  _____ _____ 
             | |  | |    | ___ \/ _ \/  ___|  ___|
             | |  | | ___| |_/ / /_\ \ `--.| |__  
             | |/\| |/ _ | ___ |  _  |`--. |  __| 
             \  /\  |  __| |_/ | | | /\__/ | |___ 
              \/  \/ \___\____/\_| |_\____/\____/  
...
...
============================================================
==============      deploy  has completed     ==============
============================================================
==============    webase-web version  v...        ========
==============    webase-node-mgr version  v...   ========
==============    webase-sign version  v...       ========
==============    webase-front version  v...      ========
============================================================
  • 服务部署后,需要对各服务进行启停操作,可以使用以下命令:
# 一键部署
部署并启动所有服务        python3 deploy.py installAll
停止一键部署的所有服务    python3 deploy.py stopAll
启动一键部署的所有服务    python3 deploy.py startAll
# 各子服务启停
启动FISCO-BCOS节点:      python3 deploy.py startNode
停止FISCO-BCOS节点:      python3 deploy.py stopNode
启动WeBASE-Web:          python3 deploy.py startWeb
停止WeBASE-Web:          python3 deploy.py stopWeb
启动WeBASE-Node-Manager: python3 deploy.py startManager
停止WeBASE-Node-Manager: python3 deploy.py stopManager
启动WeBASE-Sign:        python3 deploy.py startSign
停止WeBASE-Sign:        python3 deploy.py stopSign
启动WeBASE-Front:        python3 deploy.py startFront
停止WeBASE-Front:        python3 deploy.py stopFront

状态检查

成功部署后,可以根据以下步骤确认各个子服务是否启动成功

检查各子系统进程

通过ps命令,检查各子系统的进程是否存在

  • 包含:节点进程nodeXX,节点前置进程webase.front,节点管理服务进程webase.node.mgr,节点管理平台webase-webnginx进程,以及签名服务进程webase.sign

检查方法如下,若无输出,则代表进程未启动,需要到该子系统的日志中检查日志错误信息,并根据错误提示或本文档的常见问题进行排查

  • 检查节点进程,此处部署了两个节点node0, node1
$ ps -ef | grep node

输出如下

root     29977     1  1 17:24 pts/2    00:02:20 /root/fisco/webase/webase-deploy/nodes/127.0.0.1/node1/../fisco-bcos -c config.ini
root     29979     1  1 17:24 pts/2    00:02:23 /root/fisco/webase/webase-deploy/nodes/127.0.0.1/node0/../fisco-bcos -c config.ini
  • 检查节点前置webase-front的进程
$ ps -ef | grep webase.front 

输出如下

root     31805     1  0 17:24 pts/2    00:01:30 /usr/local/jdk/bin/java -Djdk.tls.namedGroups=secp256k1 ... conf/:apps/*:lib/* com.webank.webase.front.Application
  • 检查节点管理服务webase-node-manager的进程
$ ps -ef  | grep webase.node.mgr

输出如下

root      4696     1  0 17:26 pts/2    00:00:40 /usr/local/jdk/bin/java -Djdk.tls.namedGroups=secp256k1 ... conf/:apps/*:lib/* com.webank.webase.node.mgr.Application
  • 检查webase-web对应的nginx进程
$ ps -ef | grep nginx       

输出如下

root      5141     1  0 Dec08 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /root/fisco/webase/webase-deploy/comm/nginx.conf
  • 检查签名服务webase-sign的进程
$ ps -ef  | grep webase.sign 

输出如下

root     30718     1  0 17:24 pts/2    00:00:19 /usr/local/jdk/bin/java ... conf/:apps/*:lib/* com.webank.webase.sign.Application

检查进程端口

通过netstat命令,检查各子系统进程的端口监听情况。

检查方法如下,若无输出,则代表进程端口监听异常,需要到该子系统的日志中检查日志错误信息,并根据错误提示或本文档的常见问题进行排查

  • 检查节点channel端口(默认为20200)是否已监听
$ netstat -anlp | grep 20200

输出如下

tcp        0      0 0.0.0.0:20200           0.0.0.0:*               LISTEN      29069/fisco-bcos
  • 检查webase-front端口(默认为5002)是否已监听
$ netstat -anlp | grep 5002

输出如下

tcp6       0      0 :::5002                 :::*                    LISTEN      2909/java 
  • 检查webase-node-mgr端口(默认为5001)是否已监听
$ netstat -anlp | grep 5001    

输出如下

tcp6       0      0 :::5001                 :::*                    LISTEN      14049/java 
  • 检查webase-web端口(默认为5000)在nginx是否已监听
$ netstat -anlp | grep 5000

输出如下

tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN      3498/nginx: master  
  • 检查webase-sign端口(默认为5004)是否已监听
$ netstat -anlp | grep 5004

输出如下

tcp6       0      0 :::5004                 :::*                    LISTEN      25271/java 

检查服务日志

各子服务的日志路径如下:
|-- webase-deploy # 一键部署目录
|--|-- log # 部署日志目录
|--|-- webase-web # 管理平台目录
|--|--|-- log # 管理平台日志目录
|--|-- webase-node-mgr # 节点管理服务目录
|--|--|-- log # 节点管理服务日志目录
|--|-- webase-sign # 签名服务目录
|--|--|-- log # 签名服务日志目录
|--|-- webase-front # 节点前置服务目录
|--|--|-- log # 节点前置服务日志目录
|--|-- nodes # 一件部署搭链节点目录
|--|--|-- 127.0.0.1
|--|--|--|-- node0 # 具体节点目录
|--|--|--|--|-- log # 节点日志目录

备注:当前节点日志路径为一键部署搭链的路径,使用已有链请在相关路径查看日志

日志目录中包含{XXX}.log全量日志文件和{XXX}-error.log错误日志文件

  • 通过日志定位错误问题时,可以结合.log全量日志和-error.log错误日志两种日志信息进行排查。,如查询WeBASE-Front日志,则打开WeBASE-Front-error.log可以快速找到错误信息,根据错误查看WeBASE-Front.log的相关内容,可以看到错误日志前后的普通日志信息
检查服务日志有无错误信息
  • 如果各个子服务的进程已启用且端口已监听,可直接访问下一章节访问WeBASE
  • 如果上述检查步骤出现异常,如检查不到进程或端口监听,则需要按日志路径进入异常子服务的日志目录,检查该服务的日志
  • 如果检查步骤均无异常,但服务仍无法访问,可以分别检查部署日志deployLog,节点前置日志frontLog, 节点管理服务日志nodeMgrLog进行排查:
    • 检查webase-deploy/log中的部署日志,是否在部署时出现错误
    • 检查webase-deploy/webase-front/log中的节点前置日志,如果最后出现application run success字样则代表运行成功
    • 检查webase-deploy/webase-node-mgr/log或webase-deploy/webase-sign/log中的日志
    • 检查webase-deploy/nodes/127.0.0.1/nodeXXX/log中的节点日志
搜索日志

通过查看日志可以检查服务的运行状态,我们可以进入各子服务的日志路径,通过grep检查日志文件,以此判断服务是否正常运行

  • 查看运行成功日志:WeBASE子服务运行成功后均会打印日志main run success,可以通过搜索此关键字来确认服务正常运行。

如,检查webase-front日志,其他WeBASE服务可进行类似操作

$ cd webase-front
$ grep -B 3 "main run success" log/WeBASE-Front.log

输出如下:

2020-12-09 15:47:25.355 [main] INFO  ScheduledAnnotationBeanPostProcessor() - No TaskScheduler/ScheduledExecutorService bean found for scheduled processing
2020-12-09 15:47:25.378 [main] INFO  TomcatEmbeddedServletContainer() - Tomcat started on port(s): 5002 (http)
2020-12-09 15:47:25.383 [main] INFO  Application() - Started Application in 6.983 seconds (JVM running for 7.768)
2020-12-09 15:47:25.383 [main] INFO  Application() - main run success...
  • 查看报错日志:出现异常时,可以搜索关键字ERROR进行检查

如,检查webase-front错误日志,其他WeBASE服务可进行类似操作

$ cd webase-front
$ grep "ERROR" log/WeBASE-Front.log

输出如下

2020-12-09 09:10:42.138 [http-nio-5002-exec-1] ERROR ExceptionsHandler() - catch frontException:  no active connection available network exception requset send failed! please check the log file content for reasons.
2020-12-09 09:10:42.145 [http-nio-5002-exec-4] ERROR Web3ApiService() - getBlockNumber fail.

如果出现错误日志,根据错误提示或本文档的常见问题进行排查

启动失败或无法使用时,欢迎到WeBASE提交Issue或到技术社区共同探讨。

  • 提交Issue或讨论问题时,可以在issue中配上自己的环境配置,操作步骤,错误现象,错误日志等信息,方便社区用户快速定位问题

访问

WeBASE管理平台:

  • 一键部署完成后,打开浏览器(Chrome Safari或Firefox)访问
http://{deployIP}:{webPort}
示例:http://localhost:5000

备注:

  • 部署服务器IP和管理平台服务端口需对应修改,网络策略需开通
    • 使用云服务厂商的服务器时,需要开通网络安全组的对应端口。如开放webase使用的5000端口
  • WeBASE管理平台使用说明请查看使用手册(获取WeBASE管理平台默认账号和密码,并初始化系统配置)
    • 默认账号为admin,默认密码为Abcd1234。首次登陆要求重置密码
    • 添加节点前置WeBASE-Front到WeBASE管理平台;一键部署时,节点前置与节点管理服务默认是同机部署,添加前置则填写IP为127.0.0.1,默认端口为5002。参考上文中common.properties的配置项front.port={frontPort}
  • 检查节点前置是否启动,可以通过访问http://{frontIp}:{frontPort}/WeBASE-Front(默认端口5002);访问前,确保服务端已对本地机器开放端口,如开放front的5002端口。(不建议节点前置的端口对公网开放访问权限,应对部分机器IP按需开放)

附录

1. Java环境部署

CentOS环境安装Java

注意:CentOS下OpenJDK无法正常工作,需要安装OracleJDK下载链接

# 创建新的文件夹,安装Java 8或以上的版本,推荐JDK8-JDK13版本,将下载的jdk放在software目录
# 从Oracle官网(https://www.oracle.com/java/technologies/downloads/#java8)选择Java 8或以上的版本下载,例如下载jdk-8u301-linux-x64.tar.gz
$ mkdir /software

# 解压jdk
$ tar -zxvf jdk-8u301-linux-x64.tar.gz

#修改解压后文件的文件名
$mv jdk1.8.0_301 jdk-8u301

# 配置Java环境,编辑/etc/profile文件
$ vim /etc/profile

# 打开以后将下面三句输入到文件里面并保存退出
export JAVA_HOME=/software/jdk-8u301  #这是一个文件目录,非文件
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# 生效profile
$ source /etc/profile

# 查询Java版本,出现的版本是自己下载的版本,则安装成功。
java -version
Ubuntu环境安装Java

  # 安装默认Java版本(Java 8或以上)
  sudo apt install -y default-jdk
  # 查询Java版本
  java -version

2. 数据库部署

① CentOS安装MariaDB

此处以CentOS 7(x86_64)安装MariaDB 10.2为例。MariaDB数据库是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。MariaDB完全兼容 MySQL,包括API和命令行。MariaDB 10.2版本对应Mysql 5.7。其他安装方式请参考MySQL官网

  • CentOS 7 默认MariaDB为5.5版本,安装10.2版本需要按下文进行10.2版本的配置。
  • 若使用CentOS 8则直接使用sudo yum install -y mariadb*即可安装MariaDB 10.3,并跳到下文的 启停 章节即可。

使用vivim创建新文件/etc/yum.repos.d/mariadb.repo,并写入下文的文件内容(参考MariaDB中科大镜像源修改进行配置)

  • 创建repo文件
sudo vi /etc/yum.repos.d/mariadb.repo
  • 文件内容,此处使用的是中科大镜像源
# MariaDB 10.2 CentOS repository list - created 2021-07-12 07:37 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
  • 更新yum源缓存数据
yum clean all
yum makecache all
  • 安装MariaDB 10.2
  • 如果已存在使用sudo yum install -y mariadb*命令安装的MariaDB,其版本默认为5.5版本,对应Mysql版本为5.5。新版本MariaDB无法兼容升级,需要先卸载旧版本的MariaDB,卸载前需要备份数据库内容,卸载命令可参考yum remove mariadb
sudo yum install MariaDB-server MariaDB-client -y

若安装时遇到错误“Failed to connect to 2001:da8:d800:95::110: Network is unreachable”,将源地址中的 mirrors.ustc.edu.cn 替换为 ipv4.mirrors.ustc.edu.cn 以强制使用 IPv4:

sudo sed -i 's#//mirrors.ustc.edu.cn#//ipv4.mirrors.ustc.edu.cn#g' /etc/yum.repos.d/mariadb

详情参考MariaDB官网安装

  • 启停
启动:sudo systemctl start mariadb.service
停止:sudo systemctl stop  mariadb.service
  • 设置开机启动
sudo systemctl enable mariadb.service
  • 初始化
执行以下命令:
sudo mysql_secure_installation
以下根据提示输入:
Enter current password for root (enter for none):<–初次运行直接回车
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码
Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车
Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
② 授权访问和添加用户
  • 使用root用户登录,密码为初始化设置的密码
mysql -uroot -p -h localhost -P 3306
  • 授权root用户远程访问
mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql > flush PRIVILEGES;
  • 创建test用户并授权本地访问
mysql > GRANT ALL PRIVILEGES ON *.* TO 'test'@localhost IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql > flush PRIVILEGES;

安全温馨提示:

  • 例子中给出的数据库密码(123456)仅为样例,强烈建议设置成复杂密码
  • 例子中root用户的远程授权设置会使数据库在所有网络上都可以访问,请按具体的网络拓扑和权限控制情况,设置网络和权限帐号
③ 测试连接和创建数据库
  • 登录数据库
mysql -utest -p123456 -h localhost -P 3306
  • 创建数据库
mysql > create database webasenodemanager;
④ Ubuntu安装mysql数据库
  • 以root用户执行命令
apt-get install software-properties-common
sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu trusty universe'
sudo apt-get update
sudo apt install mysql-server-5.6
sudo apt install mysql-client-5.6
  • 执行mysql –version命令,若显示如下则安装成功
mysql  Ver 14.14 Distrib 5.6.16, for debian-linux-gnu (x86_64) using  EditLine wrapper

3. Python部署

python版本要求使用python3.x, 推荐使用python3.6及以上版本

  • CentOS

    sudo yum install -y python36
    sudo yum install -y python36-pip
    
  • Ubuntu

    // 添加仓库,回车继续
    sudo add-apt-repository ppa:deadsnakes/ppa
    // 安装python 3.6
    sudo apt-get install -y python3.6
    sudo apt-get install -y python3-pip
    

常见问题

1. Python命令出错

  • SyntaxError报错
  File "deploy.py", line 62
    print helpMsg
                ^
SyntaxError: Missing parentheses in call to "print". Did you mean print(helpMsg)?
  • 找不到fallback关键字
File "/home/ubuntu/webase-deploy/comm/utils.py", line 127, in getCommProperties
    value = cf.get('common', paramsKey,fallback=None)
TypeError: get() got an unexpected keyword argument 'fallback'

答:检查Python版本,推荐使用python3.6及以上版本

2. 使用Python3时找不到pymysql

Traceback (most recent call last):
...
ImportError: No module named 'pymysql'

答:需要安装PyMySQL,安装请参看 pymysql

3. 部署时某个组件失败,重新部署提示端口被占用问题

答:因为有个别组件是启动成功的,需先执行“python deploy.py stopAll”将其停止,再执行“python deploy.py installAll”部署全部。

4. 管理平台启动时Nginx报错

...
==============      WeBASE-Web      start...  ==============
Traceback (most recent call last):
...
Exception: execute cmd  error ,cmd : sudo /usr/local/nginx/sbin/nginx -c /data/app/webase-deploy/comm/nginx.conf, status is 256 ,output is nginx: [emerg] open() "/etc/nginx/mime.types" failed (2: No such file or directory) in /data/app/webase-deploy/comm/nginx.conf:13

答:缺少/etc/nginx/mime.types文件,建议重装nginx。

5. 部署时数据库访问报错

...
checking database connection
Traceback (most recent call last):
  File "/data/temp/webase-deploy/comm/mysql.py", line 21, in dbConnect
    conn = mdb.connect(host=mysql_ip, port=mysql_port, user=mysql_user, passwd=mysql_password, charset='utf8')
  File "/usr/lib64/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 193, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

答:确认数据库用户名和密码

6. 节点sdk目录不存在

...
======= FISCO-BCOS sdk dir:/data/app/nodes/127.0.0.1/sdk is not exist. please check! =======

答:确认节点安装目录下有没有sdk目录(企业部署工具搭建的链可能没有),如果没有,需手动创建”mkdir sdk”,并将节点sdk证书(ca.crt、sdk.key、sdk.crt)复制到该sdk目录,再重新部署。如果使用国密SSL,则在sdk目录里存放国密sdk证书(sm_ca.crt、sm_sdk.crt、sm_sdk.key、sm_ensdk.crt、sm_ensdk.key)。

7. 前置启动报错“nested exception is javax.net.ssl.SSLException”

...
nested exception is javax.net.ssl.SSLException: Failed to initialize the client-side SSLContext: Input stream not contain valid certificates.

答:CentOS的yum仓库的OpenJDK缺少JCE(Java Cryptography Extension),导致Web3SDK/Java-SDK无法正常连接区块链节点,因此在使用CentOS操作系统时,推荐使用OracleJDK

8.前置启动报错“Processing bcos message timeout”

...
[main] ERROR SpringApplication() - Application startup failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'contractController': Unsatisfied dependency expressed through field 'contractService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'contractService': Unsatisfied dependency expressed through field 'web3jMap'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'web3j' defined in class path resource [com/webank/webase/front/config/Web3Config.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.HashMap]: Factory method 'web3j' threw exception; nested exception is java.io.IOException: Processing bcos message timeout
...

答:一些OpenJDK版本缺少相关包,导致节点连接异常。推荐使用OracleJDK

9. 服务进程起来了,服务不正常

...
======= WeBASE-Node-Manager  starting . Please check through the log file (default path:./webase-node-mgr/log/). =======

答:查看日志,确认问题原因。确认后修改重启,如果重启提示服务进程在运行,先执行“python deploy.py stopAll”将其停止,再执行“python deploy.py startAll”重启。

10. WeBASE-Web登录页面的验证码加载不出来

答:检查WeBASE-Node-Manager后台服务是否已启动成功。若启动成功,检查后台日志:

  • 进入 webase-node-mgr 目录下,执行 bash status.sh 检查服务是否启动,如果服务没有启动,运行 bash start.sh 启动服务;

  • 如果服务已经启动,按照如下修改日志级别

    • webase-node-mgr/conf/application.yml
    #log config
    logging:
      level:
        com.webank.webase.node.mgr: debug
    
    • webase-node-mgr/conf/log/log4j2.xml
    <Loggers>
    <Root level="debug">
      <AppenderRef ref="asyncInfo"/>
      <AppenderRef ref="asyncErrorLog"/>
    </Root>
    </Loggers>
    
  • 修改日志level后,重启服务 bash stop.sh && bash start.sh

  • 重启服务后,检查日志文件 log/WeBASE-Node-Manager.log

    • 检查是否有异常信息。如果有异常信息,根据具体的异常信息检查环境配置,或者通过搜索引擎进行排查。

11. WeBASE 国内镜像与CDN加速服务

答:WeBASE CDN 加速服务提供 WeBASE 各子系统安装包的下载服务,可参考国内镜像和CDN加速攻略

欢迎给WeBASE的文档提交 Pull Request 补充更多的 Q&A

企业部署

1、企业部署

WeBASE四个服务的部署架构如下图:节点前置需要和区块链节点部署在同一台机器,签名服务可以和节点前置分开部署,也可以同机部署;节点管理和WeBASE管理平台可以同机部署,也可以分开部署。在企业生产环境,为了容灾往往会在多个节点上部署节点前置,也会部署多个签名服务、节点管理和WeBASE管理台。

具体部署可以参考《WeBASE管理平台使用说明》中手动搭建部分。

2、使用手册

WeBASE管理平台的使用请查看使用手册

国内镜像和CDN加速攻略

本节为访问GitHub较慢的用户提供国内源码镜像与安装包下载地址,以及WeBASE文档加速访问介绍。

WeBASE及子系统源码及安装包

源码同步

WeBASE当前仓库源码位于https://github.com/WebankFinTech/WeBASE,每个新的版本发布会将代码合入master分支。

为了方便国内用户,我们同样在gitee上提供了镜像仓库https://giteee.com/Webank/WeBASE,每次新版本发布后,镜像仓库会同步GitHub上官方仓库的更新,如果从GitHub下载失败,请尝试使用Gitee镜像仓库。

WeBASE各子系统的Github代码仓库则是https://github.com/WebankFinTech/ + WeBASE-XXX,对应的gitee仓库则是https://gitee.com/WeBank/ + WeBASE-XXX

如WeBASE-Front的Github代码仓库为https://github.com/WebankFinTech/WeBASE-Front,Gitee代码仓库为https://gitee.com/WeBank/WeBASE-Front

一键部署与安装包

WeBASE每个新版本发布后,会在WeBASELargefilesGitHub的Releases中提供对应的WeBASE一键部署工具和对应安装包。

其中WeBASELargefiles提供webase-deploy一键部署工具(即WeBASE源码中/deploy文件夹),以及webase-front.zip, webase-node-mgr.zip, webase-sign.zip, webase-web.zip子系统的安装包。

同时提供以下国内镜像,可加速下载安装包

https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/{release_version}/webase-{subsystem}.zip

其中{release_version}v1.x.x格式,{subsystem}则是子系统名字。

支持下载sign, front, node-mgr, web子系统的zip安装包(全小写),暂不支持webase-transaction的安装包下载。

注:可视化部署中通过国内镜像手动下载docker镜像,文件名则是docker-fisco-webase.tar或国密版docker-fisco-webase-gm.tar

WeBASE文档镜像

WeBASE文档使用readthedocs管理,全部开源于https://webasedoc.readthedocs.io/zh_CN/lab/index.html,同样提供国内镜像文档https://fintech.webank.com/developer/docs/webase/index.html由于网站资源更新周期安排,国内镜像文档更新会比readthedocs有所延迟

每个版本发布会为上个版本的文档打Tag,新版本的文档会合入主干分支,文档由于会持续改进,所以是下个版本发布才打上个版本的tag。readthedocs文档支持下载PDF格式,方便用户使用。

举例:使用国内镜像进行一键部署

本节WeBASE 1.5.0为例进行一键部署,一键部署会默认使用国内镜像下载安装包,下面仅演示关键步骤,具体操作可参考WeBASE一键部署

下载WeBASE一键部署工具

# 使用CDN下载
wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.5.0/webase-deploy.zip

# 使用github下载
wget https://github.com/WeBankBlockchain/WeBASELargeFiles/releases/download/v1.5.0/webase-deploy.zip

单独下载WeBASE子系统的安装包

WeBASE一键部署(webase-deploy)会自动下载子系统安装包,用户也可以手动下载安装包或编译源码得到安装包,并复制到webase-deploy目录下。

如需手动下载某一子系统的安装包,可以直接通过wget或者curl -O命令直接获取安装包。比如:

  • 获取WeBASE-Node-Manager v1.4.1的安装包webase-node-mgr.zip
wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.4.1/webase-node-mgr.zip
// 
curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.4.1/webase-node-mgr.zip

单独下载WeBASE的solc JS文件

WeBASE提供FISCO BCOS中使用的v0.4.25, v0.5.2, v0.6.10三个版本的solc JS编译文件,对应的国密版本则在版本号后加上-gm后缀

如需手动下载某一版本的的安装包,可以直接通过wget或者curl -O命令直接获取安装包。比如:

  • 获取v0.4.25的国密版本solc JS编译文件
wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/download/solidity/wasm/v0.4.25-gm.js
// 
curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/download/solidity/wasm/v0.4.25-gm.js

若通过源码编译获取安装包并用于一键部署工具,需要进行文件夹的重命名,参考下一章节。

举例:使用国内源码镜像编译WeBASE-Front

本节以WeBASE-Front子系统为例,从gitee镜像下载源码并编译,编译后的配置方法,请参考各子系统的安装部署文档。

下载源码

git clone https://gitee.com/WeBank/WeBASE-Front.git

编译源码

依据WeBASE-Front节点前置安装文档的环境要求进行配置,如jdk(oracle jdk8及以上),配置gradle(4.10或以上)或直接使用gradlew脚本进行编译

// java版本
java -version
// 进入源码目录
cd WeBASE-Front
// 已有gradle时,使用gradle
gradle build -x test
// 不配置gradle,直接使用gradlew
chmod +x ./gradlew && ./gradlew build -x test

修改配置

编译完成后,将在当前目录得到dist文件夹

重命名dist包中的conf_templateconf后,并将节点的sdk证书复制到conf目录后,即可启动。

修改配置的具体方法,可参考WeBASE-Front部署

cd dist
mv conf_template conf
// 此处需要复制ca.crt, node.crt, node.key
cp -rf /fisco/nodes/127.0.0.1/sdk/* ./conf
bash start.sh

WeBASE管理平台使用手册

概览

基本描述

WeBASE管理平台是由四个WeBASE子系统组成的一套管理FISCO-BCOS联盟链的工具集。

主要功能

  1. 区块链数据概览
  2. 节点管理
  3. 合约管理
  4. 私钥管理
  5. 系统管理
  6. 系统监控
  7. 交易审计
  8. 账号管理

_images/overview_2.png

部署架构

这套管理工具主要由:节点前置,签名服务,节点管理,WeBASE管理平台四个WeBASE子系统构成。WeBASE四个服务的部署架构如下图:节点前置需要和区块链节点部署在同一台机器;节点管理和WeBASE管理平台可以同机部署,也可以分开部署。

使用前提

群组搭建

区块链浏览器展示的数据是从区块链上同步下来的。为了同步数据需要初始化配置(添加群组信息和节点信息),故在同步数据展示前需要用户先搭建好区块链群组。FISCO-BCOS 2.0提供了多种便捷的群组搭建方式。

  1. 如果是开发者进行开发调试,建议使用build_chain
  2. 如果是开发企业级应用,建议使用企业部署工具FISCO-BCOS generator

两者的主要区别在于build_chain为了使体验更好,搭建速度更快,辅助生成了群组内各个节点的私钥;但企业部署工具出于安全的考虑不辅助生成私钥,需要用户自己生成并设置。

WeBASE管理平台搭建

WeBASE管理平台分为四个部分:节点前置,签名服务,节点管理,WeBASE管理台。

当前版本我们提供了三种搭建方式:一键搭建、纯手动搭建各子系统、可视化部署

1、一键搭建

适合同机部署,快速体验的情况使用。具体搭建流程参见安装文档

2、手动搭建
2.1、签名服务搭建

签名服务使用Spring Boot的JAVA后台服务,具体搭建流程参见《签名服务安装说明》

2.2、节点前置搭建

节点前置使用Spring Boot的JAVA后台服务,具体搭建流程参见《节点前置安装说明》

2.3、节点管理搭建

节点管理使用Spring Boot的JAVA后台服务,具体搭建流程参见《节点管理安装说明》

2.4、WeBASE管理平台

WeBASE管理台使用框架vue-cli,具体搭建流程参见《WeBASE管理平台安装说明》

系统初始化配置

服务搭建成功后,可使用网页浏览器访问nginx配置的WeBASE管理台IP和端口(例如127.0.0.1:5000),进入到管理平台页面。

管理平台默认用户为admin,默认密码为Abcd1234(第一次登陆成功后会要求重置密码,请按照密码标准设置一个更加安全的密码)。

添加节点前置

未初始化节点前置的管理平台,会引导去节点管理页面添加节点前置。

  • 节点前置服务需要填写前置的IP与端口(默认为127.0.0.15002),机构名则根据实际自定义填写

_images/node_manager_add_front.png

前置添加完成后,管理平台就会开始拉取群组信息和群组的区块信息。此时数据概览页面应该就有数据了。为了解析和审计区块数据,需要把相关的合约和用户导入到管理平台。具体看下面两个小节。

合约管理

1、添加合约

管理平台提供两种添加合约的方式,一个是新建一个合约,一个是导入已有合约。同时合约编辑器还提供新建目录。用目录的形式管理合约,主要是为了解决同名合约引用的问题。合约添加完成后,需要编译保存。

_images/contract_add_2.png

2、部署合约

合约编译时会自动保存合约内容,编译成功后可以执行合约部署。

_images/contract_compile_deploy_2.png

3、合约调用

在合约部署成功后,可以在合约IDE页面的右上角点击发交易,向合约发送交易进行合约调用。

_images/contract_send_transaction.png

交易发送成功后,将返回交易回执。可以在数据概览-交易列表-更多中根据transactionHash搜索交易,通过交易解析和Event解析查看可视化的交易回执信息。具体操作方法参考下文的区块链数据概览章节中的交易解析与Event解析。

_images/transaction_output.png

私钥管理

私钥管理提供了新建私钥用户和导入公钥用户两种用户导入方式。第一种方式主要用于新建用户(私钥托管在签名服务中),在管理平台的合约管理中部署和调用合约。第二种方式主要用于把交易和用户关联起来。

_images/key_manager_tx_audit.png

各模块的详细介绍

本小节概要介绍管理平台的各个模块,方便大家对WeBASE管理平台套件有一个整体的认识。这套工具集主要提供的管理功能有:

区块链数据概览

数据概览页面,展示了区块链的核心数据指标:节点个数,区块数量,交易数量,通过管理台部署的合约数量。关键监控指标:历史15天的交易量。

  • 节点信息列表:展示了节点的ID,节点块高,节点view和运行状态;
  • 区块信息列表:展示了最近5个块的概览信息,点击更多可以查看更多历史区块;
  • 交易信息列表:展示了最近5个交易的概览信息,点击更多可以查看更多历史交易;

_images/overview_2.png

其中右下角的交易信息列表点击可跳入具体一条交易中查看交易详细信息:交易详细信息还包含了

  • 交易解析:可以将交易返回的交易回执数据进行解析并可视化;
  • Event解析:可以将交易返回的Event数据进行解析并可视化;

未解析的raw数据如下图所示:

_images/transaction_analysis_raw.png

进行交易解析后如下图所示:

_images/transaction_analysis.png

同样的,Event数据解析后可以看到:

_images/transaction_event.png

节点管理

节点管理主要提供了前置列表、节点列表、修改节点共识状态的功能。

用户可以通过新增节点前置,把新的节点前置添加到前置列表。系统会默认拉取这些前置所在的群组和各个群组的节点信息。在节点列表中,用户可以修改节点的共识状态:共识节点、观察节点、游离节点。其中修改为游离节点相当于将节点移出群组,停止节点前务必先将节点设置为游离节点,否则将触发节点异常。

前置列表与节点管理:

  • 前置列表:可以查看节点前置状态,导出前置的SDK证书zip包
  • 节点管理:显示所有的共识/观察节点(无论运行或停止),以及正在运行的游离节点

_images/front_node_manage.png

修改节点共识状态:

_images/node_manager_edit.png

合约管理

合约管理提供了一个图形化的合约IDE环境、已部署的合约列表、合约仓库等功能。

图形化合约IDE提供了一整套的合约管理工具:新建合约,保存合约,编译合约,部署合约,调用合约接口。其中,新建合约可以通过编辑键入合约内容,也可以上传合约文件;编译合约后才可以部署合约;部署合约成功后,可以通过发送交易调用合约接口。具体操作步骤可以参考上一章节中系统初始化配置介绍。

合约IDE:

_images/contract_ide.png

合约列表:包含WeBASE已登记合约与链上已部署的合约

已登记合约:包含通过IDE部署的合约、导入ABI的合约

_images/contract_list.png

链上全量合约:包含通过其他平台部署到链上的合约与WeBASE已登记的合约(链上合约只有合约地址),可通过导入按钮,填入合约ABI导入到本地

_images/contract_list_all.png

ABI编码:支持对ABI的方法与入参进行编码

_images/abi_analysis.png

私钥管理

私钥管理包含新建私钥用户和新建公钥用户两个功能。在合约管理界面,可以看到合约部署和交易调用功能。这里的私钥管理可以新建私钥用户,私钥将托管在签名服务中,然后通过签名服务对合约部署和合约调用进行签名。注:外部账户可通过新建公钥账户导入,主要用于把交易和用户关联起来。

私钥管理:包含WeBASE本地已登记的私钥用户与链上全量私钥用户。

已登记私钥:包含本地创建的私钥与导入的私钥

_images/private_key.png

链上全量私钥:包含链上私钥和本地已登记的私钥,可通过导入按钮,作为公钥用户导入到本地

_images/private_key_all.png

添加私钥用户:

_images/key_manager_add_user_2.png

导入私钥:支持导入.txt/.pem/.p12格式及明文的私钥,其中.txt私钥可由WeBASE-Front导出,.pem/.p12私钥可由console控制台导出。如果需要导入自定义私钥,可根据节点前置导出的.txt私钥,编辑其中的privateKey字段内容。

_images/import_private.png

导出私钥:可以选中导出.txt/.pem/.p12/WeID等格式的私钥,其中WeID格式私钥为十进制明文私钥,txt则是十六进制明文私钥;在代码中加载私钥可以参考节点前置-私钥加载

_images/export_private.png

系统管理

系统管理目前支持系统配置管理、证书管理的功能。

系统配置管理:系统属性包含FISCO-BCOS链的tx_count_limit和tx_gas_limit两种属性值的配置。注:一般不建议随意修改tx_count_limit和tx_gas_limit,如下情况可修改这些参数:

  • 机器网络或CPU等硬件性能有限:调小tx_count_limit,降低业务压力;
  • 业务逻辑太复杂,执行区块时gas不足:调大tx_gas_limit。

配置管理:

_images/system_config.png

配置系统属性值:

_images/system_config_edit.png

证书管理:支持导入和查看证书信息,包括查看Front对应节点的链证书、机构证书、节点证书,可查看证书内容、证书有效期、证书链关系等信息;

  • 证书链关系可通过比对父证书指纹与证书指纹查找;
  • 平台将默认加载所有Front的证书,需要在Webase-Front配置文件中配置nodePath节点路径;

FISCO-BCOS证书说明可以参考FISCO-BCOS使用手册的证书说明

证书列表:

  • 支持导出SDK证书:v1.5.0后支持导出节点前置的SDK证书zip包,可用于连接节点

_images/cert_manage.png

导入证书:

_images/cert_manage_add.png

系统监控

系统监控包含了监控异常告警两部分;

监控主要包括节点监控和主机监控,可以选择节点、时间范围等条件进行筛选查看:

  • 节点监控主要有区块高度,pbftview,待打包交易;
  • 主机监控主要有主机的CPU,内存,网络和硬盘IO;

节点监控:

_images/node_monitor.png

主机监控:

_images/host_mornitor_2.png

异常告警部分主要包括邮件服务配置告警类型配置

邮件服务配置:

如何配置邮件服务可查看本文档末尾的附录-配置邮件服务指南

可配置邮件告警所用到的邮件服务器相关参数,包含邮件协议类型protocol、邮件服务器地址host、服务使用端口port、用户邮箱地址username、用户邮箱授权码password;鉴权选项包含Authentication验证开关authentication(默认开启);

  • 邮件告警的邮箱协议类型默认使用SMTP协议,使用25默认端口,默认使用username/password进行用户验证,目前仅支持通过TLS/SSL连接邮件服务器;
  • 目前仅支持更新原有的邮件服务器配置,不支持新增配置;

使用测试功能前,需要到“告警类型配置”中,在左上角**开启邮件服务总开关**;

注:邮件告警功能需要确保邮件服务器配置正确;务必使用测试按键,向指定的邮箱地址发送测试邮件并查收邮件。如果配置错误,将发送测试邮件失败,指定邮箱将收不到测试邮件;

_images/mail_server_config.png

邮件服务配置测试:

以当前表单中输入的配置值发送测试邮件(无论是否已保存,都以表单中当前的值为配置发送测试邮件);需要提前开启邮件服务开关

_images/mail_server_config_test.png

告警类型配置(告警邮件配置):

包含了告警类型的配置,告警日志的查看;可配置告警类型的参数值,包含告警邮件标题ruleName,告警邮件内容alertContent,告警邮件发送时间间隔alertIntervalSeconds(单位:秒),上次告警时间lastAlertTime,目标告警邮箱地址userList,是否启用该类型的邮件告警enable,告警等级alertLevel等;

  • 包含了节点状态告警、审计告警、证书有效期告警三种;
  • 目前仅支持更新原有的三个邮件告警的配置,不支持新增配置;
  • 需要先在左上角开启邮件服务才可以开启各个类型的邮件告警以及发送测试邮件;

包含了不同告警类型的配置,左上角可以开启邮件服务(作为告警邮件的全局开关),点击告警标题可查看详细配置内容;

下方则是告警日志的内容,可查看告警邮件的具体内容;告警项已处理后,可以点击确认键确认已消除异常;

其中在WeBASE-Node-Manager的配置文件application.yml的constant可以配置定时任务定时监控节点状态、审计状态、证书有效期的频率,监控到异常状态时将触发邮件告警,发送告警邮件到联系人邮箱,同时按配置的间隔时间定时重复发送告警邮件,直到异常状态消除;

注:定时任务的频率为检查系统是否异常的频率,而配置不同的告警类型中的告警时间间隔是发送告警邮件的频率,如,设置检查频率为1h,配置的告警频率为6h,那么,系统会每小时检查一次系统状态,若出现异常,在定时任务检查到异常时,距离上次告警邮件超过6小时,则会发送一次告警邮件。

_images/alert_rule.png

点击修改可以修改配置项的值,启用/禁用不同类型的告警,修改配置后不需要重启即可生效;

注:修改告警内容时,大括号{}以及里面的变量名不可去除,否则无法正常发送告警邮件。

_images/alert_rule_edit.png

交易审计

联盟链中各个机构按照联盟链委员会制定的规章在链上共享和流转数据。这些规章往往是字面的,大家是否遵守缺乏监管和审计。因此为了规范大家的使用方式,避免链的计算资源和存储资源被某些机构滥用,急需一套服务来辅助监管和审计链上的行为。交易审计就是结合上面的区块链数据,私钥管理和合约管理三者的数据,以区块链数据为原材料,以私钥管理和合约管理为依据做的一个综合性的数据分析功能。交易审计提供可视化的去中心化合约部署和交易监控、审计功能,方便识别链资源被滥用的情况,为联盟链治理提供依据。

交易审计主要指标:

主要指标 指标描述
用户交易总量数量统计 监控链上各个外部交易账号的每日交易量
用户子类交易数量统计 监控链上各个外部交易账号的每种类型的每日交易量
异常交易用户监控 监控链上出现的异常交易用户(没在区块链中间件平台登记的交易用户)
异常合约部署监控 监控链上合约部署情况,非白名单合约(没在区块链中间件平台登记的合约)记录

用户交易审计:可以指定用户、时间范围、交易接口进行筛选查看交易

_images/tx_audit_user_tx.png

异常用户审计:

_images/abnormal_user.png

异常合约审计:

_images/abnormal_contract.png

账号管理

账号管理提供管理台登陆账号的管理功能。管理台用户分为三种角色:

  • 普通用户,只有查看权限;

  • 管理员用户,拥有管理平台的读写权限;

  • 开发者用户,拥有开发者自身的合约和私钥用户的读写权限,数据概览权限;

    开发者模式默认关闭。如需开启此功能,可以在WeBASE-Node-Manager配置文件application.yml中修改developerModeEnable为true,然后重启服务。

    _images/developer_mode_enable.png

注:此处账号与私钥管理的私钥用户为两种不同的概念,账号用于管理台权限控制,私钥用户为区块链账户。

账号管理:

_images/login_user_manager_2.png

添加登陆账号并指定账号类型:

_images/login_user_add_2.png

升级兼容说明

WeBASE-Front升级至最新版,可查看节点前置升级说明,请结合WeBASE-Front Changelog进行阅读

WeBASE-Node-Manager升级至最新版,可查看节点管理服务升级说明,请结合WeBASE-Node-Manager Changelog进行阅读

WeBASE-Sign升级至最新版,可查看签名服务升级说明,请结合WeBASE-Sign Changelog进行阅读

附录

配置邮件服务指南

请先阅读本文档中管理平台使用手册的各模块的详细介绍-系统监控-邮件服务配置

问:邮件服务怎么用?

答:在后台搭建邮件服务(邮箱服务器),用于后台监控到系统异常情况时,发送告警邮件到指定邮箱,方便运维;

下面介绍具体的使用方法:

邮件服务所使用的邮箱服务器:

  1. 企业可使用自行搭建的邮箱服务器;
  2. 普通用户可以使用QQ邮箱、网易邮箱等第三方邮箱;
开通邮箱服务

163邮箱开通邮箱服务:

  • 登陆邮箱后,在邮箱的设置中找到包含SMTP的设置项;

_images/mail_guide_setting_163.png

  • 勾选IMAP/SMTPPOP3/SMTP,初次开启时,会提醒用户设置授权码,并进行手机安全验证;
  • 设置授权码后,勾选IMAP, POP3, SMTP开启全部服务;

_images/mail_guide_163.png

QQ邮箱开通邮箱服务:

  • 登陆邮箱后,在邮箱的设置账户中找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务项;

_images/mail_guide_setting_qq.png

  • 开启POP3/SMTP服务IMAP/SMTP服务并按照指引进行手机安全验证并设置授权码,;
配置邮件服务

记下所设置的授权码,授权码即邮件服务中用到的“密码”,按照本文档各模块介绍-系统监控进行配置:

第一步,进入“告警类型配置”中,点击左上角“启用告警”以开启邮件服务开关

_images/alert_rule.png

第二步,进入“邮件告警配置”,配置邮件服务

  • 因为Node-Manager仅使用邮箱服务器的发件服务,因此协议类型填写smtp(IMAP/POP3均为收件服务协议);
  • 邮箱服务器填写smtp.xx.com,端口号默认为25即可启用邮件服务;如需使用其他端口如465则需要开放WeBASE-Node-Manager所在服务器的相应端口限制;
  • 用户名填写邮箱地址,密码填写上文设置的授权码

_images/mail_server_config.png

配置完成后,点击“测试”后,输入接收测试邮件的邮箱地址,测试成功即可“保存”邮件服务的配置;

_images/mail_server_config_test.png

注意事项

“邮件告警配置”中填写的端口默认为25,在不同服务器环境和不同邮箱所需的端口号有所差异,如果需要开启SSL进行邮箱安全验证则需要开通服务器防火墙相应的端口号。

目前已知的包含:

  • SMTP协议:默认使用25端口(非SSL),SSL默认465端口(SSL)或587端口(TLS)
  • POP3/IMAP协议:因为邮箱服务使用的是发邮件功能,未用到POP3或IMAP收件协议,此处仅作端口说明:其中POP3默认110端口(非SSL)和995端口(SSL),IMAP默认143端口(非SSL)和993端口(SSL)
  • 126邮箱的SSL端口除了587,还可尝试994;在阿里云下25端口被禁用,请尝试587端口或其他端口;

WeBASE合约仓库

合约仓库内置于WeBASE-FrontWeBASE管理平台中。其中提供常用的工具合约和推荐应用合约模板,用户可将合约导入到自己目录进行引入。

_images/contract.png

合约仓库贡献者

贡献者名称 github账号 贡献工程
刘明臻 https://github.com/mingzhenliu 存证合约仓库
肖东 https://github.com/xiaomdong 代理合约仓库

工具合约

Address

Address library

Address contract usage methods can refer to the Points contract warehouse。

  1. Detect whether the address is a contract
  2. Detect if the address is 0x0
String library

String library

Provides common string-related operations, including copying, finding, replacing, and so on。

Roles

Role permissions control contracts

SafeMath

SafeMath library

A secure mathematical library that provides a safe addition, subtract, and divide。The use of secure mathematical contracts can refer to the Points contract warehouse。

table

table library

BCOS CRUD uses the base library, which you can reference by re-contract calling CRUD.Table contract usage methods can be described by referring to the assat example in the bcos document https://fisco-bcos-documentation.readthedocs.io.

存证合约模板

简介

Evidence 示例合约,使用分层的智能合约结构:

  • 工厂合约(EvidenceSignersData.sol),由存证各方事前约定,存储存证生效条件,并管理存证的生成。
  • 存证合约(Evidence.sol),由工厂合约生成,存储存证id,hash和各方签名(每张存证一个合约)。
使用步骤:
  1. 部署EvidenceSignersData合约,并在构造函数中指定存证生效条件(需要哪些机构进行认证确认)。
  2. 存证时通过newEvidence接口在区块链上创建具体存证合约。
  3. 解析newEvidence调用返回的receipt,将解析出来的存证合约地址保存在应用系统。
  4. 仲裁等认证机构利用存证合约地址调用addSignatures来对存证进行确认。
  5. 取证时利用存证合约地址调用getEvidence接口进行取证。

积分合约模板

简介

BAC001 是一套区块链积分合约,可以积分相关的增发,销毁,暂停合约,黑白名单等权限控制。

四个基本元素
  • description

    此积分的具体描述

  • shortName

    积分简称

  • minUnit

    积分最小单位

  • totalAmount

    积分总数量

五个基本行为:
  • 发行

    调用合约的 deploy 方法,传入你初始化的四个元素即可,即在区块链上发行了你指定总量和名称的积分。

    • 其中 minUnit 和 totalAmount 不能为负数或小数
  • 转账

    调用 send 方法即可实现转账,之后调用 balance 方法可以查看自己的积分余额

  • 增发

    调用 issue 方法特定地址增发积分, 并可以通过 addIssuer 增加有权限增发积分的人,也可以通过renounceIssuer 方法移除增发权限

  • 销毁

    调用 destory 以及 destoryFrom 销毁自己地址下积分和特定地址下的积分

  • 暂停

    遇到紧急状况,你可以调用 suspend 方法,暂停合约,这样任何人都不能调用 send 函数。故障修复后,可以调用 unSuspend 方法解除暂停。也可以通过 addSuspender 和 renounceSuspender 相应增加和移除暂停者权限

使用样例伪码
// 示例中Alice和Bob都为一个外部账号地址。

// 部署合约,即初始化积分,示例初始化信息如下:
// 积分描述:car points
// 积分简称 TTT
// 最小转账单位 1 
// 发行总量10000000
// 默认合约部署者为第一个发行者
BAC001 bac001 = BAC001.deploy(web3j, credentials, 
contractGasProvider, "car points", "TTT", BigInteger.valueOf(1), BigInteger.valueOf(1000000)).send();
String contractAddress = bac001.getContractAddress();

// 增加积分发行者
bac001.addIssuer(Alice).send();

// 增发积分
bac001.issue(Alice, new BigInteger("10000"),"increase 10000 asset  ").send();

// 积分转账,以及积分转账备注 Owner -> Alice
bac001.send(Alice,new BigInteger("10000"),"dinner Points").send();

// 查询积分余额
assertEquals( bac001.balance(Alice).send().toString(),"30000");
接口说明
  • totalAmount()

    返回积分总量

    • 这里的积分总量需要计算最小转账单位,所以实际返回值为 totalAmount * 10minUnit
  • balance(address owner)

    返回owner的帐户的积分余额

  • send(address to, uint256 value , string data)

    将数量为value的积分转入地址 to 并触发 transfer 事件, data 是转账备注

    • suspend 状态下无法进行此操作
    • 请避免 to 为自身进行操作
  • sendFrom(address from,address to,uint256 value,string data))

    将地址 from 中的 value 数量的积分转入地址 to ,并触发 transfer 事件,data 是转账备注。

    • 方法的调用者可以不为 from, 此时需要预先进行 approve 授权
    • from 不能为调用者自身地址,否则会报错
    • suspend 状态下无法执行此操作
  • safeSendFrom(address from, address to, uint256 value, string data)

    安全的将地址 from 中的 value 数量的积分转入地址 to ( to如果是合约地址,必须实现接收接口 BAC001Holder 才可以接收转账) ,并触发 transfer 事件,data 是转账备注

    • suspend 状态下无法执行此操作
  • safeBatchSend( address[] to, uint256[] values, string data)

    批量将自己账户下的积分转给 to 数组的地址, to 和 values 的个数要一致

    • suspend 状态下无法执行此操作
  • approve(address spender,uint256 value)

    允许 spender 从自己账户提取限额 value 的积分

    • 此方法配合 sendfrom / safesendfrom 一起使用
    • 重复授权时,最终授权额度为最后一次授权的值
  • allowance(address owner,address spender)

    返回 spender 可从 owner 提取的积分数量上限

    • 此方法配合 approve 一起使用
  • increaseAllowance(address spender, uint256 addedValue)

    允许 spender 提取的积分上限在原有基础上增加 addedValue

    • 此方法配合 approve 使用
  • decreaseAllowance(address spender, uint256 subtractedValue)

    允许 spender 提取的积分上限在原有基础上减少 subtractedValue

    • 此方法配合 approve 使用
  • minUnit()

    积分最小单位

  • shortName()

    积分简称

  • description()

    积分描述

  • destory(uint256 value, string data)

    减少自己的积分,data 是转账备注

    • 调用时,value 值需要小于等于目前自己的积分总量
  • destroyFrom(address from, uint256 value, string data)

    减少地址 from 积分,data 是转账备注

    • 调用此方法时,需要配合 approve 进行使用
  • issue(address to, uint256 value,string data)

    给地址 to 增加数量为 value 的积分,data 是转账备注

  • isIssuer(address account)

    检查 account 是否有增加积分的权限

  • addIssuer(address account)

    使地址 account 拥有增加积分的权限

  • renounceIssuer()

    移除增加积分的权限

  • suspend()

    暂停合约

    • suspend 后无法进行 send / safesendfrom / sendfrom / safeBatchSend / approves 操作
  • unSuspend()

    重启合约

  • suspended

    判断合约是否处于暂停状态

  • isSuspender(address account)

    是否有暂停合约权限

    • 配合 suspend 方法一起使用
  • addSuspender(address account)

    增加暂停权限者

    • 配合 suspend 方法一起使用
  • renounceSuspender()

    移除暂停权限

    • 配合 suspend / addSuspender 方法使用

使用WeBASE开发区块链应用

部署WeBASE

搭建WeBASE, 请参考快速部署

登录WeBASE管理平台进行配置

安装WeBASE完成后,需要将节点信息添加到WeBASE平台中,这样WeBASE才可和节点进行通信。需要添加的信息包含节点信息,生成用户的私钥等。如下图所示:

  • 节点信息: _images/frontInfo.png[节点]
  • 私钥用户: _images/keyUser.png[私钥用户]

开发智能合约

以HelloWorld.sol为例

pragma solidity ^0.4.2;

contract HelloWorld{
    string name;

    function HelloWorld(){
       name = "Hello, World!";
    }

    function get()constant returns(string){
        return name;
    }

    function set(string n){
     name = n;
    }
}
  • 通过智能合约IDE部署合约,并获取合约地址等信息, _images/contract1.png[合约]

应用层开发

  • 调用交易接口

请参考交易接口

从IDE中的输出信息,拷贝合约地址,合约名,方法名等信息,同时获取用户的公钥地址信息,调用交易接口。 具体代码请参考 HelloWorld范例

  • 主要代码
application.yml

transactionUrl: http://127.0.0.1:5002/WeBASE-Front/trans/handle
groupId: 1
userAddress: "0x4f08eac5af5e77b7006d11bee94adba2f721def8"
useAes: true
contract.name: HelloWorld
contract.address: "0xca597170829f4ad5054b618425a56e0be23cbc55"
contract.funcName: set
contract.funcParam: "[\"abc\"]"
  • TransactionService.java
@Slf4j
@Data
@Service
public class TransactionService {
    @Autowired
    private RestTemplate rest;
    @Value("${transactionUrl}")
    private String url;
    @Value("${userAddress}")
    private String user;
    @Value("${groupId}")
    private int groupId;
    @Value("${useAes}")
    private Boolean useAes;
    @Value("${contract.name}")
    private String contractName;
    @Value("${contract.address}")
    private String contractAddress;
    @Value("${contract.funcName}")
    private String funcName;
    @Value("${contract.funcParam}")
    private String funcParam;

    public void sendTransaction() {

        try {
            TransactionParam transParam = new TransactionParam();
            transParam.setGroupId(groupId);
            transParam.setContractAddress(contractAddress);
            transParam.setUseAes(useAes);
            transParam.setUser(user);
            transParam.setContractName(contractName);
            transParam.setFuncName(funcName);
            transParam.setFuncParam(JSONArray.parseArray(funcParam));

            log.info("transaction param:{}", JSON.toJSONString(transParam));
            Object rsp = rest.postForObject(url, transParam, Object.class);
            String rspStr = "null";
            if (Objects.nonNull(rsp)) {
                rspStr = JSON.toJSONString(rsp);
            }
            log.info("transaction result:{}", rspStr);
        } catch (Exception ex) {
            log.error("fail sendTransaction", ex);
        }
       System.exit(1);
    }
}

运维管理

应用层发布后,持续发送交易,可在WeBASE管理平台查看数据概览,节点监控,查看交易解析,交易审计等管理功能。

  • 查看交易解析 _images/transHash.png[交易解析]

节点前置服务

概要介绍

使用说明

WeBASE-Front是和FISCO-BCOS节点配合使用的一个子系统。此分支支持FISCO-BCOS 2.0以上版本,集成web3sdk,对接口进行了封装,可通过HTTP请求和节点进行通信。另外,具备可视化控制台,可以在控制台上开发智能合约,部署合约和发送交易,并查看交易和区块详情。还可以管理私钥,对节点健康度进行监控和统计。

WeBASE-Front使用方式有以下三种:

1、单独部署作为独立控制台使用,请参考部署说明

2、结合WeBASE-Node-ManagerWeBASE-Web服务一起部署使用,请参考WeBASE安装部署

3、结合WeBASE-Sign服务一起部署使用,调用WeBASE-Sign进行数据签名,再发送上链。此方式在方式1的基础上再部署WeBASE-Sign服务,然后需调用合约部署(结合WeBASE-Sign)接口、交易处理(结合WeBASE-Sign)接口进行合约部署和调用(需要在yml中配置sign的地址)。

部署说明

1. 前提条件

依赖软件 支持版本
Java Java 1.8或以上版本
FISCO-BCOS v2.0.0及以上版本

备注: Java推荐使用OracleJDK,可参考JDK配置指引(CentOS的yum仓库的OpenJDK缺少JCE(Java Cryptography Extension),导致Web3SDK无法正常连接区块链节点)

国密支持

WeBASE-Front v1.2.2+已支持 国密版FISCO-BCOS

  • 在v1.5.0后,sdk将自动根据链的加密类型切换国密或非国密,自动根据链的SSL类型切换国密SSL

solidity v0.6.10支持

WeBASE-Front v1.4.2已支持solidity v0.5.1v0.6.10

2. 拉取代码

执行命令:

git clone -b lab https://github.com/WeBankBlockchain/WeBASE-Front.git

# 若因网络问题导致长时间下载失败,可尝试以下命令
git clone -b lab https://gitee.com/WeBank/WeBASE-Front.git

进入目录:

cd WeBASE-Front
git checkout lab

3. 编译代码

使用以下方式编译构建,如果出现问题可以查看 常见问题解答

方式一:如果服务器已安装Gradle,且版本为Gradle-4.10或以上

gradle build -x test

方式二:如果服务器未安装Gradle,或者版本不是Gradle-4.10或以上,使用gradlew编译

chmod +x ./gradlew && ./gradlew build -x test

构建完成后,会在根目录WeBASE-Front下生成已编译的代码目录dist。

4. 修改配置

(1)进入dist目录

cd dist

dist目录提供了一份配置模板conf_template:

根据配置模板生成一份实际配置conf。初次部署可直接拷贝。
例如:cp -r conf_template conf

(2)进入conf目录:

cd conf

注意: 将节点所在目录nodes/${ip}/sdk下的所有文件拷贝到当前conf目录,供SDK与节点建立连接时使用(SDK根据application.yml中的useSmSsl判断是否使用国密SSL)

  • 链的sdk目录在非国密时,包含ca.crt, sdk.crt, sdk.key,在国密时,包含sm_ca.crt,sm_sdk.crt,sm_sdk.key,sm_ensdk.crt,sm_ensdk.key
  • 拷贝命令可使用cp nodes/${ip}/sdk/* ./conf/

(3)修改配置(根据实际情况修改):

如果在企业部署中使用WeBASE-Front,必须配置下文中的keyServer,用于连接WeBASE-Sign服务

vi application.yml
spring:
  datasource:
    url: jdbc:h2:file:./h2/webasefront;DB_CLOSE_ON_EXIT=FALSE // 默认H2库为webasefront,建议修改数据库存放路径
...
server: 
  port: 5002                    // 服务端口
  context-path: /WeBASE-Front
sdk:
  useSmSsl: false  // 是否启用了国密SSL
  peers: ['127.0.0.1:20200','127.0.0.1:20201'] // 连接的节点(rpc节点)ip与端口,建议连接所有rpc节点
  certPath: conf    // sdk证书的目录,默认为conf
  ...
constant: 
  keyServer: 127.0.0.1:5004     // 密钥服务的IP和端口(WeBASE-Node-Manager服务或者WeBASE-Sign服务,不同服务支持的接口不同),如果作为独立控制台以下配置可选
  aesKey: EfdsW23D23d3df43          // aes加密key(16位) 如启用,各互联的子系统的加密key需保持一致
  transMaxWait: 30              // 交易最大等待时间
...

5. 服务启停

返回到dist目录执行:

启动: bash start.sh
停止: bash stop.sh
检查: bash status.sh

备注:服务进程起来后,需通过日志确认是否正常启动,出现以下内容表示正常;如果服务出现异常,确认修改配置后,重启提示服务进程在运行,则先执行stop.sh,再执行start.sh。

启动成功将出现如下日志:

...
	Application() - main run success...

6. 访问控制台

http://{deployIP}:{frontPort}/WeBASE-Front
示例:http://localhost:5002/WeBASE-Front
  • 部署服务器IP和服务端口需对应修改,网络策略需开通
  • 基于可视化控制台,可以开发智能合约,部署合约和发送交易,并查看交易和区块详情。还可以管理私钥,对节点健康度进行监控和统计

7. 查看日志

在dist目录查看:

前置服务全量日志:tail -f log/WeBASE-Front.log
前置服务错误日志:tail -f log/WeBASE-Front.log
web3连接日志:tail -f log/web3sdk.log

接口说明

1. 合约接口

1.1. 发送abi接口
接口描述
根据abi内容判断合约是否已部署,未部署则生成对应abi文件
接口URL

http://localhost:5002/WeBASE-Front/contract/abiInfo

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约名称 contractName String
3 合约地址 address String
4 合约abi abiInfo List abi文件里面的内容,是一个JSONArray
5 合约bin contractBin String 合约编译的runtime-bytecode(runtime-bin)
6 所在目录 packageName String 生成java所在的包名

2)数据格式

{
  "abiInfo": [
    {
      "anonymous": true,
      "constant": true,
      "inputs": [
        {
          "components": [
            null
          ],
          "dynamic": true,
          "indexed": true,
          "internalType": "string",
          "name": "string",
          "type": "string",
          "typeAsString": "string"
        }
      ],
      "methodSignatureAsString": "string",
      "name": "string",
      "outputs": [
        {
          "components": [
            null
          ],
          "dynamic": true,
          "indexed": true,
          "internalType": "string",
          "name": "string",
          "type": "string",
          "typeAsString": "string"
        }
      ],
      "payable": true,
      "stateMutability": "string",
      "type": "string"
    }
  ],
  "address": "string",
  "contractBin": "string",
  "contractName": "string",
  "groupId": "string",
  "packageName": "string"
}
响应参数

1)数据格式

1.2. 合约部署接口(结合WeBASE-Sign)
接口描述

将合约部署到当前节点。此接口需结合WeBASE-Sign使用,通过调用WeBASE-Sign服务的签名接口让相关用户对数据进行签名,拿回签名数据再发送上链。需要调用此接口时,工程配置文件application.yml中的配置”keyServer”需配置WeBASE-Sign服务的ip和端口,并保证WeBASE-Sign服务正常和存在相关用户。

构造方法参数(funcParam)为JSON数组,多个参数以逗号分隔(参数为数组时同理),示例:

constructor(string s) -> ["aa,bb\"cc"]	// 双引号要转义
constructor(uint n,bool b) -> [1,true]
constructor(bytes b,address[] a) -> ["0x1a",["0x7939E26070BE44E6c4Fc759Ce55C6C8b166d94BE","0xce867fD9afa64175bb50A4Aa0c17fC7C4A3C67D9"]]

构造方法参数(funcParam)为JSON数组,多个参数以逗号分隔(参数为数组时同理),示例:

constructor(string s) -> ["aa,bb\"cc"]  // 双引号要转义
constructor(uint n,bool b) -> [1,true]
constructor(bytes b,address[] a) -> ["0x1a",["0x7939E26070BE44E6c4Fc759Ce55C6C8b166d94BE","0xce867fD9afa64175bb50A4Aa0c17fC7C4A3C67D9"]]

查看WeBASE-Front通过本地私钥(测试用户)部署合约的接口(非WeBASE-Sign签名交易),可查看其他接口-合约部署接口(本地签名)

接口URL

http://localhost:5002/WeBASE-Front/contract/deployWithSign

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 用户编号 signUserId String WeBASE-Sign中的用户编号,通过webase-sign创建私钥获取
3 合约名称 contractName String
4 合约abi abiInfo List 合约编译后生成的abi内容
5 合约bytecodeBin bytecodeBin String 合约编译的bytecode(bin),用于部署合约
6 构造函数参数 funcParam List 合约构造函数所需参数,JSON数组,多个参数以逗号分隔(参数为数组时同理),如:["str1",["arr1","arr2"]]
7 合约版本 version String 用于指定合约在CNS中的版本
8 合约bin contractBin String
9 合约id contractId Long 合约唯一id
10 合约路径 contractPath String
11 合约来源 contractSource String
12 是否aes useAes Boolean
13 用户 user String

2)数据格式

{
  "abiInfo": [
    {}
  ],
  "bytecodeBin": "string",
  "contractBin": "string",
  "contractId": 0,
  "contractName": "string",
  "contractPath": "string",
  "contractSource": "string",
  "funcParam": [
    {}
  ],
  "groupId": "string",
  "signUserId": "string",
  "useAes": true,
  "user": "string",
  "version": "string"
}

示例:

curl -X POST "http://localhost:5002/WeBASE-Front/contract/deployWithSign"  -H "accept: */*" -H "Content-Type: application/json" -d "{ \"abiInfo\":[{\t\t\"constant\": true,\t\t\"inputs\": [],\t\t\"name\": \"get\",\t\t\"outputs\": [{\t\t\t\"name\": \"\",\t\t\t\"type\": \"string\"\t\t}],\t\t\"payable\": false,\t\t\"stateMutability\": \"view\",\t\t\"type\": \"function\"\t}, {\t\t\"constant\": false,\t\t\"inputs\": [{\t\t\t\"name\": \"n\",\t\t\t\"type\": \"string\"\t\t}],\t\t\"name\": \"set\",\t\t\"outputs\": [],\t\t\"payable\": false,\t\t\"stateMutability\": \"nonpayable\",\t\t\"type\": \"function\"\t}, {\t\t\"inputs\": [],\t\t\"payable\": false,\t\t\"stateMutability\": \"nonpayable\",\t\t\"type\": \"constructor\"\t}, {\t\t\"anonymous\": false,\t\t\"inputs\": [{\t\t\t\"indexed\": false,\t\t\t\"name\": \"\",\t\t\t\"type\": \"string\"\t\t}],\t\t\"name\": \"Test\",\t\t\"type\": \"event\"\t}],\"bytecodeBin\": \"608060405234801561001057600080fd5b506040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b610373806101166000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d146100515780633590b49f146100e1575b600080fd5b34801561005d57600080fd5b5061006661014a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100a657808201518184015260208101905061008b565b50505050905090810190601f1680156100d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100ed57600080fd5b50610148600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101ec565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b80600090805190602001906102029291906102a2565b507f89737d892c26516d1f01db9c083272cfafd004b0c31c32b9b39dbe07037fca24816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561026557808201518184015260208101905061024a565b50505050905090810190601f1680156102925780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106102e357805160ff1916838001178555610311565b82800160010185558215610311579182015b828111156103105782518255916020019190600101906102f5565b5b50905061031e9190610322565b5090565b61034491905b80821115610340576000816000905550600101610328565b5090565b905600a165627a7a723058202a7dede15aee7c8148afdeb9f48a479ded2e2b0588f8ec9953145fe7cb15b52b0029\", \"groupId\": "group", \"signUserId\": \"ed54e13b0abf4c69b788bd83b8e3515e\"}"
响应参数

1)数据格式

返回合约地址:

{
    "0x7571ff73f1a37ca07f678aebc4d8213e7ef5c266"
}

1.3. 合约部署接口(本地签名)
接口描述

此接口为WeBASE-Front使用本地私钥(页面中的测试用户)进行签名

将合约部署到当前节点。

构造方法参数(funcParam)为JSON数组,多个参数以逗号分隔(参数为数组时同理),示例:

constructor(string s) -> ["aa,bb\"cc"]    // 双引号要转义
constructor(uint n,bool b) -> [1,true]
constructor(bytes b,address[] a) -> ["0x1a",["0x7939E26070BE44E6c4Fc759Ce55C6C8b166d94BE","0xce867fD9afa64175bb50A4Aa0c17fC7C4A3C67D9"]]

构造方法参数(funcParam)为JSON数组,多个参数以逗号分隔(参数为数组时同理),示例:

constructor(string s) -> ["aa,bb\"cc"]  // 双引号要转义
constructor(uint n,bool b) -> [1,true]
constructor(bytes b,address[] a) -> ["0x1a",["0x7939E26070BE44E6c4Fc759Ce55C6C8b166d94BE","0xce867fD9afa64175bb50A4Aa0c17fC7C4A3C67D9"]]

查看WeBASE-Front通过WeBASE-Sign部署合约的接口(非本地私钥签名交易),可查看合约接口-合约部署接口(结合WeBASE-Sign)

接口URL

http://localhost:5002/WeBASE-Front/contract/deploy

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 用户地址 user String 用户地址,可通过/privateKey接口创建
3 合约名称 contractName String
4 合约abi abiInfo List 合约编译后生成的abi文件内容
5 合约bytecodeBin bytecodeBin String 合约编译的bytecode(bin),用于部署合约
6 构造函数参数 funcParam List 合约构造函数所需参数,JSON数组,多个参数以逗号分隔(参数为数组时同理),如:["str1",["arr1","arr2"]]
7 合约bin contractBin String 合约编译的runtime-bytecode(runtime-bin)
8 合约id contractId Long
9 合约路径 contractPath String
10 合约来源 contractSource String
11 用户编号 signUserId String WeBASE-Sign中的用户编号,通过webase-sign创建私钥获取
12 是否aes useAes Boolean true表示使用aes,false表示不使用aes
13 用户 user String

2)数据格式

{
  "abiInfo": [
    {}
  ],
  "bytecodeBin": "string",
  "contractBin": "string",
  "contractId": 0,
  "contractName": "string",
  "contractPath": "string",
  "contractSource": "string",
  "funcParam": [
    {}
  ],
  "groupId": "string",
  "signUserId": "string",
  "useAes": true,
  "user": "string",
  "version": "string"
}

示例:

curl -X POST "http://127.0.0.1:5002/WeBASE-Front/contract/deploy" -H "accept: */*" -H "Content-Type: application/json" -d "{ \"abiInfo\": [{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}], \"bytecodeBin\": \"608060405234801561001057600080fd5b506040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b6102d7806101166000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d146100515780633590b49f146100e1575b600080fd5b34801561005d57600080fd5b5061006661014a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100a657808201518184015260208101905061008b565b50505050905090810190601f1680156100d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100ed57600080fd5b50610148600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101ec565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b8060009080519060200190610202929190610206565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024757805160ff1916838001178555610275565b82800160010185558215610275579182015b82811115610274578251825591602001919060010190610259565b5b5090506102829190610286565b5090565b6102a891905b808211156102a457600081600090555060010161028c565b5090565b905600a165627a7a72305820748030e2b07f36768ce36d28f7d8dac238065a349c87ffd036d6009b2dcc10950029\", \"funcParam\": [ ], \"groupId\": 1, \"user\": \"0xe11dda6939ef947f9ef78f626e5c4fe0cbcbce1e\"}"
响应参数

1)数据格式

返回合约地址:

{
    "0x60aac015d5d41adc74217419ea77815ecb9a2192"
}
1.4. java转译接口
接口描述
将合约abi转成java文件
接口URL

http://localhost:5002/WeBASE-Front/contract/compile-java

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 合约名称 contractName String
2 合约abi abiInfo List 合约编译后生成的abi文件内容
3 合约bin contractBin String 合约编译的runtime-bytecode(runtime-bin)
4 所在目录 packageName String 生成java所在的包名
5 地址 address String
6 所属群组 groupId String

2)数据格式

{
  "abiInfo": [
    {
      "anonymous": true,
      "constant": true,
      "inputs": [
        {
          "components": [
            null
          ],
          "dynamic": true,
          "indexed": true,
          "internalType": "string",
          "name": "string",
          "type": "string",
          "typeAsString": "string"
        }
      ],
      "methodSignatureAsString": "string",
      "name": "string",
      "outputs": [
        {
          "components": [
            null
          ],
          "dynamic": true,
          "indexed": true,
          "internalType": "string",
          "name": "string",
          "type": "string",
          "typeAsString": "string"
        }
      ],
      "payable": true,
      "stateMutability": "string",
      "type": "string"
    }
  ],
  "address": "string",
  "contractBin": "string",
  "contractName": "string",
  "groupId": "string",
  "packageName": "string"
}
响应参数

1)数据格式 返回Java合约类源码

package com.webank;

import java.util.Arrays;
...

@SuppressWarnings("unchecked")
public class HelloWorld extends Contract {
    public static final String[] BINARY_ARRAY = {""};

    public static final String BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {""};

    public static final String SM_BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"name\":\"get\",\"type\":\"function\",\"constant\":true,\"payable\":false,\"anonymous\":false,\"stateMutability\":\"view\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"components\":null,\"typeAsString\":\"string\"}],\"methodSignatureAsString\":\"get()\"},{\"name\":\"set\",\"type\":\"function\",\"constant\":false,\"payable\":false,\"anonymous\":false,\"stateMutability\":\"nonpayable\",\"inputs\":[{\"name\":\"n\",\"type\":\"string\",\"indexed\":false,\"components\":null,\"typeAsString\":\"string\"}],\"outputs\":[],\"methodSignatureAsString\":\"set(string)\"},{\"name\":null,\"type\":\"constructor\",\"constant\":false,\"payable\":false,\"anonymous\":false,\"stateMutability\":\"nonpayable\",\"inputs\":[],\"outputs\":null,\"methodSignatureAsString\":\"null()\"}]"};

    public static final String ABI = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_GET = "get";

    public static final String FUNC_SET = "set";

    protected HelloWorld(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public String get() throws ContractException {
        final Function function = new Function(FUNC_GET, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public TransactionReceipt set(String n) {
        final Function function = new Function(
                FUNC_SET, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(n)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void set(String n, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_SET, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(n)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForSet(String n) {
        final Function function = new Function(
                FUNC_SET, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(n)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getSetInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_SET, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public static HelloWorld load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new HelloWorld(contractAddress, client, credential);
    }

    public static HelloWorld deploy(Client client, CryptoKeyPair credential) throws ContractException {
        return deploy(HelloWorld.class, client, credential, getBinary(client.getCryptoSuite()), "");
    }
}
1.5. 保存合约接口
接口描述
支持前置的控制台保存合约信息
接口URL

http://localhost:5002/WeBASE-Front/contract/save

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId string
2 合约编号 contractId Long
3 合约名称 contractName String
4 合约所在目录 contractPath String
5 合约abi contractAbi String 可保存合约ABI
6 合约bytecodeBin bytecodeBin String 合约编译的bytecode(bin),用于部署合约
7 合约bin contractBin String 合约编译的runtime-bytecode(runtime-bin),用于交易解析
8 合约源码 contractSource String
9 合约地址 contractAddress String
10 合约版本 version String

2)数据格式

{
  "bytecodeBin": "string",
  "contractAbi": "string",
  "contractAddress": "string",
  "contractBin": "string",
  "contractId": 0,
  "contractName": "string",
  "contractPath": "string",
  "contractSource": "string",
  "groupId": "string",
  "version": "string"
}
响应参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 合约编号 id Integer
2 所在目录 contractPath String
3 合约名称 contractName String
4 合约状态 contractStatus Integer 1未部署,2已部署
5 所属群组 groupId String
6 合约源码 contractSource String
7 合约abi contractAbi String 合约编译后生成的abi文件内容
8 合约bin contractBin String 合约编译的runtime-bytecode(runtime-bin),用于交易解析
9 合约bytecodeBin bytecodeBin String 合约编译的bytecode(bin),用于部署合约
10 合约地址 contractAddress String
11 部署时间 deployTime String
12 修改时间 modifyTime String
13 创建时间 createTime String
14 备注 description String
15 合约版本 version String

2)数据格式

{
    "id": 1,
    "contractPath": "/",
    "contractName": "HelloWorld",
    "contractStatus": 1,
    "groupId": 1,
    "contractSource": "cHJhZ21hIHNvbGlkaXR5ID49MC40LjI0IDwwLjYuMTE7Cgpjb250cmFjdCBIZWxsb1dvcmxkIHsKICAgIHN0cmluZyBuYW1lOwoKICAgIGNvbnN0cnVjdG9yKCkgcHVibGljIHsKICAgICAgICBuYW1lID0gIkhlbGxvLCBXb3JsZCEiOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldCgpIHB1YmxpYyB2aWV3IHJldHVybnMgKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gbmFtZTsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXQoc3RyaW5nIG1lbW9yeSBuKSBwdWJsaWMgewogICAgICAgIG5hbWUgPSBuOwogICAgfQp9",
    "contractAbi": "[{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]",
    "contractBin": "60806040526004361061004c5760003569b80029",
    "bytecodeBin": "608060405234801561001057600080fd5b506029",
    "contractAddress": null,
    "deployTime": null,
    "description": null,
    "createTime": "2019-06-10 11:48:51",
    "modifyTime": "2019-06-10 15:31:29"
}
1.6. 删除合约接口
接口描述
支持前置的控制台通过群组编号和合约编号删除未部署的合约信息
接口URL

http://localhost:5002/WeBASE-Front/contract/{groupId}/{contractId}

调用方法

HTTP DELETE

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId int
2 合约编号 contractId int

2)数据格式

http://localhost:5002/WeBASE-Front/contract/group/1
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String
3 返回数据 data Object

2)数据格式

{
    "code": 0,
    "message": "success",
    "data": null
}
1.7. 分页查询合约列表
接口描述
支持前置的控制台分页查询合约列表
接口URL

http://localhost:5002/WeBASE-Front/contract/contractList

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约名称 contractName String
3 合约状态 contractStatus Integer 1未部署,2已部署
4 合约地址 contractAddress String
5 当前页码 pageNumber Integer 从1开始
6 每页记录数 pageSize Integer
7 合约路径 contractPath String

2)数据格式

{
  "contractAddress": "string",
  "contractName": "string",
  "contractPath": "string",
  "contractStatus": 0,
  "groupId": "string",
  "pageNumber": 0,
  "pageSize": 0
}
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String
3 返回数据 data Object
3.1 合约编号 id Integer
3.2 所在目录 contractPath String
3.3 合约名称 contractName String
3.4 合约状态 contractStatus Integer 1未部署,2已部署
3.5 所属群组 groupId Integer
3.6 合约源码 contractSource String
3.7 合约abi contractAbi String 合约编译后生成的abi文件内容
3.8 合约bin contractBin String 合约编译的runtime-bytecode(runtime-bin),用于交易解析
3.9 bytecodeBin bytecodeBin String 合约编译的bytecode(bin),用于部署合约
3.10 合约地址 contractAddress String
3.11 部署时间 deployTime String
3.12 修改时间 modifyTime String
3.13 创建时间 createTime String
3.14 备注 description String

2)数据格式

{
    "code": 0,
    "message": "success",
    "data": [
        {
            "id": 2,
            "contractPath": "/",
            "contractName": "HeHe",
            "contractStatus": 1,
            "groupId": 1,
            "contractSource": "cHJhZ21hIHNvbGlkaXR5IICB9Cn0=",
            "contractAbi": "",
            "contractBin": "",
            "bytecodeBin": null,
            "contractAddress": null,
            "deployTime": null,
            "description": null,
            "createTime": "2019-06-10 16:42:50",
            "modifyTime": "2019-06-10 16:42:52"
        }
    ],
    "totalCount": 1
}
1.8. 合约是否被修改接口
接口描述
校验已部署的合约是否被修改了,返回true或false
接口URL

http://localhost:5002/WeBASE-Front/contract/ifChanged/{groupId}/{contractId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约编号 contractId int

2)数据格式

http://localhost:5002/WeBASE-Front/contract/ifChanged/group/10
响应参数

1)数据格式

true
1.9. 后台编译合约
接口描述
通过后台的solcJ对solidity合约进行编译,返回合约的BIN与ABI
接口URL

http://localhost:5002/WeBASE-Front/contract/contractCompile

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 合约名称 contractName String
2 合约源码 solidityBase64 String 经过Base64编码的合约源码内容
3 群组编号 groupId String

2)数据格式

{
  "contractName": "string",
  "groupId": "string",
  "solidityBase64": "string"
}
响应参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 合约名称 contractName String
3 合约bin bytecodeBin String
4 合约abi contractAbi String

2)数据格式

{
  "contractName": "HelloWorld",
  "contractAbi": "[{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]",
  "bytecodeBin": "608060405234801561001057600080fd5b506040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b6102d7806101166000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d146100515780633590b49f146100e1575b600080fd5b34801561005d57600080fd5b5061006661014a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100a657808201518184015260208101905061008b565b50505050905090810190601f1680156100d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100ed57600080fd5b50610148600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101ec565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b8060009080519060200190610202929190610206565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024757805160ff1916838001178555610275565b82800160010185558215610275579182015b82811115610274578251825591602001919060010190610259565b5b5090506102829190610286565b5090565b6102a891905b808211156102a457600081600090555060010161028c565b5090565b905600a165627a7a72305820c4fdd0260810422a091a99fbd64edc672c6e498b69b9947f3e3066c074522dfa0029",
  "errors": ""
}
1.10. 多合约编译
接口描述
接口参数为合约文件压缩成zip并Base64编码后的字符串。合约文件需要放在同级目录压缩,涉及引用请使用”./XXX.sol”。可参考测试类ContractControllerTest的testMultiContractCompile()方法。国密和非国密编译的bytecodeBin不一样,以下以国密为例。
接口URL

http://localhost:5002/WeBASE-Front/contract/multiContractCompile

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 合约源码 contractZipBase64 String 合约文件压缩成zip,并Base64编码
2 所属群组 groupId String

2)数据格式

{
  "contractZipBase64": "string",
  "groupId": "string"
}
响应参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 合约名称 contractName String
2 合约bin bytecodeBin String
3 合约abi contractAbi String
4 合约内容 contractSource String 单个合约内容Base64编码

2)数据格式

[
    {
      "contractName": "HelloWorld",
      "contractAbi": "[{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"SetName\",\"type\":\"event\"}]",
      "contractSource": "cHJhZ21hIHNvbGlkaXR5IF4wLjQuMjsNCmNvbnRyYWN0IEhlbGxvV29ybGR7DQogICAgc3RyaW5nIG5hbWU7DQogICAgZXZlbnQgU2V0TmFtZShzdHJpbmcgbmFtZSk7DQogICAgZnVuY3Rpb24gZ2V0KCljb25zdGFudCByZXR1cm5zKHN0cmluZyl7DQogICAgICAgIHJldHVybiBuYW1lOw0KICAgIH0NCiAgICBmdW5jdGlvbiBzZXQoc3RyaW5nIG4pew0KICAgICAgICBlbWl0IFNldE5hbWUobik7DQogICAgICAgIG5hbWU9bjsNCiAgICB9DQp9",
      "bytecodeBin": "608060405234801561001057600080fd5b50610373806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d146100515780633590b49f146100e1575b600080fd5b34801561005d57600080fd5b5061006661014a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100a657808201518184015260208101905061008b565b50505050905090810190601f1680156100d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100ed57600080fd5b50610148600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101ec565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b7f05432a43e07f36a8b98100b9cb3631e02f8e796b0a06813610ce8942e972fb81816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024e578082015181840152602081019050610233565b50505050905090810190601f16801561027b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1806000908051906020019061029e9291906102a2565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106102e357805160ff1916838001178555610311565b82800160010185558215610311579182015b828111156103105782518255916020019190600101906102f5565b5b50905061031e9190610322565b5090565b61034491905b80821115610340576000816000905550600101610328565b5090565b905600a165627a7a72305820cff924cb0783dc84e2e107aae1fd09e1e04154b80834c9267a4eaa630997b2b90029"
    }
  ]
1.11. 获取全量合约列表(不包含abi/bin)
接口描述
根据群组编号和合约状态获取全量合约
接口URL

http://localhost:5002/WeBASE-Front/contract/contractList/all/light?groupId={groupId}&contractStatus={contractStatus}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约状态 contractStatus Integer 1未部署,2已部署

2)数据格式

http://localhost:5002/WeBASE-Front/contract/contractList/all/light?groupId=1&contractStatus=2
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String
3 返回数据 data Object
3.1 合约编号 id Integer
3.2 所在目录 contractPath String
3.3 合约名称 contractName String
3.4 合约状态 contractStatus Integer 1未部署,2已部署
3.5 所属群组 groupId Integer
3.6 合约地址 contractAddress String
3.7 部署时间 deployTime String
3.8 修改时间 modifyTime String
3.9 创建时间 createTime String
3.10 备注 description String

2)数据格式

{
    "code": 0,
    "message": "success",
    "data": [
        {
            "id": 2,
            "contractPath": "/",
            "contractName": "HeHe",
            "contractStatus": 1,
            "groupId": "group",
            "contractSource": "cHJhZ21hIHNvbGlkaXR5IICB9Cn0=",
            "contractAddress": null,
            "deployTime": null,
            "description": null,
            "createTime": "2019-06-10 16:42:50",
            "modifyTime": "2019-06-10 16:42:52"
        }
    ],
    "totalCount": 1
}
1.12. 根据id获取单个合约
接口描述
根据合约id获取单个合约
接口URL

http://localhost:5002/WeBASE-Front/contract/findOne/{contractId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 合约编号 contractId Integer

2)数据格式

http://localhost:5002/WeBASE-Front/contract/findOne/1
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String
3 返回数据 data Object
3.1 合约编号 id Integer
3.2 所在目录 contractPath String
3.3 合约名称 contractName String
3.4 合约状态 contractStatus Integer 1未部署,2已部署
3.5 所属群组 groupId String
3.6 合约源码 contractSource String
3.7 合约abi contractAbi String 合约编译后生成的abi文件内容
3.8 合约bin contractBin String 合约编译的runtime-bytecode(runtime-bin),用于交易解析
3.9 bytecodeBin bytecodeBin String 合约编译的bytecode(bin),用于部署合约
3.10 合约地址 contractAddress String
3.11 部署时间 deployTime String
3.12 修改时间 modifyTime String
3.13 创建时间 createTime String
3.14 备注 description String

2)数据格式

{
    "code": 0,
    "message": "success",
    "data": [
        {
            "id": 1,
            "contractPath": "/",
            "contractName": "HeHe",
            "contractStatus": 1,
            "groupId": "group",
            "contractSource": "cHJhZ21hIHNvbGlkaXR5IICB9Cn0=",
            "contractAbi": "",
            "contractBin": "",
            "bytecodeBin": null,
            "contractAddress": null,
            "deployTime": null,
            "description": null,
            "createTime": "2019-06-10 16:42:50",
            "modifyTime": "2019-06-10 16:42:52"
        }
    ]
}
1.13. 获取合约路径列表
接口描述

获取合约路径列表

接口URL

http://localhost:5002/WeBASE-Front/contract/findPathList/{groupId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/contract/findPathList/group
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回数据 data List
1.1 群组编号 groupId String
1.2 所在目录 contractPath String
1.3 修改时间 modifyTime String
1.4 创建时间 createTime String

2)数据格式

[
  {
    "groupId": "group",
    "contractPath": "/",
    "createTime": null,
    "modifyTime": "2021-07-29 14:34:52"
  },
  {
    "groupId": "group",
    "contractPath": "Asset",
    "createTime": null,
    "modifyTime": "2021-07-27 10:43:59"
  },
  {
     "groupId": "group",
    "contractPath": "template",
    "createTime": "2021-07-20 11:31:18",
    "modifyTime": "2021-07-20 11:31:18"
  }
]
1.14. 保存合约路径
接口描述
保存合约路径
接口URL

http://localhost:5002/WeBASE-Front/contract/addContractPath

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
1 合约路径 contractPath String 若为空字符串,则保存/根目录路径

2)数据格式

http://localhost:5002/WeBASE-Front/contract/addContractPath
{
  "contractPath": "string",
  "groupId": "string"
}
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 群组编号 groupId String
2 所在目录 contractPath String
3 修改时间 modifyTime String
4 创建时间 createTime String

2)数据格式

{
  "groupId": "group",
  "contractPath": "test",
  "createTime": "2021-07-29 14:26:54",
  "modifyTime": "2021-07-29 14:26:54"
}
1.15. 删除合约路径
接口描述
删除合约路径(不删除目录下合约)
接口URL

http://localhost:5002/WeBASE-Front/contract/deletePath/{groupId}/{contractPath}

调用方法

HTTP DELETE

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约路径 contractPath String

2)数据格式

http://localhost:5002/WeBASE-Front/contract/deletePath/group/test
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String
3 返回数据 data

2)数据格式

{
    "code": 0,
    "data": {},
    "message": "success"
}
1.16. 根据合约路径批量删除合约
接口描述
根据合约路径批量删除合约
接口URL

http://localhost:5002/WeBASE-Front/contract/batch/{groupId}/{contractPath}

调用方法

HTTP DELETE

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
1 合约路径 contractPath String

2)数据格式

http://localhost:5002/WeBASE-Front/contract/batch/group/test
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String

2)数据格式

{
    "code": 0,
    "data": {},
    "message": "success"
}
1.17. 注册cns接口
接口描述
注册cns
接口URL

http://localhost:5002/WeBASE-Front/contract/registerCns

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约名称 contractName String
3 cns名称 cnsName String
4 合约地址 contractAddress String
5 合约abi abiInfo List abi文件里面的内容,是一个JSONArray
6 cns版本 version String
7 是否保存 saveEnabled bool 前置控制台调用时传true,其他调用传false
8 用户地址 userAddress String saveEnabled为true时必填
9 合约路径 contractPath String saveEnabled为true时必填
10 签名用户编号 signUserId String saveEnabled为false时必填

2)数据格式

{
  "abiInfo": [
    {
      "anonymous": true,
      "constant": true,
      "inputs": [
        {
          "components": [
            null
          ],
          "dynamic": true,
          "indexed": true,
          "internalType": "string",
          "name": "string",
          "type": "string",
          "typeAsString": "string"
        }
      ],
      "methodSignatureAsString": "string",
      "name": "string",
      "outputs": [
        {
          "components": [
            null
          ],
          "dynamic": true,
          "indexed": true,
          "internalType": "string",
          "name": "string",
          "type": "string",
          "typeAsString": "string"
        }
      ],
      "payable": true,
      "stateMutability": "string",
      "type": "string"
    }
  ],
  "cnsName": "string",
  "contractAddress": "string",
  "contractName": "string",
  "contractPath": "string",
  "groupId": "string",
  "saveEnabled": true,
  "signUserId": "string",
  "userAddress": "string",
  "version": "string"
}
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String

2)数据格式

{
    "code": 0,
    "message": "success"
}
1.18. 根据合约地址获取cns信息
接口描述

根据合约地址获取cns信息,返回改合约地址最新的cns信息

接口URL

http://localhost:5002/WeBASE-Front/contract/findCns

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约地址 contractAddress String

2)数据格式

http://localhost:5002/WeBASE-Front/contract/findCns
{
  "groupId": "group",
  "contractAddress": "0xe46c1a681811ee78079b48a956ead6d9dd10bf6a"
}
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String
3 返回数据 data List
3.1 群组编号 groupId Integer
3.2 合约路径 contractPath String
3.3 合约名 contractName String
3.4 cns名 cnsName String
3.5 cns版本 version String
3.6 合约地址 contractAddress String
3.7 合约Abi contractAbi String
3.8 修改时间 modifyTime String
3.9 创建时间 createTime String

2)数据格式

{
  "code": 0,
  "message": "success"
  "data": {
    "groupId": "group",
    "contractPath": "/",
    "contractName": "Hello",
    "cnsName": "Hello",
    "version": "v0.4",
    "contractAddress": "0xcaff8fdf1d461b91c7c8f0ff2af2f79a80bc189e",
    "contractAbi":"[{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"type\":\"function\",\"payable\":false,\"stateMutability\":\"view\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"name\":\"set\",\"outputs\":[],\"type\":\"function\",\"payable\":false,\"stateMutability\":\"nonpayable\"},{\"constant\":false,\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"name\":\"SetName\",\"outputs\":null,\"type\":\"event\",\"payable\":false,\"stateMutability\":null}]",
    "createTime": "2020-12-30 16:32:28",
    "modifyTime": "2020-12-30 16:32:28"
  }
}

2. 密钥接口

2.1. 创建私钥接口
接口描述
通过调用此接口获取公私钥对和对应账户信息
接口URL

http://localhost:5002/WeBASE-Front/privateKey?type={type}&userName={userName}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 私钥类型 type int 0-本地用户;1-本地随机;2-外部用户;默认为2
2 用户名 userName String 用户名
3 签名服务用户编号 signUserId String 64 WeBASE-Sign中的用户编号,一般设为UUID值;类型为2-外部用户时,必填;
4 应用编号 appId String 64 记录私钥所属应用,可根据业务设置;类型为2-外部用户时,必填
5 是否返回私钥 returnPrivateKey Boolean 类型为2-外部用户时,选填;默认为false
6 群组编号 groupId String

2)数据格式

// 本地用户
http://localhost:5002/WeBASE-Front/privateKey?type=0&userName=test
// 外部用户
http://localhost:5002/WeBASE-Front/privateKey?type=2&signUserId=0x123&appId=2
响应参数

1)数据格式 本地用户时:

{
  "groupId": "group",
  "address": "0x2007e1430f41f75c850464307c0994472bd92ee0",
  "publicKey": "0x9bd35211855f9f8de22d8a8da7f30d35d62ab2c3d36ea5162008fcbb9faff4d83809f7033deb20049bf51e081105076ec7a09a847f852530f81e978b1eda0392",
  "privateKey": "42caa160cadcb635381b980ddd981171c862d3105981fe92d6db330f30615f21",
  "userName": "test",
  "type": 0,
  "signUserId": null, // 本地用户则为空
  "appId": null // 本地用户则为空
}

外部用户时(来自WeBASE-Sign):

{
  "groupId": "group",
  "address": "0xef5afe7d9a7516cd36b5b2471a3fbb05d3e8a846",
  "publicKey": "0461e78631ab8428c1be815a4543da8684db13cd2d9a0593e053184dbd29d08f38131e060bc8d1a1ef5f4290b26acca8cefbc16150155e57f4ea81dbed57cea0e8",
  "privateKey": null, // 默认不返回
  "userName": null, //外部用户则为空
  "type": 2,
  "signUserId": "0x123",
  "appId": "1"
}
2.2. 导入私钥接口
接口描述
导入私钥信息,并返回对应的公钥及用户地址
接口URL

http://localhost:5002/WeBASE-Front/privateKey/import?privateKey={privateKey}&userName={userName}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 私钥信息 privateKey String
2 用户名 userName String
3 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/privateKey/import?privateKey=8cf98bd0f37fb0984ab43ed6fc2dcdf58811522af7e4a3bedbe84636a79a501c&userName=lili
响应参数

1)数据格式

{
  "address": "0x2e8ff65fb1b2ce5b0c9476b8f8beb221445f42ee",
  "publicKey": "0x1c7073dc185af0644464b178da932846666a858bc492450e9e94c77203428ed54e2ce45679dbb36bfed714dbe055a215dc1aaf4a75faeddce6a62b39c0158e1e",
  "privateKey": "8cf98bd0f37fb0984ab43ed6fc2dcdf58811522af7e4a3bedbe84636a79a501c",
  "userName": "lili",
  "type": 0,
  "appId": "string",
  "signUserId": "string"
}
2.3. 获取本地公私钥列表接口
接口描述
返回本地公私钥信息列表
接口URL

http://localhost:5002/WeBASE-Front/privateKey/localKeyStores

调用方法

HTTP GET

请求参数

1)参数表

2)数据格式

http://localhost:5002/WeBASE-Front/privateKey/localKeyStores
响应参数

1)数据格式

[
  {
    "address": "string",
    "appId": "string",
    "privateKey": "string",
    "publicKey": "string",
    "signUserId": "string",
    "type": 0,
    "userName": "string"
  }
]
2.4. 删除公私钥接口
接口描述
支持前置的控制台通过用户地址删除公私钥信息
接口URL

http://localhost:5002/WeBASE-Front/privateKey/{address}

调用方法

HTTP DELETE

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 用户地址 address String

2)数据格式

http://localhost:5002/WeBASE-Front/privateKey/0x2e8ff65fb1b2ce5b0c9476b8f8beb221445f42ee
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String
3 返回数据 data Object

2)数据格式

{
    "code": 0,
    "message": "success",
    "data": null
}
2.5. 导入.pem私钥用户
接口描述

导入.pem格式的私钥

接口URL

http://localhost:5002/WeBASE-Front/privateKey/importPem

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 pem文件内容 pemContent String 必须以-----BEGIN PRIVATE KEY-----\n开头,以\n-----END PRIVATE KEY-----\n结尾的格式
2 用户名 userName String
3 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/privateKey/importPem
{
  "groupId": "string",
  "pemContent": "string",
  "userName": "string"
}
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String
3 返回数据 data Object

2)数据格式

{
    "code": 0,
    "message": "success",
    "data": null
}
2.6. 导入.p12私钥用户
接口描述

导入.p12格式的私钥

接口URL

http://localhost:5002/WeBASE-Front/privateKey/importP12

调用方法

HTTP POST | Content-type: form-data

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 p12文件 p12File MultipartFile
2 p12文件密码 p12Password String 使用base64编码的密码;缺省时默认为"",即空密码;p12无密码时,可传入空值或不传;不包含中文
3 用户名 userName String
4 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/privateKey/importP12
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String
3 返回数据 data Object

2)数据格式

{
    "code": 0,
    "message": "success",
    "data": null
}
2.7. 导入私钥到WeBASE-Sign
接口描述

导入私钥到WeBASE-Sign,其中privateKey经过Base64加密

接口URL

http://localhost:5002/WeBASE-Front/privateKey/importWithSign

调用方法

HTTP POST | Content-type: application/json

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 用户编号 signUserId String 64 WeBASE-Sign中的用户编号,一般设为UUID值
2 应用编号 appId String 64 记录私钥所属应用,可根据业务设置
3 私钥 privateKey String 经过Base64加密后的内容
4 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/privateKey/importWithSign
{
  "appId": "string",
  "groupId": "string",
  "privateKey": "string",
  "signUserId": "string"
}
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String
3 返回数据 data Object

2)数据格式

{
    "code": 0,
    "message": "success",
    "data": null
}
2.8. 对哈希签名
接口描述

计算HASH和签名值

接口URL

http://localhost:5002/WeBASE-Front/privateKey/signMessageHash

调用方法

HTTP POST | Content-type: application/json

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 Sign用户Id signUserId String 64 在webase-sign创建的私钥的id
2 Hash值 messageHash String
3 群组编号 groupId String

2)数据格式

{
  "groupId": "string",
  "messageHash": "string",
  "signUserId": "string"
}
响应参数

1)数据格式

{
  "v": 0,
  "r": "0x2a76a45bcf1113615f796cc01b23c57f81f20ce79500080bb34c7994ed04de06",
  "s": "0x4f111eb37720e2618d8906368c825fd3cbe89b2781cb678efafb42399594a580",
  "p": "0x4405f9d5d6ccff709b6543bc8ac24cbb649d3267a66db19ab8f85f3b884a8505f086c581490e7e50558879abde9c4d07fc2daab92f81c0eb4b805af3c8895cfc"
}
2.9. 导出pem私钥
接口描述

从本地或WeBASE-Sign导出pem私钥文件

接口URL

http://localhost:5002/WeBASE-Front/privateKey/exportPem

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 Sign用户编号 signUserId String 64 非空时,导出sign的私钥
2 用户地址 userAddress String 若signUserId为空,则地址不能为空,导出本地私钥
3 群组编号 groupId String
4 p12文件密码 p12Password String

2)数据格式

http://localhost:5002/WeBASE-Front/privateKey/exportPem
{
  "groupId": "string",
  "p12Password": "string",
  "signUserId": "string",
  "userAddress": "string"
}
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 文件名 ResponseEntity.header String 文件名在header中
2 文件流 body InputStream 文件的流在body中,使用pcks12方式接收

2)数据格式

headers: content-disposition: attachment;filename*=UTF-8''111_0x0421975cf4a5b27148f65de11cd9d8559a1bbbd9.pem 

{
-----BEGIN PRIVATE KEY-----
MIGNAgEAMBAGByqGSM49AgEGBSuBBAAKBHYwdAIBAQQg91Aha3x2UdpN2Sg5C5Wh
7Y8YwIYC5NTNtfQT1yp7hKWgBwYFK4EEAAqhRANCAAQ9SEdu1kLpLXVmayqax7N+
Pf/ATWx5jJIJIiQF6/BIiuORZrZb/M04FlxtGyVuQjQjbYVgyjNDUilj14OlZhXo
-----END PRIVATE KEY-----
}
2.10. 导出p12私钥
接口描述

从本地或WeBASE-Sign导出p12私钥文件

接口URL

http://localhost:5002/WeBASE-Front/privateKey/exportP12

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 Sign用户编号 signUserId String 64 非空时,导出sign的私钥
2 用户地址 userAddress String 若signUserId为空,则地址不能为空,导出本地私钥
3 群组编号 groupId String
4 p12文件密码 p12Password String

2)数据格式

http://localhost:5002/WeBASE-Front/privateKey/exportP12
{
  "groupId": "string",
  "p12Password": "string",
  "signUserId": "string",
  "userAddress": "string"
}
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 文件名 ResponseEntity.header String 文件名在header中
2 文件流 body InputStream 文件的流在body中,使用pcks12方式接收

2)数据格式

headers:  content-disposition: attachment;filename*=UTF-8''111_0x0421975cf4a5b27148f65de11cd9d8559a1bbbd9.p12 

{
// 二进制流
}
2.11. 获取WeBASE-Sign私钥用户信息
接口描述

从WeBASE-Sign获取私钥信息

接口URL

http://localhost:5002/WeBASE-Front/privateKey/userInfoWithSign

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 Sign用户编号 signUserId String 64 WeBASE-Sign中用户编号
2 是否导出秘钥 returnPrivateKey Boolean 默认为false;true时将导出WeBASE-Sign对应私钥

2)数据格式

http://localhost:5002/WeBASE-Front/privateKey/userInfoWithSign?signUserId=d1edf538748b4d899f251b5d746ec62f&returnPrivateKey=false
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 用户编号 signUserId String WeBASE-Sign中的用户编号,一般为UUID值
2 应用编号 appId String 记录私钥所属应用
3 私钥原文 privateKey String returnPrivateKey则不返回(要求WeBASE-Sign设置允许导出私钥配置)
4 私钥地址 address String
5 公钥 publicKey String
6 私钥类型 encryptType int 0-ECDSA, 1-SM2国密
7 描述 description String

2)数据格式

{
  "signUserId": "d1edf538748b4d899f251b5d746ec62f",
  "appId": "1",
  "address": "0x2b6e2f9d25bdeeca395bd743099ef50097043aaa",
  "publicKey": "044ddb8e92cf9dd96c1767b5e9c7e55e749304e88e28a8ec4fb7059c3388590ce83f2786510898464dfeb79771656a506e91cca6bd88c4291d5b9e284542651546",
  "privateKey": "",
  "description": null,
  "encryptType": 1
}

3. web3接口

3.1. 获取块高接口
接口描述
获取节点最新块高
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/blockNumber

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/blockNumber
响应参数

1)数据格式

232
3.2. 根据块高获取块信息接口
接口描述
通过块高获取块信息
接口URL

http://localhost:5002/WeBASE-Front/group/web3/blockByNumber/{blockNumber}

调用方法

HTTP GET

请求参数
  1. 参数表
序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String
2 块高 blockNumber BigInteger

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/blockByNumber/2
响应参数

1)数据格式

{
  "number": 2,
  "hash": "0xf58f4f43b3761f4863ad366c4a7e2a812ed68df9f7bcad6b502fd544665e7625",
  "parentHash": "0x489ee0c00527879f7e2470bde7b62e9ea30fadb242bcbd9ba582d0dee4958e2f",
  "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "transactionsRoot": "0xade02313d3200f38dfc18cdc368241cf4c1cb7e72011edf847ec216efa43a99e",
  "receiptsRoot": "0xb7c4b856c9335bd345c0b022057567a2223218e7a7dab822981467b29ac1e326",
  "dbHash": "0x8cbc3f2c0e35a71738909e3b388efa6697084b05badd3a3bd3c64f0575c78c15",
  "stateRoot": "0x8cbc3f2c0e35a71738909e3b388efa6697084b05badd3a3bd3c64f0575c78c15",
  "sealer": "0x2",
  "sealerList": [
    "06269e130f8220ebaa78e67832df0de6b4c5ee3f1b14e64ab2bae26510a4bcf997454b35067c1685d4343e6ad84b45c3b8690a858f2831a9247a97a27166ce1f",
    "65bc44d398d99d95a9d404aa16e4bfbc2f9ebb40f20439ddef8575a139dc3a80310cfc98a035bd59a67cc5f659f519e3e99b855f3d27f21a889c23a14036d0c7",
    "95efafa5197796e7edf647191de83f4259d7cbb060f4bac5868be474037f49144d581c15d8aef9b07d78f18041a5f43c3c26352ebbf5583cd23070358c8fba39",
    "fe57d7b39ed104b4fb2770ae5aad7946bfd377d0eb91ab92a383447e834c3257dec56686551d08178f2d5f40d9fad615293e46c9f5fc23cf187258e121213b1d"
  ],
  "extraData": [],
  "gasLimit": "0",
  "gasUsed": "0",
  "timestamp": "1619424150450",
  "signatureList": [
    {
      "index": "0x1",
      "signature": "0xa05b5d220e41051fa80f212884d9cdda3a8973a4ac2d2dc74e42db32b459e5f595a61e30266f0e8bf7edb065ff107c6af5e6349f9ae518146dc686406ebbade165bc44d398d99d95a9d404aa16e4bfbc2f9ebb40f20439ddef8575a139dc3a80310cfc98a035bd59a67cc5f659f519e3e99b855f3d27f21a889c23a14036d0c7"
    },
    {
      "index": "0x3",
      "signature": "0x48bb622e24b18f4eb601137d44b5d86e2c287be3aa849dce1768e87e75308ba69391e62f90d76bf84b9b6eb1509d11409f9b784bc7b052458a4596b81961fac8fe57d7b39ed104b4fb2770ae5aad7946bfd377d0eb91ab92a383447e834c3257dec56686551d08178f2d5f40d9fad615293e46c9f5fc23cf187258e121213b1d"
    },
    {
      "index": "0x2",
      "signature": "0x3a3cc8c20c5cdbb6431ec1f749d94662670e87442debef119a4e6469ccb16a60a152d32754ab833efa513839b076c2aa1ceb7e536db3734b740e9192b10ee38695efafa5197796e7edf647191de83f4259d7cbb060f4bac5868be474037f49144d581c15d8aef9b07d78f18041a5f43c3c26352ebbf5583cd23070358c8fba39"
    }
  ],
  "transactions": [
    {
      "blockHash": "0xf58f4f43b3761f4863ad366c4a7e2a812ed68df9f7bcad6b502fd544665e7625",
      "blockNumber": 2,
      "from": "0x9d75e0ee66cfef16897b601624b60413d988ae7d",
      "gas": "0x419ce0",
      "hash": "0x69ced0162a0c3892e4eaa3091b831ac3aaeb772c062746b20891ceaf8a4fb429",
      "input": "0x608060405234801561001057600080fd5b506103e3806100206000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d1461005c5780633590b49f146100ec57806362e8d6ce14610155575b600080fd5b34801561006857600080fd5b5061007161016c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100b1578082015181840152602081019050610096565b50505050905090810190601f1680156100de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100f857600080fd5b50610153600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061020e565b005b34801561016157600080fd5b5061016a6102c4565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102045780601f106101d957610100808354040283529160200191610204565b820191906000526020600020905b8154815290600101906020018083116101e757829003601f168201915b5050505050905090565b7f5715c9562eaf8d524d564edb392acddefc81d8133e2fc3b8125a260b1b413fda816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610270578082015181840152602081019050610255565b50505050905090810190601f16801561029d5780820380516001836020036101000a031916815260200191505b509250505060405180910390a180600090805190602001906102c0929190610312565b5050565b6040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061030f929190610312565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061035357805160ff1916838001178555610381565b82800160010185558215610381579182015b82811115610380578251825591602001919060010190610365565b5b50905061038e9190610392565b5090565b6103b491905b808211156103b0576000816000905550600101610398565b5090565b905600a165627a7a72305820f3088deb3d14c6893440e4769f2389e9335e04faa10e6de5b4c93af15d1a34e80029",
      "nonce": "0x3460c30bd3e4e88a31d6d033b3a172859bf003258e9606fd63fb0d91f91f4e6",
      "to": "0x0000000000000000000000000000000000000000",
      "transactionIndex": "0x0",
      "value": "0x0",
      "gasPrice": "0x51f4d5c00",
      "blockLimit": "0x1f5",
      "chainId": "0x1",
      "groupId": "0x1",
      "extraData": "0x",
      "signature": {
        "r": "0x3416723318505669cca91689b213ff08ffb96d538210a0f691cfcfa9d529462b",
        "s": "0xd3642f19c228e2e86689de9efc19ecbb68378a6bb7c219984431e93d60c89124",
        "v": "0xc7935c199b680452eb37911856282b9c820322fd5fdec8a06b48cc3df4e8ed7d3d66a5adcc134cca609146ec0aed12827c35df07eed96042763c0926cf4223b7",
        "signature": "0x3416723318505669cca91689b213ff08ffb96d538210a0f691cfcfa9d529462bd3642f19c228e2e86689de9efc19ecbb68378a6bb7c219984431e93d60c89124c7935c199b680452eb37911856282b9c820322fd5fdec8a06b48cc3df4e8ed7d3d66a5adcc134cca609146ec0aed12827c35df07eed96042763c0926cf4223b7"
      }
    }
  ]
}
3.3. 根据块hash获取块信息接口
接口描述
通过块hash获取块信息
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/blockByHash/{blockHash}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String
2 区块hash blockByHash String

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/blockByHash/0xf58f4f43b3761f4863ad366c4a7e2a812ed68df9f7bcad6b502fd544665e7625
响应参数

1)数据格式

{{
  "number": 2,
  "hash": "0xf58f4f43b3761f4863ad366c4a7e2a812ed68df9f7bcad6b502fd544665e7625",
  "parentHash": "0x489ee0c00527879f7e2470bde7b62e9ea30fadb242bcbd9ba582d0dee4958e2f",
  "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "transactionsRoot": "0xade02313d3200f38dfc18cdc368241cf4c1cb7e72011edf847ec216efa43a99e",
  "receiptsRoot": "0xb7c4b856c9335bd345c0b022057567a2223218e7a7dab822981467b29ac1e326",
  "dbHash": "0x8cbc3f2c0e35a71738909e3b388efa6697084b05badd3a3bd3c64f0575c78c15",
  "stateRoot": "0x8cbc3f2c0e35a71738909e3b388efa6697084b05badd3a3bd3c64f0575c78c15",
  "sealer": "0x2",
  "sealerList": [
    "06269e130f8220ebaa78e67832df0de6b4c5ee3f1b14e64ab2bae26510a4bcf997454b35067c1685d4343e6ad84b45c3b8690a858f2831a9247a97a27166ce1f",
    "65bc44d398d99d95a9d404aa16e4bfbc2f9ebb40f20439ddef8575a139dc3a80310cfc98a035bd59a67cc5f659f519e3e99b855f3d27f21a889c23a14036d0c7",
    "95efafa5197796e7edf647191de83f4259d7cbb060f4bac5868be474037f49144d581c15d8aef9b07d78f18041a5f43c3c26352ebbf5583cd23070358c8fba39",
    "fe57d7b39ed104b4fb2770ae5aad7946bfd377d0eb91ab92a383447e834c3257dec56686551d08178f2d5f40d9fad615293e46c9f5fc23cf187258e121213b1d"
  ],
  "extraData": [],
  "gasLimit": "0",
  "gasUsed": "0",
  "timestamp": "1619424150450",
  "signatureList": [
    {
      "index": "0x1",
      "signature": "0xa05b5d220e41051fa80f212884d9cdda3a8973a4ac2d2dc74e42db32b459e5f595a61e30266f0e8bf7edb065ff107c6af5e6349f9ae518146dc686406ebbade165bc44d398d99d95a9d404aa16e4bfbc2f9ebb40f20439ddef8575a139dc3a80310cfc98a035bd59a67cc5f659f519e3e99b855f3d27f21a889c23a14036d0c7"
    },
    {
      "index": "0x3",
      "signature": "0x48bb622e24b18f4eb601137d44b5d86e2c287be3aa849dce1768e87e75308ba69391e62f90d76bf84b9b6eb1509d11409f9b784bc7b052458a4596b81961fac8fe57d7b39ed104b4fb2770ae5aad7946bfd377d0eb91ab92a383447e834c3257dec56686551d08178f2d5f40d9fad615293e46c9f5fc23cf187258e121213b1d"
    },
    {
      "index": "0x2",
      "signature": "0x3a3cc8c20c5cdbb6431ec1f749d94662670e87442debef119a4e6469ccb16a60a152d32754ab833efa513839b076c2aa1ceb7e536db3734b740e9192b10ee38695efafa5197796e7edf647191de83f4259d7cbb060f4bac5868be474037f49144d581c15d8aef9b07d78f18041a5f43c3c26352ebbf5583cd23070358c8fba39"
    }
  ],
  "transactions": [
    {
      "blockHash": "0xf58f4f43b3761f4863ad366c4a7e2a812ed68df9f7bcad6b502fd544665e7625",
      "blockNumber": 2,
      "from": "0x9d75e0ee66cfef16897b601624b60413d988ae7d",
      "gas": "0x419ce0",
      "hash": "0x69ced0162a0c3892e4eaa3091b831ac3aaeb772c062746b20891ceaf8a4fb429",
      "input": "0x608060405234801561001057600080fd5b506103e3806100206000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d1461005c5780633590b49f146100ec57806362e8d6ce14610155575b600080fd5b34801561006857600080fd5b5061007161016c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100b1578082015181840152602081019050610096565b50505050905090810190601f1680156100de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100f857600080fd5b50610153600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061020e565b005b34801561016157600080fd5b5061016a6102c4565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102045780601f106101d957610100808354040283529160200191610204565b820191906000526020600020905b8154815290600101906020018083116101e757829003601f168201915b5050505050905090565b7f5715c9562eaf8d524d564edb392acddefc81d8133e2fc3b8125a260b1b413fda816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610270578082015181840152602081019050610255565b50505050905090810190601f16801561029d5780820380516001836020036101000a031916815260200191505b509250505060405180910390a180600090805190602001906102c0929190610312565b5050565b6040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061030f929190610312565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061035357805160ff1916838001178555610381565b82800160010185558215610381579182015b82811115610380578251825591602001919060010190610365565b5b50905061038e9190610392565b5090565b6103b491905b808211156103b0576000816000905550600101610398565b5090565b905600a165627a7a72305820f3088deb3d14c6893440e4769f2389e9335e04faa10e6de5b4c93af15d1a34e80029",
      "nonce": "0x3460c30bd3e4e88a31d6d033b3a172859bf003258e9606fd63fb0d91f91f4e6",
      "to": "0x0000000000000000000000000000000000000000",
      "transactionIndex": "0x0",
      "value": "0x0",
      "gasPrice": "0x51f4d5c00",
      "blockLimit": "0x1f5",
      "chainId": "0x1",
      "groupId": "0x1",
      "extraData": "0x",
      "signature": {
        "r": "0x3416723318505669cca91689b213ff08ffb96d538210a0f691cfcfa9d529462b",
        "s": "0xd3642f19c228e2e86689de9efc19ecbb68378a6bb7c219984431e93d60c89124",
        "v": "0xc7935c199b680452eb37911856282b9c820322fd5fdec8a06b48cc3df4e8ed7d3d66a5adcc134cca609146ec0aed12827c35df07eed96042763c0926cf4223b7",
        "signature": "0x3416723318505669cca91689b213ff08ffb96d538210a0f691cfcfa9d529462bd3642f19c228e2e86689de9efc19ecbb68378a6bb7c219984431e93d60c89124c7935c199b680452eb37911856282b9c820322fd5fdec8a06b48cc3df4e8ed7d3d66a5adcc134cca609146ec0aed12827c35df07eed96042763c0926cf4223b7"
      }
    }
  ]
}
3.4. 获取块中交易个数接口
接口描述
根据块高获取该块中的交易个数
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/blockTransCnt/{blockNumber}

调用方法

HTTP GET

请求参数
  1. 参数表
序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String
2 块高 blockNumber BigInteger

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/blockTransCnt/100
响应参数

1)数据格式

2
3.5. 获取PbftView接口
接口描述
通过调用此接口获取PbftView
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/pbftView

调用方法

HTTP GET

请求参数
  1. 参数表
序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/pbftView
响应参数

1)数据格式

{
    160565
}
3.6. 获取交易回执接口
接口描述
根据交易hash获取交易回执
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/transactionReceipt/{transHash}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String
2 交易hash transHash String

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/transactionReceipt/0x69ced0162a0c3892e4eaa3091b831ac3aaeb772c062746b20891ceaf8a4fb429
响应参数

2)数据格式

{
  "transactionHash": "0x69ced0162a0c3892e4eaa3091b831ac3aaeb772c062746b20891ceaf8a4fb429",
  "transactionIndex": "0x0",
  "root": "0x8cbc3f2c0e35a71738909e3b388efa6697084b05badd3a3bd3c64f0575c78c15",
  "blockNumber": "2",
  "blockHash": "0xf58f4f43b3761f4863ad366c4a7e2a812ed68df9f7bcad6b502fd544665e7625",
  "from": "0x9d75e0ee66cfef16897b601624b60413d988ae7d",
  "to": "0x0000000000000000000000000000000000000000",
  "gasUsed": "316449",
  "contractAddress": "0xa8af0ee580d8af674a60341030ddbc45431bc235",
  "logs": [],
  "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "status": "0x0",
  "statusMsg": "None",
  "input": "0x608060405234801561001057600080fd5b506103e3806100206000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d1461005c5780633590b49f146100ec57806362e8d6ce14610155575b600080fd5b34801561006857600080fd5b5061007161016c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100b1578082015181840152602081019050610096565b50505050905090810190601f1680156100de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100f857600080fd5b50610153600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061020e565b005b34801561016157600080fd5b5061016a6102c4565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102045780601f106101d957610100808354040283529160200191610204565b820191906000526020600020905b8154815290600101906020018083116101e757829003601f168201915b5050505050905090565b7f5715c9562eaf8d524d564edb392acddefc81d8133e2fc3b8125a260b1b413fda816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610270578082015181840152602081019050610255565b50505050905090810190601f16801561029d5780820380516001836020036101000a031916815260200191505b509250505060405180910390a180600090805190602001906102c0929190610312565b5050565b6040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061030f929190610312565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061035357805160ff1916838001178555610381565b82800160010185558215610381579182015b82811115610380578251825591602001919060010190610365565b5b50905061038e9190610392565b5090565b6103b491905b808211156103b0576000816000905550600101610398565b5090565b905600a165627a7a72305820f3088deb3d14c6893440e4769f2389e9335e04faa10e6de5b4c93af15d1a34e80029",
  "output": "0x",
  "txProof": null,
  "receiptProof": null,
  "message": null,
  "statusOK": true
}
3.7. 根据交易hash获取交易信息接口
接口描述
根据交易hash获取交易信息
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/transaction/{transHash}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String
2 交易hash transHash String
3 withProof boolean

2)数据格式

http://localhost:5002/WeBASE-Front/1/web3/transaction/0x69ced0162a0c3892e4eaa3091b831ac3aaeb772c062746b20891ceaf8a4fb429
响应参数

1)数据格式

{
  "blockHash": "0xf58f4f43b3761f4863ad366c4a7e2a812ed68df9f7bcad6b502fd544665e7625",
  "blockNumber": 2,
  "from": "0x9d75e0ee66cfef16897b601624b60413d988ae7d",
  "gas": "4300000",
  "hash": "0x69ced0162a0c3892e4eaa3091b831ac3aaeb772c062746b20891ceaf8a4fb429",
  "input": "0x608060405234801561001057600080fd5b506103e3806100206000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d1461005c5780633590b49f146100ec57806362e8d6ce14610155575b600080fd5b34801561006857600080fd5b5061007161016c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100b1578082015181840152602081019050610096565b50505050905090810190601f1680156100de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100f857600080fd5b50610153600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061020e565b005b34801561016157600080fd5b5061016a6102c4565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102045780601f106101d957610100808354040283529160200191610204565b820191906000526020600020905b8154815290600101906020018083116101e757829003601f168201915b5050505050905090565b7f5715c9562eaf8d524d564edb392acddefc81d8133e2fc3b8125a260b1b413fda816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610270578082015181840152602081019050610255565b50505050905090810190601f16801561029d5780820380516001836020036101000a031916815260200191505b509250505060405180910390a180600090805190602001906102c0929190610312565b5050565b6040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061030f929190610312565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061035357805160ff1916838001178555610381565b82800160010185558215610381579182015b82811115610380578251825591602001919060010190610365565b5b50905061038e9190610392565b5090565b6103b491905b808211156103b0576000816000905550600101610398565b5090565b905600a165627a7a72305820f3088deb3d14c6893440e4769f2389e9335e04faa10e6de5b4c93af15d1a34e80029",
  "nonce": "0x3460c30bd3e4e88a31d6d033b3a172859bf003258e9606fd63fb0d91f91f4e6",
  "to": "0x0000000000000000000000000000000000000000",
  "transactionIndex": "0x0",
  "value": "0x0",
  "gasPrice": "22000000000",
  "blockLimit": "0x1f5",
  "chainId": "0x1",
  "groupId": "1",
  "extraData": "0x",
  "signature": {
    "r": "0x3416723318505669cca91689b213ff08ffb96d538210a0f691cfcfa9d529462b",
    "s": "0xd3642f19c228e2e86689de9efc19ecbb68378a6bb7c219984431e93d60c89124",
    "v": "0xc7935c199b680452eb37911856282b9c820322fd5fdec8a06b48cc3df4e8ed7d3d66a5adcc134cca609146ec0aed12827c35df07eed96042763c0926cf4223b7",
    "signature": "0x3416723318505669cca91689b213ff08ffb96d538210a0f691cfcfa9d529462bd3642f19c228e2e86689de9efc19ecbb68378a6bb7c219984431e93d60c89124c7935c199b680452eb37911856282b9c820322fd5fdec8a06b48cc3df4e8ed7d3d66a5adcc134cca609146ec0aed12827c35df07eed96042763c0926cf4223b7"
  }
}
3.8. 获取合约二进制代码接口
接口描述
获取指定块高区块指定合约地址的二进制代码
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/code/{address}/{blockNumber}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String
2 合约地址 address String
3 块高 blockNumber BigInteger

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/code/0x0000000000000000000000000000000000000000/1
响应参数

1)数据格式

{
    0xxxx
}
3.9. 获取总交易数
接口描述
获取总交易数量
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/transaction-total

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/1/web3/transaction-total
响应参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 总交易数 txSum int
2 块高 blockNumber int
3 blockNumberRaw String
4 txSumRaw String

2)数据格式

{
    "txSum": 125,
    "blockNumber": 125,
    "blockNumberRaw": "0x7d",
    "txSumRaw": "0x7d"
}
3.10. 获取群组内的共识状态信息接口
接口描述
返回指定群组内的共识状态信息
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/consensusStatus

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/consensusStatus
响应参数

1)数据格式

{
  "baseConsensusInfo": {
    "nodeNum": "4",
    "consensusedBlockNumber": "233",
    "highestblockNumber": "232",
    "groupId": "1",
    "protocolId": "65544",
    "accountType": "1",
    "cfgErr": "false",
    "omitEmptyBlock": "true",
    "nodeId": "fe57d7b39ed104b4fb2770ae5aad7946bfd377d0eb91ab92a383447e834c3257dec56686551d08178f2d5f40d9fad615293e46c9f5fc23cf187258e121213b1d",
    "allowFutureBlocks": "true",
    "connectedNodes": "3",
    "currentView": "102303",
    "toView": "102303",
    "leaderFailed": "false",
    "highestblockHash": "0x7f0885a7188bd5c1b3f8c182e00be0e63a3b1653b12752cf8501ddac995e6efc",
    "leaderId": null,
    "leaderIdx": null,
    "node_index": "3",
    "node index": null,
    "max_faulty_leader": "1",
    "sealer.": [
      "06269e130f8220ebaa78e67832df0de6b4c5ee3f1b14e64ab2bae26510a4bcf997454b35067c1685d4343e6ad84b45c3b8690a858f2831a9247a97a27166ce1f",
      "65bc44d398d99d95a9d404aa16e4bfbc2f9ebb40f20439ddef8575a139dc3a80310cfc98a035bd59a67cc5f659f519e3e99b855f3d27f21a889c23a14036d0c7",
      "95efafa5197796e7edf647191de83f4259d7cbb060f4bac5868be474037f49144d581c15d8aef9b07d78f18041a5f43c3c26352ebbf5583cd23070358c8fba39",
      "fe57d7b39ed104b4fb2770ae5aad7946bfd377d0eb91ab92a383447e834c3257dec56686551d08178f2d5f40d9fad615293e46c9f5fc23cf187258e121213b1d"
    ]
  },
  "viewInfos": [
    {
      "nodeId": "06269e130f8220ebaa78e67832df0de6b4c5ee3f1b14e64ab2bae26510a4bcf997454b35067c1685d4343e6ad84b45c3b8690a858f2831a9247a97a27166ce1f",
      "view": "102300"
    },
    {
      "nodeId": "65bc44d398d99d95a9d404aa16e4bfbc2f9ebb40f20439ddef8575a139dc3a80310cfc98a035bd59a67cc5f659f519e3e99b855f3d27f21a889c23a14036d0c7",
      "view": "102301"
    },
    {
      "nodeId": "95efafa5197796e7edf647191de83f4259d7cbb060f4bac5868be474037f49144d581c15d8aef9b07d78f18041a5f43c3c26352ebbf5583cd23070358c8fba39",
      "view": "102302"
    },
    {
      "nodeId": "fe57d7b39ed104b4fb2770ae5aad7946bfd377d0eb91ab92a383447e834c3257dec56686551d08178f2d5f40d9fad615293e46c9f5fc23cf187258e121213b1d",
      "view": "102303"
    }
  ]
}
3.11. 获取群组列表接口
接口描述
返回群组列表
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/groupList

调用方法

HTTP GET

请求参数

1)参数表

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/groupList
响应参数

1)数据格式

[
  "1",
  "2"
]
3.12. 获取观察及共识节点列表
接口描述
返回指定群组内的共识节点和观察节点列表
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/groupPeers

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/groupPeers
响应参数

1)数据格式

[
    "d822165959a0ed217df6541f1a7dd38b79336ff571dd5f8f85ad76f3e7ec097e1eabd8b03e4a757fd5a9fb0eea905aded56aaf44df83c34b73acb9ab7ac65010",
 "adfa2f9116d7ff68e0deb75307fa1595d636bf097ad1de4fb55cff00e4fef40b453abb30388aa2112bf5cd4c987afe2e047250f7049791aa1ee7091c9e2ab7bb",
 "552398be0eef124c000e632b0b76a48c52b6cfbd547d92c15527c2d1df15fab2bcded48353db22526c3540e4ab2027630722889f20a4a614bb11a7887a85941b",
 "dde0bbf5eb3a731e6da861586e98e088e16e6fdd9afae2f2c213cead20a4f5eaa3910042b70d62266d2350d98a43c1f235c8e0da384448384893857873abdb75"
]
3.13. 获取群组内观察节点列表
接口描述
返回指定群组内的观察节点列表
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/observerList

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/observerList
响应参数

1)数据格式

[  "d822165959a0ed217df6541f1a7dd38b79336ff571dd5f8f85ad76f3e7ec097e1eabd8b03e4a757fd5a9fb0eea905aded56aaf44df83c34b73acb9ab7a165010"
]
3.14. 获取已连接的P2P节点信息
接口描述
返回指定群组内已连接的P2P节点信息
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/peers

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/peers
响应参数

1)数据格式

{
  "blockNumber": 0,
  "endPoint": "string",
  "genesisHash": "string",
  "groupNodeIDInfo": [
    {
      "group": "string",
      "nodeIDList": [
        "string"
      ]
    }
  ],
  "latestHash": "string",
  "nodeID": "string",
  "p2pNodeID": "string",
  "peers": [
    {
      "endPoint": "string",
      "groupNodeIDInfo": [
        {
          "group": "string",
          "nodeIDList": [
            "string"
          ]
        }
      ],
      "p2pNodeID": "string"
    }
  ]
}
3.15. 获取群组内正在处理的交易数
接口描述
获取群组内正在处理的交易数
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/pending-transactions-count

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/pending-transactions-count
响应参数

1)数据格式

0
3.16. 获取共识节点接口
接口描述
返回群组内共识节点列表
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/sealerList

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/sealerList
响应参数

1)数据格式

[
    "d822165959a0ed217df6541f1a7dd38b79336ff571dd5f8f85ad76f3e7ec097e1eabd8b03e4a757fd5a9fb0eea905aded56aaf44df83c34b73acb9ab7ac65010",
 "adfa2f9116d7ff68e0deb75307fa1595d636bf097ad1de4fb55cff00e4fef40b453abb30388aa2112bf5cd4c987afe2e047250f7049791aa1ee7091c9e2ab7bb",
 "552398be0eef124c000e632b0b76a48c52b6cfbd547d92c15527c2d1df15fab2bcded48353db22526c3540e4ab2027630722889f20a4a614bb11a7887a85941b",
 "dde0bbf5eb3a731e6da861586e98e088e16e6fdd9afae2f2c213cead20a4f5eaa3910042b70d62266d2350d98a43c1f235c8e0da384448384893857873abdb75"
]
3.17 区块/交易
接口描述
如果输入块高就返回区块信息,如果输入交易hash就返回交易信息
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/search?input={inputValue}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String
2 查询参数 inputValue int/String 如果输入块高就返回区块信息,如果输入交易hash就返回交易信息

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/search?input=123
响应参数

1)数据格式

{
  "number": 123,
  "hash": "0xa12a4a8d26a15fcff6f67acf94a3fb2c08d4476806009be40fe4026fd622419d",
  "parentHash": "0x898c6b1657d4eb26307b39f248e471498975eb820671c7540fa516e6c7b411e8",
  "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "transactionsRoot": "0xa94acacd692cf3b23e19b429ce89c2016020b2264854fd609ba2b16f0c7d5f73",
  "receiptsRoot": "0x9529b51c1f7ddd178ffd4a65d146b50cfc0beb405a808677dfddd694cf555a09",
  "dbHash": "0x3047354b6776fd1f02911f2c4fc4aa1b215b3df53cc7504a71b5f3bfe12eca3a",
  "stateRoot": "0x3047354b6776fd1f02911f2c4fc4aa1b215b3df53cc7504a71b5f3bfe12eca3a",
  "sealer": "0x1",
  "sealerList": [
    "06269e130f8220ebaa78e67832df0de6b4c5ee3f1b14e64ab2bae26510a4bcf997454b35067c1685d4343e6ad84b45c3b8690a858f2831a9247a97a27166ce1f",
    "65bc44d398d99d95a9d404aa16e4bfbc2f9ebb40f20439ddef8575a139dc3a80310cfc98a035bd59a67cc5f659f519e3e99b855f3d27f21a889c23a14036d0c7",
    "95efafa5197796e7edf647191de83f4259d7cbb060f4bac5868be474037f49144d581c15d8aef9b07d78f18041a5f43c3c26352ebbf5583cd23070358c8fba39",
    "fe57d7b39ed104b4fb2770ae5aad7946bfd377d0eb91ab92a383447e834c3257dec56686551d08178f2d5f40d9fad615293e46c9f5fc23cf187258e121213b1d"
  ],
  "extraData": [],
  "gasLimit": "0",
  "gasUsed": "0",
  "timestamp": "1621928850887",
  "signatureList": [
    {
      "index": "0x3",
      "signature": "0x8549a8adddb9ff2d8d472b7a65ca414a7f10519f59e11244b9e92fed2e30f29cc272938a695ebb1ead579bdaed401b6aa31395890139abe406518471efa55d6afe57d7b39ed104b4fb2770ae5aad7946bfd377d0eb91ab92a383447e834c3257dec56686551d08178f2d5f40d9fad615293e46c9f5fc23cf187258e121213b1d"
    },
    {
      "index": "0x1",
      "signature": "0x0ff480d6c3fe5908c554653376492cba23cfc938bc0847298c9c8b4c140b417be1990d25c0239f9b18e24276e864e1f2ac4beab47ddf5277a767bb7c93e143ed65bc44d398d99d95a9d404aa16e4bfbc2f9ebb40f20439ddef8575a139dc3a80310cfc98a035bd59a67cc5f659f519e3e99b855f3d27f21a889c23a14036d0c7"
    },
    {
      "index": "0x2",
      "signature": "0x50aa1513c390e5e61221418aa46f8dd45e3ce6e8c0a6fa5aa75650517560589590172b1e6cc64e9ba7ab45c964ff925524cecf6c2be0a28ea11426febb69305195efafa5197796e7edf647191de83f4259d7cbb060f4bac5868be474037f49144d581c15d8aef9b07d78f18041a5f43c3c26352ebbf5583cd23070358c8fba39"
    }
  ],
  "transactions": [
    {
      "blockHash": "0xa12a4a8d26a15fcff6f67acf94a3fb2c08d4476806009be40fe4026fd622419d",
      "blockNumber": 123,
      "from": "0x1cd8126354aa951dc8ed083ed91fd31fad1f50d8",
      "gas": "0x5f5e100",
      "hash": "0xbe858390cf0bd94f9d17c6ab5e04a7d354f9482f2568f067bdc2529a0af324db",
      "input": "0x25e85d16000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000803935656661666135313937373936653765646636343731393164653833663432353964376362623036306634626163353836386265343734303337663439313434643538316331356438616566396230376437386631383034316135663433633363323633353265626266353538336364323330373033353863386662613339",
      "nonce": "0x1479caf2ff5f1a6121beac93c85b59c36280ffe6a7f124cbc3d232021fa3307",
      "to": "0x0000000000000000000000000000000000001003",
      "transactionIndex": "0x0",
      "value": "0x0",
      "gasPrice": "0x1",
      "blockLimit": "0x26e",
      "chainId": "0x1",
      "groupId": "0x1",
      "extraData": "0x",
      "signature": {
        "r": "0x36edc104cc5c2c5c992f9804bd3415378f93c18ebc9cdeb7794c08b1c95fd7ad",
        "s": "0xed555fe3a192acc5ea01951f7286f93cff3471e84731a2942968a2fd9a9a14bc",
        "v": "0xd3a0fac51c66adf23bfccc6bb3aaa3d3623040912963ceb818ca2d8b1fb649c64bce64d99a8d9a39158b2c713101dbca10a478131dcae7e42d156e0e69455652",
        "signature": "0x36edc104cc5c2c5c992f9804bd3415378f93c18ebc9cdeb7794c08b1c95fd7aded555fe3a192acc5ea01951f7286f93cff3471e84731a2942968a2fd9a9a14bcd3a0fac51c66adf23bfccc6bb3aaa3d3623040912963ceb818ca2d8b1fb649c64bce64d99a8d9a39158b2c713101dbca10a478131dcae7e42d156e0e69455652"
      }
    }
  ]
}
3.18. 获取群组内同步状态信息
接口描述
获取群组内同步状态信息
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/syncStatus

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/syncStatus
响应参数

1)数据格式

{
  "isSyncing": "false",
  "protocolId": "65545",
  "genesisHash": "1caec77e0ff42af4f045af2ba5503c775c33430085b246374cdd23d1c9191173",
  "nodeId": "fe57d7b39ed104b4fb2770ae5aad7946bfd377d0eb91ab92a383447e834c3257dec56686551d08178f2d5f40d9fad615293e46c9f5fc23cf187258e121213b1d",
  "blockNumber": "232",
  "latestHash": "7f0885a7188bd5c1b3f8c182e00be0e63a3b1653b12752cf8501ddac995e6efc",
  "knownHighestNumber": "232",
  "txPoolSize": "0",
  "peers": [
    {
      "nodeId": "06269e130f8220ebaa78e67832df0de6b4c5ee3f1b14e64ab2bae26510a4bcf997454b35067c1685d4343e6ad84b45c3b8690a858f2831a9247a97a27166ce1f",
      "genesisHash": "1caec77e0ff42af4f045af2ba5503c775c33430085b246374cdd23d1c9191173",
      "blockNumber": "232",
      "latestHash": "7f0885a7188bd5c1b3f8c182e00be0e63a3b1653b12752cf8501ddac995e6efc"
    },
    {
      "nodeId": "65bc44d398d99d95a9d404aa16e4bfbc2f9ebb40f20439ddef8575a139dc3a80310cfc98a035bd59a67cc5f659f519e3e99b855f3d27f21a889c23a14036d0c7",
      "genesisHash": "1caec77e0ff42af4f045af2ba5503c775c33430085b246374cdd23d1c9191173",
      "blockNumber": "232",
      "latestHash": "7f0885a7188bd5c1b3f8c182e00be0e63a3b1653b12752cf8501ddac995e6efc"
    },
    {
      "nodeId": "95efafa5197796e7edf647191de83f4259d7cbb060f4bac5868be474037f49144d581c15d8aef9b07d78f18041a5f43c3c26352ebbf5583cd23070358c8fba39",
      "genesisHash": "1caec77e0ff42af4f045af2ba5503c775c33430085b246374cdd23d1c9191173",
      "blockNumber": "232",
      "latestHash": "7f0885a7188bd5c1b3f8c182e00be0e63a3b1653b12752cf8501ddac995e6efc"
    }
  ],
  "knownLatestHash": "7f0885a7188bd5c1b3f8c182e00be0e63a3b1653b12752cf8501ddac995e6efc"
}
3.19. 刷新前置
接口描述
刷新前置的群组列表,功能与groupList类似
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/refresh

调用方法

HTTP GET

请求参数

1)参数表

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/refresh
响应参数

1)数据格式

{
    "blockNumber": 126,
    "genesisHash": "0xed3350d191d23cbc609c98e920baa583403b9a02fa934df868e7f425cd72f5c3",
    "isSyncing": false,
    "latestHash": "0x49ca6eb004f372c71ed900ec6992582cd107e4f3ea36aaa5a0a78829ebef1f14",
    "nodeId": "d822165959a0ed217df6541f1a7dd38b79336ff571dd5f8f85ad76f3e7ec097e1eabd8b03e4a757fd5a9fb0eea905aded56aaf44df83c34b73acb9ab7ac65010",
    "peers": [
        {
            "blockNumber": 126,
            "genesisHash": "0xed3350d191d23cbc609c98e920baa583403b9a02fa934df868e7f425cd72f5c3",
            "latestHash": "0x49ca6eb004f372c71ed900ec6992582cd107e4f3ea36aaa5a0a78829ebef1f14",
            "nodeId": "552398be0eef124c000e632b0b76a48c52b6cfbd547d92c15527c2d1df15fab2bcded48353db22526c3540e4ab2027630722889f20a4a614bb11a7887a85941b"
        },
        {
            "blockNumber": 126,
            "genesisHash": "0xed3350d191d23cbc609c98e920baa583403b9a02fa934df868e7f425cd72f5c3",
            "latestHash": "0x49ca6eb004f372c71ed900ec6992582cd107e4f3ea36aaa5a0a78829ebef1f14",
            "nodeId": "adfa2f9116d7ff68e0deb75307fa1595d636bf097ad1de4fb55cff00e4fef40b453abb30388aa2112bf5cd4c987afe2e047250f7049791aa1ee7091c9e2ab7bb"
        },
        {
            "blockNumber": 126,
            "genesisHash": "0xed3350d191d23cbc609c98e920baa583403b9a02fa934df868e7f425cd72f5c3",
            "latestHash": "0x49ca6eb004f372c71ed900ec6992582cd107e4f3ea36aaa5a0a78829ebef1f14",
            "nodeId": "dde0bbf5eb3a731e6da861586e98e088e16e6fdd9afae2f2c213cead20a4f5eaa3910042b70d62266d2350d98a43c1f235c8e0da384448384893857873abdb75"
        }
    ],
    "protocolId": 265,
    "txPoolSize": "0"
}
3.20. 获取区块的时间戳与交易量
接口描述

根据块高获取区块的时间戳与区块中的交易数

接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/blockStat/{blockNumber}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组id groupId String 操作的群组编号
2 块高 blockNumber BigInteger

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/blockStat/5
响应参数

1)数据格式

a、成功:

{
  "blockNumber": 5,
  "timestamp": 1617715398371,
  "txCount": 1
}
3.21. 批量获取区块内交易回执接口
接口描述
根据块高批量获取区块交易回执
接口URL

http://localhost:5002/WeBASE-Front/{groupId}/web3/transactionReceipt/{transHash}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组编号 groupId String
2 交易哈希 transHash String

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/transReceipt/batchByNumber/{blockNumber}?start={start}&count={count}
响应参数

2)数据格式

{
  "blockNumber": "string",
  "contractAddress": "string",
  "from": "string",
  "gasUsed": "string",
  "hash": "string",
  "input": "string",
  "logEntries": [
    {
      "address": "string",
      "blockNumber": "string",
      "data": "string",
      "topic": [
        "string"
      ]
    }
  ],
  "message": "string",
  "output": "string",
  "receiptProof": [
    {
      "left": [
        "string"
      ],
      "right": [
        "string"
      ]
    }
  ],
  "status": 0,
  "statusOK": true,
  "to": "string",
  "transactionHash": "string",
  "transactionProof": [
    {
      "left": [
        "string"
      ],
      "right": [
        "string"
      ]
    }
  ],
  "version": "string"
}

4.链上信息接口

4.1. 查询链上信息
接口描述

获取链上信息

接口URL

http://localhost:5002/WeBASE-Front/chain

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 开始日期 beginDate LocalDateTime
2 结束日期 endDate LocalDateTime
3 对比开始日期 contrastBeginDate LocalDateTime
4 对比结束日期 contrastEndDate LocalDateTime
5 间隔 gap int 默认为1
6 群组编号 groupId String 默认为1

2)入参示例

localhost:5002/WeBASE-Front/chain?beginDate=2019-03-13T00:00:00&endDate=2019-03-13T14:34:22&contrastBeginDate=2019-03-13T00:00:00&contrastEndDate=2019-03-13T14:34:22&gap=60&groupId=group
响应参数

1)参数表

序号 输出参数 类型 备注
1 data Array 返回信息列表
1.1 Object 返回信息实体
1.1.1 metricType String 测量类型:blockHeight(块高)、pbftView(pbft视图)、pendingCount(待处理交易数量)
1.1.2 data Object
1.1.2.1 lineDataList Object 指定时间的数据
1.1.2.1.1 timestampList List 时间戳列表
1.1.2.1.2 valueList List 值列表
1.1.2.2 contrastDataList Object 比对时间的数据
1.1.2.2.1 timestampList List 时间戳列表
1.1.2.2.2 valueList List 值列表

2)出参示例

[
	{
		"metricType": "blockHeight",
		"data": {
			"lineDataList": {
				"timestampList": [
					1552406401042,
					1552406701001
				],
				"valueList": [
					747309,
					747309
				]
			},
			"contrastDataList": {
				"timestampList": [
					1552320005000,
					1552320301001
				],
				"valueList": [
					null,
					747309
				]
			}
		}
	},
	{
		"metricType": "pbftView",
		"data": {
			"lineDataList": {
				"timestampList": null,
				"valueList": [
					118457,
					157604
				]
			},
			"contrastDataList": {
				"timestampList": null,
				"valueList": [
					null,
					33298
				]
			}
		}
	}
]
4.2. 分页查询链上信息
接口描述

获取链上信息

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 开始日期 beginDate String
2 结束日期 endDate String
3 分页页数 pageNumber int
4 分页大小 pageSize int
5 群组编号 groupId String 默认为1

2)入参示例

localhost:5002/WeBASE-Front/chain/pagingQuery?groupId=1&pageNumber=1&pageSize=10
响应参数
{
  "code": 0,
  "message": "success",
  "data": [],
  "totalCount": 0
}

5. 交易接口

5.1. 交易处理接口(结合WeBASE-Sign)
接口描述

通过此接口对合约进行调用,前置根据调用的合约方法是否是“constant”方法区分返回信息,“constant”方法为查询,返回要查询的信息。非“constant”方法为发送数据上链,返回块hash、块高、交易hash等信息。

当合约方法为非“constant”方法,要发送数据上链时,此接口需结合WeBASE-Sign使用。通过调用WeBASE-Sign服务的签名接口让相关用户对数据进行签名,拿回签名数据再发送上链。需要调用此接口时,工程配置文件application.yml中的配置”keyServer”需配置WeBASE-Sign服务的ip和端口,并保证WeBASE-Sign服务正常和存在相关用户。

方法入参(funcParam)为JSON数组,多个参数以逗号分隔(参数为数组时同理),示例:

function set(string s) -> ["aa,bb\"cc"]	// 双引号要转义
function set(uint n,bool b) -> [1,true]
function set(bytes b,address[] a) -> ["0x1a",["0x7939E26070BE44E6c4Fc759Ce55C6C8b166d94BE","0xce867fD9afa64175bb50A4Aa0c17fC7C4A3C67D9"]]

查看WeBASE-Front通过本地私钥(测试用户)交易处理接口(非WeBASE-Sign签名交易),可查看其他接口-交易处理接口(本地签名)

接口URL

http://localhost:5002/WeBASE-Front/trans/handleWithSign

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 用户编号 signUserId String 64 WeBASE-Sign用户编号(查询方法可不传)
2 合约名称 contractName String
3 合约地址 contractAddress String
4 方法名 funcName String
5 合约编译后生成的abi文件内容 contractAbi List 合约中单个函数的ABI,若不存在同名函数可以传入整个合约ABI,格式:JSONArray
6 方法参数 funcParam List JSON数组,多个参数以逗号分隔(参数为数组时同理),如:["str1",["arr1","arr2"]]
7 群组ID groupId String 默认为1
8 是否使用cns调用 useCns bool
9 cns名称 cnsName String CNS名称,useCns为true时不能为空
10 cns版本 version String CNS版本,useCns为true时不能为空
11 合约路径 contractPath String

2)数据格式

{
  "cnsName": "string",
  "contractAbi": [
    {}
  ],
  "contractAddress": "string",
  "contractName": "string",
  "contractPath": "string",
  "funcName": "string",
  "funcParam": [
    {}
  ],
  "groupId": "string",
  "signUserId": "string",
  "useCns": true,
  "version": "string"
}

示例:

curl -X POST "http://localhost:5002/WeBASE-Front/trans/handleWithSign" -H "accept: */*" -H "Content-Type: application/json" -d "{\"groupId\":\"1\",\"signUserId\":\"f4975519b0274e6ca8283650a7e1bc07\",\"contractName\":\"HelloWorld\",\"contractPath\":\"/\",\"version\":\"\",\"funcName\":\"set\",\"funcParam\":[\"333\"],\"contractAddress\":\"0xe10441d9179cf0424aae808b51bc85dcbbfe1447\",\"contractAbi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"funcId\":2}],\"useAes\":false,\"useCns\":false,\"cnsName\":\"\"}"
响应参数

a、正确查询交易返回值信息

{"Hi,Welcome!"}

b、正确发送数据上链返回值信息(交易收据)

{
  "transactionHash": "0x69ced0162a0c3892e4eaa3091b831ac3aaeb772c062746b20891ceaf8a4fb429",
  "transactionIndex": "0x0",
  "root": "0x8cbc3f2c0e35a71738909e3b388efa6697084b05badd3a3bd3c64f0575c78c15",
  "blockNumber": "2",
  "blockHash": "0xf58f4f43b3761f4863ad366c4a7e2a812ed68df9f7bcad6b502fd544665e7625",
  "from": "0x9d75e0ee66cfef16897b601624b60413d988ae7d",
  "to": "0x0000000000000000000000000000000000000000",
  "gasUsed": "316449",
  "contractAddress": "0xa8af0ee580d8af674a60341030ddbc45431bc235",
  "logs": [],
  "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "status": "0x0",
  "statusMsg": "None",
  "input": "0x608060405234801561001057600080fd5b506103e3806100206000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d1461005c5780633590b49f146100ec57806362e8d6ce14610155575b600080fd5b34801561006857600080fd5b5061007161016c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100b1578082015181840152602081019050610096565b50505050905090810190601f1680156100de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100f857600080fd5b50610153600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061020e565b005b34801561016157600080fd5b5061016a6102c4565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102045780601f106101d957610100808354040283529160200191610204565b820191906000526020600020905b8154815290600101906020018083116101e757829003601f168201915b5050505050905090565b7f5715c9562eaf8d524d564edb392acddefc81d8133e2fc3b8125a260b1b413fda816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610270578082015181840152602081019050610255565b50505050905090810190601f16801561029d5780820380516001836020036101000a031916815260200191505b509250505060405180910390a180600090805190602001906102c0929190610312565b5050565b6040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061030f929190610312565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061035357805160ff1916838001178555610381565b82800160010185558215610381579182015b82811115610380578251825591602001919060010190610365565b5b50905061038e9190610392565b5090565b6103b491905b808211156103b0576000816000905550600101610398565b5090565b905600a165627a7a72305820f3088deb3d14c6893440e4769f2389e9335e04faa10e6de5b4c93af15d1a34e80029",
  "output": "0x",
  "txProof": null,
  "receiptProof": null,
  "message": null,
  "statusOK": true
}

5.2. 交易处理接口(本地签名)
接口描述

此接口为WeBASE-Front使用本地私钥(页面中的测试用户)进行签名

通过合约信息进行调用,前置根据调用的合约方法是否是“constant”方法区分返回信息,“constant”方法为查询,返回要查询的信息。非“constant”方法为发送数据上链,返回块hash、块高、交易hash等信息。

方法入参(funcParam)为JSON数组,多个参数以逗号分隔(参数为数组时同理),示例:

function set(string s) -> ["aa,bb\"cc"] // 双引号要转义
function set(uint n,bool b) -> [1,true]
function set(bytes b,address[] a) -> ["0x1a",["0x7939E26070BE44E6c4Fc759Ce55C6C8b166d94BE","0xce867fD9afa64175bb50A4Aa0c17fC7C4A3C67D9"]]

查看WeBASE-Front通过WeBASE-Sign交易处理的接口(非本地私钥签名交易),可查看合约接口-交易处理接口(结合WeBASE-Sign)

接口URL

http://localhost:5002/WeBASE-Front/trans/handle

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 用户地址 user String 用户地址,可通过/privateKey接口创建
2 合约名称 contractName String
3 合约地址 contractAddress String
4 方法名 funcName String
5 合约编译后生成的abi文件内容 contractAbi List 合约中单个函数的ABI,若不存在同名函数可以传入整个合约ABI,格式:JSONArray
6 方法参数 funcParam List JSON数组,多个参数以逗号分隔(参数为数组时同理),如:["str1",["arr1","arr2"]],根据所调用的合约方法判断是否必填
7 群组ID groupId String
8 合约路径 contractPath int
9 是否使用cns调用 useCns boolean
10 cns名称 cnsName String CNS名称,useCns为true时不能为空
11 cns版本 version String CNS版本,useCns为true时不能为空
12 是否使用aes useAes boolean

2)数据格式

{
  "cnsName": "string",
  "contractAbi": [
    {}
  ],
  "contractAddress": "string",
  "contractName": "string",
  "contractPath": "string",
  "funcName": "string",
  "funcParam": [
    {}
  ],
  "groupId": "string",
  "useAes": true,
  "useCns": true,
  "user": "string",
  "version": "string"
}

示例:

curl -l -H "Content-type: application/json" -X POST -d '{\"groupId\":\"1\",\"user\":\"0x7bfa3539c8761978f0a2a1f7f240bde97819fb03\",\"contractName\":\"HelloWorld\",\"contractPath\":\"/\",\"version\":\"\",\"funcName\":\"set\",\"funcParam\":[\"333\"],\"contractAddress\":\"0xe10441d9179cf0424aae808b51bc85dcbbfe1447\",\"contractAbi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"funcId\":2}],\"useAes\":false,\"useCns\":false,\"cnsName\":\"\"}' http://10.0.0.1:5002/WeBASE-Front/trans/handle

传入合约abi:

{
	"groupId": "group",
	"user": "0x7bfa3539c8761978f0a2a1f7f240bde97819fb03",
	"contractName": "HelloWorld",
	"contractPath": "/",
	"version": "",
	"funcName": "set",
	"funcParam": ["333"],
	"contractAddress": "0xe10441d9179cf0424aae808b51bc85dcbbfe1447",
	"contractAbi": [{
		"inputs": [{
			"internalType": "string",
			"name": "n",
			"type": "string"
		}],
		"name": "set",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function",
		"funcId": 2
	}],
	"useAes": false,
	"useCns": false,
	"cnsName": ""
}
响应参数

a、正确查询交易返回值信息

{"Hi,Welcome!"}

b、正确发送数据上链返回值信息(交易收据)

{
  "transactionHash": "0x69ced0162a0c3892e4eaa3091b831ac3aaeb772c062746b20891ceaf8a4fb429",
  "transactionIndex": "0x0",
  "root": "0x8cbc3f2c0e35a71738909e3b388efa6697084b05badd3a3bd3c64f0575c78c15",
  "blockNumber": "2",
  "blockHash": "0xf58f4f43b3761f4863ad366c4a7e2a812ed68df9f7bcad6b502fd544665e7625",
  "from": "0x9d75e0ee66cfef16897b601624b60413d988ae7d",
  "to": "0x0000000000000000000000000000000000000000",
  "gasUsed": "316449",
  "contractAddress": "0xa8af0ee580d8af674a60341030ddbc45431bc235",
  "logs": [],
  "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "status": "0x0",
  "statusMsg": "None",
  "input": "0x608060405234801561001057600080fd5b506103e3806100206000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d1461005c5780633590b49f146100ec57806362e8d6ce14610155575b600080fd5b34801561006857600080fd5b5061007161016c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100b1578082015181840152602081019050610096565b50505050905090810190601f1680156100de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100f857600080fd5b50610153600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061020e565b005b34801561016157600080fd5b5061016a6102c4565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102045780601f106101d957610100808354040283529160200191610204565b820191906000526020600020905b8154815290600101906020018083116101e757829003601f168201915b5050505050905090565b7f5715c9562eaf8d524d564edb392acddefc81d8133e2fc3b8125a260b1b413fda816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610270578082015181840152602081019050610255565b50505050905090810190601f16801561029d5780820380516001836020036101000a031916815260200191505b509250505060405180910390a180600090805190602001906102c0929190610312565b5050565b6040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061030f929190610312565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061035357805160ff1916838001178555610381565b82800160010185558215610381579182015b82811115610380578251825591602001919060010190610365565b5b50905061038e9190610392565b5090565b6103b491905b808211156103b0576000816000905550600101610398565b5090565b905600a165627a7a72305820f3088deb3d14c6893440e4769f2389e9335e04faa10e6de5b4c93af15d1a34e80029",
  "output": "0x",
  "txProof": null,
  "receiptProof": null,
  "message": null,
  "statusOK": true
}
5.3. 已签名交易发送

接口描述

发送已签名的交易上链,返回交易收据;可结合/trans/convertRawTxStr/local/trans/convertRawTxStr/withSign接口组装已签名的交易

接口URL

http://localhost:5002/WeBASE-Front/trans/signed-transaction

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 已签名交易编码值 signedStr String /trans/convertRawTxStr/local/trans/convertRawTxStr/withSign接口组装已签名的交易
2 是否同步发送 sync bool
2 群组ID groupId String

2)数据格式

{
  "groupId": "string",
  "signedStr": "string",
  "sync": true
}
响应参数

1)数据格式

{
	"transactionHash": "0xd1234cdb673447b654874d05d4ed98be89f3cb7c5a6c12bc51e1274a03af029c",
	"transactionIndex": "0x0",
	"root": "0xeecf2b6bbb028e38e704ca88fe1d9f5e3d43197b32c3336d3273d86fb3a135f0",
	"blockNumber": "0xa9",
	"blockHash": "0x906bdf0747ba68c03e6cf73463db62fdbd8ab8debc149f890475775d7c6a8af7",
	"from": "0x7bfa3539c8761978f0a2a1f7f240bde97819fb03",
	"to": "0xe10441d9179cf0424aae808b51bc85dcbbfe1447",
	"gasUsed": "0x710b",
	"contractAddress": "0x0000000000000000000000000000000000000000",
	"logs": [],
	"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
	"status": "0x0",
	"statusMsg": "None",
	"input": "0x3590b49f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000033333330000000000000000000000000000000000000000000000000000000000",
	"output": "0x",
	"txProof": null,
	"receiptProof": null,
	"message": "Success",
	"statusOK": true
}
5.4. 已编码查询交易发送
接口描述

发送已编码的查询交易,返回合约的返回值;其中encodeStr字段可通过/trans/encodeFunction接口获取合约函数的编码值

接口URL

http://localhost:5002/WeBASE-Front/trans/query-transaction

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 合约函数编码值 encodeStr String 可通过/trans/encodeFunction接口获取合约函数的编码值
2 合约地址 contractAddress String
3 群组ID groupId String
4 合约名 funcName String
5 合约abi contractAbi String
6 用户地址 userAddress String

2)数据格式

{
  "contractAbi": "string",
  "contractAddress": "string",
  "encodeStr": "string",
  "funcName": "string",
  "groupId": "string",
  "userAddress": "string"
}
响应参数

Object返回类型

{"Hi,Welcome!"}
5.5. Hash计算
接口描述

计算HASH和签名值

接口URL

http://localhost:5002/WeBASE-Front/trans/signMessageHash

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 用户地址 user String 用户地址,可通过/privateKey接口创建
2 Hash值 hash String
3 群组id groupId String
4 签名用户id signUserId String

2)数据格式

{
  "groupId": "string",
  "hash": "string",
  "signUserId": "string",
  "user": "string"
}
响应参数

1)数据格式

{
  "v": 0,
  "r": "0x2a76a45bcf1113615f796cc01b23c57f81f20ce79500080bb34c7994ed04de06",
  "s": "0x4f111eb37720e2618d8906368c825fd3cbe89b2781cb678efafb42399594a580",
  "p": "0x4405f9d5d6ccff709b6543bc8ac24cbb649d3267a66db19ab8f85f3b884a8505f086c581490e7e50558879abde9c4d07fc2daab92f81c0eb4b805af3c8895cfc"
}
5.6. 获取签名后的交易体编码值(结合WeBASE-Sign)

接口描述

构造交易体RawTransaction并将交易体编码,通过传入的signUserId签名服务的用户ID,使用对应的私钥对交易提进行签名后,返回已签名的交易体编码值(十六进制字符串)

签名后的交易的编码值可以直接通过/trans/signed-transaction接口提交到链上

接口URL

http://localhost:5002/WeBASE-Front/trans/convertRawTxStr/withSign

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 用户编号 signUserId String 64 WeBASE-Sign用户编号,若为空则返回未签名交易提编码值
2 合约名称 contractName String
3 合约地址 contractAddress String
4 方法名 funcName String
5 合约编译后生成的abi文件内容 contractAbi List 合约中单个函数的ABI,若不存在同名函数可以传入整个合约ABI,格式:JSONArray
6 方法参数 funcParam List JSON数组,多个参数以逗号分隔(参数为数组时同理),如:["str1",["arr1","arr2"]]
7 群组ID groupId String
8 是否使用cns调用 useCns bool
9 cns名称 cnsName String CNS名称,useCns为true时不能为空
10 cns版本 version String CNS版本,useCns为true时不能为空
11 合约路径 contractPath String

2)数据格式

{
  "cnsName": "string",
  "contractAbi": [
    {}
  ],
  "contractAddress": "string",
  "contractName": "string",
  "contractPath": "string",
  "funcName": "string",
  "funcParam": [
    {}
  ],
  "groupId": "string",
  "signUserId": "string",
  "useCns": true,
  "version": "string"
}
响应参数
0xf9012da002c1442b6ce974291ec317db9859e8310de46f6636d105f19fee67f10ac60b2f018405f5e10082029e94e10441d9179cf0424aae808b51bc85dcbbfe144780b8643590b49f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000033333330000000000000000000000000000000000000000000000000000000000010180b8407d3efe268051e49350d877eaba7bbe6369a44263aec6e47fcba2ac1aff849261e833361bc67befbf4566894478c011dcae3e06818a381401751d1bf8bceecedaa01605fb8fcb546b0dc79e1da004a8323b151d1f569e10cae85a3f62bad5d7150fa0d77282eb650e0f52956693177717eb31cfddcada0681973a6aed9c46f3d8eb4d
5.7. 获取签名后的交易体编码值(本地签名)

接口描述

构造交易体RawTransaction并将交易体编码,并通过传入的user地址的私钥对交易提进行签名后,返回已签名的交易体编码值(十六进制字符串)

签名后的交易的编码值可以直接通过/trans/signed-transaction接口提交到链上

接口URL

http://localhost:5002/WeBASE-Front/trans/convertRawTxStr/local

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 用户地址 user String 用户地址,可通过/privateKey接口创建。若user为空,则返回未签名交易编码值
2 合约名称 contractName String
3 合约地址 contractAddress String
4 方法名 funcName String
5 合约编译后生成的abi文件内容 contractAbi List 合约中单个函数的ABI,若不存在同名函数可以传入整个合约ABI,格式:JSONArray
6 方法参数 funcParam List JSON数组,多个参数以逗号分隔(参数为数组时同理),如:["str1",["arr1","arr2"]],根据所调用的合约方法判断是否必填
7 群组ID groupId String
8 合约路径 contractPath int
9 是否使用cns调用 useCns bool
10 cns名称 cnsName String CNS名称,useCns为true时不能为空
11 cns版本 version String CNS版本,useCns为true时不能为空
12 是否使用aes useAes bool

2)数据格式

{
  "cnsName": "string",
  "contractAbi": [
    {}
  ],
  "contractAddress": "string",
  "contractName": "string",
  "contractPath": "string",
  "funcName": "string",
  "funcParam": [
    {}
  ],
  "groupId": "string",
  "useAes": true,
  "useCns": true,
  "user": "string",
  "version": "string"
}

示例:

{
  "cnsName": "string",
  "contractAbi": [
    {}
  ],
  "contractAddress": "string",
  "contractName": "string",
  "contractPath": "string",
  "funcName": "string",
  "funcParam": [
    {}
  ],
  "groupId": "string",
  "useAes": true,
  "useCns": true,
  "user": "string",
  "version": "string"
}
响应参数

1)数据格式

0xf9012da001071041dddc1b3c553b48c0fbefecc07f3812f5ce4004d47708f1c3342844db018405f5e10082029d94e10441d9179cf0424aae808b51bc85dcbbfe144780b8643590b49f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000033333330000000000000000000000000000000000000000000000000000000000010180b84083bb5313e3dd7825b8b3e32d73aa8aedf9f9a8fcf435e5c37edfe4645c1af4211c12e1368024336a576f26ed624407da0b94e0bc5760514543c0b7a38fa03a7da0972843d0879ffdbdae733e8707896a532e5e1a3c7262cb84db657dd34f09111ba0786106465fe0fd2383588693cafef8934df62b188c6bb5a74eb6b9f23adaba32
5.8. 获取合约函数的编码值

接口描述

构造合约函数的编码值,适用于查询交易,合约函数的编码值可以直接通过/trans/query-transaction接口提交到链上

接口URL

http://localhost:5002/WeBASE-Front/trans/encodeFunction

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 方法名 funcName String
2 合约编译后生成的abi文件内容 contractAbi List 合约中单个函数的ABI,若不存在同名函数可以传入整个合约ABI,格式:JSONArray
3 方法参数 funcParam List JSON数组,多个参数以逗号分隔(参数为数组时同理),如:["str1",["arr1","arr2"]],根据所调用的合约方法判断是否必填,为空则使用[]空数组代替
4 群组编号 groupId String

2)数据格式

{
  "contractAbi": [
    {}
  ],
  "funcName": "string",
  "funcParam": [
    {}
  ],
  "groupId": "string"
}

示例:

响应参数

1)数据格式

0x299f7f9d

6. 系统管理接口

使用FISCO BCOS v2.5.0 与 WeBASE-Front v1.4.1 (及)以上版本将使用预编译合约中的ChainGovernance接口(从本章节接口6.13开始),详情可参考FISCO BCOS基于角色的权限控制

6.1. 查询系统配置接口
接口描述

根据群组id获取系统配置SystemConfig的list列表,目前只支持tx_count_limit, tx_gas_limit两个参数。

接口URL

http://localhost:5002/WeBASE-Front/sys/config/list?groupId={groupId}&pageSize={pageSize}&pageNumber={pageNumber}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组ID groupId String 节点所属群组ID
2 分页大小 pageSize int 默认为10
3 分页页码 pageNumber int 默认为1

2)数据格式

http://localhost:5002/WeBASE-Front/sys/config/list?groupId=1&pageSize=5&pageNumber=1
响应参数

1)数据格式

{
    "code": 0,
    "message": "success",
    "data": [
        {
            "id": 6,
            "groupId": 1,
            "fromAddress": "0x",
            "configKey": "tx_gas_limit",
            "configValue": "300000000"
        },
        {
            "id": 5,
            "groupId": 1,
            "fromAddress": "0xd0b56b4ce0e8ce5e064f896d9ad1c16b2603f285",
            "configKey": "tx_count_limit",
            "configValue": "10002"
        }
    ],
    "totalCount": 2
}
6.2. 设置系统配置接口
接口描述

系统配置管理员设置系统配置,目前只支持tx_count_limit, tx_gas_limit两个参数。

接口URL

http://localhost:5002/WeBASE-Front/sys/config

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组ID groupId String 节点所属群组ID
2 管理员地址 fromAddress String
3 配置的键 configKey String 目前类型两种(tx_count_limit, tx_gas_limit,用户可自定义key如tx_gas_price
4 配置的值 configValue String tx_gas_limit范围为 [100000, 2147483647]
5 签名用户Id signUserId String

2)数据格式

{
  "configKey": "string",
  "configValue": "string",
  "fromAddress": "string",
  "groupId": "string",
  "signUserId": "string"
}

示例:

curl -l -H "Content-type: application/json" -X POST -d '{"groupId": 1, "fromAddress": "0xd5bba8fe456fce310f529edecef902e4b63129b1", "configKey": "tx_count_limit", "configValue": "1001"}' http://10.0.0.1:5002/WeBASE-Front/sys/config
响应参数

a、成功:

{
    "code": 0,
    "message": "success"
}

b、失败:

{
    "code": -50000,
    "message": "permission denied"
}
6.3. 查询节点接口(节点管理)
接口描述

获取节点的list列表,列表包含节点id,节点共识状态。

注:接口返回所有的共识/观察节点(无论运行或停止),以及正在运行的游离节点

接口URL

http://localhost:5002/WeBASE-Front/precompiled/consensus/list?groupId={groupId}&pageSize={pageSize}&pageNumber={pageNumber}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组ID groupId String 节点所属群组ID
2 分页大小 pageSize int 默认为10
3 分页页码 pageNumber int 默认为1

2)数据格式

http://localhost:5002/WeBASE-Front/precompiled/consensus/list?groupId=group&pageSize=5&pageNumber=1
响应参数

1)数据格式

{
    "code": 0,
    "message": "success",
    "data": [
        {
            "nodeId": "13e0f2b94cbce924cc3737385a38587939e809fb786c4fc34a6ba3ea97693bccfa173b352ac41f1dbb97e9e4910ccbec1df38ad4020cef3b2044e833188adad9",
            "nodeType": "sealer"
        },
        {
            "nodeId": "bce4b2269c25c2cdba30155396bfe90af08c3c08cff205213477683117e4243ebe26588479519e636a5d5d93545cab778435cacacc41993f28f58f60fa5ceb72",
            "nodeType": "sealer"
        },
        {
            "nodeId": "e815cc5637cb8c3274c83215c680822e4a0110d0a8315fcf03e43e8e3944edd758c8b173c4e0076f599aa1f853fa207d47cc95d201ae8d0206b71ad5aa8c3f59",
            "nodeType": "sealer"
        }
    ],
    "totalCount": 3
}
6.4. 设置节点共识状态接口(节点管理)
接口描述

节点管理相关接口,可用于节点三种共识状态的切换。分别是共识节点sealer, 观察节点observer, 游离节点remove

接口URL

http://localhost:5002/WeBASE-Front/precompiled/consensus

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组ID groupId String 节点所属群组ID
2 管理员地址 fromAddress String
3 节点类型 nodeType String 节点类型:observer,sealer,remove
4 节点ID nodeId String 节点id,从节点根目录/conf/node.id获取
5 签名用户Id signUserId String
6 权重 weight int

2)数据格式

{
  "fromAddress": "string",
  "groupId": "string",
  "nodeId": "string",
  "nodeType": "string",
  "signUserId": "string",
  "weight": 0
}

示例:

curl -l -H "Content-type: application/json" -X POST -d '{"groupId": 1, "fromAddress": "0xd5bba8fe456fce310f529edecef902e4b63129b1", "configKey": "tx_count_limit", "configValue": "1001"}' http://10.0.0.1:5002/WeBASE-Front/sys/config
响应参数

a、成功:

{
    "code": 0,
    "message": "success"
}

b、失败:

{
    "code": -50000,
    "message": "permission denied"
}

7. Abi管理接口

7.1. 获取Abi信息
接口描述

根据abiId获取abi信息

接口URL

http://localhost:5002/WeBASE-Front/abi/{abiId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 abi编号 abiId Long abi编号

2)数据格式

http://localhost:5002/WeBASE-Front/abi/{abiId}
响应参数

1)数据格式

a、成功:

{
  "code": 0,
  "message": "success",
  "data": {
    "abiId": 1,
    "groupId": 1,
    "contractName": "TTT",
    "contractAddress": "0x3214227e87bccca63893317febadd0b51ade735e",
    "contractAbi": "[{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"setSender\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"SetName\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"uint256[2]\"}],\"name\":\"EventList\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SetSender\",\"type\":\"event\"}]",
    "contractBin": "608060405260043610610057576000357...",
    "createTime": "2020-05-18 10:59:02",
    "modifyTime": "2020-05-18 10:59:02"
  }
}
7.2. 获取Abi信息分页列表
接口描述

获取abi信息的列表

接口URL

http://localhost:5002/WeBASE-Front/abi/list/{groupId}/{pageNumber}/{pageSize}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组id groupId String 群组编号
2 页码 pageNumber int
3 页大小 pageSize int

2)数据格式

http://localhost:5002/WeBASE-Front/abi/list/{groupId}/{pageNumber}/{pageSize}
响应参数

1)数据格式

a、成功:

{
  "code": 0,
  "message": "success",
  "data": [
    {
      "abiId": 1,
      "groupId": 1,
      "contractName": "TTT",
      "contractAddress": "0x3214227e87bccca63893317febadd0b51ade735e",
      "contractAbi": "[{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"setSender\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"SetName\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"uint256[2]\"}],\"name\":\"EventList\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SetSender\",\"type\":\"event\"}]",
      "contractBin": "608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463fffff...29",
      "createTime": "2020-05-18 10:59:02",
      "modifyTime": "2020-05-18 10:59:02"
    }
  ],
  "totalCount": 1
}
7.3. 导入已部署合约的abi
接口描述

将其他平台已部署的合约导入到本平台进行管理

接口URL

http://localhost:5002/WeBASE-Front/abi

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约地址 contractAddress String 合约地址
3 合约名 contractName String
4 合约abi contractAbi List 合约的ABI
5 abi编号 abiId Long

2)数据格式

{
  "abiId": 0,
  "contractAbi": [
    {}
  ],
  "contractAddress": "string",
  "contractName": "string",
  "groupId": "string"
}
响应参数

1)数据格式

成功:

{
    "code": 0,
    "message": "success"
}
7.4. 修改已导入的合约abi
接口描述

更新已导入的合约abi内容

接口URL

http://localhost:5002/WeBASE-Front/abi

调用方法

HTTP PUT

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 abi编号 abiId Long
2 所属群组 groupId String
3 合约地址 contractAddress String 合约地址
4 合约名 contractName String
5 合约abi contractAbi List 合约的ABI

2)数据格式

{
  "abiId": 0,
  "contractAbi": [
    {}
  ],
  "contractAddress": "string",
  "contractName": "string",
  "groupId": "string"
}
响应参数

1)数据格式

成功:

{
    "code": 0,
    "message": "success"
}
7.5. 修改合约abi
接口描述

删除合约abi

接口URL

http://localhost:5002/WeBASE-Front/abi/{abiId}

调用方法

HTTP DELETE

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 abi编号 abiId Long

2)数据格式

{
    "abiId": 1
}
响应参数

1)数据格式

成功:

{
    "code": 0,
    "message": "success"
}

8. 其他接口

8.1. 查询是否使用国密
接口描述

获取WeBASE-Front的encryptType,即是否使用国密版;

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 群组Id groupId String

2)数据格式

http://localhost:5002/WeBASE-Front/group/web3/encrypt
响应参数

1)数据格式

a、成功:

{
    1 // 1: 国密版,0: 非国密
}
8.2. 查询WeBASE-Front版本
接口描述

获取WeBASE-Front的版本号

接口URL

http://localhost:5002/WeBASE-Front/version

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
- - -

2)数据格式

http://localhost:5002/WeBASE-Front/version
响应参数

1)数据格式

a、成功:

v1.4.0
8.3. 查询前置连接的WeBASE-Sign版本
接口描述

获取WeBASE-Front的所连接的WeBASE-Sign的版本号

接口URL

http://localhost:5002/WeBASE-Front/version/sign

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
- - -

2)数据格式

http://localhost:5002/WeBASE-Front/version/sign
响应参数

1)数据格式

a、成功:

v1.4.0
8.4. 查询前置包含的solidity v0.6.10文件
接口描述

获取WeBASE-Front的本地conf/solcjs中包含的solidity 0.6.10的js文件列表

如需要使用solidity 0.6.10,则需要手动下载CDN中solidity的v0.6.10.js(国密v0.6.10-gm.js),并在WeBASE-Front的conf文件夹中创建solcjs文件夹,并将js文件复制到该文件夹。

注:使用webase-front.zip安装包直接部署则不需要手动放置js文件

接口URL

http://localhost:5002/WeBASE-Front/solc/list

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
- - -

2)数据格式

http://localhost:5002/WeBASE-Front/solc/list
响应参数

1)数据格式

a、成功:

{
    "code":0,
    "message":"success",
    "data":["v0.6.10.js","v0.6.10-gm.js"]
}

9. 合约仓库

9.1. 获取合约仓库列表
接口描述
返回合约仓库信息列表
接口URL

http://localhost:5002/WeBASE-Front/contractStore/getContractStoreList

调用方法

HTTP GET

请求参数

1)参数表

2)数据格式

http://localhost:5002/WeBASE-Front/contractStore/getContractStoreList
响应参数

1)数据格式

{
  "code": 0,
  "message": "success",
  "data": [
    {
      "storeId": 1,
      "storeName": "工具箱",
      "storeName_en": "Toolbox",
      "storeType": "1",
      "storeIcon": "toolboxId",
      "storeDesc": "工具箱中有常用的工具合约",
      "storeDetail": "工具箱中有常用的工具合约",
      "storeDesc_en": "Toolbox Contract suite",
      "storeDetail_en": "Toolbox Contract suite",
      "createTime": "2021-01-20 18:02:10",
      "modifyTime": "2021-01-20 18:02:10"
    },
    {
      "storeId": 2,
      "storeName": "存证应用",
      "storeName_en": "Evidence",
      "storeType": "2",
      "storeIcon": "evidenceId",
      "storeDesc": "一套区块链存证合约",
      "storeDetail": "一套区块链存证合约",
      "storeDesc_en": "Evidence Contract suite",
      "storeDetail_en": "Evidence Contract suite",
      "createTime": "2021-01-20 18:02:10",
      "modifyTime": "2021-01-20 18:02:10"
    },
    {
      "storeId": 3,
      "storeName": "积分应用",
      "storeName_en": "Points",
      "storeType": "3",
      "storeIcon": "pointsId",
      "storeDesc": "一套积分合约",
      "storeDetail": "一套积分合约",
      "storeDesc_en": "Points Contract suite",
      "storeDetail_en": "Points Contract suite",
      "createTime": "2021-01-20 18:02:10",
      "modifyTime": "2021-01-20 18:02:10"
    }
  ]
}
9.2. 根据仓库编号获取仓库信息
接口描述
返回合约仓库信息
接口URL

http://localhost:5002/WeBASE-Front/contractStore/getContractFolderById/{storeId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 仓库编号 storeId int

2)数据格式

http://localhost:5002/WeBASE-Front/contractStore/getContractStoreById/1
响应参数

1)数据格式

{
  "code": 0,
  "message": "success",
  "data": {
    "storeId": 1,
    "storeName": "工具箱",
    "storeName_en": "Toolbox",
    "storeType": "1",
    "storeIcon": "toolboxId",
    "storeDesc": "工具箱中有常用的工具合约",
    "storeDetail": "工具箱中有常用的工具合约",
    "storeDesc_en": "Toolbox Contract suite",
    "storeDetail_en": "Toolbox Contract suite",
    "createTime": "2021-01-20 18:02:10",
    "modifyTime": "2021-01-20 18:02:10"
  }
}
9.3. 根据仓库编号获取合约文件夹信息
接口描述
返回合约文件夹信息
接口URL

http://localhost:5002/WeBASE-Front/contractStore/getContractFolderById/{storeId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 仓库编号 storeId int

2)数据格式

http://localhost:5002/WeBASE-Front/contractStore/getFolderItemListByStoreId/2
响应参数

1)数据格式

{
  "code": 0,
  "message": "success",
  "data": [
    {
      "contractFolderId": 2,
      "storeId": 2,
      "contractFolderName": "Evidence",
      "contractFolderDesc": "Evidence",
      "contractFolderDetail": "Evidence",
      "contractFolderDesc_en": "Evidence",
      "contractFolderDetail_en": "Evidence",
      "createTime": "2021-01-20 18:02:10",
      "modifyTime": "2021-01-20 18:02:10"
    }
  ]
}
9.4. 根据合约文件夹编号获取合约文件夹信息
接口描述
返回合约文件夹信息
接口URL

http://localhost:5002/WeBASE-Front/contractStore/getContractFolderById/{contractFolderId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 合约文件夹编号 contractFolderId int

2)数据格式

http://localhost:5002/WeBASE-Front/contractStore/getContractFolderById/2
响应参数

1)数据格式

{
  "code": 0,
  "message": "success",
  "data": {
    "contractFolderId": 2,
    "storeId": 2,
    "contractFolderName": "Evidence",
    "contractFolderDesc": "Evidence",
    "contractFolderDetail": "Evidence",
    "contractFolderDesc_en": "Evidence",
    "contractFolderDetail_en": "Evidence",
    "createTime": "2021-01-20 18:02:10",
    "modifyTime": "2021-01-20 18:02:10"
  }
}
9.5. 根据文件夹编号获取合约列表
接口描述
返回合约信息列表
接口URL

http://localhost:5002/WeBASE-Front/contractStore/getContractItemByFolderId/{folderId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 文件夹编号 folderId int

2)数据格式

http://localhost:5002/WeBASE-Front/contractStore/getContractItemByFolderId/2
响应参数

1)数据格式

{
  "code": 0,
  "message": "success",
  "data": [
    {
      "contractId": 4,
      "contractFolderId": 2,
      "contractName": "Evidence",
      "contractDesc": "Evidence",
      "contractSrc": "cHJhZ21hIHNvbGlkaXR5IF4wLjQuNDsKY29udHJhY3QgRXZpZGVuY2VTaWduZXJzRGF0YUFCSXsgZnVuY3Rpb24gdmVyaWZ5KGFkZHJlc3MgYWRkcilwdWJsaWMgY29uc3RhbnQgcmV0dXJucyhib29sKXt9CmZ1bmN0aW9uIGdldFNpZ25lcih1aW50IGluZGV4KXB1YmxpYyBjb25zdGFudCByZXR1cm5zKGFkZHJlc3Mpe30gCmZ1bmN0aW9uIGdldFNpZ25lcnNTaXplKCkgcHVibGljIGNvbnN0YW50IHJldHVybnModWludCl7fQp9Cgpjb250cmFjdCBFdmlkZW5jZXsKICAgIAogICAgc3RyaW5nIGV2aWRlbmNlOwogICAgc3RyaW5nIGV2aWRlbmNlSW5mbzsKICAgIHN0cmluZyBldmlkZW5jZUlkOwogICAgdWludDhbXSBfdjsKICAgIGJ5dGVzMzJbXSBfcjsKICAgIGJ5dGVzMzJbXSBfczsKICAgIGFkZHJlc3NbXSBzaWduZXJzOwogICAgYWRkcmVzcyBwdWJsaWMgc2lnbmVyc0FkZHI7CiAgICAKICAgICAgICBldmVudCBhZGRTaWduYXR1cmVzRXZlbnQoc3RyaW5nIGV2aSwgc3RyaW5nIGluZm8sIHN0cmluZyBpZCwgdWludDggdiwgYnl0ZXMzMiByLCBieXRlczMyIHMpOwogICAgICAgIGV2ZW50IG5ld1NpZ25hdHVyZXNFdmVudChzdHJpbmcgZXZpLCBzdHJpbmcgaW5mbywgc3RyaW5nIGlkLCB1aW50OCB2LCBieXRlczMyIHIsIGJ5dGVzMzIgcyxhZGRyZXNzIGFkZHIpOwogICAgICAgIGV2ZW50IGVycm9yTmV3U2lnbmF0dXJlc0V2ZW50KHN0cmluZyBldmksIHN0cmluZyBpbmZvLCBzdHJpbmcgaWQsIHVpbnQ4IHYsIGJ5dGVzMzIgciwgYnl0ZXMzMiBzLGFkZHJlc3MgYWRkcik7CiAgICAgICAgZXZlbnQgZXJyb3JBZGRTaWduYXR1cmVzRXZlbnQoc3RyaW5nIGV2aSwgc3RyaW5nIGluZm8sIHN0cmluZyBpZCwgdWludDggdiwgYnl0ZXMzMiByLCBieXRlczMyIHMsYWRkcmVzcyBhZGRyKTsKICAgICAgICBldmVudCBhZGRSZXBlYXRTaWduYXR1cmVzRXZlbnQoc3RyaW5nIGV2aSwgc3RyaW5nIGluZm8sIHN0cmluZyBpZCwgdWludDggdiwgYnl0ZXMzMiByLCBieXRlczMyIHMpOwogICAgICAgIGV2ZW50IGVycm9yUmVwZWF0U2lnbmF0dXJlc0V2ZW50KHN0cmluZyBldmksIHN0cmluZyBpZCwgdWludDggdiwgYnl0ZXMzMiByLCBieXRlczMyIHMsIGFkZHJlc3MgYWRkcik7CgogICAgZnVuY3Rpb24gQ2FsbFZlcmlmeShhZGRyZXNzIGFkZHIpIHB1YmxpYyBjb25zdGFudCByZXR1cm5zKGJvb2wpIHsKICAgICAgICByZXR1cm4gRXZpZGVuY2VTaWduZXJzRGF0YUFCSShzaWduZXJzQWRkcikudmVyaWZ5KGFkZHIpOwogICAgfQoKICAgICAgIGZ1bmN0aW9uIEV2aWRlbmNlKHN0cmluZyBldmksIHN0cmluZyBpbmZvLCBzdHJpbmcgaWQsIHVpbnQ4IHYsIGJ5dGVzMzIgciwgYnl0ZXMzMiBzLCBhZGRyZXNzIGFkZHIsIGFkZHJlc3Mgc2VuZGVyKSBwdWJsaWMgewogICAgICAgc2lnbmVyc0FkZHIgPSBhZGRyOwogICAgICAgaWYoQ2FsbFZlcmlmeShzZW5kZXIpKQogICAgICAgewogICAgICAgICAgIGV2aWRlbmNlID0gZXZpOwogICAgICAgICAgIGV2aWRlbmNlSW5mbyA9IGluZm87CiAgICAgICAgICAgZXZpZGVuY2VJZCA9IGlkOwogICAgICAgICAgIF92LnB1c2godik7CiAgICAgICAgICAgX3IucHVzaChyKTsKICAgICAgICAgICBfcy5wdXNoKHMpOwogICAgICAgICAgIHNpZ25lcnMucHVzaChzZW5kZXIpOwogICAgICAgICAgIG5ld1NpZ25hdHVyZXNFdmVudChldmksaW5mbyxpZCx2LHIscyxhZGRyKTsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgICBlcnJvck5ld1NpZ25hdHVyZXNFdmVudChldmksaW5mbyxpZCx2LHIscyxhZGRyKTsKICAgICAgIH0KICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0RXZpZGVuY2VJbmZvKCkgcHVibGljIGNvbnN0YW50IHJldHVybnMoc3RyaW5nKXsKICAgICAgICAgICAgcmV0dXJuIGV2aWRlbmNlSW5mbzsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRFdmlkZW5jZSgpIHB1YmxpYyBjb25zdGFudCByZXR1cm5zKHN0cmluZyxzdHJpbmcsc3RyaW5nLHVpbnQ4W10sYnl0ZXMzMltdLGJ5dGVzMzJbXSxhZGRyZXNzW10pewogICAgICAgIHVpbnQgbGVuZ3RoID0gRXZpZGVuY2VTaWduZXJzRGF0YUFCSShzaWduZXJzQWRkcikuZ2V0U2lnbmVyc1NpemUoKTsKICAgICAgICAgYWRkcmVzc1tdIG1lbW9yeSBzaWduZXJMaXN0ID0gbmV3IGFkZHJlc3NbXShsZW5ndGgpOwogICAgICAgICBmb3IodWludCBpPSAwIDtpPGxlbmd0aCA7aSsrKQogICAgICAgICB7CiAgICAgICAgICAgICBzaWduZXJMaXN0W2ldID0gKEV2aWRlbmNlU2lnbmVyc0RhdGFBQkkoc2lnbmVyc0FkZHIpLmdldFNpZ25lcihpKSk7CiAgICAgICAgIH0KICAgICAgICByZXR1cm4oZXZpZGVuY2UsZXZpZGVuY2VJbmZvLGV2aWRlbmNlSWQsX3YsX3IsX3Msc2lnbmVyTGlzdCk7CiAgICB9CgogICAgZnVuY3Rpb24gYWRkU2lnbmF0dXJlcyh1aW50OCB2LCBieXRlczMyIHIsIGJ5dGVzMzIgcykgcHVibGljIHJldHVybnMoYm9vbCkgewogICAgICAgIGZvcih1aW50IGk9IDAgO2k8c2lnbmVycy5sZW5ndGggO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKG1zZy5zZW5kZXIgPT0gc2lnbmVyc1tpXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoIF92W2ldID09IHYgJiYgX3JbaV0gPT0gciAmJiBfc1tpXSA9PSBzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGFkZFJlcGVhdFNpZ25hdHVyZXNFdmVudChldmlkZW5jZSxldmlkZW5jZUluZm8sZXZpZGVuY2VJZCx2LHIscyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVwZWF0U2lnbmF0dXJlc0V2ZW50KGV2aWRlbmNlLGV2aWRlbmNlSWQsdixyLHMsbXNnLnNlbmRlcik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgIGlmKENhbGxWZXJpZnkobXNnLnNlbmRlcikpCiAgICAgICB7CiAgICAgICAgICAgIF92LnB1c2godik7CiAgICAgICAgICAgIF9yLnB1c2gocik7CiAgICAgICAgICAgIF9zLnB1c2gocyk7CiAgICAgICAgICAgIHNpZ25lcnMucHVzaChtc2cuc2VuZGVyKTsKICAgICAgICAgICAgYWRkU2lnbmF0dXJlc0V2ZW50KGV2aWRlbmNlLGV2aWRlbmNlSW5mbyxldmlkZW5jZUlkLHYscixzKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgICAgZXJyb3JBZGRTaWduYXR1cmVzRXZlbnQoZXZpZGVuY2UsZXZpZGVuY2VJbmZvLGV2aWRlbmNlSWQsdixyLHMsbXNnLnNlbmRlcik7CiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBnZXRTaWduZXJzKClwdWJsaWMgY29uc3RhbnQgcmV0dXJucyhhZGRyZXNzW10pCiAgICB7CiAgICAgICAgIHVpbnQgbGVuZ3RoID0gRXZpZGVuY2VTaWduZXJzRGF0YUFCSShzaWduZXJzQWRkcikuZ2V0U2lnbmVyc1NpemUoKTsKICAgICAgICAgYWRkcmVzc1tdIG1lbW9yeSBzaWduZXJMaXN0ID0gbmV3IGFkZHJlc3NbXShsZW5ndGgpOwogICAgICAgICBmb3IodWludCBpPSAwIDtpPGxlbmd0aCA7aSsrKQogICAgICAgICB7CiAgICAgICAgICAgICBzaWduZXJMaXN0W2ldID0gKEV2aWRlbmNlU2lnbmVyc0RhdGFBQkkoc2lnbmVyc0FkZHIpLmdldFNpZ25lcihpKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNpZ25lckxpc3Q7CiAgICB9Cn0=",
      "contractDesc_en": "Evidence",
      "createTime": "2021-01-20 18:02:10",
      "modifyTime": "2021-01-20 18:02:10"
    },
    {
      "contractId": 5,
      "contractFolderId": 2,
      "contractName": "EvidenceSignersData",
      "contractDesc": "EvidenceSignersData",
      "contractSrc": "cHJhZ21hIHNvbGlkaXR5IF4wLjQuNDsKaW1wb3J0ICJFdmlkZW5jZS5zb2wiOwoKY29udHJhY3QgRXZpZGVuY2VTaWduZXJzRGF0YXsKICAgICAgICBhZGRyZXNzW10gc2lnbmVyczsKCQlldmVudCBuZXdFdmlkZW5jZUV2ZW50KGFkZHJlc3MgYWRkcik7CiAgICAgICAgZnVuY3Rpb24gbmV3RXZpZGVuY2Uoc3RyaW5nIGV2aSwgc3RyaW5nIGluZm8sc3RyaW5nIGlkLHVpbnQ4IHYsIGJ5dGVzMzIgcixieXRlczMyIHMpcHVibGljIHJldHVybnMoYWRkcmVzcykKICAgICAgICB7CiAgICAgICAgICAgIEV2aWRlbmNlIGV2aWRlbmNlID0gbmV3IEV2aWRlbmNlKGV2aSwgaW5mbywgaWQsIHYsIHIsIHMsIHRoaXMsIG1zZy5zZW5kZXIpOwogICAgICAgICAgICBuZXdFdmlkZW5jZUV2ZW50KGV2aWRlbmNlKTsKICAgICAgICAgICAgcmV0dXJuIGV2aWRlbmNlOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gRXZpZGVuY2VTaWduZXJzRGF0YShhZGRyZXNzW10gZXZpZGVuY2VTaWduZXJzKXB1YmxpY3sKICAgICAgICAgICAgZm9yKHVpbnQgaT0wOyBpPGV2aWRlbmNlU2lnbmVycy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICBzaWduZXJzLnB1c2goZXZpZGVuY2VTaWduZXJzW2ldKTsKCQkJfQoJCX0KCiAgICBmdW5jdGlvbiB2ZXJpZnkoYWRkcmVzcyBhZGRyKXB1YmxpYyBjb25zdGFudCByZXR1cm5zKGJvb2wpewogICAgZm9yKHVpbnQgaT0wOyBpPHNpZ25lcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAoYWRkciA9PSBzaWduZXJzW2ldKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgogICAgZnVuY3Rpb24gZ2V0U2lnbmVyKHVpbnQgaW5kZXgpcHVibGljIGNvbnN0YW50IHJldHVybnMoYWRkcmVzcyl7CiAgICAgICAgdWludCBsaXN0U2l6ZSA9IHNpZ25lcnMubGVuZ3RoOwogICAgICAgIGlmKGluZGV4IDwgbGlzdFNpemUpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gc2lnbmVyc1tpbmRleF07CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U2lnbmVyc1NpemUoKSBwdWJsaWMgY29uc3RhbnQgcmV0dXJucyh1aW50KXsKICAgICAgICByZXR1cm4gc2lnbmVycy5sZW5ndGg7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U2lnbmVycygpIHB1YmxpYyBjb25zdGFudCByZXR1cm5zKGFkZHJlc3NbXSl7CiAgICAgICAgcmV0dXJuIHNpZ25lcnM7CiAgICB9Cgp9",
      "contractDesc_en": "EvidenceSignersData",
      "createTime": "2021-01-20 18:02:10",
      "modifyTime": "2021-01-20 18:02:10"
    }
  ]
}
9.6. 根据合约编号获取合约信息
接口描述
返回合约信息
接口URL

http://localhost:5002/WeBASE-Front/contractStore/getContractItemById/{contractId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 合约编号 contractId int

2)数据格式

http://localhost:5002/WeBASE-Front/contractStore/getContractItemById/2
响应参数

1)数据格式

{
  "code": 0,
  "message": "success",
  "data": {
    "contractId": 2,
    "contractFolderId": 1,
    "contractName": "LibSafeMathForUint256Utils",
    "contractDesc": "LibSafeMathForUint256Utils",
    "contractSrc": "LyoKICogQ29weXJpZ2h0IDIwMTQtMjAxOSB0aGUgb3JpZ2luYWwgYXV0aG9yIG9yIGF1dGhvcnMuCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiAqLwoKcHJhZ21hIHNvbGlkaXR5IF4wLjQuMjU7CgpsaWJyYXJ5IExpYlNhZmVNYXRoRm9yVWludDI1NlV0aWxzIHsKCiAgICBmdW5jdGlvbiBhZGQodWludDI1NiBhLCB1aW50MjU2IGIpIGludGVybmFsIHB1cmUgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHVpbnQyNTYgYyA9IGEgKyBiOwogICAgICAgIHJlcXVpcmUoYyA+PSBhLCAiU2FmZU1hdGhGb3JVaW50MjU2OiBhZGRpdGlvbiBvdmVyZmxvdyIpOwogICAgICAgIHJldHVybiBjOwogICAgfQoKICAgIGZ1bmN0aW9uIHN1Yih1aW50MjU2IGEsIHVpbnQyNTYgYikgaW50ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmVxdWlyZShiIDw9IGEsICJTYWZlTWF0aEZvclVpbnQyNTY6IHN1YnRyYWN0aW9uIG92ZXJmbG93Iik7CiAgICAgICAgdWludDI1NiBjID0gYSAtIGI7CiAgICAgICAgcmV0dXJuIGM7CiAgICB9CgogICAgZnVuY3Rpb24gbXVsKHVpbnQyNTYgYSwgdWludDI1NiBiKSBpbnRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICBpZiAoYSA9PSAwIHx8IGIgPT0gMCkgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICAgIHVpbnQyNTYgYyA9IGEgKiBiOwogICAgICAgIHJlcXVpcmUoYyAvIGEgPT0gYiwgIlNhZmVNYXRoRm9yVWludDI1NjogbXVsdGlwbGljYXRpb24gb3ZlcmZsb3ciKTsKICAgICAgICByZXR1cm4gYzsKICAgIH0KCiAgICBmdW5jdGlvbiBkaXYodWludDI1NiBhLCB1aW50MjU2IGIpIGludGVybmFsIHB1cmUgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJlcXVpcmUoYiA+IDAsICJTYWZlTWF0aEZvclVpbnQyNTY6IGRpdmlzaW9uIGJ5IHplcm8iKTsKICAgICAgICB1aW50MjU2IGMgPSBhIC8gYjsKICAgICAgICByZXR1cm4gYzsKICAgIH0KCiAgICBmdW5jdGlvbiBtb2QodWludDI1NiBhLCB1aW50MjU2IGIpIGludGVybmFsIHB1cmUgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJlcXVpcmUoYiAhPSAwLCAiU2FmZU1hdGhGb3JVaW50MjU2OiBtb2R1bG8gYnkgemVybyIpOwogICAgICAgIHJldHVybiBhICUgYjsKICAgIH0KCiAgICBmdW5jdGlvbiBwb3dlcih1aW50MjU2IGEsIHVpbnQyNTYgYikgaW50ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2KXsKCiAgICAgICAgaWYoYSA9PSAwKSByZXR1cm4gMDsKICAgICAgICBpZihiID09IDApIHJldHVybiAxOwoKICAgICAgICB1aW50MjU2IGMgPSAxOwogICAgICAgIGZvcih1aW50MjU2IGkgPSAwOyBpIDwgYjsgaSsrKXsKICAgICAgICAgICAgYyA9IG11bChjLCBhKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gbWF4KHVpbnQyNTYgYSwgdWludDI1NiBiKSBpbnRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4gYSA+PSBiID8gYSA6IGI7CiAgICB9CgogICAgZnVuY3Rpb24gbWluKHVpbnQyNTYgYSwgdWludDI1NiBiKSBpbnRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4gYSA8IGIgPyBhIDogYjsKICAgIH0KCiAgICBmdW5jdGlvbiBhdmVyYWdlKHVpbnQyNTYgYSwgdWludDI1NiBiKSBpbnRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4gKGEgLyAyKSArIChiIC8gMikgKyAoKGEgJSAyICsgYiAlIDIpIC8gMik7CiAgICB9Cn0K",
    "contractDesc_en": "LibSafeMathForUint256Utils",
    "createTime": "2021-01-20 18:02:10",
    "modifyTime": "2021-01-20 18:02:10"
  }
}

10. 证书管理

10.1. 查询节点证书接口
接口描述

获取Front对应节点的Fisco证书和sdk证书(包含链证书、机构证书和节点证书)的内容;

需要在项目配置文件中constant-nodePath配置Front连接节点的绝对路径;

注:

接口只返回了证书的文本(Base64编码),未包含开头与结尾以及换行的格式文本; 如需将文本保存为一个证书文件,需要加上开头“—–BEGIN CERTIFICATE—–\n”和结尾“\n—–END CERTIFICATE—–\n”;
接口URL

http://localhost:5002/WeBASE-Front/cert

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
- - -

2)数据格式

http://localhost:5002/WeBASE-Front/cert
响应参数

1)数据格式

a、成功:

{
    "node": "MIICOTCCASGgAwIBAgIJAKHsAYI3TsAOMA0GCSqGSIb3DQEBCwUAMDgxEDAOBgNV\nBAMMB2FnZW5jeUExEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5j\neTAeFw0xOTA3MTIwMjA2MTZaFw0yOTA3MDkwMjA2MTZaMDIxDDAKBgNVBAMMA3Nk\nazETMBEGA1UECgwKZmlzY28tYmNvczENMAsGA1UECwwEbm9kZTBWMBAGByqGSM49\nAgEGBSuBBAAKA0IABJ79rSKIb97xZwByW58xH6tzoNKNLaKG7J5wxAEgAb03O2h4\nMkEMLtf/LB7tELOiyCiIEhLScprb1LjvDDt2RDGjGjAYMAkGA1UdEwQCMAAwCwYD\nVR0PBAQDAgXgMA0GCSqGSIb3DQEBCwUAA4IBAQC0u2lfclRmCszBTi2rtvMibZec\noalRC0sQPBPRb7UQhGCodxmsAT3dBUf+s4wLLrmN/cnNhq5HVObbWxzfu7gn3+IN\nyQEeqdbGdzlu1EDcaMgAz6p2W3+FG/tmx/yrNza29cYekWRL44OT5LOUPEKrJ4bJ\neOBRY4QlwZPFmM0QgP7DoKxHXldRopkmvqT4pbW51hWvPgj7KrdqwbVWzuWQuI3i\n3j3O96XZJsaDZ0+IGa5093+TsTNPfWUZzp5Kg+EyNR6Ea1evuMDNq9NAqqcd5bX9\nO9kgkb8+llO8I5ZhdnN0BuhGvv9wpsa9hW8BImOLzUBwfSVYouGCkoqlVq9X",
    "chain": "MIIDPTCCAiWgAwIBAgIJAMfvnu4d5fHdMA0GCSqGSIb3DQEBCwUAMDUxDjAMBgNV\nBAMMBWNoYWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjAe\nFw0xOTA3MTIwMjA2MTZaFw0yOTA3MDkwMjA2MTZaMDUxDjAMBgNVBAMMBWNoYWlu\nMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBAMGsKT/S60cxvFS4tBLyfT0QKPLW1g3ZgMND\n03hrWp1FAnvE9htsDEgqvNLD5hKWaYcUhjQMq0WttiP/vPxkwwJkZhzWhXpdSxMR\nqKVX4BppnkT0ICm84jYSyJdNFjKvfWlBIptIfFuTUDMT+XqF/Ct756JksiUwKZRW\neRAVcYzFM4u4ZuKeaept/8Bv8Z/RlJzGI57qj5BELeA0meUagq2WoCgJrPyvbO0b\nLwogFWS4kEjv20IIdj3fTqeJlooEXtPnuegunSMQB6aIh2im74FfJ3sHuOjQDFuC\nb5ZUiyUHG6IOGCqs+Grk+/VYI16Mx+8OoGBD5koTpK8B+/aedsUCAwEAAaNQME4w\nHQYDVR0OBBYEFLTg2FsUFekx9XjIi01BrDpo0aPIMB8GA1UdIwQYMBaAFLTg2FsU\nFekx9XjIi01BrDpo0aPIMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB\nAJmuMLhWSld8G6i3Vw21TN/d2rSRg3hNqOyycPYtdVK1YXEj4Xm91qgL8An3Kui8\njSq1S9+PstGvyh14YUw43Y1VtEPGpNVTvDtkxQ/8rs1sGHbqUxshgFMbqruxp7WH\ns0fxgn5COHEnRC4jQn02wZAk8pIjFVZLkhqdIYBtC35buHr17mXNL0S4H5cJxzPN\nk3XtKBqXedkTrEsDhR/bZ6qDDq0BcduhtKiYVPiVw9z3moLuwDb0QDM59zCexpcz\nb/w7K4lIxWqpD5tbpKSmj/3v5TCqez0Mim8/j4q29bP913KQrngnVCdCezOsPWIH\nDDoihgeRQHuz1VuGGZ259Hc=",
    "agency": "MIIDADCCAeigAwIBAgIJAJUF2Dp1a9U6MA0GCSqGSIb3DQEBCwUAMDUxDjAMBgNV\nBAMMBWNoYWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjAe\nFw0xOTA3MTIwMjA2MTZaFw0yOTA3MDkwMjA2MTZaMDgxEDAOBgNVBAMMB2FnZW5j\neUExEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5jeTCCASIwDQYJ\nKoZIhvcNAQEBBQADggEPADCCAQoCggEBANBT4CTciIYdSeEabgJzif+CFB0y3GzG\ny+XQYtWK+TtdJWduXqhnnZiYAZs7OPGEu79Yx/bEpjEXsu2cXH0D6BHZk+wvuxG6\nezXWq5MYjCw3fQiSRWkDYoxzWgulkRyYROF1xoZeNGQssReFmCgP+pcQwRxjcq8z\nIA9iT61YxyW5nrS7xnra9uZq/EE3tsJ0ae3ax6zixCT66aV49S27cMcisS+XKP/q\nEVPxhO7SUjnzZY69MgZzNSFxCzIbapnlmYAOS26vIT0taSkoKXmIsYssga45XPwI\n7YBVCc/34kHzW9xrNjyyThMWOgDsuBqZN9xvapGSQ82Lsh7ObN0dZVUCAwEAAaMQ\nMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAu3aHxJnCZnICpHbQ\nv1Lc5tiXtAYE9aEP5cxb/cO14xY8dS+t0wiLIvyrE2aTcgImzr4BYNBm1XDt5suc\nMpzha1oJytGv79M9/WnI/BKmgUqTaaXOV2Ux2yPX9SadNcsD9/IbrV0b/hlsPd6M\nK8w7ndowvBgopei+A1NQY6jTDUKif4RxD4u5HZFWUu7pByNLFaydU4qBKVkucXOq\nxmWoupL5XrDk5o490kiz/Zgufqtb4w6oUr3lrQASAbFB3lID/P1ipi0DwX7kZwVX\nECDLYvr+eX6GbTClzn0JGuzqV4OoRo1rrRv+0tp1aLZKpCYn0Lhf6s1iw/kCeM2O\nnP9l2Q=="
}

b、失败:

{
    "code": 201231,
    "message": "Cert file not found, please check cert path in config",
    "data": "FileNotFound, node cert(node.crt) path prefix error"
}
10.2. 获取明文SDK证书与私钥
接口描述

获取Front使用的sdk证书(包含链证书、sdk证书和sdk私钥)的内容

接口URL

http://localhost:5002/WeBASE-Front/cert/sdk

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
- - -

2)数据格式

http://localhost:5002/WeBASE-Front/cert/sdk
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 Map Map key为文件名,value为文件内容

1)数据格式

a、成功:

{
  "sdk.key": "-----BEGIN PRIVATE KEY-----\nMIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgxqr/d/VgQ0fAr/KvyAeW\nJ6bD1tqxZ5gYOdfIJiK7WOmhRANCAAT3g/OsuSAD2I/dKLWnZTbMGQ8l9WnkD/wr\npyoiQkMy1qI5/3Sj4WFKGcVu9vhsd0nLoP+y1QttYKM0m5QGcuhP\n-----END PRIVATE KEY-----\n",
  "ca.crt": "-----BEGIN CERTIFICATE-----\nMIIBsDCCAVagAwIBAgIJAPwQ7ISyofOIMAoGCCqGSM49BAMCMDUxDjAMBgNVBAMM\nBWNoYWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjAgFw0y\nMTA0MDYxMjMwNDBaGA8yMTIxMDMxMzEyMzA0MFowNTEOMAwGA1UEAwwFY2hhaW4x\nEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsMBWNoYWluMFYwEAYHKoZIzj0C\nAQYFK4EEAAoDQgAE6UcrK7ukGBVvBmWYwgIloM38ibqtxF2zBnM9zgU4bujjJU1Y\nCZsHGKVGuNstSOZYfYulnTtFUoHhUEyhddvql6NQME4wHQYDVR0OBBYEFBBSyZi8\nk/Hz/Q2SAin5bMnE1nOFMB8GA1UdIwQYMBaAFBBSyZi8k/Hz/Q2SAin5bMnE1nOF\nMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgEpuPZypVImOtDty9p50X\njeD4wdgzHXpd3CDPui4CnZYCIQC4n+r97cCB51dPb+WjDNV5C18S2uI8LlNVj+xL\ndSweAg==\n-----END CERTIFICATE-----\n",
  "sdk.crt": "-----BEGIN CERTIFICATE-----\nMIIBeDCCAR+gAwIBAgIJAJoEtSMUsa8HMAoGCCqGSM49BAMCMDgxEDAOBgNVBAMM\nB2FnZW5jeUExEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5jeTAg\nFw0yMTA0MDYxMjMwNDBaGA8yMTIxMDMxMzEyMzA0MFowMTEMMAoGA1UEAwwDc2Rr\nMRMwEQYDVQQKDApmaXNjby1iY29zMQwwCgYDVQQLDANzZGswVjAQBgcqhkjOPQIB\nBgUrgQQACgNCAAT3g/OsuSAD2I/dKLWnZTbMGQ8l9WnkD/wrpyoiQkMy1qI5/3Sj\n4WFKGcVu9vhsd0nLoP+y1QttYKM0m5QGcuhPoxowGDAJBgNVHRMEAjAAMAsGA1Ud\nDwQEAwIF4DAKBggqhkjOPQQDAgNHADBEAiANbeRFiiS6mH+vcAOwV3wXd9YW/B2a\n+vrHMm6NwtliRAIgRH4gSF0XLmpVOEO21bJFDGWm9siIX0cnj0R3kNGZcB4=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIBcTCCARegAwIBAgIJANrOZ+FrVNpIMAoGCCqGSM49BAMCMDUxDjAMBgNVBAMM\nBWNoYWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjAeFw0y\nMTA0MDYxMjMwNDBaFw0zMTA0MDQxMjMwNDBaMDgxEDAOBgNVBAMMB2FnZW5jeUEx\nEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5jeTBWMBAGByqGSM49\nAgEGBSuBBAAKA0IABIqMDvvzvTq8WW1UtJrnnsifw9/OrPsMc9CrrYBsWdwOGhdx\nfNTJA1ss+vngjrhAmWHczvbh+E1WOlDGzpCumeqjEDAOMAwGA1UdEwQFMAMBAf8w\nCgYIKoZIzj0EAwIDSAAwRQIhALsAbAQ9BDeofk4VYzYx2ZAHB1HviDp9ndvXAkLN\nsfHZAiAjViK97dDr3gxP/qHg0e8BG9ptEv7Do8caOPj33F+yOQ==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIBsDCCAVagAwIBAgIJAPwQ7ISyofOIMAoGCCqGSM49BAMCMDUxDjAMBgNVBAMM\nBWNoYWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjAgFw0y\nMTA0MDYxMjMwNDBaGA8yMTIxMDMxMzEyMzA0MFowNTEOMAwGA1UEAwwFY2hhaW4x\nEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsMBWNoYWluMFYwEAYHKoZIzj0C\nAQYFK4EEAAoDQgAE6UcrK7ukGBVvBmWYwgIloM38ibqtxF2zBnM9zgU4bujjJU1Y\nCZsHGKVGuNstSOZYfYulnTtFUoHhUEyhddvql6NQME4wHQYDVR0OBBYEFBBSyZi8\nk/Hz/Q2SAin5bMnE1nOFMB8GA1UdIwQYMBaAFBBSyZi8k/Hz/Q2SAin5bMnE1nOF\nMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgEpuPZypVImOtDty9p50X\njeD4wdgzHXpd3CDPui4CnZYCIQC4n+r97cCB51dPb+WjDNV5C18S2uI8LlNVj+xL\ndSweAg==\n-----END CERTIFICATE-----\n"
}
10.3. 获取SDK证书与私钥压缩包
接口描述

获取Front使用的sdk证书(包含链证书、sdk证书和sdk私钥)的zip压缩包

接口URL

http://localhost:5002/WeBASE-Front/cert/sdk/zip

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
- - -

2)数据格式

http://localhost:5002/WeBASE-Front/cert/sdk/zip
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 文件名 ResponseEntity.header String 文件名在header中
2 文件流 body InputStream 文件的流在body中

1)数据格式

a、成功:

headers:  content-disposition: attachment;filename*=UTF-8''conf.zip 

{
    // 二进制流
}

11. 附录

1. 返回码信息列表

code message 描述
0 success 成功
101001 system error 系统异常
101002 param valid fail 参数校验异常
101003 web3jMap of groupId is null, please call /{groupId}/web3/refresh to refresh 连接当前群组失败,请调用/{groupId}/web3/refresh刷新群组
101004 groupList error for no group, web3jMap is empty 群组列表为空,请检查节点共识状态
201001 groupId cannot be empty 群组编号不能为空
201002 user cannot be empty 用户地址不能为空
201003 useAes cannot be empty 是否为加密私钥不能为空
201004 version cannot be empty 合约版本不能为空
201005 funcName cannot be empty 方法名不能为空
201006 abiInfo cannot be empty abi内容不能为空
201007 bytecodeBin cannot be empty 合约bin不能为空
201008 contract's current version has been deployed 该合约版本已部署
201009 contract is not deployed 合约未部署
201010 save abi error abi保存错误
201011 contract funcParam is error 请求的方法参数错误
201012 requst blockNumber is greater than latest 请求块高大于最新块高
201013 get abi from chain error 获取合约abi错误
201014 contract deploy error 合约部署错误
201015 user's privateKey is null 用户私钥为空
201016 file is not exist 文件不存在
201017 failed to get node config 获取节点配置失败
201018 blockNumber and pbftView unchanged 块高和view没有变化
201019 request function is error 请求的方法错误
201020 transaction query from chain failed 交易查询失败
201021 transaction send to chain failed 交易上链失败
201022 node request failed 节点请求失败
201023 contract already exists 合约已经存在
201024 contract name cannot be repeated 合约名不能重复
201025 invalid contract id 无效的合约编号
201026 contract has been deployed 合约已部署
201027 send abiInfo fail 发送abi失败
201028 bytecodeBin is null 合约bin为空
201029 contractAddress is null 合约地址为空
201030 contractAddress invalid 合约地址无效
201031 privateKey decode fail 私钥编码失败
201032 not found config of keyServer 密钥服务未配置
201033 data request sign error 数据请求签名异常
201034 groupId not exist 群组编号不存在
201035 version and address cannot all be null 合约版本和地址不能同时为空
201036 compile fail 合约编译失败
201037 user name is null 用户名为空
201038 user name already exists 用户名已存在
201039 private key already exists 私钥已存在
201040 private key not exists 私钥不存在
201041 external user's appId and signUserId cannot be empty 外部用户的appId和signUserId不能为空
201042 There is no sol files in source solidity文件不存在
201043 invalid group operate type 群组操作类型不正确
201044 invalid data type 不正确的数据类型
201045 encode string can not be empty 已签名的参数内容不能为空
201046 transaction failed 交易上链失败
201050 Fail to parse json 链上返回值反序列化失败
201051 get consensus status fail 交易上链失败
201101 groupId cannot be empty 群组编号不能为空
201102 tableName cannot be empty 表名不能为空
201103 permissionType cannot be empty 权限类型不能为空
201104 permissionType not exists 权限类型不存在
201105 from address cannot be empty 管理员地址不能为空
201106 contract name cannot be empty 合约名不能为空
201107 system config key cannot be empty 系统配置key值不能为空
201108 system config value cannot be empty 系统配置value值不能为空
201109 node id cannot be empty 节点id不能为空
201110 node type cannot be empty 节点类型(共识状态不能为空)
201111 Permission state cannot be all empty 更新的用户权限状态不能为空
201112 contract address cannot be empty 合约地址不能为空
201113 contract handle type cannot be empty 合约操作类型不能为空
201114 grantAddress cannot be empty 赋值的地址不能为空
201115 invalid contract handle type 不正确的合约操作类型
201116 contract status handle fail 合约状态修改失败
201120 group operate fail 群组操作失败
201121 node internal error 节点内部错误
201122 group already exists 群组已存在
201123 group already running 群组已运行
201124 group already stopped 群组已停止
201125 group already deleted 群组已删除
201126 group not found 未找到群组
201127 group operate param error 群组操作入参错误
201128 group peers not connected 群组内节点未连接
201129 group genesis conf already exists 群组创世块文件已存在
201130 group config.ini already exists 群组的配置文件已存在
201131 group genesis conf not found 未找到群组创世块文件
201132 group config.ini not found 未找到群组的配置文件
201133 group is stopping 群组正在停止
201134 group not deleted 群组未删除
201151 Unsupported contract param type to encoded 不支持编码的合约参数类型
201152 Unsupported contract param type to decoded 不支持解码的合约参数类型
201153 unable to create instance of type, check input params 无法创建该合约参数类型的实例,请检查入参
201154 contract path is exists. 合约路径已存在
201155 contract path cannot be empty 合约路径不能为空
201156 Write front's sdk cert and key fail 导出SDK证书私钥文件失败,写入文件失败
201157 Write private key file fail 导出私钥文件失败,写入文件失败
201200 params not fit 参数不符合要求
201201 address is invalid 账户地址不正确
201202 permission denied, please check chain administrator permission 权限不足,请检查用户
201208 unsupported for this system config key 不支持设置该系统配置
201209 provide value by positive integer mode, from 100000 to 2147483647 请输入正值或[100000, 2147483647]范围的值
201210 set system config value fail for params error or permission denied 设置系统配置失败,请检查权限
201211 query system config value list fail 获取系统配置列表失败
201216 node id is invalid 节点id错误
201217 invalid node type: sealer, observer, remove 节点类型(共识状态)错误:sealer, observer, remove
201218 set node consensus type fail, check permission or node's group config file 节点类型(共识状态)修改失败,请检查权限或节点群组配置文件
201221 Contract version should only contains 'A-Z' or 'a-z' or '0-9' or dot mark CNS合约版本号应只包含大小写字母、数字和"."
201222 version of contract is out of length 合约版本号过长
201223 cns register fail cns注册失败
201224 version not exists 版本不存在
201225 cns name cannot be empty cns名不能为空
201226 sql syntax error sql语句错误
201227 crud sql fail 执行sql语句失败
201228 table not exists 操作的表格不存在
201231 Cert file not found, please check cert path in config 配置文件中的证书地址错误,未找到证书文件
201232 Pem file format error, must surrounded by -----XXXXX PRIVATE KEY----- pem证书格式错误,必须以"-----XXXXX PRIVATE KEY-----"开头结尾
201233 Pem file content error pem证书内容错误
201235 p12's password cannot be chinese p12证书密码不能是中文
201236 p12's password not match p12证书密码错误
201237 P12 file content error p12证书内容错误
201241 Exchange or message queue not exists, please check mq server or mq configuration 交换机或消息队列不存在,请检查mq-server运行状态及其配置
201242 Database error: data already exists in db 数据库错误:该数据记录已存在于数据库中
201243 Block range error, from/toBlock must greater than 0, toBlock must be greater than fromBlock 合约Event区块范围错误,from大于0,to大于from
201244 Database error: data not exists in db, please check your params 该数据记录不存在,请检查参数
201245 Only support letter and digit, please check your params 仅支持使用数字字母与下划线,请检查参数
201246 Register contractEvent failed, please check your param 订阅合约事件失败,请检查参数格式
201247 Unregister event failed, please check mq server exchange 取消订阅事件失败,请检查参数格式
201248 Contract abi invalid, please check abi 合约ABI格式错误,请检查入参
201255 contract address already exists 合约地址已存在
201256 abi info of this id not exists abi不存在
201301 threshold must be greater than zero 链阈值必须大于0
201302 committee weight must be greater than zero 链委员权重必须大于0
201303 chain governance address cannot be blank 链管理委员/运维地址不能为空
201311 get event callback fail for time out 获取event回调超时
201312 get event callback error 获取event回调失败
201501 sdk create key pair fail and return null sdk创建私钥对失败并返回Null
201502 pem/p12 manager get key pair error for input params pem/p12证书获取私钥对失败,检查入参
201503 pem/p12 manager get key pair error for bc dependency error pem/p12证书获取私钥对失败,检查bc依赖包版本
201504 sign service return error 签名服务并返回异常
201510 transaction receipt status return error 交易回执状态码非0x0,交易执行失败
201511 contract abi parse json error 合约ABI转JSON失败
201512 call contract error for io exception 调用合约的交易上链失败
201513 get transaction receipt fail for exec 获取交易回执失败,返回执行错误
201514 get transaction receipt fail for time out 获取交易回执失败,链上链下请求超时
201515 transaction receipt fail and parse output fail 转化交易回执中output输出值失败
201516 transaction receipt fail and output is null 交易回执output为空
201517 call contract constant method fail 合约状态异常,调用合约constant方法失败
201518 get message's hash fail 获取哈希失败
201521 get list of manager on chain fail 获取链上管理员列表失败
201522 table key length error 用户表的键值长度大于最大值255
201523 crud's param parse json error CRUD方法的入参转Entry/Condition失败,请检查入参
201524 precompiled common transfer to json fail 预编译错误码转JSON失败
201605 Build client instance of new group failed 创建新群组的Client实例失败
201606 This group only support Liquid contract of wasm 当前群组仅支持Liquid合约
201607 This group not connected with front's rpc peers 节点前置无法通过已连接的rpc节点访问该群组
201665 Build eventSubscribe instance of new group failed 创建新群组的EventSub实例失败
201621 Sealer's weight cannot be null 共识节点的权重值不可为空

Precompiled Service API 错误码

错误码 消息内容 备注
0 success
-50000 permission denied
-50001 table name already exist
-50100 unknow function call
-50101 table does not exist
-51000 table name and address already exist
-51001 table name and address does not exist
-51100 invalid node ID SDK错误码
-51101 the last sealer cannot be removed
-51102 the node is not reachable SDK错误码
-51103 the node is not a group peer SDK错误码
-51104 the node is already in the sealer list SDK错误码
-51105 the node is already in the observer list SDK错误码
-51200 contract name and version already exist SDK错误码
-51201 version string length exceeds the maximum limit SDK错误码
-51300 invalid configuration entry
-51500 contract name and version already exist
-51501 condition parse error
-51502 condition operation undefined
-51600 invalid ciphers
-51700 group sig failed
-51800 ring sig failed
-51900 contract frozen
-51901 contract available
-51902 contract repeat authorization
-51903 invalid contract address
-51904 table not exist
-51905 no authorized
-52000 committee member exist
-52001 committee member not exist
-52002 invalid request permission denied
-52003 invalid threshold
-52004 operator can't be committee member
-52005 committee member can't be operator
-52006 operator exist
-52007 operator not exist
-52008 account not exist
-52009 invalid account address
-52010 account already available
-52011 account frozen
-52012 current value is expected value
3.调用接口遇到问题&解决方式

Q1:合约方法入参byte32类型, java 通过HTTP+JSON调用,对应java bean 该如何对应数据类型? 报错

{
    "code":201153,
    "data":null,
    "errorMessage":"unable to create instance of 	type:org.fisco.bcos.sdk.abi.datatypes.generated.Bytes32"
}

A1:java bean对应还是由String 存储,而非byte[]。 java工程引用如下依赖

<dependency>
	<groupId>org.fisco-bcos.java-sdk</groupId>
	<artifactId>fisco-bcos-java-sdk</artifactId>
	<version>2.7.2</version>
</dependency> 

java 代码处理

 String username = "hello";
 Bytes32 bytes32 = CommonUtils.utf8StringToBytes32(username);
 String bytes32Str = Numeric.toHexString(bytes32.getValue());

注意:Numeric 工具类是fisco-bcos-java-sdk 自带的,CommonUtils 是WEBASE Front 里面的

升级说明

WeBASE-Front升级的兼容性说明,请结合WeBASE-Front Changelog进行阅读

WeBASE-Front升级的必须步骤:

  1. 备份已有文件或数据,下载新的安装包(可参考安装包下载
  2. 采用新的安装包,并将旧版本yml已有配置添加到新版本yml中;可通过diff aFile bFile命令对比新旧yml的差异
  3. bash stop.sh && bash start.sh重启

各个版本的具体修改可参考下文

lab-rc1

附录

1. 安装问题

1.1 Java部署
CentOS环境安装Java

注意:CentOS下OpenJDK无法正常工作,需要安装OracleJDK下载链接

# 创建新的文件夹,安装Java 8或以上的版本,将下载的jdk放在software目录
# 从Oracle官网(https://www.oracle.com/technetwork/java/javase/downloads/index.html)选择Java 8或以上的版本下载,例如下载jdk-8u201-linux-x64.tar.gz
$ mkdir /software

# 解压jdk
$ tar -zxvf jdk-8u201-linux-x64.tar.gz

# 配置Java环境,编辑/etc/profile文件
$ vim /etc/profile

# 打开以后将下面三句输入到文件里面并保存退出
export JAVA_HOME=/software/jdk-8u201  #这是一个文件目录,非文件
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# 生效profile
$ source /etc/profile

# 查询Java版本,出现的版本是自己下载的版本,则安装成功。
java -version
Ubuntu环境安装Java

  # 安装默认Java版本(Java 8或以上)
  sudo apt install -y default-jdk
  # 查询Java版本
  java -version
1.2 Gradle部署

此处给出简单步骤,供快速查阅。更详细的步骤,请参考官网

(1)从官网下载对应版本的Gradle安装包,并解压到相应目录

mkdir /software/
unzip -d /software/ gradleXXX.zip

(2)配置环境变量

export GRADLE_HOME=/software/gradle-4.9
export PATH=$GRADLE_HOME/bin:$PATH

(3)查看版本

gradle -version

2. 常见问题

  • 1:执行shell脚本报错误”permission denied”或格式错误

    赋权限:chmod + *.sh
    转格式:dos2unix *.sh
    
  • 2:eclipse环境编译源码失败,错误提示如下:

...
/data/temp/WeBASE-Front/src/main/java/com/webank/webase/front/performance/PerformanceService.java:167: error: cannot find symbol
        log.info("begin sync performance");
        ^
  symbol:   variable log
  location: class PerformanceService
Note: /data/temp/WeBASE-Front/src/main/java/com/webank/webase/front/contract/CommonContract.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
100 errors

> Task :compileJava FAILED

FAILURE: Build failed with an exception.
...

答:问题是不能编译Lombok注解 ,修改build.gradle文件,将以下代码的注释加上

 //annotationProcessor 'org.projectlombok:lombok:1.18.6'
  • 3:节点运行一段时间后新增了一个群组,前置查不到新群组的信息。

    答:调用 http://{ip}:{port}/WeBASE-Front/1/web3/refresh 方法,即可手动更新。

  • 4:升级1.0.2版本时,数据库报错:

    Caused by: org.h2.jdbc.JdbcSQLException: NULL not allowed for column "TYPE"; SQL statement:
    alter table key_store_info add column type integer not null [23502-197]
            at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) ~[h2-1.4.197.jar:1.4.197]
            at org.h2.message.DbException.get(DbException.java:179) ~[h2-1.4.197.jar:1.4.197]
            at org.h2.message.DbException.get(DbException.java:155) ~[h2-1.4.197.jar:1.4.197]
    

    答:将H2数据库删除(在h2目录下),或者配置新数据库名,在 application.yml 文件中的配置如下:

    spring:
      datasource:
        url: jdbc:h2:file:./h2/webasefront;DB_CLOSE_ON_EXIT=FALSE // 默认H2库为webasefront
    ...
    
  • 5:日志报以下错误信息:

    2019-08-08 17:29:05.505 [pool-11-thread-1] ERROR TaskUtils$LoggingErrorHandler() - Unexpected error occurred in scheduled task.
    org.hyperic.sigar.SigarFileNotFoundException: 没有那个文件或目录
            at org.hyperic.sigar.FileSystemUsage.gather(Native Method) ~[sigar-1.6.4.jar:?]
            at org.hyperic.sigar.FileSystemUsage.fetch(FileSystemUsage.java:30) ~[sigar-1.6.4.jar:?]
            at org.hyperic.sigar.Sigar.getFileSystemUsage(Sigar.java:667) ~[sigar-1.6.4.jar:?]
    

    答:监控目录不存在,需配置节点所在磁盘目录,在 application.yml 文件中的配置如下:

    ...
    constant:  
      monitorDisk: /            // 要监控的磁盘目录,配置节点所在目录(如:/home)
    ...
    
  • 6:启动报错“nested exception is javax.net.ssl.SSLException”:

...
nested exception is javax.net.ssl.SSLException: Failed to initialize the client-side SSLContext: Input stream not contain valid certificates.

答:CentOS的yum仓库的OpenJDK缺少JCE(Java Cryptography Extension),导致Web3SDK/Java-SDK无法正常连接区块链节点,因此在使用CentOS操作系统时,推荐使用OracleJDK

  • 7:启动报错“Processing bcos message timeout”
...
[main] ERROR SpringApplication() - Application startup failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'contractController': Unsatisfied dependency expressed through field 'contractService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'contractService': Unsatisfied dependency expressed through field 'web3jMap'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'web3j' defined in class path resource [com/webank/webase/front/config/Web3Config.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.HashMap]: Factory method 'web3j' threw exception; nested exception is java.io.IOException: Processing bcos message timeout
...

答:一些OpenJDK版本缺少相关包,导致节点连接异常。推荐使用OracleJDK

  • 8:启动失败,日志却没有异常
===============================================================================================
Starting Server com.webank.webase.front.Application Port 5002 ................................[Failed]. Please view log file (default path:./log/).
Because port 5002 not up in 20 seconds.Script finally killed the process.
===============================================================================================

答:确认机器是否满足硬件要求。机器性能过低会导致服务端口一定时间内没起来,脚本会自动杀掉进程。可以尝试手动修改dist目录下的start.sh脚本,将启动等待时间设置久一点(默认600,单位:秒),然后启动。

...
startWaitTime=600
...
  • 9:启动报错SSLContext: null

答:确保conf/目录下包含sdk证书; 若使用的是v1.5.0以前的版本,则需要保证ca.crt, node.crt, node.key;其中node.crt, node.key为sdk.crt, sdk.key复制并重命名得到;若使用v1.5.0及以上版本,则需要复制链的sdk目录下的所有文件(ca.crt, sdk.crt, sdk.key及gm文件夹)到前置服务的conf目录

3. 使用说明

测试用户管理
3.1. 导入私钥

支持txt文件和pem文件导入测试用户的私钥信息

导入.txt私钥内容格式示例:

{
  "address":"0x06f81c8e1cb59b5df2cdeb87a212d17fba79aad7",
  "publicKey":"0x4b1041710a4427dc1c0d542c8f0fd312d92b0d03a989f512d1f8d3cafb851967f3592df0035e01fa63b2626165d0f5cffab15792161aa0360b8dfba2f3a7cf59",
  "privateKey":"71f1479d9051e8d6b141a3b3ef9c01a7756da823a0af280c6bf62d18ee0cc978", // 十六进制
  "userName":"111",
  "type":0  // type为0,不可修改
}

其中用户类型为0代表用户为WeBASE-Front的本地私钥用户,导入的私钥均为该类型;

导入.pem私钥内容示例:

-----BEGIN PRIVATE KEY-----
MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgC8TbvFSMA9y3CghFt51/
XmExewlioX99veYHOV7dTvOhRANCAASZtMhCTcaedNP+H7iljbTIqXOFM6qm5aVs
fM/yuDBK2MRfFbfnOYVTNKyOSnmkY+xBfCR8Q86wcsQm9NZpkmFK
-----END PRIVATE KEY-----

其中pem文件开头的-----BEGIN PRIVATE KEY-----\n和结尾的\n-----END PRIVATE KEY-----\n格式不可更改,否则将读取pem文件失败

3.2. 导出私钥

目前仅支持导出测试用户的txt格式私钥

Java中如何使用导出的私钥

以上文中的私钥加载:

基于javasdk的私钥加载:

@Test
public void testCrypto() {
    // 1-国密,0-ECDSA
    CryptoSuite cryptoSuite = new CryptoSuite(1);
    CryptoKeyPair keyPair = cryptoSuite.createKeyPair("e843a542a7a8240f9c9e418b9517c2c8f4dc041a11a44e614a3b026c3588c188");
    System.out.println("privateKey: " + keyPair.getHexPrivateKey());
    System.out.println("address: " + keyPair.getAddress());
    System.out.println("publicKey: " + keyPair.getHexPublicKey());
}

基于web3sdk的私钥加载:

@Test
public void loadPrivateKeyTest() {
  CryptoSuite
  String privateKey = "71f1479d9051e8d6b141a3b3ef9c01a7756da823a0af280c6bf62d18ee0cc978";
  Credentials credentials = GenCredential.create(privateKey);
  // private key 实例
  BigInteger privateKeyInstance = credentials.getEcKeyPair().getPrivateKey();
  System.out.println(Numeric.toHexStringNoPrefix(privateKeyInstance));
  // public key 实例
  BigInteger publicKeyInstance = credentials.getEcKeyPair().getPublicKey();
  System.out.println(Numeric.toHexString(publicKeyInstance));
  // address 地址
  String address = credentials.getAddress();
  System.out.println(address);
}
访问h2数据库

WeBASE-Front采用 JPA + H2数据库 的方式保存数据

  • 源码查看各个数据表的内容:需要通过查看WeBASE-Front源码的各个包中带有@Entity注解的entity实体类;如,查看私钥数据表KeyStoreInfo则查看该文件com.webank.webase.front.keystore.entity.KeyStoreInfo.java
  • 通过H2控制台连接H2数据库

_images/h2_console.png

  • 同机H2访问:可以通过浏览器打开localhost:5002/WeBASE-Front/console,以默认配置为例填入连接参数
    • JDBC URL应填入file:../h2/webasefront;,与前置服务的application.yml中配置的spring.datasource.url对应
    • 若未设置用户名与密码,则默认用户名为sa,密码为空
  • 服务端H2访问:
    • 修改前置服务的application.yml中的spring.h2.console.settings.web-allow-others设为true,允许远端访问H2控制台
    • 重启前置服务
    • 访问{ip}:{port}/WeBASE-Front/console,参数填入方法同上
使用swagger

节点前置搭配了swagger,可用于直接调试接口,通过访问 {ip}:5002/WeBASE-Front/swagger-ui.html 即可访问前置的swagger页面

_images/swagger1.png

在swagger页面中选中一个接口后,点击“Try it out”既可以开始调用了,输入框将提示入参的格式

_images/swagger_tool_api.png

两阶段交易

在v1.5.2后,WeBASE-Front中丰富了组装交易的接口,包括了本地签名组装交易接口/trans/convertRawTxStr/local和通过WeBASE-Sign组装交易接口/trans/convertRawTxStr/withSign,下面以本地签名举例(接口的具体入参可参考对应接口文档)。

本地签名组装交易需要填入的参数包含合约地址、函数名及函数入参、群组ID和WeBASE-Front的私钥用户地址等,如下所示

{
    "user":"0x2db346f9d24324a4b0eac7fb7f3379a2422704db",
    "contractName":"HelloWorld",
    "contractAddress":"dasdfav23rf213vbcdvadf3bcdf2fc23rqde",
    "funcName":"set",
    "contractAbi":[{"constant":true,"inputs":[],"name":"getVersion","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getStorageCell","outputs":[{"name":"","type":"string"},{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"n","type":"string"}],"name":"setVersion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"storageHash","type":"string"},{"name":"storageInfo","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],
    "funcParam":["Hi,Welcome!"],
    "groupId" :"1",
    "useCns": false
}

调用组装交易接口后,接口将返回签名后的交易体编码值(在测试接口时,可以通过节点前置的Swagger直接发起请求):

0xf9012da001071041dddc1b3c553b48c0fbefecc07f3812f5ce4004d47708f1c3342844db018405f5e10082029d94e10441d9179cf0424aae808b51bc85dcbbfe144780b8643590b49f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000033333330000000000000000000000000000000000000000000000000000000000010180b84083bb5313e3dd7825b8b3e32d73aa8aedf9f9a8fcf435e5c37edfe4645c1af4211c12e1368024336a576f26ed624407da0b94e0bc5760514543c0b7a38fa03a7da0972843d0879ffdbdae733e8707896a532e5e1a3c7262cb84db657dd34f09111ba0786106465fe0fd2383588693cafef8934df62b188c6bb5a74eb6b9f23adaba32

通过已签名交易发送接口/trans/signed-transaction将交易编码值发到链上,接口将返回交易回执,可根据交易回执的status判断交易是否成功

**注:**若发起的是查询交易,除了上述接口的两阶段调用方法之外,还可以使用合约函数的编码值接口/trans/encodeFunction获取encodedFunction值。 根据入参要求调用已编码查询交易发送接口/trans/query-transaction,即可发送查询交易,接口将返回查询的返回值。

4. 支持链上事件订阅和通知

在某些业务场景中,应用层需要实时获取链上的事件,如出块事件、合约Event事件等。应用层通过WeBASE连接节点后,由于无法和节点直接建立长连接,难以实时获取链上的消息。

支持通过消息队列(Message Queue)来获取WeBASE-Front(v1.2.3+)的链上事件的消息推送

目前支持出块事件与智能合约Event事件的事件Push通知,大致流程为:

  1. WeBASE-Front连接到MQ-Server(目前支持RabbitMQ-Server);
  2. WeBASE-Front接收节点的事件Push后,如出块通知,WeBASE-Front将出块消息发送到消息队列中;
  3. 区块链应用连接MQ-Server,获取消息队列中待消费的消息,即可获得事件通知;

下面介绍如何搭建RabbitMQ的消息队列服务与WeBASE-Front的配置方法

5. 配置文件解析

    1. 配置文件解析
参数 默认值 描述
server.port 5002 当前服务端口
server.context-path /WeBASE-Front 当前服务访问目录
server.connection-timeout 30000 服务连接超时时间ms
server.tomcat.max-threads 200 tomcat最大线程数
server.tomcat.max-connections 10000 tomcat最大连接数
sdk.useSmSsl false SSL连接是否使用国密SM
sdk.certPath conf SDK证书所在目录(相对目录或绝对路径)
sdk.peers ['127.0.0.1:20200','127.0.0.1:20201'] RPC节点的IP:PORT列表
sdk.threadPoolSize 50 SDK线程池的线程数
logging.config classpath:log4j2.xml logging配置文件的位置
constant.keyServer 127.0.0.1:5004 webase-sign服务的IP:Port(单个)
constant.transMaxWait 30 交易最大等待时间(s)
constant.aesKey EfdsW23D23d3df43 webase服务的aes秘钥
constant.http_read_timeOut 100000 访问服务的读取超时(ms)
constant.http_connect_timeOut 100000 访问服务的连接超时(ms)
constant.eventRegisterTaskFixedDelay 5000 事件推送注册的频率(ms)
constant.syncEventMapTaskFixedDelay 60000 事件推送内存的同步频率(ms)
constant.syncStatLogTime 5000 节点日志监控频率(ms)
constant.syncStatLogCountLimit 10000 节点日志监控数据最大值
constant.statLogEnabled false 是否启用节点日志监控
constant.eventCallbackWait 4 获取event log的超时时间(秒)

节点管理服务

概要介绍

1. 功能说明

WeBASE-Node-Manager可以是处理前端页面所有web请求,管理各个节点的状态,管理链上所有智能合约,对区块链的数据进行统计、分析,对异常交易的审计,私钥管理等,含有如下功能模块:

序号 模块 描述
1 前置管理模块 维护关联WeBASE-Front服务信息
2 交易信息模块 查看交易信息
3 帐号管理模块 维护系统登录账号信息
4 区块管理模块 查看区块信息
5 合约管理模块 维护合约信息
6 服务器监控 监控节点服务器状态与邮件告警
7 审计模块 查看异常合约及异常用户信息
8 群组信息模块 查看群组信息
9 节点管理模块 查看节点信息
10 角色管理模块 查看系统登录用户的角色信息
11 用户管理模块 维护密钥信息
12 合约方法管理模块 维护合约abi文件中所包含的的方法信息
13 系统管理模块 预编译API,包含权限管理,节点管理,CNS管理等信息
14 证书管理模块 查看sdk证书、节点证书等信息
15 订阅事件模块 查看已订阅的链上事件通知信息

安装详情可查看下一章节的WeBASE-Node-Manager部署说明

部署说明

1. 前提条件

序号 软件
1 FISCO-BCOS 3.0+
2 WeBASE-Front 对应版本
3 MySQL5.6或以上版本
4 Java8或以上版本

2. 注意事项

  • Java推荐使用OracleJDKJDK配置指引
  • 在服务搭建的过程中,如碰到问题,请查看 常见问题解答
  • 安全提示: 强烈建议设置复杂的数据库登录密码,且严格控制数据操作的权限和网络策略

通过WeBASE-Sign私钥管理 WeBASE-Node-Manager v1.3.0及以上版本将通过WeBASE-Sign进行私钥管理,即使用WeBASE-Node-Manager v1.3.0+的版本需要同步安装WeBASE-Sign v1.3.0,详情可参考升级文档进行阅读

3. 拉取代码

执行命令:

git clone -b lab https://github.com/WeBankBlockchain/WeBASE-Node-Manager.git

# 若因网络问题导致长时间下载失败,可尝试以下命令
git clone -b lab https://gitee.com/WeBank/WeBASE-Node-Manager.git

进入目录:

cd WeBASE-Node-Manager
git checkout lab

4. 编译代码

方式一:如果服务器已安装Gradle,且版本为Gradle-4.10或以上

gradle build -x test

方式二:如果服务器未安装Gradle,或者版本不是Gradle-4.10或以上,使用gradlew编译

chmod +x ./gradlew && ./gradlew build -x test

构建完成后,会在根目录WeBASE-Node-Manager下生成已编译的代码目录dist。

5. 数据库初始化

5.1 新建数据库
#登录MySQL:
mysql -u ${your_db_account} -p${your_db_password}  例如:mysql -u root -p123456
#新建数据库:
CREATE DATABASE IF NOT EXISTS {your_db_name} DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
5.2 修改脚本配置

进入数据库脚本目录

cd  dist/script

修改数据库连接信息:

修改数据库名称:sed -i "s/webasenodemanager/${your_db_name}/g" webase.sh
修改数据库用户名:sed -i "s/defaultAccount/${your_db_account}/g" webase.sh
修改数据库密码:sed -i "s/defaultPassword/${your_db_password}/g" webase.sh

例如:将数据库用户名修改为root,则执行:

sed -i "s/defaultAccount/root/g" webase.sh
5.3 运行数据库脚本

执行命令:bash webase.sh ${dbIP} ${dbPort} 如:

bash webase.sh 127.0.0.1 3306

6. 服务配置及启停

6.1 服务配置修改

(1)回到dist目录,dist目录提供了一份配置模板conf_template:

根据配置模板生成一份实际配置conf。初次部署可直接拷贝。
例如:cp conf_template conf -r

(2)修改服务配置:

修改服务端口:sed -i "s/5001/${your_server_port}/g" conf/application.yml
修改数据库IP:sed -i "s/127.0.0.1/${your_db_ip}/g" conf/application.yml
修改数据库端口:sed -i "s/3306/${your_db_port}/g" conf/application.yml
修改数据库名称:sed -i "s/webasenodemanager/${your_db_name}/g" conf/application.yml
修改数据库用户:sed -i "s/defaultAccount/${your_db_account}/g" conf/application.yml
修改数据库密码:sed -i "s/defaultPassword/${your_db_password}/g" conf/application.yml
6.2 服务启停

在dist目录下执行:

启动:bash start.sh
停止:bash stop.sh
检查:bash status.sh

备注:服务进程起来后,需通过日志确认是否正常启动,出现以下内容表示正常;如果服务出现异常,确认修改配置后,重启提示服务进程在运行,则先执行stop.sh,再执行start.sh。

...
	Application() - main run success...
6.3 查看日志

在dist目录查看:

全量日志:tail -f log/WeBASE-Node-Manager.log
错误日志:tail -f log/WeBASE-Node-Manager-error.log

接口说明

1 前置管理模块

1.1 新增节点前置信息
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /front/new
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 frontIp string 前置ip
2 frontPort int 前置服务端口

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/front/new
{
    "frontIp": "127.0.0.1",
    "frontPort": "5002"
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data Object 节点信息对象
3.1 frontId int 前置编号
3.2 frontIp string 前置ip
3.3 frontPort int 前置端口
3.4 agency string 所属机构
3.5 createTime LocalDateTime 落库时间
3.6 modifyTime LocalDateTime 修改时间
3.7 nodeId int 节点Id
3.8 groupList List 群组列表
3.9 clientVersion String 客户端版本
3.10 supportVersion String 支持版本
3.11 signVersion String 签发版本
3.12 status int 当前节点状态
3.13 runType Byte 运行类型
3.14 agencyId int 所属机构Id
3.15 agencyName int 所属机构名称
3.16 hostId int 主机ID
3.17 hostIndex int 主机索引
3.18 imageTag String
3.19 containerName String 容器名称
3.20 jsonrpcPort int json远程调用端口
3.21 p2pPort int P2P端口
3.22 channelPort int 通道端口
3.23 chainId int 链Id
3.24 chainName String 链名称
3.25 frontVersion String 前置版本

2)出参示例

  • 成功:
{
	"code": 0,
	"message": "success",
	"data": {
		"frontId": 6,
		"nodeId": "6e24cc5a21a41eab08636f8bbde0c93dd4a9ce4f16fa7fbaed0174872716dd1463d3ce822340d0f51badd2e43c9c106adffd740dbae3adcba7843959609322fd",
		"frontIp": "127.0.0.1",
		"frontPort": 5022,
		"agency": null,
		"groupList": null,
		"clientVersion": null,
		"supportVersion": null,
		"frontVersion": "lab-rc1",
		"signVersion": "v2.0.0-lab",
		"createTime": null,
		"modifyTime": null,
		"status": 1,
		"runType": 0,
		"agencyId": null,
		"agencyName": null,
		"hostId": null,
		"hostIndex": null,
		"imageTag": null,
		"containerName": null,
		"jsonrpcPort": null,
		"p2pPort": null,
		"channelPort": null,
		"chainId": 0,
		"chainName": "default"
	},
	"attachment": null
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
1.2 获取所有前置列表
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/front/find?frontId={frontId}&groupId={groupId}&frontStatus={frontStatus}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 frontId Int 前置编号
2 groupId String 所属群组编号
2 frontStatus Int 前置状态

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/front/find
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 totalCount Int 总记录数
4 data List 组织列表
4.1 Object 节点信息对象
4.1.1 frontId int 前置编号
4.1.2 frontIp string 前置ip
4.1.3 frontPort int 前置端口
4.1.4 createTime LocalDateTime 落库时间
4.1.5 modifyTime LocalDateTime 修改时间
4.1.6 agency string 备注所属机构
4.1.7 frontVersion string 前置的后台版本,如: v1.4.0
4.1.8 signVersion string 前置所连接签名服务的后台版本,如: v1.4.0
4.1.9 clientVersion string 链节点的版本,如: 2.5.0 gm
4.1.10 supportVersion string 链节点所支持的最高版本, 如: 2.5.0, (此处仅显示支持的最高版本,不显示是否为国密。若从2.4.0升级到2.5.0,此处将返回2.4.0)
4.1.11 status int 前置服务状态:0,未创建;1,停止;2,启动;
4.1.12 runType int 运行方式:0,命令行;1,Docker
4.1.13 agencyId int 所属机构 ID
4.1.14 agencyName string 所属机构名称
4.1.15 hostId int 所属主机
4.1.16 hostIndex int 一台主机可能有多个节点。表示在主机中的编号,从 0 开始编号
4.1.17 imageTag string 运行的镜像版本标签
4.1.18 containerName string Docker 启动的容器名称
4.1.19 jsonrpcPort int jsonrpc 端口
4.1.20 p2pPort int p2p 端口
4.1.21 channelPort int channel 端口
4.1.22 chainId int 所属链 ID
4.1.23 chainName string 所属链名称
4.1.24 nodeId string 节点ID
4.1.25 groupList List 群组列表

2)出参示例

  • 成功:
{
	"code": 0,
	"message": "success",
	"data": [{
		"frontId": 2,
		"nodeId": "5e4624ac3929babcba542088c0029d6a055f42e03f28b3c9f2c591c2fd0c0ce8c6f1f8bef92131f3acdcee3a4d5698fb30602981e8ff480ed41186828d365abc",
		"frontIp": "127.0.0.1",
		"frontPort": 5002,
		"agency": null,
		"groupList": null,
		"clientVersion": null,
		"supportVersion": null,
		"frontVersion": "string",
		"signVersion": "String",
		"createTime": "2021-12-01 12:49:32",
		"modifyTime": "2021-12-01 12:49:32",
		"status": 1,
		"runType": 0,
		"agencyId": null,
		"agencyName": null,
		"hostId": null,
		"hostIndex": null,
		"imageTag": null,
		"containerName": null,
		"jsonrpcPort": null,
		"p2pPort": null,
		"channelPort": null,
		"chainId": 0,
		"chainName": "default"
	}],
	"totalCount": 1
}
  • 失败:
{
   "code": 102000,
   "message": "system exception",
   "data": {}
}
1.3 删除前置信息
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/front/{frontId}
  • 请求方式:DELETE
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 frontId int 前置编号

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/front/500001
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体(空)

2)出参示例

  • 成功:
{
    "code": 0,
    "data": {},
    "message": "Success"
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
1.4 刷新前置信息
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/front/refresh
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/front/refresh
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体(空)

2)出参示例

  • 成功:
{
    "code": 0,
    "data": {},
    "message": "Success"
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}

2 交易信息模块

2.1 查询交易信息列表
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:
/transaction/transList/{groupId}/{pageNumber}/{pageSize}?transactionHash={transactionHash}&blockNumber={blockNumber}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 所属群组编号
2 transactionHash String 交易hash
3 blockNumber BigInteger 块高
4 pageSize int 每页记录数
5 pageNumber int 当前页码

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/transaction/transList/group/1/10?transactionHash=0x303daa78ebe9e6f5a6d9761a8eab4bf5a0ed0b06c28764488e4716de42e1df01
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 totalCount Int 总记录数
4 data List 交易信息列表
4.1 Object 交易信息对象
4.1.1 transHash String 交易hash
4.1.2 blockNumber BigInteger 所属块高
4.1.3 statisticsFlag Int 是否已经统计
4.1.4 createTime LocalDateTime 落库时间
4.1.5 modifyTime LocalDateTime 修改时间
4.1.6 transFrom String 交易发起方
4.1.7 transTo String 交易接收方
4.1.8 blockTimestamp String 区块时间戳

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": [
        {        
             "transHash": "0x158c20a61d5ee01f64f2fb2b7f752f834b6a64c1687ac2bfc541dcd8b261301c",
             "transFrom": "0x",
             "transTo": "92E730F449bbCE3af96dE1Fb9c9c44672DDccb66",
             "blockNumber": 204,
             "blockTimestamp": "2021-12-02 10:12:21",
             "statisticsFlag": 1,
             "createTime": "2021-12-02 10:12:37",
             "modifyTime": "2021-12-02 10:12:37"
        }
    ],
    "totalCount": 204
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
2.2 查询交易回执
2.2.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/transaction/transactionReceipt/{groupId}/{transHash}
  • 请求方式:GET
  • 返回格式:JSON
2.2.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 所属群组编号
2 transHash String 交易hash

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/transaction/transactionReceipt/group/0x158c20a61d5ee01f64f2fb2b7f752f834b6a64c1687ac2bfc541dcd8b261301c
2.2.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 Object 交易信息对象
3.1 transactionHash String 交易hash
3.2 version String 版本号
3.3 blockNumber String 所属块高
3.4 message String
3.5 gasUsed String 交易消耗的gas
3.6 contractAddress String 合约地址
3.7 status int 交易的状态值
3.8 from String 交易发起者
3.9 to String 交易目标
3.10 output String 交易输出内容
3.11 statusOk boolean
3.12 hash String
3.13 logEntries List 日志
3.14 input String
3.15 transactionProof List
3.16 receiptProof List

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": {
    "version": "0",
    "contractAddress": "",
    "gasUsed": "29999998452",
    "status": 0,
    "blockNumber": "204",
    "output": "0x",
    "transactionHash": "0x158c20a61d5ee01f64f2fb2b7f752f834b6a64c1687ac2bfc541dcd8b261301c",
    "logEntries": [],
    "input": "0x1e26fd330000000000000000000000000000000000000000000000000000000000000001",
    "from": "0x9097678eb34daeebb6e3528ed4f8715cdc5e4c09",
    "to": "92E730F449bbCE3af96dE1Fb9c9c44672DDccb66",
    "transactionProof": null,
    "receiptProof": null,
    "message": null,
    "statusOK": true,
    "hash": "0xf8f0fa250662d5403415600696fbeaba65035cf5d3642cb9787fc958d4d859cc"
  },
  "attachment": null
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
2.3 根据交易hash查询交易信息
2.3.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/transaction/transInfo/{groupId}/{transHash}
  • 请求方式:GET
  • 返回格式:JSON
2.3.2 参数信息详情

请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 所属群组编号
2 transHash String 交易hash

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/transaction/transInfo/group/0x158c20a61d5ee01f64f2fb2b7f752f834b6a64c1687ac2bfc541dcd8b261301c
2.3.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 Object 交易信息对象
3.1 hash String 交易hash
3.2 from String 交易发起者
3.3 to String 交易目标
3.4 nonce String
3.5 input String
3.6 version int 版本
3.7 blockLimit Long 区块限制
3.8 chainID String 链ID
3.9 groupID String 群组编号
3.10 signature String
3.11 importTime Long
3.12 transactionProof List

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": {
    "version": 0,
    "hash": "0x158c20a61d5ee01f64f2fb2b7f752f834b6a64c1687ac2bfc541dcd8b261301c",
    "nonce": "242209552661748908689249931886835523971363412991803060052851540572747331123",
    "blockLimit": 703,
    "to": "92E730F449bbCE3af96dE1Fb9c9c44672DDccb66",
    "from": "0x9097678eb34daeebb6e3528ed4f8715cdc5e4c09",
    "input": "0x1e26fd330000000000000000000000000000000000000000000000000000000000000001",
    "chainID": "chain",
    "groupID": "group",
    "signature": "0x9a43124ac99a39783b1765d0c3ab96de5e7766db44ce06119fde0a5f7357e05628cb9098c220ec7323fcf5bf84ddae2feb69bb350270fccee7323c7d8f536dff00",
    "importTime": 0,
    "transactionProof": null
  },
  "attachment": null
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}

3 帐号管理模块

3.1 新增帐号
3.1.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/account/accountInfo
  • 请求方式:post
  • 请求头:Content-type: application/json
  • 返回格式:JSON
3.1.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 account String 帐号名称
2 accountPwd String 登录密码(sha256)
3 roleId int 所属角色
4 email String

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/account/accountInfo
{
    "account": "testAccount",
    "accountPwd": "3f21a8490cef2bfb60a9702e9d2ddb7a805c9bd1a263557dfd51a7d0e9dfa93e",
    "roleId": 100001,
    "email": "string"
}
3.1.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体
3.1 account String 帐号
3.2 roleId Integer 所属角色
3.3 roleName String 角色名称
3.4 roleNameZh String 角色中文名
3.5 loginFailTime Integer 登录失败次数
3.6 accountStatus Integer 帐号状态
3.7 description String 备注
3.8 createTime LocalDateTime 创建时间
3.9 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "account": "testAccount",
        "roleId": 100001,
        "roleName": "visitor",
        "roleNameZh": "访客",
        "loginFailTime": 0,
        "accountStatus": 1,
        "description": null,
        "createTime": "2019-03-04 15:11:44",
        "modifyTime": "2019-03-04 15:11:44"
    }
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
3.2 修改帐号
3.2.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/account/accountInfo
  • 请求方式:PUT
  • 请求头:Content-type: application/json
  • 返回格式:JSON
3.2.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 account String 帐号名称
2 accountPwd String 登录密码(sha256)
3 roleId int 所属角色
4 email String

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/account/accountInfo
{
    "account": "testAccount",
    "accountPwd": "82ca84cf0d2ae423c09a214cee2bd5a7ac65c230c07d1859b9c43b30c3a9fc80",
    "roleId": 100001,
    "email": "string"
}
3.2.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体
3.1 account String 帐号
3.2 roleId Integer 所属角色
3.3 roleName String 角色名称
3.4 roleNameZh String 角色中文名
3.5 loginFailTime Integer 登录失败次数
3.6 accountStatus Integer 帐号状态
3.7 description String 备注
3.8 createTime LocalDateTime 创建时间
3.9 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "account": "testAccount",
        "roleId": 100001,
        "roleName": "visitor",
        "roleNameZh": "访客",
        "loginFailTime": 0,
        "accountStatus": 1,
        "description": null,
        "createTime": "2019-03-04 15:11:44",
        "modifyTime": "2019-03-04 15:11:44"
    }
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
3.3 删除帐号
3.3.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/account/{account}
  • 请求方式:DELETE
  • 返回格式:JSON
3.3.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 account String 帐号名称

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/account/testAccount
3.3.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体(空)

2)出参示例

  • 成功:
{
    "code": 0,
    "data": {},
    "message": "Success"
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
3.4 查询帐号列表
3.4.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/account/accountList/{pageNumber}/{pageSize}?account={account}
  • 请求方式:GET
  • 返回格式:JSON
3.4.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 pageSize Int 每页记录数
2 pageNumber Int 当前页码
3 account String 帐号

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/account/accountList/1/10?account=
3.4.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 totalCount Int 总记录数
4 data List 信息列表
4.1 Object 信息对象
4.1.1 account String 帐号
4.1.2 roleId Integer 所属角色
4.1.3 roleName String 角色名称
4.1.4 roleNameZh String 角色中文名
4.1.5 loginFailTime Integer 登录失败次数
4.1.6 accountStatus Integer 帐号状态
4.1.7 description String 备注
4.1.8 createTime LocalDateTime 创建时间
4.1.9 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": [
        {
            "account": "testAccount",
            "roleId": 100001,
            "roleName": "visitor",
            "roleNameZh": "访客",
            "loginFailTime": 0,
            "accountStatus": 1,
            "description": null,
            "createTime": "2019-03-04 15:11:44",
            "modifyTime": "2019-03-04 15:18:47"
        },
        {
            "account": "admin",
            "roleId": 100000,
            "roleName": "admin",
            "roleNameZh": "管理员",
            "loginFailTime": 0,
            "accountStatus": 2,
            "description": null,
            "createTime": "2019-02-14 17:33:50",
            "modifyTime": "2019-02-14 17:45:53"
        }
    ],
    "totalCount": 2
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
3.5 更新当前密码
3.5.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/account/passwordUpdate
  • 请求方式:put
  • 请求头:Content-type: application/json
  • 返回格式:JSON
3.5.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 oldAccountPwd String 旧密码(sha256)
2 newAccountPwd String 新密码(sha256)

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/account/passwordUpdate
{
    "oldAccountPwd": "dfdfgdg490cef2bfb60a9702erd2ddb7a805c9bd1arrrewefd51a7d0etttfa93e ",
    "newAccountPwd": "3f21a8490cef2bfb60a9702e9d2ddb7a805c9bd1a263557dfd51a7d0e9dfa93e"
}
3.5.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success"
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
3.6 获取登录验证码
3.6.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/account/pictureCheckCode
  • 请求方式:get
  • 请求头:Content-type: application/json
  • 返回格式:JSON
3.6.2 请求参数

1)入参表

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/account/pictureCheckCode
3.6.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data Object 图片信息实体
3.1 base64Image String 图片的base64
3.2 token String token(登录接口需要用到此值)

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "base64Image": "iVBORw0KGgoAAAANSUhEUgAAAJsAAAA8CAIAAAD+Gl+NAAAC3ElEQVR42u3cO04DMRAG4DkER6CFhoNwCgoq6DgQh0DiVJR0oUCKovWuPU977P2trZK1s/GnGb8g9PN7wbXSRReUtQpEIYoCURSIokAUBaIQTV2+P798r3mfnJbB69nXvmAnjdHm9+8ZgruNjI31mUQrvWPpPpeuH+43n2g9FOJyrOJmiMpQ+4fC0cdVniED6hzj6NjMdv3cZvJHjCpz70DazJY+oh2mBptmH+7um5eo/ff3F+mVENJHVDrMeEUGB1W0mFGgLrhnVI9OL1QdZ58wzTnVIMcA3X3FXTQP6tjJ7dFuBjnm29JgXlGXbazoubcs63K23JgSxu/MQXXpKd1IWS6XQ42b7ZOoH/lIZfp9ff7YXCuJHvX709sj87Jb1kQ5Ichp/XpPySmlra9hvCJAl3vr77qg8kO/h2idU4eaRJTTCXzRo9QtSuOkBuOjckQVriWqC7MIldnX6jD1OfF25NwNUP679X50n+4qljH2rMBJvNYY5QefDrWspZ4xRSxjOqMyh1I+arhoqbVbS4HK5IzebejAKUIlS/AlRL0OJ1OgShcwyvVotKjjLGmD2vSOXptGc3J63iSaBFUUx+oDmVSilf4/nWieMHURLRWsomrUnhvcOVEdRW8tyIIkuj9OtKmVUDSC01NUh9ozr2ZDdU+5jRPvIFHmEsUy3eVMeqP37jtwVk7uyCgkrcU5VtOFcsW1/2F4kCjnCLZxPqqI1Hot/mmMPVKDNgXdRflnMso9I07Aqc/abl+PWMOsispvmaRZVL3ru3vmF7EkdT+NWUq0kr5FO4Vl3U31iB0GL865UAV/Czj8X/tOUoxdhN9hyChqqQ7RpTghClEUiKJAFKIQBSpEF0aFKETX7cRsW1q6JyEoHh0qZABWfDqdnDPi5rGPSqflHLK06OBKiM7O1e0DRH1EIETn2HY4bMxffp31F5MHRmeQq3EW5vPrN2eOTq8h2X0u/d/aH4oBfftm+5EiAAAAAElFTkSuQmCC",
        "token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIzOGM0NjlhNC1kMTg3LTQyZDQtYWM1YS02OWU0OWM5MjMxNTkiLCJpYXQiOjE1NjAyNDY3MzksInN1YiI6ImU1RnoiLCJleHAiOjE1NjAyNDY3OTl9.FJYRZJSAhFjvO_P4AjMO6bnoOZJiu-AOSdO9ikb-30M"
    }
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
3.7 登录接口
3.7.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/account/login?checkCode={checkCode}
  • 请求方式:get
  • 请求头:Content-type: application/json;token:{token}
  • 返回格式:JSON
3.7.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 checkCode String 登录验证码
2 account String 帐号
3 accountPwd String 密码
4 token String 随验证码返回的token

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/account/login?checkCode=aege
{
    "account": "admin",
    "accountPwd": "Abcd1234"
}
1.1.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data Object 图片信息实体
3.1 account String 账户
3.2 roleName String 角色
3.3 accountStatus Int 状态

2)出参示例

  • 成功:
{
    "code": 0,
    "data": {
        "accountStatus": 2,
        "roleName": "admin",
        "account": "admin"
    },
    "message": "success"
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}

4 区块管理模块

4.1 查询区块列表
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/block/blockList/{groupId}/{pageNumber}/{pageSize}}?pkHash={pkHash}&blockNumber={blockNumber}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 当前所属链
2 pageSize Int 每页记录数
3 pageNumber Int 当前页码
4 pkHash String 区块hash
5 blockNumber BigInteger 块高

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/block/blockList/group/1/10?pkHash=
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 totalCount Int 总记录数
4 data List 区块列表
4.1 Object 区块信息对象
4.1.1 pkHash String 块hash
4.1.2 blockNumber BigInteger 块高
4.1.3 blockTimestamp LocalDateTime 出块时间
4.1.4 transCount int 交易数
4.1.5 sealerIndex int 打包节点索引
4.1.6 sealer String 打包节点
4.1.7 createTime LocalDateTime 创建时间
4.1.8 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": [
        {
            "pkHash": "0xa6a8e4154fc9c5dbd19922fcb7a77e4018f7004c5681d9d5faf1e3f5723c2053",
            "blockNumber": 206,
            "blockTimestamp": "2021-12-02 14:43:51",
            "transCount": 1,
            "sealerIndex": 0,
            "sealer": "2d5053131f5c0a906fec99380ae797b505e697e1ec0e1f2b59a85ae7f28cb3313986e4e627090d8fdff0c545b82e475f00e616f28fd2b4ce0fb43c74bef7c2ab",
            "createTime": "2021-12-02 14:44:16",
            "modifyTime": "2021-12-02 14:44:16"
        },
        ......
    ],
    "totalCount": 207
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
4.2 根据块高查询区块信息
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/block/blockByNumber/{groupId}/{blockNumber}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 当前所属链
2 pageNumber Int 当前页码

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/block/blockByNumber/group/1
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 Object 区块信息对象
3.1 number BigInteger 块高
3.2 hash String 区块hsah
3.3 parentHash String 父块hash
3.4 nonce String 随机数
3.5 sealer String 打包节点索
3.6 logsBloom String log的布隆过滤值
3.7 transactionsRoot String
3.8 stateRoot String
3.9 difficulty String
3.10 totalDifficulty String
3.11 extraData String
3.12 size int
3.13 gasLimit long 限制gas值
3.14 gasUsed long 已使用的gas值
3.15 timestamp String 出块时间
3.16 gasLimitRaw String
3.17 timestampRaw String
3.18 gasUsedRaw String
3.19 numberRaw String
3.20 transactions List
3.20.1 Object 交易信息对象
3.20.1.1 hash String 交易hash
3.20.1.2 blockHash String 区块hash
3.20.1.3 blockNumber BigInteger 所属块高
3.20.1.4 cumulativeGasUsed Int
3.20.1.5 gasUsed Int 交易消耗的gas
3.20.1.6 contractAddress String 合约地址
3.20.1.7 status String 交易的状态值
3.20.1.8 from String 交易发起者
3.20.1.9 to String 交易目标
3.20.1.10 output String 交易输出内容
3.20.1.11 logs String 日志
3.20.1.12 logsBloom String log的布隆过滤值
3.20.1.13 nonce String
3.20.1.14 value String
3.20.1.15 gasPrice long
3.20.1.16 gas long
3.20.1.17 input String
3.20.1.18 v int
3.20.1.19 nonceRaw String
3.20.1.20 blockNumberRaw String
3.20.1.21 gasPriceRaw String
3.20.1.22 gasRaw String
3.20.1.23 transactionIndex Int 在区块中的索引

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": {
    "number": 1,
    "version": 0,
    "hash": "0x60d1eacd2a279c343c74b673ad30fc6c6a528fb8434b90cc276cc239bf998835",
    "logsBloom": null,
    "receiptsRoot": "0x96e73cf059095f36cd0fed8bd3ce15550de892eae269598b7ba9e1721c8d05a9",
    "stateRoot": "0xd212274a9fdaf3c59a9733f0607b510456d5f395ae0a19c391cd277ff54c2872",
    "sealer": 0,
    "sealerList": [
      "0x2d5053131f5c0a906fec99380ae797b505e697e1ec0e1f2b59a85ae7f28cb3313986e4e627090d8fdff0c545b82e475f00e616f28fd2b4ce0fb43c74bef7c2ab",
      "0x44f760aa2f9058d2dd85a578197d2bfdeac7ef8db1dec39386854e1d66bce4077ce3cae1e4779658b3ebcf929c12e6f7a9c646b60084038c73aeeb9a9b376dab"
    ],
    "extraData": "0x",
    "gasUsed": "6677",
    "timestamp": 1637909172326,
    "parentInfo": [
      {
        "blockNumber": 0,
        "blockHash": "0xe093202d1b18d96ac52700c37af54cd370f06d5062d31232baa3d9ac324d6a57"
      }
    ],
    "signatureList": [
      {
        "signature": "0x1695e0ae6ca37a5fd3d6dfd5c4f18223ec509caa89a485f58cc2675b9147538d1bd381ff5e1b07169639ad1865d18b9b9d1c01335a1edd6d251ff4a1dcef6d4700",
        "sealerIndex": 0
      },
      {
        "signature": "0x8d05b9be2cd01006e249b96c10261e560bf4994144e3808c64186b67001f70675a7d00244d4bc78b6c2369206d9675ed64e37c89c168c113afe4706db9bb0b1801",
        "sealerIndex": 1
      }
    ],
    "consensusWeights": [
      1,
      1
    ],
    "transactions": [
      {
        "version": 0,
        "hash": "0x29fc394aab9f6b850cf670e4ffcfa07f749d65a96fdaf4a1734d08078716df2a",
        "nonce": "628963865034161222069339779084488493077824905060891430374114608099078683365",
        "blockLimit": 500,
        "to": "",
        "from": "0x",
        "input": "0x608060405234801561001057600080fd5b50610148806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680635f76f6ab146100515780636d4ce63c14610080575b600080fd5b34801561005d57600080fd5b5061007e6004803603810190808035151590602001909291905050506100af565b005b34801561008c57600080fd5b50610095610106565b604051808215151515815260200191505060405180910390f35b7f36091dfff76478d9ae2479602161a4e2cab3189920dc3bd12ee0e9e37a35cdc481604051808215151515815260200191505060405180910390a1806000806101000a81548160ff02191690831515021790555050565b60008060009054906101000a900460ff169050905600a165627a7a72305820e29d1a7d9ff77427603f50bd778c7194a67eb5d3e043498f1e666f95f47f8f090029",
        "chainID": "chain",
        "groupID": "group",
        "signature": "0x01ca79d793e424fa2cd54ef8b8967cfdae72b7560d9ff9236bff5d833946571573b87172963acda9a88f119d932d7c76ae4ac2f29badf3e135c3b6f0eefd948e00",
        "importTime": 0,
        "transactionProof": null
      }
    ],
    "txsRoot": "0xc329ee0d01e17507035ef1e507a77484f0191744f9d28ad252ed33c9147cfa05"
  },
  "attachment": null
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}

5 合约管理模块

5.1 查询合约列表
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/contract/contractList/
  • 请求方式:POST
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组id
2 contractName String 合约名
3 contractAddress String 合约地址
4 pageSize int 每页记录数
5 pageNumber int 当前页码
6 contractStatus int 1未部署,2已部署
7 account String 关联账户
8 contractPath String 合约路径

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/contract/contractList
{
  "account": "string",
  "contractAddress": "string",
  "contractName": "string",
  "contractPath": "string",
  "contractStatus": 0,
  "groupId": "string",
  "pageNumber": 0,
  "pageSize": 0
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 totalCount Int 总记录数
4 data List 列表
5.1 Object 返回信息实体
5.1.1 contractId int 合约编号
5.1.2 contractPath String 合约所在目录
5.1.3 contractName String 合约名称
5.1.4 groupId String 所属群组编号
5.1.5 contractStatus int 1未部署,2已部署
5.1.6 contractType Int 合约类型(0-普通合约,1-系统合约)
5.1.7 contractSource String 合约源码base64
5.1.8 contractAbi String 合约编译后生成的abi文件内容
5.1.9 contractBin String 合约编译后生成的bin,可用于交易解析
5.1.10 bytecodeBin String 合约编译后生成的bytecodeBin,可用于合约部署
5.1.11 contractAddress String 合约地址
5.1.12 deployTime LocalDateTime 部署时间
5.1.13 contractVersion String 合约版本(会去除该字段)
5.1.14 description String 备注
5.1.15 account String 关联账户
5.1.16 createTime LocalDateTime 创建时间
5.1.17 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": [
        {
            "contractId": 200002,
            "contractPath": "hellos",
            "contractVersion": null,
            "contractName": "hellos",
            "contractStatus": 2,
            "groupId": "group",
            "contractType": 0,
            "contractSource": "cHJhZ21hIHNvbGlkaXgICAJbmFtZSA9IG47CiAgICB9Cn0=",
            "contractAbi": "[\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]",
            "contractBin": "608060405234801561001057600080004d4c",
            "bytecodeBin": "60806040526004361061004c576000398de7e4ddf5fdc9ccbcfd44565fed695cd960b0029",
            "deployTime": "2019-06-11 18:11:33",
            "description": null,
            "account": "admin",
            "createTime": "2019-06-05 16:40:40",
            "modifyTime": "2019-06-11 18:11:33"
        }
    ],
    "totalCount": 1
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
5.2 查询合约信息
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/contract/{contractId}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 contractId int 合约编号

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/contract/200001
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 Object 返回信息实体
3.1 contractId int 合约编号
3.2 contractPath String 合约所在目录
3.3 contractName String 合约名称
3.4 groupId String 所属群组编号
3.5 contractStatus int 1未部署,2已部署
3.6 contractType Int 合约类型(0-普通合约,1-系统合约)
3.7 contractSource String 合约源码
3.8 contractAbi String 编译合约生成的abi文件内容
3.9 contractBin String 合约编译的runtime-bytecode(runtime-bin),用于交易解析
3.10 bytecodeBin String 合约编译的bytecode(bin),用于部署合约
3.11 contractAddress String 合约地址
3.12 deployTime LocalDateTime 部署时间
3.13 contractVersion String 合约版本(会去除该字段)
3.14 description String 备注
3.15 account String 关联账户
3.16 createTime LocalDateTime 创建时间
3.17 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "contractId": 200002,
        "contractPath": "hellos",
        "contractVersion": null,
        "contractName": "hellos",
        "contractStatus": 2,
        "groupId": "group",
        "contractType": 0,
        "contractSource": "cHJhZ21hIHNvbGlkaXgICAJbmFtZSA9IG47CiAgICB9Cn0=",
        "contractAbi": "[\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]",
        "bytecodeBin": "60806040526004361061004c576000398de7e4ddf5fdc9ccbcfd44565fed695cd960b0029",
        "contractBin": "608060405234801561001057600080004d4c",
        "deployTime": "2019-06-11 18:11:33",
        "description": null,
        "account": "admin",
        "createTime": "2019-06-05 16:40:40",
        "modifyTime": "2019-06-11 18:11:33"
    }
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
5.3 部署合约

构造方法参数(funcParam)为JSON数组,多个参数以逗号分隔(参数为数组时同理),示例:

constructor(string s) -> ["aa,bb\"cc"]  // 双引号要转义
constructor(uint n,bool b) -> [1,true]
constructor(bytes b,address[] a) -> ["0x1a",["0x7939E26070BE44E6c4Fc759Ce55C6C8b166d94BE","0xce867fD9afa64175bb50A4Aa0c17fC7C4A3C67D9"]]
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/contract/deploy
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 所属群组编号
2 contractName String 合约名称
3 contractSource String 合约源码
4 contractAbi String 编译合约生成的abi文件内容
5 contractBin String 合约编译的runtime-bytecode(runtime-bin),用于交易解析
6 bytecodeBin String 合约编译的bytecode(bin),用于部署合约
7 contractId String 合约名称
8 contractPath String 合约所在目录
9 user String WeBASE的私钥用户的地址
10 account String 关联账户
11 constructorParams List 构造函数入参,根据合约构造函数决定

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/contract/deploy
{
	"groupId": "group",
	"contractBin": "60806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d146100515780633590b49f146100e1575b600080fd5b34801561005d57600080fd5b5061006661014a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100a657808201518184015260208101905061008b565b50505050905090810190601f1680156100d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100ed57600080fd5b50610148600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101ec565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b8060009080519060200190610202929190610206565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024757805160ff1916838001178555610275565b82800160010185558215610275579182015b82811115610274578251825591602001919060010190610259565b5b5090506102829190610286565b5090565b6102a891905b808211156102a457600081600090555060010161028c565b5090565b905600a165627a7a72305820456bd30e517ce9633735d32413043bf33a2453c7f56e682b13e6125452d689dc0029",
	"bytecodeBin": "608060405234801561001057600080fd5b506040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b6102d7806101166000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d146100515780633590b49f146100e1575b600080fd5b34801561005d57600080fd5b5061006661014a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100a657808201518184015260208101905061008b565b50505050905090810190601f1680156100d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100ed57600080fd5b50610148600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101ec565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b8060009080519060200190610202929190610206565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024757805160ff1916838001178555610275565b82800160010185558215610275579182015b82811115610274578251825591602001919060010190610259565b5b5090506102829190610286565b5090565b6102a891905b808211156102a457600081600090555060010161028c565b5090565b905600a165627a7a72305820456bd30e517ce9633735d32413043bf33a2453c7f56e682b13e6125452d689dc0029",
	"contractAbi": "[{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]",
	"contractSource": "cHJhZ21hIHNvbGlkaXR5ID49MC40LjI0IDwwLjYuMTE7Cgpjb250cmFjdCBIZWxsb1dvcmxkIHsKICAgIHN0cmluZyBuYW1lOwoKICAgIGNvbnN0cnVjdG9yKCkgcHVibGljIHsKICAgICAgICBuYW1lID0gIkhlbGxvLCBXb3JsZCEiOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldCgpIHB1YmxpYyB2aWV3IHJldHVybnMgKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gbmFtZTsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXQoc3RyaW5nIG1lbW9yeSBuKSBwdWJsaWMgewogICAgICAgIG5hbWUgPSBuOwogICAgfQp9",
	"user": "0xdccae56cef725605d0fa1e00fd553074a74091c5",
	"contractName": "HelloWorld",
	"contractId": 200306,
	"contractPath": "/",
	"account": "admin"
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 Object 返回信息实体
3.1 contractId int 合约编号
3.2 contractPath String 合约所在目录
3.3 contractName String 合约名称
3.4 groupId String 所属群组编号
3.5 contractStatus int 1未部署,2已部署
3.6 contractType Int 合约类型(0-普通合约,1-系统合约) (已弃用字段)
3.7 contractSource String 合约源码
3.8 contractAbi String 编译合约生成的abi文件内容
3.9 contractBin String 合约编译的runtime-bytecode(runtime-bin),用于交易解析
3.10 bytecodeBin String 合约编译的bytecode(bin),用于部署合约
3.11 contractAddress String 合约地址
3.12 deployTime LocalDateTime 部署时间
3.13 contractVersion String 合约版本(会去除该字段)
3.14 description String 备注
3.15 account String 关联账户
3.16 createTime LocalDateTime 创建时间
3.17 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "contractId": 200008,
        "contractPath": "Hi",
        "contractVersion": null,
        "contractName": "HeHe",
        "contractStatus": 2,
        "groupId": "group",
        "contractType": null,
        "contractSource": "cHJhZ21hIHNvbGlkaXR5IF4wLjQuM0=",
        "contractAbi": "[]",
        "bytecodeBin": "60806040526004361061004c576000357c010274c87bff322ea2269b80029",
        "contractBin": "608060405234801561001057629",
        "contractAddress": "0xa2ea2280b3a08a3ae2e1785dff09561e13915fb2",
        "deployTime": "2019-06-11 18:58:33",
        "description": null,
        "account": "admin",
        "createTime": null,
        "modifyTime": null,
        "deployAddress": "0xb783d7c2cd45d8c678093d5f6f1d61855e260e67",
		"deployUserName": "frank"
    }
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
5.4 发送交易

方法入参(funcParam)为JSON数组,多个参数以逗号分隔(参数为数组时同理),示例:

function set(string s) -> ["aa,bb\"cc"] // 双引号要转义
function set(uint n,bool b) -> [1,true]
function set(bytes b,address[] a) -> ["0x1a",["0x7939E26070BE44E6c4Fc759Ce55C6C8b166d94BE","0xce867fD9afa64175bb50A4Aa0c17fC7C4A3C67D9"]]
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/contract/transaction
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 所属群组编号
2 user String 私钥用户的地址
3 contractName String 合约名称
4 contractId Int 合约编号
5 funcName String 合约方法名
6 contractAddress String 合约地址
7 funcParam List 合约方法入参
8 contractAbi List 合约abi/合约单个函数的abi
9 useCns bool 是否使用cns调用,默认为false
10 cnsName String CNS名称,useCns为true时不能为空
11 version String CNS合约版本,useCns为true时不能为空

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/contract/transaction
{
    "groupId": "group",
    "user":"0xdccae56cef725605d0fa1e00fd553074a74091c5",
    "contractName":"HelloWorld",
    "funcName":"set",
    "funcParam":["gwes"],
    "contractAbi": [{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"n","type":"string"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],
    "contractId":200306,
    "contractAddress":"0x4d1cbcc47b2558d818b9672df67f22f9a9645c87"
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体(空)

2)出参示例

  • 成功:
{
	"code": 0,
	"message": "success",
	"data": [{
		"value": 0,
		"bitSize": 16,
		"typeAsString": "int16"
	}],
	"attachment": null
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
5.5 根据包含bytecodeBin的字符串查询合约
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /contract/findByPartOfBytecodeBin
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 所属群组编号
2 partOfBytecodeBin String 包含合约bytecodeBin的的字符串

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/contract/findByPartOfBytecodeBin
{
    "groupId": "group",
    "partOfBytecodeBin": "abc123455dev"
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 Object 返回信息实体
3.1 contractId int 合约编号
3.2 contractName String 合约名称
3.3 groupId String 所属群组编号
3.4 contractType Int 合约类型(0-普通合约,1-系统合约)
3.5 contractSource String 合约源码
3.6 contractAbi String 编译合约生成的abi文件内容
3.7 contractBin String 合约编译的runtime-bytecode(runtime-bin),用于交易解析
3.8 bytecodeBin String 合约编译的bytecode(bin),用于部署合约
3.9 contractAddress String 合约地址
3.10 deployTime LocalDateTime 部署时间
3.11 contractVersion String 合约版本
3.12 description String 备注
3.13 account String 关联账户
3.14 createTime LocalDateTime 创建时间
3.15 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "contractId": 200002,
        "contractName": "Ok",
        "groupId": 2,
        "chainIndex": null,
        "contractType": 0,
        "contractSource": "cHJhZ21hIDQoNCg0KfQ==",
        "contractAbi": "[]",
        "contractBin": "60606040526000357c01000000000029",
        "bytecodeBin": "123455",
        "contractAddress": "0x19146d3a2f138aacb97ac52dd45dd7ba7cb3e04a",
        "deployTime": null,
        "contractVersion": "v6.0",
        "description": null,
        "account": "admin",
        "createTime": "2019-04-15 21:14:40",
        "modifyTime": "2019-04-15 21:14:40"
    }
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
5.6. 保存合约接口
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/contract/save
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 所属群组编号
2 contractId int 合约编号,传入contractId表示更新,否则新增
3 contractName String 合约名称
4 contractPath String 合约所在目录
5 contractSource String 合约源码的base64
6 contractAbi String 合约编译后生成的abi文件内容
7 contractBin String 合约编译后生成的bin,可用于交易解析
8 bytecodeBin String 合约编译后生成的bytecodeBin,可用于合约部署
9 account String 关联账户,新建时不能为空
10 contractAddress String 合约地址

2)入参示例

{
    "groupId": "group",
    "contractName": "HeHe",
    "contractPath": "/",
    "contractSource": "cHJhZ21hIHNvbGlkaXR5IF4wLjQuMjsn0=",
    "contractAbi": “[]”
    "contractBin": "60806040526004361061004c576000357c0100000000000000000000000029",
    "bytecodeBin": "6080604052348015610010572269b80029",
    "contractId": 1,
    "account": "admin",
    "contractAddress": "string"
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 Object 返回信息实体
3.1 contractId int 合约编号
3.2 contractPath String 合约所在目录
3.3 contractName String 合约名称
3.4 groupId String 所属群组编号
3.5 contractStatus int 1未部署,2已部署
3.6 contractType Int 合约类型(0-普通合约,1-系统合约)
3.7 contractSource String 合约源码base64
3.8 contractAbi String 合约编译后生成的abi文件内容
3.9 contractBin String 合约编译后生成的bin,可用于交易解析
3.10 bytecodeBin String 合约编译后生成的bytecodeBin,可用于合约部署
3.11 contractAddress String 合约地址
3.12 deployTime LocalDateTime 部署时间
3.13 contractVersion String 合约版本(会去除该字段)
3.14 description String 备注
3.15 account String 关联账户
3.16 createTime LocalDateTime 创建时间
3.17 modifyTime LocalDateTime 修改时间
5.7 获取Abi信息
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /abi/{abiId}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 abiId Long abi编号

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/abi/1
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 Object 返回信息实体
3.1 abiId int 合约编号
3.2 contractName String 合约名称
3.3 groupId Int 所属群组编号
3.4 contractAddress String 合约地址
3.5 contractAbi String 导入的abi文件内容
3.6 contractBin String 合约runtime-bytecode(runtime-bin)
3.7 account String 所属账号
3.8 createTime LocalDateTime 创建时间
3.9 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": {
    "abiId": 1,
    "groupId": 1,
    "contractName": "TTT",
    "contractAddress": "0x3214227e87bccca63893317febadd0b51ade735e",
    "contractAbi": "[{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"setSender\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"SetName\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"uint256[2]\"}],\"name\":\"EventList\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SetSender\",\"type\":\"event\"}]",
    "contractBin": "608060405260043610610057576000357...",
    "account": "admin",
    "createTime": "2020-05-18 10:59:02",
    "modifyTime": "2020-05-18 10:59:02"
  }
}
5.8 获取Abi信息分页列表
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /abi/list/{groupId}/{pageNumber}/{pageSize}?account={account}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组编号
2 pageNumber int 页码,从1开始
3 pageSize int 页大小
4 account String 所属账号

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/abi/list/group/1/5?account=
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 Object 返回信息实体
3.1 abiId int 合约编号
3.2 contractName String 合约名称
3.3 groupId String 所属群组编号
3.4 contractAddress String 合约地址
3.5 contractAbi String 导入的abi文件内容
3.6 contractBin String 合约runtime-bytecode(runtime-bin)
3.7 account String 所属账号
3.8 createTime LocalDateTime 创建时间
3.9 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": [
    {
      "abiId": 1,
      "groupId": "group",
      "account": "admin",
      "contractName": "TTT",
      "contractAddress": "0x3214227e87bccca63893317febadd0b51ade735e",
      "contractAbi": "[{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"setSender\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"SetName\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"uint256[2]\"}],\"name\":\"EventList\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SetSender\",\"type\":\"event\"}]",
      "contractBin": "608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463fffff...29",
      "createTime": "2020-05-18 10:59:02",
      "modifyTime": "2020-05-18 10:59:02"
    }
  ],
  "totalCount": 1
}
5.9. 导入已部署合约的abi
将其他平台已部署的合约导入到本平台进行管理
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/abi
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 所属群组编号
2 contractAddress String 合约地址
3 contractName String 合约名称
4 contractAbi List 合约编译后生成的abi文件内容
5 account String 所属账号
6 abiId int 合约编号

2)入参示例

{
    "groupId": "group",
    "abiId": 1,
    "account": "admin",
    "contractAddress": "0x3214227e87bccca63893317febadd0b51ade735e",
    "contractName": "HelloWorld",
    "contractAbi": [{
        "constant": false,
        "inputs": [{
            "name": "n",
            "type": "string"
        }],
        "name": "set",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    }, {
        "constant": true,
        "inputs": [],
        "name": "get",
        "outputs": [{
            "name": "",
            "type": "string"
        }],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    }, {
        "anonymous": false,
        "inputs": [{
            "indexed": false,
            "name": "name",
            "type": "string"
        }],
        "name": "SetName",
        "type": "event"
    }]
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体(空)

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success"
}
5.10. 修改已部署合约的abi
将其他平台已部署的合约导入到本平台进行管理
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/abi
  • 请求方式:PUT
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 abiId long abi编号
2 groupId String 所属群组编号
3 contractAddress String 合约地址
4 contractName String 合约名称
5 contractAbi List 合约编译后生成的abi文件内容
6 account String

2)入参示例

{
    "abiId": 1,
    "groupId": "group",
    "contractAddress": "0x3214227e87bccca63893317febadd0b51ade735e",
    "contractName": "HelloWorld",
    "contractAbi": [{"constant":false,"inputs":[{"name":"n","type":"string"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"name","type":"string"}],"name":"SetName","type":"event"}]
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体(空)

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success"
}
5.11. 获取全量合约列表(不包含abi/bin)
接口描述
根据群组编号和合约状态获取全量合约
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/contract/contractList/all/light?groupId={groupId}&contractStatus={contractStatus}
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约状态 contractStatus Integer 1未部署,2已部署

2)数据格式

http://127.0.0.1:5001/WeBASE-Node-Manager/contract/contractList/all/light?groupId=group&contractStatus=2
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String
3 返回数据 data Object
3.1 合约编号 id Integer
3.2 所在目录 contractPath String
3.3 合约名称 contractName String
3.4 合约状态 contractStatus Integer 1未部署,2已部署
3.5 所属群组 groupId Integer
3.6 合约地址 contractAddress String
3.7 部署时间 deployTime String
3.8 修改时间 modifyTime String
3.9 创建时间 createTime String
3.10 备注 description String
3.11 部署用户地址 deployAddress String
3.12 部署用户姓名 deployUserName String

2)数据格式

{
    "code": 0,
    "message": "success",
    "data": [
        {
            "id": 2,
            "contractPath": "/",
            "contractName": "HeHe",
            "contractStatus": 1,
            "groupId":"group",
            "contractSource": "cHJhZ21hIHNvbGlkaXR5IICB9Cn0=",
            "contractAddress": null,
            "deployTime": null,
            "description": null,
            "createTime": "2019-06-10 16:42:50",
            "modifyTime": "2019-06-10 16:42:52"
        }
    ],
    "totalCount": 1
}
5.12. 保存合约路径
接口描述
保存合约路径
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/contract/contractPath
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约路径 contractPath String
3 账户 account String

2)数据格式

http://127.0.0.1:5001/WeBASE-Node-Manager/contract/contractPath
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String
3 返回数据 data int 增加数

2)数据格式

{
    "code": 0,
    "message": "success",
    "data": 1 
}
5.13. 删除合约路径并批量删除合约
接口描述
删除合约路径并批量删除合约
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/contract/batch/path
  • 请求方式:DELETE
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约路径 contractPath String
3 账户 account String

2)数据格式

http://127.0.0.1:5001/WeBASE-Node-Manager/contract/batch/path
{
    "groupId": "group",
    "contractPath": test
}
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String

2)数据格式

{
    "code": 0,
    "message": "success"
}
5.14 获取合约与导入ABI列表(分页)
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /abi/list/all/{groupId}/{pageNumber}/{pageSize}?account={account}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组编号
2 pageNumber int 页码,从1开始
3 pageSize int 页大小
4 account String 所属账号
5 contractName String
6 contractAddress String

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/abi/list/all/group/1/5
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 Object 返回数据
3.0 contractId int 合约编号(contractId为空时,说明合约为外部导入的)
3.1 abiId int 合约abi编号
3.2 contractName String 合约名称
3.3 groupId String 所属群组编号
3.4 contractAddress String 合约地址
3.5 contractAbi String 导入的abi文件内容
3.6 contractBin String 合约runtime-bytecode(runtime-bin)
3.7 account String 所属账号
3.8 createTime LocalDateTime 创建时间
3.9 modifyTime LocalDateTime 修改时间
3.10 contractPath String 合约路径
3.11 contractStatus int 合约状态
3.12 deployAddress String 部署用户地址
3.13 deployUserName String 部署用户名
3.14 contractVersion String 合约版本
3.15 contractType int 合约类型
3.16 contractSource String 合约来源
3.17 bytecodeBin String 字节码bin
3.18 deployTime String 部署时间
3.19 description String 描述

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": [
    {
      "contractId": 200032,
      "contractPath": "/",
      "contractVersion": null,
      "contractName": "AAA",
      "account": "admin",
      "contractStatus": 2,
      "groupId": "group",
      "contractType": 0,
      "contractSource": null,
      "contractAbi": "[{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"int256\"}],\"name\":\"test\",\"type\":\"event\"}]",
      "contractBin": "60806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634ed3885e146100515780636d4ce63c146100ba575b600080fd5b34801561005d57600080fd5b506100b8600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061014a565b005b3480156100c657600080fd5b506100cf61019c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010f5780820151818401526020810190506100f4565b50505050905090810190601f16801561013c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b7f9b22c05d8738838d85bfcacfb2975e59c4f830d5977978bc4e3807f38d08b40e607b6040518082815260200191505060405180910390a1806000908051906020019061019892919061023e565b5050565b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102345780601f1061020957610100808354040283529160200191610234565b820191906000526020600020905b81548152906001019060200180831161021757829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061027f57805160ff19168380011785556102ad565b828001600101855582156102ad579182015b828111156102ac578251825591602001919060010190610291565b5b5090506102ba91906102be565b5090565b6102e091905b808211156102dc5760008160009055506001016102c4565b5090565b905600a165627a7a72305820af1790f550db8574896d26e14c0d9b1e24ac7d740ceb8514606e649c7688a3fe0029",
      "bytecodeBin": "608060405234801561001057600080fd5b5061030f806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634ed3885e146100515780636d4ce63c146100ba575b600080fd5b34801561005d57600080fd5b506100b8600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061014a565b005b3480156100c657600080fd5b506100cf61019c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010f5780820151818401526020810190506100f4565b50505050905090810190601f16801561013c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b7f9b22c05d8738838d85bfcacfb2975e59c4f830d5977978bc4e3807f38d08b40e607b6040518082815260200191505060405180910390a1806000908051906020019061019892919061023e565b5050565b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102345780601f1061020957610100808354040283529160200191610234565b820191906000526020600020905b81548152906001019060200180831161021757829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061027f57805160ff19168380011785556102ad565b828001600101855582156102ad579182015b828111156102ac578251825591602001919060010190610291565b5b5090506102ba91906102be565b5090565b6102e091905b808211156102dc5760008160009055506001016102c4565b5090565b905600a165627a7a72305820af1790f550db8574896d26e14c0d9b1e24ac7d740ceb8514606e649c7688a3fe0029",
      "contractAddress": "0xab9F30F9827e1C16Bf62d557c3626AeAd9E85502",
      "deployTime": "2021-12-06 11:31:34",
      "description": null,
      "createTime": "2021-12-06 11:31:34",
      "modifyTime": "2021-12-06 11:31:34",
      "deployAddress": "0x9097678eb34daeebb6e3528ed4f8715cdc5e4c09",
      "deployUserName": "new_test",
      "abiId": 26
    },
    ...
  ],
  "totalCount": 2
}
5.15. 导入合约仓库到IDE
接口描述
保存多个合约
传输协议规范
  • 网络传输协议:HTTP协议
  • 请求地址:/contract/copy
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约IDE路径 contractPath String 默认为"/"
3 合约所属用户 account String
4 合约内容 contractItems List RepCopyContractItem的List
4.1 合约名称 contractName String
4.2 合约源码 contractSource String Base64编码

2)数据格式

http://127.0.0.1:5001/WeBASE-Node-Manager/contract/copy
{
	"contractItems": [{
		"contractName": "Evidence",
		"contractSource": "cHJhZ21hIHNvbGlkaXR5IF4wLjQuNDsKY29udHJhY3QgRXZpZGVuY2VTaWduZXJzRGF0YUFCSXsgZnVuY3Rpb24gdmVyaWZ5KGFkZHJlc3MgYWRkcilwdWJsaWMgY29uc3RhbnQgcmV0dXJucyhib29sKXt9CmZ1bmN0aW9uIGdldFNpZ25lcih1aW50IGluZGV4KXB1YmxpYyBjb25zdGFudCByZXR1cm5zKGFkZHJlc3Mpe30gCmZ1bmN0aW9uIGdldFNpZ25lcnNTaXplKCkgcHVibGljIGNvbnN0YW50IHJldHVybnModWludCl7fQp9Cgpjb250cmFjdCBFdmlkZW5jZXsKICAgIAogICAgc3RyaW5nIGV2aWRlbmNlOwogICAgc3RyaW5nIGV2aWRlbmNlSW5mbzsKICAgIHN0cmluZyBldmlkZW5jZUlkOwogICAgdWludDhbXSBfdjsKICAgIGJ5dGVzMzJbXSBfcjsKICAgIGJ5dGVzMzJbXSBfczsKICAgIGFkZHJlc3NbXSBzaWduZXJzOwogICAgYWRkcmVzcyBwdWJsaWMgc2lnbmVyc0FkZHI7CiAgICAKICAgICAgICBldmVudCBhZGRTaWduYXR1cmVzRXZlbnQoc3RyaW5nIGV2aSwgc3RyaW5nIGluZm8sIHN0cmluZyBpZCwgdWludDggdiwgYnl0ZXMzMiByLCBieXRlczMyIHMpOwogICAgICAgIGV2ZW50IG5ld1NpZ25hdHVyZXNFdmVudChzdHJpbmcgZXZpLCBzdHJpbmcgaW5mbywgc3RyaW5nIGlkLCB1aW50OCB2LCBieXRlczMyIHIsIGJ5dGVzMzIgcyxhZGRyZXNzIGFkZHIpOwogICAgICAgIGV2ZW50IGVycm9yTmV3U2lnbmF0dXJlc0V2ZW50KHN0cmluZyBldmksIHN0cmluZyBpbmZvLCBzdHJpbmcgaWQsIHVpbnQ4IHYsIGJ5dGVzMzIgciwgYnl0ZXMzMiBzLGFkZHJlc3MgYWRkcik7CiAgICAgICAgZXZlbnQgZXJyb3JBZGRTaWduYXR1cmVzRXZlbnQoc3RyaW5nIGV2aSwgc3RyaW5nIGluZm8sIHN0cmluZyBpZCwgdWludDggdiwgYnl0ZXMzMiByLCBieXRlczMyIHMsYWRkcmVzcyBhZGRyKTsKICAgICAgICBldmVudCBhZGRSZXBlYXRTaWduYXR1cmVzRXZlbnQoc3RyaW5nIGV2aSwgc3RyaW5nIGluZm8sIHN0cmluZyBpZCwgdWludDggdiwgYnl0ZXMzMiByLCBieXRlczMyIHMpOwogICAgICAgIGV2ZW50IGVycm9yUmVwZWF0U2lnbmF0dXJlc0V2ZW50KHN0cmluZyBldmksIHN0cmluZyBpZCwgdWludDggdiwgYnl0ZXMzMiByLCBieXRlczMyIHMsIGFkZHJlc3MgYWRkcik7CgogICAgZnVuY3Rpb24gQ2FsbFZlcmlmeShhZGRyZXNzIGFkZHIpIHB1YmxpYyBjb25zdGFudCByZXR1cm5zKGJvb2wpIHsKICAgICAgICByZXR1cm4gRXZpZGVuY2VTaWduZXJzRGF0YUFCSShzaWduZXJzQWRkcikudmVyaWZ5KGFkZHIpOwogICAgfQoKICAgICAgIGZ1bmN0aW9uIEV2aWRlbmNlKHN0cmluZyBldmksIHN0cmluZyBpbmZvLCBzdHJpbmcgaWQsIHVpbnQ4IHYsIGJ5dGVzMzIgciwgYnl0ZXMzMiBzLCBhZGRyZXNzIGFkZHIsIGFkZHJlc3Mgc2VuZGVyKSBwdWJsaWMgewogICAgICAgc2lnbmVyc0FkZHIgPSBhZGRyOwogICAgICAgaWYoQ2FsbFZlcmlmeShzZW5kZXIpKQogICAgICAgewogICAgICAgICAgIGV2aWRlbmNlID0gZXZpOwogICAgICAgICAgIGV2aWRlbmNlSW5mbyA9IGluZm87CiAgICAgICAgICAgZXZpZGVuY2VJZCA9IGlkOwogICAgICAgICAgIF92LnB1c2godik7CiAgICAgICAgICAgX3IucHVzaChyKTsKICAgICAgICAgICBfcy5wdXNoKHMpOwogICAgICAgICAgIHNpZ25lcnMucHVzaChzZW5kZXIpOwogICAgICAgICAgIG5ld1NpZ25hdHVyZXNFdmVudChldmksaW5mbyxpZCx2LHIscyxhZGRyKTsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgICBlcnJvck5ld1NpZ25hdHVyZXNFdmVudChldmksaW5mbyxpZCx2LHIscyxhZGRyKTsKICAgICAgIH0KICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0RXZpZGVuY2VJbmZvKCkgcHVibGljIGNvbnN0YW50IHJldHVybnMoc3RyaW5nKXsKICAgICAgICAgICAgcmV0dXJuIGV2aWRlbmNlSW5mbzsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRFdmlkZW5jZSgpIHB1YmxpYyBjb25zdGFudCByZXR1cm5zKHN0cmluZyxzdHJpbmcsc3RyaW5nLHVpbnQ4W10sYnl0ZXMzMltdLGJ5dGVzMzJbXSxhZGRyZXNzW10pewogICAgICAgIHVpbnQgbGVuZ3RoID0gRXZpZGVuY2VTaWduZXJzRGF0YUFCSShzaWduZXJzQWRkcikuZ2V0U2lnbmVyc1NpemUoKTsKICAgICAgICAgYWRkcmVzc1tdIG1lbW9yeSBzaWduZXJMaXN0ID0gbmV3IGFkZHJlc3NbXShsZW5ndGgpOwogICAgICAgICBmb3IodWludCBpPSAwIDtpPGxlbmd0aCA7aSsrKQogICAgICAgICB7CiAgICAgICAgICAgICBzaWduZXJMaXN0W2ldID0gKEV2aWRlbmNlU2lnbmVyc0RhdGFBQkkoc2lnbmVyc0FkZHIpLmdldFNpZ25lcihpKSk7CiAgICAgICAgIH0KICAgICAgICByZXR1cm4oZXZpZGVuY2UsZXZpZGVuY2VJbmZvLGV2aWRlbmNlSWQsX3YsX3IsX3Msc2lnbmVyTGlzdCk7CiAgICB9CgogICAgZnVuY3Rpb24gYWRkU2lnbmF0dXJlcyh1aW50OCB2LCBieXRlczMyIHIsIGJ5dGVzMzIgcykgcHVibGljIHJldHVybnMoYm9vbCkgewogICAgICAgIGZvcih1aW50IGk9IDAgO2k8c2lnbmVycy5sZW5ndGggO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKG1zZy5zZW5kZXIgPT0gc2lnbmVyc1tpXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoIF92W2ldID09IHYgJiYgX3JbaV0gPT0gciAmJiBfc1tpXSA9PSBzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGFkZFJlcGVhdFNpZ25hdHVyZXNFdmVudChldmlkZW5jZSxldmlkZW5jZUluZm8sZXZpZGVuY2VJZCx2LHIscyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVwZWF0U2lnbmF0dXJlc0V2ZW50KGV2aWRlbmNlLGV2aWRlbmNlSWQsdixyLHMsbXNnLnNlbmRlcik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgIGlmKENhbGxWZXJpZnkobXNnLnNlbmRlcikpCiAgICAgICB7CiAgICAgICAgICAgIF92LnB1c2godik7CiAgICAgICAgICAgIF9yLnB1c2gocik7CiAgICAgICAgICAgIF9zLnB1c2gocyk7CiAgICAgICAgICAgIHNpZ25lcnMucHVzaChtc2cuc2VuZGVyKTsKICAgICAgICAgICAgYWRkU2lnbmF0dXJlc0V2ZW50KGV2aWRlbmNlLGV2aWRlbmNlSW5mbyxldmlkZW5jZUlkLHYscixzKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgICAgZXJyb3JBZGRTaWduYXR1cmVzRXZlbnQoZXZpZGVuY2UsZXZpZGVuY2VJbmZvLGV2aWRlbmNlSWQsdixyLHMsbXNnLnNlbmRlcik7CiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBnZXRTaWduZXJzKClwdWJsaWMgY29uc3RhbnQgcmV0dXJucyhhZGRyZXNzW10pCiAgICB7CiAgICAgICAgIHVpbnQgbGVuZ3RoID0gRXZpZGVuY2VTaWduZXJzRGF0YUFCSShzaWduZXJzQWRkcikuZ2V0U2lnbmVyc1NpemUoKTsKICAgICAgICAgYWRkcmVzc1tdIG1lbW9yeSBzaWduZXJMaXN0ID0gbmV3IGFkZHJlc3NbXShsZW5ndGgpOwogICAgICAgICBmb3IodWludCBpPSAwIDtpPGxlbmd0aCA7aSsrKQogICAgICAgICB7CiAgICAgICAgICAgICBzaWduZXJMaXN0W2ldID0gKEV2aWRlbmNlU2lnbmVyc0RhdGFBQkkoc2lnbmVyc0FkZHIpLmdldFNpZ25lcihpKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNpZ25lckxpc3Q7CiAgICB9Cn0="
	}, {
		"contractName": "EvidenceSignersData",
		"contractSource": "cHJhZ21hIHNvbGlkaXR5IF4wLjQuNDsKaW1wb3J0ICJFdmlkZW5jZS5zb2wiOwoKY29udHJhY3QgRXZpZGVuY2VTaWduZXJzRGF0YXsKICAgICAgICBhZGRyZXNzW10gc2lnbmVyczsKCQlldmVudCBuZXdFdmlkZW5jZUV2ZW50KGFkZHJlc3MgYWRkcik7CiAgICAgICAgZnVuY3Rpb24gbmV3RXZpZGVuY2Uoc3RyaW5nIGV2aSwgc3RyaW5nIGluZm8sc3RyaW5nIGlkLHVpbnQ4IHYsIGJ5dGVzMzIgcixieXRlczMyIHMpcHVibGljIHJldHVybnMoYWRkcmVzcykKICAgICAgICB7CiAgICAgICAgICAgIEV2aWRlbmNlIGV2aWRlbmNlID0gbmV3IEV2aWRlbmNlKGV2aSwgaW5mbywgaWQsIHYsIHIsIHMsIHRoaXMsIG1zZy5zZW5kZXIpOwogICAgICAgICAgICBuZXdFdmlkZW5jZUV2ZW50KGV2aWRlbmNlKTsKICAgICAgICAgICAgcmV0dXJuIGV2aWRlbmNlOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gRXZpZGVuY2VTaWduZXJzRGF0YShhZGRyZXNzW10gZXZpZGVuY2VTaWduZXJzKXB1YmxpY3sKICAgICAgICAgICAgZm9yKHVpbnQgaT0wOyBpPGV2aWRlbmNlU2lnbmVycy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICBzaWduZXJzLnB1c2goZXZpZGVuY2VTaWduZXJzW2ldKTsKCQkJfQoJCX0KCiAgICBmdW5jdGlvbiB2ZXJpZnkoYWRkcmVzcyBhZGRyKXB1YmxpYyBjb25zdGFudCByZXR1cm5zKGJvb2wpewogICAgZm9yKHVpbnQgaT0wOyBpPHNpZ25lcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAoYWRkciA9PSBzaWduZXJzW2ldKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgogICAgZnVuY3Rpb24gZ2V0U2lnbmVyKHVpbnQgaW5kZXgpcHVibGljIGNvbnN0YW50IHJldHVybnMoYWRkcmVzcyl7CiAgICAgICAgdWludCBsaXN0U2l6ZSA9IHNpZ25lcnMubGVuZ3RoOwogICAgICAgIGlmKGluZGV4IDwgbGlzdFNpemUpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gc2lnbmVyc1tpbmRleF07CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U2lnbmVyc1NpemUoKSBwdWJsaWMgY29uc3RhbnQgcmV0dXJucyh1aW50KXsKICAgICAgICByZXR1cm4gc2lnbmVycy5sZW5ndGg7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U2lnbmVycygpIHB1YmxpYyBjb25zdGFudCByZXR1cm5zKGFkZHJlc3NbXSl7CiAgICAgICAgcmV0dXJuIHNpZ25lcnM7CiAgICB9Cgp9"
	}],
	"contractPath": "Evidence1",
	"groupId": "1",
	"account": "mars"
}
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 返回码 code String 返回码信息请参看附录1
2 提示信息 message String
3 数据 data Int copy合约数

2)数据格式

{
    "code": 0,
    "message": "success",
    "data": 2
}
5.16. 获取合约仓库列表
接口描述
返回合约仓库信息列表
接口URL

http://localhost:5001/WeBASE-Node-Manager/warehouse/list

调用方法

HTTP GET

请求参数

1)参数表

2)数据格式

http://localhost:5001/WeBASE-Node-Manager/warehouse/list
响应参数

1)数据格式

{
  "code": 0,
  "message": "success",
  "data": [
    {
      "id": 1,
      "warehouseName": "工具箱",
      "warehouseNameEn": "Toolbox",
      "type": "1",
      "warehouseIcon": "toolboxId",
      "description": "工具箱中有常用的工具合约",
      "warehouseDetail": "工具箱中有常用的工具合约",
      "descriptionEn": "Toolbox Contract suite",
      "warehouseDetailEn": "Toolbox Contract suite",
      "createTime": "2021-01-20 18:02:10",
      "modifyTime": "2021-01-20 18:02:10"
    },
    {
      "id": 2,
      "warehouseName": "存证应用",
      "warehouseNameEn": "Evidence",
      "type": "2",
      "warehouseIcon": "evidenceId",
      "description": "一套区块链存证合约",
      "warehouseDetail": "一套区块链存证合约",
      "descriptionEn": "Evidence Contract suite",
      "warehouseDetailEn": "Evidence Contract suite",
      "createTime": "2021-01-20 18:02:10",
      "modifyTime": "2021-01-20 18:02:10"
    },
    {
      "id": 3,
      "warehouseName": "积分应用",
      "warehouseNameEn": "Points",
      "type": "3",
      "warehouseIcon": "pointsId",
      "description": "一套积分合约",
      "warehouseDetail": "一套积分合约",
      "descriptionEn": "Points Contract suite",
      "warehouseDetailEn": "Points Contract suite",
      "createTime": "2021-01-20 18:02:10",
      "modifyTime": "2021-01-20 18:02:10"
    }
  ]
}
5.17. 根据仓库编号获取仓库信息
接口描述
返回合约仓库信息
接口URL

http://localhost:5001/WeBASE-Node-Manager/warehouse?warehouseId={warehouseId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 仓库编号 warehouseId int

2)数据格式

http://localhost:5001/WeBASE-Node-Manager/warehouse?warehouseId=1
响应参数

1)数据格式

{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1,
    "warehouseName": "工具箱",
    "warehouseNameEn": "Toolbox",
    "type": "1",
    "warehouseIcon": "toolboxId",
    "description": "工具箱中有常用的工具合约",
    "warehouseDetail": "工具箱中有常用的工具合约",
    "descriptionEn": "Toolbox Contract suite",
    "warehouseDetailEn": "Toolbox Contract suite",
    "createTime": "2021-01-20 18:02:10",
    "modifyTime": "2021-01-20 18:02:10"
  }
}
5.18. 根据仓库编号获取合约文件夹信息
接口描述
返回合约文件夹信息
接口URL

http://localhost:5001/WeBASE-Node-Manager/warehouse/folder/list?warehouseId={warehouseId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 仓库编号 warehouseId int

2)数据格式

http://localhost:5001/WeBASE-Node-Manager/warehouse/folder/list?warehouseId=1
响应参数

1)数据格式

{
  "code": 0,
  "message": "success",
  "data": [
    {
      "id": 2,
      "folderName": "Evidence",
      "folderDesc": "Evidence",
      "folderDetail": "Evidence",
      "folderDescEn": "Evidence",
      "folderDetailEn": "Evidence",
      "createTime": "2021-01-20 18:02:10",
      "modifyTime": "2021-01-20 18:02:10"
    }
  ]
}
5.19. 根据合约文件夹编号获取合约文件夹信息
接口描述
返回合约文件夹信息
接口URL

http://localhost:5001/WeBASE-Node-Manager/warehouse/folder?folderId={folderId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 合约文件夹编号 folderId int

2)数据格式

http://localhost:5001/WeBASE-Node-Manager/warehouse/folder?folderId=2
响应参数

1)数据格式

{
  "code": 0,
  "message": "success",
  "data": {
    "id": 2,
    "folderName": "Evidence",
    "folderDesc": "Evidence",
    "folderDetail": "Evidence",
    "folderDescEn": "Evidence",
    "folderDetailEn": "Evidence",
    "createTime": "2021-01-20 18:02:10",
    "modifyTime": "2021-01-20 18:02:10"
  }
}
5.20. 根据文件夹编号获取合约列表
接口描述
返回合约信息列表
接口URL

http://localhost:5001/WeBASE-Node-Manager/warehouse/item/list?folderId={folderId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 文件夹编号 folderId int

2)数据格式

http://localhost:5001/WeBASE-Node-Manager/warehouse/item/list?folderId=2
响应参数

1)数据格式

{
  "code": 0,
  "message": "success",
  "data": [
    {
      "contractId": 4,
      "contractFolderId": 2,
      "contractName": "Evidence",
      "contractDesc": "Evidence",
      "contractSrc": "cHJhZ21hIHNvbGlkaXR5IF4wLjQuNDsKY29udHJhY3QgRXZpZGVuY2VTaWduZXJzRGF0YUFCSXsgZnVuY3Rpb24gdmVyaWZ5KGFkZHJlc3MgYWRkcilwdWJsaWMgY29uc3RhbnQgcmV0dXJucyhib29sKXt9CmZ1bmN0aW9uIGdldFNpZ25lcih1aW50IGluZGV4KXB1YmxpYyBjb25zdGFudCByZXR1cm5zKGFkZHJlc3Mpe30gCmZ1bmN0aW9uIGdldFNpZ25lcnNTaXplKCkgcHVibGljIGNvbnN0YW50IHJldHVybnModWludCl7fQp9Cgpjb250cmFjdCBFdmlkZW5jZXsKICAgIAogICAgc3RyaW5nIGV2aWRlbmNlOwogICAgc3RyaW5nIGV2aWRlbmNlSW5mbzsKICAgIHN0cmluZyBldmlkZW5jZUlkOwogICAgdWludDhbXSBfdjsKICAgIGJ5dGVzMzJbXSBfcjsKICAgIGJ5dGVzMzJbXSBfczsKICAgIGFkZHJlc3NbXSBzaWduZXJzOwogICAgYWRkcmVzcyBwdWJsaWMgc2lnbmVyc0FkZHI7CiAgICAKICAgICAgICBldmVudCBhZGRTaWduYXR1cmVzRXZlbnQoc3RyaW5nIGV2aSwgc3RyaW5nIGluZm8sIHN0cmluZyBpZCwgdWludDggdiwgYnl0ZXMzMiByLCBieXRlczMyIHMpOwogICAgICAgIGV2ZW50IG5ld1NpZ25hdHVyZXNFdmVudChzdHJpbmcgZXZpLCBzdHJpbmcgaW5mbywgc3RyaW5nIGlkLCB1aW50OCB2LCBieXRlczMyIHIsIGJ5dGVzMzIgcyxhZGRyZXNzIGFkZHIpOwogICAgICAgIGV2ZW50IGVycm9yTmV3U2lnbmF0dXJlc0V2ZW50KHN0cmluZyBldmksIHN0cmluZyBpbmZvLCBzdHJpbmcgaWQsIHVpbnQ4IHYsIGJ5dGVzMzIgciwgYnl0ZXMzMiBzLGFkZHJlc3MgYWRkcik7CiAgICAgICAgZXZlbnQgZXJyb3JBZGRTaWduYXR1cmVzRXZlbnQoc3RyaW5nIGV2aSwgc3RyaW5nIGluZm8sIHN0cmluZyBpZCwgdWludDggdiwgYnl0ZXMzMiByLCBieXRlczMyIHMsYWRkcmVzcyBhZGRyKTsKICAgICAgICBldmVudCBhZGRSZXBlYXRTaWduYXR1cmVzRXZlbnQoc3RyaW5nIGV2aSwgc3RyaW5nIGluZm8sIHN0cmluZyBpZCwgdWludDggdiwgYnl0ZXMzMiByLCBieXRlczMyIHMpOwogICAgICAgIGV2ZW50IGVycm9yUmVwZWF0U2lnbmF0dXJlc0V2ZW50KHN0cmluZyBldmksIHN0cmluZyBpZCwgdWludDggdiwgYnl0ZXMzMiByLCBieXRlczMyIHMsIGFkZHJlc3MgYWRkcik7CgogICAgZnVuY3Rpb24gQ2FsbFZlcmlmeShhZGRyZXNzIGFkZHIpIHB1YmxpYyBjb25zdGFudCByZXR1cm5zKGJvb2wpIHsKICAgICAgICByZXR1cm4gRXZpZGVuY2VTaWduZXJzRGF0YUFCSShzaWduZXJzQWRkcikudmVyaWZ5KGFkZHIpOwogICAgfQoKICAgICAgIGZ1bmN0aW9uIEV2aWRlbmNlKHN0cmluZyBldmksIHN0cmluZyBpbmZvLCBzdHJpbmcgaWQsIHVpbnQ4IHYsIGJ5dGVzMzIgciwgYnl0ZXMzMiBzLCBhZGRyZXNzIGFkZHIsIGFkZHJlc3Mgc2VuZGVyKSBwdWJsaWMgewogICAgICAgc2lnbmVyc0FkZHIgPSBhZGRyOwogICAgICAgaWYoQ2FsbFZlcmlmeShzZW5kZXIpKQogICAgICAgewogICAgICAgICAgIGV2aWRlbmNlID0gZXZpOwogICAgICAgICAgIGV2aWRlbmNlSW5mbyA9IGluZm87CiAgICAgICAgICAgZXZpZGVuY2VJZCA9IGlkOwogICAgICAgICAgIF92LnB1c2godik7CiAgICAgICAgICAgX3IucHVzaChyKTsKICAgICAgICAgICBfcy5wdXNoKHMpOwogICAgICAgICAgIHNpZ25lcnMucHVzaChzZW5kZXIpOwogICAgICAgICAgIG5ld1NpZ25hdHVyZXNFdmVudChldmksaW5mbyxpZCx2LHIscyxhZGRyKTsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgICBlcnJvck5ld1NpZ25hdHVyZXNFdmVudChldmksaW5mbyxpZCx2LHIscyxhZGRyKTsKICAgICAgIH0KICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0RXZpZGVuY2VJbmZvKCkgcHVibGljIGNvbnN0YW50IHJldHVybnMoc3RyaW5nKXsKICAgICAgICAgICAgcmV0dXJuIGV2aWRlbmNlSW5mbzsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRFdmlkZW5jZSgpIHB1YmxpYyBjb25zdGFudCByZXR1cm5zKHN0cmluZyxzdHJpbmcsc3RyaW5nLHVpbnQ4W10sYnl0ZXMzMltdLGJ5dGVzMzJbXSxhZGRyZXNzW10pewogICAgICAgIHVpbnQgbGVuZ3RoID0gRXZpZGVuY2VTaWduZXJzRGF0YUFCSShzaWduZXJzQWRkcikuZ2V0U2lnbmVyc1NpemUoKTsKICAgICAgICAgYWRkcmVzc1tdIG1lbW9yeSBzaWduZXJMaXN0ID0gbmV3IGFkZHJlc3NbXShsZW5ndGgpOwogICAgICAgICBmb3IodWludCBpPSAwIDtpPGxlbmd0aCA7aSsrKQogICAgICAgICB7CiAgICAgICAgICAgICBzaWduZXJMaXN0W2ldID0gKEV2aWRlbmNlU2lnbmVyc0RhdGFBQkkoc2lnbmVyc0FkZHIpLmdldFNpZ25lcihpKSk7CiAgICAgICAgIH0KICAgICAgICByZXR1cm4oZXZpZGVuY2UsZXZpZGVuY2VJbmZvLGV2aWRlbmNlSWQsX3YsX3IsX3Msc2lnbmVyTGlzdCk7CiAgICB9CgogICAgZnVuY3Rpb24gYWRkU2lnbmF0dXJlcyh1aW50OCB2LCBieXRlczMyIHIsIGJ5dGVzMzIgcykgcHVibGljIHJldHVybnMoYm9vbCkgewogICAgICAgIGZvcih1aW50IGk9IDAgO2k8c2lnbmVycy5sZW5ndGggO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKG1zZy5zZW5kZXIgPT0gc2lnbmVyc1tpXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoIF92W2ldID09IHYgJiYgX3JbaV0gPT0gciAmJiBfc1tpXSA9PSBzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGFkZFJlcGVhdFNpZ25hdHVyZXNFdmVudChldmlkZW5jZSxldmlkZW5jZUluZm8sZXZpZGVuY2VJZCx2LHIscyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVwZWF0U2lnbmF0dXJlc0V2ZW50KGV2aWRlbmNlLGV2aWRlbmNlSWQsdixyLHMsbXNnLnNlbmRlcik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgIGlmKENhbGxWZXJpZnkobXNnLnNlbmRlcikpCiAgICAgICB7CiAgICAgICAgICAgIF92LnB1c2godik7CiAgICAgICAgICAgIF9yLnB1c2gocik7CiAgICAgICAgICAgIF9zLnB1c2gocyk7CiAgICAgICAgICAgIHNpZ25lcnMucHVzaChtc2cuc2VuZGVyKTsKICAgICAgICAgICAgYWRkU2lnbmF0dXJlc0V2ZW50KGV2aWRlbmNlLGV2aWRlbmNlSW5mbyxldmlkZW5jZUlkLHYscixzKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgICAgZXJyb3JBZGRTaWduYXR1cmVzRXZlbnQoZXZpZGVuY2UsZXZpZGVuY2VJbmZvLGV2aWRlbmNlSWQsdixyLHMsbXNnLnNlbmRlcik7CiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiBnZXRTaWduZXJzKClwdWJsaWMgY29uc3RhbnQgcmV0dXJucyhhZGRyZXNzW10pCiAgICB7CiAgICAgICAgIHVpbnQgbGVuZ3RoID0gRXZpZGVuY2VTaWduZXJzRGF0YUFCSShzaWduZXJzQWRkcikuZ2V0U2lnbmVyc1NpemUoKTsKICAgICAgICAgYWRkcmVzc1tdIG1lbW9yeSBzaWduZXJMaXN0ID0gbmV3IGFkZHJlc3NbXShsZW5ndGgpOwogICAgICAgICBmb3IodWludCBpPSAwIDtpPGxlbmd0aCA7aSsrKQogICAgICAgICB7CiAgICAgICAgICAgICBzaWduZXJMaXN0W2ldID0gKEV2aWRlbmNlU2lnbmVyc0RhdGFBQkkoc2lnbmVyc0FkZHIpLmdldFNpZ25lcihpKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNpZ25lckxpc3Q7CiAgICB9Cn0=",
      "contractDescEn": "Evidence",
      "createTime": "2021-01-20 18:02:10",
      "modifyTime": "2021-01-20 18:02:10"
    },
    {
      "contractId": 5,
      "contractFolderId": 2,
      "contractName": "EvidenceSignersData",
      "contractDesc": "EvidenceSignersData",
      "contractSrc": "cHJhZ21hIHNvbGlkaXR5IF4wLjQuNDsKaW1wb3J0ICJFdmlkZW5jZS5zb2wiOwoKY29udHJhY3QgRXZpZGVuY2VTaWduZXJzRGF0YXsKICAgICAgICBhZGRyZXNzW10gc2lnbmVyczsKCQlldmVudCBuZXdFdmlkZW5jZUV2ZW50KGFkZHJlc3MgYWRkcik7CiAgICAgICAgZnVuY3Rpb24gbmV3RXZpZGVuY2Uoc3RyaW5nIGV2aSwgc3RyaW5nIGluZm8sc3RyaW5nIGlkLHVpbnQ4IHYsIGJ5dGVzMzIgcixieXRlczMyIHMpcHVibGljIHJldHVybnMoYWRkcmVzcykKICAgICAgICB7CiAgICAgICAgICAgIEV2aWRlbmNlIGV2aWRlbmNlID0gbmV3IEV2aWRlbmNlKGV2aSwgaW5mbywgaWQsIHYsIHIsIHMsIHRoaXMsIG1zZy5zZW5kZXIpOwogICAgICAgICAgICBuZXdFdmlkZW5jZUV2ZW50KGV2aWRlbmNlKTsKICAgICAgICAgICAgcmV0dXJuIGV2aWRlbmNlOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gRXZpZGVuY2VTaWduZXJzRGF0YShhZGRyZXNzW10gZXZpZGVuY2VTaWduZXJzKXB1YmxpY3sKICAgICAgICAgICAgZm9yKHVpbnQgaT0wOyBpPGV2aWRlbmNlU2lnbmVycy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICBzaWduZXJzLnB1c2goZXZpZGVuY2VTaWduZXJzW2ldKTsKCQkJfQoJCX0KCiAgICBmdW5jdGlvbiB2ZXJpZnkoYWRkcmVzcyBhZGRyKXB1YmxpYyBjb25zdGFudCByZXR1cm5zKGJvb2wpewogICAgZm9yKHVpbnQgaT0wOyBpPHNpZ25lcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAoYWRkciA9PSBzaWduZXJzW2ldKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgogICAgZnVuY3Rpb24gZ2V0U2lnbmVyKHVpbnQgaW5kZXgpcHVibGljIGNvbnN0YW50IHJldHVybnMoYWRkcmVzcyl7CiAgICAgICAgdWludCBsaXN0U2l6ZSA9IHNpZ25lcnMubGVuZ3RoOwogICAgICAgIGlmKGluZGV4IDwgbGlzdFNpemUpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gc2lnbmVyc1tpbmRleF07CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U2lnbmVyc1NpemUoKSBwdWJsaWMgY29uc3RhbnQgcmV0dXJucyh1aW50KXsKICAgICAgICByZXR1cm4gc2lnbmVycy5sZW5ndGg7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U2lnbmVycygpIHB1YmxpYyBjb25zdGFudCByZXR1cm5zKGFkZHJlc3NbXSl7CiAgICAgICAgcmV0dXJuIHNpZ25lcnM7CiAgICB9Cgp9",
      "contractDescEn": "EvidenceSignersData",
      "createTime": "2021-01-20 18:02:10",
      "modifyTime": "2021-01-20 18:02:10"
    }
  ]
}
5.21. 根据合约编号获取合约信息
接口描述
返回合约信息
接口URL

http://localhost:5001/WeBASE-Node-Manager/warehouse/item?contractId={contractId}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 合约编号 contractId int

2)数据格式

http://localhost:5001/WeBASE-Node-Manager/warehouse/item?contractId=2
响应参数

1)数据格式

{
  "code": 0,
  "message": "success",
  "data": {
    "contractId": 2,
    "contractFolderId": 1,
    "contractName": "LibSafeMathForUint256Utils",
    "contractDesc": "LibSafeMathForUint256Utils",
    "contractSrc": "LyoKICogQ29weXJpZ2h0IDIwMTQtMjAxOSB0aGUgb3JpZ2luYWwgYXV0aG9yIG9yIGF1dGhvcnMuCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiAqLwoKcHJhZ21hIHNvbGlkaXR5IF4wLjQuMjU7CgpsaWJyYXJ5IExpYlNhZmVNYXRoRm9yVWludDI1NlV0aWxzIHsKCiAgICBmdW5jdGlvbiBhZGQodWludDI1NiBhLCB1aW50MjU2IGIpIGludGVybmFsIHB1cmUgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHVpbnQyNTYgYyA9IGEgKyBiOwogICAgICAgIHJlcXVpcmUoYyA+PSBhLCAiU2FmZU1hdGhGb3JVaW50MjU2OiBhZGRpdGlvbiBvdmVyZmxvdyIpOwogICAgICAgIHJldHVybiBjOwogICAgfQoKICAgIGZ1bmN0aW9uIHN1Yih1aW50MjU2IGEsIHVpbnQyNTYgYikgaW50ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmVxdWlyZShiIDw9IGEsICJTYWZlTWF0aEZvclVpbnQyNTY6IHN1YnRyYWN0aW9uIG92ZXJmbG93Iik7CiAgICAgICAgdWludDI1NiBjID0gYSAtIGI7CiAgICAgICAgcmV0dXJuIGM7CiAgICB9CgogICAgZnVuY3Rpb24gbXVsKHVpbnQyNTYgYSwgdWludDI1NiBiKSBpbnRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICBpZiAoYSA9PSAwIHx8IGIgPT0gMCkgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICAgIHVpbnQyNTYgYyA9IGEgKiBiOwogICAgICAgIHJlcXVpcmUoYyAvIGEgPT0gYiwgIlNhZmVNYXRoRm9yVWludDI1NjogbXVsdGlwbGljYXRpb24gb3ZlcmZsb3ciKTsKICAgICAgICByZXR1cm4gYzsKICAgIH0KCiAgICBmdW5jdGlvbiBkaXYodWludDI1NiBhLCB1aW50MjU2IGIpIGludGVybmFsIHB1cmUgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJlcXVpcmUoYiA+IDAsICJTYWZlTWF0aEZvclVpbnQyNTY6IGRpdmlzaW9uIGJ5IHplcm8iKTsKICAgICAgICB1aW50MjU2IGMgPSBhIC8gYjsKICAgICAgICByZXR1cm4gYzsKICAgIH0KCiAgICBmdW5jdGlvbiBtb2QodWludDI1NiBhLCB1aW50MjU2IGIpIGludGVybmFsIHB1cmUgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJlcXVpcmUoYiAhPSAwLCAiU2FmZU1hdGhGb3JVaW50MjU2OiBtb2R1bG8gYnkgemVybyIpOwogICAgICAgIHJldHVybiBhICUgYjsKICAgIH0KCiAgICBmdW5jdGlvbiBwb3dlcih1aW50MjU2IGEsIHVpbnQyNTYgYikgaW50ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2KXsKCiAgICAgICAgaWYoYSA9PSAwKSByZXR1cm4gMDsKICAgICAgICBpZihiID09IDApIHJldHVybiAxOwoKICAgICAgICB1aW50MjU2IGMgPSAxOwogICAgICAgIGZvcih1aW50MjU2IGkgPSAwOyBpIDwgYjsgaSsrKXsKICAgICAgICAgICAgYyA9IG11bChjLCBhKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gbWF4KHVpbnQyNTYgYSwgdWludDI1NiBiKSBpbnRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4gYSA+PSBiID8gYSA6IGI7CiAgICB9CgogICAgZnVuY3Rpb24gbWluKHVpbnQyNTYgYSwgdWludDI1NiBiKSBpbnRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4gYSA8IGIgPyBhIDogYjsKICAgIH0KCiAgICBmdW5jdGlvbiBhdmVyYWdlKHVpbnQyNTYgYSwgdWludDI1NiBiKSBpbnRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4gKGEgLyAyKSArIChiIC8gMikgKyAoKGEgJSAyICsgYiAlIDIpIC8gMik7CiAgICB9Cn0K",
    "contractDescEn": "LibSafeMathForUint256Utils",
    "createTime": "2021-01-20 18:02:10",
    "modifyTime": "2021-01-20 18:02:10"
  }
}
5.22. 查询合约管理者列表

根据群组ID和合约地址,返回在WeBASE拥有私钥的合约部署者或链委员(若链委员非空)私钥用户

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/contract/listManager/{groupId}/{contractAddress}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组id
2 contractAddress String 合约地址

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/contract/listManager/group/0xab9F30F9827e1C16Bf62d557c3626AeAd9E85502
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 totalCount Int 总记录数
4 data List 用户列表
4.1 Object 用户信息对象
4.1.1 userId int 用户编号
4.1.2 userName string 用户名称
4.1.3 groupId int 所属群组编号
4.1.4 description String 备注
4.1.5 userStatus int 状态(1-正常 2-停用) 默认1
4.1.6 publicKey String 公钥信息
4.1.7 address String 在链上位置的hash
4.1.8 hasPk Int 是否拥有私钥信息(1-拥有,2-不拥有)
4.1.9 account string 关联账户
4.1.10 createTime LocalDateTime 创建时间
4.1.11 modifyTime LocalDateTime 修改时间
4.1.12 signUserId String 用户在WeBASE-Sign中的编号

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": [
    {
      "userId": 700003,
      "userName": "new_test",
      "account": "test",
      "groupId": "group",
      "publicKey": "04b27022e80712f4def30d008a390cbe3503100ef54236bea3d4ca9a7fe95c8aafc2a401dd344605fa8d6b52533b289e8af9a75b992ac006a6a0ec8c0ef0b300eb",
      "privateKey": null,
      "userStatus": 1,
      "chainIndex": null,
      "userType": 1,
      "address": "0x9097678eb34daeebb6e3528ed4f8715cdc5e4c09",
      "signUserId": "05281cdc3c894a2da852af6b2ad3d919",
      "appId": "group",
      "hasPk": 1,
      "description": "",
      "createTime": "2021-11-30 16:18:03",
      "modifyTime": "2021-11-30 16:18:03"
    }
  ],
  "attachment": null
}
  • 失败:
{
    "code": 202542,
    "message": "No private key of contract manager address in webase"
}

6 服务器监控相关

6.1 发送测试邮件

使用当前的邮件服务配置,向指定的邮箱地址发送测试邮件,如果配置错误将发送失败;

注:需要确保配置正确才能使用后续的邮件告警功能;返回成功信息后,需要用户到自己的邮箱查看是否收到邮测试邮件;

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /alert/mail/test/{toMailAddress}
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 {toMailAddress} String 接收测试邮件的邮箱地址
2 host String 邮件服务的地址
3 port int 是否 邮件服务使用的端口,默认25
4 protocol String 邮件服务的协议类型,默认使用smtp
5 defaultEncoding String 邮件服务的邮件编码格式,默认为UTF-8编码
6 username String 邮件服务的用户邮箱地址,authentication开启时为必填
7 password String 邮件服务的用户邮箱授权码,authentication开启时为必填
8 authentication int 开启鉴权验证,默认开启(使用username/password验证)0-关闭,1-开启
9 starttlsEnable int 开启优先使用STARTTLS,默认开启 0-关闭,1-开启
10 starttlsRequired int 开启必须使用STARTTLS,默认关闭,开启时需要配置socketFactoryPort, socketFactoryClass, socketFactoryFallback 0-关闭,1-开启
11 socketFactoryPort String TLS/SSL的Socket端口,默认465
12 socketFactoryClass String TLS/SSL的Socket工厂类
13 socketFactoryFallback int 开启Socket的Fallback函数,默认关闭 0-关闭,1-开启
14 timeout int 读超时时间值,默认5000ms
15 connectionTimeout int 连接超时时间值,默认5000ms
16 writeTimeout int 否是 写超时时间值,默认5000ms

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/alert/mail/test/yourmail@qq.com
{
    "host": "smtp.qq.com",
    "port": 25,
    "username": "yourmail@qq.com",
    "password": "yourpassword",
    "protocol": "smtp",
    "defaultEncoding": "UTF-8",
    "authentication": 1,
    "starttlsEnable": 1,
    "starttlsRequired": 0,
    "socketFactoryPort": 465,
    "socketFactoryClass": "javax.net.ssl.SSLSocketFactory",
    "socketFactoryFallback": 0,
    "timeout": 5000,
    "connectionTimeout": 5000,
    "writeTimeout": 5000
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data Object 错误时返回错误原因

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": null
}
  • 失败:
{
    "code": 202080,
    "message": "Send mail error, please check mail server configuration.",
    "data": "Failed messages: javax.mail.SendFailedException: No recipient addresses"
}
6.2 获取告警类型配置

获取单个告警配置的内容;告警类型配置是对不同告警类型下的不同内容,包含告警邮件标题ruleName,告警邮件内容alertContent,告警邮件发送时间间隔alertIntervalSeconds,上次告警时间lastAlertTime,目标告警邮箱地址列表userList,是否启用该类型的邮件告警enable,告警等级alertLevel等;

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /alert/{ruleId}
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 ruleId Int 告警配置的编号

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/alert/1
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data Object 成功时返回
3.1 Object 返回信息实体
3.1.1 ruleId Int 告警类型配置的编号
3.1.2 ruleName String 告警类型的名字/告警邮件标题
3.1.3 enable Int 是否开启该告警:0-关闭,1-开启
3.1.4 alertType Int 告警类型:1-节点状态告警,2-审计告警,3-证书有效期
3.1.5 alertLevel Int 告警等级:1-高,2-中,3-低
3.1.6 alertIntervalSeconds Long 告警邮件发送时间间隔
3.1.7 alertContent String 告警邮件内容,其中包含{}括起来的变量
3.1.8 contentParamList String 告警邮件内容中变量的列表,由List<String>序列化为String
3.1.9 description String 告警描述
3.1.10 userList Int 目标告警邮箱地址列表,由List<String>序列化为String
3.1.11 lastAlertTime LocalDateTime 上次告警时间
3.1.12 isAllUser Int 发送给所有用户:0-关闭,1-开启
3.1.13 createTime LocalDateTime 创建时间
3.1.14 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "ruleId": 1,
        "ruleName": "节点异常告警",
        "enable": 0,
        "alertType": 1,
        "alertLevel": 1,
        "alertIntervalSeconds": 3600,
        "alertContent": "{nodeId}节点异常,请到\"节点管理\"页面查看具体信息",
        "contentParamList": "[\"{nodeId}\"]",
        "description": null,
        "createTime": "2019-10-29 20:02:30",
        "modifyTime": "2019-10-29 20:02:30",
        "isAllUser": 0,
        "userList": "[\"targetmail@qq.com\"]",
        "lastAlertTime": null
    }
}
6.3 获取全部告警类型配置列表

返回所有的告警类型配置

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /alert/list
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
- - - - -

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/alert/list
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data List 成功时返回
3.1 Object 返回信息实体
3.1.1 ruleId Int 告警类型配置的编号
3.1.2 ruleName String 告警类型的名字/告警邮件标题
3.1.3 enable Int 是否开启该告警:0-关闭,1-开启
3.1.4 alertType Int 告警类型:1-节点状态告警,2-审计告警,3-证书有效期
3.1.5 alertLevel Int 告警等级:1-高,2-中,3-低
3.1.6 alertIntervalSeconds Long 告警邮件发送时间间隔
3.1.7 alertContent String 告警邮件内容,其中包含{}括起来的变量
3.1.8 contentParamList String 告警邮件内容中变量的列表,由List<String>序列化为String
3.1.9 description String 告警描述
3.1.10 userList Int 目标告警邮箱地址列表,由List<String>序列化为String
3.1.11 lastAlertTime LocalDateTime 上次告警时间
3.1.12 isAllUser Int 发送给所有用户:0-关闭,1-开启
3.1.13 createTime LocalDateTime 创建时间
3.1.14 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": [
        {
            "ruleId": 1,
            "ruleName": "节点异常告警",
            "enable": 0,
            "alertType": 1,
            "alertLevel": 1,
            "alertIntervalSeconds": 3600,
            "alertContent": "{nodeId}节点异常,请到\"节点管理\"页面查看具体信息",
            "contentParamList": "[\"{nodeId}\"]",
            "description": null,
            "createTime": "2019-10-29 20:02:30",
            "modifyTime": "2019-10-29 20:02:30",
            "isAllUser": 0,
            "userList": "[\"targetmail@qq.com\"]",
            "lastAlertTime": null
        },
        {
            "ruleId": 2,
            "ruleName": "审计异常",
            "enable": 0,
            "alertType": 2,
            "alertLevel": 1,
            "alertIntervalSeconds": 3600,
            "alertContent": "审计异常:{auditType},请到\"交易审计\"页面查看具体信息",
            "contentParamList": "[\"{auditType}\"]",
            "description": null,
            "createTime": "2019-10-29 20:02:30",
            "modifyTime": "2019-10-29 20:02:30",
            "isAllUser": 0,
            "userList": "[\"targetmail@qq.com\"]",
            "lastAlertTime": null
        },
        {
            "ruleId": 3,
            "ruleName": "证书有效期告警",
            "enable": 0,
            "alertType": 3,
            "alertLevel": 1,
            "alertIntervalSeconds": 3600,
            "alertContent": "证书将在{time}过期,请到\"证书管理\"页面查看具体信息",
            "contentParamList": "[\"{time}\"]",
            "description": null,
            "createTime": "2019-10-29 20:02:30",
            "modifyTime": "2019-10-29 20:02:30",
            "isAllUser": 0,
            "userList": "[\"targetmail@qq.com\"]",
            "lastAlertTime": null
        }
    ]
}
6.4 更新告警类型配置

更新告警类型配置的内容;目前仅支持更新原有的三个邮件告警的配置,不支持新增配置;

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /alert
  • 请求方式:PUT
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 ruleId int 告警类型配置编号
2 ruleName String 告警邮件的标题
3 enable int 是否启用该类型的告警:0-关闭,1-开启
4 alertType int 告警类型:1-节点状态告警,2-审计告警,3-证书有效期告警
6 alertIntervalSeconds int 告警邮件的发送间隔时间(秒),默认3600s
7 alertContent String 告警邮件的内容,其中大括号{}及里面的英文变量不可去除
8 userList String 接收告警邮件的邮箱列表,以List<String>序列化得到的字符串
9 alertLevel Int 告警等级:1-高,2-中,3-低

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/mailServer/config
{
    "ruleId": 3,
    "ruleName": "证书有效期告警",
    "enable": 0,
    "alertType": 3,
    "alertIntervalSeconds": 1800,
    "alertContent": "证书将在{time}过期,请到\"证书管理\"页面查看具体信息",
    "userList": "[\"targetmail@qq.com\"]",
    "alertLevel": 1
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data Object 返回邮件服务配置的具体内容
3.1 Object 参数含义参考上文GET接口出参表

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "ruleId": 3,
        "ruleName": "证书有效期告警",
        "enable": 0,
        "alertType": 3,
        "alertLevel": 1,
        "alertIntervalSeconds": 1800,
        "alertContent": "证书将在{time}过期,请到\"证书管理\"页面查看具体信息",
        "contentParamList": "[\"{time}\"]",
        "description": null,
        "createTime": "2019-10-29 20:02:30",
        "modifyTime": "2019-11-07 10:35:03",
        "isAllUser": 0,
        "userList": "[\"targetmail@qq.com\"]",
        "lastAlertTime": null
    }
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
6.5 开启/关闭 告警类型

修改告警类型配置中的enable,0-关闭,1-开启;

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /alert/toggle
  • 请求方式:PUT
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 ruleId int 告警类型配置编号
2 enable int 是否启用该类型的告警:0-关闭,1-开启

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/alert/toggle
{
   "ruleId": 3,
   "enable": 1
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data Object 返回邮件服务配置的具体内容
3.1 Object 参数含义参考上文GET接口出参表

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "ruleId": 3,
        "ruleName": "证书有效期告警",
        "enable": 1,
        "alertType": 3,
        "alertLevel": 1,
        "alertIntervalSeconds": 1800,
        "alertContent": "证书将在{time}过期,请到\"证书管理\"页面查看具体信息",
        "contentParamList": "[\"{time}\"]",
        "description": null,
        "createTime": "2019-10-29 20:02:30",
        "modifyTime": "2019-11-07 10:35:03",
        "isAllUser": 0,
        "userList": "[\"targetmail@qq.com\"]",
        "lastAlertTime": null
    }
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
6.6 获取出块监控信息

获取出块周期、块大小、平均TPS的监控数据

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/stat?groupId={groupId}&beginDate={beginDate}&endDate={endDate}&contrastBeginDate={contrastBeginDate}&contrastEndDate={contrastEndDate}&gap={gap}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 nodeId int 群组id
2 beginDate long 显示时间(开始) 时间戳
3 endDate long 显示时间(结束)时间戳
4 contrastBeginDate long 对比时间(开始)时间戳
5 contrastEndDate long 对比时间(结束)时间戳
6 gap Int 数据粒度,默认是1

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/stat?groupId=1&gap=60eginDate=1617811200000&endDate=1617871955000&contrastBeginDate=&contrastEndDate=
返回参数

1)出参表

序号 输出参数 类型 备注
1 code int 返回码
2 message String 描述信息
3 data Array 返回信息列表
3.1 Object 返回信息实体
3.1.1 metricType String 测量类型:blockSize, blockCycle, tps
3.1.2 data Object
3.1.2.1 lineDataList Object
3.1.2.1.1 timestampList List\<String> 时间戳列表
3.1.2.1.2 valueList List\<Integer> 值列表
3.1.2.2 contrastDataList Object
3.1.2.2.1 timestampList List\<String> 时间戳列表
3.1.2.2.2 valueList List\<Integer> 值列表

2)出参示例

  • 成功:
{
	"code": 0,
	"message": "success",
	"data": [{
		"metricType": "blockSize",
		"data": {
			"lineDataList": {
				"timestampList": [1617866162706, 1617866462706, 1617866762706, 1617867062706, 1617867362706, 1617867662706, 1617867962706, 1617868262706, 1617868562706, 1617868862706, 1617869162706, 1617869462706, 1617869762706, 1617870062706, 1617870362706, 1617870664184, 1617870964184],
				"valueList": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
			},
			"contrastDataList": {
				"timestampList": [],
				"valueList": []
			}
		}
	}, {
		"metricType": "blockCycle",
		"data": {
			"lineDataList": {
				"timestampList": null,
				"valueList": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
			},
			"contrastDataList": {
				"timestampList": null,
				"valueList": []
			}
		}
	}, {
		"metricType": "tps",
		"data": {
			"lineDataList": {
				"timestampList": null,
				"valueList": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
			},
			"contrastDataList": {
				"timestampList": null,
				"valueList": []
			}
		}
	}],
	"attachment": null
}

7 审计相关模块

7.1 获取用户交易监管信息列表
7.1.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/monitor/userList/{groupId}
  • 请求方式:GET
  • 返回格式:JSON
7.1.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId string 所属群组编号

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/monitor/userList/300001
7.1.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data List 信息列表
3.1 Object 监管信息对象
3.1.1 userName String 用户名称
3.1.2 userType Int 用户类型(0-正常,1-异常)
3.1.3 groupId Int 所属群组
3.1.4 contractName String 合约名称
3.1.5 contractAddress String 合约地址
3.1.6 interfaceName String 合约接口名
3.1.7 transType Int 交易类型(0-合约部署,1-接口调用)
3.1.8 transUnusualType Int 交易异常类型 (0-正常,1-异常合约,2-异常接口)
3.1.9 transCount Int 交易量
3.1.10 transHashs String 交易hashs(最多5个)
3.1.11 transHashLastest String 最新交易hash
3.1.12 createTime LocalDateTime 落库时间
3.1.13 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": [
        {
            "userName": "SYSTEMUSER",
            "userType": 0,
            "groupId": null,
            "contractName": null,
            "contractAddress": null,
            "interfaceName": null,
            "transType": null,
            "transUnusualType": null,
            "transCount": null,
            "transHashs": null,
            "transHashLastest": null,
            "createTime": null,
            "modifyTime": null
        },
        {
            "userName": "asdf",
            "userType": 0,
            "groupId": null,
            "contractName": null,
            "contractAddress": null,
            "interfaceName": null,
            "transType": null,
            "transUnusualType": null,
            "transCount": null,
            "transHashs": null,
            "transHashLastest": null,
            "createTime": null,
            "modifyTime": null
        }
    ]
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
7.2 获取合约方法监管信息列表
7.2.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/monitor/interfaceList/{groupId}?userName={userName}
  • 请求方式:GET
  • 返回格式:JSON
7.2.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 所属群组编号
2 userName String 用户名

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/monitor/interfaceList/300001
7.2.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data List 信息列表
3.1 Object 监管信息对象
3.1.1 userName String 用户名称
3.1.2 userType Int 用户类型(0-正常,1-异常)
3.1.3 groupId Int 所属群组
3.1.4 contractName String 合约名称
3.1.5 contractAddress String 合约地址
3.1.6 interfaceName String 合约接口名
3.1.7 transType Int 交易类型(0-合约部署,1-接口调用)
3.1.8 transUnusualType Int 交易异常类型 (0-正常,1-异常合约,2-异常接口)
3.1.9 transCount Int 交易量
3.1.10 transHashs String 交易hashs(最多5个)
3.1.11 transHashLastest String 最新交易hash
3.1.12 createTime LocalDateTime 落库时间
3.1.13 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": [
        {
            "userName": "SYSTEMUSER",
            "userType": 0,
            "groupId": null,
            "contractName": null,
            "contractAddress": null,
            "interfaceName": null,
            "transType": null,
            "transUnusualType": null,
            "transCount": null,
            "transHashs": null,
            "transHashLastest": null,
            "createTime": null,
            "modifyTime": null
        },
        {
            "userName": "asdf",
            "userType": 0,
            "groupId": null,
            "contractName": null,
            "contractAddress": null,
            "interfaceName": null,
            "transType": null,
            "transUnusualType": null,
            "transCount": null,
            "transHashs": null,
            "transHashLastest": null,
            "createTime": null,
            "modifyTime": null
        }
    ]
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
7.3 获取交易hash监管信息列表
7.3.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /monitor/transList/{groupId}
  • 请求方式:GET
  • 返回格式:JSON
7.3.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 所属群组编号
2 userName String 用户名
3 startDate String 开始时间
4 endDate String 结束时间
5 interfaceName String 接口名称

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/monitor/transList/300001?userName=0x5d97f8d41638a7b1b669b70b307bab6d49df8e2c&interfaceName=0x4ed3885e
7.3.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data Object 返回结果实体
3.1 groupId String 所属群组编号
3.2 userName String 用户名
3.3 interfaceName String 接口名
3.4 totalCount Int 总记录数
3.5 transInfoList List\<Object> 交易信息列表
3.5.1 Object 交易信息实体
3.5.1.1 transCount Int 交易记录数
3.5.1.2 time LcalDateTime 时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "groupId": 300001,
        "userName": "0x5d97f8d41638a7b1b669b70b307bab6d49df8e2c",
        "interfaceName": "0x4ed3885e",
        "totalCount": 1,
        "transInfoList": [
            {
                "transCount": 1,
                "time": "2019-03-13 15:41:56"
            }
        ]
    }
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
7.4 获取异常用户信息列表
7.4.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/unusualUserList/{groupId}/{pageNumber}/{pageSize}?userName={userName}
  • 请求方式:GET
  • 返回格式:JSON
7.4.2 参数信息详情

请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId stirng 所属群组编号
2 userName String 用户名
3 pageNumber int 当前页码
4 pageSize int 页面大小

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/monitor/unusualUserList/300001/1/10?userName=
7.4.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 totalCount Int 总记录数
4 data List 返回信息列表
4.1 object 返回信息实体
4.1.1 userName String 用户名
4.1.2 transCount int 交易数
4.1.3 hashs String 交易hash
4.1.4 time LocalDateTime 时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": [
        {
            "userName": "0x08b52f85638a925929cf62a3ac77c67415012c24",
            "transCount": 1,
            "hashs": "0x43b50faa3f007c22cf5dd710c3561c5cde516e01a55b5b4acffd7d94cf61fc57",
            "time": "2019-03-13 22:28:29"
        }
    ],
    "totalCount": 1
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
7.5 获取异常合约信息列表
7.5.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/unusualContractList/{groupId}/{pageNumber}/{pageSize}?contractAddress={contractAddress}
  • 请求方式:GET
  • 返回格式:JSON
7.5.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 所属群组编号
2 contractAddress String 合约地址
3 pageNumber int 当前页码
4 pageSize int 页面大小

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/monitor/unusualContractList/300001/1/10?contractAddress=
7.5.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 totalCount Int 总记录数
4 data List 返回信息列表
4.1 object 返回信息实体
4.1.1 contractName String 合约名称
4.1.2 contractAddress String 合约地址
4.1.3 transCount int 交易数
4.1.4 hashs String 交易hash
4.1.5 time LocalDateTime 时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "totalCount": 1,
    "data": [
        {
            "contractName": "0x00000000",
            "contractAddress": "0x0000000000000000000000000000000000000000",
            "transCount": 3,
            "hashs": "0xc87e306db85740895369cc2a849984fe544a6e9b0ecdbd2d898fc0756a02a4ce",
            "time": "2019-03-13 15:41:56"
        }
    ]
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}

8 群组信息模块

8.1 获取群组概况
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/group/general/{groupId}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId string 群组id

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/group/general/group
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体
3.1 groupId string 群组id
3.2 nodeCount int 节点数量
3.3 contractCount int 已部署智能合约数量
3.4 transactionCount int 交易数量
3.5 latestBlock int 当前块高
3.6 orgCount int 组织数量

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": {
    "groupId": "group",
    "orgCount": 0,
    "nodeCount": 2,
    "contractCount": 51,
    "transactionCount": 249,
    "latestBlock": 249
  },
  "attachment": null
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
8.2 获取所有群组列表

默认只返回groupStatus为1的群组ID,可传入groupStatus筛选群组 (1-normal, 2-maintaining, 3-conflict-genesisi, 4-conflict-data)

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/group/all
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/group/all
http://127.0.0.1:5001/WeBASE-Node-Manager/group/all/{groupStatus}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Integer 返回码,0:成功 其它:失败
2 message String 描述
3 totalCount Integer 总记录数
4 data List 组织列表
4.1 Object 组织信息对象
4.1.1 groupId String 群组编号
4.1.2 groupName String 群组名称
4.1.3 groupStatus Integer 群组状态:1-正常, 2-维护中, 3-脏数据, 4-创世块冲突
4.1.4 nodeCount Integer 群组节点数
4.1.5 latestBlock BigInteger 最新块高
4.1.6 transCount BigInteger 交易量
4.1.7 createTime LocalDateTime 落库时间
4.1.8 modifyTime LocalDateTime 修改时间
4.1.9 description String 群组描述
4.1.10 groupType Integer 群组类别:1-同步,2-动态创建
4.1.11 encryptType Integer 加密类型
4.1.12 groupTimestamp String 群组时间戳
4.1.13 nodeIdList String 节点ID列表
4.1.14 chainId Integer 链ID
4.1.15 chainName String 链名称

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": [
    {
      "groupId": "group",
      "groupName": "group",
      "groupStatus": 1,
      "nodeCount": 2,
      "latestBlock": 0,
      "transCount": 0,
      "createTime": "2021-12-06 11:21:55",
      "modifyTime": "2021-12-06 17:12:06",
      "description": "synchronous",
      "groupType": 1,
      "encryptType": 0,
      "groupTimestamp": null,
      "nodeIdList": null,
      "chainId": 0,
      "chainName": ""
    }
  ],
  "totalCount": 1
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
8.3 查询每日交易数据
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/group/transDaily/{groupId}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId string 群组id

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/group/transDaily/group
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data list 返回信息列表
3.1 object 返回信息实体
4.1 day string 日期YYYY-MM-DD
4.2 groupId String 群组编号
4.3 transCount int 交易数量

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": [
    {
      "day": "2021-11-29",
      "groupId": "group",
      "transCount": 75
    },
    ...
  ],
  "attachment": null
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
8.4 刷新群组列表

刷新节点管理服务的群组列表,检查本地群组数据与链上群组数据是否有冲突,检查多个节点之间的创世块是否一致,并从链上拉取最新的群组列表

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/group/update
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 - - - -

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/group/update
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data list 返回信息列表

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {}
}
8.5 获取所有群组列表(包含异常群组)

返回所有群组,包含正常运行、维护中、脏数据冲突、创世块冲突4种状态的群组

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/group/all/invalidIncluded
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表 | 序号 | 输入参数 | 类型 | 必填 | 备注 | |——|————-|—————|——–|——————————-| | 1 | pageSize | Integer | 是 | 每页记录数 | | 2 | pageNumber | Integer | 是 | 当前页码 |

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/group/all/invalidIncluded/{pageNumber}/{pageSize}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Integer 返回码,0:成功 其它:失败
2 message String 描述
3 totalCount Integer 总记录数
4 data List 组织列表
4.1 Object 组织信息对象
4.1.1 groupId Integer 群组编号
4.1.2 groupName String 群组名称
4.1.3 groupStatus Integer 群组状态:1-正常, 2-维护中, 3-脏数据, 4-创世块冲突
4.1.4 nodeCount Integer 群组节点数
4.1.5 latestBlock BigInteger 最新块高
4.1.6 transCount BigInteger 交易量
4.1.7 createTime LocalDateTime 落库时间
4.1.8 modifyTime LocalDateTime 修改时间
4.1.9 description String 群组描述
4.1.10 groupType Integer 群组类别:1-同步,2-动态创建
4.1.11 encryptType Integer 加密类型
4.1.12 groupTimestamp String 群组时间戳
4.1.13 nodeIdList String 节点Id列表
4.1.14 chainId Integer 链Id
4.1.15 chainName String 链名称

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": [
    {
      "groupId": "group",
      "groupName": "group",
      "groupStatus": 1,
      "nodeCount": 2,
      "latestBlock": 0,
      "transCount": 0,
      "createTime": "2021-12-06 11:21:55",
      "modifyTime": "2021-12-06 17:12:06",
      "description": "synchronous",
      "groupType": 1,
      "encryptType": 0,
      "groupTimestamp": null,
      "nodeIdList": null,
      "chainId": 0,
      "chainName": ""
    }
  ],
  "totalCount": 1
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
8.6 删除群组所有数据

删除指定群组编号的群组的所有数据,包含节点数据、交易数据、交易审计数据等等。

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/group/{groupId}
  • 请求方式:DELETE
  • 返回格式:JSON
请求参数

1)入参表 | 序号 | 输入参数 | 类型 | 必填 | 备注 | |——|————-|—————|——–|——————————-| | 1 | groupId | String | 是 | 群组编号 |

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/group/{groupId}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Integer 返回码,0:成功 其它:失败
2 message String 描述
3 data
4 attachment

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": null,
  "attachment": null
}
  • 失败:
{
    "code": 202006,
    "message": "invalid group id"
}
8.7 配置群组备注信息

配置群组的备注信息,用于数据大屏中大标题的展示。(默认备注为”synchronous”)

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/group/description
  • 请求方式:PUT
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组ID
1 description String 群组备注

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/group/description

{ “description”: “溯源存证应用”, “groupId”: “group” }

返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": 1,
  "attachment": null
}
8.8 获取单个群组详细信息
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/group/detail/{groupId}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId string 群组ID

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/group/detail/{groupId}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Integer 返回码,0:成功 其它:失败
2 message String 描述
3 data List 组织列表
3.1 Object 组织信息对象
3.1.1 groupId String 群组编号
3.1.2 groupName String 群组名称
3.1.3 groupStatus Integer 群组状态:1-正常, 2-维护中, 3-脏数据, 3-创世块冲突
3.1.4 nodeCount Integer 群组节点数
3.1.5 latestBlock BigInteger 最新块高
3.1.6 transCount BigInteger 交易量
3.1.7 createTime LocalDateTime 落库时间
3.1.8 modifyTime LocalDateTime 修改时间
3.1.9 description String 群组描述
3.1.10 groupType Integer 群组类别:1-同步,2-动态创建
3.1.11 groupTimestamp String 群组时间戳
3.1.12 nodeIdList String 节点Id列表
3.1.13 chainId Integer 链Id
3.1.14 chainName String 链名称
3.1.15 encryptType Integer 加密类型

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": {
    "groupId": 1,
    "groupName": "group1",
    "groupStatus": 1,
    "nodeCount": 4,
    "latestBlock": 0,
    "transCount": 0,
    "createTime": "2021-07-29 14:44:59",
    "modifyTime": "2021-09-29 16:42:05",
    "description": "溯源存证应用",
    "groupType": 1,
    "groupTimestamp": null,
    "nodeIdList": null,
    "chainId": 0,
    "chainName": "default",
    "encryptType": 0
  },
  "attachment": null
}

9 节点管理模块

9.1 查询节点列表

查询WeBASE本地保存的节点列表

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/node/nodeList/{groupId}/{pageNumber}/{pageSize}?nodeName={nodeName}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组id
2 pageSize Int 每页记录数
3 pageNumber Int 当前页码
4 nodeName String 节点名称

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/node/nodeList/300001/1/10?nodeName=
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 totalCount Int 总记录数
4 data List 节点列表
4.1 Object 节点信息对象
4.1.1 nodeId int 节点编号
4.1.2 nodeName string 节点名称
4.1.3 groupId int 所属群组编号
4.1.4 nodeActive int 状态
4.1.5 nodeIp string 节点ip
4.1.6 P2pPort int 节点p2p端口
4.1.7 description String 备注
4.1.8 blockNumber BigInteger 节点块高
4.1.9 pbftView BigInteger Pbft view
4.1.10 createTime LocalDateTime 落库时间
4.1.11 modifyTime LocalDateTime 修改时间
4.1.12 city String 节点所在城市
4.1.13 agency String 节点所属机构

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "totalCount": 1,
    "data": [
        {
            "nodeId": "06269e130f8220ebaa78e67832df0de6b4c5ee3f1b14e64ab2bae26510a4bcf997454b35067c1685d4343e6ad84b45c3b8690a858f2831a9247a97a27166ce1f",
            "nodeName": "1_06269e130f8220ebaa78e67832df0de6b4c5ee3f1b14e64ab2bae26510a4bcf997454b35067c1685d4343e6ad84b45c3b8690a858f2831a9247a97",
            "groupId": 1,
            "nodeIp": "127.0.0.1",
            "p2pPort": null,
            "description": null,
            "blockNumber": 589,
            "pbftView": 11,
            "nodeActive": 1,
            "createTime": "2021-07-29 14:44:59",
            "modifyTime": "2021-09-29 16:17:38",
            "city": "430500",
            "agency": "GZ"
        },
    ]
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
9.2 查询节点信息
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/node/nodeInfo/{groupId}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组id

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/node/nodeInfo/1
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data Object 节点信息对象
3.1 nodeId int 节点编号
3.2 nodeName string 节点名称
3.3 groupId int 所属群组编号
3.4 nodeActive int 状态
3.5 nodeIp string 节点ip
3.6 P2pPort int 节点p2p端口
3.7 description String 备注
3.8 blockNumber BigInteger 节点块高
3.9 pbftView BigInteger Pbft view
3.10 createTime LocalDateTime 落库时间
3.11 modifyTime LocalDateTime 修改时间
3.12 city String 节点所在城市
3.13 agency String 节点所属机构

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "nodeId": "06269e130f8220ebaa78e67832df0de6b4c5ee3f1b14e64ab2bae26510a4bcf997454b35067c1685d4343e6ad84b45c3b8690a858f2831a9247a97a27166ce1f",
        "nodeName": "1_06269e130f8220ebaa78e67832df0de6b4c5ee3f1b14e64ab2bae26510a4bcf997454b35067c1685d4343e6ad84b45c3b8690a858f2831a9247a97",
        "groupId": "group",
        "nodeIp": "127.0.0.1",
        "p2pPort": null,
        "description": null,
        "blockNumber": 589,
        "pbftView": 11,
        "nodeActive": 1,
        "createTime": "2021-07-29 14:44:59",
        "modifyTime": "2021-09-29 16:17:38",
        "city": "430500",
        "agency": "GZ"
    },
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
9.3 查询群组下的节点ID列表
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/node/nodeIdList/{groupId}/{pageNumber}/{pageSize}
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId string 群组id
2 pageNumber int
3 pageSize int
4 nodeName string

2)入参示例

**

http://127.0.0.1:5001/WeBASE-Node-Manager/node/nodeIdList/group
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 totalCount Int 总记录数
4 data List 节点ID列表

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": [
            "fe57d7b39ed104b4fb2770ae5aad7946bfd377d0eb91ab92a383447e834c3257dec56686551d08178f2d5f40d9fad615293e46c9f5fc23cf187258e121213b1d",
            "65bc44d398d99d95a9d404aa16e4bfbc2f9ebb40f20439ddef8575a139dc3a80310cfc98a035bd59a67cc5f659f519e3e99b855f3d27f21a889c23a14036d0c7",
            "95efafa5197796e7edf647191de83f4259d7cbb060f4bac5868be474037f49144d581c15d8aef9b07d78f18041a5f43c3c26352ebbf5583cd23070358c8fba39",
            "06269e130f8220ebaa78e67832df0de6b4c5ee3f1b14e64ab2bae26510a4bcf997454b35067c1685d4343e6ad84b45c3b8690a858f2831a9247a97a27166ce1f"
  ],
  "attachment": null
}
9.4 配置节点备注信息

可配置节点的IP、机构、城市信息,可用于数据监控大屏展示

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/node/description
  • 请求方式:PUT
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 nodeId String 节点ID
2 nodeIp String 节点备注IP
3 agency String 节点备注机构名
4 city String 节点备注城市

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/node/description

{ “agency”: “org1”, “city”: “GZ”, “nodeId”: “06269e130f8220ebaa78e67832df0de6b4c5ee3f1b14e64ab2bae26510a4bcf997454b35067c1685d4343e6ad84b45c3b8690a858f2831a9247a97a27166ce1f”, “nodeIp”: “127.0.0.1” }

返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success"
}
9.5 查询节点的城市列表
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/node/city/list
  • 请求方式:GET
  • 返回格式:JSON
请求参数

1)入参表

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/node/city/list
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data List
3.1 city String 城市名
3.2 count Int 节点数

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": [
    {
      "city": "110100", // 此处为城市ID
      "count": 2
    },
    {
      "city": "430500",
      "count": 1
    },
    {
      "city": "440300",
      "count": 1
    }
  ],
  "attachment": null
}

10 角色管理模块

10.1 查询角色列表
10.1.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:role/roleList
  • 请求方式:GET
  • 返回格式:JSON
10.1.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 roleId int 角色id
2 roleName String 角色名称
3 pageSize int 每页记录数
4 pageNumber int 当前页码

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/role/roleList?groupId=300001&pageNumber=&pageSize=&roleId=&roleName=
10.1.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 totalCount Int 总记录数
4 data List 组织列表
4.1 Object 组织信息对象
4.1.1 roleId Int 角色编号
4.1.2 roleName String 角色名称
4.1.3 roleNameZh String 角色中文名称
4.1.4 roleStatus Int 状态(1-正常2-无效) 默认1
4.1.5 description String 备注
4.1.6 createTime LocalDateTime 创建时间
4.1.7 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "totalCount": 2,
    "data": [
        {
            "roleId": 100000,
            "roleName": "admin",
            "roleNameZh": "管理员",
            "roleStatus": 1,
            "description": null,
            "createTime": "2019-02-14 17:33:50",
            "modifyTime": "2019-02-14 17:33:50"
        },
        {
            "roleId": 100001,
            "roleName": "visitor",
            "roleNameZh": "访客",
            "roleStatus": 1,
            "description": null,
            "createTime": "2019-02-14 17:33:50",
            "modifyTime": "2019-02-14 17:33:50"
        }
    ]
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}

11 用户管理模块

11.1 新增私钥用户
11.1.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/user/userInfo
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
11.1.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 userName string 用户名称
2 description string 备注
3 groupId String 所属群组
4 account string 关联账户
5 userType int

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/user/userInfo
{
  "account": "admin",
  "description": "string",
  "groupId": "group",
  "userName": "frank",
  "userType": 0
}
11.1.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体(成功时不为空)
3.1 userId int 用户编号
3.2 userName string 用户名称
3.3 groupId String 所属群组编号
3.4 description String 备注
3.5 userStatus int 状态(1-正常 2-停用) 默认1
3.6 publicKey String 公钥信息
3.7 address String 在链上位置的hash
3.8 hasPk Int 是否拥有私钥信息(1-拥有,2-不拥有)
3.9 account string 关联账户
3.10 createTime LocalDateTime 创建时间
3.11 modifyTime LocalDateTime 修改时间
3.12 chainIndex int 链索引
3.13 userType int 用户类型
3.14 signUserId String 签名用户Id
3.15 appId String 应用Id
3.16 privateKey String 私钥信息

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": {
    "userId": 700006,
    "userName": "frank",
    "account": "admin",
    "groupId": "group",
    "publicKey": "04aa23e6fcc6099c622d7cc9da0ab30019c6a349bfd71d69c83f7cf65a00a5ff9ed5e6fa0ab12c21cc46f0af0aed361a2854777b3b5cd2d13f6ade78bd41fe5b16",
    "privateKey": null,
    "userStatus": 1,
    "chainIndex": null,
    "userType": 0,
    "address": "0xd24488a4d51661694f0c31f2cc688d1670f51d29",
    "signUserId": "c5a76d781e124c7db7279af39819ed2f",
    "appId": "group",
    "hasPk": 1,
    "description": "string",
    "createTime": "2021-12-06 17:53:53",
    "modifyTime": "2021-12-06 17:53:53"
  },
  "attachment": null
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
11.2 绑定公钥用户
11.2.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/user/bind
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
11.2.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 userName string 用户名称
2 description string 备注
3 groupId String 所属群组
4 account string 关联账户
5 publicKey String
6 userType int

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/user/userInfo
{
  "account": "admin",
  "description": "string",
  "groupId": "group",
  "publicKey": "04aa23e6fcc6099c622d7cc9da0ab30019c6a349bfd71d69c83f7cf65a00a5ff9ed5e6fa0ab12c21cc46f0af0aed361a2854777b3b5cd2d13f6ade78bd41fe5b16",
  "userName": "alex",
  "userType": 0
}
11.2.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体(成功时不为空)
3.1 userId int 用户编号
3.2 userName string 用户名称
3.3 groupId int 所属群组编号
3.4 description String 备注
3.5 userStatus int 状态(1-正常 2-停用) 默认1
3.6 publicKey String 公钥信息
3.7 address String 在链上位置的hash
3.8 hasPk Int 是否拥有私钥信息(1-拥有,2-不拥有)
3.9 account string 关联账户
3.10 createTime LocalDateTime 创建时间
3.11 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "userId": 700007,
        "userName": "asdfvw",
        "groupId": 300001,
        "publicKey": "0x4189fdacff55fb99172e015e1adb96dc77b0cae1619b1a41cc360777bee6682fcc9752d8aabf144fbf610a3057fd4b5",
        "userStatus": 1,
        "userType": 1,
        "address": "0x40ec3c20b5178401ae14ad8ce9c9f94fa5ebb86a",
        "hasPk": 1,
        "description": "sda",
        "account": "admin",
        "createTime": "2019-03-15 18:00:27",
        "modifyTime": "2019-03-15 18:00:27"
    }
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
11.3 修改用户备注
11.3.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/user/userInfo
  • 请求方式:PUT
  • 请求头:Content-type: application/json
  • 返回格式:JSON
11.3.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 userId int 用户编号
2 description String 备注

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/user/userInfo
{
    "userId": "700006",
    "description": "newDescription"
}
11.3.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体(成功时不为空)
3.1 userId int 用户编号
3.2 userName String 用户名称
3.3 groupId String 所属群组编号
3.4 description String 备注
3.5 userStatus int 状态(1-正常 2-停用) 默认1
3.6 publicKey String 公钥信息
3.7 address String 在链上位置的hash
3.8 hasPk Int 是否拥有私钥信息(1-拥有,2-不拥有)
3.9 account String 关联账户
3.10 createTime LocalDateTime 创建时间
3.11 modifyTime LocalDateTime 修改时间
3.12 chainIndex int
3.13 userType int 用户类型
3.14 signUserId String 签名用户Id
3.15 appId String
3.16 privateKey String

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": {
    "userId": 700006,
    "userName": "frank",
    "account": "admin",
    "groupId": "group",
    "publicKey": "04aa23e6fcc6099c622d7cc9da0ab30019c6a349bfd71d69c83f7cf65a00a5ff9ed5e6fa0ab12c21cc46f0af0aed361a2854777b3b5cd2d13f6ade78bd41fe5b16",
    "privateKey": null,
    "userStatus": 1,
    "chainIndex": null,
    "userType": 0,
    "address": "0xd24488a4d51661694f0c31f2cc688d1670f51d29",
    "signUserId": "c5a76d781e124c7db7279af39819ed2f",
    "appId": "group",
    "hasPk": 1,
    "description": "string",
    "createTime": "2021-12-06 17:53:53",
    "modifyTime": "2021-12-06 19:13:17"
  },
  "attachment": null
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
11.4 导入私钥用户

可在页面导入WeBASE-Front所导出的私钥txt文件

其中私钥字段用Base64加密

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/user/import
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 privateKey string Base64加密后的私钥内容
2 userName string 用户名称
3 description string 备注
4 groupId String 所属群组
5 account string 关联账户
6 userId int 用户Id
7 userType int 用户类型

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/user/import
{
    "privateKey": "OGFmNWIzMzNmYTc3MGFhY2UwNjdjYTY3ZDRmMzE4MzU4OWRmOThkMjVjYzEzZGFlMGJmODhkYjhlYzVhMDcxYw==",
    "groupId": "group",
    "description": "密钥拥有者",
    "userName": "user1",
    "account": "admin",
    "userId": 0,
    "userType": 0
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success"
}
  • 失败:
{
    "code": 201031,
    "message": "privateKey decode fail",
    "data": null
}
11.5 导入.pem私钥

可导入控制台所生成的私钥.pem文件

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/user/importPem
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 pemContent string pem文件的内容,必须以-----BEGIN PRIVATE KEY-----\n开头,以\n-----END PRIVATE KEY-----\n结尾的格式
2 userName string 用户名称
3 description string 备注
4 groupId String 所属群组
5 account string 关联账户
6 userType int

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/user/importPem
{
    "pemContent":"-----BEGIN PRIVATE KEY-----\nMIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgC8TbvFSMA9y3CghFt51/\nXmExewlioX99veYHOV7dTvOhRANCAASZtMhCTcaedNP+H7iljbTIqXOFM6qm5aVs\nfM/yuDBK2MRfFbfnOYVTNKyOSnmkY+xBfCR8Q86wcsQm9NZpkmFK\n-----END PRIVATE KEY-----\n",
    "groupId": "group",
    "description": "密钥拥有者",
    "userName": "user2",
    "account": "admin",
    "userType": 0
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success"
}
  • 失败:
{
    "code": 201232,
    "message": "Pem file format error, must surrounded by -----XXXXX PRIVATE KEY-----"",
    "data": null
}
11.6 导入.p12私钥

可导入控制台生成的私钥.p12文件

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/user/importP12
  • 请求方式:POST
  • 请求头:Content-type: form-data
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 p12File MultipartFile .p12文件
2 p12Password string 使用base64编码的密码;.p12文件的密码,缺省时默认为"",即空密码;p12无密码时,可传入空值或不传;不包含中文
3 userName string 用户名称
4 description string 备注
5 groupId String 所属群组
6 account string 关联账户
7 roleId int 角色ID

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/user/importP12
使用form-data传参
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success"
}
  • 失败:(p12文件的密码错误)
{
    "code": 201236,
    "message": "p12's password not match",
    "data": null
}
11.7 导出明文私钥

可在页面导出WeBASE-Front所导出的私钥txt文件

其中私钥字段用Base64加密

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/user/export/{userId}
  • 请求方式:POST
  • 请求头:Content-type: form-data
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 userId int

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/user/export/300001
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体(成功时不为空)
3.1 userId int 用户编号
3.2 userName string 用户名称
3.3 groupId String 所属群组编号
3.4 description String 备注
3.5 userStatus int 状态(1-正常 2-停用) 默认1
3.6 publicKey String 公钥信息
3.7 address String 在链上位置的hash
3.8 hasPk Int 是否拥有私钥信息(1-拥有,2-不拥有)
3.9 account string 关联账户
3.10 createTime LocalDateTime 创建时间
3.11 modifyTime LocalDateTime 修改时间
3.12 privateKey String 私钥,用base64编码

2)出参示例

  • 成功:
{
	"code": 0,
	"message": "success",
	"data": {
		"userId": 700003,
		"userName": "frank",
		"account": "admin",
		"groupId": "group",
		"publicKey": "04d01115d548e7561b15c38f004d734633687cf4419620095bc5b0f47070afe85aa9f34ffdc815e0d7a8b64537e17bd81579238c5dd9a86d526b051b13f4062327",
		"privateKey": "MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYw==",
		"userStatus": 1,
		"chainIndex": null,
		"userType": 1,
		"address": "0xdbc23ae43a150ff8884b02cea117b22d1c3b9796",
		"signUserId": "b751efc5d0cc4e12b90908b1f2670258",
		"appId": "group",
		"hasPk": 1,
		"description": "",
		"createTime": "2021-04-06 21:24:12",
		"modifyTime": "2021-04-06 21:24:12"
	},
	"attachment": null
}
11.8 导出.pem私钥

导出pem格式的私钥文件

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/user/exportPem
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组id
2 signUserId string 用户的signUserId
3 p12Password String

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/user/exportPem
返回参数

1)出参表

序号 输出参数 类型 备注
- - InputStream 返回文件的二进制流

2)出参示例

  • 成功:
-----BEGIN PRIVATE KEY-----
MIGNAgEAMBAGByqGSM49AgEGBSuBBAAKBHYwdAIBAQQgnAXS1DYA90nML3Kge4Qd
IgMXiQ9cojmRgyjo1BLYXOqgBwYFK4EEAAqhRANCAATLPOzgUzNbo6UeCAjYv2++
FwlBmT1Sa7goXELaazyJEJLbAlAFGB6qvjdA9m2nx5+rTmfGoSuQK9T2hC/vWJfq
-----END PRIVATE KEY-----

11.9 导出.p12私钥

导出pem格式的私钥文件

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/user/exportP12
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId string 群组id
2 signUserId string 用户的signUserId
3 p12Password string

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/user/exportP12
返回参数

1)出参表

序号 输出参数 类型 备注
- - InputStream 返回文件的二进制流

2)出参示例

  • 成功:
// 二进制流

12 合约方法管理模块

12.1 新增合约方法
12.1.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/method/add
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
12.1.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 所属群组
2 methodList List 方法列表
2.1 Object 方法实体
2.1.1 abiInfo String 合约abi信息
2.1.2 methodId String 方法编号
2.1.3 methodType String 方法类型

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/method/add
{
  "groupId": "string",
  "methodList": [
    {
      "abiInfo": "string",
      "methodId": "string",
      "methodType": "string"
    }
  ]
}
1.1.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体(空)

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": null
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
12.2 根据方法编号查询
12.1.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/method/findById/{groupId}/{methodId}
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
12.1.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 所属群组
2 methodId String 方法编号

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/method/findById/group/add
1.1.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 Object 方法实体
3.1 abiInfo String 合约abi信息
3.2 methodId String 方法编号
3.3 methodType String 方法类型
3.4 createTime LocalDateTime 创建时间
3.5 modifyTime LocalDateTime 修改时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "methodId": "methodIasdfdttttt",
        "groupId": 2,
        "abiInfo": "fsdabiTestfd232222",
        "methodType": "function",
        "createTime": "2019-04-16 16:59:27",
        "modifyTime": "2019-04-16 16:59:27"
    }
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}

13 系统管理模块

系统管理中的权限管理接口

  • 使用FISCO BCOS v2.5.0 与 WeBASE-Node-Manager v1.4.1 (及)以上版本将使用预编译合约中的ChainGovernance接口(本章节接口13.14开始),详情可参考FISCO BCOS基于角色的权限控制
  • 使用低于FISCO BCOS v2.5.0 与 WeBASE-Node-Manager v1.4.1版本,则使用接口13.1至13.4接口
13.1获取系统配置

根据群组id获取系统配置SystemConfig的list列表,目前只支持tx_count_limit, tx_gas_limit两个参数。

13.1.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /sys/config/list
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
13.1.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组id
2 pageSize int
3 pageNumber int

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/sys/config/list?groupId=1&pageSize=10&pageNumber=1
13.1.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data 数组 list包含数据库存储的配置key与对应value

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": [
        {
            "id": 6,
            "groupId": 1,
            "fromAddress": "0x",
            "configKey": "tx_gas_limit",
            "configValue": "300000000"
        },
        {
            "id": 5,
            "groupId": 1,
            "fromAddress": "0xd0b56b4ce0e8ce5e064f896d9ad1c16b2603f285",
            "configKey": "tx_count_limit",
            "configValue": "10002"
        }
    ],
    "totalCount": 2
}
13.2 设置系统配置

系统配置管理员设置系统配置,目前只支持tx_count_limit, tx_gas_limit两个参数。

13.2.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /sys/config
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
13.2.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组id
2 fromAddress String 管理员自己的地址
3 configKey String 目前类型两种(tx_count_limit, tx_gas_limit,用户可自定义key如tx_gas_price
4 configValue String
5 signUserId String

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/sys/config
{
    "groupId": "group",
    "fromAddress": "0xd5bba8fe456fce310f529edecef902e4b63129b1",
    "configKey": "tx_count_limit",
    "configValue": "1001",
    "signUserId": "string"
}
13.2.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success"
 }
  • 失败:
{
    "code": -50000,
    "message": "permission denied"
}
13.3 获取节点列表(节点管理)

获取节点的list列表,包含节点id,节点共识状态。

注:接口返回所有的共识/观察节点(无论运行或停止),以及正在运行的游离节点

13.3.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /precompiled/consensus/list
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
13.3.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组id
2 pageSize int
3 pageNumber int

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/precompiled/consensus/list?groupId=1&pageSize=10&pageNumber=1
13.3.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data List 成功时返回

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": [
        {
            "nodeId": "13e0f2b94cbce924cc3737385a38587939e809fb786c4fc34a6ba3ea97693bccfa173b352ac41f1dbb97e9e4910ccbec1df38ad4020cef3b2044e833188adad9",
            "nodeType": "sealer"
        },
        {
            "nodeId": "bce4b2269c25c2cdba30155396bfe90af08c3c08cff205213477683117e4243ebe26588479519e636a5d5d93545cab778435cacacc41993f28f58f60fa5ceb72",
            "nodeType": "sealer"
        },
        {
            "nodeId": "e815cc5637cb8c3274c83215c680822e4a0110d0a8315fcf03e43e8e3944edd758c8b173c4e0076f599aa1f853fa207d47cc95d201ae8d0206b71ad5aa8c3f59",
            "nodeType": "sealer"
        }
    ],
    "totalCount": 3
}
13.4 设置节点共识状态接口(节点管理)

节点管理相关接口,可用于节点三种共识状态的切换。分别是共识节点sealer, 观察节点observer, 游离节点remove

13.4.1 传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /precompiled/consensus
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
13.4.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组id
2 fromAddress String 管理员的地址
3 nodeType String 节点类型:observer,sealer,remove
4 nodeId String 节点id
5 signUserId String 签名用户ID
6 weight int

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/precompiled/consensus
{
    "groupId": "group",
    "fromAddress": "0xd5bba8fe456fce310f529edecef902e4b63129b1",
    "nodeType": "remove",
    "nodeId": "224e6ee23e8a02d371298b9aec828f77cc2711da3a981684896715a3711885a3177b3cf7906bf9d1b84e597fad1e0049511139332c04edfe3daddba5ed60cffa",
    "signUserId": "string",
    "weight": 0
}
13.4.3 返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述 |

2)出参示例

  • 成功:
[
    {
      "code": 0,
      "message": "success"
     }

]
  • 失败:
{
    "code": -51000,
    "message": "nodeId already exist"
}

14 证书管理模块

14.1 获取证书列表接口

获取证书的list列表,返回的列表包含证书指纹、证书内容、证书名字、证书的父证书、证书对应nodeid(节点证书)、证书有效期

注:首次启动项目会自动拉取每一个Front的证书

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /cert/list
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
- -

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/cert/list
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data List 成功时返回证书相关信息的列表
3 Object 单个证书相关信息
3.1 fingerPrint String 证书的指纹
3.1 certName String 证书名字
3.1 content String 证书文件的内容
3.1 certType String 证书类型:chain, agency, node, sdk等,国密版中node证书分为加密ennode证书与签名gmnode证书
3.1 publicKey String 证书对应nodeid(仅限节点证书公钥)
3.1 address String 证书对应地址(仅限节点证书公钥)
3.1 father String 证书的父证书指纹
3.1 validityFrom Date 证书有效期开始时间
3.1 validityTo Date 证书有效期结束时间
3.1 createTime LocalDateTime 导入创建时间

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": [
        {
            "fingerPrint": "814D51FB7CBAB33676FE73E8FBBFECB3D3B1301A",
            "certName": "sdk",
            "content": "-----BEGIN CERTIFICATE-----\nMIICOTCCASGgAwIBAgIJAKHsAYI3TsAOMA0GCSqGSIb3DQEBCwUAMDgxEDAOBgNV\nBAMMB2FnZW5jeUExEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5j\neTAeFw0xOTA3MTIwMjA2MTZaFw0yOTA3MDkwMjA2MTZaMDIxDDAKBgNVBAMMA3Nk\nazETMBEGA1UECgwKZmlzY28tYmNvczENMAsGA1UECwwEbm9kZTBWMBAGByqGSM49\nAgEGBSuBBAAKA0IABJ79rSKIb97xZwByW58xH6tzoNKNLaKG7J5wxAEgAb03O2h4\nMkEMLtf/LB7tELOiyCiIEhLScprb1LjvDDt2RDGjGjAYMAkGA1UdEwQCMAAwCwYD\nVR0PBAQDAgXgMA0GCSqGSIb3DQEBCwUAA4IBAQC0u2lfclRmCszBTi2rtvMibZec\noalRC0sQPBPRb7UQhGCodxmsAT3dBUf+s4wLLrmN/cnNhq5HVObbWxzfu7gn3+IN\nyQEeqdbGdzlu1EDcaMgAz6p2W3+FG/tmx/yrNza29cYekWRL44OT5LOUPEKrJ4bJ\neOBRY4QlwZPFmM0QgP7DoKxHXldRopkmvqT4pbW51hWvPgj7KrdqwbVWzuWQuI3i\n3j3O96XZJsaDZ0+IGa5093+TsTNPfWUZzp5Kg+EyNR6Ea1evuMDNq9NAqqcd5bX9\nO9kgkb8+llO8I5ZhdnN0BuhGvv9wpsa9hW8BImOLzUBwfSVYouGCkoqlVq9X\n-----END CERTIFICATE-----\n",
            "certType": "node",
            "publicKey": "9efdad22886fdef16700725b9f311fab73a0d28d2da286ec9e70c4012001bd373b687832410c2ed7ff2c1eed10b3a2c828881212d2729adbd4b8ef0c3b764431",
            "address": "5cb81b06ef0734fff99929c5deae4a5b25e800cc",
            "father": "EEBAAB2F674D05CF1EAD70367B4D2A928D894EF8",
            "validityFrom": 1562860800000,
            "validityTo": 1878220800000,
            "createTime": 1569686400000
        }
    ],
    "totalCount": 1
}
14.2 根据指纹获取证书接口

根据指纹获取单个证书

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /cert
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 fingerPrint String 证书指纹,证书唯一标识

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/cert?fingerPrint=814D51FB7CBAB33676FE73E8FBBFECB3D3B1301A
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data List 成功时返回
3 Object 单个证书相关信息
3.1 fingerPrint String 证书的指纹
3.1 certName String 证书名字
3.1 content String 证书文件的内容
3.1 certType String 证书类型:chain, agency, node, sdk等,国密版node证书分为加密ennode证书与签名gmnode证书
3.1 publicKey String 证书对应nodeid(仅限节点证书公钥)
3.1 address String 证书对应地址(仅限节点证书公钥)
3.1 father String 证书的父证书指纹
3.1 validityFrom Date 证书有效期开始时间
3.1 validityTo Date 证书有效期结束时间
3.1 createTime LocalDateTime 导入创建时间

2)出参示例

  • 成功:’
{
    "code": 0,
    "message": "success",
    "data": {
        "fingerPrint": "EEBAAB2F674D05CF1EAD70367B4D2A928D894EF8",
        "certName": "agencyA",
        "content": "-----BEGIN CERTIFICATE-----\nMIIDADCCAeigAwIBAgIJAJUF2Dp1a9U6MA0GCSqGSIb3DQEBCwUAMDUxDjAMBgNV\nBAMMBWNoYWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjAe\nFw0xOTA3MTIwMjA2MTZaFw0yOTA3MDkwMjA2MTZaMDgxEDAOBgNVBAMMB2FnZW5j\neUExEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5jeTCCASIwDQYJ\nKoZIhvcNAQEBBQADggEPADCCAQoCggEBANBT4CTciIYdSeEabgJzif+CFB0y3GzG\ny+XQYtWK+TtdJWduXqhnnZiYAZs7OPGEu79Yx/bEpjEXsu2cXH0D6BHZk+wvuxG6\nezXWq5MYjCw3fQiSRWkDYoxzWgulkRyYROF1xoZeNGQssReFmCgP+pcQwRxjcq8z\nIA9iT61YxyW5nrS7xnra9uZq/EE3tsJ0ae3ax6zixCT66aV49S27cMcisS+XKP/q\nEVPxhO7SUjnzZY69MgZzNSFxCzIbapnlmYAOS26vIT0taSkoKXmIsYssga45XPwI\n7YBVCc/34kHzW9xrNjyyThMWOgDsuBqZN9xvapGSQ82Lsh7ObN0dZVUCAwEAAaMQ\nMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAu3aHxJnCZnICpHbQ\nv1Lc5tiXtAYE9aEP5cxb/cO14xY8dS+t0wiLIvyrE2aTcgImzr4BYNBm1XDt5suc\nMpzha1oJytGv79M9/WnI/BKmgUqTaaXOV2Ux2yPX9SadNcsD9/IbrV0b/hlsPd6M\nK8w7ndowvBgopei+A1NQY6jTDUKif4RxD4u5HZFWUu7pByNLFaydU4qBKVkucXOq\nxmWoupL5XrDk5o490kiz/Zgufqtb4w6oUr3lrQASAbFB3lID/P1ipi0DwX7kZwVX\nECDLYvr+eX6GbTClzn0JGuzqV4OoRo1rrRv+0tp1aLZKpCYn0Lhf6s1iw/kCeM2O\nnP9l2Q==\n-----END CERTIFICATE-----\n",
        "certType": "agency",
        "publicKey": "",
        "address": "",
        "father": "",
        "validityFrom": 1562860800000,
        "validityTo": 1878220800000,
        "createTime": 1569686400000
    }
}
14.3 导入证书接口

导入保存证书文件

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /cert
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
14.3.2 请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 content String 证书文件的内容,需保留开头与结尾以及证书原有的回车\n的格式文本;证书中包含多个证书亦可

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/cert
{
    "content": "-----BEGIN CERTIFICATE-----\nMIICOzCCASOgAwIBAgIJANJZtoFLZsGcMA0GCSqGSIb3DQEBCwUAMDgxEDAOBgNVBAMMB2FnZW5jeUExEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5jeTAeFw0xOTA5MDUwNzQ3NDdaFw0yOTA5MDIwNzQ3NDdaMDQxDjAMBgNVBAMMBW5vZGUzMRMwEQYDVQQKDApmaXNjby1iY29zMQ0wCwYDVQQLDARub2RlMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE9CwTicQwi5Gx1gckJ0ibZbcIoL13IHyLK7z4xuzkAi+PbgI9M3vKDuMzZ73IFKCYOwzfhvqM8ksFonpBZqT0NqMaMBgwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwDQYJKoZIhvcNAQELBQADggEBAIv+PE8bQlxxVDxfUlevf3jJeaK97U5tmP8Tx1pesblzcMWTC8OxfUtYP0zy4CQL0zo6OjmSn4FYvTyDUSVqj5BXXDXiZQwtWxnPgLD75tqSTlFcR2jB+amhmzWQ7mXgfepvL+RV+1OL8WXJy7Xl01fL0nCwHaWCCwaBg+KnUgbc9YXhhyH8X8aqDDpjz9oYpZcbLITGI0V8lvr1EU3NII6LudgGp/xNolQDBOYZX1E0XtUwMUp6Az2xbmSH/7S3sXJCwgHZrtoiKkcFLbss1TDk/UdUya4n/dz4BcH3OzR2MvMHenA8kh4yaofJNsJeXFqPHAbI5+yUVK2+VK2hI0o=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIDPTCCAiWgAwIBAgIJAKUGxOHHqV05MA0GCSqGSIb3DQEBCwUAMDUxDjAMBgNVBAMMBWNoYWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjAeFw0xOTA5MDUwNzI2MTJaFw0yOTA5MDIwNzI2MTJaMDUxDjAMBgNVBAMMBWNoYWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM9LlTwIAKp36uB8sjoai2O3R+3KPMN9xAt8/k5+B943CUPF/RDxZ8/7Q2v6Z+t+1v3Dc81aszMr/8YyyCQWh0I3EdWyInsocZ2pBkjymetyE5VOSd+p7I8qc9PpHJKZjy2M9J5bePVjHJxleHP2u6I4QctjZoE8PJnZYT5Q0On0MJATpY856vHbF3Amvxj9dmeLKjF62T/KtyDKlyPTETXOFGMiLerWusXZxFgj0K0xhuXaNkbJI6AdhQnywgn755ugfBDzi24rfsk/BkUf5DVitfWePh4C7zaCZIeTTr8whV3twE2BTv4LENdidxCVUHN1JBvZNGyHaH4gIbwtsZcCAwEAAaNQME4wHQYDVR0OBBYEFNTCWbm1EzCYIXyoF7j3l6IXX3BoMB8GA1UdIwQYMBaAFNTCWbm1EzCYIXyoF7j3l6IXX3BoMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAIjYTyxP5ikaGYdwYzQZdF4aqx+7UL3Wo/6LNJa8w2m+pAvC3ILIBcvpDe6lH3cMOz2HwCzFkKlT8Ji1HwsKPywx/9fmO60RvEoPIBanziqONLb8HDUT0QHz3jgCTj46URM6hXIEhFwg4KekpzvqaLPRHHtoCrcebUAmySOlNvlwkSnxJnufp0zFpdNu+kSl1/r21ZRMeu/hNaUb1gOzP06NOB7NodOQ5MR7ItVXyN9rl3fABP3rUFIJ+Z11WmSldaCRCQMlEOkdD8LGFYVj4Q5fx06hcJlPd2arnxALWrZUl2cs+K+MW9qQUUKAQ+7FirdRRk6ZfZtlpHMdlTfAVWA=\n-----END CERTIFICATE-----\n"
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data String 成功保存证书的个数或错误信息

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": 2
}
  • 失败:
{
    "code": 202060,
    "message": "cert handle error",
    "data": "Could not parse certificate: java.io.IOException: Empty input"
}
14.4 删除证书接口

根据证书指纹删除一个证书

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /cert
  • 请求方式:DELETE
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 fingerPrint String 证书指纹,证书的唯一标识

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/cert
{
    "fingerPrint": "F588C511F5471860120F7BE8127DE026ADD8378C"
}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data String 成功删除证书的个数或错误信息

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": 1
}
14.5. 获取明文SDK证书与私钥

获取Front使用的sdk证书(包含链证书、sdk证书和sdk私钥)的内容

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /cert/sdk//{frontId}
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 frontId Int 前置编号

2)数据格式

http://localhost:5001/WeBASE-Node-Manager/cert/sdk/1
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 Map Map key为文件名,value为文件内容

1)数据格式

a、成功:

{
  "sdk.key": "-----BEGIN PRIVATE KEY-----\nMIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgxqr/d/VgQ0fAr/KvyAeW\nJ6bD1tqxZ5gYOdfIJiK7WOmhRANCAAT3g/OsuSAD2I/dKLWnZTbMGQ8l9WnkD/wr\npyoiQkMy1qI5/3Sj4WFKGcVu9vhsd0nLoP+y1QttYKM0m5QGcuhP\n-----END PRIVATE KEY-----\n",
  "ca.crt": "-----BEGIN CERTIFICATE-----\nMIIBsDCCAVagAwIBAgIJAPwQ7ISyofOIMAoGCCqGSM49BAMCMDUxDjAMBgNVBAMM\nBWNoYWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjAgFw0y\nMTA0MDYxMjMwNDBaGA8yMTIxMDMxMzEyMzA0MFowNTEOMAwGA1UEAwwFY2hhaW4x\nEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsMBWNoYWluMFYwEAYHKoZIzj0C\nAQYFK4EEAAoDQgAE6UcrK7ukGBVvBmWYwgIloM38ibqtxF2zBnM9zgU4bujjJU1Y\nCZsHGKVGuNstSOZYfYulnTtFUoHhUEyhddvql6NQME4wHQYDVR0OBBYEFBBSyZi8\nk/Hz/Q2SAin5bMnE1nOFMB8GA1UdIwQYMBaAFBBSyZi8k/Hz/Q2SAin5bMnE1nOF\nMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgEpuPZypVImOtDty9p50X\njeD4wdgzHXpd3CDPui4CnZYCIQC4n+r97cCB51dPb+WjDNV5C18S2uI8LlNVj+xL\ndSweAg==\n-----END CERTIFICATE-----\n",
  "sdk.crt": "-----BEGIN CERTIFICATE-----\nMIIBeDCCAR+gAwIBAgIJAJoEtSMUsa8HMAoGCCqGSM49BAMCMDgxEDAOBgNVBAMM\nB2FnZW5jeUExEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5jeTAg\nFw0yMTA0MDYxMjMwNDBaGA8yMTIxMDMxMzEyMzA0MFowMTEMMAoGA1UEAwwDc2Rr\nMRMwEQYDVQQKDApmaXNjby1iY29zMQwwCgYDVQQLDANzZGswVjAQBgcqhkjOPQIB\nBgUrgQQACgNCAAT3g/OsuSAD2I/dKLWnZTbMGQ8l9WnkD/wrpyoiQkMy1qI5/3Sj\n4WFKGcVu9vhsd0nLoP+y1QttYKM0m5QGcuhPoxowGDAJBgNVHRMEAjAAMAsGA1Ud\nDwQEAwIF4DAKBggqhkjOPQQDAgNHADBEAiANbeRFiiS6mH+vcAOwV3wXd9YW/B2a\n+vrHMm6NwtliRAIgRH4gSF0XLmpVOEO21bJFDGWm9siIX0cnj0R3kNGZcB4=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIBcTCCARegAwIBAgIJANrOZ+FrVNpIMAoGCCqGSM49BAMCMDUxDjAMBgNVBAMM\nBWNoYWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjAeFw0y\nMTA0MDYxMjMwNDBaFw0zMTA0MDQxMjMwNDBaMDgxEDAOBgNVBAMMB2FnZW5jeUEx\nEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5jeTBWMBAGByqGSM49\nAgEGBSuBBAAKA0IABIqMDvvzvTq8WW1UtJrnnsifw9/OrPsMc9CrrYBsWdwOGhdx\nfNTJA1ss+vngjrhAmWHczvbh+E1WOlDGzpCumeqjEDAOMAwGA1UdEwQFMAMBAf8w\nCgYIKoZIzj0EAwIDSAAwRQIhALsAbAQ9BDeofk4VYzYx2ZAHB1HviDp9ndvXAkLN\nsfHZAiAjViK97dDr3gxP/qHg0e8BG9ptEv7Do8caOPj33F+yOQ==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIBsDCCAVagAwIBAgIJAPwQ7ISyofOIMAoGCCqGSM49BAMCMDUxDjAMBgNVBAMM\nBWNoYWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjAgFw0y\nMTA0MDYxMjMwNDBaGA8yMTIxMDMxMzEyMzA0MFowNTEOMAwGA1UEAwwFY2hhaW4x\nEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsMBWNoYWluMFYwEAYHKoZIzj0C\nAQYFK4EEAAoDQgAE6UcrK7ukGBVvBmWYwgIloM38ibqtxF2zBnM9zgU4bujjJU1Y\nCZsHGKVGuNstSOZYfYulnTtFUoHhUEyhddvql6NQME4wHQYDVR0OBBYEFBBSyZi8\nk/Hz/Q2SAin5bMnE1nOFMB8GA1UdIwQYMBaAFBBSyZi8k/Hz/Q2SAin5bMnE1nOF\nMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgEpuPZypVImOtDty9p50X\njeD4wdgzHXpd3CDPui4CnZYCIQC4n+r97cCB51dPb+WjDNV5C18S2uI8LlNVj+xL\ndSweAg==\n-----END CERTIFICATE-----\n"
}
14.6. 获取SDK证书与私钥压缩包

获取Front使用的sdk证书(包含链证书、sdk证书和sdk私钥)的zip压缩包

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /cert/sdk/zip/{frontId}
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 frontId Int 前置编号

2)数据格式

http://localhost:5001/WeBASE-Node-Manager/cert/sdk/zip/1
响应参数

1)参数表

序号 中文 参数名 类型 必填 说明
1 文件名 ResponseEntity.header String 文件名在header中
2 文件流 body InputStream 文件的流在body中

1)数据格式

a、成功:

headers:  content-disposition: attachment;filename*=UTF-8''conf.zip 

{
    // 二进制流
}

15 订阅事件管理

15.1 获取已订阅的出块事件列表

获取所有前置中已订阅的节点出块事件列表

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /event/newBlockEvent/list/{groupId}
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组编号
2 pageNumber Integer 页码,从1开始
3 pageSize Integer 页容量

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/event/newBlockEvent/list/{groupId}/{pageNumber}/{pageSize}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Integer 返回码,0:成功 其它:失败
2 message String 描述
3 data List newBlockEvent info
3.1 frontInfo String 前置对应IP
3.1 id String 订阅信息的id
3.1 eventType Integer 事件通知类型,1: newBlockEvent, 2: contractEvent, 3: others
3.1 appId String 事件通知对应的应用Id
3.1 groupId Integer 群组编号
3.1 exchangeName String exchange名
3.1 queueName String 队列名
3.1 routingKey String 路由键值
3.1 createTime String 订阅信息创建时间
4 totalCount Integer 1: 国密,0:非国密

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": [
        {
            "frontInfo": "127.0.0.1",
            "id": "8aba82b570f22a750170f22bcab90000",
            "eventType": 1,
            "appId": "app2",
            "groupId": 1,
            "exchangeName": "group001",
            "queueName": "user1",
            "routingKey": "app2_block_b63",
            "createTime": "2020-03-19 17:42:01"
        }
    ],
    "totalCount": 1
}
15.2 获取已订阅的合约Event事件列表

获取所有前置中已订阅的合约Event事件列表

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /event/contractEvent/list/{groupId}
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId String 群组编号
2 pageNumber Integer 页码,从1开始
3 pageSize Integer 页容量

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/event/contractEvent/list/{groupId}/{pageNumber}/{pageSize}
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Integer 返回码,0:成功 其它:失败
2 message String 描述
3 data List newBlockEvent info
3.1 frontInfo String 前置对应IP
3.1 id String 订阅信息的id
3.1 eventType Integer 事件通知类型,1: newBlockEvent, 2: contractEvent, 3: others
3.1 appId String 事件通知对应的应用Id
3.1 groupId Integer 群组编号
3.1 exchangeName String exchange名
3.1 queueName String 队列名
3.1 routingKey String 路由键值
3.1 createTime String 起始区块范围
3.1 fromBlock String 末区块范围
3.1 toBlock String 订阅信息创建时间
3.1 contractAddress String 订阅的合约地址
3.1 contractAbi String 对应合约ABI
3.1 topicList String 订阅的合约Event
4 totalCount Integer 1: 国密,0:非国密

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": [
        {
            "frontInfo": "127.0.0.1",
            "id": "8aba82b5708095af01708095e4f70001",
            "eventType": 2,
            "appId": "app1",
            "groupId": 1,
            "exchangeName": "group001",
            "queueName": "user1",
            "routingKey": "user1_event_app1",
            "fromBlock": "latest",
            "toBlock": "latest",
            "contractAddress": "0x657201d59ec41d1dc278a67916f751f86ca672f7",
            "contractAbi": "[{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"SetName\",\"type\":\"event\"}]",
            "topicList": "SetName(string)",
            "createTime": "2020-02-26 16:21:12"
        }
    ],
    "totalCount": 1
}
15.3. 获取历史区块EventLog
接口描述

同步获取历史区块中的EventLog

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /event/eventLogs/list
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约地址 contractAddress String 已部署合约
3 合约ABI contractAbi List
2 Topic参数 topics EventTopicParam EventTopicParam包含{String eventName,IndexedParamType indexed1,IndexedParamType indexed2,IndexedParamType indexed3},其中IndexedParamType包含{String type,String value}。eventName为包含参数类型的event名,如SetEvent(uint256,string),IndexedParamType中type为indexed参数的类型,value为eventlog需要过滤的参数值
2 开始区块 fromBlock Integer 始块高
2 末区块 toBlock Integer 末块高

2)数据格式

http://localhost:5001/WeBASE-Node-Manager/event/eventLogs/list
{
    "groupId": "group",
    "contractAbi": [],
    "contractAddress": "0x19fb54101fef551187d3a79ea1c87de8d0ce754e",
    "fromBlock": 1,
    "toBlock": 1,
    "topics": {
        "eventName": "SetName",
        "indexed1": {
            "type": "bool",
            "value": true
        },
        "indexed2": {
            "type": "string",
            "value": null
        }
    }
}
响应参数

1)数据格式

成功:

{
	"code": 0,
	"message": "success",
	"data": [{
		"log": {
			"logIndex": 0,
			"transactionIndex": 0,
			"transactionHash": "0x67c8d9a1bc62586b9feb0c8b1127bf0030f649771db3e3d0d99cd99209851ed8",
			"blockHash": "0x0ca880c70a3f24dc5e6052cca4dbb50d9aa0ec973474e07d82e2f5281c54e582",
			"blockNumber": 71,
			"address": "0xd5d4fcf2a46831510f095bfb447bc945f99309f7",
			"data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000033132330000000000000000000000000000000000000000000000000000000000",
			"topics": ["0x4df9dcd34ae35f40f2c756fd8ac83210ed0b76d065543ee73d868aec7c7fcf02"]
		}, // `org.fisco.bcos.sdk.model.EventLog`,可参考java sdk
		"data": ["123"]
	}, {
		"log": {
			"logIndex": 0,
			"transactionIndex": 0,
			"transactionHash": "0x7c27078b372cee951dd102edcbbeab6b3b799212e4337d6bfac7f723e487a1fb",
			"blockHash": "0x47f8456a656f226d5a4a7206790ae864ae4fb645bca625b87cf0378ecca7e742",
			"blockNumber": 72,
			"address": "0xd5d4fcf2a46831510f095bfb447bc945f99309f7",
			"data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000033333330000000000000000000000000000000000000000000000000000000000",
			"topics": ["0x4df9dcd34ae35f40f2c756fd8ac83210ed0b76d065543ee73d868aec7c7fcf02"]
		},
		"data": ["333"]
	}],
	"totalCount": 1
}
15.4. 获取ABI与合约所有合约信息
接口描述

获取导入的ABI与IDE中已部署合约所有合约的地址、合约名字信息

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/event/listAddress/{groupId}
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String

2)数据格式

http://127.0.0.1:5001/WeBASE-Node-Manager/event/listAddress/{groupId}
响应参数

1)数据格式

成功:

{
    "code": 0,
    "message": "success",
    "data": [{
        "type": "contract",
        "contractAddress": "0x88156d500422a542435616e5a1e9d2df44c7fc70",
        "contractName": "Hello3"
    }, {
        "type": "contract",
        "contractAddress": "0xc2b3b552258b6016f80a070c1aa91bf9e3c48c53",
        "contractName": "Hello3"
    }, {
        "type": "abi",
        "contractAddress": "0x7a754bb46418c93b4cec7dcc6fef0676ae6a1e32",
        "contractName": "Hello3"
    }]
}
15.5. 根据地址获取ABI与合约的合约信息
接口描述

根据合约地址、合约类型(abicontract)获取导入的ABI与IDE中已部署合约的合约地址、合约名字信息

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址:/event/contractInfo/{groupId}/{type}/{contractAddress}
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 所属群组 groupId String
2 合约类型 type String 包含contract(IDE部署)和abi(ABI管理导入)两种类型
3 合约地址 contractAddress String

2)数据格式

http://127.0.0.1:5001/WeBASE-Node-Manager/event/contractInfo/{groupId}/{type}/{contractAddress}
响应参数

1)数据格式

成功:

{
    "code": 0,
    "message": "success",
    "data": {
        "abiId": 1,
        "groupId": "group",
        "contractName": "Hello3",
        "contractAddress": "0x7a754bb46418c93b4cec7dcc6fef0676ae6a1e32",
        "contractAbi": "",
        "contractBin": "",
        "createTime": "2020-11-06 15:12:51",
        "modifyTime": "2020-11-06 15:12:51"
    }
}

16 配置接口

16.1 查询是否使用国密

获取WeBASE-Node-Manager是否使用国密版

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /config/encrypt
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/config/encrypt
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data Int 1: 国密,0:非国密

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": 1 
}
16.2 查询WeBASE-Node-Manager的版本

获取WeBASE-Node-Manager服务的版本号

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /config/version
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/config/version
返回参数

1)出参表

序号 输出参数 类型 备注
1 - String 版本号

2)出参示例

  • 成功:
v1.4.0
16.3 获取服务ip和端口

返回本服务ip和端口。

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /config/ipPort
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/config/ipPort
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data Object 信息对象
3.1 ip string 服务IP
3.2 port int 服务端口

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": {
        "ip": "127.0.0.1",
        "port": 5001
    },
    "attachment": null
}
  • 失败:
{
    "code": 102000,
    "message": "system exception",
    "data": {}
}
16.4 查询已部署合约是否支持修改
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /config/isDeployedModifyEnable
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/config/isDeployedModifyEnable
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data boolean true: 支持,false:不支持

2)出参示例

  • 成功:
{
    "code": 0,
    "message": "success",
    "data": true 
}
16.5 获取配置列表

查询后台保存的配置列表

传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /config/list
  • 请求方式:POST
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 type Integer 获取配置类型。1:Docker 镜像列表

2)入参示例

http://127.0.0.1:5001/WeBASE-Node-Manager/config/list?type=1
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Integer 返回码,0:成功;其它:失败
2 message String 描述
3 data List 镜像列表 |
3.1 id Integer 镜像编号
3.1 configName String 配置名称
3.1 configType Integer 配置类型,1: Docker 镜像列表
3.1 configValue String 镜像版本
3.1 createTime Long 创建时间
3.1 modifyTime Long 修改时间

2)出参示例

  • 成功:
{
  "code": 0,
  "message": "success",
  "data": [
    {
      "id": 1,
      "configName": "docker 镜像版本",
      "configType": 1,
      "configValue": "v2.5.0",
      "createTime": 1590577419000,
      "modifyTime": 1590577419000
    }
  ]
}

17. 链上全量数据接口

17.1 查询链上全量私钥用户列表
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /external/account/list/all/{groupId}/{pageNumber}/{pageSize}
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId string 群组id
2 pageNumber int 页码
3 pageSize int 页大小
4 account int 所属用户(已登记私钥)
5 type int 1-全量,2-本地已登记,3-本地未登记,默认为1
6 address string 搜索用户地址

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/external/account/list/all/1/1/10
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 data object 返回信息实体(成功时不为空)
3.1 userId int 用户编号(若仅存于链上则为null)
3.2 userName string 用户名称
3.3 groupId int 所属群组编号
3.4 description String 备注
3.5 userStatus int 状态(1-正常 2-停用) 默认1
3.6 publicKey String 公钥信息
3.7 address String 在链上位置的hash
3.8 hasPk Int 是否拥有私钥信息(1-拥有,2-不拥有)
3.9 account string 关联账户
3.10 createTime LocalDateTime 创建时间
3.11 modifyTime LocalDateTime 修改时间
3.12 extAccountId int 链上用户编号
3.13 transCount int 用户交易量
3.14 hashs String 用户交易hash(5个)
3.14 signUserId String 用户的sign用户编号

2)出参示例

  • 成功:
{
	"code": 0,
	"message": "success",
	"data": [{
		"userId": null,
		"userName": null,
		"account": null,
		"groupId": 1,
		"publicKey": null,
		"privateKey": null,
		"userStatus": null,
		"chainIndex": null,
		"userType": null,
		"address": "0x11523906f9c6d4bbf2bf7ab2ff1049e7bdf2fbf6",
		"signUserId": null,
		"appId": null,
		"hasPk": null,
		"description": null,
		"createTime": "2021-04-07 16:34:42",
		"modifyTime": "2021-04-07 16:34:42",
		"extAccountId": 4,
		"transCount": 1,
		"hashs": "0x6889e8ea793d6326026b2a32bab023183ccc7846d3bcb9bd1001e1f08fb892c5"
	},{
		"userId": 700001,
		"userName": "2222",
		"account": "mars",
		"groupId": 1,
		"publicKey": "04299feb42f324521464c9503220efaeaae99093d92ef08e6f9c1f76e761c2a57422c5fe4dc721e049dfdc05ff8e9b64f59471235ad5e5f4fc07e653f2cd22314e",
		"privateKey": null,
		"userStatus": 1,
		"chainIndex": null,
		"userType": 1,
		"address": "0x6bc1eeb7d1bb3f1d8195336843bd938d51e594ee",
		"signUserId": "0c01b17d67734e95b1e8d5c55e78b4d8",
		"appId": "1",
		"hasPk": 1,
		"description": "",
		"createTime": "2021-04-06 21:14:04",
		"modifyTime": "2021-04-06 21:14:04",
		"extAccountId": 1,
		"transCount": null,
		"hashs": null
	}],
	"totalCount": 2
}
17.2 查询链上全量合约列表
传输协议规范
  • 网络传输协议:使用HTTP协议
  • 请求地址: /external/contract/list/all/{groupId}/{pageNumber}/{pageSize}?type={type}
  • 请求方式:GET
  • 请求头:Content-type: application/json
  • 返回格式:JSON
请求参数

1)入参表

序号 输入参数 类型 必填 备注
1 groupId string 群组id
2 pageNumber int 页码
3 pageSize int 页大小
4 account int 所属用户(已登记私钥)
5 type int 1-全量,2-本地已登记,3-本地未登记,默认为1
6 contractAddress string 搜索合约地址

2)入参示例

http://localhost:5001/WeBASE-Node-Manager/external/contract/list/all/1/1/10?type=1
返回参数

1)出参表

序号 输出参数 类型 备注
1 code Int 返回码,0:成功 其它:失败
2 message String 描述
3 Object 返回信息实体
3.1 abiId int 合约编号(若未登记,则为空)
3.2 contractName String 合约名称
3.3 groupId Int 所属群组编号
3.4 contractAddress String 合约地址
3.5 contractAbi String 导入的abi文件内容
3.6 contractBin String 合约runtime-bytecode(runtime-bin)
3.7 account String 所属账号
3.8 createTime LocalDateTime 创建时间
3.9 modifyTime LocalDateTime 修改时间
3.10 extContractId int 链上合约编号
3.11 transCount int 合约交易量
3.12 hashs String 合约交易hash(5个)
3.13 deployTxHash String 部署合约的交易hash
3.14 deployAddress String 部署合约的用户地址
3.15 deployTime Date 合约的部署时间

2)出参示例

  • 成功:
{
	"code": 0,
	"message": "success",
	"data": [{
		"abiId": 6,
		"groupId": 1,
		"account": "admin",
		"contractName": "SpecificIssuerController",
		"contractAddress": "0xce1d576181e1d68899a3f2b86c8e274657c07fea",
		"contractAbi": "[{\"constant\":false,\"inputs\":[{\"name\":\"typeName\",\"type\":\"bytes32\"},{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"addIssuer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"typeName\",\"type\":\"bytes32\"},{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isSpecificTypeIssuer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"typeName\",\"type\":\"bytes32\"},{\"name\":\"extraValue\",\"type\":\"bytes32\"}],\"name\":\"addExtraValue\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"typeName\",\"type\":\"bytes32\"}],\"name\":\"registerIssuerType\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"typeName\",\"type\":\"bytes32\"}],\"name\":\"getExtraValue\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"typeName\",\"type\":\"bytes32\"}],\"name\":\"isIssuerTypeExist\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"typeName\",\"type\":\"bytes32\"},{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"removeIssuer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"typeName\",\"type\":\"bytes32\"},{\"name\":\"startPos\",\"type\":\"uint256\"},{\"name\":\"num\",\"type\":\"uint256\"}],\"name\":\"getSpecificTypeIssuerList\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"specificIssuerDataAddress\",\"type\":\"address\"},{\"name\":\"roleControllerAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"operation\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"retCode\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"typeName\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"SpecificIssuerRetLog\",\"type\":\"event\"}]",
		"contractBin": "",
		"createTime": "2021-04-06 21:34:38",
		"modifyTime": "2021-04-06 21:34:38",
		"extContractId": 800014,
		"deployAddress": "0x222d68876bed5a33c8efe04c6fc9783031c22cd1",
		"deployTxHash": "0xd04b35d7741f0568546de4fc29a880fa0f3727beef544497ca5816fa8793fa13",
		"deployTime": 1617716070000,
		"transCount": 0,
		"hashs": null
	},{
		"abiId": null,
		"groupId": 1,
		"account": null,
		"contractName": null,
		"contractAddress": "0x5e103407b2a06b32bad0fc578e1888036a3e26a8",
		"contractAbi": null,
		"contractBin": "",
		"createTime": null,
		"modifyTime": null,
		"extContractId": 800007,
		"deployAddress": "0x222d68876bed5a33c8efe04c6fc9783031c22cd1",
		"deployTxHash": "0x4c6f026e72b69e9ed1f3685f24bc055f5ef1bdde4778ee684a96d25deba6b34b",
		"deployTime": 1617716065000,
		"transCount": 1,
		"hashs": "0x4c6f026e72b69e9ed1f3685f24bc055f5ef1bdde4778ee684a96d25deba6b34b"
	}],
	"totalCount": 2
}

附录

1. 返回码信息列表

X01XXX为WeBASE-Front节点前置错误码X02XXX为WeBASE-Node-Manager节点管理服务错误码,X03XXX为WeBASE-Sign签名服务错误码

code message 描述
0 success 成功
102001 system error 系统异常
102002 system exception: please check front 系统异常,请检查前置状态
102003 No group belongs to this groupId(node not belongs to this group) 当前节点不属于当前群组
202000 invalid front id 不正确的前置ID(添加节点前置失败)
202001 database exception 数据库异常
202002 not found any front for this group 找不到此群组的任何前置
202003 not support this ip 不支持该ip
202004 front already exists 前置已经存在
202005 group id cannot be empty 群组不能为空
202006 invalid group id 无效的网络编号
202007 checkCode is null 校验码为空
202008 invalid checkCode 无效的校验码
202009 save front fail 保存前置失败
202010 request front fail 请求前置失败
202011 abiInfo cannot be empty abi信息不能为空
202012 user id cannot be empty 用户编号不能为空
202013 invalid user 无效的用户编号
202014 user already exists 用户信息已经存在
202015 contract already exists 合约信息已经存在
202017 invalid contract id 无效的合约编号
202018 invalid param info 无效的入参信息
202019 contract name cannot be repeated 合约名称不能重复
202020 deployed contract cannot be modified 已部署合约不支持修改
202023 contract has not deploy 合约尚未部署
202026 account info already exists 该帐号已经存在
202027 account info not exists 该帐号不存在
202028 account name empty 帐号名称不能为空
202029 invalid account name 无效的账号名称
202030 password error 密码错误
202031 role id cannot be empty 角色编号不能为空
202032 invalid role id 无效的角色编号
202033 invalid contract address 无效的合约地址
202034 login fail 登录失败
202035 contract has been deployed 该合约已经部署
202036 publicKey cannot be empty 公钥不能为空
202037 associated account cannot be empty 关联账号不能为空
202040 contract deploy not success 合约部署失败
202045 the new password cannot be same as old 新旧密码不能一致
202050 publicKey's length is 130,address's length is 42 公钥长度为130,公钥地址长度为42
202051 wrong host or port 错误的主机或端口
202052 invalid token 无效的token
202053 token expire token过期
202054 Available front url is empty, check front status 合约尚未部署
202060 cert handle error 证书句柄错误
202061 store cert error 存储证书错误
202062 cert format error, must start with -----BEGIN CERTIFICATE-----\n, end with end 证书格式错误,必须由 --BEGIN CERTIFICATE-- 包
202063 saving front's cert error 保存前置证书错误
202070 Mail server config error 邮件服务器配置错误。
202071 Mail server config param empty/not match 邮件服务器配置参数为空/不匹配
202072 Mail server config error, db's server config is empty 邮件服务器配置错误,数据库的服务器配置为空
202076 Alert rule error 警报规则错误。
202077 Alert rule param not match 警报规则参数不匹配。
202080 Send mail error, please check mail server configuration 发送邮件错误,请检查邮件服务器配置。
202081 Send mail error, please enable mail server before send 发送邮件错误,请在发送前启用邮件服务器。
202086 Alert log error 警报日志错误。
202087 Alert log param: status/logId is empty 警报日志参数:status/logId为空。
202090 Update guomi methodId error 更新国密methodId错误
202091 Front's encrypt type not matches with nodemgr Front的加密类型与nodemgr不匹配
202096 contract address already exists 合约地址已存在
202097 abi info of this id not exists 此ID的ABI信息不存在
202098 Contract abi invalid, please check abi 合约ABI无效,请检查ABI
202099 Abi Id cannot be empty 此ID的ABI信息为空
202100 contractAddress is null 合约地址为空
202110 User's signUserId not exist 用户的signUserId不存在
202111 Fail to parse json 解析json错误
202121 Cert file not found, please check cert path in config 找不到证书文件,请检查配置中的证书路径
202122 Pem file format error, must surrounded by -----XXXXX PRIVATE KEY----- Pem文件格式错误,必须包含-----XXXXX PRIVATE KEY-----
202123 Pem file content error Pem文件内容错误
202124 p12's password cannot be chinese P12的密码不能为中文
202125 p12's password not match P12的密码错误
202126 P12 file content error P12文件内容错误
202300 Group id already exists 群组id已存在
202301 Node's front not exists 节点前置不存在
202310 govern vote record not exist 投票记录不存在
202311 permission denied on chain 链上权限被禁止
202321 path contains deployed contract, please delete one by one 路径中包含已部署的合约,请逐个删除未部署的合约
202322 contract path cannot be blank(use "/" instead) 合约地址不能为空(默认请使用"/")
202323 privateKey decode fail 私钥解码失败
202324 password decode fail 密码/授权码解码失败
202401 No configured of docker registry url. 没有配置 Docker 镜像更新 URL 地址
202402 Fetch image tag from docker registry error. 从 Docker 源更新镜像版本失败
202403 Fetch Docker image tag list error, unknown config type. 查询 Docker 镜像版本失败(未知类型)
202404 Save chain's configuration to file error. 保存链配置信息文件失败
202405 Docker image tag invalid. 错误的镜像版本
202406 Configuration of host is empty. 主机配置参数为空
202407 Chain exists, deploy failed. 链已存在,部署失败
202408 Save chain data to DB error. 插入链信息到数据库失败
202409 Chain root dir exist, please move it manually. 主机节点的链安装目录(default_chains)已存在,请手动移除
202410 Execute build_chain.sh script error. 执行 build_chain.sh 链生成脚本失败
202411 Host, agency, group configuration error. 主机,机构,群组配置信息错误
202412 Host ip and num error. 主机 IP,节点数量配置错误
202413 Agency name invalid, only [a-zA-Z0-9_] is valid. 机构名称格式错误,只能包含大小写字母,数字,下划线
202414 Group id error, only positive integer is valid. 群组编号格式错误,必须为正整数
202415 Login to host /ip/ through SSH error. Please check SSH configuration. SSH登录主机/ip/失败,请检查 SSH 配置
202416 Save agency data into DB error. 插入新机构信息到数据库失败
202417 Save group data into DB error. 插入新群组信息到数据库失败
202418 Save host data into DB error. 插入主机信息到数据库失败
202419 Save front data into DB error. 插入前置信息到数据库失败
202420 Save node data into DB error. 插入节点信息到数据库失败
202421 Save node and front mapping data into DB error. 插入前置和群组映射关系到数据库失败
202422 Parse node index from directory error. 从目录获取节点序号失败
202423 A single host IP only belongs to one agency. 一个 IP 主机,只能属于一个机构
202424 Unknown error during deploying. 部署时发生未知错误
202425 SSH login through username and password is unsupported yet. 不支持使用 SSH 密码登录主机
202426 Chain has no agency. 当前链没有所属机构
202427 No deployed chain 链不存在
202428 IP format error. IP 格式错误
202429 Agency name cannot be blank when IP is new. 主机 IP 是新 IP 时,机构名称不能为空
202430 Agency name already exists. 存在同名机构
202431 Add new node error. 新增节点错误
202432 No valid chain certification. 链证书无效
202433 Generate agency private key and crt file error. 生成机构私钥和证书失败
202434 Host without agency error." 主机所属机构为空
202435 Node num should be positive integer, and less then 10. 主机数量格式错误,正整数,并且小于 10
202436 Generate sdk 生成主机 SDK 私钥和证书失败
202437 Generate node private key and crt files error. 生成新节点私钥和证书失败
202438 Copy SDK files error. 拷贝 SDK 证书和私钥失败
202439 Upload SDK files error. 上传 SDK 证书和私钥失败
202440 Upload node config files error. 上传节点证书和私钥失败
202441 Copy group config files from original node error. 从旧节点复制群组配置文件失败
202442 Delete tmp directory of agency error. 删除机构临时目录失败
202443 Delete tmp directory of SDK error. 删除 SDK 临时目录失败
202444 Delete tmp directory of node error. 删除节点临时目录失败
202445 Unknown nodeid. 未知节点编号(nodeid)
202446 Stop node error. 停止节点失败(停止容器)
202447 Start node error. 启动节点失败(启动容器)
202448 Both new image tag and old are the same. 链升级的新版本和链的现有版本相同
202449 Upgrade chain to new image tag error. 链升级失败
202450 Delete node failed, node is still in group. 节点仍属于群组,删除失败
202451 Parse node's config files error. 读取节点配置文件失败
202452 Delete node's config error. 删除节点配置文件失败
202453 Stop node before deleting. 节点正在运行,删除失败,请先停止节点
202454 Update p2p part of related nodes error. 更新关联节点 P2P 配置失败
202455 Delete chain error. 删除链失败
202456 Node is still a sealer or observer, delete failed. 节点处于观察或共识状态,删除失败
202457 Fetch node list from host's configuration files 从主机配置文件获取节点列表失败
202458 Generate application.yml for front error 生成前置 application.yml 配置文件失败
202459 Init host with shell script error. 通过脚本初始化主机失败
202460 Sync files error. 传输文件失败
202461 Control container through Docker api error. Docker 容器操作失败
202462 Two nodes at least. 至少两个节点。
202463 Group need two sealers at least. 群组至少需要两个共识节点。
202464 WebaseSignAddess configuration error in Application.yml application.yml中的webaseSignAddess配置错误
202465 webaseSignAddress cannot be 127.0.0.1 or localhost in application.yml file sign的地址不能为127.0.0.1或localhost
202466 Please pull the Docker image manually in host /ip/ 主机/ip/请手动拉取 Docker 镜像
202467 Max 4 nodes on a single host 单个主机最多部署 4 个节点
202468 Host of WeBASE-Node-Manager's ip is already existed. WeBASE-Node-Manager所在主机的IP已存在
202469 Check docker installed and running of host 检测主机Docker已安装且已启动未通过
202470 Check host memory not enough for nodes(s) 检测主机安装节点所需空余内存未通过
202471 Check host cpu core count not enough for node(s) 检测主机安装节点所需CPU核核心数未通过
202472 Host check had been interrupt 主机检测过程被中断
202473 Host check fail for inpurt param 主机检测入参错误
202475 Fail to generate chain and front config locally 本地生成链与前置配置失败
202476 Not all host init success 部分主机在检测时未通过
202477 Ipconf's node port config error Ipconf入参格式中节点端口格式错误
202478 Ipconf not match with deploy info list Ipconf与主机节点信息不匹配
202479 Delete host fail for host contains node(front) 无法删除主机,主机中仍包含节点
202480 Ansible not installed! Node-Manager所在主机未安装Ansible
202481 Ansible fetch not support fetch directory Ansible不支持Fetch目录
202482 Ansible ping cannot reach target ip Ansible无法ping连通目标IP
202483 Ansible init host of image and scp config not all success 主机初始化镜像与传输配置未全部成功
202484 Ansible pull docker hub fail Ansible拉取Docker hub镜像失败
202485 Ansible pull docker cdn fail Ansible拉取CDN镜像失败
202486 Ansible run docker command fail Ansible执行Docker命令失败
202487 Ansible exec command error Ansible执行命令失败
202488 Ansible exec scp(copy) error Ansible执行scp复制到远端失败
202489 Ansible exec scp(fetch) error Ansible执行scp拉取文件失败
202491 Ansible check image exist error for param Ansible检测Docker镜像存在的入参错误
202492 Ansible check docker container exist error for param Ansible检测Docker容器存在的入参错误
202493 Check host not pass, please check host remark 检测主机未通过,请通过主机的remark查看错误信息
202494 Check host port is in use, please check host remark 主机的端口已被占用,请通过主机的remark查看错误信息
202495 Host already exist 主机已存在
202496 Host root dir access denied 主机的安装目录无权限访问
202497 Host not exist or already been deleted 主机不存在或已被删除
202501 contract path is exists. 合约路径已存在
202502 version cannot be empty 版本不能为空
202503 cns name cannot be empty cns名不能为空
202504 version already exists 版本已存在
202511 Front's sdk cert and key not found 未找到前置的SDK证书与私钥
202512 Write front's sdk cert and key fail 导出SDK证书私钥文件失败,无法写入文件
202513 Write private key file fail 导出私钥文件失败,无法写入文件
202514 group genesis conf not found 群组的创世块文件不存在,无法添加为共识节点
202516 app name exists 应用名称已存在
202517 app name not exists 应用名称不存在
202518 app id not exists 应用编号不存在
202519 link format invalid 链接格式错误
202534 contract path not exists 合约路径不存在
302000 user not logged in 未登录的用户
302001 Access denied 没有权限
402000 param exception 参数错误
2. Precompiled Service说明

对预编译合约接口的使用有疑惑,可以查看FISCO BCOS的PreCompiledService API说明

查看预编译合约的solidity接口代码,可以查看FISCO BCOS的web3sdk precompile模块,如crud/TableFactory.sol:

pragma solidity ^0.4.2;

contract TableFactory {
    function createTable(string tableName, string key, string valueField) public returns (int);
}

查看FISCO BCOS中实现的precompild合约列表、地址分配及源码:

地址 功能 源码(libprecompiled目录)
0x1000 系统参数管理 SystemConfigPrecompiled.cpp
0x1001 表工厂合约 TableFactoryPrecompiled.cpp
0x1002 CRUD合约 CRUDPrecompiled.cpp
0x1003 共识节点管理 ConsensusPrecompiled.cpp
0x1004 CNS功能 CNSPrecompiled.cpp
0x1005 存储表权限管理 AuthorityPrecompiled.cpp
0x1006 并行合约配置 ParallelConfigPrecompiled.cpp

Precompiled Service API 错误码

错误码 消息内容 备注
0 success
-50000 permission denied
-50001 table name already exist
-50100 unknow function call
-50101 table does not exist
-51000 table name and address already exist
-51001 table name and address does not exist
-51100 invalid node ID SDK错误码
-51101 the last sealer cannot be removed
-51102 the node is not reachable SDK错误码
-51103 the node is not a group peer SDK错误码
-51104 the node is already in the sealer list SDK错误码
-51105 the node is already in the observer list SDK错误码
-51200 contract name and version already exist SDK错误码
-51201 version string length exceeds the maximum limit SDK错误码
-51300 invalid configuration entry
-51500 contract name and version already exist
-51501 condition parse error
-51502 condition operation undefined
-51600 invalid ciphers
-51700 group sig failed
-51800 ring sig failed
-51900 contract frozen
-51901 contract available
-51902 contract repeat authorization
-51903 invalid contract address
-51904 table not exist
-51905 no authorized
-52000 committee member exist
-52001 committee member not exist
-52002 invalid request permission denied
-52003 invalid threshold
-52004 operator can't be committee member
-52005 committee member can't be operator
-52006 operator exist
-52007 operator not exist
-52008 account not exist
-52009 invalid account address
-52010 account already available
-52011 account frozen
-52012 current value is expected value

升级说明

WeBASE-Node-Manager升级的兼容性说明,请结合WeBASE-Node-Manager Changelog进行阅读

WeBASE-Node-Manager升级的必须步骤:

  1. 备份已有文件或数据,下载新的安装包(可参考安装包下载
  2. 使用新的安装包,并将旧版本yml已有配置添加到新版本yml中;可通过diff aFile bFile命令对比新旧yml的差异
  3. 查看节点管理服务升级文档中对应版本是否需要修改数据表,若不需要升级则跳过 3.1 若需要升级数据表,首先使用mysqldump命令备份数据库 3.2 按照升级文档指引,操作数据表
  4. bash stop.sh && bash start.sh重启

各个版本的具体修改可参考下文

lab-rc1

附录

1. 安装问题

1.1 Java部署

CentOS环境安装Java

注意:CentOS下OpenJDK无法正常工作,需要安装OracleJDK下载链接

# 创建新的文件夹,安装Java 8或以上的版本,将下载的jdk放在software目录
# 从Oracle官网(https://www.oracle.com/technetwork/java/javase/downloads/index.html)选择Java 8或以上的版本下载,例如下载jdk-8u201-linux-x64.tar.gz
$ mkdir /software

# 解压jdk
$ tar -zxvf jdk-8u201-linux-x64.tar.gz

# 配置Java环境,编辑/etc/profile文件
$ vim /etc/profile

# 打开以后将下面三句输入到文件里面并保存退出
export JAVA_HOME=/software/jdk-8u201  #这是一个文件目录,非文件
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# 生效profile
$ source /etc/profile

# 查询Java版本,出现的版本是自己下载的版本,则安装成功。
java -version
Ubuntu环境安装Java

  # 安装默认Java版本(Java 8或以上)
  sudo apt install -y default-jdk
  # 查询Java版本
  java -version
1.2 Gradle部署

此处给出简单步骤,供快速查阅。更详细的步骤,请参考官网

(1)从官网下载对应版本的Gradle安装包,并解压到相应目录

mkdir /software/
unzip -d /software/ gradleXXX.zip

(2)配置环境变量

export GRADLE_HOME=/software/gradle-4.9
export PATH=$GRADLE_HOME/bin:$PATH

(3)查看版本

gradle -version

2. 常见问题及方案

一般问题
  • 问:执行shell脚本报下面错误:
[app@VM_96_107_centos deployInputParam]$ bash start.sh
start.sh: line 2: $'\r': command not found
start.sh: line 8: $'\r': command not found
start.sh: line 9: $'\r': command not found
start.sh: line 10: $'\r': command not found

答:这是编码问题,在脚本的目录下执行转码命令:

dos2unix *.sh
数据库问题
  • 问:服务访问数据库抛出异常:
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

答:检查数据库的网络策略是否开通

下面以centos7为例:
查看防火墙是否开放3306端口: firewall-cmd --query-port=3306/tcp
防火墙永久开放3306端口:firewall-cmd --zone=public --add-port=3306/tcp --permanent
重新启动防火墙:firewall-cmd --reload
  • 问:执行数据库初始化脚本抛出异常:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (110)

答:MySQL没有开通该帐号的远程访问权限,登录MySQL,执行如下命令,其中TestUser改为你的帐号

GRANT ALL PRIVILEGES ON *.* TO 'TestUser'@'%' IDENTIFIED BY '此处为TestUser的密码’' WITH GRANT OPTION;
WeBASE-Node-Manager服务搭建问题
  • 问:执行构建命令gradle build -x test抛出异常:
A problem occurred evaluating root project 'WeBASE-Node-Manager'.
Could not find method compileOnly() for arguments [[org.projectlombok:lombok:1.18.2]] on root project 'WeBASE-Node-Manager'.

答: 方法1、已安装的Gradle版本过低,升级Gradle版本到4.10以上即可。 方法2、直接使用命令:./gradlew build -x test,如果提示gradlew为非可执行文件,执行chmod +x ./gradlew再次执行build操作即可。

全量交易/全量合约/交易审计出现系统异常问题
  • 问:在WeBASE页面进入合约管理/合约列表/全量或者交易审计/异常用户界面时,发生WeBASE-Node-Manager系统异常:

答:检查日志发现报错是由于数据库版本过高,需要禁用only_full_group_by。

登陆数据库 mysql -u root -p 返回:Enter password:

需要输入配置数据库时设置的密码。

然后查询数据库开启的规则:

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;

返回如下:

STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY

需要关闭其中的ONLY_FULL_GROUP_BY规则:

set @@GLOBAL.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
set @@SESSION.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

引号中为之前查询规则结果中除了ONLY_FULL_GROUP_BY以外的规则

若设置时报错,只需将引号中报错的规则删去并重新执行命令即可,然后重启WeBASE便可解决异常。

启动问题
  • 问:启动Node-Manager进程后,后台日志显示not found any front

答:此处为正常提示,表示后台没有可访问的节点前置。通过WeBASE-Web连接Node-Manager后台服务后,添加节点前置即可。

节点管理服务忘记密码

登录到WeBASE-Node-Manager中配置的Mysql数据库(默认为webasenodemanager)后,在tb_account_info中插入一条新的管理员账号test,密码Abcd1234

INSERT INTO tb_account_info (account,account_pwd,role_id,create_time,modify_time)values('test', '$2a$10$F/aEB1iEx/FvVh0fMn6L/uyy.PkpTy8Kd9EdbqLGo7Bw7eCivpq.m',100000,now(),now());
关闭鉴权调用(联调)

application.yml中配置constant.isUseSecurityfalse即可禁用WeBASE-Node-Manager的登录鉴权。

_images/disable_auth.png

  • 免鉴权后,默认使用的是管理员用户admin(管理员用户可以看到所有用户的数据),可以跳过登陆页面,直接访问WeBASE-Web节点管理台的主页,如http://localhost:5000/#/home
  • 若需要指定用户进行接口调用,可以在请求的headers中增加Account字段,其值设置为节点管理服务的用户名,如获取开发者用户developer1对应数据(开发者用户只能看到自己所创建的数据)。

_images/api_with_header_account.png

使用swagger

v1.5.2后,节点管理服务搭配了swagger,可用于直接调试接口,需要关闭鉴权后,访问 {ip}:5001/WeBASE-Node-Manager/swagger-ui.html 即可访问swagger页面

3. 配置文件解析

参数 默认值 描述
server.port 5001 当前服务端口
server.servlet.context-path /WeBASE-Node-Manager 当前服务访问路径
mybatis.typeAliasesPackage com.webank.webase.node.mgr mapper类扫描路径
mybatis.mapperLocations classpath:mapper/*.xml mybatis的xml路径
spring.datasource.driver-class-name com.mysql.cj.jdbc.Driver mysql驱动
spring.datasource.url jdbc:mysql://127.0.0.1:3306/webasenodemanager mysql连接地址
spring.datasource.username defaultAccount mysql账号
spring.datasource.password defaultPassword mysql密码
logging.config classpath:log/log4j2.xml 日志配置文件目录
logging.level com.webank.webase.node.mgr: info 日志扫描目录和级别
constant.isDeleteInfo true 是否定时删除数据(区块、交易hash、审计数据);true-是,false-否
constant.transRetainMax 10000 表中交易hash保留的条数(开启constant.isDeleteInfo时有效)
constant.deleteInfoCron "0 0/1 * * * ?" 定时删除数据的频率,默认一分钟
constant.statisticsTransDailyCron "0 0/1 * * * ?" 统计交易记录的执行频率,默认一分钟
constant.resetGroupListCycle 600000 刷新群组列表任务执行完后,下一个开始间隔(毫秒)
constant.groupInvalidGrayscaleValue 1M 群组失效灰度期长度,灰度期过后,如果还没查到失效状态的群组,就删除(y:年, M:月, d:天, h:小时, m:分钟, n:永远有效)
constant.notSupportFrontIp localhost 不支持的前置ip
constant.isBlockPullFromZero false 是否从0开始同步区块信息(true-是,false-最新块开始同步)
constant.pullBlockInitCnts 1000 最新块的前1000个块之后开始同步(constant.isBlockPullFromZero=false时有效)
constant.pullBlockSleepTime 200 拉完一个区块,睡眠时间(毫秒)
constant.pullBlockTaskFixedDelay 30000 拉区块任务执行完后,间隔多久开始下一次(毫秒)
constant.blockRetainMax 10000 表中区块保留的条数(开启constant.isDeleteInfo时有效)
constant.verificationCodeMaxAge 300 y验证码有效时长(秒)
constant.authTokenMaxAge 1800 登录token有效时长(秒)
constant.isUseSecurity true 是否启用登录鉴权,若false则默认使用admin权限免登陆鉴权
constant.frontUrl http://%1s:%2d/WeBASE-Front/%3s 前置服务的请求路径
constant.httpTimeOut 5000 http请求超时时间(毫秒)
constant.contractDeployTimeOut 30000 合约部署超时时间(毫秒)
constant.maxRequestFail 3 请求前置(frot)被允许失败次数,达到配置值后,将会停止往该路径发送请求
constant.sleepWhenHttpMaxFail 60000 请求失败次数过多,熔断时间长度(毫秒)
constant.transMonitorTaskFixedRate 60000 交易审计开始执行后,下一个任务开始时间(毫秒)
constant.analysisSleepTime 200 审计完一条交易hash后,睡眠时间(毫秒)
constant.monitorInfoRetainMax 10000 表中审计数据保留的条数(开启constant.isDeleteInfo时有效)
constant.isMonitorIgnoreUser false 审计逻辑是否忽略私钥用户
constant.isMonitorIgnoreContract false 审计逻辑是否忽略合约
constant.monitorUnusualMaxCount 20 审计异常数据被允许最大值,到达后会停止审计
constant.auditMonitorTaskFixedDelay 300000 监控审计数据任务的运行间隔时间,异常时将发送告警邮件(毫秒)(注:此处为检查频率,告警配置中是告警频率)
constant.nodeStatusMonitorTaskFixedDelay 60000 监控节点状态任务的运行间隔时间,异常时将发送告警邮件(毫秒)(注:此处为检查频率,告警配置中是告警频率)
constant.certMonitorTaskFixedDelay 300000 监控证书任务的运行间隔时间,有效期结束7天前时将发送告警邮件(毫秒) (注:此处为检查频率,告警配置中是告警频率)
constant.developerModeEnable false 是否启用开发者模式(管理员、用户并增加开发者角色)
constant.deployedModifyEnable true 是否允许重复部署合约
constant.enableVerificationCode true 验证码是否启用随机
constant.verificationCodeValue "8888" 当不启用验证码的随机时,设置固定验证码(方便联调)
constant.ignoreCheckFront /account/login,/account/pictureCheckCode,/login,/user/privateKey/*,/config/encrypt,/config/version,/front/refresh,/api/ 直接访问前置的URI
constant.resetGroupListInterval 15000 异步刷新所有群组连接的间隔,默认15s
constant.appRequestTimeOut 300000 接入应用的请求间隔(ms)
constant.appStatusCheckCycle 3000 接入应用的状态检查频率(ms)
constant.statBlockRetainMax 100000 区块监控数据的最大存储量
constant.statBlockFixedDelay 5000 区块监控数据的频率(ms)
constant.statBlockPageSize 10 区块监控数据拉取的单次请求量
constant.enableExternalFromBlock true 是否启用全量用户与全量合约采集
sdk.encryptType 0 sdk的加密类型,0:标准,1:国密;需要与链和Front的类型一致
executor 异步拉取区块、刷新群组状态、监控群组数据的线程池配置
executor.corePoolSize 3 异步任务的核心线程数
executor.maxPoolSize 10 异步任务的最大线程数
executor.queueSize 50 异步任务的队列容量
executor.threadNamePrefix node-mgr-async- 异步拉取区块、刷新群组状态、监控群组数据的线程名字前缀
scheduler 拉取区块、刷新群组状态、监控群组数据、交易解析、定时删除区块等定时任务的线程池配置
scheduler.poolSize 50 定时任务的线程池大小
scheduler.threadNamePrefix node-mgr-task- 定时任务的线程名字前缀
scheduler.awaitTerminationSeconds 600 定时任务的线程等待超时时长(秒)
scheduler.waitForTasksToCompleteOnShutdown true 定时任务完成后再停止线程

WeBASE管理平台

概要介绍

功能说明

本项目是区块链中间件平台WeBASE管理平台,使用框架vue-cli

支持FISCO-BCOS 3.0以上版本,支持群组和群组切换。具体功能有:

  1. 区块链数据概览,可以查看区块链的节点、区块、交易、合约信息。点击左上角交易信息和区块信息界面,可以跳转到区块或交易信息列表页,交易信息支持input解码和event解码。
  2. 节点管理,可以查看前置列表、节点列表、修改节点共识状态。可以查看链上的所有群组和节点,查看前置所在服务器状态相关信息,管理节点的共识状态。
  3. 合约管理,提供图形化合约IDE、查询已部署合约列表、合约CNS查询以及预编译合约的CRUD功能。编译、部署合约后该合约会被保存。
  4. 私钥管理,管理所有可以发交易的帐号,公钥用户是其他机构的帐号,无法在本机构发交易,可以通过手动绑定和自动同步获取。私钥用户为本机构发交易的用户。
  5. 系统管理,提供权限管理、系统配置管理、证书管理的功能。权限管理可以控制私钥用户的权限范围,证书管理可以查看链的相关证书。
  6. 系统监控,系统监控包含了节点监控、主机监控与异常告警。监控整条链所有机构所有用户发送交易行为,查看是否有异常用户和异常合约,并在异常状态下通过告警邮件通知运维管理员。
  7. 交易审计,主要监控整条链所有机构所有用户发送交易行为,查看是否有异常用户和异常合约。
  8. 帐号管理,只有admin帐号才能查看此功能,可以新增帐号(登录此系统帐号)、修改密码、修改账户邮箱等等。

国密支持

WeBASE-Web v1.2.2+已支持国密功能,使用WeBASE-Node-Manager v1.2.2,使用WeBASE-Front v1.2.2及以上版本

WeBASE-Web将根据WeBASE-Node-Manager的版本,自动在国密与非国密之间切换,合约编译、合约部署、调用合约、发送交易等功能均已支持国密。

solidity v0.5.2和v0.6.10支持

WeBASE-Web v1.4.2+已支持solidity v0.5.2v0.6.10,可在合约IDE中的左上角进行版本切换

部署说明

1. 依赖环境

环境 版本
nginx nginx1.6或以上版本,安装请参考附录
WeBASE-Node-Manager WeBASE-Node-Manager对应版本

2. 拉取代码

代码可以放在/data下面,执行命令:

git clone -b lab https://github.com/WeBankBlockchain/WeBASE-Web.git

# 若网络问题导致长时间无法下载,可尝试以下命令
git clone -b lab https://gitee.com/WeBank/WeBASE-Web.git

进入目录:

cd WeBASE-Web
2.1 下载solc-bin

执行脚本get_solc_js.sh会自动下载solc-bin,即下面v0.4.25.js等文件。 在WeBASE-Web/目录中直接执行脚本get_solc_js.sh((脚本与dist文件夹同级))

    bash ./get_solc_js.sh

等待脚本执行完成

  • 如果执行不成功,请使用下面的命令:

注意:当且仅当get_solc_js.sh脚本执行失败才需要执行下面的命令

    curl -#L https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/download/solidity/wasm/v0.4.25.js -o ./dist/static/js/v0.4.25.js
    curl -#L https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/download/solidity/wasm/v0.4.25-gm.js -o ./dist/static/js/v0.4.25-gm.js
    curl -#L https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/download/solidity/wasm/v0.5.2.js -o ./dist/static/js/v0.5.2.js
    curl -#L https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/download/solidity/wasm/v0.5.2-gm.js -o ./dist/static/js/v0.5.2-gm.js
    curl -#L https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/download/solidity/wasm/v0.6.10.js -o ./dist/static/js/v0.6.10.js
    curl -#L https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/download/solidity/wasm/v0.6.10-gm.js -o ./dist/static/js/v0.6.10-gm.js

执行完后检查dist/static/js是否下载完这些js文件。

4. 修改配置

在docs目录下有配置文件nginx.conf,修改完后替换安装的nginx的配置文件nginx.conf(这里nginx安装配置文件在/usr/local/nginx/conf下面,如果这里没找到,可以到/etc下寻找,如有权限问题,请加上sudo)。

  • 修改配置:
# 修改服务器ip,也可以使用域名
sed -i "s%127.0.0.1%${your_ip}%g" docs/nginx.conf

# 修改WeBASE-Web服务端口(端口需要开通策略且不能被占用)
sed -i "s%5000%${your_port}%g" docs/nginx.conf

# 修改静态文件路径(文件需要有权限访问)
sed -i "s%/data/WeBASE-Web/dist%${your_file_dir}%g" docs/nginx.conf

# 节点管理服务ip和端口
sed -i "s%10.0.0.1:5001%${your_node_manager}%g" docs/nginx.conf
  • 复制配置文件nginx.conf到默认配置目录中
  • 也可以直接通过nginx -c docs/nginx.conf命令加载docs/nginx.conf配置
cp -rf docs/nginx.conf /usr/local/nginx/conf

备注: 如果服务器已有nginx,可在原配置文件nginx.conf增加一个server:

    upstream node_mgr_server{
        server 10.0.0.1:5001; # 节点管理服务ip和端口
    }
    server {
        listen       5000 default_server; # 前端端口(端口需要开通策略且不能被占用)
        server_name  127.0.0.1;           # 服务器ip,也可配置为域名
        location / {
            root   /data/WeBASE-Web/dist;   # 前端文件路径(文件需要有权限访问)
            index  index.html index.htm;
            try_files $uri $uri/ /index.html =404;
        }

        include /etc/nginx/default.d/*.conf;

        location /mgr {
            proxy_pass    http://node_mgr_server/;    		
            proxy_set_header		Host			 $host;
            proxy_set_header		X-Real-IP		 $remote_addr;
            proxy_set_header		X-Forwarded-For	 $proxy_add_x_forwarded_for;
        }
    }

5. 启动nginx

启动命令:

/usr/local/nginx/sbin/nginx # nginx在/usr/local目录下

检查nginx是否启动:

ps -ef | grep nginx

6. 访问页面

http://{deployIP}:{webPort}
示例:http://127.0.0.1:5000

备注:

  • 部署服务器IP和管理平台服务端口需对应修改,网络策略需开通
  • 默认账号密码:admin/Abcd1234
  • WeBASE管理平台使用说明请查看使用手册

7. 查看日志

进程日志:tail -f logs/access.log
错误日志:tail -f logs/eror.log

附录

1 安装nginx

1.1 下载nginx依赖

在安装nginx前首先要确认系统中安装了gcc、pcre-devel、zlib-devel、openssl-devel。如果没有,请执行命令

yum -y install gcc pcre-devel zlib-devel openssl openssl-devel

执行命令时注意权限问题,如遇到,请加上sudo

1.2 下载nginx

nginx下载地址:https://nginx.org/download/(下载最新稳定版本即可) 或者使用命令:

wget http://nginx.org/download/nginx-1.9.9.tar.gz  (版本号可换)

将下载的包移动到/usr/local/下

1.3 安装nginx
1.3.1 解压
tar -zxvf nginx-1.9.9.tar.gz
1.3.2 进入nginx目录
cd nginx-1.9.9
1.3.3 配置
./configure --prefix=/usr/local/nginx
1.3.4 make
make
make install
1.3.5 测试是否安装成功

使用命令:

/usr/local/nginx/sbin/nginx –t

正常情况的信息输出:

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
1.3.6 nginx几个常见命令
/usr/local/nginx/sbin/nginx -s reload            # 重新载入配置文件
/usr/local/nginx/sbin/nginx -s reopen            # 重启 Nginx
/usr/local/nginx/sbin/nginx -s stop              # 停止 Nginx
ps -ef | grep nginx                              # 查看nginx进程

2 常见问题

2.1 出现“登录错误”怎么排查问题

登录时出现“登录错误”,请一一排查:

  1. WeBASE-Node-Manager服务是否启动成功,
  2. WeBASE-Node-Manager的数据库是否正常,
  3. nginx代理是否存在错误。
2.2 登录页面的验证码加载不出来
  • 进入 webase-node-mgr 目录下,执行 bash status.sh 检查服务是否启动,如果服务没有启动,运行 bash start.sh 启动服务;

  • 如果服务已经启动,按照如下修改日志级别

    • webase-node-mgr/conf/application.yml
    #log config
    logging:
      level:
        com.webank.webase.node.mgr: debug
    
    • webase-node-mgr/conf/log/log4j2.xml
    <Loggers>
    <Root level="debug">
      <AppenderRef ref="asyncInfo"/>
      <AppenderRef ref="asyncErrorLog"/>
    </Root>
    </Loggers>
    
  • 重启服务 bash stop.sh && bash start.sh

  • 重启服务后,检查日志文件 log/WeBASE-Node-Manager.log

    • 检查是否有异常信息。如果有异常信息,根据具体的异常信息检查环境配置,或者通过搜索引擎进行排查。
2.3 为什么输入正确的验证码显示验证码错误

登录验证码有效时间为五分钟,五分钟后验证码失效,登录会出现“验证码错误” 。

2.4 交易解码解不出来

将该交易所属的合约上传到合约管理,并编译一次,下一笔调用合约的交易触发后即可成功解码。

2.5 交易审计异常交易和异常合约怎么消除
  • 将发送交易的账户在私钥管理中添加成公钥用户,那么该用户所发的交易将审计成正常交易;
  • 将部署该合约的账户在私钥管理中添加成公钥用户,那么该用户所部署的合约将审计成正常合约。

3. 二次开发

开发文档

签名服务

概要介绍

功能介绍

本系统为签名服务子系统。功能:管理公私钥、对数据进行签名。

国密支持

WeBASE-Sign v1.2.2+已支持 国密版FISCO-BCOS,使用WeBASE v1.2.2及以上版本

本系统同时支持国密与非国密,分别提供了ECDSA与国密两类接口,可生成/管理ECDSA和国密公私钥用户,可对数据进行国密或非国密的签名

部署说明

1. 前提条件

环境 版本
Java Java1.8或以上版本
数据库 MySQL-5.6或以上版本

备注:安装说明请参看 附录-1

2. 拉取代码

执行命令:

git clone -b lab https://github.com/WeBankBlockchain/WeBASE-Sign.git

# 若因网络问题导致长时间下载失败,可尝试以下命令
git clone -b lab https://gitee.com/WeBank/WeBASE-Sign.git

进入目录:

cd WeBASE-Sign

3. 编译代码

方式一:如果服务器已安装Gradle,且版本为Gradle-4.10或以上

gradle build -x test

方式二:如果服务器未安装Gradle,或者版本不是Gradle-4.10或以上,使用gradlew编译

chmod +x ./gradlew && ./gradlew build -x test

构建完成后,会在根目录WeBASE-Sign下生成已编译的代码目录dist。

4. 数据库初始化

#登录MySQL:
mysql -u ${your_db_account} -p${your_db_password}  例如:mysql -u root -p123456
#新建数据库:
CREATE DATABASE IF NOT EXISTS {your_db_name} DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

5. 修改配置

(1)进入dist目录

cd dist

dist目录提供了一份配置模板conf_template:

根据配置模板生成一份实际配置conf。初次部署可直接拷贝。
例如:cp conf_template conf -r

(2)修改配置(根据实际情况修改):

vi conf/application.yml
server: 
  # 本工程服务端口,端口被占用则修改
  port: 5004
  context-path: /WeBASE-Sign

spring: 
  datasource: 
    # 数据库连接信息
    url: jdbc:mysql://127.0.0.1:3306/webasesign?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8
    # 数据库用户名
    username: "dbUsername"
    # 数据库密码
    password: "dbPassword"
    driver-class-name: com.mysql.cj.jdbc.Driver
    
constant: 
  # aes加密key(16位),如启用,各互联的子系统的加密key需保持一致
  aesKey: EfdsW23D23d3df43

5. 服务启停

在dist目录下执行:

启动:bash start.sh
停止:bash stop.sh
检查:bash status.sh

备注:服务进程起来后,需通过日志确认是否正常启动,出现以下内容表示正常;如果服务出现异常,确认修改配置后,重启提示服务进程在运行,则先执行stop.sh,再执行start.sh。

...
	Application() - main run success...

6. 查看日志

在dist目录查看:

全量日志:tail -f log/WeBASE-Sign.log
错误日志:tail -f log/WeBASE-Sign-error.log

接口说明

1. 新增用户接口

1.1. 新增ECDSA/国密用户接口
接口描述

根据传入的encryptType值,新增ECDSA或国密公私钥用户。

接口URL

http://localhost:5004/WeBASE-Sign/user/newUser?signUserId={signUserId}&appId={appId}&encryptType={encryptType}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 用户编号 signUserId String 64 私钥用户的唯一业务编号,仅支持数字字母下划线
2 应用编号 appId String 64 用于标志用户的应用编号,仅支持数字字母下划线
3 加密类型 encryptType Integer 默认为0,0: ECDSA, 1: 国密
4 是否返回私钥 returnPrivateKey boolean 默认false,true时返回aes加密的私钥

2)数据格式

http://localhost:5004/WeBASE-Sign/user/newUser?signUserId={signUserId}&appId={appId}&encryptType=0
响应参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 返回码 code String 返回码信息请附录1
2 提示信息 message String
3 返回数据 data Object
3.1 用户编号 signUserId String
3.2 应用编号 appId String
3.3 私钥信息 privateKey String
3.4 账户地址 address String
3.5 公钥 publicKey toHexString
3.6 描述 description String
3.7 加密类型 encryptType Integer 0: ECDSA, 1: guomi

2)数据格式

a.请求正常返回结果

ECDSA用户:

{
    "code": 0,
    "message": "success",
    "data": {
        "signUserId": "user_111",
        "appId": "group_01",
        "address": "0x2df87ff79e8c85a318c00c82ee76e2581fbab0a8",
        "publicKey": "0x1befc9824623dfc2f1541d2fc1df4bc445d9dd26816b0884e24628881d5bb572bf7dfd69520d540adc2d16d295df954d9c34bef4381dbc207942fcbf43c7d622",
        "privateKey": "",
        "description": null,
        "encryptType": 0
    }
}

国密用户:

{
    "code": 0,
    "message": "success",
    "data": {
        "signUserId": "user_222",
        "appId": "group_02",
        "address": "0x0bc3465986845864fc1646dedf2dd892c0fe11be",
        "publicKey": "0xd09d4efe3c127898186c197ae6004a9b40d7c7805fc7e31f7c4a835a4b9cf4148155cbd6dfcf3e5fd84acf1ea55c26b5a9b05d118b456738be2becf0e667c0d6",
        "privateKey": "",
        "description": null,
        "encryptType": 1
    }
}

b.异常返回结果示例(信息详情请参看附录1)

{
    "code": 303001,
    "message": "user of this sign user id is already exists",
    "data": null
}
1.2. 导入私钥用户接口
接口描述

导入私钥到Sign,与新增私钥类似

接口URL

http://localhost:5004/WeBASE-Sign/user/newUser

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 私钥 privateKey String 通过Base64加密后的私钥内容(编码前私钥为BigInteger的HexString十六进制字符串)
2 用户编号 signUserId String 64 私钥用户的唯一业务编号,仅支持数字字母下划线
3 应用编号 appId String 64 用于标志用户的应用编号,仅支持数字字母下划线
4 加密类型 encryptType Integer 默认为0,0: ECDSA, 1: 国密

2)数据格式

http://localhost:5004/WeBASE-Sign/user/newUser
{
    //privateKey编码前原文为: 3d1a470b2e7ae9d536c69af1cc5edf7830ece5b6a97df0e9441bab9f7a77b131
  "privateKey": "M2QxYTQ3MGIyZTdhZTlkNTM2YzY5YWYxY2M1ZWRmNzgzMGVjZTViNmE5N2RmMGU5NDQxYmFiOWY3YTc3YjEzMQ==",
  "signUserId": "user_222",
  "appId": "app_222",
  "encryptType": 0
}
响应参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 返回码 code String 返回码信息请附录1
2 提示信息 message String
3 返回数据 data Object
3.1 用户编号 signUserId String
3.2 应用编号 appId String
3.3 私钥信息 privateKey String
3.4 账户地址 address String
3.5 公钥 publicKey toHexString
3.6 描述 description String
3.7 加密类型 encryptType Integer 0: ECDSA, 1: guomi

2)数据格式

a.请求正常返回结果

ECDSA用户:

{
    "code": 0,
    "message": "success",
    "data": {
        "signUserId": "user_111",
        "appId": "group_01",
        "address": "0x2df87ff79e8c85a318c00c82ee76e2581fbab0a8",
        "publicKey": "0x1befc9824623dfc2f1541d2fc1df4bc445d9dd26816b0884e24628881d5bb572bf7dfd69520d540adc2d16d295df954d9c34bef4381dbc207942fcbf43c7d622",
        "privateKey": "", //不返回私钥
        "description": null,
        "encryptType": 0
    }
}

b.异常返回结果示例(信息详情请参看附录1)

{
    "code": 303001,
    "message": "user of this sign user id is already exists",
    "data": null
}

2. 查询用户接口

2.1 根据userId查询用户
接口描述

根据用户编号查询用户信息。

接口URL

http://localhost:5004/WeBASE-Sign/user/{signUserId}/userInfo

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 用户编号 signUserId String 64 私钥用户的唯一业务编号,仅支持数字字母下划线
2 是否返回私钥 returnPrivateKey boolean 默认false,true时返回aes加密的私钥

2)数据格式

http://localhost:5004/WeBASE-Sign/user/{signUserId}/userInfo
响应参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 返回码 code String 返回码信息请附录1
2 提示信息 message String
3 返回数据 data Object
3.1 用户编号 signUserId String
3.2 应用编号 appId String
3.3 私钥信息 privateKey String
3.4 账户地址 address String
3.5 公钥 publicKey toHexString
3.6 描述 description String
3.7 加密类型 encryptType Integer 0: ECDSA, 1: guomi

2)数据格式

a.请求正常返回结果

ECDSA用户:

{
    "code": 0,
    "message": "success",
    "data": {
        "signUserId": "user_111",
        "appId": "group_01",
        "address": "0x2df87ff79e8c85a318c00c82ee76e2581fbab0a8",
        "publicKey": "0x1befc9824623dfc2f1541d2fc1df4bc445d9dd26816b0884e24628881d5bb572bf7dfd69520d540adc2d16d295df954d9c34bef4381dbc207942fcbf43c7d622",
        "privateKey": "",
        "description": null,
        "encryptType": 0
    }
}

b.异常返回结果示例(信息详情请参看附录1)

{
    "code": 303002,
    "message": "user does not exist",
    "data": null
}

3. 私钥用户管理接口

3.1. 停用私钥用户
接口描述

通过修改私钥用户的status状态值来停用私钥用户;停用后,其他接口将不返回被停用的私钥用户

接口URL

http://localhost:5004/WeBASE-Sign/user

调用方法

HTTP DELETE

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 用户编号 signUserId String 64 私钥用户的唯一业务编号,仅支持数字字母下划线

2)数据格式

http://localhost:5004/WeBASE-Sign/user
{
  "signUserId": "user_111"
}
响应参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 返回码 code String 返回码信息请附录1
2 提示信息 message String

2)数据格式

a.请求正常返回结果

{
    "code": 0,
    "message": "success"
}

b.异常返回结果示例(信息详情请参看附录1)

{
    "code": 303002,
    "message": "user does not exist",
    "data": null
}
3.2. 清除私钥用户缓存
接口描述

私钥用户的缓存用于缓存私钥数据到内存中,提高私钥签名效率;此接口可删除所有用户缓存信息

接口URL

http://localhost:5004/WeBASE-Sign/user/all

调用方法

HTTP DELETE

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
- - - - - - -

2)数据格式

http://localhost:5004/WeBASE-Sign/user/all
响应参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 返回码 code String 返回码信息请附录1
2 提示信息 message String

2)数据格式

a.请求正常返回结果

{
    "code": 0,
    "message": "success"
}

4. 用户列表接口

4.1. 根据appId查询用户列表(分页)
接口描述

根据传入的appId值,查询所有所有属于该appId的用户信息列表。

接口URL

http://localhost:5004/WeBASE-Sign/user/list/{appId}/{pageNumber}/{pageSize}

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 应用编号 appId String 用于标志用户的应用编号
2 页码 pageNumber Integer 页码,同时为空则返回全部
3 页大小 pageSize Integer 页大小,同时为空则返回全部
4 是否返回私钥 returnPrivateKey boolean 默认false,true时返回aes加密的私钥

2)数据格式

http://localhost:5004/WeBASE-Sign/user/list/group_01/1/5
响应参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 返回码 code String 返回码信息请附录1
2 提示信息 message String
3 返回数据 data List
3.1 用户编号 signUserId String
3.2 应用编号 appId String
3.3 私钥信息 privateKey String
3.4 账户地址 address String
3.5 公钥 publicKey toHexString
3.6 描述 description String
3.7 加密类型 encryptType Integer 0: ECDSA, 1: guomi
4 总量 totalCount Long 数据总量

2)数据格式

a.请求正常返回结果

ECDSA用户列表:

{
    "code": 0,
    "message": "success",
    "data": [
        {
            "signUserId": "user_111",
            "appId": "group_01",
            "address": "0x2df87ff79e8c85a318c00c82ee76e2581fbab0a8",
            "publicKey": "0x1befc9824623dfc2f1541d2fc1df4bc445d9dd26816b0884e24628881d5bb572bf7dfd69520d540adc2d16d295df954d9c34bef4381dbc207942fcbf43c7d622",
            "privateKey": "",
            "description": null,
            "encryptType": 0
        }
    ],
    "totalCount": 1
}

b.异常返回结果示例(信息详情请参看附录1)

{
  "code": 103001,
  "message": "system error",
  "data": null
}

5. 数据签名接口

5.1. ECDSA/国密数据签名接口
接口描述

指定用户通过ECDSA/国密SM2对数据进行签名。

接口URL

http://localhost:5004/WeBASE-Sign/sign

调用方法

HTTP POST

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 用户编号 signUserId String 64 私钥用户的唯一业务编号,仅支持数字字母下划线
2 请求数据 encodedDataStr String 十六进制String类型,使用java-sdk的Numeric.toHexString(byte[] input)方法将编码数据转换成HexString

2)数据格式

http://localhost:5004/WeBASE-Sign/sign
{
  "signUserId": "user_111",
  "encodedDataStr": "0xba001"
}
响应参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
1 返回码 code String 返回码信息请附录1
2 提示信息 message String
3 返回数据 data Object
3.1 签名数据 signDataStr String

2)数据格式

a.请求正常返回结果

{
    "code": 0,
    "message": "success",
    "data": {
        "signDataStr": "1c3f59a48593b66de4c57fe99f9c429811aa2dc9b495823cd99faa3e72b4a4d02e04bb7c3da6390a17adc00b0e740293c6306229a26a0c0cf2974581880d19e57b"
    }
}

b.异常返回结果示例(信息详情请参看附录1)

{
    "code": 203009,
    "message": "encoded data string must be hex string",
    "data": null
}

6. 其他接口

6.1. 查询WeBASE-Sign版本接口
接口描述

获取WeBASE-Sign的版本号

接口URL

http://localhost:5004/WeBASE-Sign/version

调用方法

HTTP GET

请求参数

1)参数表

序号 中文 参数名 类型 最大长度 必填 说明
- - -

2)数据格式

http://localhost:5004/WeBASE-Sign/version
响应参数

1)数据格式

a、成功:

v1.4.0

附录

1. 返回码信息列表

Code message 描述
success 正常
103001  system error  系统异常
103002  param valid fail  参数校验失败
203003 param exception 参数校验异常
203004 sign user id cannot be blank signUserId不可为空
203005 invalid sign user id, only support letter and digit signUserId不正确,仅支持数字字母下划线
203006 app id cannot be blank appId不可为空
203007 app id invalid, only support letter and digit appId不正确,仅支持数字字母下划线
203008 encrypt type should be 0 (ecdsa) or 1 (guomi) encryptType仅支持0或1
203009 encoded data string must be hex string encodedDataStr仅支持十六进制String
303001 user is already exists 用户已存在
303002 user does not exist 用户不存在
303003 privateKey is null 用户私钥为空
303004 privateKey decode fail 私钥解码失败
303005 privateKey format error 私钥格式错误
303006 privateKey not support transfer 私钥不支持传输

升级说明

WeBASE-Sign升级的兼容性说明,请结合WeBASE-Sign Changelog进行阅读

WeBASE-Sign升级的必须步骤:

  1. 备份已有文件或数据,下载新的安装包(可参考安装包下载
  2. 使用新的安装包,并将旧版本yml已有配置添加到新版本yml中;可通过diff aFile bFile命令对比新旧yml的差异
  3. 查看签名服务升级文档中对应版本是否需要修改数据表,若不需要升级则跳过 3.1 若需要升级数据表,首先使用mysqldump命令备份数据库 3.2 按照升级文档指引,操作数据表
  4. bash stop.sh && bash start.sh重启

各个版本的具体修改可参考下文

lab-rc1

附录

1. 安装问题

1.1 Java部署

此处给出简单步骤,供快速查阅。更详细的步骤,请参考官网

① 安装包下载

官网下载对应版本的java安装包,并解压到服务器相关目录

mkdir /software
tar -zxvf jdkXXX.tar.gz /software/
② 配置环境变量
  • 修改/etc/profile
sudo vi /etc/profile
  • 在/etc/profile末尾添加以下信息
JAVA_HOME=/nemo/jdk1.8.0_181
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH==.:$JAVA_HOME/lib
export JAVA_HOME CLASSPATH PATH
  • 重载/etc/profile
source /etc/profile
③ 查看版本
java -version
1.2. 数据库部署

此处以Centos安装MariaDB为例。MariaDB数据库是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。MariaDB完全兼容 MySQL,包括API和命令行。其他安装方式请参考MySQL官网

① 安装MariaDB
  • 安装命令
sudo yum install -y mariadb*
  • 启停
启动:sudo systemctl start mariadb.service
停止:sudo systemctl stop  mariadb.service
  • 设置开机启动
sudo systemctl enable mariadb.service
  • 初始化
执行以下命令:
sudo mysql_secure_installation
以下根据提示输入:
Enter current password for root (enter for none):<–初次运行直接回车
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码
Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车
Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
② 授权访问和添加用户
  • 使用root用户登录,密码为初始化设置的密码
mysql -uroot -p -h localhost -P 3306
  • 授权root用户远程访问
mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql > flush PRIVILEGES;
  • 创建test用户并授权本地访问
mysql > GRANT ALL PRIVILEGES ON *.* TO 'test'@localhost IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql > flush PRIVILEGES;

安全温馨提示:

  • 例子中给出的数据库密码(123456)仅为样例,强烈建议设置成复杂密码
  • 例子中root用户的远程授权设置会使数据库在所有网络上都可以访问,请按具体的网络拓扑和权限控制情况,设置网络和权限帐号
③ 测试连接和创建数据库
  • 登录数据库
mysql -utest -p123456 -h localhost -P 3306
  • 创建数据库
mysql > create database webasesign;

2. 常见问题

2.1 脚本没权限
  • 执行shell脚本报错误”permission denied”或格式错误
赋权限:chmod + *.sh
转格式:dos2unix *.sh

3. 配置文件解析

    1. 配置文件解析
参数 默认值 描述
server.port 5004 当前服务端口
server.context-path /WeBASE-Sign 当前服务访问目录
server.tomcat.max-threads 200 tomcat最大线程数
server.tomcat.max-connections 10000 tomcat最大连接数
spring.cache.type simple Spring缓存模式
spring.datasource.driver-class-name com.mysql.cj.jdbc.Driver mysql驱动
spring.datasource.url jdbc:mysql://127.0.0.1:3306/webasesign mysql连接地址
spring.datasource.username dbUsername mysql账号
spring.datasource.password dbPassword mysql密码
mybatis.mapperLocations classpath:mapper/*.xml mybatis的xml路径
logging.config classpath:log/log4j2.xml 日志配置文件目录
constant.aesKey EfdsW23D23d3df43 webase服务的aes秘钥
constant.aesPattern CBC AES加密模式
constant.keepAliveRequests 100 访问服务的请求存活数
constant.syncUsrCacheTaskFixedDelay 10000 同步缓存的私钥间隔时间(ms)
constant.supportPrivateKeyTransfer true 是否允许导出私钥

WeBASE社区文章

区块链教程 | 使用WeBASE进行“两阶段交易”

作者:黎宁

作为一个友好的、功能丰富的区块链中间件平台, WeBASE致力于提高区块链开发者的运维与管理效率。在新近发布的 WeBASE v1.5.2 中,一大优化是提供了获取交易编码的接口,更方便用户使用”两阶段交易”。

“两阶段交易”是什么?“两阶段交易”是指分成两个步骤发送交易,即对交易编码并签名、将交易提交到链上这两个阶段:

  • 第一阶段:构造并获取交易编码值,并通过私钥对交易编码值签名;
  • 第二阶段:发送交易,也就是将已签名的编码值发送到链上。

在WeBASE v1.5.2中,我们在WeBASE-Front节点前置服务中增加了获取交易编码值的功能。该接口可以返回未签名的交易编码值,也可以返回通过WeBASE-Front本地私钥或WeBASE-Sign私钥签名后的交易编码值。获得已签名的编码值后,用户直接调用前置服务的提交交易接口即可完成“两阶段交易”。

以下演示,我们通过WeBASE-Front节点前置服务接口获取交易编码值,并通过FISCO-BCOS Java-SDK对编码值进行签名,最后通过接口提交交易来加深对“两阶段交易”的了解。

|前期准备

部署HelloWorld合约

在发起交易之前,首先要确保在链上部署一个可调用的合约。这里以WeBASE-Front “合约仓库-工具合约”中的 “HelloWorld” 合约为例,部署一份 HelloWorld 合约。 我们在 WeBASE-Front 的合约IDE中编译一份 HelloWorld 合约并完成部署操作,如下图所示:

_images/ide.png

获得合约地址、合约ABI等信息后,我们根据 WeBASE-Front 的接口文档指引,调用获取交易编码接口。

查看接口文档

两阶段交易中,第一步交易编码并签名可以通过 WeBASE-Front 的 /trans/convertRawTxStr/withSign 接口构造一个已签名的交易体,接口文档简介如下:

_images/with-sign-api.png

值得一提的是,调用 /trans/convertRawTxStr/withSign 接口时:

  • 如果传入了 signUserId 非空,则返回的交易体编码值是通过signUserId对应私钥签名后的交易体编码值。
  • 如果传入的 signUserId 为空,则返回的是未签名的交易体编码值,开发者也可以通过JAVA-SDK用私钥对该值签名。

获取已签名的交易编码值后,就可以进行第二步的提交交易操作了。

_images/signed-tx-api.png

在 WeBASE-Front 中,我们可以通过 /trans/signed-transaction 接口,将已签名的交易体编码值,完成交易上链并获得交易回执。

上述各个接口的调用方法都可以在 WeBASE-Front 的接口文档中找到(https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Front/interface.html)。

|结合WeBASE-Front接口进行“两阶段交易”

获取交易编码值

下面以 WeBASE-Sign 签名的获取交易编码接口( /trans/convertRawTxStr/withSign )为例,获取未签名的交易编码值。

我们可以访问 WeBASE-Front 的 Swagger 进行接口调用(如,http://localhost:5002/WeBASE-Front/swagger-ui.html),找到Swagger接口列表中的”transaction interface”交易接口一栏,点开 /trans/convertRawTxStr/withSign 即可。

_images/swagger.png

在文章开头我们提到,“两阶段交易”的第一阶段是交易编码并通过私钥对编码值签名。

因此,我们调用接口时传入的 “signUserId” 为空字符串,接口将返回未签名的交易编码值,稍后我们再通过 Java-SDK 手动对编码值签名。在调用 /trans/convertRawTxStr/local 接口时同理,user地址字段为空字符串时也会返回未签名的交易编码值。

我们以调用HelloWorld合约的 “set” 方法为例,按接口文档填入对应参数。

首先,点开Swagger中的 /trans/convertRawTxStr/withSign 接口,再填入参数包括合约ABI、合约地址、函数名及函数入参、群组ID和WeBASE-Sign的私钥用户ID signUserId,点击”Try it out”输入参数,删除不必要的字段。注意,其中signUserId为空字符串。

_images/swagger-empty-id.png

点击”Execute”即可发起调用,获得未签名的交易编码值。接口返回值为:

_images/unsigned-code.png

拿到未签名的交易编码值之后,我们接下来通过 Java-SDK 对编码值进行签名。

对交易编码值签名

下面我们使用 FISCO-BCOS Java-SDK 加载私钥,对上文获取的未签名交易编码值进行签名操作,并根据 RawTransaction 交易体再次编码,得到最终签名后的交易编码值。

    public void testSign(TransactionEncoderService encoderService, RawTransaction rawTransaction) {
        // 未签名的交易编码值
        String encodedTransaction = "0xf8a9a001b41b2cc71fe0bf0450f1fa4d820209b6686a8f226d217be0bc51cd9fc4a020018405f5e100820204941f2dfecfd75b883b51762aef6326d3ae9ad5230180b8644ed3885e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000033132330000000000000000000000000000000000000000000000000000000000010180";
        // 私钥
        String privateKey = "0x123";
        // ECDSA 加密套件
        CryptoSuite cryptoSuite = new CryptoSuite(CryptoType.ECDSA_TYPE);
        // 对待签名的编码值作哈运算
        String hashMessageStr = cryptoSuite.hash(encodedTransaction);
        System.out.println("hashMessageStr: " + hashMessageStr);
        // 创建私钥对
        CryptoKeyPair myKeyPair = cryptoSuite.createKeyPair(privateKey);
        // 对交易编码值签名
        SignatureResult signedTx = cryptoSuite.sign(hashMessageStr, myKeyPair);

        // 获得最终签名后的交易编码值
        byte[] signedTransaction = encoderService.encode(rawTransaction, signedTx);
        // 转十六进制字符串
        String signedTransactionStr = Numeric.toHexString(signedTransaction);
        System.out.println("signedTransactionStr: " + signedTransactionStr);
    }
提交交易

有了已签名的交易编码值后,我们可以调用 /trans/signed-transaction 接口,将该交易发到链上,获得交易回执。这里我们继续使用 Swagger 调用该接口。

_images/submit-signed.png

提交请求后,接口返回了交易的回执。可以根据交易回执判断交易是否执行成功。

_images/receipt.png

当看到返回的交易回执中显示 status 为 0x0,也就意味着交易执行成功了。

|交易编码接口源码解析

WeBASE-Front 源码中,位于 transaction 包里的 TransService 包含了对交易编码并签名的具体代码。

获取交易编码值

我们找到 createRawTxEncoded() 方法,该方法通过合约函数的ABI,合约函数的函数名 funcName 和合约函数入参 funcParam 等参数构造了 Function 实例,并通过FunctionEncoder 将 Function 实例进行编码得到字符串 encodedFunction(代码中的 cryptoSuite 是国密或非国密的加密套件,可用于计算哈希、创建私钥对、签名等)。

// 构造Function实例
Function function = new Function(funcName, contractFunction.getFinalInputs(),
            contractFunction.getFinalOutputs());
// 编码Function
FunctionEncoder functionEncoder = new FunctionEncoder(cryptoSuite);
String encodedFunction = functionEncoder.encode(function);

下面使用 convertRawTx2Str() 方法,该方法主要负责构造 RawTransaction 交易体。

构造 RawTransaction 需要传入一个随机数和从节点获取当前的 BlockLimit 值(避免重复提交交易)、合约地址和上文获得的 encodedFunction 等参数。

// 构造交易体
BigInteger randomId = new BigInteger(250, new SecureRandom());
BigInteger blockLimit = web3j.getBlockLimit();
RawTransaction rawTransaction =
    RawTransaction.createTransaction(randomId, Constants.GAS_PRICE,
        Constants.GAS_LIMIT, blockLimit, contractAddress, BigInteger.ZERO, encodedFunction,
        new BigInteger(Constants.chainId), BigInteger.valueOf(groupId), "");
// 编码交易体RawTransaction
TransactionEncoderService encoderService = new TransactionEncoderService(cryptoSuite);
byte[] encodedTransaction = encoderService.encode(rawTransaction, null);
对交易编码值签名

对交易编码值签名前,WeBASE-Front 中会根据传入的 user 字段和 isLocal 字段判断:

  • 如果 user 字段为空,则将 encodedTransaction 转为十六进制后返回。该值就是第一阶段未签名的交易编码值。
  • 如果 user 字段非空, isLocal 字段为 true,则 user 为 WeBASE-Front 本地的用户私钥,通过本地私钥对交易编码值 encodedTransaction 签名。注意,签名前还需对 encodedTransaction 进行一次哈希运算后再签名。
  • 如果 user 字段非空, isLocal 字段为 false,则 user 为 WeBASE-Sign 托管私钥的signUserId,通过签名服务对交易体编码值 encodedTransaction 签名。注意,此处签名前没有对 encodedTransaction 进行哈希,而是直接转为十六进制发到签名服务,签名服务拿到该值后再做哈希运算并签名返回结果。

下面展示的代码为 isLocal 字段为 false,user 字段非空,其值为 signUserId 的交易编码值签名逻辑。

我们将交易编码值 encodedTransaction 转十六进制后,传到签名服务进行签名,得到了 String 格式的签名结果 signDataStr ,将签名结果反序列化,得到了签名结果 SignatureResult。同时,通过 TransactionEncoderService 将签名结果和上文构造的 RawTransaction 实例进行编码,最终可得到十六进制的已签名的交易编码值 signResultStr 。

// encodedTransaction转十六进制
String hashMessageStr = Numeric.toHexString(encodedTransaction);
// 通过WeBASE-Sign签名
EncodeInfo encodeInfo = new EncodeInfo(user, hashMessageStr);
String signDataStr = keyStoreService.getSignData(encodeInfo);
// 反序列化签名结果
SignatureResult signData = CommonUtils.stringToSignatureData(signDataStr, cryptoSuite.cryptoTypeConfig);
// 加入签名结果,再次编码
byte[] signedMessage = encoderService.encode(rawTransaction, userSignResult);
// 转为十六进制
String signResultStr = Numeric.toHexString(signedMessage);

至此,获取交易编码,对交易编码签名交易体,并对编码值签名的过程就完成了。

值得一提的是,提交交易后获得的交易哈希 TransHash 值是通过对签名交易体编码值进行哈希计算得到的,有了交易哈希,也可以在提交交易后,直接根据交易哈希到链上查询交易回执。

// 通过CryptoSuite实例计算signResultStr的交易哈希值
String transHash = cryptoSuite.hash(signResultStr);

WeBASE贡献指南

欢迎,提前感谢你的帮助和支持!

如果你是第一次贡献,只需按照以下简单步骤操作即可。我们将以修改WeBASE-Node-Manager为例子给你介绍。

如果你的电脑上尚未安装 git, 请按照这个 安装指引 进行安装。

Fork本代码仓库

_images/fork.png

点击图示中的按钮去 Fork 这个代码仓库。 这个操作会将代码仓库复制到你的账户名下。

Clone代码仓库

_images/clone.png

接下来,将复制后的代码仓库克隆到你的电脑上。点击图示中的绿色按钮,接着点击复制到剪切板按钮(将代码仓库地址复制下来)

随后打开命令行窗口,敲入如下 git 命令:

git clone "刚才复制的 url 链接"

“刚才复制的 url 链接”(去掉双引号)就是复制到你账户名下的代码仓库地址。获取这链接地址的方法请见上一步。

git clone https://github.com/"你的 Github 用户名"/WeBASE-Node-Manager.git

‘你的 Github 用户名’ 指的就是你的 Github 用户名。这一步,你将复制你账户名下的 WeBASE-Node-Manager 这个代码仓库克隆到你的本地电脑上。

代码修改

cd WeBASE-Node-Manager

vim XXX

Commit修改

git commit -am "一个伟大改进"

将改动 Push 到 GitHub

使用 git push 命令发布代码

git push origin <分支的名称>

提出 Pull Request 将你的修改供他人审阅

前往 Github 你的代码仓库,你会看到一个 Compare & pull request 的按钮。点击该按钮。

_images/pull-request.png

接着再点击 Create pull request 按钮,正式提交 pull request。

_images/create-pull-request.png

提交的改动经过审核,会合入到仓库。合并后,你会收到电子邮件通知。

更多开源项目

All the project addresses participated and established by WeBank Blockchain are collected.

汇集了微众银行参与和建立的所有区块链项目地址。

_images/overview_blockchain.png

FISCO-BCOS 适用于金融行业的区块链底层平台

git地址:https://github.com/FISCO-BCOS

gitee地址:https://gitee.com/FISCO-BCOS

文档地址: https://fisco-bcos-documentation.readthedocs.io/

WeBASE 区块链中间件平台

git地址:https://github.com/WeBankBlockchain/WeBASE

gitee地址:https://gitee.com/WeBank/WeBASE

文档地址:https://webasedoc.readthedocs.io/

Liquid 智能合约编程语言软件

git地址:https://github.com/WeBankBlockchain/liquid

gitee地址:https://gitee.com/WeBankBlockchain/liquid

文档地址: https://liquid-doc.readthedocs.io/

社区

加入微众银行区块链社区

关于微众区块链开源的动态,社区活动,欢迎关注“微众区块链”公众号,不定期还有开源周边相送!(^▽^)

社区助手微信 ID : WeBank_Blockchain

_images/community_assistant.png