为了保证数据或文件的不变性,我们提供了一个应用示例程序,将文件存储在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使用示例。