区块链服务 BCS区块链服务 BCS

更新时间:2021/08/24 GMT+08:00
分享

同态加密交易验证Demo

介绍同态加密交易验证Demo的使用方法。

只用于场景体验,不用于实际应用。

  1. 订购BCS服务。

    版本为3.X.X(对应社区Hyperledger Fabric 1.4.0版本),安全机制选择ECDSA。

  2. 安装并实例化链代码。

    安装示例链代码:transaction.zipIDChaincode.zip,并实例化链代码。

    • 为了方便后续操作,建议安装的链代码名称固定为transactionidchaincode
    • 示例链代码中提供交易的脚本中已将链代码版本固定为1.0,安装链代码时,链代码版本号必须为1.0。
    • 如果自己开发链代码,可以使用Chaincode库接口文件: api_ahe_cc.tar.gz

  3. 在“服务管理”界面,在服务卡片中,单击“获取客户端配置”。
  4. 勾选“SDK文件”,参数请与如下内容完全保持一致:

    • 链代码名称:transaction
    • 证书存放路径:/home/paas
    • 通道名称:testchan
    • 组织&Peer节点:org11

    勾选“共识节点证书”。

    勾选“Peer节点证书”,指定节点组织保持默认值,勾选“管理员证书”。

    单击“下载”,下载SDK配置文件、共识节点证书和Peer节点证书。

  5. 在本地服务器安装golang。

    1. 下载安装包:go1.11.5.linux-amd64.tar.gz,上传到本地服务器“/usr/local”目录下并解压。
      tar -zxvf go1.11.5.linux-amd64.tar.gz

    2. 将以下环境变量配置到“/etc/profile”文件中。
      export GOROOT=/usr/local/go
      export PATH=$PATH:$GOROOT/bin
      export GOPATH=/opt/gopath
      export PAAS_CRYPTO_PATH=/opt/hao
      export PAAS_SSL_ROOT=/opt/hao
    3. 执行如下命令使环境变量生效。
      source /etc/profile

  6. 编译appdemo。

    1. 进入“/opt/gopath”目录下(如果没有gopath目录,请手动创建),上传sdk库(sdk1.11.5.tar.gz)、同态加密库(ahelib1.11.5.tar.gz)和openssl库(openssl.tar.gz),均解压至当前目录,命令:
      tar -zxvf xxx

    2. 进入“/opt/gopath/src/ahe/PSW/deps/lib”目录,把路径里的文件拷贝到“/usr/local/include/openssl/”目录中(如果没有“openssl”目录则新建)。
    3. 进入“/opt/gopath/src/ahe/PSW/example/appdemo/”目录,执行go build,编译appdemo文件。

  7. 打包镜像。

    1. 在“/home/paas/”下创建一个文件夹用来打包镜像,例如:mkdir cj
    2. 将步骤4中下载的包解压,在“/home/paas/cj”路径下,上传共识节点管理员证书和peer节点的管理员证书,并将步骤6.3中编译好的appdemo文件、openssl库和sdk库以及Dockerfile拷贝至当前目录下并解压。

      解压后的openssl文件夹下缺少两个lib库文件(libltdl.so.7libltdl.so.7.3.0),请将这两个lib文件拷贝至“/home/paas/cj/openssl”目录下。

    3. 解压共识节点管理员证书和peer节点的管理员证书:unzip xxx.zip,并将解压出来的证书文件分别移至“/home/paas/cj/orderer”文件夹和“/home/paas/cj/peer”文件夹(如果没有则创建)。如下图:

    4. 在本地解压步骤4中下载的包,从sdk-config文件夹中获取yaml文件,并修改其中证书路径的配置。
      例如:
      1. organization下的cryptoPath路径中的节点域名地址修改为如下图的peer地址。

      2. 排查解压后的证书相关路径,修改完成后,sdk配置文件中不存在带hash值的路径。

      3. 去掉sdk配置文件中certificateAuthorities部分代码块,保存后,将该文件上传至“/home/paas/cj”路径下。

        如下为全部修改好后的sdk配置文件示例:
        name: "global-trade-network"
        
        x-type: "hlfv1"
        x-loggingLevel: info
        
        description: "The network to be in if you want to stay in the global trade business"
        
        version: 1.0.0
        
        client:
        
          organization: aa73c757c9026fb623495d7058ca177f6152bcea
        
          logging:
            level: info
        
          peer:
            timeout:
              connection: 10s
              queryResponse: 45s
              executeTxResponse: 120s
          eventService:
            timeout:
              connection: 10s
              registrationResponse: 50s
          orderer:
            timeout:
              connection: 10s
              response: 45s
        
          cryptoconfig:
            path: /opt/gopath/src/github.com/hyperledger/fabric
        
          credentialStore:
            path: "/tmp/hfc-kvs"
        
            cryptoStore:
              path: /tmp/msp
        
            wallet: wallet-name
        
          BCCSP:
            security:
             enabled: true
             default:
              provider: "SW"
             hashAlgorithm: "SHA2"
             softVerify: true
             ephemeral: false
             level: 256
        
        channels:
        
          tongtai:
            orderers:
        
              - orderer-2cf8802066c1c5011fd396c54c9126a17c9cfcc9-0.orderer-2cf8802066c1c5011fd396c54c9126a17c9cfcc9.default.svc.cluster.local
        
            peers:
        
              peer-aa73c757c9026fb623495d7058ca177f6152bcea-0.peer-aa73c757c9026fb623495d7058ca177f6152bcea.default.svc.cluster.local:30605:
                endorsingPeer: true
                chaincodeQuery: true
                ledgerQuery: true
                eventSource: true
        
              peer-aa73c757c9026fb623495d7058ca177f6152bcea-1.peer-aa73c757c9026fb623495d7058ca177f6152bcea.default.svc.cluster.local:30606:
                endorsingPeer: true
                chaincodeQuery: true
                ledgerQuery: true
                eventSource: true
        
            chaincodes:
              - transaction:1.0
        
        organization:
        
          aa73c757c9026fb623495d7058ca177f6152bcea:
            mspid: aa73c757c9026fb623495d7058ca177f6152bceaMSP
        
            cryptoPath:  /home/paas/peer/msp
            tlsCryptoKeyPath: /home/paas/peer/tls/server.key
            tlsCryptoCertPath: /home/paas/peer/tls/server.crt
        
            peers:
        
              - peer-aa73c757c9026fb623495d7058ca177f6152bcea-0.peer-aa73c757c9026fb623495d7058ca177f6152bcea.default.svc.cluster.local:30605
        
              - peer-aa73c757c9026fb623495d7058ca177f6152bcea-1.peer-aa73c757c9026fb623495d7058ca177f6152bcea.default.svc.cluster.local:30606
        
            certificateAuthorities:
              - ca-org1
        
          ordererorg:
              mspID: "2cf8802066c1c5011fd396c54c9126a17c9cfcc9MSP"
        
              cryptoPath: /home/paas/orderer/msp
        orderer-eip: 49.4.81.160
        orderers:
        
          orderer-2cf8802066c1c5011fd396c54c9126a17c9cfcc9-0.orderer-2cf8802066c1c5011fd396c54c9126a17c9cfcc9.default.svc.cluster.local:
            url: grpcs://49.4.81.160:30805
        
            grpcOptions:
              ssl-target-name-override: orderer-2cf8802066c1c5011fd396c54c9126a17c9cfcc9-0.orderer-2cf8802066c1c5011fd396c54c9126a17c9cfcc9.default.svc.cluster.local
              grpc-max-send-message-length: 15
        
            tlsCACerts:
              path: /home/paas/orderer/msp/tlscacerts/tlsca.2cf8802066c1c5011fd396c54c9126a17c9cfcc9-cert.pem
        
        peers:
        
        
          peer-aa73c757c9026fb623495d7058ca177f6152bcea-0.peer-aa73c757c9026fb623495d7058ca177f6152bcea.default.svc.cluster.local:30605:
        
        
            url: grpcs://49.4.81.160:30605
        
            grpcOptions:
              ssl-target-name-override: peer-aa73c757c9026fb623495d7058ca177f6152bcea-0.peer-aa73c757c9026fb623495d7058ca177f6152bcea.default.svc.cluster.local
              grpc.http2.keepalive_time: 15
        
            tlsCACerts:
              path: /home/paas/peer/msp/tlscacerts/tlsca.aa73c757c9026fb623495d7058ca177f6152bcea-cert.pem
        
        
          peer-aa73c757c9026fb623495d7058ca177f6152bcea-1.peer-aa73c757c9026fb623495d7058ca177f6152bcea.default.svc.cluster.local:30606:
        
        
            url: grpcs://49.4.81.160:30606
        
            grpcOptions:
              ssl-target-name-override: peer-aa73c757c9026fb623495d7058ca177f6152bcea-1.peer-aa73c757c9026fb623495d7058ca177f6152bcea.default.svc.cluster.local
              grpc.http2.keepalive_time: 15
        
            tlsCACerts:
              path: /home/paas/peer/msp/tlscacerts/tlsca.aa73c757c9026fb623495d7058ca177f6152bcea-cert.pem
    5. 修改Dockerfile文件:将yaml文件名称修改为自己的sdk文件名。

    6. 在“/home/paas/cj/”路径下,执行如下命令将所有文件打包成镜像。
      docker build -t tongtaidemotest:byl1 . 
      docker save tongtaidemotest:byl1>tongtaitest.tar

      请确保本地有euleros:2.2.5镜像,否则将会打包失败。

  8. 上传镜像。

    1. 将打包完成的镜像下载到本地,登录华为云,进入云容器引擎页面,在部署了BCS服务对应的集群下,创建无状态工作负载,实例数量选择1个。

    2. 在“容器设置”步骤,添加容器。

    3. 单击“上传镜像”,跳转到容器镜像服务页面,上传镜像。

    4. 选择打包好的镜像文件,等待上传完毕。

    5. 镜像上传完成后,回到创建无状态工作负载界面。

    6. 在“生命周期”步骤,设置启动命令。
      • 运行命令:/bin/sh
      • 运行参数:

        -c

        sleep 10000

        (请完全按照图片中的格式,保持两行)

    7. 单击“下一步”,保持默认设置即可,无状态工作负载创建成功。

  9. 交易验证。

    1. 登录集群弹性云服务器后台,执行如下命令查看应用容器是否正常。
      docker ps -a | grep tongtai |grep container

    2. 可以看到部署的应用名,进入容器内部,命令如下:
      docker exec -it 容器id bash
    3. 配置/etc/hosts文件,增加order节点和peer节点的域名映射。

      在下载的sdk.yaml文件中查询orderer和peer的域名信息,将私网ip+orderer域名和私网ip+peer域名补充在/etc/hosts文件的最后,如下所示:

      x.x.x.x orderer-2cf8802066c1c5011fd396c54c9126a17c9cfcc9-0.orderer-2cf8802066c1c5011fd396c54c9126a17c9cfcc9.default.svc.cluster.local
      x.x.x.x peer-aa73c757c9026fb623495d7058ca177f6152bcea-0.peer-aa73c757c9026fb623495d7058ca177f6152bcea.default.svc.cluster.local
      x.x.x.x peer-aa73c757c9026fb623495d7058ca177f6152bcea-1.peer-aa73c757c9026fb623495d7058ca177f6152bcea.default.svc.cluster.local
    4. 执行命令配置环境变量,并查看注册命令。
      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/paas/openssl
      cd /home/paas
      ./appdemo register -h
      • 如果后续同态demo交易中登出容器,再次登入后需重新执行配置环境变量命令。
      • 其中./appdemo register -h是用来查看注册命令参数。

示例1:注册账户

  1. 执行如下命令注册B账户,账户金额为100。

    ./appdemo register -u B -p tongtaitestB -i 100  -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea

    -u:为注册的用户名B、-p:为B用户口令tongtaitestB,-c:为sdk配置文件名,-C:为安装链代码的通道名,-I:为安装示例链代码IDChaincode的实际安装链代码名,-T:为安装示例链代码Transaction的实际安装链代码名,-o:为peer节点组织的ID,可在通道管理界面查询。参数下同。

    返回值为一串加密地址,示例:

    b22edf18d64f57954640c8f3f6cf67d9401f262daead588ddfexxxxx

  2. 以相同的方法注册A账户,账户金额为200。

    ./appdemo register -u A -p tongtaitestA -i 200  -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea

    返回值为一串加密地址,示例:

    2efc4639bc281060ce013dfea33a47b647b6f4a20103a6321c33dxxxxxx

示例2:A向B转账

  1. 执行如下命令,A向B转账,金额为10。

    ./appdemo transaction -u A -p tongtaitestA -b b22edf18d64f57954640c8f3f6cf67d9401f262daead588ddfe8178xxxx -t 10 -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea

    其中红色的随机数即为注册B用户的返回值,即B用户注册数据的地址信息。

    返回值为A账户的地址:2efc4639bc281060ce013dfea33a47b647b6f4a20103a6321c33d67d5xxxx

示例3:查询账户余额

  1. 执行如下命令查询A账户的余额,返回值为A账户余额。

    ./appdemo querybalance -p tongtaitestA -u A -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea

  2. 执行如下名查询B账户的余额,返回值为B账户余额。

    ./appdemo querybalance -p tongtaitestB -u B -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea

示例4:查询A账户和B账户的总余额

  1. 执行如下命令查询A账户和B账户的总余额。

    ./appdemo homoadd -c ./test-sdk-config.yaml  -C tongtai -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea

分享:

    相关文档

    相关产品