<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          應(yīng)用開(kāi)發(fā)組件學(xué)習(xí)筆記:使用腳手架快速搭建 Java DApp

          共 5319字,需瀏覽 11分鐘

           ·

          2021-04-30 05:19

          本文對(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)介


          一個(gè)典型的區(qū)塊鏈應(yīng)用項(xiàng)目后端,可以分為三塊。業(yè)務(wù)邏輯部分由用戶(hù)自行定義;代碼部分包含了智能合約訪問(wèn)的功能,例如函數(shù)入?yún)⒌姆庋b、交易的構(gòu)造和推送、鏈的訪問(wèn)等;資源部分則包含了合約、ABI、BIN。如下圖所示:

          應(yīng)用開(kāi)發(fā)腳手架組件允許用戶(hù)在寫(xiě)好智能合約的基礎(chǔ)上,將智能合約轉(zhuǎn)換為一個(gè)SpringBoot項(xiàng)目,這個(gè)項(xiàng)目已經(jīng)涵蓋了上圖中藍(lán)色和綠色的部分,用戶(hù)只需要補(bǔ)充自己的業(yè)務(wù)邏輯即可,不必再去關(guān)心區(qū)塊鏈訪問(wèn)的細(xì)節(jié),大大縮短了開(kāi)發(fā)時(shí)間。

          腳手架組件關(guān)鍵特性


          一鍵生成

          用戶(hù)在開(kāi)發(fā)完智能合約后,可以將智能合約直接拖入腳手架,只要輕量配置,就可以生成相關(guān)項(xiàng)目。并且,生成的項(xiàng)目已經(jīng)包含了智能合約訪問(wèn)的必要邏輯。此外,該項(xiàng)目是SpringBoot項(xiàng)目,相關(guān)的配置、服務(wù)均已納入到spring容器當(dāng)中。

          高度封裝

          腳手架在生成項(xiàng)目時(shí),會(huì)對(duì)合約調(diào)用邏輯做高度的封裝,用戶(hù)可以像使用ORM框架操作數(shù)據(jù)庫(kù)一樣地操作智能合約。

          在生成的項(xiàng)目中,每個(gè)合約都被單獨(dú)封裝到一個(gè)類(lèi)中,每個(gè)函數(shù)對(duì)應(yīng)合約的一個(gè)函數(shù)。其輸入是java類(lèi)型的輸入,輸出也是已解析的輸出。此外,對(duì)于函數(shù)的輸入?yún)?shù),我們也已生成了相關(guān)的模型類(lèi),方便用戶(hù)使用。

          輕量配置

          用戶(hù)在將智能合約拖入腳手架后,只需做少量的涉及項(xiàng)目名稱(chēng)、組名、合約選擇器等內(nèi)容的配置即可。而且這些配置依據(jù)“契約優(yōu)于配置”的原則設(shè)置了默認(rèn)值,用戶(hù)可根據(jù)自己的實(shí)際需要進(jìn)行調(diào)整。

          合約可選

          在開(kāi)發(fā)具有一定復(fù)雜度的智能合約時(shí),出于易升級(jí)、松耦合的目的,開(kāi)發(fā)者通常會(huì)采用一定的手段將合約功能解耦,拆散到不同的合約中去。所以,在一組智能合約中,真正供外部訪問(wèn)的合約只占少數(shù),多數(shù)合約都僅作為功能性合約來(lái)支撐整體業(yè)務(wù)。

          而且,在后續(xù)應(yīng)用開(kāi)發(fā)時(shí),真正需要開(kāi)發(fā)的服務(wù)類(lèi)也占少數(shù)。為了讓項(xiàng)目聚焦在所需要的合約上,開(kāi)發(fā)者可配置合約選擇器,即指定所需要處理的合約,繼而腳手架只會(huì)為這些合約生成相應(yīng)的代碼,避免了冗余代碼。

            快速實(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)目


          確保環(huán)境適配:

          依賴(lài)軟件
          說(shuō)明
          備注
          Java
          >= JDK[1.8]
          最好用JDK 1.8
          Solidity
          0.4.25

          Git
          下載安裝包需要使用Git

          Gradle
          大于6 小于7
          使用gradle7會(huì)報(bào)錯(cuò)

          編譯:
          gradle build -x test


          2.3 通過(guò)腳手架生成項(xiàng)目

          進(jìn)入 tools文件夾:
          ?
          cd tools


          2.3.1 合約配置


          本示例中,使用默認(rèn)的 HelloWorld 合約。實(shí)際使用過(guò)程中,可刪除contracts 目錄下的默認(rèn)合約,并將自己的業(yè)務(wù)合約拷貝到該目錄下。

          2.3.2 項(xiàng)目配置


          可以在config.ini中做項(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

          運(yùn)行成功后,tools 目錄下會(huì)出現(xiàn)demo文件夾,這是自動(dòng)生成的 SpringBoot 項(xiàng)目。


            準(zhǔn)備工作


          假定我們的區(qū)塊鏈節(jié)點(diǎn)已經(jīng)啟動(dòng)了(搭鏈可見(jiàn):《FISCO BCOS 開(kāi)發(fā)環(huán)境節(jié)點(diǎn)搭建全攻略)。


          在進(jìn)行具體業(yè)務(wù)邏輯開(kāi)發(fā)前,我們還需要做如下幾項(xiàng)工作:

          • 部署合約

          • 證書(shū)拷貝

          • 補(bǔ)充配置文件


          3.1 通過(guò)WeBASE-Front部署合約


          (1)啟動(dòng) WeBASE-Front

          此處我們通過(guò) WeBASE-Front 來(lái)進(jìn)行部署。
          簡(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

          通過(guò)如下命令啟動(dòng):
          ?
          bash start.sh


          然后訪問(wèn):
          http://localhost:5002/WeBASE-Front/#/contract

          (2)創(chuàng)建測(cè)試賬戶(hù)

          首先我們創(chuàng)建一個(gè)測(cè)試用戶(hù)。
          合約管理 > 測(cè)試用戶(hù) > 新增用戶(hù)


          然后將其信息導(dǎo)出。


          將下載的內(nèi)容打開(kāi),把私鑰復(fù)制出來(lái):


          (3)錄入合約

          打開(kāi)「合約管理 > 合約 IDE」,將剛才復(fù)制出來(lái)的合約代碼通過(guò)合約IDE添加進(jìn)來(lái):


          (4)保存、編譯、部署

          然后我們會(huì)得到合約地址(contractAddress),我們把它復(fù)制出來(lái)。
          現(xiàn)在我們有了一個(gè)鏈上的HelloWorld合約,并拿到了一個(gè)賬戶(hù)私鑰和一個(gè)合約地址。

          3.2 復(fù)制證書(shū)文件到Conf目錄下


          conf目錄位置:
          /src/main/resources/conf

          通過(guò)cp命令復(fù)制:

          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

          進(jìn)入dist目錄運(yùn)行程序:

          cd distjava -jar demo-exec.jar

          運(yùn)行成功會(huì)顯示程序順利啟動(dòng):


            添加業(yè)務(wù)邏輯


          src/main/java/org/example/demo/service目錄下新建HelloController.java文件。

          內(nèi)容為:
          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;
          @RestController@RequestMapping("hello")public class HelloController {
          @Autowired private HelloWorldService service; @GetMapping("set") public String set(@RequestParam("n") String n) throws Exception{ HelloWorldSetInputBO input = new HelloWorldSetInputBO(n); return service.set(input).getTransactionReceipt().getTransactionHash(); }
          @GetMapping("get") public String get() throws Exception{ return service.get().getValues(); }}

          這個(gè)文件的作用是創(chuàng)建兩個(gè)url,一個(gè)是/hello/set,設(shè)置name的值,一個(gè)是/hello/get,拿到name的值。

          我們重新編譯項(xiàng)目:
          gradle build -x test

          然后我們重新運(yùn)行項(xiàng)目:

          cd distjava -jar demo-exec.jar

          再打開(kāi)另一個(gè)終端(或直接打開(kāi)瀏覽器),通過(guò) curl 命令即可通過(guò)url與智能合約進(jìn)行交互:

          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



          歡迎更多開(kāi)發(fā)者們體驗(yàn)并向我們反饋,對(duì)話(huà)框回復(fù)【小助手】可進(jìn)技術(shù)交流群。

          瀏覽 153
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  三级在线观看网站 | 影音先锋日韩精品 | 欧美成人A片高清免费看 | 黄色级级级级级级级级级级级级 | 亚洲视频第1页 |