Spring?Boot?整合?Fisco?Bcos的案例分析(區(qū)塊鏈)
本篇文章介紹 Spring Boot 整合 Fisco Bcos 的相關(guān)技術(shù)
簡介
FISCO BCOS是由國內(nèi)企業(yè)主導(dǎo)研發(fā)、對(duì)外開源、安全可控的企業(yè)級(jí)金融聯(lián)盟鏈底層平臺(tái),由金鏈盟開源工作組協(xié)作打造,并于2017年正式對(duì)外開源。
目前,成熟的區(qū)塊鏈的平臺(tái)不少,之所以選擇FISCO BCOS,主要是因?yàn)槲臋n細(xì)致,容易入門。
本地環(huán)境
本篇文章介紹的 Spring Boot 整合 Fisco Bcos的案例,是在阿里云服務(wù)器上部署驗(yàn)證的。
我這邊共有兩臺(tái)電腦:
電腦1:本地的Mac電腦,沒有區(qū)塊鏈環(huán)境,只是用于SpringBoot工程的開發(fā);
電腦2:阿里云上的CentOS服務(wù)器,配置了區(qū)塊鏈環(huán)境,合約部署、編譯、SpringBoot工程的jar包運(yùn)行都是在該電腦上;
大家可根據(jù)自己的電腦環(huán)境,對(duì)比該案例進(jìn)行開發(fā)即可。
主要流程:
--> 1、Fisco Bcos環(huán)境搭建與驗(yàn)證
--> 2、創(chuàng)建SpringBoot工程并配置依賴
--> 3、編寫案例代碼
--> 4、生成jar包、部署服務(wù)器驗(yàn)證
1、Fisco Bcos環(huán)境搭建與驗(yàn)證
Fisco Bcos環(huán)境搭建參考的是官方的文檔:
搭建第一個(gè)區(qū)塊鏈網(wǎng)絡(luò)
我這邊測(cè)試服務(wù)器的操作系統(tǒng)是CentOS,如果是其他操作系統(tǒng),也是參照該文檔進(jìn)行配置,流程是類似的。
詳細(xì)流程,大家參照文檔進(jìn)行配置就行了,這里主要說下關(guān)鍵的細(xì)節(jié):
1.1、搭建單群組4節(jié)點(diǎn)聯(lián)盟鏈:
我這邊使用的是國密版本命令:
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 -g -G
主要原因:
我這邊使用的Fisco Bcos SDK版本是2.8.0,加載證書時(shí)默認(rèn)會(huì)加載國密證書(應(yīng)該有加載證書類型的選項(xiàng)配置,目前暫未找到相關(guān)API)。
如果使用的是非國密版本命令,在/fisco/node/127.0.0.1/sdk/目錄下不會(huì)生成國密證書,使用該SDK就會(huì)報(bào)錯(cuò)。
1.2、檢查證書
成功啟動(dòng)所有節(jié)點(diǎn)后,在/fisco/node/127.0.0.1/sdk/目錄下驗(yàn)證所有證書是否存在(gm代表國密),如下圖:
1.3、使用證書驗(yàn)證節(jié)點(diǎn)正確性
啟動(dòng)節(jié)點(diǎn)后,我們可以使用Fisco Bcos提供的本地控制臺(tái)程序console對(duì)節(jié)點(diǎn)進(jìn)行驗(yàn)證。
大家參照文檔,先下載、配置控制臺(tái)程序。
注意:為控制臺(tái)程序配置節(jié)點(diǎn)證書(即:將/fisco/node/127.0.0.1/sdk/下的證書全部復(fù)制到控制臺(tái)程序的 /console/conf/目錄下)
啟動(dòng)控制臺(tái),測(cè)試節(jié)點(diǎn),例如:獲取區(qū)塊鏈數(shù)據(jù)高度:getBlockNumber:
如果能正常部署合約,且能獲得數(shù)據(jù)高度,則區(qū)塊鏈環(huán)境沒什么問題,如下圖:
2、創(chuàng)建SpringBoot工程并配置依賴
服務(wù)端區(qū)塊鏈環(huán)境已完成驗(yàn)證,接下來,我們創(chuàng)建SpringBoot工程,并集成Fisco Bcos Java版SDK。
Java SDK 文檔
2.1、創(chuàng)建SpringBoot工程:
僅勾選Spring Web即可:
2.2、配置pom.xml
注意:SpringBoot版本不宜過高(已與官方技術(shù)人員確認(rèn)),我這邊試過2.6.2+,Demo案例調(diào)用節(jié)點(diǎn)時(shí)會(huì)異常閃退,當(dāng)把版本降低為2.4.2就正常了:
配置Fisco Bcos Java版SDK依賴:
pom.xml完整代碼:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.qxc</groupId> <artifactId>demo_bcos</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo_bcos</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.fisco-bcos.java-sdk</groupId> <artifactId>fisco-bcos-java-sdk</artifactId> <version>2.8.0</version> <!--排除這個(gè)slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
3、編寫案例代碼
3.1、配置Fisco Bcos:
Java SDK » 配置說明
為了簡單,本案例將Fisco Bcos的參數(shù)通過xml統(tǒng)一配置,并在代碼中自動(dòng)讀取。
在/src/main/resources/目錄下創(chuàng)建文件fisco-config.xml:
fisco-config.xml完整代碼:
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> <bean id="defaultConfigProperty" class="org.fisco.bcos.sdk.config.model.ConfigProperty"> <property name="cryptoMaterial"> <map> <entry key="certPath" value="conf" /> </map> </property> <property name="network"> <map> <entry key="peers"> <list> <value>127.0.0.1:20200</value> <value>127.0.0.1:20201</value> </list> </entry> </map> </property> <property name="account"> <map> <entry key="keyStoreDir" value="account" /> <entry key="accountAddress" value="" /> <entry key="accountFileFormat" value="pem" /> <entry key="password" value="" /> <entry key="accountFilePath" value="" /> </map> </property> <property name="threadPool"> <map> <entry key="channelProcessorThreadSize" value="16" /> <entry key="receiptProcessorThreadSize" value="16" /> <entry key="maxBlockingQueueSize" value="102400" /> </map> </property> </bean> <bean id="defaultConfigOption" class="org.fisco.bcos.sdk.config.ConfigOption"> <constructor-arg name="configProperty"> <ref bean="defaultConfigProperty"/> </constructor-arg> </bean> <bean id="bcosSDK" class="org.fisco.bcos.sdk.BcosSDK"> <constructor-arg name="configOption"> <ref bean="defaultConfigOption"/> </constructor-arg> </bean> </beans>
3.2、配置節(jié)點(diǎn)證書:
把區(qū)塊鏈節(jié)點(diǎn)下的證書拷貝到/src/main/resources/conf/目錄下(conf目錄為fisco-config.xml配置的證書路徑):
3.3、編寫controller
BcosController完整代碼:
package com.qxc.demo_bcos.controller; import org.fisco.bcos.sdk.BcosSDK; import org.fisco.bcos.sdk.client.Client; import org.fisco.bcos.sdk.client.protocol.response.BlockNumber; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class BcosController { @GetMapping("/test") public String test(){ System.out.println("-----test------"); return "this is bcos demo"; } @GetMapping("/block") public String getBlockNumber(){ System.out.println("-----getBlockNumber getBlockNumber------"); @SuppressWarnings("resource") ApplicationContext context = new ClassPathXmlApplicationContext("classpath:fisco-config.xml"); System.out.println("-----getBlockNumber ClassPathXmlApplicationContext ok------"); BcosSDK bcosSDK = context.getBean(BcosSDK.class); System.out.println("-----getBlockNumber BcosSDK ok------"); Client client = bcosSDK.getClient(Integer.valueOf(1)); System.out.println("-----getBlockNumber client ok------"); BlockNumber blockNumber = client.getBlockNumber(); return "getBlockNumber: "+blockNumber.getBlockNumber().toString(); // return ""; } }
3.4、DemoBcosApplication默認(rèn)不做修改
3.5、application.properties什么也沒配置
為了簡單,端口我這邊直接使用8080,主要是個(gè)人比較懶,什么都懶得配置了,O(∩_∩)O~
4、生成jar包、部署服務(wù)器驗(yàn)證
4.1、本地先跑一把
SpringBoot的開發(fā)是在我本地的Mac電腦上進(jìn)行的,為了能穩(wěn)妥的部署到遠(yuǎn)程CentOS服務(wù)器上,
先在本地跑一把,看看工程編譯運(yùn)行是否正常(此時(shí)不用測(cè)試區(qū)塊鏈功能,因?yàn)槲冶镜夭]有區(qū)塊鏈環(huán)境):
沒問題,完美。
4.2、打包jar
4.3、把jar包發(fā)送到遠(yuǎn)程服務(wù)器上,并運(yùn)行:
案例程序已在服務(wù)器端跑起來了,回到本地mac電腦,遠(yuǎn)程連服務(wù)器試一下吧(IP就不展示給大家看了哈):
至此,使用Spring Boot 整合 Fisco Bcos 最最基本的案例已完成。
總結(jié)
Fisco Bcos 的使用還是很簡單的,如果有問題大家可以直接查詢官方技術(shù)文檔,也歡迎留言討論,咱們共同學(xué)習(xí)、共同進(jìn)步,哈哈~~。
下一節(jié):Spring Boot 整合 Fisco Bcos(部署、調(diào)用區(qū)塊鏈合約)
到此這篇關(guān)于Spring Boot 整合 Fisco Bcos(區(qū)塊鏈)的文章就介紹到這了,更多相關(guān)Spring Boot 整合 Fisco Bcos區(qū)塊鏈內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決OkHttp接收gzip壓縮數(shù)據(jù)返回亂碼問題
這篇文章主要介紹了解決OkHttp接收gzip壓縮數(shù)據(jù)返回亂碼問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06java實(shí)現(xiàn)簡單銀行ATM系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單銀行ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05解決mac最新版intellij idea崩潰閃退crash的問題
這篇文章主要介紹了解決mac最新版intellij idea崩潰閃退crash的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Java 如何將網(wǎng)絡(luò)資源url轉(zhuǎn)化為File文件
這篇文章主要介紹了Java 如何將網(wǎng)絡(luò)資源url轉(zhuǎn)化為File文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java實(shí)現(xiàn)斷點(diǎn)下載功能的示例代碼
當(dāng)下載一個(gè)很大的文件時(shí),如果下載到一半暫停,如果繼續(xù)下載呢?斷點(diǎn)下載就是解決這個(gè)問題的。本文將用Java語言實(shí)現(xiàn)斷點(diǎn)下載,需要的可以參考一下2022-05-05SpringMVC實(shí)現(xiàn)文件上傳和下載功能
這篇文章主要為大家詳細(xì)介紹了SpringMVC實(shí)現(xiàn)文件上傳和下載功能 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08SpringBoot防止大量請(qǐng)求攻擊的實(shí)現(xiàn)
在有些特定的時(shí)候需要加上IP訪問時(shí)間限制,防止一個(gè)IP多次訪問請(qǐng)求,本文主要介紹了SpringBoot防止大量請(qǐng)求攻擊的實(shí)現(xiàn),感興趣的可以了解一下2021-11-11mybatis自定義類型處理器TypehHandler示例詳解
我們?cè)趯憁apper映射器的配置文件時(shí),不經(jīng)意間已經(jīng)用到類型轉(zhuǎn)換,不過是mybatis幫我們完成的,下面這篇文章主要給大家介紹了關(guān)于mybatis自定義類型處理器TypehHandler的相關(guān)資料,需要的朋友可以參考下2018-09-09