為了保證數據或文件的不變性,我們提供了一個應用示例程序,將文件存儲在OSS上,并在Hyperledger Fabric上記錄文件的哈希值。
該示例程序基于Hyperledger Fabric Go SDK,運行示例程序前請確保Go開發環境已經正確配置。具體配置方法可以參考Go SDK使用示例。
創建OSS存儲空間
示例程序會把文件上傳到 OSS 存儲空間中,所以在運行示例程序前需要先創建存儲空間。 假設存儲空間的名稱為“new-bucket”,稍后我們將使用它。
下載示例程序
將示例程序 go-oss-demo-1.4.5 下載到本地目錄: $GOPATH/src
, 并解壓縮。將配置文件 connection-profile.yaml
復制到目錄下 $GOPATH/src/go-oss-demo
。 connection-profile.yaml
的獲取方法可以參考Go SDK使用示例。
部署鏈碼
將鏈碼文件 chaincode/sacc.out
上傳到阿里云 BaaS,并實例化。具體的操作方法可以參考部署鏈碼。
運行示例程序
首先,執行如下命令編譯出兩個可執行文件push
和fetch
。
./build.sh
push
讀取本地文件并計算文件的哈希值,通過調用Fabric鏈碼將哈希值記錄在賬本中,最后將文件上傳到OSS。fetch
讀取文件哈希值,通過查詢Fabric鏈碼確認哈希值存在于賬本中,然后從OSS下載對應的文件到本地。
push
and fetch
依賴一些環境變量,需預先進行設置:
export baas_user="user" # 在阿里巴巴 BaaS 控制臺中創建的用戶名。
export baas_secret="password" # 用戶的密碼。
export baas_channel="first-channel" # 通道名
export oss_ak="ak" # 用于上傳至OSS的AK
export oss_ak_secret="secret" # 用于上傳至OSS的AK密碼
export oss_endpoint="oss-cn-hangzhou.aliyuncs.com" # OSS的訪問域名
export oss_bucket="new-bucket" # 之前創建的OSS存儲空間名
準備完成,開始上傳文件:
$ ./push README.md
Going to enroll user
[fabsdk/fab] 2019/02/19 07:39:26 UTC - lib.(*Client).initHTTPClient -> INFO TLS Enabled
[fabsdk/fab] 2019/02/19 07:39:26 UTC - util.BCCSPKeyRequestGenerate -> INFO generating key: &{A:ecdsa S:256}
[fabsdk/fab] 2019/02/19 07:39:26 UTC - log.print -> INFO encoded CSR
Success enroll user: appuser1
======================================================
[-] Uploading README.md to Alibaba Cloud OSS, MD5: 9218e8b37fabdc50bb6eca8597ffce22
[-] Upload MD5 to chaincode...
[-] Done.
命令行輸出表示文件的哈希值為:9218e8b37fabdc50bb6eca8597ffce22
,接下來示例程序將使用該哈希值下載文件:
$ ./fetch 9218e8b37fabdc50bb6eca8597ffce22
User appuser1 already enrolled, skip enrollment.
======================================================
[-] Fetch file info from chaincode...
Chaincode status: 200
Payload: baas-sdk-test1.9218e8b37fabdc50bb6eca8597ffce22
[-] Downloading to 9218e8b37fabdc50bb6eca8597ffce22
[-] Done.
新下載的文件名為:9218e8b37fabdc50bb6eca8597ffce22
,并且我們可驗證文件的內容和上傳的文件完全一致。
更多關于Hyperledger Fabric Go SDK的使用方法可以參考Go SDK使用示例。