應(yīng)用開(kāi)發(fā)組件學(xué)習(xí)筆記:使用腳手架快速搭建 Java DApp
注:本文對(duì)《如何快速構(gòu)建區(qū)塊鏈應(yīng)用?這款腳手架支持一鍵生成》一文有所參考。
區(qū)塊鏈應(yīng)用開(kāi)發(fā)有多種模式,分別適配于不同的項(xiàng)目。如:
開(kāi)啟一個(gè)節(jié)點(diǎn)前置服務(wù),區(qū)塊鏈應(yīng)用訪問(wèn)節(jié)點(diǎn)前置服務(wù);使用針對(duì)該語(yǔ)言的SDK,如Java SDK、Python SDK 等;通過(guò)腳手架自動(dòng)生成項(xiàng)目。
本文將介紹第三種方式——通過(guò)腳手架生成項(xiàng)目。
這種方式適用于:
剛上手區(qū)塊鏈開(kāi)發(fā),但是想快速實(shí)現(xiàn)區(qū)塊鏈項(xiàng)目的同學(xué) 想快速開(kāi)展項(xiàng)目開(kāi)發(fā),不想在非業(yè)務(wù)層以外的代碼上投入太多成本的同學(xué)
適用于FISCO BCOS的應(yīng)用開(kāi)發(fā)腳手架簡(jiǎn)介

腳手架組件關(guān)鍵特性
快速實(shí)踐
2.1 從 Github 或者 Gitee 獲得腳手架源碼
git clone https://gitee.com/WeBankBlockchain/SmartDev-Scaffold.git # Gitee# git clone https://gitee.com/WeBankBlockchain/SmartDev-Scaffold.git # Githubcd SmartDev-Scaffold
2.2 編譯項(xiàng)目
gradle build -x test
cd tools
2.3.1 合約配置
2.3.2 項(xiàng)目配置
### 項(xiàng)目名稱(chēng)artifact=demo### 組名稱(chēng)group=org.example### 所支持的合約列表,通常為空即可selector=
2.3.3 運(yùn)行腳手架
chmod +x run.sh & bash run.sh

準(zhǔn)備工作

在進(jìn)行具體業(yè)務(wù)邏輯開(kāi)發(fā)前,我們還需要做如下幾項(xiàng)工作:
部署合約
證書(shū)拷貝
補(bǔ)充配置文件
3.1 通過(guò)WeBASE-Front部署合約
簡(jiǎn)介:WeBASE-Front是和FISCO-BCOS節(jié)點(diǎn)配合使用的一個(gè)子系統(tǒng)。此分支支持FISCO-BCOS 2.0以上版本,集成web3sdk,對(duì)接口進(jìn)行了封裝,可通過(guò)HTTP請(qǐng)求和節(jié)點(diǎn)進(jìn)行通信。另外,具備可視化控制臺(tái),可以在控制臺(tái)上開(kāi)發(fā)智能合約,部署合約和發(fā)送交易,并查看交易和區(qū)塊詳情。還可以管理私鑰,對(duì)節(jié)點(diǎn)健康度進(jìn)行監(jiān)控和統(tǒng)計(jì)。 文檔地址: https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Front/README.html
bash start.sh

http://localhost:5002/WeBASE-Front/#/contract
合約管理 > 測(cè)試用戶(hù) > 新增用戶(hù)




3.2 復(fù)制證書(shū)文件到Conf目錄下
/src/main/resources/conf
cp ~/fisco/nodes/127.0.0.1/sdk/* src/main/resources/conf/# 此處按節(jié)點(diǎn)具體位置進(jìn)行調(diào)整
3.3 補(bǔ)充配置文件
## Required## (1)此處改為節(jié)點(diǎn)地址+端口system.peers=127.0.0.1:20200## Requiredsystem.groupId=1## Optional. Default will search conf,config,src/main/conf/src/main/configsystem.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 configserver.port=8080server.session.timeout=60banner.charset=UTF-8spring.jackson.date-format=yyyy-MM-dd HH:mm:ssspring.jackson.time-zone=GMT+8
3.4 編譯與運(yùn)行
gradle build -x test
cd distjava -jar demo-exec.jar

添加業(yè)務(wù)邏輯
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 testcd distjava -jar demo-exec.jar
curl http://127.0.0.1:8080/hello/getcurl http://127.0.0.1:8080/hello/set\?n\=happycurl http://127.0.0.1:8080/hello/get


評(píng)論
圖片
表情
