diff --git a/conf.py b/conf.py index 7af448a4..941c4a2b 100644 --- a/conf.py +++ b/conf.py @@ -110,7 +110,7 @@ # The short X.Y version. version = 'lab' # The full version, including alpha/beta/rc tags. -release = 'lab-rc1' +release = 'lab-rc2' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/WeBASE-Console-Suit/index.md b/docs/WeBASE-Console-Suit/index.md index 7cb24adb..67b97259 100644 --- a/docs/WeBASE-Console-Suit/index.md +++ b/docs/WeBASE-Console-Suit/index.md @@ -15,8 +15,10 @@ WeBASE管理平台是由四个WeBASE子系统组成的一套管理FISCO-BCOS联 5. 系统管理 6. 系统监控 7. 交易审计 -8. 账号管理 - +8. 订阅事件 +9. 账号管理 +10. 移动端管理台 +11. 数据监控大屏 ![](../../images/WeBASE-Console-Suit/overview_2.png) @@ -38,6 +40,12 @@ WeBASE管理平台是由四个WeBASE子系统组成的一套管理FISCO-BCOS联 两者的主要区别在于build_chain为了使体验更好,搭建速度更快,辅助生成了群组内各个节点的私钥;但企业部署工具出于安全的考虑不辅助生成私钥,需要用户自己生成并设置。 +##### Liquid支持 + +如果使用的`liquid`合约的链,并在WeBASE管理台或WeBASE-Front的合约IDE中编译Liquid合约,要求**手动**在WeBASE-Front所在主机配置Liquid环境,可参考WeBASE-Front节点前置文档中的[Liquid配置](../WeBASE-Front/liquid.md)或[Liquid官方配置文档](https://liquid-doc.readthedocs.io/zh_CN/latest/docs/quickstart/prerequisite.html) + +配置好Liquid环境后,需要重启WeBASE-Front + ### WeBASE管理平台搭建 WeBASE管理平台分为四个部分:节点前置,签名服务,节点管理,WeBASE管理台。 @@ -77,7 +85,9 @@ WeBASE管理台使用框架`vue-cli`,具体搭建流程参见[《WeBASE管理 未初始化节点前置的管理平台,会引导去节点管理页面添加节点前置。 - 节点前置服务需要填写前置的IP与端口(默认为`127.0.0.1`和`5002`),机构名则根据实际自定义填写 -![](../../images/WeBASE-Console-Suit/node_manager_add_front.png) + +![](../../images/WeBASE-Console-Suit/lab/new_front.png) + 前置添加完成后,管理平台就会开始拉取群组信息和群组的区块信息。此时数据概览页面应该就有数据了。为了解析和审计区块数据,需要把相关的合约和用户导入到管理平台。具体看下面两个小节。 @@ -101,7 +111,7 @@ WeBASE管理台使用框架`vue-cli`,具体搭建流程参见[《WeBASE管理 ![](../../images/WeBASE-Console-Suit/contract_send_transaction.png) -交易发送成功后,将返回交易回执。可以在数据概览-交易列表-更多中根据transactionHash搜索交易,通过交易解析和Event解析查看可视化的交易回执信息。具体操作方法参考下文的区块链数据概览章节中的交易解析与Event解析。 +交易发送成功后,将返回交易回执。可以在数据概览-交易列表-更多中根据transactionHash搜索交易,通过交易解析和Event解析查看可视化的交易回执信息。具体操作方法参考下文的区块链数据概览章节中的交易解析与Event解析。(注:Liquid合约的交易暂未支持交易解析) ![](../../images/WeBASE-Console-Suit/transaction_output.png) @@ -132,11 +142,11 @@ WeBASE管理台使用框架`vue-cli`,具体搭建流程参见[《WeBASE管理 ![](../../images/WeBASE-Console-Suit/transaction_analysis_raw.png) -进行交易解析后如下图所示: +进行交易解析后如下图所示:(注:Liquid合约的交易暂未支持交易解析) ![](../../images/WeBASE-Console-Suit/transaction_analysis.png) -同样的,Event数据解析后可以看到: +同样的,Event数据解析后可以看到:(注:Liquid合约的交易暂未支持交易解析) ![](../../images/WeBASE-Console-Suit/transaction_event.png) @@ -164,6 +174,8 @@ WeBASE管理台使用框架`vue-cli`,具体搭建流程参见[《WeBASE管理 图形化合约IDE提供了一整套的合约管理工具:新建合约,保存合约,编译合约,部署合约,调用合约接口。其中,新建合约可以通过编辑键入合约内容,也可以上传合约文件;编译合约后才可以部署合约;部署合约成功后,可以通过发送交易调用合约接口。具体操作步骤可以参考上一章节中系统初始化配置介绍。 合约IDE: +- 进行Liquid合约编译需要在WeBASE-Front所在主机配置Liquid环境,可参考WeBASE-Front节点前置文档中的[Liquid配置](../WeBASE-Front/liquid.md)或参考[Liquid环境配置](https://liquid-doc.readthedocs.io/zh_CN/latest/docs/quickstart/prerequisite.html)进行配置后方可使用。 +- 若当前群组属于Liquid群组(Wasm群组),合约IDE将自动切换至Liquid编译模式,并自动检查是否已在节点前置所在主机配置Liquid环境。 ![](../../images/WeBASE-Console-Suit/contract_ide.png) @@ -171,7 +183,8 @@ WeBASE管理台使用框架`vue-cli`,具体搭建流程参见[《WeBASE管理 已登记合约:包含通过IDE部署的合约、导入ABI的合约 -![](../../images/WeBASE-Console-Suit/contract_list.png) + +![](../../images/WeBASE-Console-Suit/lab/contract_list.png) 链上全量合约:包含通过其他平台部署到链上的合约与WeBASE已登记的合约(链上合约只有合约地址),可通过导入按钮,填入合约ABI导入到本地 @@ -182,6 +195,30 @@ ABI编码:支持对ABI的方法与入参进行编码 ![](../../images/WeBASE-Console-Suit/abi_analysis.png) + +合约仓库:合约仓库是WeBASE整理社区贡献者所贡献的合约案例,其中包含基础的工具合约、存证合约、积分合约等。 + +![](../../images/WeBASE-Console-Suit/lab/contract_warehouse.png) + + +CNS查询:CNS(Contract Name Service)是通过提供链上合约名称与合约地址映射关系的记录及相应的查询功能,方便调用者通过记忆简单的合约名来实现对链上合约的调用。详情可查看FISCO-BCOS文档的 [CNS方案](https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/design/features/cns_contract_name_service.html#cns) + +注册CNS后,CNS可以根据合约名和合约版本号查询CNS信息(合约名和合约版本号用英文冒号连接)。若缺失合约版本号,则返回所有符合合约名的合约信息。 +- 需要在合约管理页面部署合约时**勾选CNS**,或合约列表页面中点击**CNS注册**,即可完成注册 + +![](../../images/WeBASE-Console-Suit/new_cns_index.png) + + +EventLog查看:支持输入合约地址和ABI、区块范围和Event名,即可查询并同步返回 + +![EventLog](../../images/WeBASE-Console-Suit/event_sync_query.png) + +BFS:BFS(BBlockchain File System)是FISCO BCOS 3.0中新增的功能,可通过类似文件系统的方式查看链上所部署的合约,详情请参考[BFS文档](https://fisco-bcos-doc.readthedocs.io/zh_CN/latest/docs/design/contract_directory.html) +- 部署的合约会在`/apps`目录下产生一个合约文件 + +![](../../images/WeBASE-Console-Suit/lab/bfs_manage.png) + + ### 私钥管理 私钥管理包含新建私钥用户和新建公钥用户两个功能。在合约管理界面,可以看到合约部署和交易调用功能。这里的私钥管理可以新建私钥用户,私钥将托管在签名服务中,然后通过签名服务对合约部署和合约调用进行签名。注:外部账户可通过新建公钥账户导入,主要用于把交易和用户关联起来。 @@ -211,7 +248,16 @@ ABI编码:支持对ABI的方法与入参进行编码 ### 系统管理 -系统管理目前支持系统配置管理、证书管理的功能。 +系统管理目前支持权限管理、系统配置管理、证书管理的功能。 + +**权限管理**:在FISCO BCOS3.0中,链上角色按照不同的权责可划分为三类:治理角色、合约管理员角色和用户角色,三种角色依次进行管理和被管理。详情可参考[FISCO BCOS权限治理体系设计](https://fisco-bcos-doc.readthedocs.io/zh_CN/latest/docs/design/committee_design.html)和[FISCO BCOS权限治理使用指南](https://fisco-bcos-doc.readthedocs.io/zh_CN/latest/docs/develop/committee_usage.html) + +值得注意的是,在区块链初始化启动之前,在配置中必须**开启并设置好权限治理的配置**,才能正确启动权限治理模式。区块链启动后再配置将不起作用。详细方法参考[FISCO BCOS权限治理使用指南](https://fisco-bcos-doc.readthedocs.io/zh_CN/latest/docs/develop/committee_usage.html) +- 开启权限治理模式的主要要点是:将`is_auth_check`选项置为`true`,`auth_admin_account`初始委员会账户地址需要配置正确的地址。FISCO BCOS不同的节点部署模式,开启权限治理的方式略有不同 +- 开启权限后,需要**在WeBASE权限管理页面中导入对应的链管理员私钥** + +![](../../images/WeBASE-Console-Suit/lab/permission_home.png) + **系统配置管理**:系统属性包含FISCO-BCOS链的tx_count_limit和tx_gas_limit两种属性值的配置。注:一般不建议随意修改tx_count_limit和tx_gas_limit,如下情况可修改这些参数: - 机器网络或CPU等硬件性能有限:调小tx_count_limit,降低业务压力; @@ -331,6 +377,17 @@ FISCO-BCOS证书说明可以参考FISCO-BCOS使用手册的[证书说明](https: ![](../../images/WeBASE-Console-Suit/abnormal_contract.png) +### 订阅事件 + +订阅事件管理:可查看前置中已订阅的链上事件通知,包括出块事件列表和合约Event事件列表。详情请参考[节点前置-链上事件订阅和通知](../WeBASE-Front/appendix.html#event_subscribe) + +出块事件列表: + +![](../../images/WeBASE-Console-Suit/event_new_block.png) + +合约Event事件列表: +![](../../images/WeBASE-Console-Suit/event_contract_event.png) + ### 账号管理 账号管理提供管理台登陆账号的管理功能。管理台用户分为三种角色: @@ -355,6 +412,29 @@ FISCO-BCOS证书说明可以参考FISCO-BCOS使用手册的[证书说明](https: ![](../../images/WeBASE-Console-Suit/login_user_add_2.png) +### 移动端管理台 + +移动端管理台:支持区块链数据概览、链上合约、链上用户、节点列表、区块列表和交易列表的展示 +- 在移动端设备访问WeBASE时将自动切换到移动端管理台页面 + +![](../../images/WeBASE-Console-Suit/web_mobile.png) + +### 数据监控大屏 + +数据监控大屏页面的入口位于WeBASE管理台的左上角,点击“数据大屏”即可进入数据监控大屏,适用于企业级控制中心需要全局监控链状态数据的场景。 +- 数据大屏每次仅展示单个群组的数据,并定时访问后台刷新数据。 + +![](../../images/WeBASE-Console-Suit/lab/big_screen_lab.png) + +在“节点管理”中,可以点击节点列表中的“备注”按钮,为数据大屏中的节点配置IP地址、机构名与城市。 + +![](../../images/WeBASE-Console-Suit/ecc_node_desc.png) + +在右上角的“群组管理”中,可以点击群组列表的“备注”按钮,为数据大屏中的群组配置群组应用名(标题) + +![](../../images/WeBASE-Console-Suit/ecc_group_desc.png) + + ## 升级兼容说明 diff --git a/docs/WeBASE-Front/index.md b/docs/WeBASE-Front/index.md index 46fdc0f9..5f8313f3 100644 --- a/docs/WeBASE-Front/index.md +++ b/docs/WeBASE-Front/index.md @@ -1,12 +1,13 @@ -# 节点前置服务 - -```eval_rst -.. toctree:: - :maxdepth: 1 - - README.md - install.md - interface.md - upgrade.md - appendix.md +# 节点前置服务 + +```eval_rst +.. toctree:: + :maxdepth: 1 + + README.md + install.md + interface.md + upgrade.md + appendix.md + liquid.md ``` \ No newline at end of file diff --git a/docs/WeBASE-Front/install.md b/docs/WeBASE-Front/install.md index 350c9eaf..4d1d6ae8 100644 --- a/docs/WeBASE-Front/install.md +++ b/docs/WeBASE-Front/install.md @@ -4,7 +4,7 @@ | 依赖软件 | 支持版本 | | :-: | :-: | -| Java | Java 1.8或以上版本 | +| Java | JDK 8 至 14 | | FISCO-BCOS | v2.0.0及以上版本 | **备注:** Java推荐使用[OracleJDK](https://www.oracle.com/technetwork/java/javase/downloads/index.html),可参考[JDK配置指引](./appendix.html#jdk)(CentOS的yum仓库的OpenJDK缺少JCE(Java Cryptography Extension),导致Web3SDK无法正常连接区块链节点) @@ -19,6 +19,13 @@ WeBASE-Front v1.2.2+已支持 [国密版FISCO-BCOS](https://fisco-bcos-documenta WeBASE-Front v1.4.2已支持solidity `v0.5.1`和`v0.6.10` +#### Liquid支持 + +如果使用的`liquid`合约的链并在WeBASE-Front的合约IDE中编译Liquid合约,要求**手动**在WeBASE-Front所在主机[配置Liquid环境](https://liquid-doc.readthedocs.io/zh_CN/latest/docs/quickstart/prerequisite.html) + +配置好Liquid环境后,需要重启WeBASE-Front + + ## 2. 拉取代码 执行命令: ```shell @@ -39,13 +46,13 @@ git checkout lab 使用以下方式编译构建,如果出现问题可以查看 [常见问题解答](./appendix.html#id6) : -方式一:如果服务器已安装Gradle,且版本为Gradle-4.10或以上 +方式一:如果服务器已安装Gradle,且版本为gradle-4.10至gradle-6.x版本 ```shell gradle build -x test ``` -方式二:如果服务器未安装Gradle,或者版本不是Gradle-4.10或以上,使用gradlew编译 +方式二:如果服务器未安装Gradle,或者版本不是gradle-4.10至gradle-6.x版本,使用gradlew编译 ```shell chmod +x ./gradlew && ./gradlew build -x test diff --git a/docs/WeBASE-Front/interface.md b/docs/WeBASE-Front/interface.md index 415cd43a..b8f2f956 100644 --- a/docs/WeBASE-Front/interface.md +++ b/docs/WeBASE-Front/interface.md @@ -137,6 +137,8 @@ HTTP POST | 11 | 合约来源 | contractSource | String | | 是 | | | 12 | 是否aes | useAes | Boolean | | 是 | | | 13 | 用户 | user | String | | 是 | | +| 14 | 是否为liquid | isWasm | boolean | | 是 | 默认为false,如果为true,则需要传入contractAddress | +| 15 | 合约地址 | contractAddress | String | | 否 | 如果isWasm为true,则合约地址非空,格式以"/"开头,如/apps | **2)数据格式** @@ -158,7 +160,8 @@ HTTP POST "signUserId": "string", "useAes": true, "user": "string", - "version": "string" + "version": "string", + "isWasm": false } ``` @@ -235,6 +238,8 @@ HTTP POST | 11 | 用户编号 | signUserId | String | | 是 | WeBASE-Sign中的用户编号,通过webase-sign创建私钥获取 | | 12 | 是否aes | useAes | Boolean | | 是 | true表示使用aes,false表示不使用aes | | 13 | 用户 | user | String | | 是 | | +| 14 | 是否为liquid | isWasm | boolean | | 是 | 默认为false,如果为true,则需要传入contractAddress | +| 15 | 合约地址 | contractAddress | String | | 否 | 如果isWasm为true,则合约地址非空,格式以"/"开头,如/apps | **2)数据格式** @@ -256,7 +261,8 @@ HTTP POST "signUserId": "string", "useAes": true, "user": "string", - "version": "string" + "version": "string", + "isWasm": false } ``` @@ -475,6 +481,7 @@ HTTP POST | 8 | 合约源码 | contractSource | String| | 否 | | | 9 | 合约地址 | contractAddress | String | | 否 | | | 10 | 合约版本 | version | String | | 否 | | +| 11 | 是否为liquid | isWasm | boolean | | 是 | 默认为false,此处需要传入为true | **2)数据格式** @@ -1372,6 +1379,249 @@ http://localhost:5002/WeBASE-Front/contract/findCns } ``` + +### 1.19. 检测是否已配置Liquid环境 + +#### 接口描述 + +通过cargo命令和liquid命令,检测WeBASE-Front所在主机是否已配置Liquid环境 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/contract/liquid/check** + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | --------------- | -------- | ------------ | -------- | -------- | + +**2)数据格式** + +``` +http://localhost:5002/WeBASE-Front/contract/liquid/check +``` + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **必填** | **说明** | +| -------- | -------- | --------------- | -------- | -------- | --------------------- | +| 1 | 返回码 | code | String | 是 | 返回码信息请参看附录1 | +| 2 | 提示信息 | message | String | 是 | | +| 3 | 返回数据 | data | List | 否 | | + +**2)数据格式** + +``` +{ + "code": 0, + "message": "success", + "data": null +} +``` + + +### 1.20. 编译liquid合约 + +#### 接口描述 + +传入合约源码、编译liquid合约,并返回编译得到的abi和bin。 + +由于liquid合约类似于rust编译,耗时比solidity更长(3分钟左右),因此接口返回状态为“编译中”时,后台将异步执行编译任务,通过轮询`/contract/liquid/compile/check`接口可以获取最新的编译结果 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/contract/liquid/compile** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ------------ | ------------ | -------------- | ------------ | -------- | -------- | +| 1 | 所属群组 | groupId | String | | 是 | | +| 2 | 合约编号 | contractId | Long | | 是 | 需要先保存合约得到合约id后,再进行编译 | +| 3 | 合约名称 | contractName | String | | 是 | | +| 4 | 合约所在目录 | contractPath | String | | 是 | 默认"/" | +| 5 | 合约源码 | contractSource | String | | 是 | lib.rs中的liquid源码,需要**base64**编码后传入 | +| 6 | 是否为liquid | isWasm | boolean | | 是 | 默认为false,此处需要传入为true | +| 7 | 合约地址 | contractAddress | String | | 否 | | + +**2)数据格式** + +``` +{ + "groupId": "group0", + "contractName": "LiquidHelloWorld", + "contractPath": "/", + "contractSource": "IyFbY2ZnX2F0dHIobm90KGZlYXR1cmUgPSAic3RkIiksIG5vX3N0ZCldCgp1c2UgbGlxdWlkOjpzdG9yYWdlOwp1c2UgbGlxdWlkX2xhbmcgYXMgbGlxdWlkOwoKI1tsaXF1aWQ6OmNvbnRyYWN0XQptb2QgaGVsbG9fd29ybGQgewogICAgdXNlIHN1cGVyOjoqOwoKICAgICNbbGlxdWlkKHN0b3JhZ2UpXQogICAgc3RydWN0IEhlbGxvV29ybGQgewogICAgICAgIG5hbWU6IHN0b3JhZ2U6OlZhbHVlPFN0cmluZz4sCiAgICB9CgogICAgI1tsaXF1aWQobWV0aG9kcyldCiAgICBpbXBsIEhlbGxvV29ybGQgewogICAgICAgIHB1YiBmbiBuZXcoJm11dCBzZWxmKSB7CiAgICAgICAgICAgIHNlbGYubmFtZS5pbml0aWFsaXplKFN0cmluZzo6ZnJvbSgiQWxpY2UiKSk7CiAgICAgICAgfQoKICAgICAgICBwdWIgZm4gZ2V0KCZzZWxmKSAtPiBTdHJpbmcgewogICAgICAgICAgICBzZWxmLm5hbWUuY2xvbmUoKQogICAgICAgIH0KCiAgICAgICAgcHViIGZuIHNldCgmbXV0IHNlbGYsIG5hbWU6IFN0cmluZykgewogICAgICAgICAgICBzZWxmLm5hbWUuc2V0KG5hbWUpCiAgICAgICAgfQogICAgfQoKICAgICNbY2ZnKHRlc3QpXQogICAgbW9kIHRlc3RzIHsKICAgICAgICB1c2Ugc3VwZXI6Oio7CgogICAgICAgICNbdGVzdF0KICAgICAgICBmbiBnZXRfd29ya3MoKSB7CiAgICAgICAgICAgIGxldCBjb250cmFjdCA9IEhlbGxvV29ybGQ6Om5ldygpOwogICAgICAgICAgICBhc3NlcnRfZXEhKGNvbnRyYWN0LmdldCgpLCAiQWxpY2UiKTsKICAgICAgICB9CgogICAgICAgICNbdGVzdF0KICAgICAgICBmbiBzZXRfd29ya3MoKSB7CiAgICAgICAgICAgIGxldCBtdXQgY29udHJhY3QgPSBIZWxsb1dvcmxkOjpuZXcoKTsKCiAgICAgICAgICAgIGxldCBuZXdfbmFtZSA9IFN0cmluZzo6ZnJvbSgiQm9iIik7CiAgICAgICAgICAgIGNvbnRyYWN0LnNldChuZXdfbmFtZS5jbG9uZSgpKTsKICAgICAgICAgICAgYXNzZXJ0X2VxIShjb250cmFjdC5nZXQoKSwgIkJvYiIpOwogICAgICAgIH0KICAgIH0KfQ==", + "contractAbi": "[{\"inputs\":[],\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"string\",\"type\":\"string\"}],\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0,\"path\":[],\"read_only\":false,\"slot\":0}],\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"type\":\"function\"}]", + "isWasm": true +} +``` + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **必填** | **说明** | +| -------- | -------- | --------------- | -------- | -------- | --------------------- | +| 1 | 返回码 | code | String | 是 | 返回码信息请参看附录1 | +| 2 | 提示信息 | message | String | 是 | | +| 3 | 返回数据 | data | List | 否 | | +| 3.1 | 群组编号 | groupId | Integer | 是 | | +| 3.2 | 合约路径 | contractPath | String | 是 | 默认空,代表了"/"路径 | +| 3.3 | 合约名 | contractName | String | 是 | | +| 3.4 | 编译状态 | status | Integer | 是 | 1-编译中,2-编译成功,3-编译失败,4-编译已重置 | +| 3.5 | 合约Abi | abi | String | 是 | 编译成功时为非空 | +| 3.6 | 合约bytecode-bin | bin | String | 是 | 编译成功时为非空,用于部署合约 | +| 3.7 | 编译描述 | description | String | 是 | 编译失败时,错误原因将记录在此字段 | +| 3.8 | 修改时间 | modifyTime | LocalDatetime | 是 | | +| 3.9 | 创建时间 | createTime | LocalDatetime | 是 | | + +**2)数据格式** + +状态为编译中时: (编译中时,后台将异步执行编译任务,通过轮询`/contract/liquid/compile/check`接口可以获取最新的编译结果) +``` +{ + "code": 0, + "message": "success" + "data": { + "groupId": "group", + "contractPath": "", + "contractName": "Hello", + "status": "1", + "bin": null, + "abi": null, + "createTime": "2020-12-30 16:32:28", + "modifyTime": "2020-12-30 16:32:28" + } +} +``` + +状态为编译成功时: +``` +{ + "code": 0, + "message": "success" + "data": { + "groupId": "group", + "contractPath": "", + "contractName": "Hello", + "status": "2", + "bin": "", //bin过长,此处略 + "abi":"[{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"type\":\"function\",\"payable\":false,\"stateMutability\":\"view\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"name\":\"set\",\"outputs\":[],\"type\":\"function\",\"payable\":false,\"stateMutability\":\"nonpayable\"},{\"constant\":false,\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"name\":\"SetName\",\"outputs\":null,\"type\":\"event\",\"payable\":false,\"stateMutability\":null}]", + "createTime": "2020-12-30 16:32:28", + "modifyTime": "2020-12-30 16:32:28" + } +} +``` + + +### 1.20. 查询liquid合约编译进度 + +#### 接口描述 + +根据群组ID,合约路径,合约名获取liquid合约的编译状态 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/contract/liquid/compile/check** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ------------ | ------------ | -------------- | ------------ | -------- | -------- | +| 1 | 所属群组 | groupId | String | | 是 | | +| 2 | 合约编号 | contractId | Long | | 否 | 需要先保存合约得到合约id后,再进行编译 | +| 3 | 合约名称 | contractName | String | | 是 | | +| 4 | 合约所在目录 | contractPath | String | | 是 | 默认"/" | + +**2)数据格式** + +``` +{ + "groupId": "group0", + "contractName": "LiquidHelloWorld", + "contractPath": "/" +} +``` + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **必填** | **说明** | +| -------- | -------- | --------------- | -------- | -------- | --------------------- | +| 1 | 返回码 | code | String | 是 | 返回码信息请参看附录1 | +| 2 | 提示信息 | message | String | 是 | | +| 3 | 返回数据 | data | List | 否 | | +| 3.1 | 群组编号 | groupId | Integer | 是 | | +| 3.2 | 合约路径 | contractPath | String | 是 | 默认"/" | +| 3.3 | 合约名 | contractName | String | 是 | | +| 3.4 | 编译状态 | status | Integer | 是 | 1-编译中,2-编译成功,3-编译失败,4-编译已重置 | +| 3.5 | 合约Abi | abi | String | 是 | 编译成功时为非空 | +| 3.6 | 合约bytecode-bin | bin | String | 是 | 编译成功时为非空,用于部署合约 | +| 3.7 | 编译描述 | description | String | 是 | 编译失败时,错误原因将记录在此字段 | +| 3.8 | 修改时间 | modifyTime | LocalDatetime | 是 | | +| 3.9 | 创建时间 | createTime | LocalDatetime | 是 | | + +**2)数据格式** + +状态为编译中时,轮询当前接口直到状态为编译成功、编译失败,status=1: +``` +{ + "code": 0, + "message": "success" + "data": { + "groupId": "group", + "contractPath": "/", + "contractName": "Hello", + "status": "1", + "bin": null, + "abi": null, + "createTime": "2020-12-30 16:32:28", + "modifyTime": "2020-12-30 16:32:28" + } +} +``` + +状态为编译成功时,status=2: +``` +{ + "code": 0, + "message": "success" + "data": { + "groupId": "group", + "contractPath": "/", + "contractName": "Hello", + "status": "2", + "bin": "", //bin过长,此处略 + "abi":"[{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"type\":\"function\",\"payable\":false,\"stateMutability\":\"view\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"name\":\"set\",\"outputs\":[],\"type\":\"function\",\"payable\":false,\"stateMutability\":\"nonpayable\"},{\"constant\":false,\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"name\":\"SetName\",\"outputs\":null,\"type\":\"event\",\"payable\":false,\"stateMutability\":null}]", + "createTime": "2020-12-30 16:32:28", + "modifyTime": "2020-12-30 16:32:28" + } +} +``` + + ## 2. 密钥接口 ### 2.1. 创建私钥接口 @@ -5152,8 +5402,1652 @@ headers: content-disposition: attachment;filename*=UTF-8''conf.zip } ``` +## 11. 预编译权限管理 + + +### 11.1. 查询链是否开启权限 + +#### 接口描述 + +通过接口查询链是否开启权限治理功能 + +**注:** + +> 权限治理功能需要在启动链时进行配置 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/base/queryChainHasAuth** + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | + +**2)数据格式** + +``` +http://localhost:5002/WeBASE-Front/precntauth/authmanager/base/queryChainHasAuth?groupId=g1 +``` + +#### 响应参数 + +**1)数据格式** + +a、成功1: + +``` +true +``` + +b、成功2: + +``` +false +``` + +### 11.2. 查询链环境 + +#### 接口描述 + +通过接口查询链是liquid/还是solidity环境 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/base/queryExecEnvIsWasm** + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | + +**2)数据格式** + +``` +http://localhost:5002/WeBASE-Front/precntauth/authmanager/base/queryExecEnvIsWasm?groupId=g1 +``` + +#### 响应参数 + +**1)数据格式** + +a、成功1: + +``` +true +``` + +b、成功2: + +``` +false +``` + +### 11.3.查询治理委员信息(everyone可访问) + +#### 接口描述 + +通过接口查询链的治理委员信息 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/everyone/cmtInfo** + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | + +**2)数据格式** + +``` +http://localhost:5002/WeBASE-Front/precntauth/authmanager/everyone/cmtInfo?groupId=g1 +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +[ + { + "governorList": [ + { + "governorAddress": "0x015577ab8c903adcf9b65433f16e574d6daf0559", + "weight": 1 + }, + { + "governorAddress": "0x36c10bfbce3b6550ed92a5ebbb9a44e052bfd285", + "weight": 2 + } + ], + "participatesRate": 100, + "winRate": 90 + } +] +``` + +b、失败: + +``` +{ + "code": 500, + "errorMessage": "get Client failed, e: The group not exist, please check the groupID, groupID: g3" +} +``` + +### 11.4. 查询合约管理员信息(everyone可访问) + +#### 接口描述 + +通过接口查询某合约的管理员信息 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/everyone/contract/admin** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 合约地址 | contractAddr | String | | 是 | | + +**2)数据格式** + +``` +{ + "contractAddr": "0xB47fd49b0f1Af2Fce3a1824899b60C2b6A29B851", + "groupId": "g1" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +0x489877b18f93353c67d252c1b8f4b745d41c2107 +``` + +b、失败1,查询群组不存在: + +``` +{ + "code": 500, + "errorMessage": "get Client failed, e: The group not exist, please check the groupID, groupID: g3" +} +``` + +​ 失败2,查询合约地址错误: + +``` +{ + "code": 19, + "errorMessage": "Call address error" +} +``` + +​ 失败3,查询合约地址不存在: + +``` +0x0000000000000000000000000000000000000000 +``` + +### 11.5. 查询合约函数访问权限(everyone可访问) + +#### 接口描述 + +通过接口查询某用户对某合约函数的访问权限 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/everyone/contract/method/auth** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 合约地址 | contractAddr | String | | 是 | | +| 3 | 合约函数 | func | String | | 是 | | +| 4 | 用户地址 | userAddress | String | | 是 | | + +**2)数据格式** + +``` +{ + "contractAddr": "0xB47fd49b0f1Af2Fce3a1824899b60C2b6A29B851", + "func": "set", + "groupId": "g1", + "userAddress": "0x489877b18f93353c67d252c1b8f4b745d41c2107" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +true +``` + +b、失败1,查询群组不存在: + +``` +{ + "code": 500, + "errorMessage": "get Client failed, e: The group not exist, please check the groupID, groupID: g3" +} +``` + + 失败2,查询合约地址错误: + +``` +{ + "code": 19, + "errorMessage": "Call address error" +} +``` + +### 11.6. 查询合约部署权限(everyone可访问) + +#### 接口描述 + +通过接口查询全局合约部署权限 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/everyone/deploy/type** + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | + +**2)数据格式** + +``` +http://127.0.0.1:5002/WeBASE-Front/precntauth/authmanager/everyone/deploy/type?groupId=g1 +``` + +#### 响应参数 + +**1)数据格式** + +a、成功,可部署: + +``` +0 +``` + +b、失败1,查询群组不存在: + +``` +{ + "code": 500, + "errorMessage": "get Client failed, e: The group not exist, please check the groupID, groupID: g0" +} +``` + +### 11.7. 查询单一提案信息(everyone可访问) + +#### 接口描述 + +通过接口查询某个提案信息 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/everyone/proposalInfo** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | ---------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 提案Id | proposalId | BigInteger | | 是 | | + +**2)数据格式** + +``` +{ + "groupId": "g1", + "proposalId": 1 +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功,可部署: + +``` +[ + { + "resourceId": "0xc0523dbdd94ba27e14b0336d799489340ca24cdf", + "proposer": "0x015577ab8c903adcf9b65433f16e574d6daf0559", + "proposalType": 31, + "blockNumberInterval": 604809, + "status": 2, + "agreeVoters": [ + "0x015577ab8c903adcf9b65433f16e574d6daf0559" + ], + "againstVoters": [], + "statusString": "finished", + "proposalTypeString": "resetAdmin" + } +] +``` + +b、失败1,查询提案不存在: + +``` +[ + { + "resourceId": "0x0000000000000000000000000000000000000000", + "proposer": "0x0000000000000000000000000000000000000000", + "proposalType": 0, + "blockNumberInterval": 0, + "status": 0, + "agreeVoters": [], + "againstVoters": [], + "statusString": "unknown", + "proposalTypeString": "unknown" + } +] +``` + +### 11.8. 查询提案总数(everyone可访问) + +#### 接口描述 + +通过接口查询某个提案信息 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/everyone/proposalInfo** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | + +**2)数据格式** + +``` +http://127.0.0.1:5002/WeBASE-Front/precntauth/authmanager/everyone/proposalInfoCount?groupId=g1 +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +5 +``` + +b、失败1,查询提案不存在: + +``` +{ + "code": 500, + "errorMessage": "get Client failed, e: The group not exist, please check the groupID, groupID: g0" +} +``` + +### 11.9. 查询提案列表(everyone可访问) + +#### 接口描述 + +通过接口查询某群组提案列表 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/everyone/proposalInfo** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | ---------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 页面数 | pageNum | Integer | | 是 | 所在页面 | +| 3 | 页面大小 | pageSize | Integer | | 是 | 页面数据量 | + +**2)数据格式** + +``` +http://127.0.0.1:5002/WeBASE-Front/precntauth/authmanager/everyone/proposalInfoList +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +[ + { + "resourceId": "0x02a6340ef1d8a780f0ddf01dde9141cc09f678d6", + "proposer": "0x015577ab8c903adcf9b65433f16e574d6daf0559", + "proposalType": "setWeight", + "blockNumberInterval": 604825, + "status": "notEnoughVotes", + "agreeVoters": [ + "0x015577ab8c903adcf9b65433f16e574d6daf0559" + ], + "againstVoters": [], + "proposalId": 5 + }, + { + "resourceId": "0x36c10bfbce3b6550ed92a5ebbb9a44e052bfd285", + "proposer": "0x36c10bfbce3b6550ed92a5ebbb9a44e052bfd285", + "proposalType": "setWeight", + "blockNumberInterval": 604812, + "status": "failed", + "agreeVoters": [ + "0x36c10bfbce3b6550ed92a5ebbb9a44e052bfd285" + ], + "againstVoters": [ + "0x015577ab8c903adcf9b65433f16e574d6daf0559" + ], + "proposalId": 4 + }, + { + "resourceId": "0x0000000000000000000000000000000000010001", + "proposer": "0x015577ab8c903adcf9b65433f16e574d6daf0559", + "proposalType": "setRate", + "blockNumberInterval": 604811, + "status": "finished", + "agreeVoters": [ + "0x015577ab8c903adcf9b65433f16e574d6daf0559" + ], + "againstVoters": [], + "proposalId": 3 + }, + { + "resourceId": "0x36c10bfbce3b6550ed92a5ebbb9a44e052bfd285", + "proposer": "0x015577ab8c903adcf9b65433f16e574d6daf0559", + "proposalType": "setWeight", + "blockNumberInterval": 604810, + "status": "finished", + "agreeVoters": [ + "0x015577ab8c903adcf9b65433f16e574d6daf0559" + ], + "againstVoters": [], + "proposalId": 2 + }, + { + "resourceId": "0xc0523dbdd94ba27e14b0336d799489340ca24cdf", + "proposer": "0x015577ab8c903adcf9b65433f16e574d6daf0559", + "proposalType": "resetAdmin", + "blockNumberInterval": 604809, + "status": "finished", + "agreeVoters": [ + "0x015577ab8c903adcf9b65433f16e574d6daf0559" + ], + "againstVoters": [], + "proposalId": 1 + } +] +``` + +### 11.10. 查询用户全局部署权限(everyone可访问) + +#### 接口描述 + +通过接口查询用户全局部署权限 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/everyone/usr/deploy** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ----------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 用户地址 | userAddress | String | | 是 | | + +**2)数据格式** + +``` +{ + "groupId": "g1", + "userAddress": "0x489877b18f93353c67d252c1b8f4b745d41c2107" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +true +``` + +### 11.11. 设置合约的访问权限类型(admin可访问) + +#### 接口描述 + +通过接口设置合约的访问权限类型 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/admin/method/auth/type** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | ------------ | -------- | ------------ | -------- | ------------------ | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 合约地址 | contractAddr | String | | 是 | | +| 4 | 合约函数 | func | String | | 是 | | +| 5 | 用户签名Id | signUserId | String | | 是 | | +| 6 | 权限类型 | authType | Integer | | 是 | 1.白名单;2.黑名单 | + +**2)数据格式** + +``` +{ + "authType": 1, + "contractAddr": "4721d1a77e0e76851d460073e64ea06d9c104194", + "fromAddress": "0xe88ff54644de54fa32ac845c05ed2b7d5677c078", + "func": "set", + "groupId": "group0", + "signUserId": "5db5a98aef544650aa3864f4cb27af31" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 11.12. 设置某用户对合约的访问权限(admin可访问) + +#### 接口描述 + +通过接口设置某用户对合约函数的访问权限 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/admin/method/auth/set** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ------------ | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 合约地址 | contractAddr | String | | 是 | | +| 4 | 合约函数 | func | String | | 是 | | +| 5 | 用户签名Id | signUserId | String | | 是 | | +| 6 | 是否开启权限 | isOpen | Boolean | | 是 | | + +**2)数据格式** + +``` +{ + "contractAddr": "0xB47fd49b0f1Af2Fce3a1824899b60C2b6A29B851", + "fromAddress": "0x489877b18f93353c67d252c1b8f4b745d41c2107", + "func": "set", + "groupId": "g1", + "isOpen": true, + "signUserId": "string", + "userAddress": "0x489877b18f93353c67d252c1b8f4b745d41c2107" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 11.13. 设置某合约的管理员(committee可访问) + +#### 接口描述 + +通过接口设置某合约的管理员 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/committee/contract/admin** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ------------ | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 合约地址 | contractAddr | String | | 是 | | +| 4 | 合约新管理员 | newAdmins | String | | 是 | | +| 5 | 用户签名Id | signUserId | String | | 是 | | + +**2)数据格式** + +``` +{ + "contractAddr": "4721d1a77e0e76851d460073e64ea06d9c104194", + "fromAddress": "0x70da1da76e0e423ec582ec866fae749af67ec4c0", + "groupId": "group0", + "newAdmin": "0x70da1da76e0e423ec582ec866fae749af67ec4c0", + "signUserId": "5db5a98aef544650aa3864f4cb27af31" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 11.14. 设置全局部署权限(committee可访问) + +#### 接口描述 + +通过接口设置全局部署类型 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/committee/deploy/type** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | -------------- | -------- | ------------ | -------- | ------------------ | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 部署类型 | deployAuthType | Integer | | 是 | 1.白名单;2.黑名单 | +| 4 | 用户签名Id | signUserId | String | | 是 | | + +**2)数据格式** + +``` +{ + "deployAuthType":1, + "fromAddress": "", + "groupId": "group0", + "signUserId": "5db5a98aef544650aa3864f4cb27af31" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 11.15. 设置治理委员账户(committee可访问) + +#### 接口描述 + +通过接口设置治理委员(新增/更新/删除) + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/committee/governor** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | -------------- | -------- | ------------ | -------- | ---------------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 账户地址 | accountAddress | Integer | | 是 | 对该账户进行操作 | +| 4 | 分配权重 | weight | Integer | | 是 | | +| 5 | 用户签名Id | signUserId | String | | 是 | | + +**2)数据格式** + +``` +{ + "accountAddress": "0xe88ff54644de54fa32ac845c05ed2b7d5677c078", + "fromAddress": "", + "groupId": "group0", + "signUserId": "5db5a98aef544650aa3864f4cb27af31", + "weight": 5 +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 11.16. 设置治理阈值(committee可访问) + +#### 接口描述 + +通过接口设置治理阈值 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/committee/rate** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | ---------------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 参与阈值 | participatesRate | Integer | | 是 | | +| 4 | 获胜阈值 | winRate | Integer | | 是 | | +| 5 | 用户签名Id | signUserId | String | | 是 | | + +**2)数据格式** + +``` +{ + "fromAddress": "string", + "groupId": "group0", + "participatesRate": 51, + "signUserId": "5db5a98aef544650aa3864f4cb27af31", + "winRate": 51 +} +``` + +#### 响应参数 + +**1)数据格式** + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 11.17. 对提案投票(committee可访问) + +#### 接口描述 + +通过接口设置对提案进行投票 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/committee/proposal/vote** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | ----------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 提案Id | proposalId | Integer | | 是 | | +| 4 | 是否同意 | agree | Boolean | | 是 | | +| 5 | 用户签名Id | signUserId | String | | 是 | | + +**2)数据格式** + +``` +{ + "agree": true, + "fromAddress": "string", + "groupId": "group0", + "proposalId": 55, + "signUserId": "5db5a98aef544650aa3864f4cb27af31" +} +``` + +#### 响应参数 + +**1)数据格式** + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 11.18.撤销提案(committee可访问) + +#### 接口描述 + +通过接口设置撤销某提案 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/authmanager/committee/proposal/revoke** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | ----------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 提案Id | proposalId | Integer | | 是 | | +| 4 | 用户签名Id | signUserId | String | | 是 | | + +**2)数据格式** + +``` +{ + "fromAddress": "string", + "groupId": "group0", + "proposalId": 55, + "signUserId": "5db5a98aef544650aa3864f4cb27af31" +} +``` + +#### 响应参数 + +**1)数据格式** + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +## 12. 预编译合约管理 + + +### 12.1. 创建BFS路径 + +#### 接口描述 + +通过接口创建BFS + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/precompiled/bfs/create** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | ----------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 创建路径 | path | String | | 是 | | +| 4 | 用户签名Id | signUserId | String | | 是 | | + +**2)数据格式** + +``` +{ + "fromAddress": "", + "groupId": "group0", + "path": "/apps/test9", + "signUserId": "5db5a98aef544650aa3864f4cb27af31" +} +``` + +#### 响应参数 + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 12.2. 查询BFS路径 + +#### 接口描述 + +通过接口查询BFS + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/precompiled/bfs/query** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 查询路径 | path | String | | 是 | | + +**2)数据格式** + +``` +{ + "groupId": "group0", + "path": "/apps" +} +``` + +#### 响应参数 + +``` +[ + "test", + "test1" +] +``` + +### 12.3. 通过contractName查询合约信息 + +#### 接口描述 + +通过groupId和contractName查询合约信息 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/precompiled/cns/queryCnsByName** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 合约名称 | contractName | String | | 是 | | + +**2)数据格式** + +``` +{ + "contractName": "HelloWorld", + "groupId": "group0" +} +``` + +#### 响应参数 + +``` +[ + { + "name": "HelloWorld", + "version": "1.0", + "address": "4721d1a77e0e76851d460073e64ea06d9c104194", + "abi": "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" + }, + { + "name": "HelloWorld", + "version": "2.0", + "address": "4721d1a77e0e76851d460073e64ea06d9c104194", + "abi": "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" + } +] +``` + +### 12.4. 通过contractName和version查询合约信息 + +#### 接口描述 + +通过groupId、contractName、version查询合约信息 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/precompiled/cns/queryCnsByNameVersion** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 合约名称 | contractName | String | | 是 | | +| 3 | 合约版本 | version | String | | 是 | | + +**2)数据格式** + +``` +{ + "contractName": "HelloWorld", + "groupId": "group0", + "version": "1.0" +} +``` + +#### 响应参数 + +``` +{ + "address": "0x4721d1a77e0e76851d460073e64ea06d9c104194", + "abi": "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" +} +``` + +### 12.5. 通过contractName/groupId/version查询合约地址 + +#### 接口描述 + +通过contractName/groupId/version参数查询合约地址 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/precompiled/cns/queryCnsByNameVersion** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 合约名称 | contractName | String | | 是 | | +| 3 | 合约版本 | version | String | | 是 | | + +**2)数据格式** + +``` +{ + "contractName": "HelloWorld", + "groupId": "group0", + "version": "1.0" +} +``` + +#### 响应参数 + +``` +0x4721d1a77e0e76851d460073e64ea06d9c104194 +``` + +### 12.6. 注册合约 + +#### 接口描述 + +通过接口注册合约信息 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/precompiled/cns/reqAddressInfoByNameVersion** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 合约名称 | contractName | String | | 是 | | +| 3 | 合约版本 | version | String | | 是 | | + +**2)数据格式** + +``` +{ + "abiData": "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + "contractAddress": "4721d1a77e0e76851d460073e64ea06d9c104194", + "contractName": "HelloWorld", + "contractVersion": "1.0", + "fromAddress": "", + "groupId": "group0", + "signUserId": "5db5a98aef544650aa3864f4cb27af31" +} +``` + +#### 响应参数 + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 12.7. 查询共识节点列表 + +#### 接口描述 + +通过接口查询共识节点列表 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/precompiled/consensus/list** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 页面数 | pageNumber | Integer | | 是 | | +| 3 | 页面大小 | pageSize | Integer | | 是 | | + +**2)数据格式** + +``` +{ + "groupId": "group0", + "pageNumber": 1, + "pageSize": 5 +} +``` + +#### 响应参数 + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "nodeId": "6447e978505cafd05fc99b731d8fdff31fb07a3c6e9679054fb1880ae6f58aeff638eacfe082d54adca93086c2986bc27a5befeabb7ba39728e24c7da9c786e9", + "nodeType": "sealer", + "weight": 1 + }, + { + "nodeId": "b14bd4a225db308da3f395c69f12ce06f191ff19941d52eebf30cfb5fc979422ad086fedb0378fdcfbcb4630416e71c34aeb421f4fe51792408283bfd7338099", + "nodeType": "sealer", + "weight": 1 + }, + { + "nodeId": "848883c435d5c7e32da7744ffb0659538995994a42c24ec7da81a2fd58cd28e76fbaaf603b81f9134d22f57d112cdbd701cece549121b99f5e436daec11b3267", + "nodeType": "sealer", + "weight": 1 + }, + { + "nodeId": "5007b294c7aadd22d62e0c5e33bae14ee6ec0230ebd34df23f29f0330272f6021fd3a8f2b4a4789f1e2fe7fbc8581c1d371883d9eb1e16a9266905f36d57ab8b", + "nodeType": "sealer", + "weight": 1 + } + ], + "totalCount": 4 +} +``` + +### 12.8. 修改共识节点类型 + +#### 接口描述 + +通过接口查询共识节点列表 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/precompiled/consensus/manage** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ----------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 节点Id | nodeId | String | | 是 | | +| 4 | 节点类型 | nodeType | String | | 是 | | +| 5 | 签名Id | signUserId | String | | 是 | | +| 6 | 权重 | weight | Integer | | 是 | | + +**2)数据格式** + +``` +{ + "fromAddress": "0x2abd2fc35c4553b1f1aa6cf70a4e6ef30b4d53a2", + "groupId": "group0", + "nodeId": "5007b294c7aadd22d62e0c5e33bae14ee6ec0230ebd34df23f29f0330272f6021fd3a8f2b4a4789f1e2fe7fbc8581c1d371883d9eb1e16a9266905f36d57ab8b", + "nodeType": "observer", + "signUserId": "5db5a98aef544650aa3864f4cb27af31", + "weight": 1 +} +``` + +#### 响应参数 + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 12.9. 建表 + +#### 接口描述 + +通过接口插入新的表结构 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/precompiled/kvtable/reqCreateTable** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | ------------ | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 主键 | keyFieldName | String | | 是 | | +| 4 | 值描述 | valueFields | List | | 是 | 对表进行描述 | +| 5 | 签名Id | signUserId | String | | 是 | | +| 6 | 表名 | tableName | String | | 是 | | + +**2)数据格式** + +``` +{ + "fromAddress": "string", + "groupId": "group0", + "keyFieldName": "myKey", + "signUserId": "5db5a98aef544650aa3864f4cb27af31", + "tableName": "test_table", + "valueFields": [ + "valueIsData" + ] +} +``` + +#### 响应参数 + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 12.10. 写表 + +#### 接口描述 + +通过接口在表插入数据 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/precompiled/kvtable/reqSetTable** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------------- | -------- | ------------ | -------- | ---------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 主键 | key | String | | 是 | | +| 4 | 对应值 | fieldNameToValue | JSON | | 是 | 写入JSON值 | +| 5 | 签名Id | signUserId | String | | 是 | | +| 6 | 表名 | tableName | String | | 是 | | + +**2)数据格式** + +``` +{ + "fieldNameToValue": { + "key1": "hi", + "key2": "hello", + "key3": "how are u" + }, + "fromAddress": "string", + "groupId": "group0", + "key": "myKey", + "signUserId": "5db5a98aef544650aa3864f4cb27af31", + "tableName": "test_table" +} +``` + +#### 响应参数 + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 12.11. 读表 + +#### 接口描述 + +通过接口在表读取数据 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/precompiled/kvtable/reqGetTable** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------------- | -------- | ------------ | -------- | ---------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 主键 | key | String | | 是 | | +| 4 | 对应值 | fieldNameToValue | JSON | | 是 | 写入JSON值 | +| 5 | 签名Id | signUserId | String | | 是 | | +| 6 | 表名 | tableName | String | | 是 | | + +**2)数据格式** + +``` +{ + "groupId": "group0", + "key": "myKey", + "tableName": "test_table" +} +``` + +#### 响应参数 + +``` +{ + "key2": "hello", + "key1": "hi", + "key3": "how are u" +} +``` + +### 12.12. 获取群组系统配置 + +#### 接口描述 + +通过接口读取某个群组的系统配置 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/precompiled/sys/config/list** + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | + +**2)数据格式** + +``` +http://127.0.0.1:5002/WeBASE-Front/precntauth/precompiled/sys/config/list?groupId=group0 +``` + +#### 响应参数 + +``` +[ + { + "groupId": "group0", + "configKey": "tx_count_limit", + "configValue": "10" + }, + { + "groupId": "group0", + "configKey": "tx_gas_limit", + "configValue": "300000002" + } +] +``` + +### 12.13. 设置群组系统配置 + +#### 接口描述 + +通过接口设置某个群组的系统配置 + +#### 接口URL + +**http://localhost:5002/WeBASE-Front/precntauth/precompiled/sys/config/list** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ----------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 否 | | +| 3 | 配置主键 | configKey | String | | 是 | | +| 4 | 配置值 | configValue | String | | 是 | | +| 5 | 签名Id | signUserId | String | | 是 | | + +**2)数据格式** + +``` +{ + "configKey": "tx_count_limit", + "configValue": "5", + "fromAddress": "string", + "groupId": "group0", + "signUserId": "5db5a98aef544650aa3864f4cb27af31" +} +``` + +#### 响应参数 + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` -## 11. 附录 +## 附录 ### 1. 返回码信息列表 diff --git a/docs/WeBASE-Front/liquid.md b/docs/WeBASE-Front/liquid.md new file mode 100644 index 00000000..2054f6e5 --- /dev/null +++ b/docs/WeBASE-Front/liquid.md @@ -0,0 +1,214 @@ + +# Liquid配置 + +## 安装rust + +```bash + +# 结尾追加export使用镜像源 +$ vi /etc/profile + +export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static +export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup + + +# 此命令将会自动安装 rustup,rustup 会自动安装 rustc 及 cargo +$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + +Rust is installed now. Great! + +To get started you may need to restart your current shell. +This would reload your PATH environment variable to include +Cargo's bin directory ($HOME/.cargo/bin). + +# 执行一次source使环境变量生效 +$ source $HOME/.cargo/env +``` + +#### 检查版本 +检查rustc和cargo版本,确认安装成功 +```bash +$ rustc --version + +$ cargo --version +``` + +#### 此外需要安装以下工具链组件: + +```bash +$ rustup toolchain install nightly-2021-06-23 --component rust-src rustc-dev llvm-tools-preview +$ rustup default nightly-2021-06-23 +$ rustup target add wasm32-unknown-unknown +``` + + +> 如果当前网络无法访问Rustup官方镜像,请参考 Rustup 镜像安装帮助 更换镜像源。 +https://mirrors.tuna.tsinghua.edu.cn/help/rustup/ + + +#### cargo 更换镜像源 + +```bash +# 编辑cargo配置文件,若没有则新建 +$ vim $HOME/.cargo/config + +[source.crates-io] +registry = "https://github.com/rust-lang/crates.io-index" +replace-with = 'ustc' +[source.ustc] +registry = "git://mirrors.ustc.edu.cn/crates.io-index" +``` + +#### 确保配置 cmake 环境,Linux可以通过以下命令安装: + +要求安装 cmake 3.12及以上版本,gcc 7及以上版本 +```bash + +# CentOS请执行下面的命令 +$ sudo yum install cmake3 +# Ubuntu请执行下面的命令 +$ sudo apt install cmak +``` + +如果centos的yum资源无cmake3,则需要手动下载cmake3进行配置 + +以下载cmake 3.21.3版本为例,到cmake官网下载包后,解压到目录如/data/home/webase目录,并修改/etc/profile,设置cmake环境变量 +```bash + +$ vi /etc/profile + +export CMAKE3_HOME=//data/home/webase/cmake-3.21.3-linux-x86_64 +export PATH=$PATH:$CMAKE3_HOME/bin + +# 环境变量生效 +source /etc/profile +``` + +#### 安装 cargo-liquid +安装前,如果使用的是centos,执行下文命令以确保依赖符合要求,具体可参考[Cargo-Liquid issue 14](https://github.com/WeBankBlockchain/cargo-liquid/issues/14) +```bash +#请确保cmake版本大于3.12 +#请参考下述命令使用gcc7 +$ sudo yum install -y epel-release centos-release-scl +$ sudo yum install -y devtoolset-7 + +# 启用devtool +$ source /opt/rh/devtoolset-7/enable + +# 参考下述命令使用要求版本的rust工具链 +$ rustup toolchain install nightly-2021-06-23 --component rust-src rustc-dev llvm-tools-preview +$ rustup default nightly-2021-06-23 +``` + +确保上述工具版本符合要求后,并执行以上命令尝试安装: + +cargo-liquid 是用于辅助开发 Liquid 智能合约的命令行工具,在终端中执行以下命令安装: + +```bash + +# 通过gitee 安装 +$ cargo install --git https://gitee.com/WeBankBlockchain/cargo-liquid --tag v1.0.0-rc2 --force + +# 通过github安装 +$ cargo install --git https://github.com/WeBankBlockchain/cargo-liquid --tag v1.0.0-rc2 --force +``` + +开始安装后: +```bash + +Updating git repository `https://gitee.com/WeBankBlockchain/cargo-liquid` +Installing cargo-liquid v1.0.0-rc2 (https://gitee.com/WeBankBlockchain/cargo-liquid?tag=v1.0.0-rc2#5da4da65) +Updating `git://mirrors.ustc.edu.cn/crates.io-index` index +Fetch [=======> ] 34.20%, 5.92MiB/s +``` + + +如果下载crates失败,可重新执行cargo install命令**重试**下载 + + +执行成功后 +```bash + +Compiling wabt v0.10.0 +Finished release [optimized] target(s) in 1m 33s +Installing /data/home/webase/.cargo/bin/cargo-liquid +Installing /data/home/webase/.cargo/bin/liquid-analy +Installed package `cargo-liquid v1.0.0-rc2 (https://gitee.com/WeBankBlockchain/cargo-liquid?tag=v1.0.0-rc2#5da4da65)` (executables `cargo-liquid`, `liquid-analy`) +``` + +至此liquid依赖安装完成 + +#### wasm-opt优化.wasm文件大小 + +安装 Binaryen(可选,推荐安装,优化编译) + +Binaryen 项目中包含了一系列 Wasm 字节码分析及优化工具,其中如 wasm-opt 等工具会在 Liquid 智能合约的构建过程中使用。请参考其官方文档。https://github.com/WebAssembly/binaryen#building + +除根据官方文档的编译安装方式外, +- Ubuntu下可通过 `sudo apt install binaryen` 下载安装(如使用Ubuntu,则系统版本不低于20.04) +- 其他操作系统可参照此处查看是否可直接通过包管理工具安装 https://pkgs.org/download/binaryen +- Mac下可直接通过 `brew install binaryen` 下载安装binaryen。 + +下面介绍CentOS安装方式: +```bash +# 下载其rpm包 +$ wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/b/binaryen-104-1.el7.x86_64.rpm +# 安装rpm包 +$ sudo rpm -ivh binaryen-104-1.el7.x86_64.rpm +``` + +## 例子:HelloWorld + +以简单的 HelloWorld 合约为示例,帮助读者快速建立对 Liquid 合约的直观认识。 + +``` +#![cfg_attr(not(feature = "std"), no_std)] + +use liquid::storage; +use liquid_lang as liquid; + +#[liquid::contract] +mod hello_world { + use super::*; + + #[liquid(storage)] + struct HelloWorld { + name: storage::Value, + } + + #[liquid(methods)] + impl HelloWorld { + pub fn new(&mut self) { + self.name.initialize(String::from("Alice")); + } + + pub fn get(&self) -> String { + self.name.clone() + } + + pub fn set(&mut self, name: String) { + self.name.set(name) + } + } + + #[cfg(test)] + mod tests { + use super::*; + + #[test] + fn get_works() { + let contract = HelloWorld::new(); + assert_eq!(contract.get(), "Alice"); + } + + #[test] + fn set_works() { + let mut contract = HelloWorld::new(); + + let new_name = String::from("Bob"); + contract.set(new_name.clone()); + assert_eq!(contract.get(), "Bob"); + } + } +} +``` diff --git a/docs/WeBASE-Front/upgrade.md b/docs/WeBASE-Front/upgrade.md index bb3e2645..9a916b64 100644 --- a/docs/WeBASE-Front/upgrade.md +++ b/docs/WeBASE-Front/upgrade.md @@ -11,3 +11,7 @@ WeBASE-Front升级的必须步骤: 各个版本的具体修改可参考下文 #### lab-rc1 +支持FISCO BCOS v3.0.0-rc1 + +#### lab-rc2 +支持FISCO BCOS v3.0.0-rc2 diff --git a/docs/WeBASE-Install/developer.md b/docs/WeBASE-Install/developer.md index 947c7fe6..9092f966 100644 --- a/docs/WeBASE-Install/developer.md +++ b/docs/WeBASE-Install/developer.md @@ -6,6 +6,12 @@ 节点搭建的方法建议使用[build_chain](https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/installation.html)。 +##### Liquid支持 + +如果使用的`liquid`合约的链并在WeBASE-Front的合约IDE中编译Liquid合约,要求**手动**在WeBASE-Front所在主机[配置Liquid环境](https://liquid-doc.readthedocs.io/zh_CN/latest/docs/quickstart/prerequisite.html) + +配置好Liquid环境后,需要重启WeBASE-Front + ### 节点前置服务搭建 **前提条件** @@ -18,7 +24,7 @@ 1. 下载安装包 ```shell - wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/lab-rc1/webase-front.zip + wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/lab-rc2/webase-front.zip ``` diff --git a/docs/WeBASE-Node-Manager/install.md b/docs/WeBASE-Node-Manager/install.md index 35f41147..61e9a914 100644 --- a/docs/WeBASE-Node-Manager/install.md +++ b/docs/WeBASE-Node-Manager/install.md @@ -7,7 +7,7 @@ | 1 | FISCO-BCOS 3.0+ | | 2 | WeBASE-Front [对应版本](../WeBASE/ChangeLOG.md) | | 3 | MySQL5.6或以上版本 | -| 4 | Java8或以上版本 | +| 4 | Java 8至14版本 | ## 2. 注意事项 @@ -36,13 +36,13 @@ git checkout lab ## 4. 编译代码 -方式一:如果服务器已安装Gradle,且版本为Gradle-4.10或以上 +方式一:如果服务器已安装Gradle,且版本为gradle-4.10至gradle-6.x版本 ```shell gradle build -x test ``` -方式二:如果服务器未安装Gradle,或者版本不是Gradle-4.10或以上,使用gradlew编译 +方式二:如果服务器未安装Gradle,或者版本不是gradle-4.10至gradle-6.x版本,使用gradlew编译 ```shell chmod +x ./gradlew && ./gradlew build -x test diff --git a/docs/WeBASE-Node-Manager/interface.md b/docs/WeBASE-Node-Manager/interface.md index a87b2746..98d96856 100644 --- a/docs/WeBASE-Node-Manager/interface.md +++ b/docs/WeBASE-Node-Manager/interface.md @@ -1610,6 +1610,8 @@ constructor(bytes b,address[] a) -> ["0x1a",["0x7939E26070BE44E6c4Fc759Ce55C6C8b | 9 | user | String | 是 | WeBASE的私钥用户的地址 | | 10 | account | String | 是 | 关联账户 | | 11 | constructorParams | List | 否 | 构造函数入参,根据合约构造函数决定 | +| 12 | isWasm | Boolean | 是 | 是否为liquid合约,默认为false | +| 13 | contractAddress | String | 否 | 合约地址,如果isWasm为true,则合约地址不能为空 | ***2)入参示例*** @@ -1742,6 +1744,7 @@ function set(bytes b,address[] a) -> ["0x1a",["0x7939E26070BE44E6c4Fc759Ce55C6C8 | 9 | useCns | bool | 否 | 是否使用cns调用,默认为false | | 10 | cnsName | String | 否 | CNS名称,useCns为true时不能为空 | | 11 | version | String | 否 | CNS合约版本,useCns为true时不能为空 | +| 12 | isWasm | Boolean | 是 | 是否为liquid合约,默认为false | ***2)入参示例*** @@ -1926,6 +1929,7 @@ http://127.0.0.1:5001/WeBASE-Node-Manager/contract/findByPartOfBytecodeBin | 8 | bytecodeBin | String | 否 | 合约编译后生成的bytecodeBin,可用于合约部署 | | 9 | account | String | 否 | 关联账户,新建时不能为空 | | 10 | contractAddress | String | 否 | 合约地址 | +| 11 | isWasm | Boolean | 是 | 是否为liquid合约,默认为false | ***2)入参示例*** @@ -3055,6 +3059,258 @@ http://127.0.0.1:5001/WeBASE-Node-Manager/contract/listManager/group/0xab9F30F98 ``` +### 5.23. 检测是否已配置Liquid环境 + +通过cargo命令和liquid命令,检测WeBASE-Front所在主机是否已配置Liquid环境 + +#### 传输协议规范 + +* 网络传输协议:使用HTTP协议 +* 请求地址:**/contract/liquid/check/{frontId}** +* 请求方式:GET +* 返回格式:JSON + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | --------------- | -------- | ------------ | -------- | -------- | +| 1 | 前置编号 | frontId | Integer | | 是 | 检测该前置所在主机是否配置了liquid环境 | + +**2)数据格式** + +``` +http://127.0.0.1:5001/WeBASE-Node-Manager/contract/liquid/check/10001 +``` + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **必填** | **说明** | +| -------- | -------- | --------------- | -------- | -------- | --------------------- | +| 1 | 返回码 | code | String | 是 | 返回码信息请参看附录1 | +| 2 | 提示信息 | message | String | 是 | | + +**2)数据格式** + +``` +{ + "code": 0, + "message": "success" +} +``` + + +### 5.24. 编译liquid合约 + +传入合约源码、编译liquid合约,并返回编译得到的abi和bin。 + +由于liquid合约类似于rust编译,耗时比solidity更长(3分钟左右),因此接口返回状态为“编译中”时,后台将异步执行编译任务,通过轮询`/contract/liquid/compile/check`接口可以获取最新的编译结果 + + +#### 传输协议规范 + +* 网络传输协议:使用HTTP协议 +* 请求地址:**/contract/liquid/compile** +* 请求方式:POST +* 返回格式:JSON + +#### 请求参数 + +| 序号 | 输入参数 | 类型 | 必填 | 备注 | +| ---- | -------------- | ------ | ------ | ------------------------------------------- | +| 1 | groupId | String | 是 | 所属群组编号 | +| 2 | contractId | int | 是 | 合约编号,非空,用于编译完成后后台更新合约ABI和BIN | +| 3 | contractName | String | 是 | 合约名称 | +| 4 | contractPath | String | 是 | 合约所在目录 | +| 5 | contractSource | String | 是 | 合约源码的base64 | +| 6 | account | String | 否 | 关联账户,新建时不能为空 | +| 7 | isWasm | Boolean | 是 | 是否为liquid合约,默认为false | +| 8 | frontId | int | 是 | 前置编号,用于指定通过哪个前置进行liquid编译 | + +***2)入参示例*** +``` +http://127.0.0.1:5001/WeBASE-Node-Manager/contract/liquid/compile +``` + +``` +{ + "groupId": "group0", + "contractName": "LiquidHelloWorld", + "contractPath": "/", + "contractSource": "IyFbY2ZnX2F0dHIobm90KGZlYXR1cmUgPSAic3RkIiksIG5vX3N0ZCldCgp1c2UgbGlxdWlkOjpzdG9yYWdlOwp1c2UgbGlxdWlkX2xhbmcgYXMgbGlxdWlkOwoKI1tsaXF1aWQ6OmNvbnRyYWN0XQptb2QgaGVsbG9fd29ybGQgewogICAgdXNlIHN1cGVyOjoqOwoKICAgICNbbGlxdWlkKHN0b3JhZ2UpXQogICAgc3RydWN0IEhlbGxvV29ybGQgewogICAgICAgIG5hbWU6IHN0b3JhZ2U6OlZhbHVlPFN0cmluZz4sCiAgICB9CgogICAgI1tsaXF1aWQobWV0aG9kcyldCiAgICBpbXBsIEhlbGxvV29ybGQgewogICAgICAgIHB1YiBmbiBuZXcoJm11dCBzZWxmKSB7CiAgICAgICAgICAgIHNlbGYubmFtZS5pbml0aWFsaXplKFN0cmluZzo6ZnJvbSgiQWxpY2UiKSk7CiAgICAgICAgfQoKICAgICAgICBwdWIgZm4gZ2V0KCZzZWxmKSAtPiBTdHJpbmcgewogICAgICAgICAgICBzZWxmLm5hbWUuY2xvbmUoKQogICAgICAgIH0KCiAgICAgICAgcHViIGZuIHNldCgmbXV0IHNlbGYsIG5hbWU6IFN0cmluZykgewogICAgICAgICAgICBzZWxmLm5hbWUuc2V0KG5hbWUpCiAgICAgICAgfQogICAgfQoKICAgICNbY2ZnKHRlc3QpXQogICAgbW9kIHRlc3RzIHsKICAgICAgICB1c2Ugc3VwZXI6Oio7CgogICAgICAgICNbdGVzdF0KICAgICAgICBmbiBnZXRfd29ya3MoKSB7CiAgICAgICAgICAgIGxldCBjb250cmFjdCA9IEhlbGxvV29ybGQ6Om5ldygpOwogICAgICAgICAgICBhc3NlcnRfZXEhKGNvbnRyYWN0LmdldCgpLCAiQWxpY2UiKTsKICAgICAgICB9CgogICAgICAgICNbdGVzdF0KICAgICAgICBmbiBzZXRfd29ya3MoKSB7CiAgICAgICAgICAgIGxldCBtdXQgY29udHJhY3QgPSBIZWxsb1dvcmxkOjpuZXcoKTsKCiAgICAgICAgICAgIGxldCBuZXdfbmFtZSA9IFN0cmluZzo6ZnJvbSgiQm9iIik7CiAgICAgICAgICAgIGNvbnRyYWN0LnNldChuZXdfbmFtZS5jbG9uZSgpKTsKICAgICAgICAgICAgYXNzZXJ0X2VxIShjb250cmFjdC5nZXQoKSwgIkJvYiIpOwogICAgICAgIH0KICAgIH0KfQ==", + "contractAbi": "[{\"inputs\":[],\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"string\",\"type\":\"string\"}],\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0,\"path\":[],\"read_only\":false,\"slot\":0}],\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"type\":\"function\"}]", + "isWasm": true, + "contractId": 1, + "account": "admin", + "frontId": 10001 +} +``` + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **必填** | **说明** | +| -------- | -------- | --------------- | -------- | -------- | --------------------- | +| 1 | 返回码 | code | String | 是 | 返回码信息请参看附录1 | +| 2 | 提示信息 | message | String | 是 | | +| 3 | 返回数据 | data | List | 否 | | +| 3.1 | 群组编号 | groupId | Integer | 是 | | +| 3.2 | 合约路径 | contractPath | String | 是 | 默认空,代表了"/"路径 | +| 3.3 | 合约名 | contractName | String | 是 | | +| 3.4 | 编译状态 | status | Integer | 是 | 1-编译中,2-编译成功,3-编译失败,4-编译已重置 | +| 3.5 | 合约Abi | abi | String | 是 | 编译成功时为非空 | +| 3.6 | 合约bytecode-bin | bin | String | 是 | 编译成功时为非空,用于部署合约 | +| 3.7 | 编译描述 | description | String | 是 | 编译失败时,错误原因将记录在此字段 | +| 3.8 | 修改时间 | modifyTime | LocalDatetime | 是 | | +| 3.9 | 创建时间 | createTime | LocalDatetime | 是 | | + +**2)数据格式** + +状态为编译中时: (编译中时,后台将异步执行编译任务,通过轮询`/contract/liquid/compile/check`接口可以获取最新的编译结果) +``` +{ + "code": 0, + "message": "success" + "data": { + "groupId": "group", + "contractPath": "", + "contractName": "Hello", + "status": "1", + "bin": null, + "abi": null, + "createTime": "2020-12-30 16:32:28", + "modifyTime": "2020-12-30 16:32:28" + } +} +``` + +状态为编译成功时(后台将自动更新合约IDE中的合约内容,包括ABI,BIN等): +``` +{ + "code": 0, + "message": "success" + "data": { + "groupId": "group", + "contractPath": "", + "contractName": "Hello", + "status": "2", + "bin": "", //bin过长,此处略 + "abi":"[{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"type\":\"function\",\"payable\":false,\"stateMutability\":\"view\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"name\":\"set\",\"outputs\":[],\"type\":\"function\",\"payable\":false,\"stateMutability\":\"nonpayable\"},{\"constant\":false,\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"name\":\"SetName\",\"outputs\":null,\"type\":\"event\",\"payable\":false,\"stateMutability\":null}]", + "createTime": "2020-12-30 16:32:28", + "modifyTime": "2020-12-30 16:32:28" + } +} +``` + + +### 5.25. 查询liquid合约编译进度 + +根据群组ID,合约路径,合约名获取liquid合约的编译状态 + +#### 传输协议规范 + +* 网络传输协议:使用HTTP协议 +* 请求地址:**/contract/liquid/compile/check** +* 请求方式:POST +* 返回格式:JSON + + +#### 请求参数 + +| 序号 | 输入参数 | 类型 | 必填 | 备注 | +| ---- | -------------- | ------ | ------ | ------------------------------------------- | +| 1 | groupId | String | 是 | 所属群组编号 | +| 2 | contractId | int | 是 | 合约编号,非空,用于编译完成后后台更新合约ABI和BIN | +| 3 | contractName | String | 是 | 合约名称 | +| 4 | contractPath | String | 是 | 合约所在目录 | +| 5 | contractSource | String | 是 | 合约源码的base64 | +| 6 | account | String | 是 | 关联账户,新建时不能为空 | +| 7 | isWasm | Boolean | 是 | 是否为liquid合约,默认为false | +| 8 | frontId | int | 是 | 前置编号,用于指定通过哪个前置进行liquid编译 | + +***2)入参示例*** + +``` +http://127.0.0.1:5001/WeBASE-Node-Manager/contract/liquid/compile/check +``` + +``` +{ + "groupId": "group0", + "contractName": "LiquidHelloWorld", + "contractPath": "/", + "contractSource": "IyFbY2ZnX2F0dHIobm90KGZlYXR1cmUgPSAic3RkIiksIG5vX3N0ZCldCgp1c2UgbGlxdWlkOjpzdG9yYWdlOwp1c2UgbGlxdWlkX2xhbmcgYXMgbGlxdWlkOwoKI1tsaXF1aWQ6OmNvbnRyYWN0XQptb2QgaGVsbG9fd29ybGQgewogICAgdXNlIHN1cGVyOjoqOwoKICAgICNbbGlxdWlkKHN0b3JhZ2UpXQogICAgc3RydWN0IEhlbGxvV29ybGQgewogICAgICAgIG5hbWU6IHN0b3JhZ2U6OlZhbHVlPFN0cmluZz4sCiAgICB9CgogICAgI1tsaXF1aWQobWV0aG9kcyldCiAgICBpbXBsIEhlbGxvV29ybGQgewogICAgICAgIHB1YiBmbiBuZXcoJm11dCBzZWxmKSB7CiAgICAgICAgICAgIHNlbGYubmFtZS5pbml0aWFsaXplKFN0cmluZzo6ZnJvbSgiQWxpY2UiKSk7CiAgICAgICAgfQoKICAgICAgICBwdWIgZm4gZ2V0KCZzZWxmKSAtPiBTdHJpbmcgewogICAgICAgICAgICBzZWxmLm5hbWUuY2xvbmUoKQogICAgICAgIH0KCiAgICAgICAgcHViIGZuIHNldCgmbXV0IHNlbGYsIG5hbWU6IFN0cmluZykgewogICAgICAgICAgICBzZWxmLm5hbWUuc2V0KG5hbWUpCiAgICAgICAgfQogICAgfQoKICAgICNbY2ZnKHRlc3QpXQogICAgbW9kIHRlc3RzIHsKICAgICAgICB1c2Ugc3VwZXI6Oio7CgogICAgICAgICNbdGVzdF0KICAgICAgICBmbiBnZXRfd29ya3MoKSB7CiAgICAgICAgICAgIGxldCBjb250cmFjdCA9IEhlbGxvV29ybGQ6Om5ldygpOwogICAgICAgICAgICBhc3NlcnRfZXEhKGNvbnRyYWN0LmdldCgpLCAiQWxpY2UiKTsKICAgICAgICB9CgogICAgICAgICNbdGVzdF0KICAgICAgICBmbiBzZXRfd29ya3MoKSB7CiAgICAgICAgICAgIGxldCBtdXQgY29udHJhY3QgPSBIZWxsb1dvcmxkOjpuZXcoKTsKCiAgICAgICAgICAgIGxldCBuZXdfbmFtZSA9IFN0cmluZzo6ZnJvbSgiQm9iIik7CiAgICAgICAgICAgIGNvbnRyYWN0LnNldChuZXdfbmFtZS5jbG9uZSgpKTsKICAgICAgICAgICAgYXNzZXJ0X2VxIShjb250cmFjdC5nZXQoKSwgIkJvYiIpOwogICAgICAgIH0KICAgIH0KfQ==", + "contractAbi": "[{\"inputs\":[],\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"string\",\"type\":\"string\"}],\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0,\"path\":[],\"read_only\":false,\"slot\":0}],\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"type\":\"function\"}]", + "isWasm": true, + "contractId": 1, + "account": "admin", + "contractAddress": "string", + "frontId": 10001 +} +``` + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **必填** | **说明** | +| -------- | -------- | --------------- | -------- | -------- | --------------------- | +| 1 | 返回码 | code | String | 是 | 返回码信息请参看附录1 | +| 2 | 提示信息 | message | String | 是 | | +| 3 | 返回数据 | data | List | 否 | | +| 3.1 | 群组编号 | groupId | Integer | 是 | | +| 3.2 | 合约路径 | contractPath | String | 是 | 默认空,代表了"/"路径 | +| 3.3 | 合约名 | contractName | String | 是 | | +| 3.4 | 编译状态 | status | Integer | 是 | 1-编译中,2-编译成功,3-编译失败,4-编译已重置 | +| 3.5 | 合约Abi | abi | String | 是 | 编译成功时为非空 | +| 3.6 | 合约bytecode-bin | bin | String | 是 | 编译成功时为非空,用于部署合约 | +| 3.7 | 编译描述 | description | String | 是 | 编译失败时,错误原因将记录在此字段 | +| 3.8 | 修改时间 | modifyTime | LocalDatetime | 是 | | +| 3.9 | 创建时间 | createTime | LocalDatetime | 是 | | + +**2)数据格式** + +状态为编译中时,轮询当前接口直到状态为编译成功、编译失败,status=1: +``` +{ + "code": 0, + "message": "success" + "data": { + "groupId": "group", + "contractPath": "/", + "contractName": "Hello", + "status": "1", + "bin": null, + "abi": null, + "createTime": "2020-12-30 16:32:28", + "modifyTime": "2020-12-30 16:32:28" + } +} +``` + +状态为编译成功时,status=2(后台将自动更新合约IDE中的合约内容,包括ABI,BIN等): +``` +{ + "code": 0, + "message": "success" + "data": { + "groupId": "group", + "contractPath": "/", + "contractName": "Hello", + "status": "2", + "bin": "", //bin过长,此处略 + "abi":"[{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"type\":\"function\",\"payable\":false,\"stateMutability\":\"view\"},{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"name\":\"set\",\"outputs\":[],\"type\":\"function\",\"payable\":false,\"stateMutability\":\"nonpayable\"},{\"constant\":false,\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"type0\":null,\"indexed\":false}],\"name\":\"SetName\",\"outputs\":null,\"type\":\"event\",\"payable\":false,\"stateMutability\":null}]", + "createTime": "2020-12-30 16:32:28", + "modifyTime": "2020-12-30 16:32:28" + } +} +``` + + ## 6 服务器监控相关 @@ -4974,13 +5230,13 @@ http://127.0.0.1:5001/WeBASE-Node-Manager/node/city/list ### 10.1 查询角色列表 -### 10.1.1 传输协议规范 +### 传输协议规范 * 网络传输协议:使用HTTP协议 * 请求地址:**role/roleList** * 请求方式:GET * 返回格式:JSON -### 10.1.2 请求参数 +### 请求参数 ***1)入参表*** @@ -4997,7 +5253,7 @@ http://127.0.0.1:5001/WeBASE-Node-Manager/node/city/list http://127.0.0.1:5001/WeBASE-Node-Manager/role/roleList?groupId=300001&pageNumber=&pageSize=&roleId=&roleName= ``` -#### 10.1.3 返回参数 +#### 返回参数 ***1)出参表*** @@ -7420,7 +7676,1557 @@ http://localhost:5001/WeBASE-Node-Manager/external/contract/list/all/1/1/10?type } ``` +## 18. 预编译权限管理 + +### 18.1.查询治理委员信息(everyone可访问) + +#### 接口描述 + +通过接口查询链的治理委员信息 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/everyone/cmtInfo** + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | + +**2)数据格式** + +``` +http://127.0.0.1:5001/WeBASE-Node-Manager/precntauth/authmanager/everyone/cmtInfo?groupId=group0 +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +[ + { + "governorList": [ + { + "governorAddress": "0x015577ab8c903adcf9b65433f16e574d6daf0559", + "weight": 1 + }, + { + "governorAddress": "0x36c10bfbce3b6550ed92a5ebbb9a44e052bfd285", + "weight": 2 + } + ], + "participatesRate": 100, + "winRate": 90 + } +] +``` + +b、失败: + +``` +{ + "code": 500, + "errorMessage": "get Client failed, e: The group not exist, please check the groupID, groupID: g3" +} +``` + +### 18.2. 查询合约管理员信息(everyone可访问) + +#### 接口描述 + +通过接口查询某合约的管理员信息 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/everyone/contract/admin** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 合约地址 | contractAddr | String | | 是 | | + +**2)数据格式** + +``` +{ + "contractAddr": "0xB47fd49b0f1Af2Fce3a1824899b60C2b6A29B851", + "groupId": "g1" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +0x489877b18f93353c67d252c1b8f4b745d41c2107 +``` + +b、失败1,查询群组不存在: + +``` +{ + "code": 500, + "errorMessage": "get Client failed, e: The group not exist, please check the groupID, groupID: g3" +} +``` + +​ 失败2,查询合约地址错误: + +``` +{ + "code": 19, + "errorMessage": "Call address error" +} +``` + +​ 失败3,查询合约地址不存在: +``` +0x0000000000000000000000000000000000000000 +``` + +### 18.5. 查询合约函数访问权限(everyone可访问) + +#### 接口描述 + +通过接口查询某用户对某合约函数的访问权限 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/everyone/contract/method/auth** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 合约地址 | contractAddr | String | | 是 | | +| 3 | 合约函数 | func | String | | 是 | | +| 4 | 用户地址 | userAddress | String | | 是 | | + +**2)数据格式** + +``` +{ + "contractAddr": "0xB47fd49b0f1Af2Fce3a1824899b60C2b6A29B851", + "func": "set", + "groupId": "g1", + "userAddress": "0x489877b18f93353c67d252c1b8f4b745d41c2107" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +true +``` + +b、失败1,查询群组不存在: + +``` +{ + "code": 500, + "errorMessage": "get Client failed, e: The group not exist, please check the groupID, groupID: g3" +} +``` + + 失败2,查询合约地址错误: + +``` +{ + "code": 19, + "errorMessage": "Call address error" +} +``` + +### 18.6. 查询合约部署权限(everyone可访问) + +#### 接口描述 + +通过接口查询全局合约部署权限 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/everyone/deploy/type** + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | + +**2)数据格式** + +``` +http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/everyone/deploy/type?groupId=g1 +``` + +#### 响应参数 + +**1)数据格式** + +a、成功,可部署: + +``` +0 +``` + +b、失败1,查询群组不存在: + +``` +{ + "code": 500, + "errorMessage": "get Client failed, e: The group not exist, please check the groupID, groupID: g0" +} +``` + +### 18.7. 查询单一提案信息(everyone可访问) + +#### 接口描述 + +通过接口查询某个提案信息 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/everyone/proposalInfo** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | ---------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 提案Id | proposalId | BigInteger | | 是 | | + +**2)数据格式** + +``` +{ + "groupId": "g1", + "proposalId": 1 +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功,可部署: + +``` +[ + { + "resourceId": "0xc0523dbdd94ba27e14b0336d799489340ca24cdf", + "proposer": "0x015577ab8c903adcf9b65433f16e574d6daf0559", + "proposalType": 31, + "blockNumberInterval": 604809, + "status": 2, + "agreeVoters": [ + "0x015577ab8c903adcf9b65433f16e574d6daf0559" + ], + "againstVoters": [], + "statusString": "finished", + "proposalTypeString": "resetAdmin" + } +] +``` + +b、失败1,查询提案不存在: + +``` +[ + { + "resourceId": "0x0000000000000000000000000000000000000000", + "proposer": "0x0000000000000000000000000000000000000000", + "proposalType": 0, + "blockNumberInterval": 0, + "status": 0, + "agreeVoters": [], + "againstVoters": [], + "statusString": "unknown", + "proposalTypeString": "unknown" + } +] +``` + +### 18.8. 查询提案总数(everyone可访问) + +#### 接口描述 + +通过接口查询某个提案信息 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/everyone/proposalInfo** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | + +**2)数据格式** + +``` +http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/everyone/proposalInfoCount?groupId=g1 +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +5 +``` + +b、失败1,查询提案不存在: + +``` +{ + "code": 500, + "errorMessage": "get Client failed, e: The group not exist, please check the groupID, groupID: g0" +} +``` + +### 18.9. 查询提案列表(everyone可访问) + +#### 接口描述 + +通过接口查询某群组提案列表 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/everyone/proposalInfo** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | ---------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 页面数 | pageNum | Integer | | 是 | 所在页面 | +| 3 | 页面大小 | pageSize | Integer | | 是 | 页面数据量 | + +**2)数据格式** + +``` +http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/everyone/proposalInfoList +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +[ + { + "resourceId": "0x02a6340ef1d8a780f0ddf01dde9141cc09f678d6", + "proposer": "0x015577ab8c903adcf9b65433f16e574d6daf0559", + "proposalType": "setWeight", + "blockNumberInterval": 604825, + "status": "notEnoughVotes", + "agreeVoters": [ + "0x015577ab8c903adcf9b65433f16e574d6daf0559" + ], + "againstVoters": [], + "proposalId": 5 + }, + { + "resourceId": "0x36c10bfbce3b6550ed92a5ebbb9a44e052bfd285", + "proposer": "0x36c10bfbce3b6550ed92a5ebbb9a44e052bfd285", + "proposalType": "setWeight", + "blockNumberInterval": 604812, + "status": "failed", + "agreeVoters": [ + "0x36c10bfbce3b6550ed92a5ebbb9a44e052bfd285" + ], + "againstVoters": [ + "0x015577ab8c903adcf9b65433f16e574d6daf0559" + ], + "proposalId": 4 + }, + { + "resourceId": "0x0000000000000000000000000000000000010001", + "proposer": "0x015577ab8c903adcf9b65433f16e574d6daf0559", + "proposalType": "setRate", + "blockNumberInterval": 604811, + "status": "finished", + "agreeVoters": [ + "0x015577ab8c903adcf9b65433f16e574d6daf0559" + ], + "againstVoters": [], + "proposalId": 3 + }, + { + "resourceId": "0x36c10bfbce3b6550ed92a5ebbb9a44e052bfd285", + "proposer": "0x015577ab8c903adcf9b65433f16e574d6daf0559", + "proposalType": "setWeight", + "blockNumberInterval": 604810, + "status": "finished", + "agreeVoters": [ + "0x015577ab8c903adcf9b65433f16e574d6daf0559" + ], + "againstVoters": [], + "proposalId": 2 + }, + { + "resourceId": "0xc0523dbdd94ba27e14b0336d799489340ca24cdf", + "proposer": "0x015577ab8c903adcf9b65433f16e574d6daf0559", + "proposalType": "resetAdmin", + "blockNumberInterval": 604809, + "status": "finished", + "agreeVoters": [ + "0x015577ab8c903adcf9b65433f16e574d6daf0559" + ], + "againstVoters": [], + "proposalId": 1 + } +] +``` + +### 18.10. 查询用户全局部署权限(everyone可访问) + +#### 接口描述 + +通过接口查询用户全局部署权限 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/everyone/usr/deploy** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ----------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 用户地址 | userAddress | String | | 是 | | + +**2)数据格式** + +``` +{ + "groupId": "g1", + "userAddress": "0x489877b18f93353c67d252c1b8f4b745d41c2107" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +true +``` + +### 18.11. 设置合约的访问权限类型(admin可访问) + +#### 接口描述 + +通过接口设置合约的访问权限类型 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/admin/method/auth/type** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | ------------ | -------- | ------------ | -------- | ------------------ | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 合约地址 | contractAddr | String | | 是 | | +| 4 | 合约函数 | func | String | | 是 | | +| 5 | 用户签名Id | signUserId | String | | 否 | | +| 6 | 权限类型 | authType | Integer | | 是 | 1.白名单;2.黑名单 | + +**2)数据格式** + +``` +{ + "authType": 1, + "contractAddr": "4721d1a77e0e76851d460073e64ea06d9c104194", + "fromAddress": "0xe88ff54644de54fa32ac845c05ed2b7d5677c078", + "func": "set", + "groupId": "group0", + "signUserId": "" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 18.12. 设置某用户对合约的访问权限(admin可访问) + +#### 接口描述 + +通过接口设置某用户对合约函数的访问权限 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/admin/method/auth/set** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ------------ | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 合约地址 | contractAddr | String | | 是 | | +| 4 | 合约函数 | func | String | | 是 | | +| 5 | 用户签名Id | signUserId | String | | 否 | | +| 6 | 是否开启权限 | isOpen | Boolean | | 是 | | + +**2)数据格式** + +``` +{ + "contractAddr": "0xB47fd49b0f1Af2Fce3a1824899b60C2b6A29B851", + "fromAddress": "0x489877b18f93353c67d252c1b8f4b745d41c2107", + "func": "set", + "groupId": "g1", + "isOpen": true, + "signUserId": "string", + "userAddress": "0x489877b18f93353c67d252c1b8f4b745d41c2107" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 18.13. 设置某合约的管理员(committee可访问) + +#### 接口描述 + +通过接口设置某合约的管理员 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/committee/contract/admin** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ------------ | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 合约地址 | contractAddr | String | | 是 | | +| 4 | 合约新管理员 | newAdmin | String | | 是 | | +| 5 | 用户签名Id | signUserId | String | | 否 | | + +**2)数据格式** + +``` +{ + "contractAddr": "4721d1a77e0e76851d460073e64ea06d9c104194", + "fromAddress": "0x70da1da76e0e423ec582ec866fae749af67ec4c0", + "groupId": "group0", + "newAdmin": "0x70da1da76e0e423ec582ec866fae749af67ec4c0", + "signUserId": "" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 18.14. 设置全局部署权限类型(committee可访问) + +#### 接口描述 + +通过接口设置全局部署类型 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/committee/deploy/type** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | -------------- | -------- | ------------ | -------- | ------------------ | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 部署类型 | deployAuthType | Integer | | 是 | 1.白名单;2.黑名单 | +| 4 | 用户签名Id | signUserId | String | | 否 | | + +**2)数据格式** + +``` +{ + "deployAuthType":1, + "fromAddress": "0x70da1da76e0e423ec582ec866fae749af67ec4c0", + "groupId": "group0", + "signUserId": "" +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 18.15. 设置治理委员账户(committee可访问) + +#### 接口描述 + +通过接口设置治理委员(新增/更新/删除) + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/committee/governor** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | -------------- | -------- | ------------ | -------- | ---------------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 账户地址 | accountAddress | Integer | | 是 | 对该账户进行操作 | +| 4 | 分配权重 | weight | Integer | | 是 | | +| 5 | 用户签名Id | signUserId | String | | 否 | | + +**2)数据格式** + +``` +{ + "accountAddress": "0xe88ff54644de54fa32ac845c05ed2b7d5677c078", + "fromAddress": "0x70da1da76e0e423ec582ec866fae749af67ec4c0", + "groupId": "group0", + "signUserId": "", + "weight": 5 +} +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 18.16. 设置治理阈值(committee可访问) + +#### 接口描述 + +通过接口设置治理阈值 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/committee/rate** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | ---------------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 参与阈值 | participatesRate | Integer | | 是 | | +| 4 | 获胜阈值 | winRate | Integer | | 是 | | +| 5 | 用户签名Id | signUserId | String | | 否 | | + +**2)数据格式** + +``` +{ + "fromAddress": "0x70da1da76e0e423ec582ec866fae749af67ec4c0", + "groupId": "group0", + "participatesRate": 51, + "signUserId": "", + "winRate": 51 +} +``` + +#### 响应参数 + +**1)数据格式** + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 18.17. 对提案投票(committee可访问) + +#### 接口描述 + +通过接口设置对提案进行投票 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/committee/proposal/vote** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | ----------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 提案Id | proposalId | Integer | | 是 | | +| 4 | 是否同意 | agree | Boolean | | 是 | | +| 5 | 用户签名Id | signUserId | String | | 否 | | + +**2)数据格式** + +``` +{ + "agree": true, + "fromAddress": "0x70da1da76e0e423ec582ec866fae749af67ec4c0", + "groupId": "group0", + "proposalId": 55, + "signUserId": "5db5a98aef544650aa3864f4cb27af31" +} +``` + +#### 响应参数 + +**1)数据格式** + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 18.18.撤销提案(committee可访问) + +#### 接口描述 + +通过接口设置撤销某提案 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/authmanager/committee/proposal/revoke** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | ----------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 提案Id | proposalId | Integer | | 是 | | +| 4 | 用户签名Id | signUserId | String | | 否 | | + +**2)数据格式** + +``` +{ + "fromAddress": "0x70da1da76e0e423ec582ec866fae749af67ec4c0", + "groupId": "group0", + "proposalId": 55, + "signUserId": "5db5a98aef544650aa3864f4cb27af31" +} +``` + +#### 响应参数 + +**1)数据格式** + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +## 19. 预编译合约管理 + + +### 19.1. 创建BFS路径 + +#### 接口描述 + +通过接口创建BFS + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/precompiled/bfs/create** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ---------- | ----------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 创建路径 | path | String | | 是 | | +| 4 | 用户签名Id | signUserId | String | | 否 | | + +**2)数据格式** + +``` +{ + "fromAddress": "0x2abd2fc35c4553b1f1aa6cf70a4e6ef30b4d53a2", + "groupId": "group0", + "path": "/apps/test9", + "signUserId": "5db5a98aef544650aa3864f4cb27af31" +} +``` + +#### 响应参数 + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 19.2. 查询BFS路径 + +#### 接口描述 + +通过接口查询BFS + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/precompiled/bfs/query** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 查询路径 | path | String | | 是 | | + +**2)数据格式** + +``` +{ + "groupId": "group0", + "path": "/apps" +} +``` + +#### 响应参数 + +``` +[ + "test", + "test1" +] +``` + +### 19.3. 通过contractName查询合约信息 + +#### 接口描述 + +通过groupId和contractName查询合约信息 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/precompiled/cns/queryCnsByName** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 合约名称 | contractName | String | | 是 | | + +**2)数据格式** + +``` +{ + "contractName": "HelloWorld", + "groupId": "group0" +} +``` + +#### 响应参数 + +``` +[ + { + "name": "HelloWorld", + "version": "1.0", + "address": "4721d1a77e0e76851d460073e64ea06d9c104194", + "abi": "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" + }, + { + "name": "HelloWorld", + "version": "2.0", + "address": "4721d1a77e0e76851d460073e64ea06d9c104194", + "abi": "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" + } +] +``` + +### 19.4. 通过contractName和version查询合约信息 + +#### 接口描述 + +通过groupId、contractName、version查询合约信息 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/precompiled/cns/queryCnsByNameVersion** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 合约名称 | contractName | String | | 是 | | +| 3 | 合约版本 | version | String | | 是 | | + +**2)数据格式** + +``` +{ + "contractName": "HelloWorld", + "groupId": "group0", + "version": "1.0" +} +``` + +#### 响应参数 + +``` +{ + "address": "0x4721d1a77e0e76851d460073e64ea06d9c104194", + "abi": "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" +} +``` + +### 19.5. 通过contractName/groupId/version查询合约地址 + +#### 接口描述 + +通过contractName/groupId/version参数查询合约地址 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/precompiled/cns/queryCnsByNameVersion** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 合约名称 | contractName | String | | 是 | | +| 3 | 合约版本 | version | String | | 是 | | + +**2)数据格式** + +``` +{ + "contractName": "HelloWorld", + "groupId": "group0", + "version": "1.0" +} +``` + +#### 响应参数 + +``` +0x4721d1a77e0e76851d460073e64ea06d9c104194 +``` + +### 19.6. 注册合约 + +#### 接口描述 + +通过接口注册合约信息 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/precompiled/cns/reqAddressInfoByNameVersion** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 合约名称 | contractName | String | | 是 | | +| 3 | 合约版本 | version | String | | 是 | | + +**2)数据格式** + +``` +{ + "abiData": "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + "contractAddress": "4721d1a77e0e76851d460073e64ea06d9c104194", + "contractName": "HelloWorld", + "contractVersion": "1.0", + "fromAddress": "", + "groupId": "group0", + "signUserId": "5db5a98aef544650aa3864f4cb27af31" +} +``` + +#### 响应参数 + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 19.7. 查询共识节点列表 + +#### 接口描述 + +通过接口查询共识节点列表 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/precompiled/consensus/list** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 页面数 | pageNumber | Integer | | 是 | | +| 3 | 页面大小 | pageSize | Integer | | 是 | | + +**2)数据格式** + +``` +{ + "groupId": "group0", + "pageNumber": 1, + "pageSize": 5 +} +``` + +#### 响应参数 + +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "nodeId": "6447e978505cafd05fc99b731d8fdff31fb07a3c6e9679054fb1880ae6f58aeff638eacfe082d54adca93086c2986bc27a5befeabb7ba39728e24c7da9c786e9", + "nodeType": "sealer", + "weight": 1 + }, + { + "nodeId": "b14bd4a225db308da3f395c69f12ce06f191ff19941d52eebf30cfb5fc979422ad086fedb0378fdcfbcb4630416e71c34aeb421f4fe51792408283bfd7338099", + "nodeType": "sealer", + "weight": 1 + }, + { + "nodeId": "848883c435d5c7e32da7744ffb0659538995994a42c24ec7da81a2fd58cd28e76fbaaf603b81f9134d22f57d112cdbd701cece549121b99f5e436daec11b3267", + "nodeType": "sealer", + "weight": 1 + }, + { + "nodeId": "5007b294c7aadd22d62e0c5e33bae14ee6ec0230ebd34df23f29f0330272f6021fd3a8f2b4a4789f1e2fe7fbc8581c1d371883d9eb1e16a9266905f36d57ab8b", + "nodeType": "sealer", + "weight": 1 + } + ], + "totalCount": 4 +} +``` + +### 19.8. 修改共识节点类型 + +#### 接口描述 + +通过接口查询共识节点列表 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/precompiled/consensus/manage** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ----------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 节点Id | nodeId | String | | 是 | | +| 4 | 节点类型 | nodeType | String | | 是 | | +| 5 | 签名Id | signUserId | String | | 否 | | +| 6 | 权重 | weight | Integer | | 是 | | + +**2)数据格式** + +``` +{ + "fromAddress": "0x2abd2fc35c4553b1f1aa6cf70a4e6ef30b4d53a2", + "groupId": "group0", + "nodeId": "5007b294c7aadd22d62e0c5e33bae14ee6ec0230ebd34df23f29f0330272f6021fd3a8f2b4a4789f1e2fe7fbc8581c1d371883d9eb1e16a9266905f36d57ab8b", + "nodeType": "observer", + "signUserId": "5db5a98aef544650aa3864f4cb27af31", + "weight": 1 +} +``` + +#### 响应参数 + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 19.9. 建表 + +#### 接口描述 + +通过接口插入新的表结构 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/precompiled/kvtable/reqCreateTable** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ------------ | -------- | ------------ | -------- | ------------ | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 主键 | keyFieldName | String | | 是 | | +| 4 | 值描述 | valueFields | List | | 是 | 对表进行描述 | +| 5 | 签名Id | signUserId | String | | 否 | | +| 6 | 表名 | tableName | String | | 是 | | + +**2)数据格式** + +``` +{ + "fromAddress": "0x2abd2fc35c4553b1f1aa6cf70a4e6ef30b4d53a2", + "groupId": "group0", + "keyFieldName": "myKey", + "signUserId": "5db5a98aef544650aa3864f4cb27af31", + "tableName": "test_table", + "valueFields": [ + "valueIsData" + ] +} +``` + +#### 响应参数 + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 19.10. 写表 + +#### 接口描述 + +通过接口在表插入数据 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/precompiled/kvtable/reqSetTable** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------------- | -------- | ------------ | -------- | ---------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 主键 | key | String | | 是 | | +| 4 | 对应值 | fieldNameToValue | JSON | | 是 | 写入JSON值 | +| 5 | 签名Id | signUserId | String | | 否 | | +| 6 | 表名 | tableName | String | | 是 | | + +**2)数据格式** + +``` +{ + "fieldNameToValue": { + "key1": "hi", + "key2": "hello", + "key3": "how are u" + }, + "fromAddress": "0x2abd2fc35c4553b1f1aa6cf70a4e6ef30b4d53a2", + "groupId": "group0", + "key": "myKey", + "signUserId": "5db5a98aef544650aa3864f4cb27af31", + "tableName": "test_table" +} +``` + +#### 响应参数 + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` + +### 19.11. 读表 + +#### 接口描述 + +通过接口在表读取数据 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/precompiled/kvtable/reqGetTable** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------------- | -------- | ------------ | -------- | ---------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 主键 | key | String | | 是 | | +| 4 | 对应值 | fieldNameToValue | JSON | | 是 | 写入JSON值 | +| 5 | 签名Id | signUserId | String | | 否 | | +| 6 | 表名 | tableName | String | | 是 | | + +**2)数据格式** + +``` +{ + "groupId": "group0", + "key": "myKey", + "tableName": "test_table" +} +``` + +#### 响应参数 + +``` +{ + "key2": "hello", + "key1": "hi", + "key3": "how are u" +} +``` + +### 19.12. 获取群组系统配置 + +#### 接口描述 + +通过接口读取某个群组的系统配置 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/precompiled/sys/config/list** + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | + +**2)数据格式** + +``` +http://127.0.0.1:5001/WeBASE-Node-Manager/precntauth/precompiled/sys/config/list?groupId=group0 +``` + +#### 响应参数 + +``` +[ + { + "groupId": "group0", + "configKey": "tx_count_limit", + "configValue": "10" + }, + { + "groupId": "group0", + "configKey": "tx_gas_limit", + "configValue": "300000002" + } +] +``` + +### 19.13. 设置群组系统配置 + +#### 接口描述 + +通过接口设置某个群组的系统配置 + +#### 接口URL + +**http://localhost:5001/WeBASE-Node-Manager/precntauth/precompiled/sys/config/list** + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------- | ----------- | -------- | ------------ | -------- | -------- | +| 1 | 群组Id | groupId | String | | 是 | | +| 2 | 调用地址 | fromAddress | String | | 是 | | +| 3 | 配置主键 | configKey | String | | 是 | | +| 4 | 配置值 | configValue | String | | 是 | | +| 5 | 签名Id | signUserId | String | | 否 | | + +**2)数据格式** + +``` +{ + "configKey": "tx_count_limit", + "configValue": "5", + "fromAddress": "0x2abd2fc35c4553b1f1aa6cf70a4e6ef30b4d53a2", + "groupId": "group0", + "signUserId": "5db5a98aef544650aa3864f4cb27af31" +} +``` + +#### 响应参数 + +``` +{ + "code" : 0, + "message" : "success", + "data" : "Success" +} +``` ## 附录 diff --git a/docs/WeBASE-Node-Manager/upgrade.md b/docs/WeBASE-Node-Manager/upgrade.md index 323ebf49..795213ff 100644 --- a/docs/WeBASE-Node-Manager/upgrade.md +++ b/docs/WeBASE-Node-Manager/upgrade.md @@ -13,4 +13,8 @@ WeBASE-Node-Manager升级的必须步骤: 各个版本的具体修改可参考下文 #### lab-rc1 +支持FISCO BCOS v3.0.0-rc1 + +#### lab-rc2 +支持FISCO BCOS v3.0.0-rc2 diff --git a/docs/WeBASE-Sign/install.md b/docs/WeBASE-Sign/install.md index acb638b2..84a81e3a 100644 --- a/docs/WeBASE-Sign/install.md +++ b/docs/WeBASE-Sign/install.md @@ -4,7 +4,7 @@ | 环境 | 版本 | | ------ | ------------------- | -| Java | Java1.8或以上版本 | +| Java | JDK8至14版本 | | 数据库 | MySQL-5.6或以上版本 | 备注:安装说明请参看 [附录-1](./appendix.html#id2)。 @@ -29,12 +29,12 @@ cd WeBASE-Sign ## 3. 编译代码 -方式一:如果服务器已安装Gradle,且版本为Gradle-4.10或以上 +方式一:如果服务器已安装Gradle,且版本为gradle-4.10至gradle-6.x版本 ```shell gradle build -x test ``` -方式二:如果服务器未安装Gradle,或者版本不是Gradle-4.10或以上,使用gradlew编译 +方式二:如果服务器未安装Gradle,或者版本不是gradle-4.10至gradle-6.x版本,使用gradlew编译 ```shell chmod +x ./gradlew && ./gradlew build -x test ``` diff --git a/docs/WeBASE-Sign/upgrade.md b/docs/WeBASE-Sign/upgrade.md index e4bd03fb..b57f9abe 100644 --- a/docs/WeBASE-Sign/upgrade.md +++ b/docs/WeBASE-Sign/upgrade.md @@ -13,3 +13,7 @@ WeBASE-Sign升级的必须步骤: 各个版本的具体修改可参考下文 #### lab-rc1 +支持FISCO BCOS v3.0.0-rc1 + +#### lab-rc2 +支持FISCO BCOS v3.0.0-rc2 diff --git a/docs/WeBASE-Transaction/README.md b/docs/WeBASE-Transaction/README.md new file mode 100644 index 00000000..5a839203 --- /dev/null +++ b/docs/WeBASE-Transaction/README.md @@ -0,0 +1,28 @@ +# 概要介绍 + +## 功能介绍 + +​ 本系统为交易上链代理子系统。主要接收无状态交易请求,缓存到数据库中,再异步上链。本系统可大幅提升吞吐量,解决区块链的tps瓶颈。 + +![架构图](./architecture.png) + +主要功能:合约编译;交易请求处理,交易分为合约部署和普通的合约调用请求。 + +合约编译:上传合约文件zip压缩包(压缩包里的每个合约的文件名要和合约名一致,合约引用需使用“./xxx.sol”),返回合约编译信息。 + +合约部署:交易服务子系统会将合约部署请求信息缓存到数据库,通过轮询服务向节点发送交易请求,确保合约成功部署。 + +合约调用:分为无状态交易上链(非constant方法)和交易结果查询(constant方法)。 +无状态交易上链是交易服务子系统会将交易请求信息缓存到数据库,通过轮询服务向节点发送交易请求,确保交易成功上链。 +交易结果查询是交易服务子系统会同步向节点发送交易请求,返回结果。 + +交易上链数据签名支持以下三种模式: + +- 本地配置私钥签名 +- 本地随机私钥签名 +- 调用[WeBASE-Sign](https://github.com/WeBankBlockchain/WeBASE-Sign)进行签名 + +本工程支持单机部署,也支持分布式任务多活部署(使用分布式任务的话需部署Zookeeper)。 + + +安装详情可查看下一章节的[WeBASE-Transaction部署说明](../WeBASE-Transaction/install.html) \ No newline at end of file diff --git a/docs/WeBASE-Transaction/appendix.md b/docs/WeBASE-Transaction/appendix.md new file mode 100644 index 00000000..77e2d669 --- /dev/null +++ b/docs/WeBASE-Transaction/appendix.md @@ -0,0 +1,250 @@ +# 附录 + +## 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 webasetransaction; +``` + +### 1.3. Zookeeper部署 + +此处给出简单步骤,供快速查阅。详情请参考[官网](https://zookeeper.apache.org/)。 + +(1)从[官网](https://zookeeper.apache.org/releases.html)下载对应版本的安装包,并解压到相应目录 + +```shell +mkdir /software +tar -zxvf zookeeper-XXX.tar.gz /software/ +``` + +(2)配置和启动 + +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) + +## 2. 常见问题 + +### 2.1 脚本没权限 + +执行shell脚本报错误"permission denied"或格式错误 + +``` +赋权限:chmod + *.sh +转格式:dos2unix *.sh +``` + +### 2.2 构建失败 + +“gradle build -x test”失败,不能编译Lombok注解: + +``` +... +/data/trans/webase-transcation/src/main/java/com/webank/webase/transaction/trans/TransService.java:175: error: cannot find symbol + log.warn("save fail. contract is not deploed", contractAddress); + ^ + symbol: variable log + location: class TransService +/data/trans/webase-transcation/src/main/java/com/webank/webase/transaction/trans/TransService.java:183: error: cannot find symbol + log.warn("call fail. contractAddress:{} abi is not exists", contractAddress); + ^ + symbol: variable log + location: class TransService +Note: /data/trans/webase-transcation/src/main/java/com/webank/webase/transaction/util/ContractAbiUtil.java uses unchecked or unsafe operations. +Note: Recompile with -Xlint:unchecked for details. +100 errors + +FAILURE: Build failed with an exception. +... +``` + + 答: 修改 build.gradle文件,将以下代码的注释去掉 + +``` + //annotationProcessor 'org.projectlombok:lombok:1.18.2' +``` + +### 2.3 启动报错“nested exception is javax.net.ssl.SSLException” + +``` +... +nested exception is javax.net.ssl.SSLException: Failed to initialize the client-side SSLContext: Input stream not contain valid certificates. +``` + +答:CentOS的yum仓库的OpenJDK缺少JCE(Java Cryptography Extension),导致Web3SDK无法正常连接区块链节点,因此在使用CentOS操作系统时,推荐从[OpenJDK网站](https://jdk.java.net/java-se-ri/11)自行下载。 + +### 2.4 启动报错“Processing bcos message timeout” + +``` + [main] ERROR SpringApplication() - Application startup failed +org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'scheduleService': Unsatisfied dependency expressed through field 'transService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'transService': Unsatisfied dependency expressed through field 'web3jMap'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'web3j' defined in class path resource [com/webank/webase/transaction/config/Web3Config.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.HashMap]: Factory method 'web3j' threw exception; nested exception is java.io.IOException: Processing bcos message timeout +``` + +答:一些Oracle JDK版本缺少相关包,导致节点连接异常。推荐使用OpenJDK,从[OpenJDK网站](https://jdk.java.net/java-se-ri/11)自行下载。 + +## 3. application.properties配置项说明 + +| 配置项 | 说明 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| server.port | 工程服务端口 | +| server.context-path | 工程跟URI | +| mybatis.mapper-locations | mapper路径 | +| logging.config | 日志文件路径 | +| sdk.orgName | 机构名 | +| sdk.timeout | sdk连接超时时间 | +| sdk.corePoolSize | sdk线程池配置 | +| sdk.maxPoolSize | sdk线程池配置 | +| sdk.queueCapacity | sdk线程池配置 | +| sdk.keepAlive | sdk线程池配置 | +| sdk.groupConfig.allChannelConnections[0].groupId | sdk连接的群组id | +| sdk.groupConfig.allChannelConnections[0].connectionsStr[0] | sdk连接的节点的ip和channelPort | +| sdk.encryptType | sdk的加密类型:0:标准,1:国密,需要与链的类型一致 | +| constant.signServer | WeBASE-Sign签名服务ip端口 | +| constant.privateKey | 本地配置私钥 | +| constant.cronTrans | 轮询上链时间间隔 | +| constant.requestCountMax | 重复请求上链最大次数 | +| constant.selectCount | 每次查询未上链数据条数 | +| constant.intervalTime | 未上链数据查询时间间隔 | +| constant.sleepTime | 多线程时间间隔 | +| constant.ifDeleteData | 是否删除数据 | +| constant.cronDeleteData | 删除数据任务时间间隔 | +| constant.keepDays | 数据保留天数 | +| constant.ifDistributedTask | 是否使用分布式任务部署多活 | +| job.regCenter.serverLists | 部署多活的话需配置zookeeper,支持集群 | +| job.regCenter.namespace | zookeeper命名空间 | +| job.dataflow.shardingTotalCount | 分片数 | +| sharding.jdbc.datasource.names | 配置所有的数据源,对应多个数据库 | +| sharding.jdbc.datasource.ds0.type | 数据连接池类型 | +| sharding.jdbc.datasource.ds0.driver-class-name | 数据驱动 | +| sharding.jdbc.datasource.ds0.url | 数据库连接url | +| sharding.jdbc.datasource.ds0.username | 数据库用户名 | +| sharding.jdbc.datasource.ds0.password | 数据库密码 | +| sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column | 数据库分片列 | +| sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression | 分片算法行表达式,需符合groovy语法 | +| sharding.jdbc.config.sharding.tables.tb_deploy_transaction.actual-data-nodes | 由数据源名 + 表名组成,以小数点分隔 | +| sharding.jdbc.config.sharding.tables.tb_deploy_transaction.table-strategy.complex.sharding-columns | 复合分片场景的分片列名称,多个列以逗号分隔 | +| sharding.jdbc.config.sharding.tables.tb_deploy_transaction.table-strategy.complex.algorithm-class-name | 复合分片算法类名称。该类需实现ComplexKeysShardingAlgorithm接口 | +| sharding.jdbc.config.sharding.tables.tb_deploy_transaction.key-generator-column-name | 自增列名称 | +| sharding.jdbc.config.props.sql.show | 是否开启SQL显示 | + diff --git a/docs/WeBASE-Transaction/architecture.png b/docs/WeBASE-Transaction/architecture.png new file mode 100644 index 00000000..36d8e9d9 Binary files /dev/null and b/docs/WeBASE-Transaction/architecture.png differ diff --git a/docs/WeBASE-Transaction/index.md b/docs/WeBASE-Transaction/index.md new file mode 100644 index 00000000..fad5ea52 --- /dev/null +++ b/docs/WeBASE-Transaction/index.md @@ -0,0 +1,12 @@ +# 交易服务 + +```eval_rst +.. toctree:: + :maxdepth: 1 + + README.md + install.md + interface.md + appendix.md +``` + diff --git a/docs/WeBASE-Transaction/install.md b/docs/WeBASE-Transaction/install.md new file mode 100644 index 00000000..0998e4d8 --- /dev/null +++ b/docs/WeBASE-Transaction/install.md @@ -0,0 +1,205 @@ +# 部署说明 + +## 1. 前提条件 + +| 环境 | 版本 | +| --------- | ------------------------- | +| Java | Oracle JDK 8至14 | +| 数据库 | MySQL-5.6或以上版本 | +| ZooKeeper | ZooKeeper-3.6.0或以上版本 | + +**备注:** + +- Java推荐使用[OracleJDK](https://www.oracle.com/technetwork/java/javase/downloads/index.html),可参考[JDK配置指引](./appendix.html#jdk)(CentOS的yum仓库的OpenJDK缺少JCE(Java Cryptography Extension),导致Web3SDK无法正常连接区块链节点) + + +- 安装说明请参看 [安装示例](./appendix.html#id2),不使用分布式任务可以不部署ZooKeeper。 +- 使用**国密SSL**需要修改`application.properties`中的`sdk.useSmSsl`配置为true(sdk将自动判断是否使用国密或非国密加密链数据,不再需要手动配置) +- 编译国密版智能合约在v1.3.1版本后,通过引入solcJ:0.4.25-rc1.jar,自动切换支持国密版智能合约的编译/部署/调用;(可自行切换solcJ-0.5.2) + + +## 2. 拉取代码 + +执行命令: + +```shell +git clone -b lab https://github.com/WeBankBlockchain/WeBASE-Transaction.git + +# 若因网络问题导致长时间下载失败,可尝试以下命令 +git clone -b lab https://gitee.com/WeBank/WeBASE-Transaction.git +``` + +进入目录: + +``` +cd WeBASE-Transaction +``` + +## 3. 编译代码 + +使用以下方式编译构建,如果出现问题可以查看 [常见问题解答](./appendix.html#id9)
+ +方式一:如果服务器已安装Gradle,且版本为gradle-4.10至gradle-6.x版本 + +```shell +gradle build -x test +``` + +方式二:如果服务器未安装Gradle,或者版本不是gradle-4.10至gradle-6.x版本,使用gradlew编译 + +```shell +chmod +x ./gradlew && ./gradlew build -x test +``` + +构建完成后,会在根目录WeBASE-Transaction下生成已编译的代码目录dist。 + +## 4. 修改配置 + +### 4.1 复制模板 + +进入编译目录dist: + +``` +cd dist +``` + +dist目录提供了一份配置模板conf_template: + +``` +根据配置模板生成一份实际配置conf。初次部署可直接拷贝。 +例如:cp conf_template conf -r +``` + +### 4.2 复制证书 + +进入配置目录conf: + +```shell +cd conf +``` + +将节点所在目录`nodes/${ip}/sdk`下的所有文件拷贝到当前conf目录(包括ca.crt, sdk.crt, sdk.key,国密下则包括gmca.crt, gmensdk.crt, gmensdk.key, gmsdk.crt, gmensdk.key),供SDK与节点建立连接时使用。 + +### 4.3 修改配置 + +**说明:** 有注释的地方根据实际情况修改,完整配置项说明请查看 [配置说明](./appendix.html#application-properties) + +```shell +vi application.properties +``` + +```shell +################################### Basic Configuration ################################### +# 后台服务的版本 +version=lab-rc2 +# 工程服务端口,端口被占用则修改 +server.port=5003 +server.context-path=/WeBASE-Transaction +mybatis.mapper-locations=classpath:mapper/*.xml +logging.config=classpath:log4j2.xml + +################################### fisco-bcos javasdk Configuration ################################### +# sdk是否使用国密SSL(将自动判断是否使用国密加密) +sdk.useSmSsl=false +# fisco-bcos节点的ip列表,端口为channel端口 +sdk.peers[0]=127.0.0.1:20200 +sdk.peers[1]=127.0.0.1:20201 +# sdk证书所在的相对路径,默认为conf +sdk.certPath=conf +# sdk线程池大小 +sdk.threadPoolSize=50 + +################################### constant Configuration ################################### +# WeBASE-Sign签名服务ip端口,使用本签名方式(signType=2)则对应修改 +constant.signServer=127.0.0.1:5004 +# 本地配置私钥进行签名,使用本签名方式(signType=0)则对应修改 +constant.privateKey=edf02a4a69b14ee6b1650a95de71d5f50496ef62ae4213026bd8d6651d030995 +constant.cronTrans=0/1 * * * * ? +constant.requestCountMax=6 +constant.selectCount=10 +constant.intervalTime=600 +constant.sleepTime=50 +# 是否删除数据 +constant.ifDeleteData=false +constant.cronDeleteData=0 0 1 * * ? +constant.keepDays=360 +# 使用分布式任务部署多活(true-是,false-否) +constant.ifDistributedTask=false + +################################### elastic-job 分布式任务 ################################### +# 部署多活的话需配置zookeeper,支持集群 +job.regCenter.serverLists=127.0.0.1:2181 +# zookeeper命名空间 +job.regCenter.namespace=elasticjob-transaction +# 分片数(如多活3个的话可分成3片) +job.dataflow.shardingTotalCount=3 + +################################### 数据源配置 ################################### +# * 说明:本工程使用Sharding-JDBC分库分表,支持单一数据源,也支持多库多表。 +# * 单库单表:配置单个数据源,将分库策略和分表策略注释或删除 +# * 多库多表:配置多数据源,以群组分库,以年份分表,用户自定义每年分成几个表(注:分表策略的路由字段不可修改[id,gmt_create]) +# * 样例:以两个数据源为例(数据库需事先创建),每张表根据年分表,每年再分成两个子表,以2020和2021年的表为例 + +# 配置所有的数据源,如此处定义了ds0,ds1两个数据源,对应两个库 +sharding.jdbc.datasource.names=ds0,ds1 + +# 定义数据源ds0,配置数据库连接信息 +sharding.jdbc.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource +sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver +sharding.jdbc.datasource.ds0.url=jdbc:mysql://localhost:3306/webasetransaction0?autoReconnect=true&useSSL=false&serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=UTF-8 +sharding.jdbc.datasource.ds0.username=dbUsername +sharding.jdbc.datasource.ds0.password=dbPassword + +## 定义数据源ds1,配置数据库连接信息 +sharding.jdbc.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource +sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver +sharding.jdbc.datasource.ds1.url=jdbc:mysql://127.0.0.1:3306/webasetransaction1?autoReconnect=true&useSSL=false&serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=UTF-8 +sharding.jdbc.datasource.ds1.username=dbUsername +sharding.jdbc.datasource.ds1.password=dbPassword + +# 定义数据库分片策略,如此处以群组id取模2来路由到ds0或ds1 +# sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=group_id +# sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds$->{group_id % 2} +sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=id +sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds$->{id % 2} + +# 定义tb_deploy_transaction的分表策略,如此处以创建时间的年份和自增id取模2来路由到子表 +sharding.jdbc.config.sharding.tables.tb_deploy_transaction.actual-data-nodes=ds$->{0..1}.tb_deploy_transaction_$->{2021..2022}_$->{0..1} +sharding.jdbc.config.sharding.tables.tb_deploy_transaction.table-strategy.complex.sharding-columns=id,gmt_create +sharding.jdbc.config.sharding.tables.tb_deploy_transaction.table-strategy.complex.algorithm-class-name=com.webank.webase.transaction.config.MyComplexShardingAlgorithm +sharding.jdbc.config.sharding.tables.tb_deploy_transaction.key-generator-column-name=id + +# 定义tb_stateless_transaction的分表策略,如此处以创建时间的年份和自增id取模2来路由到子表 +sharding.jdbc.config.sharding.tables.tb_stateless_transaction.actual-data-nodes=ds$->{0..1}.tb_stateless_transaction_$->{2021..2022}_$->{0..1} +sharding.jdbc.config.sharding.tables.tb_stateless_transaction.table-strategy.complex.sharding-columns=id,gmt_create +sharding.jdbc.config.sharding.tables.tb_stateless_transaction.table-strategy.complex.algorithm-class-name=com.webank.webase.transaction.config.MyComplexShardingAlgorithm +sharding.jdbc.config.sharding.tables.tb_stateless_transaction.key-generator-column-name=id + +sharding.jdbc.config.props.sql.show=false +``` + +## 5. 服务启停 + +返回到dist目录执行: + +```shell +启动:bash start.sh +停止:bash stop.sh +检查:bash status.sh +``` + +**备注**:服务进程起来后,需通过日志确认是否正常启动,出现以下内容表示正常;如果服务出现异常,确认修改配置后,重启提示服务进程在运行,则先执行stop.sh,再执行start.sh。 + +``` +... + Application() - main run success... +``` + +## 6. 查看日志 + +在dist目录查看: + +```shell +交易服务日志:tail -f log/transaction.log +web3连接日志:tail -f log/web3sdk.log +``` diff --git a/docs/WeBASE-Transaction/interface.md b/docs/WeBASE-Transaction/interface.md new file mode 100644 index 00000000..2a83f042 --- /dev/null +++ b/docs/WeBASE-Transaction/interface.md @@ -0,0 +1,914 @@ +# 接口说明 +## 1. 合约接口 + +### 1.1. 合约编译接口 +#### 接口描述 + +调用此接口编译合约。上传合约文件zip压缩包(压缩包里的每个合约的文件名要和合约名一致,合约引用需使用“./xxx.sol”),返回合约编译信息。 + +WeBASE-Transaction编译国密版智能合约,v1.3.1+版本已支持根据配置项的`encryptType`自动切换国密版soclJ jar包; + +#### 接口URL + +http://localhost:5003/WeBASE-Transaction/contract/compile + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|----------|------------|----------|--------------|----------|-----------------| +| 1 | 合约文件 | file | zip | | 是 | 必须是zip压缩包,直接压缩.sol文件;压缩包中不包含文件夹 | + +**2)数据格式** + +压缩包文件 + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|----------|------------|----------|--------------|----------|-------------------| +| 1 | 返回码 | code | String | | 是 | 返回码信息请附录1 | +| 2 | 提示信息 | message | String | | 是 | | +| 3 | 返回数据 | data | Object | | 是 | | + +**2)数据格式** + +a.请求正常返回结果 +``` +{ + "code": 0, + "message": "success", + "data": [ + { + "contractName": "HelloWorld", + "contractBin": "xxx", + "contractAbi": [] + } + ] +} +``` +b.异常返回结果示例(信息详情请参看附录1) +``` +{ + "code": 103001, + "message": "system error", + "data": null +} +``` + +### 1.2. 合约部署接口 +#### 接口描述 + +调用此接口发送合约部署相关信息,交易服务子系统会将合约部署请求信息缓存到数据库,通过轮询服务向节点发送交易请求,确保合约成功部署。 + +构造方法参数(funcParam)为JSON数组,多个参数以逗号分隔(参数为数组时同理),示例: + +``` +constructor(string s) -> ["aa,bb\"cc"] // 双引号要转义 +constructor(uint n,bool b) -> [1,true] +constructor(bytes b,address[] a) -> ["0x1a",["0x7939E26070BE44E6c4Fc759Ce55C6C8b166d94BE","0xce867fD9afa64175bb50A4Aa0c17fC7C4A3C67D9"]] +``` + +#### 接口URL + +http://localhost:5003/WeBASE-Transaction/contract/deploy + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|--------------|-------------|----------------|--------------|----------|----------------------------------------------------| +| 1 | 群组编号 | groupId | String | 16 | 是 | | +| 2 | 部署业务流水号 | uuidDeploy | String | 64 | 是 | | +| 3 | 签名类型 | signType | int | 2 | 是 | 0-本地配置私钥签名,1-本地随机私钥签名,2-调用WeBASE-Sign签名 | +| 4 | 合约Bin | contractBin | String | | 是 | | +| 5 | 合约Abi | contractAbi | List\ | | 是 | JSON数组 | +| 6 | 构造方法参数 | funcParam | List\ | | 否 | JSON数组 | +| 7 | 签名用户编号 | signUserId | String | | 否 | signType为2时必填 | + +**2)数据格式** +``` +{ + "groupId":"group0", + "uuidDeploy":"XXX", + "signType":0, + "contractBin":"0xXXXXX", + "contractAbi":[], + "funcParam":["hello"], + "signUserId": "458ecc77a08c486087a3dcbc7ab5a9c3" +} +``` +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|----------|------------|----------|--------------|----------|-------------------| +| 1 | 返回码 | code | String | | 是 | 返回码信息请附录1 | +| 2 | 提示信息 | message | String | | 是 | | +| 3 | 返回数据 | data | Object | | 是 | | + +**2)数据格式** + +a.请求正常返回结果 + +``` +{ + "code": 0, + "message": "success", + "data": null +} +``` + +b.异常返回结果示例(信息详情请参看附录1) +``` +{ + "code": 103001, + "message": "system error", + "data": null +} +``` + +### 1.3. 合约地址查询接口 +#### 接口描述 + +根据群组编号和和部署业务流水号查询部署的合约地址。 + +#### 接口URL + +http://localhost:5003/WeBASE-Transaction/contract/address/{groupId}/{uuidDeploy} + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|------------|------------|----------|--------------|----------|----------| +| 1 | 群组编号 | groupId | String | 16 | 是 | | +| 2 | 部署业务流水号 | uuidDeploy | String | 64 | 是 | | + +**2)数据格式** + +``` +http://127.0.0.1:5003/WeBASE-Transaction/contract/address/1/10001 +``` + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|----------|------------|----------|--------------|----------|-------------------| +| 1 | 返回码 | code | String | | 是 | 返回码信息请附录1 | +| 2 | 提示信息 | message | String | | 是 | | +| 3 | 返回数据 | data | Object | | | 合约地址 | + +**2)数据格式** + +a.请求正常返回结果 +``` +{ + "code": 0, + "message": "success", + "data": "0xXXXXX" +} +``` +b.异常返回结果示例(信息详情请参看附录1) +``` +{ + "code": 103001, + "message": "system error", + "data": null +} +``` + +### 1.4. 部署event查询接口 +#### 接口描述 + +根据群组编号和和部署业务流水号查询部署的合约的构造函数的event信息。 + +#### 接口URL + +http://localhost:5003/WeBASE-Transaction/contract/event/{groupId}/{uuidDeploy} + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|------------|------------|----------|--------------|----------|----------| +| 1 | 群组编号 | groupId | String | 16 | 是 | | +| 2 | 部署业务流水号 | uuidDeploy | String | 64 | 是 | | + +**2)数据格式** + +``` +http://127.0.0.1:5003/WeBASE-Transaction/contract/event/1/10001 +``` + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|----------|------------|----------|--------------|----------|-------------------| +| 1 | 返回码 | code | String | | 是 | 返回码信息请附录1 | +| 2 | 提示信息 | message | String | | 是 | | +| 3 | 返回数据 | data | Object | | | | + +**2)数据格式** + +a.请求正常返回结果 +``` +{ + "code": 0, + "message": "success", + "data": { + "constructorEvent1": [ + "hello!" + ], + "constructorEvent": [ + "test", + 8 + ] + } +} +``` +b.异常返回结果示例(信息详情请参看附录1) +``` +{ + "code": 103001, + "message": "system error", + "data": null +} +``` + +### 1.5. 部署信息查询接口 + +#### 接口描述 + +根据群组编号和和部署业务流水号查询部署的信息。 + +#### 接口URL + +http://localhost:5003/WeBASE-Transaction/contract/deployInfo/{groupId}/{uuidDeploy} + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------------- | ---------- | -------- | ------------ | -------- | -------- | +| 1 | 群组编号 | groupId | String | 16 | 是 | | +| 2 | 部署业务流水号 | uuidDeploy | String | 64 | 是 | | + +**2)数据格式** + +``` +http://127.0.0.1:5003/WeBASE-Transaction/contract/deployInfo/1/10001 +``` + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ------------ | --------------- | -------- | ------------ | -------- | -------------------- | +| 1 | 返回码 | code | String | | 是 | 返回码信息请附录1 | +| 2 | 提示信息 | message | String | | 是 | | +| 3 | 返回数据 | data | Object | | | | +| 3.1 | 编号 | id | int | | 是 | | +| 3.2 | 群组编号 | groupId | String | | 是 | | +| 3.3 | 流水号 | uuidDeploy | String | | 是 | | +| 3.4 | 合约bin | contractBin | String | | 是 | | +| 3.5 | 合约abi | contractAbi | String | | 是 | | +| 3.6 | 合约地址 | contractAddress | String | | 是 | | +| 3.7 | 方法参数 | funcParam | String | | 是 | | +| 3.8 | 签名类型 | signType | int | | 是 | | +| 3.9 | 签名用户编号 | signUserId | String | | 是 | | +| 3.10 | 请求上链次数 | requestCount | int | | 是 | | +| 3.11 | 处理状态 | handleStatus | int | | 是 | 0-待处理,1-处理成功 | +| 3.12 | 交易hash | transHash | String | | 是 | | +| 3.13 | 交易回执状态 | receiptStatus | boolean | | 是 | 0-异常,1-正常 | +| 3.14 | 创建时间 | gmtCreate | Date | | 是 | | + +**2)数据格式** + +a.请求正常返回结果 + +``` +{ + "code": 0, + "message": "success", + "data": { + "id": 1, + "groupId": "group0", + "uuidDeploy": "10001", + "contractBin": "XXX", + "contractAbi": "XXX" + "contractAddress": "XXX", + "funcParam": "[]", + "signType": 0, + "signUserId": "458ecc77a08c486087a3dcbc7ab5a9c3", + "requestCount": 1, + "handleStatus": 1, + "transHash": "XXX", + "receiptStatus": true, + "gmtCreate": 1574853659000 + } +} +``` + +b.异常返回结果示例(信息详情请参看附录1) + +``` +{ + "code": 103001, + "message": "system error", + "data": null +} +``` + +## 2. keystore接口 + +### 2.1. 查询账户地址接口 +#### 接口描述 + +查询本地配置私钥对应的账户地址 。 + +#### 接口URL + +http://localhost:5003/WeBASE-Transaction/key/address + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +无 + +**2)数据格式** + + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|----------|------------|----------|--------------|----------|-------------------| +| 1 | 返回码 | code | String | | 是 | 返回码信息请附录1 | +| 2 | 提示信息 | message | String | | 是 | | +| 3 | 返回数据 | data | Object | | | | + +**2)数据格式** + +a.请求正常返回结果 +``` +{ + "code": 0, + "message": "success", + "data": { + "0xfe12013103cf85f05b0862e5ef49da4fbdbd8f99" + } +} +``` +b.异常返回结果示例(信息详情请参看附录1) +``` +{ + "code": 103001, + "message": "system error", + "data": null +} +``` + +## 3. 交易接口 + +### 3.1. 交易请求接口 +#### 接口描述 + +调用此接口发送无状态交易请求,交易服务子系统会将交易请求信息缓存到数据库,通过轮询服务向节点发送交易请求,确保交易成功上链。当部署业务流水号为空时(即不是调用交易子系统部署合约),合约地址和abi不能为空。 + + +方法入参(funcParam)为JSON数组,多个参数以逗号分隔(参数为数组时同理),示例: +``` +function set(string s) -> ["aa,bb\"cc"] // 双引号要转义 +function set(uint n,bool b) -> [1,true] +function set(bytes b,address[] a) -> ["0x1a",["0x7939E26070BE44E6c4Fc759Ce55C6C8b166d94BE","0xce867fD9afa64175bb50A4Aa0c17fC7C4A3C67D9"]] +``` + + +#### 接口URL + +http://localhost:5003/WeBASE-Transaction/trans/send + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|------------|-----------------|----------------|--------------|----------|----------------------------------------------------| +| 1 | 群组编号 | groupId | String | 16 | 是 | | +| 2 | 交易业务流水号 | uuidStateless | String | 64 | 是 | | +| 3 | 部署业务流水号 | uuidDeploy | String | 64 | 否 | | +| 4 | 签名类型 | signType | int | 2 | 是 | 0-本地配置私钥签名,1-本地随机私钥签名,2-调用WeBASE-Sign签名 | +| 5 | 合约地址 | contractAddress | String | | 是 | | +| 6 | 合约Abi | contractAbi | List\ | | 是 | JSON数组 | +| 7 | 调用方法名 | funcName | String | | 是 | | +| 8 | 方法参数 | funcParam | List\ | | 否 | JSON数组 | +| 9 | 签名用户编号 | signUserId | String | | 否 | signType为2时必填 | + +**2)数据格式** +``` +{ + "groupId":"1", + "uuidStateless":"XXX", + "uuidDeploy":"XXX", + "signType":0, + "contractAddress":"0xXXXXX", + "contractAbi":[], + "funcName":"set", + "funcParam":["hello"], + "signUserId":"458ecc77a08c486087a3dcbc7ab5a9c3" +} +``` +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|----------|------------|----------|--------------|----------|-------------------| +| 1 | 返回码 | code | String | | 是 | 返回码信息请附录1 | +| 2 | 提示信息 | message | String | | 是 | | +| 3 | 返回数据 | data | Object | | | | + +**2)数据格式** + +a.请求正常返回结果 +``` +{ + "code": 0, + "message": "success", + "data": null +} +``` +b.异常返回结果示例(信息详情请参看附录1) + +``` +{ + "code": 103001, + "message": "system error", + "data": null +} +``` + +### 3.2. 交易查询接口 +#### 接口描述 + +调用此接口同步从节点查询交易信息。当部署业务流水号为空时(即不是调用交易子系统部署合约),合约地址和abi不能为空。 + + +方法入参(funcParam)为JSON数组,多个参数以逗号分隔(参数为数组时同理),示例: +``` +function set(string s) -> ["aa,bb\"cc"] // 双引号要转义 +function set(uint n,bool b) -> [1,true] +function set(bytes b,address[] a) -> ["0x1a",["0x7939E26070BE44E6c4Fc759Ce55C6C8b166d94BE","0xce867fD9afa64175bb50A4Aa0c17fC7C4A3C67D9"]] +``` + +#### 接口URL + +http://localhost:5003/WeBASE-Transaction/trans/call + +#### 调用方法 + +HTTP POST + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|------------|-----------------|----------------|--------------|----------|----------| +| 1 | 群组编号 | groupId | String | 16 | 是 | | +| 2 | 部署业务流水号 | uuidDeploy | String | 64 | 否 | | +| 3 | 合约地址 | contractAddress | String | | 否 | | +| 4 | 合约Abi | contractAbi | List\ | | 否 | JSON数组 | +| 5 | 调用方法名 | funcName | String | | 是 | | +| 6 | 方法参数 | funcParam | List\ | | 否 | JSON数组 | + +**2)数据格式** +``` +{ + "groupId":"1", + "uuidDeploy":"XXX", + "contractAbi":[], + "funcName":"get", + "funcParam":[] +} +``` +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|----------|------------|----------|--------------|----------|-------------------| +| 1 | 返回码 | code | String | | 是 | 返回码信息请附录1 | +| 2 | 提示信息 | message | String | | 是 | | +| 3 | 返回数据 | data | Object | | | | + +**2)数据格式** + +a.请求正常返回结果 +``` +{ + "code": 0, + "message": "success", + "data": [ + "hello" + ] +} +``` +b.异常返回结果示例(信息详情请参看附录1) +``` +{ + "code": 103001, + "message": "system error", + "data": null +} +``` + +### 3.3. 交易请求event查询接口 +#### 接口描述 + +根据群组编号和交易业务流水号查询交易请求的event信息。 + +#### 接口URL + +http://localhost:5003/WeBASE-Transaction/trans/event/{groupId}/{uuidStateless} + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|------------|------------|----------|--------------|----------|----------| +| 1 | 群组编号 | groupId | String | 16 | 是 | | +| 2 | 交易业务流水号 | uuidStateless | String | 64 | 是 | | + +**2)数据格式** + +``` +http://127.0.0.1:5003/WeBASE-Transaction/trans/event/1/20001 +``` + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|----------|------------|----------|--------------|----------|-------------------| +| 1 | 返回码 | code | String | | 是 | 返回码信息请附录1 | +| 2 | 提示信息 | message | String | | 是 | | +| 3 | 返回数据 | data | Object | | | | + +**2)数据格式** + +a.请求正常返回结果 +``` +{ + "code": 0, + "message": "success", + "data": { + "setEvent": [ + "test" + ], + "setEvent1": [ + "test" + ] + } +} +``` +b.异常返回结果示例(信息详情请参看附录1) +``` +{ + "code": 103001, + "message": "system error", + "data": null +} +``` + +### 3.4. 交易请求output查询接口 +#### 接口描述 + +根据群组编号和交易业务流水号查询交易请求的output信息。 + +#### 接口URL + +http://localhost:5003/WeBASE-Transaction/trans/output/{groupId}/{uuidStateless} + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|------------|------------|----------|--------------|----------|----------| +| 1 | 群组编号 | groupId | String | 16 | 是 | | +| 2 | 交易业务流水号 | uuidStateless | String | 64 | 是 | | + +**2)数据格式** + +``` +http://127.0.0.1:5003/WeBASE-Transaction/trans/output/1/20001 +``` + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|----------|------------|----------|--------------|----------|-------------------| +| 1 | 返回码 | code | String | | 是 | 返回码信息请附录1 | +| 2 | 提示信息 | message | String | | 是 | | +| 3 | 返回数据 | data | Object | | | | + +**2)数据格式** + +a.请求正常返回结果 +``` +{ + "code": 0, + "message": "success", + "data": [ + "hello!" + ] +} +``` +b.异常返回结果示例(信息详情请参看附录1) +``` +{ + "code": 103001, + "message": "system error", + "data": null +} +``` + +### 3.5. 交易信息查询接口 + +#### 接口描述 + +根据群组编号和交易业务流水号查询交易信息。 + +#### 接口URL + +http://localhost:5003/WeBASE-Transaction/trans/transInfo/{groupId}/{uuidStateless} + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------------- | ------------- | -------- | ------------ | -------- | -------- | +| 1 | 群组编号 | groupId | String | 16 | 是 | | +| 2 | 交易业务流水号 | uuidStateless | String | 64 | 是 | | + +**2)数据格式** + +``` +http://127.0.0.1:5003/WeBASE-Transaction/trans/transInfo/1/20001 +``` + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | ------------ | --------------- | -------- | ------------ | -------- | -------------------- | +| 1 | 返回码 | code | String | | 是 | 返回码信息请附录1 | +| 2 | 提示信息 | message | String | | 是 | | +| 3 | 返回数据 | data | Object | | | | +| 3.1 | 编号 | id | int | | 是 | | +| 3.2 | 群组编号 | groupId | String | | 是 | | +| 3.3 | 交易流水号 | uuidStateless | String | | 是 | | +| 3.4 | 部署流水号 | uuidDeploy | String | | 是 | | +| 3.5 | 合约abi | contractAbi | String | | 是 | | +| 3.6 | 合约地址 | contractAddress | String | | 是 | | +| 3.7 | 方法名 | funcName | String | | 是 | | +| 3.8 | 方法参数 | funcParam | String | | 是 | | +| 3.9 | 签名类型 | signType | int | | 是 | | +| 3.10 | 签名用户编号 | signUserId | String | | 是 | | +| 3.11 | 请求上链次数 | requestCount | int | | 是 | | +| 3.12 | 处理状态 | handleStatus | int | | 是 | 0-待处理,1-处理成功 | +| 3.13 | 交易hash | transHash | String | | 是 | | +| 3.14 | 交易返回原文 | transOutput | String | | 是 | | +| 3.15 | 交易回执状态 | receiptStatus | boolean | | 是 | 0-异常,1-正常 | +| 3.16 | 创建时间 | gmtCreate | Date | | 是 | | + +**2)数据格式** + +a.请求正常返回结果 + +``` +{ + "code": 0, + "message": "success", + "data": { + "id": 1, + "groupId": "group0", + "uuidStateless": "20001", + "uuidDeploy": "10001", + "contractAbi": "XXX" + "contractAddress": "XXX", + "funcName": "set", + "funcParam": "XXX", + "signType": 0, + "signUserId": "458ecc77a08c486087a3dcbc7ab5a9c3", + "requestCount": 1, + "handleStatus": 1, + "transHash": "XXX", + "transOutput": "0x", + "receiptStatus": true, + "gmtCreate": 1574854118000 + } +} +``` + +b.异常返回结果示例(信息详情请参看附录1) + +``` +{ + "code": 103001, + "message": "system error", + "data": null +} +``` + +## 4. 其他接口 + +### 4.1. 获取EncryptType接口 +#### 接口描述 + +返回Transaction服务中web3sdk所使用的`encryptType`,0:标准,1:国密 + +#### 接口URL + +http://localhost:5003/WeBASE-Transaction/encrypt + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|------------|------------|----------|--------------|----------|----------| +| 1 | - | - | - | - | - | | + +**2)数据格式** + +``` +http://127.0.0.1:5003/WeBASE-Transaction/encrypt +``` + +#### 响应参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +|----------|----------|------------|----------|--------------|----------|-------------------| +| 1 | 返回码 | code | String | | 是 | 返回码信息请附录1 | +| 2 | 提示信息 | message | String | | 是 | | +| 3 | 返回数据 | data | Integer | | | encryptType: 0:标准, 1:国密 | + +**2)数据格式** + +a.请求正常返回结果 +``` +{ + "code": 0, + "message": "success", + "data": 0 +} +``` + + +### 4.2. 查询WeBASE-Transaction版本接口 + +#### 接口描述 + +获取WeBASE-Transaction的版本号 + +#### 接口URL + +**http://localhost:5003/WeBASE-Transaction/version** + +#### 调用方法 + +HTTP GET + +#### 请求参数 + +**1)参数表** + +| **序号** | **中文** | **参数名** | **类型** | **最大长度** | **必填** | **说明** | +| -------- | -------------- | --------------- | -------- | ------------ | -------- | ---------------------------------------------- | +| | - | - | - | | | | + +**2)数据格式** + +``` +http://localhost:5003/WeBASE-Transaction/version +``` + +#### 响应参数 + +**1)数据格式** + +a、成功: + +``` +v1.4.0 +``` + +## 附录 + +### 1. 返回码信息列表 + +| Code | message | 描述 | +| ------ | ------------------------------------------------------------ | ------------------------------------------- | +| 0 | success | 正常 | +| 103001 | system error | 系统异常 | +| 103002 | param valid fail | 参数校验异常 | +| 203001 | group id cannot be empty | 群组编号不能为空 | +| 203002 | uuid cannot be empty | 业务流水号不能为空 | +| 203003 | sign type cannot be empty | 签名类型不能为空 | +| 203004 | contract bin cannot be empty | 合约bin不能为空 | +| 203005 | contract abi cannot be empty | 合约abi不能为空 | +| 203006 | contract address cannot be empty | 合约地址不能为空 | +| 203007 | function name cannot be empty | 方法名不能为空 | +| 303001 | uuid is already exists | 业务流水号已经存在 | +| 303002 | get sign data from sign service error | 调用签名服务签名错误 | +| 303003 | contract funcParam is error | 合约方法参数错误 | +| 303004 | sign type is not exists | 签名类型不存在 | +| 303005 | contract abi is empty | 合约abi不存在 | +| 303006 | request function can not be constant | 交易上链不能为constant方法 | +| 303007 | query function must be constant | 查询方法必须是constant | +| 303008 | query data from chain failed | 查询链上数据失败 | +| 303009 | file cannot be empty | 文件不能为空 | +| 303010 | it is not a zip file | 文件不是zip格式 | +| 303011 | contract has not been deployed | 合约还没有部署 | +| 303012 | contract compile error | 合约编译错误 | +| 303013 | node request failed | 节点请求失败 | +| 303014 | there is not event | 不存在event | +| 303015 | trans has not been sent to the chain | 交易还没有上链 | +| 303016 | if deploy uuid is empty, contract address and contract abi cannot be empty | 部署业务流水号为空时,合约地址和abi不能为空 | +| 303017 | trans output is empty | 交易返回值为空 | +| 303018 | trans is not exists | 交易不存在 | +| 303019 | request group id has not been configured | 请求的群组编号未配置 | +| 303020 | sign user id cannot be empty while sign type is 2 | 签名类型为2是签名用户编号不能为空 | +| 303021 | sign user id check failed | 签名用户编号校验失败 | +| 303022 | function is not exists | 合约方法不存在 | +| 303023 | data is not exists | 数据不存在 | \ No newline at end of file diff --git a/docs/WeBASE-Transaction/upgrade.md b/docs/WeBASE-Transaction/upgrade.md new file mode 100644 index 00000000..77c7408e --- /dev/null +++ b/docs/WeBASE-Transaction/upgrade.md @@ -0,0 +1,16 @@ +# 升级说明 + +WeBASE-Transaction升级的兼容性说明,请结合[WeBASE-Transaction Changelog](https://github.com/WeBankBlockchain/WeBASE-Sign)进行阅读 + +WeBASE-Transaction升级的必须步骤: +1. 备份已有文件或数据,下载新的安装包(可参考[安装包下载](../WeBASE/mirror.html#install_package)) +2. 使用新的安装包,并将旧版本yml已有配置添加到新版本yml中;可通过`diff aFile bFile`命令对比新旧yml的差异 +3. 查看[签名服务升级文档](../WeBASE-Transaction/upgrade.html)中对应版本是否需要修改数据表,若不需要升级则跳过 + 3.1 若需要升级数据表,首先使用`mysqldump`命令备份数据库 + 3.2 按照升级文档指引,操作数据表 +4. `bash stop.sh && bash start.sh`重启 + +各个版本的具体修改可参考下文 + +#### lab-rc2 +支持FISCO BCOS v3.0.0-rc2 diff --git a/docs/WeBASE/ChangeLOG.md b/docs/WeBASE/ChangeLOG.md index 274b87e4..1d789bc6 100644 --- a/docs/WeBASE/ChangeLOG.md +++ b/docs/WeBASE/ChangeLOG.md @@ -2,9 +2,23 @@ ## 支持FISCO-BCOS 3.X.X系列版本 + +### WeBASE lab-rc2 + +WeBASE lab-rc2 版本支持 FISCO-BCOS 3.0.0-rc2及以上版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用 [FISCO BCOS 3.0.0-rc2](https://github.com/FISCO-BCOS/FISCO-BCOS/releases/tag/v3.0.0-rc2)版本。 + +| WeBASE子系统名称 | 配套版本地址 | FISCO-BCOS 2.X.X | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| [节点前置服务](https://webasedoc.readthedocs.io/zh_CN/lab/docs/WeBASE-Front/index.html) | [WeBASE-Front Release lab-rc2](https://github.com/WeBankBlockchain/WeBASE-Front/releases/tag/lab-rc2) | [FISCO BCOS 3.0.0-rc2](https://github.com/FISCO-BCOS/FISCO-BCOS/releases/tag/v3.0.0-rc2) | +| [节点管理服务](https://webasedoc.readthedocs.io/zh_CN/lab/docs/WeBASE-Node-Manager/index.html) | [WeBASE-Node-Manager Release lab-rc2](https://github.com/WeBankBlockchain/WeBASE-Node-Manager/releases/tag/lab-rc2) | [FISCO BCOS 3.0.0-rc2](https://github.com/FISCO-BCOS/FISCO-BCOS/releases/tag/v3.0.0-rc2) | +| [WeBASE管理平台](https://webasedoc.readthedocs.io/zh_CN/lab/docs/WeBASE-Web/index.html) | [WeBASE-Web Release lab-rc2](https://github.com/WeBankBlockchain/WeBASE-Web/releases/tag/lab-rc2) | [FISCO BCOS 3.0.0-rc2](https://github.com/FISCO-BCOS/FISCO-BCOS/releases/tag/v3.0.0-rc2) | +| [签名服务](https://webasedoc.readthedocs.io/zh_CN/lab/docs/WeBASE-Sign/index.html) | [WeBASE-Sign Release lab-rc2](https://github.com/WeBankBlockchain/WeBASE-Sign/releases/tag/lab-rc2) | [FISCO BCOS 3.0.0-rc2](https://github.com/FISCO-BCOS/FISCO-BCOS/releases/tag/v3.0.0-rc2) | + + + ### WeBASE lab-rc1 -WeBASE lab-rc1 版本支持 FISCO-BCOS 3.0.0-rc1及以上版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用 [FISCO BCOS 3.0.0-rc1](https://github.com/FISCO-BCOS/FISCO-BCOS/releases/tag/v3.0.0-rc1)版本。 +WeBASE lab-rc1 版本支持 FISCO-BCOS 3.0.0-rc1版本。WeBASE 子系统推荐使用下表的版本搭配,FISCO-BCOS 推荐使用 [FISCO BCOS 3.0.0-rc1](https://github.com/FISCO-BCOS/FISCO-BCOS/releases/tag/v3.0.0-rc1)版本。 | WeBASE子系统名称 | 配套版本地址 | FISCO-BCOS 2.X.X | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | diff --git a/docs/WeBASE/install.md b/docs/WeBASE/install.md index a8f392bc..a61f6aac 100644 --- a/docs/WeBASE/install.md +++ b/docs/WeBASE/install.md @@ -94,7 +94,7 @@ Python3.6及以上版本,需安装`PyMySQL`依赖包 获取部署安装包: ```shell -wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/lab-rc1/webase-deploy.zip +wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/lab-rc2/webase-deploy.zip ``` 解压安装包: ```shell @@ -123,15 +123,20 @@ cd webase-deploy ​ 如果不使用一键部署搭建新链,可以参考FISCO BCOS官方文档搭建 [FISCO BCOS部署流程](https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/installation.html#fisco-bcos); +- 如果使用的`liquid`合约的链(`fisco.wasm=1`),并在WeBASE管理台或WeBASE-Front的合约IDE中编译Liquid合约,要求**手动**在WeBASE-Front所在主机[配置Liquid环境](https://liquid-doc.readthedocs.io/zh_CN/latest/docs/quickstart/prerequisite.html)后,才能通过WeBASE编译Liquid合约 + +- 启用链的权限管理功能时(`fisco.auth=1`),建链后会在`webase-deploy/nodes/ca`目录生成一个链管理员私钥(包含国密与非国密),需要在WeBASE管理台的权限管理页面中**导入该私钥**才能进行权限管理。 + + ④ 服务端口不能小于1024 ```shell [common] # WeBASE子系统的最新版本(lab或以上版本) -webase.web.version=lab-rc1 -webase.mgr.version=lab-rc1 -webase.sign.version=lab-rc1 -webase.front.version=lab-rc1 +webase.web.version=lab-rc2 +webase.mgr.version=lab-rc2 +webase.sign.version=lab-rc2 +webase.front.version=lab-rc2 # 节点管理子系统mysql数据库配置 mysql.ip=localhost @@ -173,9 +178,17 @@ node.p2pPort=30300 # 节点rpc端口 node.rpcPort=20200 # FISCO-BCOS版本(v3.0.0或以上版本) -fisco.version=v3.0.0-rc1 +fisco.version=v3.0.0-rc2 # 搭建节点个数(默认两个) node.counts=nodeCounts +# 是否搭建Liquid合约链(Solidity和Liquid合约需要二选一,默认Solidity +# 如果使用Liquid,要求在webase-front所在主机配置Liquid环境才能在WeBASE中编译合约 +# [0: solidity, 1: liquid] +fisco.wasm=0 +# 是否启用链的权限管理,默认不启用 +# 如果启用权限,一键部署自动在'webase-deploy/nodes/ca'目录生成一个随机的管理员私钥(包含国密与非国密) +# [0: disabled, 1: enable] +fisco.auth=0 # 使用已有链时需配置[if.exist.fisco=yes] # 已有链节点rpc端口列表 diff --git a/docs/WeBASE/mirror.md b/docs/WeBASE/mirror.md index bd0db7ef..8b9365db 100644 --- a/docs/WeBASE/mirror.md +++ b/docs/WeBASE/mirror.md @@ -5,13 +5,13 @@ ### 源码同步 -WeBASE当前仓库源码位于[https://github.com/WebankFinTech/WeBASE](https://github.com/WebankFinTech/WeBASE),每个新的版本发布会将代码合入master分支。 +WeBASE当前仓库源码位于[https://github.com/WeBankBlockchain/WeBASE](https://github.com/WeBankBlockchain/WeBASE),每个新的版本发布会将代码合入master分支。 为了方便国内用户,我们同样在gitee上提供了镜像仓库[https://giteee.com/Webank/WeBASE](https://giteee.com/Webank/WeBASE),每次新版本发布后,镜像仓库会同步GitHub上官方仓库的更新,如果从GitHub下载失败,请尝试使用Gitee镜像仓库。 -WeBASE各子系统的Github代码仓库则是`https://github.com/WebankFinTech/` + `WeBASE-XXX`,对应的gitee仓库则是`https://gitee.com/WeBank/` + `WeBASE-XXX` +WeBASE各子系统的Github代码仓库则是`https://github.com/WeBankBlockchain/` + `WeBASE-XXX`,对应的gitee仓库则是`https://gitee.com/WeBank/` + `WeBASE-XXX` -如WeBASE-Front的Github代码仓库为`https://github.com/WebankFinTech/WeBASE-Front`,Gitee代码仓库为`https://gitee.com/WeBank/WeBASE-Front` +如WeBASE-Front的Github代码仓库为`https://github.com/WeBankBlockchain/WeBASE-Front`,Gitee代码仓库为`https://gitee.com/WeBank/WeBASE-Front` ### 一键部署与安装包 diff --git a/images/WeBASE-Console-Suit/lab/bfs_manage.png b/images/WeBASE-Console-Suit/lab/bfs_manage.png new file mode 100644 index 00000000..af04f8b7 Binary files /dev/null and b/images/WeBASE-Console-Suit/lab/bfs_manage.png differ diff --git a/images/WeBASE-Console-Suit/lab/big_screen_lab.png b/images/WeBASE-Console-Suit/lab/big_screen_lab.png new file mode 100644 index 00000000..c7324b5a Binary files /dev/null and b/images/WeBASE-Console-Suit/lab/big_screen_lab.png differ diff --git a/images/WeBASE-Console-Suit/lab/contract_list.png b/images/WeBASE-Console-Suit/lab/contract_list.png new file mode 100644 index 00000000..d0966bf0 Binary files /dev/null and b/images/WeBASE-Console-Suit/lab/contract_list.png differ diff --git a/images/WeBASE-Console-Suit/lab/contract_warehouse.png b/images/WeBASE-Console-Suit/lab/contract_warehouse.png new file mode 100644 index 00000000..e5b58342 Binary files /dev/null and b/images/WeBASE-Console-Suit/lab/contract_warehouse.png differ diff --git a/images/WeBASE-Console-Suit/lab/new_front.png b/images/WeBASE-Console-Suit/lab/new_front.png new file mode 100644 index 00000000..5fe9ccfa Binary files /dev/null and b/images/WeBASE-Console-Suit/lab/new_front.png differ diff --git a/images/WeBASE-Console-Suit/lab/permission_home.png b/images/WeBASE-Console-Suit/lab/permission_home.png new file mode 100644 index 00000000..658ca385 Binary files /dev/null and b/images/WeBASE-Console-Suit/lab/permission_home.png differ diff --git a/index.rst b/index.rst index 0a90b0de..687b0dae 100644 --- a/index.rst +++ b/index.rst @@ -131,6 +131,7 @@ WeBASE(WeBank Blockchain Application Software Extension) 是在区块链应 docs/WeBASE-Node-Manager/index.md docs/WeBASE-Web/index.md docs/WeBASE-Sign/index.md + docs/WeBASE-Transaction/index.md .. toctree:: :hidden: diff --git a/release_note.txt b/release_note.txt index f211e1cb..13493615 100644 --- a/release_note.txt +++ b/release_note.txt @@ -1 +1 @@ -lab-rc1 +lab-rc2