HyperLedger/Fabric JAVA-SDK with 1.1

HyperLedger/Fabric JAVA-SDK with 1.1

 

該項目可直接在github上訪問。 

該項目介紹如何使用fabric-sdk-java框架,基於fabric-sdk-java v1.1正式版開發,可向下兼容1.0版本。 

該項目沒有對原JAVA-SDK作修改,主要是結合HyperLedger Fabric與fabric-sdk-java中的交互方式作了我的感受更爲清晰的描述,但願可以幫助更多的人儘快熟悉fabric-sdk-java的操做流程和方式。 

java

sdk-advance

sdk-advance是基於fabric-sdk-java v1.1的服務,其主要目的是爲了更簡單的使用fabric-sdk-java,對原有的調用方法作了進一步封裝,主要提供了各類中轉對象,如智能合約、通道、排序服務、節點、用戶等等,最終將全部的中轉對象交由一箇中轉組織來負責配置,其對外提供服務的方式則交給FabricManager來掌管。 

該項目僅做爲學習分享的形式提交維護,關於生產部署方面,sdk-advance與app的交互可自行選擇採用thrift或protobuf等數據傳輸協議實現,這裏並無提供該方案的具體實現,須要本身動手解決。 

git

sdk-advance-intermediate

intermediate系列對象是該項目的主要封裝對象,間接屏蔽了真實應用層與fabric-sdk-java之間的直接交互。github

  • IntermediateOrderer
    對於Orderer,咱們須要知道所選組織名稱,同時還須要知道Orderer的服務器域名及真實訪問地址。這裏的服務器域名是指由crypto-config.yaml中進行指定。
    該對象主要提供了對Orderer的服務器域名及真實訪問地址的封裝。 

  • IntermediatePeer
    Peer是部署於本地節點的配置對象,主要包括當前指定的組織節點域名、當前指定的組織節點事件域名、當前指定的組織節點訪問地址、當前指定的組織節點事件監聽訪問地址以及當前peer是否增長Event事件處理。這裏的主要配置信息也由crypto-config.yaml中進行指定 

  • IntermediateChannel
    每個Peer所加入的Channel都有獨立的通道信息,包括名稱或通道tx文件等。IntermediateChannel中定義了通道名稱,除此以外,還針對上面兩個對象進行了調用,並最終生成了Channel對象。
    IntermediateChannel中已經開始提供對外服務了,主要依賴於Channel對象所提供的,包括最基本的Peer加入頻道的方法。
    另外,IntermediateChannel還提供了一系列基本的溯源方法,包括查詢當前頻道的鏈信息,包括鏈長度、當前最新區塊hash以及當前最新區塊的上一區塊hash、在指定頻道內根據transactionID查詢區塊、在指定頻道內根據hash查詢區塊以及在指定頻道內根據區塊高度查詢區塊等方法。 

  • IntermediateChaincodeID
    IntermediateChaincodeID對象與IntermediateChannel類似,除了包含了必須的成員參數外,也提供了一些對外服務。在IntermediateChaincodeID中主要對智能合約名稱、包含智能合約的go環境路徑、智能合約安裝路徑、智能合約版本號、指定ID的智能合約以及單個提案請求的超時時間以毫秒爲單位和事務等待時間以秒爲單位。
    同時對外提供了安裝智能合約、實例化智能合約、升級智能合約、執行智能合約以及查詢智能合約的服務。 

  • IntermediateUser
    Fabric中有用戶的概念,固然除了用戶以外,在1.1中也有組織、節點等基於CA服務的概念。IntermediateUser主要就是用來處理用戶CA信息的,目前還沒有對此類服務提供更好的封裝策略,後續更新中會逐步加入進來,以便提供更簡便的實現方案。當前的具體實現可參考IntermediateOrg。 

  • IntermediateOrg
    上述不管是排序服務、節點服務或是通道、合約等內容,都應該被同一個組織所擁有,這裏的同一個是指單體組織,而不是隻爲一個組織服務,整個基於Fabric的區塊鏈網絡至少應該爲一個組織提供服務。
    在IntermediateOrg中集合了已有的對象信息,並從中生成了組織用戶以便調用Fabric網絡中的接口數據。案例中的方案並不是最優方案,關於Fabric CA的實踐尚未完成(按照官方的Demo實現沒法跑通,若是有可以實現的朋友,歡迎提交代碼)。 

sdk-advance-manager

  • OrgManager
    組織生成器,該對象已經徹底暴露給APP所使用,能夠經過SimpleManager對象查看其主要用法。經過OrgManager對外暴露的服務生成系列Intermediate對象,並最終使用use方法肯定調用的組織具體對象來生成真正提供Fabric區塊鏈網絡服務的FabricManager
    在使用OrgManager的時候,若是有進一步開發SAAS或更深層BAAS服務的想法,建議不要直接使用SimpleManager中的方案,而是結合關係型數據庫如MySQL等解決方案,將組織中的相關數據持久化,以便後臺能夠直接獲取並調用。 

  • FabricManager
    區塊鏈網絡服務管理器FabricManager,做爲APP直接調用Fabric區塊鏈網絡的入口對象,該對象提供了Channel和ChaincodeID相關的全部接口。 

simple

simple是一個基於spring-boot的項目,在simple中主要關注SimpleManager對象的使用,該對象的使用建議根據自身業務的實際需求從新包裝上線,但直接基於此項目應用也沒什麼大問題。個人這個simple中的ip的本身申請的服務器,你們能夠隨便測試,但不保證有效期,建議自行搭建本地服務測試。spring

simple-demo

調用示例:數據庫

 1 OrgManager orgManager = new OrgManager();
 2 orgManager
 3     .init("Org1")
 4     .setUser("Admin", getCryptoConfigPath("aberic"), getChannleArtifactsPath("aberic"))
 5     .setCA("ca", "http://118.89.243.236:7054")
 6     .setPeers("Org1MSP", "org1.example.com")
 7     .addPeer("peer0.org1.example.com", "peer0.org1.example.com", "grpc://118.89.243.236:7051", "grpc://118.89.243.236:7053", true)
 8     .setOrderers("example.com")
 9     .addOrderer("orderer.example.com", "grpc://118.89.243.236:7050")
10     .setChannel("mychannel")
11     .setChainCode("test2cc", "/code", "chaincode/chaincode_example02", "1.2", 90000, 120)
12     .openTLS(true)
13     .openCATLS(false)
14     .setBlockListener(map -> {
15             logger.debug(map.get("code"));
16             logger.debug(map.get("data"));
17         })
18     .add();
19     FabricManager fabricManager = orgManager.use("Org1");
20     fabricManager.install();
21     fabricManager.instantiate(argArray);
22     fabricManager.upgrade(argArray);
23     fabricManager…
相關文章
相關標籤/搜索