您的位置:首页 > 理论基础 > 计算机网络

Hyperledger Composer之开发部署业务网络(方式二)

2017-08-30 10:42 381 查看

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": ""
}


结果:



修改资产值( 执行事务)

{
"$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
,最后效果如下:



测试不同身份

根据
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
后,需要参考方式一
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: