链代码管理
为您提供界面化链代码管理功能,包括链代码安装、实例化、更新链代码,安装和更新链代码时支持对Golang语言的代码进行安全检查。
安装链代码总数支持500个,建议CCE集群机器总规格至少达到500U1000GB。
约束与限制
链代码安装前需要将开发的链代码文件压缩成zip格式以执行安装。
注意事项
- 链代码安装前需要将开发的链代码文件压缩成zip格式以执行安装。
- 如果链代码管理页面右上角出现“网络状态”异常提示,请不要立刻进行链代码管理操作,请稍等几分钟,待网络状态正常后,再进行操作。
图1 网络状态正常
安装链代码
- 登录区块链服务管理页面。
- 如果部署在CCE集群上时,请执行以下步骤进区块链管理页面:
- 登录区块链服务管理控制台。
- 单击实例卡片中的“区块链管理”。
- 输入用户名、密码,单击“登录”。
用户名为admin,初始登录密码为您在部署区块链实例时设置的资源初始密码。为了保证系统安全,建议定期修改密码。
- 如果部署在边缘集群上时,请执行以下步骤进区块链管理页面:
- 登录IEF管理控制台。
- 选择左侧导航栏的“边缘应用 > 容器应用”。
- 单击当前BCS实例的baas-agent容器,在实例列表中查看其边缘节点。
图2 查询边缘节点
- 单击节点详情,查看主机名。
- 在弹性云服务中搜索主机名,查询纳管该边缘节点的弹性云服务器的IP(弹性公网)。
图3 查询弹性云服务器的IP
- 通过该地址https://IP:30603 访问区块链管理页面。
- 输入用户名、密码、验证码,单击登录。
- 用户名为admin,初始登录密码为您在部署区块链实例时设置的资源初始密码。为了保证系统安全,建议定期修改密码。
- 登录时,若您使用的是IE浏览器,有可能会跳转失败并提示使用证书不受信任,此时您可以单击此处进行处理。
- 如果部署在CCE集群上时,请执行以下步骤进区块链管理页面:
- 在链代码管理页面,单击“安装链代码”。
- 在安装界面输入“链代码名称”、“链代码版本”等,详细参数配置请参考表1。
图4 安装链代码
- 单击“安装”,完成链代码安装。
- 单击链代码名称前,展开链代码详细信息。
- 在“版本列表”页签,单击“操作”列的“下载检查报告”查看链代码检查结果。(以下示例仅供参考,请以实际扫描结果为准。)
若不开启代码安全检查,则不会生成检查报告,也不会显示“下载检查报告”按钮。
图5 下载检查报告
- 解压文件压缩包,打开里面的html文件查看扫描结果详情,扫描报告按照错误、警告、提示三种类型分类显示,其中“错误”级别的问题需要处理,否则会影响链代码的正常功能;“警告”级别的问题建议通过代码重构进行规避;“提示”级别的问题可以根据实际情况进行选择性的处理。
图6 扫描文件
- 例如示例图中出现“提示”级别的问题1次,单击打开详细信息,提供问题的简要说明、错误示例代码、扫描详情、修改建议和示例代码供您参考。
图7 扫描详情
您可以根据链代码检查结果对代码进行修改后,重新进行链代码的安装或者更新。
- 解压文件压缩包,打开里面的html文件查看扫描结果详情,扫描报告按照错误、警告、提示三种类型分类显示,其中“错误”级别的问题需要处理,否则会影响链代码的正常功能;“警告”级别的问题建议通过代码重构进行规避;“提示”级别的问题可以根据实际情况进行选择性的处理。
实例化链代码
链代码安装后需要将链代码实例化到通道/链上,以便Peer节点通过链代码容器和分布式账本进行交互。实例化链代码前,请确保先将组织中的Peer节点添加进通道/链中,否则无法实例化链代码。
- 根据链代码开发语言的不同,实例化后的容器占用内存量并不相同。对于单个peer节点,单个Go语言链代码容器占用运行内存约10MB,单个Java语言链代码容器占用约110MB。例如需要实例化100个Java语言链代码,建议CCE节点规格为16核32GB。
- 链代码实例化前需要将开发的链代码文件压缩成zip格式。
- 单击链代码列表“操作”列的“实例化”。
- 选择实例化通道、链代码版本、背书策略、背书组织列表等,填写链代码参数。
背书是指背书组织执行链码交易并返回一个提案响应给客户端应用的过程。背书策略则指明了需要通道中多少不同组织的成员根据指定智能合约执行和验证交易才能使一笔交易有效。因此,背书策略定义了必须“背书”(批准)提案执行的组织中的 Peer 节点。
- 选择“下列任意组织背书”:只要任意一个背书组织为交易背书,交易即为有效。
- 选择“下列全部组织背书”:只有所有背书组织为交易背书,交易才为有效。
图8 链代码实例化
- 在“隐私保护配置”中输入JSON格式的隐私保护数据。
如果您需要确保一个共享通道内数据的隐私性,例如指定A成员可以访问相关数据的权限,没有权限的成员B,则无法访问相关的数据,可以使用隐私保护功能。如果您的链代码不需要使用隐私保护功能,可以跳过本步骤。
在配置隐私保护时,请参照示例进行配置,其中:- name表示隐私数据空间的名称,此处为“collectionPrivateDetails”。
在链代码中,若要将数据写入该隐私数据空间,需保证指定的隐私数据空间名称与此处定义一致,即:
stub.PutPrivateData("collectionPrivateDetails", key, value)
- policy表示隐私数据空间数据的访问策略,此处表示仅允许组织Org1和Org2的节点获取该隐私空间的数据。
MSP标识获取方法:进入“通道管理”界面,在对应通道选择查看节点,切换组织,获取两个组织的MSP标识(如下图所示)。
图9 查看节点的MSP
- requiredPeerCount表示需要几个节点背书,并将隐私数据分发,此处为0表示自己背书。
- maxPeerCount表示共识节点最大个数,起冗余备份作用,若其中1个共识节点不可用,其他共识节点可以响应获取隐私数据的请求,此处配置为3。
- blockToLive表示可以保存的隐私数据最大块数,超过这个值,就会进行清除,若想无限存储,需要将该值设为0,此处设置为0。
- memberOnlyRead默认设置为true,只有该选项为true时policy中的策略才生效。
隐私保护配置JSON定义举例:
[ { "name": "collectionPrivateDetails", "policy": "OR('<组织Org1的MSP标识>.member','<组织Org2的MSP标识>.member')", "requiredPeerCount": 0, "maxPeerCount": 3, "blockToLive": 0, "memberOnlyRead": true } ]
表示链码将使用一个叫做“collectionPrivateDetails”的隐私数据空间,只有组织“Org1”和“Org2”的节点才能获取该隐私空间内的数据。
隐私保护配置中的“name”和“blockToLive” 一旦被设置,后续在升级链代码时,将不能对这两个值做修改。更多信息可以参考Using Private Data in Fabric。
- name表示隐私数据空间的名称,此处为“collectionPrivateDetails”。
- 最后单击“实例化”完成链代码在通道上的实例化。
如果配置了隐私保护,实例化成功后,单击“查看更多”,可以下载隐私保护数据确认配置是否正确。图10 下载隐私保护数据
若实例化失败,可根据链代码实例化错误码列表查询错误信息以便定位失败原因。
更新链代码
如果您的链代码更新,您需要对新版本链代码进行重新安装且实例化以满足新的业务需求。
- 单击链代码列表“操作”列的“更新链代码”。
- 填写链代码版本、选择安装节点、添加链代码文件等,单击“更新”。
- 实例化新版本链代码,操作请参见实例化链代码。
- (可选)单击链代码名称前的,展开链代码详细信息,您可以查看当前链代码的版本列表、安装列表和实例化情况。
链代码实例化错误码列表
链代码实例化过程中可能会由于各种原因,导致实例化失败。此时您可以在此表中查询错误码对应的错误信息。
错误码 |
异常信息 |
---|---|
6001 |
执行超时 |
6999 |
未知错误 |
6701 |
客户端连接Peer失败 |
6703 |
Peer背书时,验证签名失败 |
6704 |
链代码编译时,拉取ccenv镜像失败 |
6705 |
链代码编译失败 |
6707 |
链代码镜像构建失败 |
6708 |
链代码容器创建失败 |
6709 |
链代码容器注册失败 |
6710 |
客户端连接Orderer失败 |
6712 |
交易信息写入分布式账本失败 |
6713 |
Orderer判定请求错误 |
6714 |
背书策略校验失败 |
6715 |
同一个Peer节点上,不能同时实例化多个链代码 |
6716 |
实例化时,init参数错误 |
6717 |
实例化时,invoke参数错误 |
6720 |
证书创建失败 |
6721 |
链代码容器启动超时 |
6722 |
链代码容器启动后执行init时遇到异常退出,导致交易超时 |
6723 |
包含相同Schema的链代码已经实例化 |
6725 |
签名集不满足背书策略 |
6726 |
实例化策略校验失败,请使用老组织节点升级链代码 |
6901 |
失败,实例化版本链码必须包含上版本所有表 |
6902 |
失败,实例化版本链码必须包含上版本所有字段 |
6903 |
失败,实例化版本链码不能改变上版本字段属性 |
6904 |
实例化版本链码的schema文件不存在 |
6905 |
实例化版本链码的schema文件解析错误 |
6906 |
磁盘空间不足 |