diff --git a/docs/WeBASE-Data/README.md b/docs/WeBASE-Data/README.md new file mode 100644 index 00000000..094eb8d6 --- /dev/null +++ b/docs/WeBASE-Data/README.md @@ -0,0 +1,20 @@ +# 概要介绍 +随着区块链的广泛应用,区块链相关应用的监管变成了一个现实问题。区块链应用有其自身的特点——其业务数据是由共识实时确认,并且由各个机构冗余存储。这些特性给监管带来了新机遇——能够实时同步和自主存储业务数据,并进行监管分析。与此同时区块链的数据存储结构又异于传统的DB存储结构,在进行业务分析和监管分析前必须有专用的工具服务来进行数据处理。 + +WeBASE-Data为微众区块链中间件平台-数据监管服务,导出区块链数据并解析,提供一个可视化的监管视图。包括三个子系统:WeBASE-Data-Collect(监管数据导出和分析服务)、WeBASE-Data-Fetcher(监管数据查询服务)、WeBASE-Data-Web(数据监管平台)。 + +主要提供以下功能: + +- 拉取链上数据。 +- 配置群组和节点信息。 +- 配置合约和用户,解析交易。 +- 查看链上的交易数量和交易详情。 +- 通过关键字搜索,查询交易属于哪条链,哪个用户,哪个合约。保证链上数据可查可管。 + +​ 部署和使用说明如下: + +- [部署说明](./install.md) + +- [使用手册](./instruction.md) + +- [接口说明](./interface-index.md) diff --git a/docs/WeBASE-Data/WeBASE-Data-Collect.md b/docs/WeBASE-Data/WeBASE-Data-Collect.md new file mode 100644 index 00000000..b7a87c6a --- /dev/null +++ b/docs/WeBASE-Data/WeBASE-Data-Collect.md @@ -0,0 +1,1719 @@ + +# WeBASE-Data-Collect接口说明 + +## 1 区块链管理模块 + +### 1.1 新增链信息 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址: **/chain/new** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ----------- | ------ | ------ | ------------------------------ | +| 1 | chainId | Int | 否 | 链编号(1~9999) | +| 2 | chainName | String | 否 | 链名称 | +| 3 | encryptType | Int | 否 | 链加密类型(0-非国密,1-国密) | +| 4 | description | String | 是 | 备注 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/chain/new +``` + +``` +{ + "chainId": 1, + "chainName": "链一", + "encryptType": 0, + "description": "test" +} +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | ----------- | ------------- | ---- | ------------------------------ | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | | Object | | 节点信息对象 | +| 3.1 | chainId | Int | 否 | 链编号 | +| 3.2 | chainName | String | 否 | 链名称 | +| 3.3 | chainType | Int | 否 | 链类型( 0-fisco 1-fabric) | +| 3.4 | encryptType | Int | 否 | 链加密类型(0-非国密,1-国密) | +| 3.5 | description | String | 是 | 备注 | +| 3.6 | createTime | LocalDateTime | 否 | 落库时间 | +| 3.7 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": { + "chainId": 1, + "chainName": "链一", + "chainType": 0, + "encryptType": 0, + "description": "test" + "createTime": "2019-02-14 17:47:00", + "modifyTime": "2019-03-15 11:14:29" + } +} +``` + +- 失败: + +``` +{ + "code": 209001, + "message": "chain id already exists", + "data": {} +} +``` + +### 1.2 修改链信息 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址: **/chain/update** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ----------- | ------ | ------ | ------ | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | chainName | String | 否 | 链名称 | +| 3 | description | String | 是 | 备注 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/chain/update +``` + +``` +{ + "chainId": 1, + "chainName": "链一", + "description": "test" +} +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | ----------- | ------------- | ---- | ------------------------------ | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | | Object | | 节点信息对象 | +| 3.1 | chainId | Int | 否 | 链编号 | +| 3.2 | chainName | String | 否 | 链名称 | +| 3.3 | chainType | Int | 否 | 链类型( 0-fisco 1-fabric) | +| 3.4 | encryptType | Int | 否 | 链加密类型(0-非国密,1-国密) | +| 3.5 | description | String | 是 | 备注 | +| 3.6 | createTime | LocalDateTime | 否 | 落库时间 | +| 3.7 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": { + "chainId": 1, + "chainName": "链一", + "chainType": 0, + "encryptType": 0, + "description": "test" + "createTime": "2019-02-14 17:47:00", + "modifyTime": "2019-03-15 11:14:29" + } +} +``` + +- 失败: + +``` +{ + "code": 209006, + "message": "chain id not exists", + "data": {} +} +``` + +### 1.3 获取链列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/chain/all** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +无 + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/chain/all +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ----- | ----------- | ------------- | ---- | ------------------------------ | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 否 | 组织列表 | +| 4.1 | | Object | | 节点信息对象 | +| 4.1.1 | chainId | Int | 否 | 链编号 | +| 4.1.2 | chainName | String | 否 | 链名称 | +| 4.1.3 | chainType | Int | 否 | 链类型( 0-fisco 1-fabric) | +| 4.1.4 | encryptType | Int | 否 | 链加密类型(0-非国密,1-国密) | +| 4.1.5 | description | String | 是 | 备注 | +| 4.1.6 | createTime | LocalDateTime | 否 | 落库时间 | +| 4.1.7 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "chainId": 1, + "chainName": "链一", + "chainType": 0, + "encryptType": 0, + "description": "test" + "createTime": "2019-02-14 17:47:00", + "modifyTime": "2019-03-15 11:14:29" + } + ], + "totalCount": 1 +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +### 1.4 删除链信息 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/chain/{chainId}** +- 请求方式:DELETE +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ---- | ------ | ------ | +| 1 | chainId | Int | 否 | 链编号 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/chain/1 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | -------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | object | 是 | 返回信息实体(空) | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "data": {}, + "message": "success" +} +``` + +- 失败: + +``` +{ + "code": 209004, + "message": "invalid chain id", + "data": {} +} +``` + +### 1.5 查询数据拉取开关 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/chain/togglePullData** +- 请求方式:GET +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +无 + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/chain/togglePullData +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | -------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | object | 是 | 信息对象 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": true +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +### 1.6 修改数据拉取开关 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址: **/chain/update** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ------- | ------ | ------------------------------------- | +| 1 | enable | boolean | 否 | 是否启用开关(true-开启;false-关闭) | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/chain/togglePullData +``` + +``` +{ + "enable": false +} +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | -------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | object | 是 | 信息对象 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": null +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +## 2 前置管理模块 + +### 2.1 新增节点前置 + + +#### 传输协议 +* 网络传输协议:使用HTTP协议 +* 请求地址: **/front/new** +* 请求方式:POST +* 请求头:Content-type: application/json +* 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | --------- | ------ | ------ | ------------ | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | frontIp | String | 否 | 前置ip | +| 3 | frontPort | Int | 否 | 前置服务端口 | +| 4 | agency | Int | 否 | 所属机构 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/front/new +``` + +``` +{ + "chainId": 1, + "frontIp": "localhost", + "frontPort": "5002", + "agency": "test" +} +``` + + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ------------- | ------ | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | | Object | | 节点信息对象 | +| 3.1 | frontId | Int | 否 | 前置编号 | +| 3.2 | chainId | Int | 否 | 链编号 | +| 3.3 | frontIp | String | 否 | 前置ip | +| 3.4 | frontPort | Int | 否 | 前置端口 | +| 3.5 | nodeId | String | 否 | 节点编号 | +| 3.6 | agency | String | 否 | 所属机构 | +| 3.7 | createTime | LocalDateTime | 是 | 落库时间 | +| 3.8 | modifyTime | LocalDateTime | 是 | 修改时间 | + +***2)出参示例*** +* 成功: +``` +{ + "code": 0, + "message": "success", + "data": { + "chainId": 1, + "frontId": 1, + "nodeId": "944607f7e83efe2ba72476dc39a269a910811db8caac34f440dd9c9dd8ec2490b8854b903bd6c9b95c2c79909649977b8e92097c2f3ec32232c4f655b5a01850", + "frontIp": "localhost", + "frontPort": 5002, + "agency": "test", + "createTime": null, + "modifyTime": null + } +} +``` + +* 失败: +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + + +### 2.2 获取所有前置列表 + + +#### 传输协议 +* 网络传输协议:使用HTTP协议 +* 请求地址:**/front/list?chainId={chainId}?frontId={frontId}&groupId={groupId}** +* 请求方式:GET +* 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +|------|-------------|---------------|--------|-------------------------------| +| 1 | chainId | Int | 是 | 链编号 | +| 2 | frontId | Int | 是 | 前置编号 | +| 3 | groupId | Int | 是 | 群组编号 | + + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/front/list +``` + + +#### 返回参数 + +***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 | chainId | Int | 否 | 链编号 | +| 4.1.3 | frontIp | String | 否 | 前置ip | +| 4.1.4 | frontPort | Int | 否 | 前置端口 | +| 4.1.5 | nodeId | String | 否 | 节点编号 | +| 4.1.6 | agency | String | 否 | 所属机构 | +| 4.1.7 | createTime | LocalDateTime | 否 | 落库时间 | +| 4.1.8 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** +* 成功: +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "chainId": 1, + "frontId": 1, + "nodeId": "944607f7e83efe2ba72476dc39a269a910811db8caac34f440dd9c9dd8ec2490b8854b903bd6c9b95c2c79909649977b8e92097c2f3ec32232c4f655b5a01850", + "frontIp": "localhost", + "frontPort": 5002, + "agency": "test", + "createTime": "2020-05-20 20:22:35", + "modifyTime": "2020-05-20 20:22:35" + } + ], + "totalCount": 1 +} +``` + +* 失败: +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + + +### 2.3 删除前置信息 + +#### 传输协议 +* 网络传输协议:使用HTTP协议 +* 请求地址:**/front/{frontId}** +* 请求方式:DELETE +* 请求头:Content-type: application/json +* 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +|------|-------------|---------------|--------|-------------------------------| +| 1 | frontId | Int | 否 | 前置编号 | + + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/front/1 +``` + + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +|------|-------------|---------------|--------|-------------------------------| +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | object | 是 | 返回信息实体(空) | + + +***2)出参示例*** +* 成功: +``` +{ + "code": 0, + "message": "success", + "data": null +} +``` + +* 失败: +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +## 3 群组管理模块 + +### 3.1 获取群组列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/group/list/{chainId}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ---- | ------ | ------ | +| 1 | chainId | Int | 否 | 链编号 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/group/list/1 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ------ | ---------------- | ------------- | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 否 | 列表 | +| 4.1 | | Object | | 信息对象 | +| 4.1.1 | chainId | Int | 否 | 链编号 | +| 4.1.2 | groupId | Int | 否 | 群组编号 | +| 4.1.3 | appName | String | 否 | 应用名称 | +| 4.1.4 | appVersion | String | 是 | 应用版本号 | +| 4.1.5 | appSummary | String | 是 | 应用概要介绍 | +| 4.1.6 | genesisBlockHash | String | 否 | 创世块hash | +| 4.1.7 | groupStatus | Int | 否 | 群组状态 | +| 4.1.8 | nodeCount | Int | 否 | 节点个数 | +| 4.1.9 | description | String | 否 | 应用描述 | +| 4.1.10 | createTime | LocalDateTime | 否 | 落库时间 | +| 4.1.11 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "chainId": 1, + "groupId": 1, + "appName": "APP1", + "appVersion": "v1.0.0", + "appSummary": "存证", + "genesisBlockHash": "0x7bc361d7d8e078ea9e8f352f2b856d6ea76ab1b9522f4b09853c861d0ed0779f", + "groupStatus": 1, + "nodeCount": 2, + "description": "test", + "createTime": "2020-05-20 20:22:35", + "modifyTime": "2020-05-20 20:31:38" + }, + { + "chainId": 1, + "groupId": 2, + "appName": "APP2", + "appVersion": "v1.0.0", + "appSummary": "供应链", + "genesisBlockHash": "0x1208de0d47dcba9447d304039d1e4512dd4ce740ec408ef83c5f7ee2aefc7468", + "groupStatus": 1, + "nodeCount": 2, + "description": "test", + "createTime": "2020-05-20 20:22:36", + "modifyTime": "2020-05-20 20:31:38" + } + ], + "totalCount": 2 +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +### 3.2 修改群组对应的应用信息 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址: **/group/update** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ----------- | ------ | ------ | ------------ | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | groupId | Int | 否 | 群组编号 | +| 3 | appName | String | 是 | 应用名称 | +| 4 | appVersion | String | 是 | 应用版本号 | +| 5 | appSummary | String | 是 | 应用概要介绍 | +| 6 | description | String | 是 | 应用描述 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/group/update +``` + +``` +{ + "chainId": 1, + "groupId": 1, + "appName": "存证", + "appVersion": "v1.0.0", + "appSummary": "存证测试", + "description": "这是一个存证应用" +} +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | -------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | Object | | | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": null +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +## 4 节点管理模块 + +### 4.1 查询群组节点列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/node/list/{chainId}/{groupId}/{pageNumber}/{pageSize}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ------ | ------ | ---------- | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | groupId | Int | 否 | 群组编号 | +| 3 | pageSize | Int | 否 | 每页记录数 | +| 4 | pageNumber | Int | 否 | 当前页码 | +| 5 | nodeId | String | 是 | 节点编号 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/node/nodeList/100001/300001/1/10 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ------ | ----------- | ------------- | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 是 | 节点列表 | +| 4.1 | | Object | | 节点信息对象 | +| 4.1.1 | chainId | int | 否 | 链编号 | +| 4.1.2 | nodeId | String | 否 | 节点编号 | +| 4.1.3 | nodeName | string | 否 | 节点名称 | +| 4.1.4 | groupId | int | 否 | 所属群组编号 | +| 4.1.5 | orgName | string | 是 | 机构名称 | +| 4.1.6 | nodeActive | int | 否 | 共识状态(1正常,2不正常) | +| 4.1.7 | nodeIp | string | 是 | 节点ip | +| 4.1.8 | P2pPort | int | 是 | 节点p2p端口 | +| 4.1.9 | description | String | 是 | 备注 | +| 4.1.10 | blockNumber | BigInteger | 否 | 节点块高 | +| 4.1.11 | pbftView | BigInteger | 否 | Pbft view | +| 4.1.12 | createTime | LocalDateTime | 否 | 落库时间 | +| 4.1.13 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "totalCount": 1, + "data": [ + { + "chainId": 100001, + "nodeId": "78e467957af3d0f77e19b952a740ba8c53ac76913df7dbd48d7a0fe27f4c902b55e8543e1c4f65b4a61695c3b490a5e8584149809f66e9ffc8c05b427e9d3ca2, + "nodeName": "1_78e467957af3d0f77e19b952a740ba8c53ac76913df7dbd48d7a0fe27f4c902b55e8543e1c4f65b4a61695c3b490a5e8584149809f66e9ffc8c05b", + "groupId": 1, + "orgName": "org", + "nodeIp": "127.0.0.1", + "p2pPort": 10303, + "description": null, + "blockNumber": 133, + "pbftView": 5852, + "nodeActive": 1, + "createTime": "2019-02-14 17:47:00", + "modifyTime": "2019-03-15 11:14:29" + } + ] +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +### 4.2 查询机构节点列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/node/orgList/{chainId}/{pageNumber}/{pageSize}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ---- | ------ | ---------- | +| 1 | chainId | int | 否 | 链编号 | +| 2 | pageSize | Int | 否 | 每页记录数 | +| 3 | pageNumber | Int | 否 | 当前页码 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/node/orgList/100001/1/10 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ----- | ----------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 是 | 节点列表 | +| 4.1 | | Object | | 节点信息对象 | +| 4.1.1 | chainId | Int | 否 | 链编号 | +| 4.1.2 | nodeId | String | 否 | 节点编号 | +| 4.1.3 | orgName | String | 是 | 机构名称 | +| 4.1.4 | description | String | 是 | 备注 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "totalCount": 1, + "data": [ + { + "chainId": 100001, + "nodeId": "78e467957af3d0f77e19b952a740ba8c53ac76913df7dbd48d7a0fe27f4c902b55e8543e1c4f65b4a61695c3b490a5e8584149809f66e9ffc8c05b427e9d3ca2, + "orgName": "org", + "description": "test" + } + ] +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +### 4.3 修改节点的机构信息 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址: **/node/update** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ----------- | ------ | ------ | -------- | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | nodeId | String | 否 | 节点编号 | +| 3 | orgName | String | 否 | 机构名称 | +| 4 | description | String | 是 | 描述 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/node/update +``` + +``` +{ + "chainId": 1, + "nodeId": "78e467957af3d0f77e19b952a740ba8c53ac76913df7dbd48d7a0fe27f4c902b55e8543e1c4f65b4a61695c3b490a5e8584149809f66e9ffc8c05b427e9d3ca2", + "orgName": "org", + "description": "test" +} +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | -------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | Object | | | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": null +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +## 5 用户管理模块 + +### 5.1 新增用户 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址: **/user/add** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ----------- | ------ | ------ | -------- | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | groupId | Int | 否 | 群组编号 | +| 3 | userName | String | 否 | 用户名 | +| 4 | address | String | 否 | 用户地址 | +| 5 | description | String | 是 | 描述 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/user/add +``` + +``` +{ + "address": "0x056a6b8bd27e861773ec2419a871ff245291a2d6", + "chainId": 1, + "description": "string", + "groupId": 1, + "userName": "alice" +} +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | 可为空 | 备注 | +| ---- | ----------- | ------------- | ------ | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | | Object | | 节点信息对象 | +| 3.1 | userId | Int | 否 | 用户编号 | +| 3.2 | chainId | Int | 否 | 链编号 | +| 3.3 | groupId | Int | 否 | 群组编号 | +| 3.2 | userName | String | 否 | 用户名 | +| 3.3 | address | String | 否 | 用户地址 | +| 3.4 | description | String | 是 | 描述 | +| 3.5 | createTime | LocalDateTime | 是 | 落库时间 | +| 3.6 | modifyTime | LocalDateTime | 是 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": { + "userId": 1, + "chainId": 1, + "groupId": 1, + "userName": "alice", + "address": "0x056a6b8bd27e861773ec2419a871ff245291a2d6", + "description": "test", + "createTime": "2020-06-02 20:35:20", + "modifyTime": "2020-06-02 20:35:20" + } +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +### 5.2 获取用户列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/user/list/{pageNumber}/{pageSize}?chainId={chainId}&groupId={groupId}&userParam={userParam}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ------ | ------ | ------------------ | +| 1 | pageNumber | Int | 否 | 当前页码 | +| 2 | pageSize | Int | 否 | 每页记录数 | +| 3 | chainId | Int | 是 | 链编号 | +| 4 | groupId | Int | 是 | 群组编号 | +| 5 | userParam | String | 是 | 参数,用户名或地址 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/user/list/1/2 +``` + +#### 返回参数 + +***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 | chainId | Int | 否 | 链编号 | +| 4.1.3 | groupId | Int | 否 | 群组编号 | +| 4.1.4 | userName | String | 否 | 用户名 | +| 4.1.5 | address | String | 否 | 用户地址 | +| 4.1.6 | description | String | 是 | 描述 | +| 4.1.7 | createTime | LocalDateTime | 否 | 落库时间 | +| 4.1.8 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "userId": 1, + "chainId": 1, + "groupId": 1, + "userName": "alice", + "address": "0x056a6b8bd27e861773ec2419a871ff245291a2d6", + "description": "test", + "createTime": "2020-06-02 20:35:20", + "modifyTime": "2020-06-02 20:35:20" + } + ], + "totalCount": 1 +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +### 5.3 删除用户 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/user/{userId}** +- 请求方式:DELETE +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ---- | ------ | -------- | +| 1 | userId | Int | 否 | 用户编号 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/user/1 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | -------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | object | 是 | 返回信息实体(空) | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": null +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +## 6 合约管理模块 + +### 6.1 保存合约和更新 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/contract/save** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------------- | ------ | ------ | ------------------------------------------ | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | groupId | Int | 否 | 群组编号 | +| 3 | contractName | String | 否 | 合约名称 | +| 4 | contractSource | String | 是 | 合约源码,Base64编码 | +| 5 | contractAbi | String | 是 | 编译合约生成的abi文件内容 | +| 6 | runtimeBin | String | 是 | 合约运行时binary,用于合约解析 | +| 7 | bytecodeBin | String | 是 | 合约bytecode binary,用于部署合约 | +| 8 | contractId | String | 是 | 合约编号(为空时表示新增,不为空表示更新) | +| 9 | contractPath | String | 否 | 合约所在目录 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/contract/save +``` + +``` +{ + "bytecodeBin": "608060405234801561001057600080fd5b50610373806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d146100515780633590b49f146100e1575b600080fd5b34801561005d57600080fd5b5061006661014a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100a657808201518184015260208101905061008b565b50505050905090810190601f1680156100d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100ed57600080fd5b50610148600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101ec565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b7f05432a43e07f36a8b98100b9cb3631e02f8e796b0a06813610ce8942e972fb81816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024e578082015181840152602081019050610233565b50505050905090810190601f16801561027b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1806000908051906020019061029e9291906102a2565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106102e357805160ff1916838001178555610311565b82800160010185558215610311579182015b828111156103105782518255916020019190600101906102f5565b5b50905061031e9190610322565b5090565b61034491905b80821115610340576000816000905550600101610328565b5090565b905600a165627a7a72305820cff924cb0783dc84e2e107aae1fd09e1e04154b80834c9267a4eaa630997b2b90029", + "chainId": 1, + "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\"}]", + "runtimeBin": "xxx", + "contractName": "HelloWorld", + "contractPath": "/", + "contractSource": "cHJhZ21hIHNvbGlkaXR5IF4wLjQuMjsNCmNvbnRyYWN0IEhlbGxvV29ybGR7DQogICAgc3RyaW5nIG5hbWU7DQogICAgZXZlbnQgU2V0TmFtZShzdHJpbmcgbmFtZSk7DQogICAgZnVuY3Rpb24gZ2V0KCljb25zdGFudCByZXR1cm5zKHN0cmluZyl7DQogICAgICAgIHJldHVybiBuYW1lOw0KICAgIH0NCiAgICBmdW5jdGlvbiBzZXQoc3RyaW5nIG4pew0KICAgICAgICBlbWl0IFNldE5hbWUobik7DQogICAgICAgIG5hbWU9bjsNCiAgICB9DQp9", + "groupId": 1 +} +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | -------------- | ------------- | ---- | --------------------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | | Object | | 返回信息实体 | +| 3.1 | contractId | Int | 否 | 合约编号 | +| 3.2 | contractPath | String | 否 | 合约所在目录 | +| 3.3 | contractName | String | 否 | 合约名称 | +| 3.4 | chainId | Int | 否 | 链编号 | +| 3.5 | groupId | Int | 否 | 群组编号 | +| 3.6 | contractType | Int | 否 | 合约类型(0-普通合约,1-系统合约,默认0) | +| 3.7 | contractSource | String | 否 | 合约源码 | +| 3.8 | contractAbi | String | 是 | 编译合约生成的abi文件内容 | +| 3.9 | runtimeBin | String | 是 | 合约运行时binary,用于合约解析 | +| 3.10 | bytecodeBin | String | 是 | 合约bytecode binary,用于部署合约 | +| 3.11 | description | String | 是 | 备注 | +| 3.12 | createTime | LocalDateTime | 否 | 创建时间 | +| 3.13 | modifyTime | LocalDateTime | 是 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": { + "contractId": 1, + "chainId": 1, + "groupId": 1, + "contractType": 0, + "contractPath": "/", + "contractName": "HelloWorld", + "contractSource": "cHJhZ21hIHNvbGlkaXR5IF4wLjQuMjsNCmNvbnRyYWN0IEhlbGxvV29ybGR7DQogICAgc3RyaW5nIG5hbWU7DQogICAgZXZlbnQgU2V0TmFtZShzdHJpbmcgbmFtZSk7DQogICAgZnVuY3Rpb24gZ2V0KCljb25zdGFudCByZXR1cm5zKHN0cmluZyl7DQogICAgICAgIHJldHVybiBuYW1lOw0KICAgIH0NCiAgICBmdW5jdGlvbiBzZXQoc3RyaW5nIG4pew0KICAgICAgICBlbWl0IFNldE5hbWUobik7DQogICAgICAgIG5hbWU9bjsNCiAgICB9DQp9", + "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\"}]", + "runtimeBin": "xxx", + "bytecodeBin": "608060405234801561001057600080fd5b50610373806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d146100515780633590b49f146100e1575b600080fd5b34801561005d57600080fd5b5061006661014a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100a657808201518184015260208101905061008b565b50505050905090810190601f1680156100d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100ed57600080fd5b50610148600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101ec565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b7f05432a43e07f36a8b98100b9cb3631e02f8e796b0a06813610ce8942e972fb81816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024e578082015181840152602081019050610233565b50505050905090810190601f16801561027b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1806000908051906020019061029e9291906102a2565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106102e357805160ff1916838001178555610311565b82800160010185558215610311579182015b828111156103105782518255916020019190600101906102f5565b5b50905061031e9190610322565b5090565b61034491905b80821115610340576000816000905550600101610328565b5090565b905600a165627a7a72305820cff924cb0783dc84e2e107aae1fd09e1e04154b80834c9267a4eaa630997b2b90029", + "description": null, + "createTime": "2020-06-02 20:50:58", + "modifyTime": "2020-06-02 20:50:58" + } +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +### 6.2 查询合约列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/contract/list** +- 请求方式:POST +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ------------ | ------ | ------ | ---------- | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | groupId | Int | 否 | 群组id | +| 3 | contractName | String | 是 | 合约名 | +| 4 | pageSize | Int | 是 | 每页记录数 | +| 5 | pageNumber | Int | 是 | 当前页码 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/contract/list +``` + +``` +{ + "chainId": 1, + "groupId": 1, + "pageNumber": 1, + "pageSize": 2 +} +``` + +#### 返回参数 + +***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 | chainId | Int | 否 | 链编号 | +| 5.1.5 | groupId | Int | 否 | 群组编号 | +| 5.1.6 | contractType | Int | 否 | 合约类型(0-普通合约,1-系统合约) | +| 5.1.7 | contractSource | String | 否 | 合约源码 | +| 5.1.8 | contractAbi | String | 是 | 编译合约生成的abi文件内容 | +| 5.1.9 | runtimeBin | String | 是 | 合约运行时binary,用于合约解析 | +| 5.1.10 | bytecodeBin | String | 是 | 合约bytecode binary,用于部署合约 | +| 5.1.11 | description | String | 是 | 备注 | +| 5.1.12 | createTime | LocalDateTime | 否 | 创建时间 | +| 5.1.13 | modifyTime | LocalDateTime | 是 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "contractId": 1, + "chainId": 1, + "groupId": 1, + "contractPath": "/", + "contractName": "HelloWorld", + "contractSource": "cHJhZ21hIHNvbGlkaXR5IF4wLjQuMjsNCmNvbnRyYWN0IEhlbGxvV29ybGR7DQogICAgc3RyaW5nIG5hbWU7DQogICAgZXZlbnQgU2V0TmFtZShzdHJpbmcgbmFtZSk7DQogICAgZnVuY3Rpb24gZ2V0KCljb25zdGFudCByZXR1cm5zKHN0cmluZyl7DQogICAgICAgIHJldHVybiBuYW1lOw0KICAgIH0NCiAgICBmdW5jdGlvbiBzZXQoc3RyaW5nIG4pew0KICAgICAgICBlbWl0IFNldE5hbWUobik7DQogICAgICAgIG5hbWU9bjsNCiAgICB9DQp9", + "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\"}]", + "runtimeBin": "xxx", + "bytecodeBin": "608060405234801561001057600080fd5b50610373806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d146100515780633590b49f146100e1575b600080fd5b34801561005d57600080fd5b5061006661014a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100a657808201518184015260208101905061008b565b50505050905090810190601f1680156100d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100ed57600080fd5b50610148600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101ec565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b7f05432a43e07f36a8b98100b9cb3631e02f8e796b0a06813610ce8942e972fb81816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024e578082015181840152602081019050610233565b50505050905090810190601f16801561027b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1806000908051906020019061029e9291906102a2565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106102e357805160ff1916838001178555610311565b82800160010185558215610311579182015b828111156103105782518255916020019190600101906102f5565b5b50905061031e9190610322565b5090565b61034491905b80821115610340576000816000905550600101610328565b5090565b905600a165627a7a72305820cff924cb0783dc84e2e107aae1fd09e1e04154b80834c9267a4eaa630997b2b90029", + "contractType": 0, + "description": null, + "createTime": "2020-06-02 20:50:58", + "modifyTime": "2020-06-02 20:50:58" + } + ], + "totalCount": 1 +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +### 6.3 删除合约 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/contract/{contractId}** +- 请求方式:DELETE +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ---- | ------ | -------- | +| 1 | contractId | Int | 否 | 合约编号 | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/contract/1 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | -------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | object | 是 | 返回信息实体(空) | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": null +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +### 6.4 保存合约方法信息 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/contract/addMethod** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ----- | ---------- | ------ | ------ | -------- | +| 1 | contractId | Int | 否 | 合约编号 | +| 2 | methodList | List | 否 | 方法列表 | +| 2.1 | | Object | 否 | 方法实体 | +| 2.1.1 | methodId | String | 否 | 方法编号 | +| 2.1.2 | methodName | String | 否 | 方法名 | +| 2.1.4 | methodType | String | 否 | 方法类型 | + +***2)入参示例*** + +``` +http://127.0.0.1:5009/WeBASE-Data-Collect/contract/addMethod +``` + +``` +{ + "contractId": 2, + "methodList": [ + { + "methodId": "0x3590b49f", + "methodName": "set", + "methodType": "function" + }, + { + "methodId": "0x9bd13510", + "methodName": "get", + "methodType": "function" + } + ] +} +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | -------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | object | 是 | 返回信息实体(空) | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": null +} +``` + +- 失败: + +``` +{ + "code": 109000, + "message": "system exception", + "data": {} +} +``` + +## 7. 编译器管理模块 + +### 7.1. 查询编译器列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/solc/list?encryptType={encryptType}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ----------- | ---- | ------ | ------------------------ | +| 1 | encryptType | Int | 是 | 类型(0-ecdsa;1-guomi) | + +***2)入参示例*** + +``` +http://localhost:5009/WeBASE-Data-Collect/solc/list +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ----- | ----------- | ------------- | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 否 | 列表 | +| 4.1 | | Object | | 对象 | +| 4.1.1 | id | Int | 否 | 编号 | +| 4.1.2 | solcName | Int | 否 | 编译器文件名 | +| 4.1.3 | encryptType | Int | 否 | 类型 | +| 4.1.4 | md5 | String | 否 | md5值 | +| 4.1.5 | fileSize | Long | 否 | 文件长度 | +| 4.1.6 | description | String | 是 | 描述 | +| 4.1.7 | createTime | LocalDateTime | 否 | 落库时间 | +| 4.1.8 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "id": 1, + "solcName": "soljson-v0.4.25-gm.js", + "encryptType": 1, + "md5": "c0810103136fb9177df943346b2dcad4", + "fileSize": 8273598, + "description": "guomi", + "createTime": "2020-06-14 11:05:56", + "modifyTime": "2020-06-14 11:05:56" + }, + { + "id": 2, + "solcName": "soljson-v0.4.25+commit.59dbf8f1.js", + "encryptType": 0, + "md5": "e201c5913e0982cb90cdb2a711e36f63", + "fileSize": 8276063, + "description": "ecdsa", + "createTime": "2020-06-14 11:19:10", + "modifyTime": "2020-06-14 11:19:10" + } + ] +} +``` + +## 附录 + +### 1. 返回码信息列表 + +| Code | message | 描述 | +| ------ | -------------------------------- | ------------------ | +| 0 | success | 正常 | +| 109000 | system exception | 系统异常 | +| 109001 | param exception | 请求参数错误 | +| 109002 | database exception | 数据库异常 | +| 209001 | chain id already exists | 链编号已经存在 | +| 209002 | chain name already exists | 链名称已经存在 | +| 209003 | save chain fail | 链保存失败 | +| 209004 | invalid chain id | 无效链编号 | +| 209005 | invalid encrypt type | 无效链加密类型 | +| 209006 | chain id not exists | 链编号不存在 | +| 209101 | wrong host or port | ip或端口错误 | +| 209102 | invalid front id | 无效前置编号 | +| 209103 | not found any front | 找不到前置 | +| 209104 | front already exists | 前置已经存在 | +| 209105 | save front fail | 前置保存失败 | +| 209106 | request front fail | 前置请求失败 | +| 209107 | request node exception | 前置节点请求失败 | +| 209108 | front's encrypt type not matches | 前置类型不匹配 | +| 209109 | invalid block number | 无效块高 | +| 209110 | invalid node id | 无效节点编号 | +| 209201 | invalid group id | 无效群组编号 | +| 209202 | group name already exist | 群组名称已存在 | +| 209301 | user name already exists | 用户名已存在 | +| 209302 | user address already exists | 用户地址已存在 | +| 209401 | contract already exists | 合约已存在 | +| 209402 | invalid contract id | 无效合约编号 | +| 209403 | contract name cannot be repeated | 合约名重复 | +| 209501 | task is still running | 任务正在执行 | +| 209502 | block has been reset | 区块已重置 | +| 209601 | solc js file cannot be empty | 编译器文件不能为空 | +| 209602 | solc js file already exist | 编译器文件已存在 | +| 209603 | solc js file not exist | 编译器文件不存在 | +| 209604 | save solc js file error | 编译器文件保存失败 | +| 209605 | read solc js file error | 编译器文件读取失败 | \ No newline at end of file diff --git a/docs/WeBASE-Data/WeBASE-Data-Fetcher.md b/docs/WeBASE-Data/WeBASE-Data-Fetcher.md new file mode 100644 index 00000000..d3565b12 --- /dev/null +++ b/docs/WeBASE-Data/WeBASE-Data-Fetcher.md @@ -0,0 +1,2032 @@ + +# WeBASE-Data-Fetcher接口说明 + +## 1 区块链管理模块 + +### 1.1 全量数据概览 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/chain/general** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +无 + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/chain/general +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | ------------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | object | 否 | 返回信息实体 | +| 2.1 | chainCount | Int | 是 | 链数量 | +| 2.2 | groupCount | int | 否 | 群组数量 | +| 2.3 | blockCount | int | 否 | 区块数量 | +| 2.4 | txnCount | int | 否 | 交易数量 | +| 2.5 | userCount | int | 否 | 用户数量 | +| 2.6 | contractCount | int | 否 | 合约数量 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": { + "chainCount": 1, + "groupCount": 2, + "blockCount": 360, + "txnCount": 360, + "userCount": 28, + "contractCount": 77 + } +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 1.2 查询链列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/chain/all** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +无 + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/chain/all +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ----- | ----------- | ------------- | ---- | ------------------------------ | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 否 | 组织列表 | +| 4.1 | | Object | | 信息对象 | +| 4.1.1 | chainId | Int | 否 | 链编号 | +| 4.1.2 | chainName | String | 否 | 链名称 | +| 4.1.3 | chainType | Int | 否 | 链类型( 0-fisco 1-fabric) | +| 4.1.4 | encryptType | Int | 否 | 链加密类型(0-非国密,1-国密) | +| 4.1.5 | description | String | 是 | 备注 | +| 4.1.6 | createTime | LocalDateTime | 否 | 落库时间 | +| 4.1.7 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "chainId": 1, + "chainName": "链一", + "chainType": 0, + "encryptType": 0, + "description": "test" + "createTime": "2019-02-14 17:47:00", + "modifyTime": "2019-03-15 11:14:29" + } + ], + "totalCount": 1 +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +## 2 群组管理模块 + +### 2.1 查询群组列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/group/list** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ---- | ------ | ------ | +| 1 | chainId | Int | 是 | 链编号 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/group/list?chainId=1 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ------ | ---------------- | ------------- | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 否 | 列表 | +| 4.1 | | Object | | 信息对象 | +| 4.1.1 | chainId | Int | 否 | 链编号 | +| 4.1.2 | groupId | Int | 否 | 群组编号 | +| 4.1.3 | appName | String | 否 | 应用名称 | +| 4.1.4 | appVersion | String | 是 | 应用版本号 | +| 4.1.5 | appSummary | String | 是 | 应用概要介绍 | +| 4.1.6 | genesisBlockHash | String | 否 | 创世块hash | +| 4.1.7 | groupStatus | Int | 否 | 群组状态 | +| 4.1.8 | nodeCount | Int | 否 | 节点个数 | +| 4.1.9 | description | String | 否 | 应用描述 | +| 4.1.10 | createTime | LocalDateTime | 否 | 落库时间 | +| 4.1.11 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "chainId": 1, + "groupId": 1, + "appName": "APP1", + "appVersion": "v1.0.0", + "appSummary": "存证", + "genesisBlockHash": "0x7bc361d7d8e078ea9e8f352f2b856d6ea76ab1b9522f4b09853c861d0ed0779f", + "groupStatus": 1, + "nodeCount": 2, + "description": "test", + "createTime": "2020-05-20 20:22:35", + "modifyTime": "2020-05-20 20:31:38" + }, + { + "chainId": 1, + "groupId": 2, + "appName": "APP2", + "appVersion": "v1.0.0", + "appSummary": "供应链", + "genesisBlockHash": "0x1208de0d47dcba9447d304039d1e4512dd4ce740ec408ef83c5f7ee2aefc7468", + "groupStatus": 1, + "nodeCount": 2, + "description": "test", + "createTime": "2020-05-20 20:22:36", + "modifyTime": "2020-05-20 20:31:38" + } + ], + "totalCount": 2 +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 2.2 查询群组概况 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/group/general/{chainId}/{groupId}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ---- | ------ | ------ | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | groupId | int | 否 | 群组id | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/group/general/1/1 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | ------------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | object | 否 | 返回信息实体 | +| 2.1 | chainId | Int | 是 | 链编号 | +| 2.2 | groupId | int | 否 | 群组id | +| 2.3 | nodeCount | int | 否 | 节点数量 | +| 2.4 | userCount | int | 否 | 用户数量 | +| 2.5 | contractCount | int | 否 | 已部署智能合约数量 | +| 2.6 | txnCount | int | 否 | 交易数量 | +| 2.7 | blockNumber | int | 否 | 当前块高 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": { + "chainId": 1, + "groupId": 1, + "nodeCount": 3, + "userCount": 22, + "contractCount": 58, + "txnCount": 237, + "blockNumber": 237 + } +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 2.3 查询近七日交易数据 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/group/txnDaily/{chainId}/{groupId}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ---- | ------ | ------ | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | groupId | int | 否 | 群组id | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/group/txnDaily/1/1 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | -------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | list | 否 | 返回信息列表 | +| 4 | | object | | 返回信息实体 | +| 4.1 | statDate | string | 否 | 日期YYYY-MM-DD | +| 4.2 | chainId | Int | 是 | 链编号 | +| 4.3 | groupId | int | 否 | 群组编号 | +| 4.4 | txn | int | 否 | 交易数量 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "data": [ + { + "statDate": "2018-11-22", + "chainId": "1", + "groupId": "1", + "txn": 10 + }, + { + "statDate": "2018-11-21", + "chainId": "1", + "groupId": "1", + "txn": 5 + } + ], + "message": "Success" +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 2.4 查询群组节点列表 + +#### 传输协议规范 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/group/nodeList/{chainId}/{groupId}/{pageNumber}/{pageSize}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ---- | ------ | ---------- | +| 1 | chainId | int | 否 | 链编号 | +| 2 | groupId | int | 否 | 群组编号 | +| 3 | pageSize | Int | 否 | 每页记录数 | +| 4 | pageNumber | Int | 否 | 当前页码 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/group/nodeList/100001/300001/1/10 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ------ | ----------- | ------------- | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 是 | 节点列表 | +| 4.1 | | Object | | 信息对象 | +| 4.1.1 | chainId | int | 否 | 链编号 | +| 4.1.2 | nodeId | String | 否 | 节点编号 | +| 4.1.3 | nodeName | string | 否 | 节点名称 | +| 4.1.4 | groupId | int | 否 | 所属群组编号 | +| 4.1.5 | orgName | string | 是 | 机构名称 | +| 4.1.6 | nodeActive | int | 否 | 共识状态(1正常,2不正常) | +| 4.1.7 | nodeIp | string | 是 | 节点ip | +| 4.1.8 | P2pPort | int | 是 | 节点p2p端口 | +| 4.1.9 | description | String | 是 | 备注 | +| 4.1.10 | blockNumber | BigInteger | 否 | 节点块高 | +| 4.1.11 | pbftView | BigInteger | 否 | Pbft view | +| 4.1.12 | createTime | LocalDateTime | 否 | 落库时间 | +| 4.1.13 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "totalCount": 1, + "data": [ + { + "chainId": 100001, + "nodeId": "78e467957af3d0f77e19b952a740ba8c53ac76913df7dbd48d7a0fe27f4c902b55e8543e1c4f65b4a61695c3b490a5e8584149809f66e9ffc8c05b427e9d3ca2, + "nodeName": "1_78e467957af3d0f77e19b952a740ba8c53ac76913df7dbd48d7a0fe27f4c902b55e8543e1c4f65b4a61695c3b490a5e8584149809f66e9ffc8c05b", + "groupId": 1, + "orgName": "org", + "nodeIp": "127.0.0.1", + "p2pPort": 10303, + "description": null, + "blockNumber": 133, + "pbftView": 5852, + "nodeActive": 1, + "createTime": "2019-02-14 17:47:00", + "modifyTime": "2019-03-15 11:14:29" + } + ] +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 2.5 查询机构节点列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/group/orgList/{chainId}/{pageNumber}/{pageSize}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ---- | ------ | ---------- | +| 1 | chainId | int | 否 | 链编号 | +| 2 | pageSize | Int | 否 | 每页记录数 | +| 3 | pageNumber | Int | 否 | 当前页码 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/group/orgList/100001/1/10 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ----- | ----------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 是 | 节点列表 | +| 4.1 | | Object | | 信息对象 | +| 4.1.1 | chainId | Int | 否 | 链编号 | +| 4.1.2 | nodeId | String | 否 | 节点编号 | +| 4.1.3 | orgName | String | 是 | 机构名称 | +| 4.1.4 | description | String | 是 | 备注 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "totalCount": 1, + "data": [ + { + "chainId": 100001, + "nodeId": "78e467957af3d0f77e19b952a740ba8c53ac76913df7dbd48d7a0fe27f4c902b55e8543e1c4f65b4a61695c3b490a5e8584149809f66e9ffc8c05b427e9d3ca2, + "orgName": "org", + "description": "test" + } + ] +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 2.6 查询区块列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/group/blockList/{chainId}/{groupId}/{pageNumber}/{pageSize}}?blockHash={blockHash}&blockNumber={blockNumber}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ----------- | ---------- | ------ | ---------- | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | groupId | Int | 否 | 群组编号 | +| 3 | pageSize | Int | 否 | 每页记录数 | +| 4 | pageNumber | Int | 否 | 当前页码 | +| 5 | blockHash | String | 是 | 区块hash | +| 6 | blockNumber | BigInteger | 是 | 块高 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/group/blockList/1/1/1/2?blockHash= +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ----- | -------------- | ------------- | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 是 | 区块列表 | +| 4.1 | | Object | | 区块信息对象 | +| 4.1.1 | blockHash | 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 | blockDetail | String | 否 | 区块详情 | +| 4.1.8 | createTime | LocalDateTime | 否 | 创建时间 | +| 4.1.9 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "id": 26, + "blockHash": "0x1d0a57a6ee2b73e537ef6d929c8d0bdb2a9799dd6357f04dc5f38e4e0c6c5ac2", + "blockNumber": 35, + "blockTimestamp": "2020-05-13 19:47:37", + "transCount": 1, + "sealerIndex": 0, + "sealer": "944607f7e83efe2ba72476dc39a269a910811db8caac34f440dd9c9dd8ec2490b8854b903bd6c9b95c2c79909649977b8e92097c2f3ec32232c4f655b5a01850", + "blockDetail": "", + "createTime": "2020-05-20 20:22:41", + "modifyTime": "2020-05-20 20:22:41" + }, + { + "id": 8, + "blockHash": "0x4c29bb921f4bf346ad1f92704e225f6323c85f16f2fa4eb0e3f126355ff9fa12", + "blockNumber": 34, + "blockTimestamp": "2020-05-13 19:12:20", + "transCount": 1, + "sealerIndex": 0, + "sealer": "944607f7e83efe2ba72476dc39a269a910811db8caac34f440dd9c9dd8ec2490b8854b903bd6c9b95c2c79909649977b8e92097c2f3ec32232c4f655b5a01850", + "blockDetail": "", + "createTime": "2020-05-20 20:22:41", + "modifyTime": "2020-05-20 20:22:41" + } + ], + "totalCount": 36 +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + + +### 2.7 查询交易列表 + +#### 传输协议 + +* 网络传输协议:使用HTTP协议 +* 请求地址: +``` +/group/transList/{chainId}/{groupId}/{pageNumber}/{pageSize}?transHash={transHash}&blockNumber={blockNumber} +``` +* 请求方式:GET +* 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +|------|-------------|---------------|--------|-------------------------------| +| 1 | chainId | Int | 否 | 链编号 | +| 2 | groupId | Int | 否 | 群组编号 | +| 3 | pageNumber | Int | 否 | 当前页码 | +| 4 | pageSize | Int | 否 | 每页记录数 | +| 5 | transHash | String | 是 | 交易hash | +| 6 | blockNumber | BigInteger | 是 | 块高 | + + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/group/transList/1/1/1/2?transHash=0x4933b1e0a7d6913a2179b879cdf716096d8da1c162fe400a492b0d61259e2ab2 +``` + + +#### 返回参数 + +***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 | blockTimestamp | LocalDateTime | 否 | 所属块出块时间 | +| 4.1.4 | transDetail | String | 否 | 交易详情 | +| 4.1.5 | receiptDetail | String | 否 | 交易回执详情 | +| 4.1.6 | auditFlag | Int | 否 | 是否已统计(1-未审计,2-已审计) | +| 4.1.7 | createTime | LocalDateTime | 否 | 落库时间 | +| 4.1.8 | modifyTime | LocalDateTime | 否 | 修改时间 | + + +***2)出参示例*** +* 成功: +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "id": 26, + "transHash": "0x4933b1e0a7d6913a2179b879cdf716096d8da1c162fe400a492b0d61259e2ab2", + "blockNumber": 35, + "blockTimestamp": "2020-05-13 19:47:37", + "transDetail": "{}", + "receiptDetail": "{}", + "auditFlag": 1, + "createTime": "2020-05-20 20:22:41", + "modifyTime": "2020-05-20 20:22:41" + } + ], + "totalCount": 1 +} +``` + +* 失败: +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 2.8 查询用户列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/group/userList/{chainId}/{groupId}/{pageNumber}/{pageSize}?userParam={userParam}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ------ | ------ | ------------------ | +| 1 | pageNumber | Int | 否 | 当前页码 | +| 2 | pageSize | Int | 否 | 每页记录数 | +| 3 | chainId | Int | 否 | 链编号 | +| 4 | groupId | Int | 否 | 群组编号 | +| 5 | userParam | String | 是 | 参数,用户名或地址 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/group/userList/1/1/1/2 +``` + +#### 返回参数 + +***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 | userAddress | String | 否 | 用户地址 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "userName": "alice", + "userAddress": "0x056a6b8bd27e861773ec2419a871ff245291a2d6" + } + ], + "totalCount": 1 +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 2.9 查询合约列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/group/contractList/{chainId}/{groupId}/{pageNumber}/{pageSize}?contractParam={contractParam}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ------------- | ------ | ------ | ------------ | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | groupId | Int | 否 | 群组id | +| 3 | pageSize | Int | 是 | 每页记录数 | +| 4 | pageNumber | Int | 是 | 当前页码 | +| 5 | contractParam | String | 是 | 合约名或地址 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/group/contractList/1/1/1/2 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ----- | --------------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 是 | 列表 | +| 5.1 | | Object | | 返回信息实体 | +| 5.1.1 | contractName | String | 否 | 合约名称 | +| 5.1.2 | contractAddress | String | 否 | 合约地址 | +| 5.1.3 | contractAbi | String | 是 | 合约abi文件内容 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "contractName": "ConsensusPrecompiled", + "contractAddress": "0x0000000000000000000000000000000000001003", + "contractAbi": "[{\"constant\":false,\"inputs\":[{\"name\":\"nodeID\",\"type\":\"string\"}],\"name\":\"addObserver\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"nodeID\",\"type\":\"string\"}],\"name\":\"remove\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"nodeID\",\"type\":\"string\"}],\"name\":\"addSealer\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" + } + ], + "totalCount": 1 +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +## 3 数据检索模块 + +### 3.1 普通检索 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/search/normal** +- 请求方式:POST +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ------------- | ------ | ------ | ---------------------------------------- | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | groupId | Int | 否 | 群组编号 | +| 3 | pageSize | Int | 否 | 每页记录数 | +| 4 | pageNumber | Int | 否 | 当前页码 | +| 5 | searchType | Int | 否 | 检索类型:1-区块;2-交易;3-用户;4-合约 | +| 6 | blockParam | String | 是 | 块高或区块Hash,检索类型为1时必填 | +| 7 | transHash | String | 是 | 交易Hash,检索类型为2时必填 | +| 8 | userParam | String | 是 | 用户名称或地址,检索类型为3时必填 | +| 9 | contractParam | String | 是 | 合约名称或地址,检索类型为4时必填 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/search/normal +``` + +``` +{ + "chainId": 1, + "groupId": 1, + "pageSize": 1, + "pageNumber": 1, + "searchType": 2, + "transHash": "0x16dafe7f879f13d5fca6046e87022cdf71c9076b90c90b12403b82e1b68d3a22" +} +``` + +#### 返回参数 + +***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 | blockTimestamp | LocalDateTime | 否 | 出块时间 | +| 4.1.4 | userName | String | 否 | 用户名称 | +| 4.1.5 | userAddress | String | 否 | 用户地址 | +| 4.1.6 | userType | Int | 否 | 用户类型(0-正常,1-异常) | +| 4.1.7 | contractName | String | 否 | 合约名称 | +| 4.1.8 | contractAddress | String | 否 | 合约地址 | +| 4.1.9 | interfaceName | String | 否 | 合约接口名 | +| 4.1.10 | transType | Int | 否 | 交易类型(0-合约部署,1-接口调用) | +| 4.1.11 | transParserType | Int | 否 | 交易解析类型(0-正常,1-异常合约,2-异常接口) | +| 4.1.12 | input | String | 是 | 交易输入信息 | +| 4.1.13 | output | String | 是 | 交易输出信息 | +| 4.1.14 | logs | String | 是 | 交易event信息 | +| 4.1.15 | transDetail | String | 是 | 交易详情 | +| 4.1.16 | receiptDetail | String | 是 | 交易回执详情 | +| 4.1.17 | createTime | LocalDateTime | 否 | 创建时间 | +| 4.1.18 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "transHash": "0x16dafe7f879f13d5fca6046e87022cdf71c9076b90c90b12403b82e1b68d3a22", + "blockNumber": 35, + "blockTimestamp": "2020-05-13 19:47:37", + "userName": "alice", + "userAddress": "0x7939e26070be44e6c4fc759ce55c6c8b166d94be", + "userType": 0, + "contractName": "HelloWorld", + "contractAddress": "0x970d7d42726e8f1069f6d9aa0aca10e950fcebf9", + "interfaceName": "set(string)", + "transType": 1, + "transParserType": 0, + "input":"[{\"name\":\"n\",\"type\":\"string\",\"data\":\"test\"}]", + "output":"", + "logs":"{\"SetName(string)\":[[{\"name\":\"name\",\"type\":\"string\",\"data\":\"test\",\"indexed\":false}]]}", + "transDetail":"{}", + "receiptDetail":"{}", + "createTime": "2020-05-20 20:22:41", + "modifyTime": "2020-05-20 20:22:41" + } + ], + "totalCount": 1 +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 3.2 关键字检索 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/search/keyword/{pageNumber}/{pageSize}?keyword={keyword}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ------ | ------ | -------------- | +| 1 | pageSize | Int | 否 | 每页记录数 | +| 2 | pageNumber | Int | 否 | 当前页码 | +| 3 | keyword | String | 否 | 要检索的关键字 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/search/keyword/1/2?keyword="测试" +``` + +#### 返回参数 + +***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 | blockTimestamp | LocalDateTime | 否 | 出块时间 | +| 4.1.4 | userName | String | 否 | 用户名称 | +| 4.1.5 | userAddress | String | 否 | 用户地址 | +| 4.1.6 | userType | Int | 否 | 用户类型(0-正常,1-异常) | +| 4.1.7 | contractName | String | 否 | 合约名称 | +| 4.1.8 | contractAddress | String | 否 | 合约地址 | +| 4.1.9 | interfaceName | String | 否 | 合约接口名 | +| 4.1.10 | transType | Int | 否 | 交易类型(0-合约部署,1-接口调用) | +| 4.1.11 | transParserType | Int | 否 | 交易解析类型(0-正常,1-异常合约,2-异常接口) | +| 4.1.12 | input | String | 是 | 交易输入信息 | +| 4.1.13 | output | String | 是 | 交易输出信息 | +| 4.1.14 | logs | String | 是 | 交易event信息 | +| 4.1.15 | chainId | Int | 否 | 链编号 | +| 4.1.16 | groupId | Int | 否 | 群组编号 | +| 4.1.17 | createTime | LocalDateTime | 否 | 创建时间 | +| 4.1.18 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "transParserType": 0, + "transHash": "0xd33a6343ecee98cd6804456d34299d893258e5e3ebc2b8d6d57dc1fdc9a34b43", + "groupId": 1, + "contractAddress": "0x513657158171fc69017b52ea997bdf49cd0260ba", + "userName": "bob", + "userAddress": "0x7939e26070be44e6c4fc759ce55c6c8b166d94be", + "output": null, + "input": "[{\"name\":\"n\",\"type\":\"string\",\"data\":\"试验\"}]", + "modifyTime": "2020-07-14 17:51:26", + "transType": 1, + "chainId": 1, + "createTime": "2020-07-14 17:51:26", + "blockNumber": 312, + "contractName": "HelloWorld", + "blockTimestamp": "2020-07-14 17:51:12", + "id": 312, + "userType": 0, + "interfaceName": "set(string)", + "logs": "{\"SetName(string)\":[[{\"name\":\"name\",\"type\":\"string\",\"data\":\"试验\",\"indexed\":false}]]}" + } + ], + "totalCount": 1 +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +## 4 关键字管理模块 + +### 4.1 新增关键字 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址: **/keywords/add** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ------ | ------ | ------ | +| 1 | keyword | String | 否 | 关键字 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/keywords/add +``` + +``` +{ + "keyword": "禽流感" +} +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ------------- | ------ | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | Object | | 信息对象 | +| 3.1 | id | Int | 否 | 编号 | +| 3.2 | keyword | String | 否 | 关键字 | +| 3.3 | createTime | LocalDateTime | 是 | 落库时间 | +| 3.2 | modifyTime | LocalDateTime | 是 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": { + "id": 1, + "keyword": "禽流感", + "createTime": "2020-07-30 20:14:38", + "modifyTime": "2020-07-30 20:14:38" + } +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 4.2 获取关键字列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/keywords/list/{pageNumber}/{pageSize}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ---- | ------ | ---------- | +| 1 | pageNumber | Int | 否 | 当前页码 | +| 2 | pageSize | Int | 否 | 每页记录数 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/keywords/list/1/2 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ----- | ---------- | ------------- | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 否 | 列表 | +| 4.1 | | Object | | 对象 | +| 4.1.1 | id | Int | 否 | 编号 | +| 4.1.2 | keyword | String | 否 | 关键字 | +| 4.1.3 | createTime | LocalDateTime | 否 | 落库时间 | +| 4.1.4 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "id": 1, + "keyword": "禽流感", + "createTime": "2020-07-30 20:14:38", + "modifyTime": "2020-07-30 20:14:38" + } + ], + "totalCount": 1 +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 4.3 修改关键字 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址: **/keywords/update** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ------ | ------ | ---------- | +| 1 | id | Int | 否 | 关键字编号 | +| 2 | keyword | String | 否 | 关键字 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/keywords/update +``` + +``` +{ + "id": 1, + "keyword": "冠状病毒" +} +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ------------- | ------ | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | Object | | 信息对象 | +| 3.1 | id | Int | 否 | 编号 | +| 3.2 | keyword | String | 否 | 关键字 | +| 3.3 | createTime | LocalDateTime | 是 | 落库时间 | +| 3.2 | modifyTime | LocalDateTime | 是 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": { + "id": 1, + "keyword": "冠状病毒", + "createTime": "2020-07-30 20:14:38", + "modifyTime": "2020-07-30 20:15:35" + } +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 4.4 删除关键字 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/keywords/{id}** +- 请求方式:DELETE +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ---- | ------ | ---------- | +| 1 | id | Int | 否 | 关键字编号 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/keywords/1 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | -------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | object | 是 | 返回信息实体(空) | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": null +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +## 5 交易告警信息管理模块 + +### 5.1 新增告警信息 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址: **/transAudit/add** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | --------- | ------ | ------ | --------------------------------- | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | groupId | Int | 否 | 群组编号 | +| 3 | type | Int | 否 | 信息来源类型,1-关键字 2-交易列表 | +| 4 | keyword | String | 是 | 关键字,type为1是必填 | +| 5 | comment | String | 否 | 监管意见 | +| 6 | txHash | String | 否 | 交易hash | +| 7 | address | String | 否 | 用户地址 | +| 8 | chainName | String | 是 | 链名称 | +| 9 | appName | String | 是 | 应用名称 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/transAudit/add +``` + +``` +{ + "chainId": 1, + "groupId": 1, + "type": 1, + "keyword": "禽流感", + "comment": "停止售卖", + "txHash": "0x8e8b15e87f09e35f4ce811fb61b0bbd730eab0cfe63a350e2bab6f7a2bfe36b0", + "address": "0xd0332a67b2136ff5767c9ee7b775be83950da59c", + "chainName": "存证链", + "appName": "文件存证" +} +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | ---------- | ------------- | ---- | --------------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | Object | | 信息对象 | +| 3.1 | id | Int | 否 | 编号 | +| 3.2 | chainId | Int | 否 | 链编号 | +| 3.3 | groupId | Int | 否 | 群组编号 | +| 3.4 | type | Int | 否 | 信息来源类型,1-关键字 2-交易列表 | +| 3.5 | keyword | String | 否 | 关键字 | +| 3.6 | comment | String | 否 | 监管意见 | +| 3.7 | txHash | String | 否 | 交易hash | +| 3.8 | address | String | 否 | 用户地址 | +| 3.9 | status | Int | 否 | 状态(1-未处理, 2-已处理) | +| 3.10 | chainName | String | 是 | 链名称 | +| 3.11 | appName | String | 是 | 应用名称 | +| 3.12 | createTime | LocalDateTime | 否 | 落库时间 | +| 3.13 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": { + "id": 1, + "chainId": 1, + "groupId": 1, + "type": 1, + "keyword": "禽流感", + "comment": "停止售卖", + "txHash": "0x8e8b15e87f09e35f4ce811fb61b0bbd730eab0cfe63a350e2bab6f7a2bfe36b0", + "address": "0xd0332a67b2136ff5767c9ee7b775be83950da59c", + "status": 1, + "chainName": "存证链", + "appName": "文件存证", + "createTime": "2020-07-30 20:19:39", + "modifyTime": "2020-07-30 20:19:39" + } +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 5.2 获取告警信息列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/transAudit/list/{pageNumber}/{pageSize}?status={status}&chainId={chainId}&groupId={groupId}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ---- | ------ | --------------------------- | +| 1 | pageNumber | Int | 否 | 当前页码 | +| 2 | pageSize | Int | 否 | 每页记录数 | +| 3 | status | Int | 是 | 状态(1-未处理, 2-已处理) | +| 4 | chainId | Int | 是 | 链编号 | +| 5 | groupId | Int | 是 | 群组编号 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/transAudit/list/1/2 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ------ | ---------- | ------------- | ---- | --------------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 否 | 列表 | +| 4.1 | | Object | | 对象 | +| 4.1.1 | id | Int | 否 | 编号 | +| 4.1.2 | chainId | Int | 否 | 链编号 | +| 4.1.3 | groupId | Int | 否 | 群组编号 | +| 4.1.4 | type | Int | 否 | 信息来源类型,1-关键字 2-交易列表 | +| 4.1.5 | keyword | String | 是 | 关键字 | +| 4.1.6 | comment | String | 是 | 监管意见 | +| 4.1.7 | txHash | String | 否 | 交易hash | +| 4.1.8 | address | String | 否 | 用户地址 | +| 4.1.9 | status | Int | 否 | 状态(1-未处理, 2-已处理) | +| 4.1.10 | chainName | String | 是 | 链名称 | +| 4.1.11 | appName | String | 是 | 应用名称 | +| 4.1.12 | createTime | LocalDateTime | 否 | 落库时间 | +| 4.1.13 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "id": 1, + "chainId": 1, + "groupId": 1, + "type": 1, + "keyword": "禽流感", + "comment": "停止售卖", + "txHash": "0x8e8b15e87f09e35f4ce811fb61b0bbd730eab0cfe63a350e2bab6f7a2bfe36b0", + "address": "0xd0332a67b2136ff5767c9ee7b775be83950da59c", + "status": 1, + "chainName": "存证链", + "appName": "文件存证", + "createTime": "2020-07-30 20:19:39", + "modifyTime": "2020-07-30 20:19:39" + } + ], + "totalCount": 1 +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 5.3 确认处理状态 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址: **/transAudit/confirm/{id}** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ---- | ------ | ------------ | +| 1 | id | Int | 否 | 告警信息编号 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/transAudit/confirm/1 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | ---------- | ------------- | ---- | --------------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | Object | | 信息对象 | +| 3.1 | id | Int | 否 | 编号 | +| 3.2 | chainId | Int | 否 | 链编号 | +| 3.3 | groupId | Int | 否 | 群组编号 | +| 3.4 | type | Int | 否 | 信息来源类型,1-关键字 2-交易列表 | +| 3.5 | keyword | String | 是 | 关键字 | +| 3.6 | comment | String | 否 | 监管意见 | +| 3.7 | txHash | String | 否 | 交易hash | +| 3.8 | address | String | 否 | 用户地址 | +| 3.9 | status | Int | 否 | 状态(1-未处理, 2-已处理) | +| 3.10 | chainName | String | 是 | 链名称 | +| 3.11 | appName | String | 是 | 应用名称 | +| 3.12 | createTime | LocalDateTime | 否 | 落库时间 | +| 3.13 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": { + "id": 1, + "chainId": 1, + "groupId": 1, + "type": 1, + "keyword": "禽流感", + "comment": "停止售卖", + "txHash": "0x8e8b15e87f09e35f4ce811fb61b0bbd730eab0cfe63a350e2bab6f7a2bfe36b0", + "address": "0xd0332a67b2136ff5767c9ee7b775be83950da59c", + "status": 2, + "chainName": "存证链", + "appName": "文件存证", + "createTime": "2020-07-30 20:19:39", + "modifyTime": "2020-07-30 20:22:06" + } +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 5.4 删除告警信息 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/transAudit/{id}** +- 请求方式:DELETE +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ---- | ------ | ------------ | +| 1 | id | Int | 否 | 告警信息编号 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/transAudit/1 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | -------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | object | 是 | 返回信息实体(空) | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": null +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +## 6 应用告警信息管理模块 + +### 6.1 新增告警信息 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址: **/appAudit/add** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ------ | ------ | ---------- | +| 1 | chainId | Int | 否 | 链编号 | +| 2 | groupId | Int | 否 | 群组编号 | +| 3 | comment | String | 否 | 监管意见 | +| 4 | chainName | String | 是 | 链名称 | +| 5 | appName | String | 是 | 应用名称 | +| 6 | appVersion | String | 是 | 应用版本号 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/appAudit/add +``` + +``` +{ + "chainId": 1, + "groupId": 1, + "comment": "停止", + "chainName": "存证链", + "appName": "文件存证", + "appVersion": "1.0.0" +} +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | ---------- | ------------- | ---- | --------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | Object | | 信息对象 | +| 3.1 | id | Int | 否 | 编号 | +| 3.2 | chainId | Int | 否 | 链编号 | +| 3.3 | groupId | Int | 否 | 群组编号 | +| 3.4 | comment | String | 否 | 监管意见 | +| 3.5 | chainName | String | 是 | 链名称 | +| 3.6 | appName | String | 是 | 应用名称 | +| 3.7 | appVersion | String | 是 | 应用版本号 | +| 3.8 | status | Int | 否 | 状态(1-未处理, 2-已处理) | +| 3.9 | createTime | LocalDateTime | 否 | 落库时间 | +| 3.10 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": { + "id": 1, + "chainId": 1, + "groupId": 1, + "comment": "停止", + "chainName": "存证链", + "appName": "文件存证", + "appVersion": "1.0.0", + "status": 1, + "createTime": "2020-07-30 20:19:39", + "modifyTime": "2020-07-30 20:19:39" + } +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 6.2 获取告警信息列表 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/appAudit/list/{pageNumber}/{pageSize}?chainId={chainId}** +- 请求方式:GET +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | ---------- | ---- | ------ | ---------- | +| 1 | pageNumber | Int | 否 | 当前页码 | +| 2 | pageSize | Int | 否 | 每页记录数 | +| 3 | chainId | Int | 是 | 链编号 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/appAudit/list/1/2 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ------ | ---------- | ------------- | ---- | --------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | totalCount | Int | 否 | 总记录数 | +| 4 | data | List | 否 | 列表 | +| 4.1 | | Object | | 对象 | +| 4.1.1 | id | Int | 否 | 编号 | +| 4.1.2 | chainId | Int | 否 | 链编号 | +| 4.1.3 | groupId | Int | 否 | 群组编号 | +| 4.1.4 | comment | String | 否 | 监管意见 | +| 4.1.5 | chainName | String | 是 | 链名称 | +| 4.1.6 | appName | String | 是 | 应用名称 | +| 4.1.7 | appVersion | String | 是 | 应用版本号 | +| 4.1.8 | status | Int | 否 | 状态(1-未处理, 2-已处理) | +| 4.1.9 | createTime | LocalDateTime | 否 | 落库时间 | +| 4.1.10 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "id": 1, + "chainId": 1, + "groupId": 1, + "comment": "停止", + "chainName": "存证链", + "appName": "文件存证", + "appVersion": "1.0.0", + "status": 1, + "createTime": "2020-07-30 20:19:39", + "modifyTime": "2020-07-30 20:19:39" + } + ], + "totalCount": 1 +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 6.3 确认处理状态 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址: **/appAudit/confirm/{id}** +- 请求方式:POST +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ---- | ------ | ------------ | +| 1 | id | Int | 否 | 告警信息编号 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/appAudit/confirm/1 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | ---------- | ------------- | ---- | --------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | Object | | 信息对象 | +| 3.1 | id | Int | 否 | 编号 | +| 3.2 | chainId | Int | 否 | 链编号 | +| 3.3 | groupId | Int | 否 | 群组编号 | +| 3.4 | comment | String | 否 | 监管意见 | +| 3.5 | chainName | String | 是 | 链名称 | +| 3.6 | appName | String | 是 | 应用名称 | +| 3.7 | appVersion | String | 是 | 应用版本号 | +| 3.8 | status | Int | 否 | 状态(1-未处理, 2-已处理) | +| 3.9 | createTime | LocalDateTime | 否 | 落库时间 | +| 3.10 | modifyTime | LocalDateTime | 否 | 修改时间 | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": { + "id": 1, + "chainId": 1, + "groupId": 1, + "comment": "停止", + "chainName": "存证链", + "appName": "文件存证", + "appVersion": "1.0.0", + "status": 2, + "createTime": "2020-07-30 20:19:39", + "modifyTime": "2020-07-30 20:22:06" + } +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +### 6.4 删除告警信息 + +#### 传输协议 + +- 网络传输协议:使用HTTP协议 +- 请求地址:**/appAudit/{id}** +- 请求方式:DELETE +- 请求头:Content-type: application/json +- 返回格式:JSON + +#### 请求参数 + +***1)入参表*** + +| 序号 | 输入参数 | 类型 | 可为空 | 备注 | +| ---- | -------- | ---- | ------ | ------------ | +| 1 | id | Int | 否 | 告警信息编号 | + +***2)入参示例*** + +``` +http://localhost:5010/WeBASE-Data-Fetcher/appAudit/1 +``` + +#### 返回参数 + +***1)出参表*** + +| 序号 | 输出参数 | 类型 | | 备注 | +| ---- | -------- | ------ | ---- | -------------------------- | +| 1 | code | Int | 否 | 返回码,0:成功 其它:失败 | +| 2 | message | String | 否 | 描述 | +| 3 | data | object | 是 | 返回信息实体(空) | + +***2)出参示例*** + +- 成功: + +``` +{ + "code": 0, + "message": "success", + "data": null +} +``` + +- 失败: + +``` +{ + "code": 110000, + "message": "system exception", + "data": {} +} +``` + +## 附录 + +### 1. 返回码信息列表 + +| Code | message | 描述 | +| ------ | ------------------------------- | ----------------------- | +| 0 | success | 正常 | +| 110000 | system exception | 系统异常 | +| 110001 | param exception | 请求参数错误 | +| 110002 | database exception | 数据库异常 | +| 210101 | invalid group id | 无效群组编号 | +| 210201 | searchType not exists | 搜索类型不存在 | +| 210202 | search content can not be empty | 搜索内容不能为空 | +| 210203 | search index not exists | 索引不存在 | +| 210204 | search fail | 搜索失败 | +| 210205 | elasticsearch's config is false | elasticsearch配置未启用 | +| 210301 | keyword id not exists | 关键字不存在 | +| 210302 | keyword exists | 关键字已存在 | +| 210303 | save keyword fail | 关键字保存失败 | +| 210401 | audit id not exists | 告警信息不存在 | +| 210402 | audit inffo exists | 告警信息已存在 | +| 210403 | save audit info fail | 告警信息保存失败 | \ No newline at end of file diff --git a/docs/WeBASE-Data/appendix.md b/docs/WeBASE-Data/appendix.md new file mode 100644 index 00000000..4e3cd863 --- /dev/null +++ b/docs/WeBASE-Data/appendix.md @@ -0,0 +1,531 @@ +# 附录 + +## 1. 安装示例 + + + +### 1.1 Java部署 + + + +##### CentOS环境安装Java + + + +**注意:CentOS下OpenJDK无法正常工作,需要安装OracleJDK[下载链接](https://www.oracle.com/technetwork/java/javase/downloads/index.html)。** + +``` +# 创建新的文件夹,安装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. 数据库部署 + + + +此处以Centos安装*MariaDB*为例。*MariaDB*数据库是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。*MariaDB*完全兼容 MySQL,包括API和命令行。其他安装方式请参考[MySQL官网](https://dev.mysql.com/downloads/mysql/)。 + +#### ① 安装MariaDB + +- 安装命令 + +```shell +sudo yum install -y mariadb* +``` + +- 启停 + +```shell +启动:sudo systemctl start mariadb.service +停止:sudo systemctl stop mariadb.service +``` + +- 设置开机启动 + +``` +sudo systemctl enable mariadb.service +``` + +- 初始化 + +```shell +执行以下命令: +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用户远程访问 + +```sql +mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; +mysql > flush PRIVILEGES; +``` + +- 创建test用户并授权本地访问 + +```sql +mysql > GRANT ALL PRIVILEGES ON *.* TO 'test'@localhost IDENTIFIED BY '123456' WITH GRANT OPTION; +mysql > flush PRIVILEGES; +``` + +**安全温馨提示:** + +- 例子中给出的数据库密码(123456)仅为样例,强烈建议设置成复杂密码 +- 例子中root用户的远程授权设置会使数据库在所有网络上都可以访问,请按具体的网络拓扑和权限控制情况,设置网络和权限帐号 + +#### ③ 测试连接和创建数据库 + +- 登录数据库 + +```shell +mysql -utest -p123456 -h localhost -P 3306 +``` + +- 创建数据库 + +```sql +mysql > create database webasedata; +``` + +### 1.3. Elasticsearch部署 + + + +此处以Centos安装为例。详情请查看[Elasticsearch官网]()。 + +#### ① 安装包下载 + +下载[elasticsearch]()和[elasticsearch-analysis-ik](),注意版本要对应。 + +```shell +# 上传elasticsearch安装包并解压 +tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz /software/ +# 在elasticsearch的plugins目录创建子目录ik,并将ik分词插件上传解压到该目录 +mkdir /software/elasticsearch-7.8.0/plugins/ik +# 进入目录 +cd /software/elasticsearch-7.8.0/plugins/ik +# 上传ik分词插件安装包并解压 +unzip elasticsearch-analysis-ik-7.8.0.zip +``` + +#### ② 启动 + +在 ES 根目录下面,执行启动脚本文件: + +``` +cd /software/elasticsearch-7.8.0 +bin/elasticsearch -d +``` + +如果需要**设置用户名密码访问**,则进行以下操作: + +1. 在配置文件中开启x-pack验证, 修改config目录下面的elasticsearch.yml文件,在里面添加如下内容,并**重启** + + ``` + xpack.security.enabled: true + xpack.license.self_generated.type: basic + xpack.security.transport.ssl.enabled: true + ``` + +2. 设置用户名和密码,需要为4个用户分别设置密码(elastic,kibana,logstash_system,beats_system) + + ``` + bin/elasticsearch-setup-passwords interactive + ``` + +3. 如果需要修改密码,命令如下: + + ``` + curl -H "Content-Type:application/json" -XPOST -u elastic 'http://127.0.0.1:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "123456" }' + ``` + +#### ③ 验证 + +打开浏览器,输入 地址,然后可以得到下面的信息: + +```shell +{ + "name" : "node-1", + "cluster_name" : "my-application", + "cluster_uuid" : "K194HmUgRW2uwE9Zv0IDDQ", + "version" : { + "number" : "7.8.0", + "build_flavor" : "default", + "build_type" : "tar", + "build_hash" : "757314695644ea9a1dc2fecd26d1a43856725e65", + "build_date" : "2020-06-14T19:35:50.234439Z", + "build_snapshot" : false, + "lucene_version" : "8.5.1", + "minimum_wire_compatibility_version" : "6.8.0", + "minimum_index_compatibility_version" : "6.0.0-beta1" + }, + "tagline" : "You Know, for Search" +} +``` + +#### ④ 停止 + +查询进程并kill: + +``` +ps -ef|grep elasticsearch +kill -9 pid +``` + +### 1.4. Zookeeper部署 + + + +此处给出简单步骤,供快速查阅。详情请参考[官网](https://zookeeper.apache.org/)。 + +#### ① 安装包下载 + +从[官网](https://zookeeper.apache.org/releases.html)下载对应版本的安装包,并解压到相应目录 + +```shell +mkdir /software +tar -zxvf zookeeper-XXX.tar.gz /software/ +``` + +#### ② 配置和启动 + +ZooKeeper的安装包括单机模式安装,以及集群模式安装。具体步骤请参考官网说明: + +- [集群部署](https://zookeeper.apache.org/doc/r3.4.13/zookeeperAdmin.html#sc_zkMulitServerSetup) +- [单机部署](https://zookeeper.apache.org/doc/r3.4.13/zookeeperAdmin.html#sc_singleAndDevSetup) + +### 1.5 nginx部署 + + + +#### ① 安装依赖 + +在安装nginx前首先要确认系统中安装了gcc、pcre-devel、zlib-devel、openssl-devel。如果没有,请执行命令 + +``` +yum -y install gcc pcre-devel zlib-devel openssl openssl-devel +``` + +执行命令时注意权限问题,如遇到,请加上sudo + +#### ② 安装包下载 + +nginx下载地址:https://nginx.org/download/(下载最新稳定版本即可),或者使用命令: + +``` +wget http://nginx.org/download/nginx-1.9.9.tar.gz (版本号可换) +``` + +将下载的包移动到/usr/local/下 + +#### ③ 安装 + +- 解压后进入目录 + +``` +tar -zxvf nginx-1.9.9.tar.gz +cd nginx-1.9.9 +``` + +- 配置 + + +``` +./configure --prefix=/usr/local/nginx +``` + +- make + +``` +make +make install +``` + +- 测试是否安装成功 + +使用命令: + +``` +/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 +``` + +- nginx几个常见命令 + +```shell +/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 脚本没权限 + +- 执行shell脚本报错误"permission denied"或格式错误 + +``` +赋权限:chmod + *.sh +转格式:dos2unix *.sh +``` + +### 2.2 构建失败 + +- 执行构建命令`gradle build -x test`抛出异常: + +``` +A problem occurred evaluating root project 'WeBASE-Data-Collect'. +Could not find method compileOnly() for arguments [[org.projectlombok:lombok:1.18.8]] on root project 'WeBASE-Data-Collect'. +``` + + 答: + +方法1、已安装的Gradle版本过低,升级Gradle版本到4.10以上即可 +方法2、直接使用命令:`./gradlew build -x test` + +### 2.3 数据库问题 + +- 服务访问数据库抛出异常: + +``` +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; +``` + +- 数据存储时抛出异常: + +``` +Error updating database. Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (1,048,871 > 1,048,576). You can change this value on the server by setting the 'max_allowed_packet' variable. +``` + +答:插入数据量过大。MySQL根据配置文件会限制Server接受的数据包大小,有时候插入、更新或查询时数据包的大小,会受 max_allowed_packet 参数限制,导致操作失败。 + +客户端执行命令查看大小: + +``` +show VARIABLES like '%max_allowed_packet%'; +``` + +修改mysql的配置文件my.ini的配置,修改后重启mysql: + +``` +max_allowed_packet=20M +``` + +### 2.3 Elasticsearch问题 + +- root账户启动失败 + +``` +org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root +``` + +这个错误是因为使用了root账户启动Elasticsearch,换个非root账户启动就可以了。 + +- 启动没权限 + +``` +-bash: bin/elasticsearch: Permission denied +``` + +使用`chmod`命令给文件夹赋权限。 + +- 虚拟内存太小 + +``` +max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] +``` + +这是因为设置的最大虚拟内存太小,elasticsearch需要较大内存,切换到root用户下,修改配置文件sysctl.conf + +``` +vi /etc/sysctl.conf +``` + +添加下面配置: + +``` +vm.max_map_count=262144 +``` + +并执行命令: + +``` +sysctl -p +``` + +- 文件数太小 + +``` +max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] +``` + +这是用户最大可创建的文件数太小,只有4096,无法创建本地文件,需要增加到65536。切换到root用户,编辑limits.conf配置文件 + +``` +vi /etc/security/limits.conf +``` + +添加如下两行,然后保存 + +``` +{启动Elasticsearch的用户} soft nofile 65536 +{启动Elasticsearch的用户} hard nofile 65536 +``` + +- 验证时报错 + +``` +{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401} +``` + +确认是否设置了用户名密码,如果已设置,确认是否正确。 + +## 3. application.yml配置项说明 + +### 3.1 WeBASE-Data-Collect + + + +| 参数 | 默认值 | 描述 | +| ----------------------------------------- | -------------------------------------- | ---------------------------------------------------- | +| server.port | 5009 | 当前服务端口 | +| server.servlet.context-path | /WeBASE-Data-Collect | 当前服务访问目录 | +| mybatis.typeAliasesPackage | com.webank.webase.data.collect | 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/webasedata | mysql连接地址 | +| spring.datasource.username | defaultAccount | mysql账号 | +| spring.datasource.password | defaultPassword | mysql密码 | +| spring.elasticsearch.rest.uris | 127.0.0.1:9200 | elasticsearch服务的ip地址 | +| spring.elasticsearch.rest.username | elasticAccount | elasticsearch用户名,可以为空 | +| spring.elasticsearch.rest.password | elasticPassword | elasticsearch密码,可以为空 | +| spring.servlet.multipart.max-request-size | 30MB | 请求资源最大值 | +| spring.servlet.multipart.max-file-size | 20MB | 单个文件最大值 | +| constant.ifEsEnable | false | 是否使用elasticsearch | +| constant.httpTimeOut | 5000 | 请求前置超时时间 | +| constant.maxRequestFail | 3 | 失败次数 | +| constant.sleepWhenHttpMaxFail | 30000 | 失败后睡眠时间(毫秒) | +| constant.resetGroupListCycle | 300000 | 更新群组时间间隔(毫秒) | +| constant.groupInvalidGrayscaleValue | 1M | 群组失效后保留时间 | +| constant.nodeStatusTaskFixedDelay | 30000 | 更新节点状态任务时间间隔(毫秒) | +| constant.statTxnDailyTaskFixedDelay | 60000 | 统计每日交易任务时间间隔(毫秒) | +| constant.ifPullData | true | 是否拉取区块(可通过接口修改) | +| constant.startBlockNumber | 0 | 开始块 | +| constant.crawlBatchUnit | 50 | 异步处理条数 | +| constant.dataPullCron | 0/10 * * * * ? | 数据拉取任务时间间隔(10秒) | +| constant.dataParserCron | 5/10 * * * * ? | 数据解析任务时间间隔(10秒) | +| constant.eventExportCron | 7/10 * * * * ? | 事件导出任务时间间隔(10秒) | +| constant.partitionType | 0 | 表分区类型(0-按天,1-按月),部署后修改需重建数据库 | +| constant.createPartitionCron | 0 0 1 * * ? | 创建表分区任务时间(每天凌晨1点) | +| constant.multiLiving | false | 是否使用分布式任务部署多活 | +| job.regCenter.serverLists | 127.0.0.1:2181 | 部署多活的话需配置zookeeper,支持集群 | +| job.regCenter.namespace | elasticjob-collect | zookeeper命名空间 | +| job.dataflow.shardingTotalCount | 2 | 多活分片数 | +| executor.corePoolSize | 50 | 线程池大小 | +| executor.maxPoolSize | 100 | 线程池最大线程数 | +| executor.queueSize | 50 | 线程池队列大小 | +| executor.threadNamePrefix | "custom-async-" | 线程名前缀 | +| logging.config | classpath:log/log4j2.xml | 日志配置文件目 | +| logging.level | com.webank.webase.data.collect: info | 日志级别 | + +### 3.2 WeBASE-Data-Fetcher + + + +| 参数 | 默认值 | 描述 | +| ----------------------------------- | -------------------------------------- | ------------------------------------------ | +| server.port | 5010 | 当前服务端口 | +| server.servlet.context-path | /WeBASE-Data-Fetcher | 当前服务访问目录 | +| mybatis.typeAliasesPackage | com.webank.webase.data.fetcher | 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/webasedata | mysql连接地址 | +| spring.datasource.username | defaultAccount | mysql账号 | +| spring.datasource.password | defaultPassword | mysql密码 | +| spring.elasticsearch.rest.uris | 127.0.0.1:9200 | elasticsearch服务的ip地址 | +| spring.elasticsearch.rest.username | elasticAccount | elasticsearch用户名,可以为空 | +| spring.elasticsearch.rest.password | elasticPassword | elasticsearch密码,可以为空 | +| constant.ifEsEnable | false | 是否使用elasticsearch | +| constant.keywordAuditCron | 0 0 0/1 * * ? | 关键字审计任务执行时间,默认每小时执行一次 | +| executor.corePoolSize | 50 | 线程池大小 | +| executor.maxPoolSize | 100 | 线程池最大线程数 | +| executor.queueSize | 50 | 线程池队列大小 | +| executor.threadNamePrefix | custom-async- | 线程名前缀 | +| logging.config | classpath:log/log4j2.xml | 日志配置文件目录 | +| logging.level | com.webank.webase.data.fetcher: info | 日志扫描目录和级别 | + diff --git a/docs/WeBASE-Data/index.md b/docs/WeBASE-Data/index.md new file mode 100644 index 00000000..8d0b3b52 --- /dev/null +++ b/docs/WeBASE-Data/index.md @@ -0,0 +1,12 @@ +# 数据监管服务 + +```eval_rst +.. toctree:: + :maxdepth: 1 + + README.md + install.md + instruction.md + interface-index.md + appendix.md +``` \ No newline at end of file diff --git a/docs/WeBASE-Data/install.md b/docs/WeBASE-Data/install.md new file mode 100644 index 00000000..482c79c2 --- /dev/null +++ b/docs/WeBASE-Data/install.md @@ -0,0 +1,357 @@ +# 部署说明 + +## 1 环境准备 + +| 依赖软件 | 支持版本 | +| :-----------------------: | :-------------------: | +| FISCO BCOS | 2.5.0或以上版本 | +| WeBASE-Front | 1.4.0或以上版本 | +| Java | JDK8或以上版本 | +| MySQL | 5.6或以上版本 | +| Elasticsearch | 7.8.0(使用ES时部署) | +| elasticsearch-analysis-ik | 7.8.0(使用ES时部署) | +| Nginx | nginx1.6或以上版本 | + +- 部署说明可以参考[安装示例(附录1)](./appendix.html#instal) +- 在服务搭建的过程中,如碰到问题,请查看[常见问题(附录2)](./appendix.html#q&a) + +## 2. 拉取代码 + +执行命令: + +``` +git clone https://github.com/WeBankFinTech/WeBASE-Data.git +``` + +## 3 WeBASE-Data-Collect搭建 + +​ WeBASE-Data-Collect为监管数据导出和分析服务,自带配置页面,支持配置多个链,并通过添加区块链前置来获取区块链数据。同时可以配置应用相关信息,合约和用户信息。 + +### 3.1 编译代码 + +进入目录: + +```shell +cd WeBASE-Data/WeBASE-Data-Collect +``` + +方式一:如果服务器已安装Gradle,且版本为Gradle-4.10或以上 + +```shell +gradle build -x test +``` + +方式二:如果服务器未安装Gradle,或者版本不是Gradle-4.10或以上,使用gradlew编译 + +```shell +chmod +x ./gradlew && ./gradlew build -x test +``` + +构建完成后,会在目录WeBASE-Data-Collect下生成已编译的代码目录dist。 + +### 3.2 数据库初始化 + +(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; +例如:CREATE DATABASE IF NOT EXISTS webasedata DEFAULT CHARSET utf8 COLLATE utf8_general_ci; +``` + +(2)修改脚本配置 + +进入数据库脚本目录script + +```shell +cd dist/script +``` + +修改数据库连接信息: + +```shell +修改数据库名称:sed -i "s/webasedata/${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,则执行: + +```shell +sed -i "s/defaultAccount/root/g" webase.sh +``` + +(3)运行数据库脚本 + +```shell +bash webase.sh ${dbIP} ${dbPort} +例如:bash webase.sh 127.0.0.1 3306 +``` + +### 3.3 配置修改 + +(1)回到dist目录,dist目录提供了一份配置模板conf_template: + +``` +根据配置模板生成一份实际配置conf。初次部署可直接拷贝。 +例如:cp conf_template conf -r +``` + +(2)修改配置文件*conf/applicationyml*,主要修改数据库连接和es连接信息,完整配置项说明请查看 [配置项说明(附录3.1)](./appendix.html#application-yml-collect) + +- 服务端口,默认不修改。 +- 数据库连接(数据库名需事先创建)。 +- 需要需要将交易数据存入elasticsearch的话,需要将ifEsEnable设置成true,并配置IP端口和用户名密码。不使用则不需要修改。**使用elasticsearch的话,需先部署elasticsearch,再部署WeBASE-Data**。 + +```shell +... +server: + port: 5009 + servlet: + context-path: /WeBASE-Data-Collect + +# database connection configuration +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://127.0.0.1:3306/webasedata?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull + username: "defaultAccount" + password: "defaultPassword" + elasticsearch: + rest: + uris: 127.0.0.1:9200 + username: "elasticAccount" + password: "elasticPassword" +# constants +constant: + ## if use elasticsearch + ifEsEnable: false +... +``` + +### 3.4 服务启停 + +```shell +启动:bash start.sh +停止:bash stop.sh +检查:bash status.sh +``` + +**备注**:服务进程起来后,需通过日志确认是否正常启动,出现以下内容表示正常;如果服务出现异常,确认修改配置后,重启。如果提示服务进程在运行,则先执行stop.sh,再执行start.sh。 + +``` +... + Application() - main run success... +``` + +### 3.5 访问 + +配置页面访问: + +``` +http://{deployIP}:{deployPort}/WeBASE-Data-Collect +示例:http://localhost:5009/WeBASE-Data-Collect +``` + +- 部署服务器IP和服务端口需对应修改,网络策略需开通 + +### 3.6 查看日志 + +```shell +全量日志:tail -f log/WeBASE-Data-Collect.log +错误日志:tail -f log/WeBASE-Data-Collect-error.log +``` + +## 4 WeBASE-Data-Fetcher搭建 + +​ WeBASE-Data-Fetcher为监管数据查询服务,向WeBASE-Data-Web服务提供数据查询接口。 + +### 4.1 编译代码 + +返回WeBASE-Data目录并进入WeBASE-Data-Fetcher目录。 + +方式一:如果服务器已安装Gradle,且版本为Gradle-4.10或以上 + +```shell +gradle build -x test +``` + +方式二:如果服务器未安装Gradle,或者版本不是Gradle-4.10或以上,使用gradlew编译 + +```shell +chmod +x ./gradlew && ./gradlew build -x test +``` + +构建完成后,会在目录WeBASE-Data-Fetcher下生成已编译的代码目录dist。 + +### 4.2 配置修改 + +(1)dist目录,dist目录提供了一份配置模板conf_template: + +``` +根据配置模板生成一份实际配置conf。初次部署可直接拷贝。 +例如:cp conf_template conf -r +``` + +(2)修改配置文件*conf/applicationyml*,完整配置项说明请查看 [配置项说明(附录3.2)](./appendix.html#application-yml-fetcher) + +- 服务端口,默认不修改。 +- 数据库连接(数据库名需事先创建,需要和WeBASE-Data-Collect服务连接相同的数据库)。 +- 如果需要进行搜索,查询elasticsearch里的交易数据,需要将ifEsEnable设置成true,并配置IP端口和用户名密码。不使用则不需要修改。**使用elasticsearch的话,需先部署elasticsearch,再部署WeBASE-Data**。 + +```shell +# server config +server: + port: 5010 + servlet: + context-path: /WeBASE-Data-Fetcher + +# database connection configuration +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://127.0.0.1:3306/webasedata?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull + username: "defaultAccount" + password: "defaultPassword" + elasticsearch: + rest: + uris: 127.0.0.1:9200 + username: "elasticAccount" + password: "elasticPassword" +# constant config +constant: + ## if use elasticsearch + ifEsEnable: false +... +``` + +### 4.3 服务启停 + +```shell +启动:bash start.sh +停止:bash stop.sh +检查:bash status.sh +``` + +**备注**:服务进程起来后,需通过日志确认是否正常启动,出现以下内容表示正常;如果服务出现异常,确认修改配置后,重启。如果提示服务进程在运行,则先执行stop.sh,再执行start.sh。 + +``` +... + Application() - main run success... +``` + +### 4.4 访问 + +没有单独页面,可以通过swagger查看调用接口: + +``` +http://{deployIP}:{deployPort}/WeBASE-Data-Fetcher/swagger-ui.html +示例:http://localhost:5010/WeBASE-Data-Fetcher/swagger-ui.html +``` + +- 部署服务器IP和服务端口需对应修改,网络策略需开通 + +### 4.5 查看日志 + +```shell +全量日志:tail -f log/WeBASE-Data-Fetcher.log +错误日志:tail -f log/WeBASE-Data-Fetcher-error.log +``` + +## 5 WeBASE-Data-Web搭建 + +​ WeBASE-Data-Web为数据监管平台,提供数据浏览页面。 + +### 5.1 进入目录 + +返回WeBASE-Data目录并进入WeBASE-Data-Web目录。 + +``` +cd WeBASE-Data-Web +``` + +### 5.2 配置修改 + +​ 在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-Data-Web服务端口(端口需要开通策略且不能被占用) +sed -i "s%5200%${your_port}%g" docs/nginx.conf + +# 修改静态文件路径(文件需要有权限访问) +sed -i "s%/data/WeBASE-Data-Web/dist%${your_file_dir}%g" docs/nginx.conf + +# WeBASE-Data-Fetcher服务ip和端口 +sed -i "s%10.0.0.1:5010%${your_fetcher}%g" docs/nginx.conf +``` + +- 复制配置文件nginx.conf + +``` +cp -rf docs/nginx.conf /usr/local/nginx/conf +``` + +**备注:** 如果服务器已有nginx,可在原配置文件nginx.conf增加一个server: + +``` + upstream data_server{ + server 10.0.0.1:5010; # WeBASE-Data-Fetcher服务ip和端口 + } + server { + listen 5200 default_server; # 前端端口(端口需要开通策略且不能被占用) + server_name 127.0.0.1; # 服务器ip,也可配置为域名 + location / { + root /WeBASE-Data/WeBASE-Data-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://data_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.3 启动nginx + +启动命令: + +``` +/usr/local/nginx/sbin/nginx # nginx在/usr/local目录下 +``` + +检查nginx是否启动: + +``` +ps -ef | grep nginx +``` + +### 5.4 访问 + +``` +http://{deployIP}:{webPort} +示例:http://127.0.0.1:5200 +``` + +- 部署服务器IP和服务端口需对应修改,网络策略需开通 + +### 5.5 查看日志 + +```shell +进程日志:tail -f logs/access.log +错误日志:tail -f logs/eror.log +``` + diff --git a/docs/WeBASE-Data/instruction.md b/docs/WeBASE-Data/instruction.md new file mode 100644 index 00000000..84137e4a --- /dev/null +++ b/docs/WeBASE-Data/instruction.md @@ -0,0 +1,179 @@ +# 使用手册 + +## 1. 简介 + +本文将用一个实例来说明数据监管服务的部署和使用。实例详情如下图:从下至上我们可以看到: + +1. 部署两条物理链,包括四个区块链应用(后面以存证链为例存证链)。 +2. 监管机构在每一套链中都有一个监管节点用于同步数据。 +3. 监管节点之上部署了一个WeBASE-Front(区块链节点前置),这个服务主要作用是代理节点,提供restful的接口。 +4. 在WeBASE-Front之上是WeBASE-Data-Collect(监管数据导出和分析服务),这个服务主要用于导出数据到DB和ES,用于分析。 +5. WeBASE-Data-Collect(监管数据导出和分析服务)之上是WeBASE-Data-Fetcher(监管数据查询服务),这个服务主要的功能是对外提供数据查询服务。 +6. WeBASE-Data-Web(数据监管平台)是一个网页服务,对外提供数据展示和交互UI。 + + ![](../../images/WeBASE-Data/architecture.png) + + + +## 2. 平台搭建 + +平台搭建的具体详情请查看[部署说明](./install.md)。 + +## 3. 数据上链(mock数据,真实环境有数据不需要此步骤) + +根据部署说明将数据监管平台搭建成功后,可以通过WeBASE-Front(节点前置服务)**模拟存证交易**(默认:http://localhost:5002/WeBASE-Front)。 + +![](../../images/WeBASE-Data/front/home.png) + +首先,创建测试用户,供交易使用 + +![](../../images/WeBASE-Data/front/user_add.png) + +![](../../images/WeBASE-Data/front/user_view.png) + +节点前置服务已内置存证合约,可以使用该存证合约将存证数据上链。过程包括:合约编译、合约部署、调用合约将存证数据上链。 + +合约编译: + +![](../../images/WeBASE-Data/front/contract_compile.png) + +合约部署,部署时私钥地址选择创建的测试用户地址。存证合约部署时需要设置签名用户地址,可以使用测试用户地址作为参数。 + +![](../../images/WeBASE-Data/front/contract_deploy.png) + +合约调用,调用合约将存证数据上链。 + +![](../../images/WeBASE-Data/front/contract_call.png) + +## 4. 运维配置 + +WeBASE-Data-Collect服务搭建成功后,可使用网页浏览器访问管理平台配置页面(默认:http://localhost:5009/WeBASE-Data-Collect)。 + +### 4.1 新增区块链信息 + +首先在链管理页面新建链信息。可以选择国密或非国密。部署的存证链为非国密链,选择非国密。 + +![](../../images/WeBASE-Data/collect/chain_new.png) + +### 4.2 添加节点前置 + + 进入前置管理页面,右上角切换到存证链,然后添加对应节点前置信息,节点前置的类型需要与链的类型一致(国密或非国密)。 + +![](../../images/WeBASE-Data/collect/front_add.png) + +![](../../images/WeBASE-Data/collect/front_info.png) + +### 4.3 设置应用信息和节点机构信息 + +前置添加完成后,管理平台就会开始拉取群组信息和群组的区块信息。此时链管理下应该就有相关数据了。可以通过修改按钮设置应用信息(每个应用对应一个群组)。还可以设置链下节点机构信息。 + +应用信息: + +![](../../images/WeBASE-Data/collect/app_info_update.png) + +![](../../images/WeBASE-Data/collect/app_info.png) + +节点机构信息,节点编号可以通过节点目录下个的node.nodeid文件获取,如:nodes/127.0.0.1/node0/conf/node.nodeid + +![](../../images/WeBASE-Data/collect/org_update.png) + +![](../../images/WeBASE-Data/collect/org_info.png) + +### 4.4 合约管理 + +为了解析和审计区块数据,需要把相关的合约导入到管理平台。 + +管理平台提供支持导入已有合约(支持同时选择多个合约文件上传)。同时合约编辑器还提供新建目录,用目录的形式管理合约,主要是为了解决同名合约引用的问题。合约添加完成后,需要编译保存。 + +![](../../images/WeBASE-Data/collect/contract_upload.png) + +将存证合约Evidence.sol、EvidenceFactory.sol上传编译,**注意选择编译器版本(国密版本名称带有gm字样)** + +![](../../images/WeBASE-Data/collect/contract_compile.png) + +### 4.5 用户管理 + +为了解析和审计区块数据交易用户,需要把相关的用户地址导入到管理平台。将存证测试用户的地址导入。 + +![](../../images/WeBASE-Data/collect/user_add.png) + +![](../../images/WeBASE-Data/collect/user_info.png) + +## 5. 平台使用 + +WeBASE-Data-Fetcher和WeBASE-Data-Web服务搭建成功后,可使用网页浏览器访问数据监管平台(默认:http://127.0.0.1:5200)。 + +### 5.1 搜索页 + +搜索页展示全局数据概览:链数量,应用数量,用户数量,智能合约数量,区块数量,交易数量。 + +![](../../images/WeBASE-Data/web/search_view.png) + +搜索支持关键字搜索和条件搜索。条件搜索包括区块搜索、交易搜索、用户搜索、合约搜索。 + +其中,交易搜索出的交易数据如果需要监管处理,可以通过介入处理按钮添加到监管告警列表。 + +如下搜索出存证上链的数据: + +![](../../images/WeBASE-Data/web/search_key.png) + +![](../../images/WeBASE-Data/web/search_condition.png) + +### 5.2 区块链数据概览 + +区块链概览页展示链列表信息,以及链下应用和节点信息。 + +![](../../images/WeBASE-Data/web/app_info.png) + +通过应用跳转到具体应用数据概览页面,页面展示了区块链应用的核心数据指标:用户数量,合约数量,区块数量,交易数量。关键监控指标:最近7天的交易量。 +- 节点信息列表:展示了节点的ID,所属机构,节点块高,节点view和运行状态; +- 区块信息列表:展示了最近区块的概览信息,点击更多可以查看更多历史区块; +- 交易信息列表:展示了最近交易的概览信息,点击更多可以查看更多历史交易; + +![](../../images/WeBASE-Data/web/app_view.png) + +其中右下角的交易信息列表点击可跳入具体一条交易中查看交易详细信息:交易详细信息还包含了 +- 交易解析:可以将交易返回的交易回执数据进行解析并可视化; +- Event解析:可以将交易返回的Event数据进行解析并可视化; + +![](../../images/WeBASE-Data/web/trans_view.png) + +![](../../images/WeBASE-Data/web/event_view.png) + +### 5.3 关键字配置 + +可以在配置页设置关键字,后台服务会检测拉取解析后的数据是否包含关键字,包含关键字的数据信息会添加到监管告警信息列表。比如设置存证的关键字。 + +![](../../images/WeBASE-Data/web/keyword_add.png) + +![](../../images/WeBASE-Data/web/audit_info.png) + +### 5.4 监管信息处理 + +#### 5.4.1 应用告警 + +如果需要监管整个应用信息,可以在区块链概览页通过应用列表里的介入处理按钮将应用信息添加到应用告警列表。处理后可通过确认按钮修改状态。如果需要将应用信息从应用告警移除,可以调用删除按钮。 + +![](../../images/WeBASE-Data/web/audit_app_add.png) + +![](../../images/WeBASE-Data/web/audit_app_handle.png) + +#### 5.4.2 交易告警 + +交易告警包括搜索出的的交易数据告警和交易列表页的交易数据告警。处理后可通过确认按钮修改状态。如果需要将应用信息从应用告警移除,可以调用删除按钮。 + +关键字查询的交易: + +![](../../images/WeBASE-Data/web/search_key.png) + +条件查询的交易: + +![](../../images/WeBASE-Data/web/search_condition.png) + +交易列表页的交易: + +![](../../images/WeBASE-Data/web/trans_list.png) + +交易告警信息处理: + +![](../../images/WeBASE-Data/web/audit_trans_handle.png) \ No newline at end of file diff --git a/docs/WeBASE-Data/interface-index.md b/docs/WeBASE-Data/interface-index.md new file mode 100644 index 00000000..c3c1213d --- /dev/null +++ b/docs/WeBASE-Data/interface-index.md @@ -0,0 +1,9 @@ +# 接口说明 + +```eval_rst +.. toctree:: + :maxdepth: 1 + + WeBASE-Data-Collect.md + WeBASE-Data-Fetcher.md +``` \ No newline at end of file diff --git a/docs/WeBASE/introduction.md b/docs/WeBASE/introduction.md index 016cda1b..2d035677 100644 --- a/docs/WeBASE/introduction.md +++ b/docs/WeBASE/introduction.md @@ -49,6 +49,9 @@ WeBASE所有子系统独立存在,均可独立部署,独立提供服务。 - **数据统计服务子系统** [WeBASE-Stat仓库](https://github.com/WeBankFinTech/WeBASE-Stat) 以前置为基础,拉取CPU、内存、IO、群组大小、群组gas、群组网络流量的数据,记录数据库。 +- **数据监管服务** +[WeBASE-Data仓库](https://github.com/WeBankFinTech/WeBASE-Data) 以前置为基础,导出区块链数据并解析,提供一个可视化的监管视图。可以查询交易属于哪条链,哪个用户,哪个合约,保证链上数据可查可管。 + - **数据导出代码生成工具** [WeBASE-Codegen-Monkey仓库](https://github.com/WeBankFinTech/WeBASE-Codegen-Monkey) 代码生成工具,通过配置可以生成数据导出的核心代码。 diff --git a/docs/WeBASE/subsystem.md b/docs/WeBASE/subsystem.md index 508b45b4..2ea77e6a 100644 --- a/docs/WeBASE/subsystem.md +++ b/docs/WeBASE/subsystem.md @@ -11,6 +11,7 @@ ../WeBASE-Sign/index.md ../WeBASE-Chain-Manager/index.md ../WeBASE-Stat/index.md + ../WeBASE-Data/index.md ../WeBASE-Codegen-Monkey/index.md ../WeBASE-Collect-Bee/index.md ``` diff --git a/images/WeBASE-Data/architecture.png b/images/WeBASE-Data/architecture.png new file mode 100644 index 00000000..45e7cc88 Binary files /dev/null and b/images/WeBASE-Data/architecture.png differ diff --git a/images/WeBASE-Data/collect/app_info.png b/images/WeBASE-Data/collect/app_info.png new file mode 100644 index 00000000..d1e20ad1 Binary files /dev/null and b/images/WeBASE-Data/collect/app_info.png differ diff --git a/images/WeBASE-Data/collect/app_info_update.png b/images/WeBASE-Data/collect/app_info_update.png new file mode 100644 index 00000000..d8e16c39 Binary files /dev/null and b/images/WeBASE-Data/collect/app_info_update.png differ diff --git a/images/WeBASE-Data/collect/chain_new.png b/images/WeBASE-Data/collect/chain_new.png new file mode 100644 index 00000000..d22d26dc Binary files /dev/null and b/images/WeBASE-Data/collect/chain_new.png differ diff --git a/images/WeBASE-Data/collect/contract_compile.png b/images/WeBASE-Data/collect/contract_compile.png new file mode 100644 index 00000000..040679dc Binary files /dev/null and b/images/WeBASE-Data/collect/contract_compile.png differ diff --git a/images/WeBASE-Data/collect/contract_upload.png b/images/WeBASE-Data/collect/contract_upload.png new file mode 100644 index 00000000..f4496121 Binary files /dev/null and b/images/WeBASE-Data/collect/contract_upload.png differ diff --git a/images/WeBASE-Data/collect/front_add.png b/images/WeBASE-Data/collect/front_add.png new file mode 100644 index 00000000..10f300f9 Binary files /dev/null and b/images/WeBASE-Data/collect/front_add.png differ diff --git a/images/WeBASE-Data/collect/front_info.png b/images/WeBASE-Data/collect/front_info.png new file mode 100644 index 00000000..178aa41b Binary files /dev/null and b/images/WeBASE-Data/collect/front_info.png differ diff --git a/images/WeBASE-Data/collect/org_info.png b/images/WeBASE-Data/collect/org_info.png new file mode 100644 index 00000000..c868fab5 Binary files /dev/null and b/images/WeBASE-Data/collect/org_info.png differ diff --git a/images/WeBASE-Data/collect/org_update.png b/images/WeBASE-Data/collect/org_update.png new file mode 100644 index 00000000..29873cc6 Binary files /dev/null and b/images/WeBASE-Data/collect/org_update.png differ diff --git a/images/WeBASE-Data/collect/user_add.png b/images/WeBASE-Data/collect/user_add.png new file mode 100644 index 00000000..f3f0d965 Binary files /dev/null and b/images/WeBASE-Data/collect/user_add.png differ diff --git a/images/WeBASE-Data/collect/user_info.png b/images/WeBASE-Data/collect/user_info.png new file mode 100644 index 00000000..e398c83c Binary files /dev/null and b/images/WeBASE-Data/collect/user_info.png differ diff --git a/images/WeBASE-Data/front/contract_call.png b/images/WeBASE-Data/front/contract_call.png new file mode 100644 index 00000000..a2d6c5d7 Binary files /dev/null and b/images/WeBASE-Data/front/contract_call.png differ diff --git a/images/WeBASE-Data/front/contract_compile.png b/images/WeBASE-Data/front/contract_compile.png new file mode 100644 index 00000000..3bb1b7fb Binary files /dev/null and b/images/WeBASE-Data/front/contract_compile.png differ diff --git a/images/WeBASE-Data/front/contract_deploy.png b/images/WeBASE-Data/front/contract_deploy.png new file mode 100644 index 00000000..14cf281b Binary files /dev/null and b/images/WeBASE-Data/front/contract_deploy.png differ diff --git a/images/WeBASE-Data/front/home.png b/images/WeBASE-Data/front/home.png new file mode 100644 index 00000000..dd786c22 Binary files /dev/null and b/images/WeBASE-Data/front/home.png differ diff --git a/images/WeBASE-Data/front/user_add.png b/images/WeBASE-Data/front/user_add.png new file mode 100644 index 00000000..d0860b5e Binary files /dev/null and b/images/WeBASE-Data/front/user_add.png differ diff --git a/images/WeBASE-Data/front/user_view.png b/images/WeBASE-Data/front/user_view.png new file mode 100644 index 00000000..78f83444 Binary files /dev/null and b/images/WeBASE-Data/front/user_view.png differ diff --git a/images/WeBASE-Data/install.png b/images/WeBASE-Data/install.png new file mode 100644 index 00000000..4e257b1b Binary files /dev/null and b/images/WeBASE-Data/install.png differ diff --git a/images/WeBASE-Data/web/app_info.png b/images/WeBASE-Data/web/app_info.png new file mode 100644 index 00000000..6c90ee43 Binary files /dev/null and b/images/WeBASE-Data/web/app_info.png differ diff --git a/images/WeBASE-Data/web/app_view.png b/images/WeBASE-Data/web/app_view.png new file mode 100644 index 00000000..54ab6cc6 Binary files /dev/null and b/images/WeBASE-Data/web/app_view.png differ diff --git a/images/WeBASE-Data/web/audit_app_add.png b/images/WeBASE-Data/web/audit_app_add.png new file mode 100644 index 00000000..d5604765 Binary files /dev/null and b/images/WeBASE-Data/web/audit_app_add.png differ diff --git a/images/WeBASE-Data/web/audit_app_handle.png b/images/WeBASE-Data/web/audit_app_handle.png new file mode 100644 index 00000000..19cb8755 Binary files /dev/null and b/images/WeBASE-Data/web/audit_app_handle.png differ diff --git a/images/WeBASE-Data/web/audit_info.png b/images/WeBASE-Data/web/audit_info.png new file mode 100644 index 00000000..f260457f Binary files /dev/null and b/images/WeBASE-Data/web/audit_info.png differ diff --git a/images/WeBASE-Data/web/audit_trans_handle.png b/images/WeBASE-Data/web/audit_trans_handle.png new file mode 100644 index 00000000..816b5cc8 Binary files /dev/null and b/images/WeBASE-Data/web/audit_trans_handle.png differ diff --git a/images/WeBASE-Data/web/event_view.png b/images/WeBASE-Data/web/event_view.png new file mode 100644 index 00000000..ab2f24e9 Binary files /dev/null and b/images/WeBASE-Data/web/event_view.png differ diff --git a/images/WeBASE-Data/web/keyword_add.png b/images/WeBASE-Data/web/keyword_add.png new file mode 100644 index 00000000..1f973af2 Binary files /dev/null and b/images/WeBASE-Data/web/keyword_add.png differ diff --git a/images/WeBASE-Data/web/search_condition.png b/images/WeBASE-Data/web/search_condition.png new file mode 100644 index 00000000..01f8cd46 Binary files /dev/null and b/images/WeBASE-Data/web/search_condition.png differ diff --git a/images/WeBASE-Data/web/search_key.png b/images/WeBASE-Data/web/search_key.png new file mode 100644 index 00000000..b837a7d5 Binary files /dev/null and b/images/WeBASE-Data/web/search_key.png differ diff --git a/images/WeBASE-Data/web/search_view.png b/images/WeBASE-Data/web/search_view.png new file mode 100644 index 00000000..85cd372c Binary files /dev/null and b/images/WeBASE-Data/web/search_view.png differ diff --git a/images/WeBASE-Data/web/trans_list.png b/images/WeBASE-Data/web/trans_list.png new file mode 100644 index 00000000..6697b009 Binary files /dev/null and b/images/WeBASE-Data/web/trans_list.png differ diff --git a/images/WeBASE-Data/web/trans_view.png b/images/WeBASE-Data/web/trans_view.png new file mode 100644 index 00000000..39332c00 Binary files /dev/null and b/images/WeBASE-Data/web/trans_view.png differ diff --git a/requirements.txt b/requirements.txt index adf6cb94..8a8a4826 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,11 @@ docutils == 0.12 -sphinx == 1.6.7 -sphinx-rtd-theme +sphinx == 1.7.9 +sphinx-rtd-theme == 0.4.3 sphinx-copybutton == 0.2.6 -sphinx-markdown-tables --e git+git://github.com/mgaitan/sphinxcontrib-mermaid#egg=sphinxcontrib-mermaid > 0.3 --e git+git://github.com/rtfd/recommonmark.git#egg=recommonmark > 0.4.0 +sphinx-version-warning == 1.1.2 +sphinx-markdown-tables == 0.0.15 +sphinxcontrib-mermaid == 0.6.0 +recommonmark == 0.5.0 sphinx-notfound-page == 0.1 commonmarkextensions == 0.0.5 commonmark == 0.8.1