集成OSS应用示例

为了保证数据或文件的不变性,我们提供了一个应用示例程序,将文件存储在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-democonnection-profile.yaml的获取方法可以参考Go SDK使用示例

部署链码

将链码文件 chaincode/sacc.out 上传到阿里云 BaaS,并实例化。具体的操作方法可以参考部署链码

运行示例程序

首先,执行如下命令编译出两个可执行文件pushfetch

  1. ./build.sh
  • push 读取本地文件并计算文件的哈希值,通过调用Fabric链码将哈希值记录在账本中,最后将文件上传到OSS。
  • fetch 读取文件哈希值,通过查询Fabric链码确认哈希值存在于账本中,然后从OSS下载对应的文件到本地。

push and fetch 依赖一些环境变量,需预先进行设置:

  1. export baas_user="user" # 在阿里巴巴 BaaS 控制台中创建的用户名。
  2. export baas_secret="password" # 用户的密码。
  3. export baas_channel="first-channel" # 通道名
  4. export oss_ak="ak" # 用于上传至OSS的AK
  5. export oss_ak_secret="secret" # 用于上传至OSS的AK密码
  6. export oss_endpoint="oss-cn-hangzhou.aliyuncs.com" # OSS的访问域名
  7. export oss_bucket="new-bucket" # 之前创建的OSS存储空间名

准备完成,开始上传文件:

  1. $ ./push README.md
  2. Going to enroll user
  3. [fabsdk/fab] 2019/02/19 07:39:26 UTC - lib.(*Client).initHTTPClient -> INFO TLS Enabled
  4. [fabsdk/fab] 2019/02/19 07:39:26 UTC - util.BCCSPKeyRequestGenerate -> INFO generating key: &{A:ecdsa S:256}
  5. [fabsdk/fab] 2019/02/19 07:39:26 UTC - log.print -> INFO encoded CSR
  6. Success enroll user: appuser1
  7. ======================================================
  8. [-] Uploading README.md to Alibaba Cloud OSS, MD5: 9218e8b37fabdc50bb6eca8597ffce22
  9. [-] Upload MD5 to chaincode...
  10. [-] Done.

命令行输出表示文件的哈希值为:9218e8b37fabdc50bb6eca8597ffce22,接下来示例程序将使用该哈希值下载文件:

  1. $ ./fetch 9218e8b37fabdc50bb6eca8597ffce22
  2. User appuser1 already enrolled, skip enrollment.
  3. ======================================================
  4. [-] Fetch file info from chaincode...
  5. Chaincode status: 200
  6. Payload: baas-sdk-test1.9218e8b37fabdc50bb6eca8597ffce22
  7. [-] Downloading to 9218e8b37fabdc50bb6eca8597ffce22
  8. [-] Done.

新下载的文件名为:9218e8b37fabdc50bb6eca8597ffce22, 并且我们可验证文件的内容和上传的文件完全一致。

更多关于Hyperledger Fabric Go SDK的使用方法可以参考Go SDK使用示例