簡介
在上一節,介紹了Spring Boot 整合 Fisco BCOS的最最基礎的案例(SpringBoot成功連接Fisco BCOS,并訪問其節點網路 --> 文章鏈接),
本節,咱們繼續介紹Spring Boot 整合 Fisco BCOS的最最重要的技術點:部署、呼叫區塊鏈合約(基于上一節的工程案例),
主要流程
--> 1、合約開發(省略,因為是案例演示,直接使用 Fisco BCOS自帶的 HelloWorld合約即可,默認已包含的get、set方法)
--> 2、合約編譯(需要編譯成java檔案,才能在Spring Boot工程中使用)
--> 3、Spring Boot配置合約(將編譯好的合約檔案,配置到Spring Boot工程中)
--> 4、合約呼叫的功能實作
--> 5、功能測驗
1、合約開發
Fisco BCOS 默認自帶了一些合約參考案例,我們就不用自己開發了(原因是比較懶,能不做的就要堅持不做??),直接使用HelloWorld.sol即可:

看一下該合約的代碼實作,只包含了一個變數,以及該變數的get、set方法(現階段不用考慮solidity語法,相信有過編程經驗的同學都能看得懂):

2、合約編譯
合約HelloWorld.sol想在SpringBoot中使用,需要先將合約檔案進行編譯,得到.java檔案,
編譯合約,最簡單的方式是通過 Fisco BCOS提供的Console控制臺程式進行編譯,
官方檔案:--> 請參考:第四步. 準備智能合約
比較簡單,此處不再復述,
注意:如果是自己開發的合約,需要先將合約拷貝到 ~/fisco/console/contracts/solidity目錄下,再執行編譯合約的命令,
編譯成功后,可以在/contracts/sdk/java/org/com/fisco/目錄中找到編譯后的java檔案 :

其中,HelloWorld.java 就是我們需要的檔案,
3、Spring Boot配置合約
將HelloWorld.java拷貝到SpringBoot工程中,注意:在應用中所放的位置要與我們設定的包名相同(即:編譯后存放java檔案的目錄結構):

這樣就算配置好了,接下來我們直接編碼呼叫合約就可以了~
4、合約呼叫的功能實作

BcosController完整代碼:
package com.qxc.demo_bcos.controller;
import org.com.fisco.HelloWorld;
import org.fisco.bcos.sdk.BcosSDK;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.client.protocol.response.BlockNumber;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.bind.annotation.*;
/**
* Bcos 演示案例:
* 齊行超
* 2022-01-04
*/
@RestController
public class BcosController {
private BcosSDK bcosSDK;
private Client client;
private HelloWorld helloWorld;
private void initSDK() throws Exception {
System.out.println("-----init BcosSDK:------");
@SuppressWarnings("resource")
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:fisco-config.xml");
System.out.println("-----init config ok------");
bcosSDK = context.getBean(BcosSDK.class);
System.out.println("-----init BcosSDK ok------");
// 為群組1初始化client
client = bcosSDK.getClient(Integer.valueOf(1));
System.out.println("-----init client ok------");
// 向群組1部署HelloWorld合約
CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();
helloWorld = HelloWorld.deploy(client, cryptoKeyPair);
System.out.println("-----deploy HelloWorld ok------");
}
@GetMapping("/test")
public String test() {
System.out.println("-----test------");
return "this is bcos demo";
}
@GetMapping("/block")
public String getBlockNumber() throws Exception {
System.out.println("-----getBlockNumber------");
if(bcosSDK == null){
initSDK();
}
if(bcosSDK == null || client == null){
System.out.println("-----init BcosSDK failed------");
return "-----init BcosSDK failed----";
}
BlockNumber blockNumber = client.getBlockNumber();
return "block number is : " + blockNumber.getBlockNumber().toString();
}
@GetMapping("/get")
public String getHelloworld() throws Exception {
System.out.println("-----getHelloworld------");
if(bcosSDK == null){
initSDK();
}
if(bcosSDK == null || helloWorld == null){
System.out.println("-----init BcosSDK failed------");
return "-----init BcosSDK failed----";
}
// 呼叫HelloWorld合約的get介面
String getValue = https://www.cnblogs.com/qixingchao/p/helloWorld.get();
System.out.println("-----call HelloWorld get success------:" + getValue);
return getValue;
}
@GetMapping("/set")
public String setHelloworld(@RequestParam(https://www.cnblogs.com/qixingchao/p/value="val",required = false,defaultValue = "https://www.cnblogs.com/qixingchao/p/default val")String val) throws Exception {
System.out.println("-----setHelloworld------");
if(bcosSDK == null){
initSDK();
}
if(bcosSDK == null || helloWorld == null){
System.out.println("-----init BcosSDK failed------");
return "-----init BcosSDK failed----";
}
// 呼叫HelloWorld合約的set介面
TransactionReceipt receipt = helloWorld.set(val);
System.out.println("-----call HelloWorld get success------:" + receipt.getMessage());
return "setHelloworld success";
}
}
代碼中除了合約的呼叫,還有BCOS SDK初始化等功能,對應的技術講解請在上一節中查看,本節不再復述哈--> 文章鏈接,
5、功能測驗
我這邊有兩臺電腦:
電腦1:本地的Mac電腦,沒有區塊鏈環境,只是用于SpringBoot工程的開發;
電腦2:阿里云上的CentOS服務器,配置了區塊鏈環境,合約部署、編譯、SpringBoot工程的jar包運行都是在該電腦上;
大家可根據自己的電腦環境,對比著進行功能測驗即可,
5.1、編譯SpringBoot工程,生成jar包:

5.2、發送到服務器上運行:

5.3、在mac電腦上遠程訪問服務端程式(也可在服務端通過curl自己訪問自己):
測驗get:

測驗set:

再測驗get:

測驗塊高(我這邊反復set了幾次,塊高已累計到9了?? ):

總結
至此,Spring Boot 整合 Fisco Bcos(部署、呼叫區塊鏈合約)的案例講解已結束,
Fisco Bcos 的使用還是很簡單的,如果有問題大家可以直接查詢官方技術檔案,也歡迎留言討論,咱們共同學習、共同進步,哈哈~~,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/403548.html
標籤:區塊鏈
