应用开发组件学习笔记:使用脚手架快速搭建 Java DApp
注:本文对《如何快速构建区块链应用?这款脚手架支持一键生成》一文有所参考。
区块链应用开发有多种模式,分别适配于不同的项目。如:
开启一个节点前置服务,区块链应用访问节点前置服务;使用针对该语言的SDK,如Java SDK、Python SDK 等;通过脚手架自动生成项目。
本文将介绍第三种方式——通过脚手架生成项目。
这种方式适用于:
刚上手区块链开发,但是想快速实现区块链项目的同学 想快速开展项目开发,不想在非业务层以外的代码上投入太多成本的同学
适用于FISCO BCOS的应用开发脚手架简介
脚手架组件关键特性
快速实践
2.1 从 Github 或者 Gitee 获得脚手架源码
git clone https://gitee.com/WeBankBlockchain/SmartDev-Scaffold.git # Gitee
# git clone https://gitee.com/WeBankBlockchain/SmartDev-Scaffold.git # Github
cd SmartDev-Scaffold
2.2 编译项目
gradle build -x test
![](https://filescdn.proginn.com/abd981040738dccde2d8b74f00e43648/5bb26f7d0301b528e799b84699d5d295.webp)
cd tools
2.3.1 合约配置
2.3.2 项目配置
### 项目名称
artifact=demo
### 组名称
group=org.example
### 所支持的合约列表,通常为空即可
selector=
2.3.3 运行脚手架
chmod +x run.sh & bash run.sh
![](https://filescdn.proginn.com/9b5165ad4e49aafce0c6dfe786f69c48/2a0a5390bf169b8cf17f6e1e8fa16e14.webp)
准备工作
![](https://filescdn.proginn.com/e2bf628fe6bc5d43086227c9749538e9/6e718825f93c3101ce47b09252be57c0.webp)
在进行具体业务逻辑开发前,我们还需要做如下几项工作:
部署合约
证书拷贝
补充配置文件
3.1 通过WeBASE-Front部署合约
简介:WeBASE-Front是和FISCO-BCOS节点配合使用的一个子系统。此分支支持FISCO-BCOS 2.0以上版本,集成web3sdk,对接口进行了封装,可通过HTTP请求和节点进行通信。另外,具备可视化控制台,可以在控制台上开发智能合约,部署合约和发送交易,并查看交易和区块详情。还可以管理私钥,对节点健康度进行监控和统计。 文档地址: https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Front/README.html
bash start.sh
![](https://filescdn.proginn.com/2564bf23671ed735dbbc14b7028f48c7/306e37d90e64f12fc4568b04de401137.webp)
http://localhost:5002/WeBASE-Front/#/contract
合约管理 > 测试用户 > 新增用户
![](https://filescdn.proginn.com/7b00299e4d97b78d515fea0573e5681a/9609e44738710824077f072f9b216cd2.webp)
![](https://filescdn.proginn.com/edde22099eff38b0743cddc271876d7e/9b1ee063036cde95b7a690952fd2093e.webp)
![](https://filescdn.proginn.com/2b53a66406da1ef9bc5efa8cccf298a3/0e411ad6efced182db3d6db7a7721121.webp)
![](https://filescdn.proginn.com/675d09c45e4ea28ed9fbe5469f0b4c8e/88ad4723d8ca91ef12e84a6822047230.webp)
3.2 复制证书文件到Conf目录下
/src/main/resources/conf
cp ~/fisco/nodes/127.0.0.1/sdk/* src/main/resources/conf/
# 此处按节点具体位置进行调整
3.3 补充配置文件
## Required
## (1)此处改为节点地址+端口
system.peers=127.0.0.1:20200
## Required
system.groupId=1
## Optional. Default will search conf,config,src/main/conf/src/main/config
system.certPath=conf,config,src/main/resources/conf,src/main/resources/config
## Optional. If don't specify a random private key will be used
## (2)此处改为 4.1 中拿到的私钥
system.hexPrivateKey=e5a34796608dcc9462af7de1d282dd7e4a1b0e421b81af7a904847e2f9f7f781
## Optional. Please fill this address if you want to use related service
## (2)此处改为 4.1 中的合约地址
system.contract.helloWorldAddress=0xf6035ce1d6b1b689e25bc2893179c00fbac2645a
## ### Springboot server config
server.port=8080
server.session.timeout=60
banner.charset=UTF-8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
3.4 编译与运行
gradle build -x test
cd dist
java -jar demo-exec.jar
![](https://filescdn.proginn.com/2ae12d8bcc3c7b966682d118c9126099/2d27731fecad988104a6fc130195a777.webp)
添加业务逻辑
package org.example.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.example.demo.service.HelloWorldService;
import org.example.demo.model.bo.HelloWorldSetInputBO;
public class HelloController {
private HelloWorldService service;
public String set( String n) throws Exception{
HelloWorldSetInputBO input = new HelloWorldSetInputBO(n);
return service.set(input).getTransactionReceipt().getTransactionHash();
}
public String get() throws Exception{
return service.get().getValues();
}
}
gradle build -x test
cd dist
java -jar demo-exec.jar
curl http://127.0.0.1:8080/hello/get
curl http://127.0.0.1:8080/hello/set\?n\=happy
curl http://127.0.0.1:8080/hello/get
![](https://filescdn.proginn.com/a725f2448f8dedddab6a7a29071c86fe/3e3d6b2cbc8e2c2d1ecdac36953e8a23.webp)
![](https://filescdn.proginn.com/d10f857f9184fa82cc085eb4febc8297/722974ab2dea2d7acbf38d5173ef5f07.webp)
评论