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里面
效果
最终执行完毕后,会跳转到http://localhost:8080/editor界面
基本操作
开启composer:
./composer
关闭composer:
./composer stop
部署业务网络
它会部署到自带的fabric测试网络上。
测试业务网络
我们使用composer playground自带的basic-sample-network
来演示。这个业务网络定义了:SampleParticipant
参与者,SampleAsset
资产,SampleTransaction
交易,SampleEvent
事件。创建资产,参与者是通过点击右侧+create
按钮,输入json
格式化数据,然后提交即可。
-
创建两个参与者,id分别为A和B
{ "$class": "org.acme.sample.SampleParticipant", "participantId": "A", "firstName": "zhang", "lastName": "san" }
{ "$class": "org.acme.sample.SampleParticipant", "participantId": "B", "firstName": "li", "lastName": "si" }
结果:
-
创建一个归属于A的资产
{ "$class": "org.acme.sample.SampleAsset", "assetId": "1", "owner": "resource:org.acme.sample.SampleParticipant#A", "value": "" }
结果:
![这里写图片描述](https://img-blog.csdn.net/20170831162608960?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjc4MTg1NDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
-
修改资产值( 执行事务)
{ "$class": "org.acme.sample.SampleTransaction", "asset": "resource:org.acme.sample.SampleAsset#1", "newValue": "1000" }
执行完毕后 再次查看
SampleAsset
:
测试权限控制
-
查看权限定义规则
permissions.acl
/** * Sample access control list. */ //任何人都有读取权限 rule EverybodyCanReadEverything { description: "Allow all participants read access to all resources" participant: "org.acme.sample.SampleParticipant" operation: READ resource: "org.acme.sample.*" action: ALLOW } //任何人都可以提交交易 rule EverybodyCanSubmitTransactions { description: "Allow all participants to submit transactions" participant: "org.acme.sample.SampleParticipant" operation: CREATE resource: "org.acme.sample.SampleTransaction" action: ALLOW } //只有资产的拥有者才可以进行所有操作(增删改查),当然了 其他人是可以读取查看的(第一个权限规则) rule OwnerHasFullAccessToTheirAssets { description: "Allow all participants full access to their assets" participant(p): "org.acme.sample.SampleParticipant" operation: ALL resource(r): "org.acme.sample.SampleAsset" condition: (r.owner.getIdentifier() === p.getIdentifier()) action: ALLOW } // 系统权限:CRUD 如 PeerAdmin , Admin rule SystemACL { description: "System ACL to permit all access" participant: "org.hyperledger.composer.system.Participant" operation: ALL resource: "org.hyperledger.composer.system.**" action: ALLOW }
上一个步骤是在PeerAdmin身份下执行的所有的操作,我们需要为两个参与者颁发身份。注意:只有admin才有颁发身份的权限。
-
颁发身份
点击右上角PeerAdmin
,切换到admin
身份,点击右侧Issue New ID
按照上面步骤再添加 b
,最后效果如下:
![这里写图片描述](https://img-blog.csdn.net/20170831182354919?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjc4MTg1NDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
- 测试不同身份
根据permissions.acl
中的定义规则,对于id为1的资产,只有拥有者才能执行全部操作,其他人只能查看。 切换到b
身份,我们来修改下资产value ,查看效果:
提示错误:
```
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')
```
很明显b
身份 没有修改这个资产的权限,和定义的权限规则一致。相似的你可以测试其他几个权限规则,你页可以修改规则,重新部署来测试。
部署业务网络到正式环境中
导出bna
后,需要参考方式一。