HyperLedger/Fabric SDK Docker Image
該項目在github上的地址是:https://github.com/aberic/fabric-sdk-container (感謝Star)。
這是一個基於fabric-sdk-java的項目,該項目的主要目的是簡化HyperLedger/Fabric開發人員在SDK應用層上的工作流程,使得開發和部署更加簡單。
該項目使用方便,只需要你的服務器上部署有Docker及docker compose環境即可,通過docker-compose的啟動命令啟動YAML編排文件即可快速上手使用。
由於日志管理和性能調試方面的工作還未完成,目前該項目僅為1.0-alpha版本,后續的開發中將會着重處理日志及可配置性能方面的內容,如果這能讓你感興趣,歡迎star。
開發環境
- IntelliJ IDEA
- Maven
- JDK-1.8
- spring-boot
- Docker
- docker compose
版本說明
0.x系列的版本主要是非Docker應用方面的項目,即相互交流的源碼層項目。
1.x及以上系列的版本均Docker項目,幫助開發人員快速部署SDK應用,減少開發環節,從而實現業務的快速落地。
目前主要版本如下列表所示:
v0.1:無數據庫版,適合輕量級的Fabric平台應用。
v0.2:含關系型數據庫版,適合單服務管理多Fabric網絡。
v1.0-alpha:提供Docker容器服務,方便SDK快速部署。
使用sdk-container
1、確定Linux內核在3.10及以上。
2、在待部署SDK服務器上安裝最新版Docker及docker compose環境。
3、執行docker pull aberic/fabric-sdk下載鏡像。
4、在docker-sdk.yaml文件中配置好Fabric網絡中所期望連接的排序服務及節點服務參數,這兩類服務各允許設置一台,后續的版本中會增加使用SDK多服務網絡方案。
5、執行docker-compose -f docker-sdk.yaml up啟動SDK鏡像服務,如果不需要觀察日志,則在命令最后追加-d即可。
6、服務啟動完成后,參考下面的API介紹以便更快投入使用。
API入口文檔
| Method | REST API | Description |
|---|---|---|
| POST | /sdk/chaincode | 執行、查詢 |
| POST | /sdk/trace | 在指定頻道內根據transactionID查詢區塊、在指定頻道內根據hash查詢區塊、在指定頻道內根據區塊高度查詢區塊以及查詢當前頻道的鏈信息,包括鏈長度、當前最新區塊hash以及當前最新區塊的上一區塊hash |
| POST | /sdk/org/set | 設置組織信息 |
| POST | /sdk/orderer/set | 設置排序服務器信息 |
| POST | /sdk/peer/set | 設置節點服務器信息 |
該版本目前為即上即用的版本,僅提供單排序服務及單節點服務,因此API文檔中未提供安裝、實例化及升級操作,但在后續更新中,會支持安裝、實例化及升級的功能。如果有PAAS服務的需要,可以自行參考v0.2中的方案來解決。
API方法示例
/sdk/chaincode
執行合約
{
"intent": "invoke",
"array": [
"set",
"A",
"0"
]
}
查詢合約
{
"intent": "query",
"array": [
"get"
]
}
intent是指對智能合約進行操作的意圖。
array是調用合約傳入的參數,在用go編寫智能合約的時候,智能合約所接收的參數為一個字符串數組,其中字符串數組的第一個參數是智能合約的方法名。這里的array所傳入的參數就是智能合約所接收的數組參數。
/sdk/trace
在指定頻道內根據transactionID查詢區塊
{
"intent": "queryBlockByTransactionID",
"traceId": "08b5db91c7723cb61651a4af1034633a2833031a1cdb4415df0d8f6727020a4f"
}
在指定頻道內根據hash查詢區塊
{
"intent": "queryBlockByHash",
"traceId": "8f63d99744752a89a49fcee560a43c271b7f12e37dfaa3489da028b610943595"
}
在指定頻道內根據區塊高度查詢區塊
{
"intent": "queryBlockByNumber",
"traceId": "9"
}
查詢當前頻道的鏈信息(包括鏈長度、當前最新區塊hash以及當前最新區塊的上一區塊hash)
{
"intent": "queryBlockchainInfo"
}
/sdk/org/set
{ "id": 1, "caLocation": "http://118.89.243.236:7054", "caName": "ca", "caTls": false, "chaincodeName": "test2cc", "chaincodePath": "chaincode/chaincode_example02", "chaincodeSource": "/code", "chaincodeVersion": "1.2", "channelArtifactsDir": "/home/jar/channel-artifacts", "channelName": "mychannel", "cryptoConfigDir": "/home/jar/crypto-config", "invokeWaitTime": 120, "ordererDomainName": "example.com", "orgDomainName": "org1.example.com", "orgMSPID": "Org1MSP", "orgName": "Org1", "proposalWaitTime": 90000, "tls": true, "username": "Admin" }
該方法是在sdk容器啟動后根據實際需求進行調用,如YAML中配置的變量寫錯,可以通過該方法重新設置組織信息
/sdk/orderer/set
{ "id": 1, "orgId": 1, "name": "orderer.example.com", "location": "grpc://118.89.243.236:7050" }
該方法是在sdk容器啟動后根據實際需求進行調用,如YAML中配置的變量寫錯,可以通過該方法重新設置排序服務信息
/sdk/peer/set
{ "id": 1, "orgId": 1, "peerName": "peer0.org1.example.com", "peerEventHubName": "peer0.org1.example.com", "peerLocation": "grpc://118.89.243.236:7051", "peerEventHubLocation": "grpc://118.89.243.236:7053", "isEventListener": true }
該方法是在sdk容器啟動后根據實際需求進行調用,如YAML中配置的變量寫錯,可以通過該方法重新設置節點服務信息
