【區塊鏈】官方hyperledger fabric java sdk 修改整合版(更好用,更快,更明白)

官方hyperledger fabric java sdk 修改整合版

這個版本根據官方hyperledger/fabric-sdk-java項目修改而來。

項目源碼地址:

github

準備工作

本文只關注java sdk,fabric服務器部分只大概講一下。

在java sdk跑起來之前,首先要把fabric服務器跑起來。
跑起來之後,需要把orderer的證書複製到java服務器這邊用來調用使用。
除了invoke不用一定是管理員權限外,其他對鏈碼的操作都需要是管理員權限。
拿過來證書後,首先需要註冊一下,或者已經通過註冊了的話可以把密碼拷貝過來供enroll使用
(我自己搭建測試節點環境是參考了這篇博客,很詳細 超級賬本HyperLedger:Fabric的全手動、多服務器部署教程

enroll user這個步驟是調用其他接口時用來驗證身份的,既可以通過ca服務器把賬號密碼傳過去直接enroll,也可以讀取已經enroll的本地用戶證書使用

    // 從本地直接讀取用戶證書使用
    private SampleUser setupPeerAdmin(SampleOrg sampleOrg) throws Exception {
        // peerAdmin
        String domainName = sampleOrg.getDomainName();
        String orgName = sampleOrg.getName();
        File adminKeystore = Paths.get(FAB_CONFIG.getChannelPath(), "crypto-config/peerOrganizations/",
                domainName, format("/users/Admin@%s/msp/keystore", domainName)).toFile();
        File adminCert = Paths.get(FAB_CONFIG.getChannelPath(), "crypto-config/peerOrganizations/", domainName,
                format("/users/Admin@%s/msp/signcerts/Admin@%s-cert.pem", domainName, domainName)).toFile();
        SampleUser peerOrgAdmin = sampleStore.getMember(orgName + "Admin", orgName, sampleOrg.getMSPID(),
                Util.findFileSk(adminKeystore),
                adminCert);
        return peerOrgAdmin;
    }

功能劃分

sdk的功能在com.routz.fabric_java_sdk_integration.FabTest類裏都有測試用例,所有功能提供如下:
用戶:
register user
enroll user

通道:
construct channel

鏈碼:
install chaincode
check install status
instantied chaincode proposal
query instantied chaincode proposal status
install upgrade proposal
upgrade chaincode
invoke chaincode
query chaincode

配置

用戶密碼,通道名稱, 鏈碼路徑等配置

com.routz.fabric_java_sdk_integration.util.FabricUtils裏面配置的鏈碼路徑和版本

    private static final String FUNCTION_NAME = "checkin";
    private static final String CHAIN_CODE_NAME = "checkin_go";
    private static final String CHAIN_CODE_PATH = "github.com/chickin_1_13";
    private static final String CHAIN_CODE_VERSION = "1.21";
    private static final String CHAIN_CODE_FILEPATH = "sdkintegration/gocc/chicken";
    private static final TransactionRequest.Type CHAIN_CODE_LANG = TransactionRequest.Type.GO_LANG;

com.routz.fabric_java_sdk_integration.util.FabConfig裏面配置用戶名密碼,通道名稱,組織名稱,是否使用tls等屬性

    private static final String ORG_NAME = "peerOrg1";
    private static final String CHANNEL_NAME = "foo";
    private static final String testUser1 = "user1";
    private static final String adminPass = "adminpw";
    private static final String sercet1 = "MzoRLMuNWNnY";

    private static final boolean runningFabricCATLS = false;
    private static final boolean runningFabricTLS = false;

由於配置文件比較多,我用絕對路徑把證書等各種文件放在了/var/fabj/src/test/fixture路徑下
上面說的一些配置只是爲了簡化寫到了代碼裏,可以根據實際情況修改

組織節點配置

src\main\resources\fabric_config.yaml裏配置有組織節點的信息配置,自己的節點按如下格式配置,啓動時就會把信息讀取進來

    orgs:
      peerOrg1:
        name: peerOrg1
        mspid: Org1MSP
        domainName: org1.example.com
        peerLocations:
          peer0.org1.example.com: grpc://192.168.1.40:7051
          peer1.org1.example.com: grpc://192.168.1.41:7056
        ordererLocations:
          orderer.example.com: grpc://192.168.1.40:7050
        caName: ca0
        caLocation: http://192.168.1.43:7054
      peerOrg2:
        name: peerOrg2
        mspid: Org2MSP
        domainName: org2.example.com
        peerLocations:
          peer0.org2.example.com: grpc://192.168.1.40:8051
        ordererLocations:
          orderer.example.com: grpc://192.168.1.40:7050
        caLocation: http://192.168.1.43:8054

生成通道

官方自帶通道foo和bar的tx文件,如果要自定義創建通道時,要先在服務器上生成*.tx文件,拷貝到項目路徑下,將路徑作爲參數調用
參考sdk

生成*.tx文件的命令:

cd /項目路徑/src/test/fixture/sdkintegration/e2e-2Orgs/v1.3
configtxgen --configPath . -outputCreateChannelTx 通道名.tx -profile TwoOrgsChannel_v13 -channelID 通道名

這樣就在目錄下生成通道名.tx文件了

示例鏈碼

在下有個模擬物聯網設備打卡簽到的簡單鏈碼,我爲什麼這樣寫呢?可以參考我寫的一篇博客hyperledger fabric java sdk 多線程併發調用時遇到 TransactionEventException的解決辦法

我對 fabric 瞭解還不夠,深感自己學識淺薄,這個sdk還有很大優化餘地,有任何問題都可以提出來,我會盡力與你探討和解決,區塊鏈行業還算起步階段,各種資料,社區都還不足,希望能與你共同呵護行業的發展~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章