Hyperledger Composer之开发部署业务网络
发布于 2 个月前 作者 stvenyin 260 次浏览 来自 fabric
  • playground方式
  • 这个方式适合业务人员/开发人员快速测试开发业务网络,它提供图形化界面操作,可以直观的操作资产/参与者以及提交交易。安装这个环境很简单。如果要部署到正式环境,请先导出.bna文件,然后参考方式一中的部署到区块链上的操作。我的操作系统是ubuntu16.04。
  • 要求
  • Docker Engine >= 17.03
  • Docker Compose >= 1.8

*. 安装 *. 注意: 先关闭其他fabric网络,防止冲突。

  • 选择一个安装目录执行面命令:
  • curl -sSL https://hyperledger.github.io/composer/install-hlfv1.sh | bash
  • // 在当前目录下 会多出一个composer-data文件夹,一个composer.sh脚本
  • ├── composer-data
  • ├── composer.sh
  • └── …
  • 它会自动执行:
  • 下载fabric相关镜像
  • 启动fabric网络
  • 生成composer配置文件
  • 下载composer playground镜像
  • 启动composer playground
  • 把预先准备的admin证书材料复制到composer里面
    1. image.png
    1. 基本操作
    1. 开启composer:
    1. ./composer
    1. 1
    1. 关闭composer:
    1. ./composer stop
    1. 1
    1. 部署业务网络
    1. 它会部署到自带的fabric测试网络上
    1. image.png
    1. 测试业务网络
    1. 我们使用composer playground自带的basic-sample-network来演示。这个业务网络定义了:SampleParticipant 参与者,SampleAsset 资产,SampleTransaction 交易,SampleEvent 事件。创建资产,参与者是通过点击右侧+create 按钮,输入json格式化数据,然后提交即可。
    1. 创建两个参与者,id分别为A和B
    1. {
    1. “$class”: “org.acme.sample.SampleParticipant”,
    1. “participantId”: “A”,
    1. “firstName”: “zhang”,
    1. “lastName”: “san”
    1. }
    1. {
    1. “$class”: “org.acme.sample.SampleParticipant”,
    1. “participantId”: “B”,
    1. “firstName”: “li”,
    1. “lastName”: “si”
    1. }
    1. image.pngimage.png
    1. 创建一个归属于A的资产
    1. {
    1. “$class”: “org.acme.sample.SampleAsset”,
    1. “assetId”: “1”,
    1. “owner”: “resource:org.acme.sample.SampleParticipant#A”,
    1. “value”: “”
    1. }
    1. 结果:
    1. image.png
    1. 修改资产值( 执行事务)
    1. {
    1. “$class”: “org.acme.sample.SampleTransaction”,
    1. “asset”: “resource:org.acme.sample.SampleAsset#1”,
    1. “newValue”: “1000”
    1. }
    1. image.png
    1. 执行完毕后 再次查看SampleAsset:
    1. image.png
    1. 测试权限控制
    1. 查看权限定义规则
    1. permissions.acl
    1. /**
      • Sample access control list.
    1. */
    1. //任何人都有读取权限
    1. rule EverybodyCanReadEverything {
    1. description: "Allow all participants read access to all resources"
      
    1. participant: "org.acme.sample.SampleParticipant"
      
    1. operation: READ
      
    1. resource: "org.acme.sample.*"
      
    1. action: ALLOW
      
    1. }
    1. //任何人都可以提交交易
    1. rule EverybodyCanSubmitTransactions {
    1. description: "Allow all participants to submit transactions"
      
    1. participant: "org.acme.sample.SampleParticipant"
      
    1. operation: CREATE
      
    1. resource: "org.acme.sample.SampleTransaction"
      
    1. action: ALLOW
      
    1. }
    1. //只有资产的拥有者才可以进行所有操作(增删改查),当然了 其他人是可以读取查看的(第一个权限规则)
    1. rule OwnerHasFullAccessToTheirAssets {
    1. description: "Allow all participants full access to their assets"
      
    1. participant(p): "org.acme.sample.SampleParticipant"
      
    1. operation: ALL
      
    1. resource(r): "org.acme.sample.SampleAsset"
      
    1. condition: (r.owner.getIdentifier() === p.getIdentifier())
      
    1. action: ALLOW
      
    1. }
    1. // 系统权限:CRUD 如 PeerAdmin , Admin
    1. rule SystemACL {
    1. description: “System ACL to permit all access”
    1. participant: “org.hyperledger.composer.system.Participant”
    1. operation: ALL
    1. resource: “org.hyperledger.composer.system.**”
    1. action: ALLOW
    1. }
    1. 上一个步骤是在PeerAdmin身份下执行的所有的操作,我们需要为两个参与者颁发身份。注意:只有admin才有颁发身份的权限。
    1. 颁发身份
    1. 点击右上角PeerAdmin ,切换到admin身份,点击右侧Issue New ID
  • image.png
  • image.png
  • 按照上面步骤再添加 b,最后效果如下:
  • image.png
  • 测试不同身份
  • 根据permissions.acl中的定义规则,对于id为1的资产,只有拥有者才能执行全部操作,其他人只能查看。 切换到b身份,我们来修改下资产value ,查看效果:
  • image.png
  • 提示错误:
  • Error: Error trying invoke chaincode. Error: chaincode error (status: 500, message: Error: Participant ‘org.acme.sample.SampleParticipant#B’ does not have ‘UPDATE’ access to resource ‘org.acme.sample.SampleAsset#1’)
  • 1
  • 很明显b身份 没有修改这个资产的权限,和定义的权限规则一致。相似的你可以测试其他几个权限规则,你页可以修改规则,重新部署来测试。
  • 部署业务网络到正式环境中
  • 导出bna后,需要参考方式一。
回到顶部