智能合约管理(Fabric 2.0)
点融区块链云服务平台所说的智能合约对应Hyperledger Fabric区块链中的chaincode,Fabric 2.0针对智能合约的生命周期进行了重新设计。用户在点融区块链云服务平台创建的Fabric 2.0的区块链,适用于Fabric 2.0的智能合约生命周期管理。
下载智能合约工具
为了方便用户打包和测试智能合约,点融区块链云服务平台提供了点融区块链智能合约工具(Fabric 2.0)。它是一个可执行文件,目前支持Windows、Linux、MacOS系统。请点击这里下载,然后解压,并将其所在路径设置到PATH环境变量中。该工具的用法请看这里。
打包智能合约
智能合约开发人员需要将开发好的智能合约使用点融区块链智能合约工具(Fabric 2.0)进行打包,然后将打包文件发送给拥有点融区块链云服务平台账号权限的用户安装部署。
打包工具既支持将所有打包参数放置在配置文件中打包,也支持将所有打包参数通过命令行参数的形式传入。以下将介绍这两种方法:
方法1:使用智能合约打包配置文件package.yaml打包。
package.yaml文件名不可变,参数可根据您的情况进行调整。如下图所示:
假定智能合约的开发语言为Golang,用户的智能合约源代码目录为example_cc。将该配置文件与可执行文件“chaincode”放在同一目录下,并将智能合约置于"$GOPATH/src/github.com/example_cc" 目录下。 对于NodeJS或者Java开发的智能合约,"Path"参数需要设置为智能合约所在目录的绝对路径。
在命令行切换到配置文件和可执行文件“chaincode2”所在的目录,使用可执行文件“chaincode2”打包智能合约:
chaincode2 package
此命令将"$GOPATH/src/github.com/example_cc"目录下的智能合约文件全部打包,在当前目录生成文件名为example_cc-1.0.0.pkg的打包文件。请注意您的系统已经定义GOPATH系统环境变量(只针对Golang开发的智能合约)。
方法2:不使用打包配置文件,将所有打包参数通过命令行参数的形式传入来打包。
完整的打包命令为:
./chaincode2 package --type="golang" --name="example_cc" --version="1.0.0" --path="github.com/example_cc" --output=example_cc.tar.gz
注意:如果是在MacOS系统下打包,请把源代码目录下的所有“.DS_Store“文件删除,否则有可能导致智能合约安装失败。
上传智能合约
用户登录点融区块链云服务平台之后,在下图所示界面中点击"我的合约"菜单项将显示用户上传或购买的智能合约列表。如果用户需要上传新的智能合约,点击"上传智能合约"按钮或者点击"立即上传"链接。
之后用户可以看到下图的上传智能合约表单,需要输入智能合约名称、支持的区块链平台类型版本等信息,请选择区块链平台版本为Fabric 2.0。然后点击"发送上传请求到客户端"按钮。
此后会回到智能合约列表,多了一条等待批准上传的智能合约记录。
此后用户需要登录点融区块链客户端,上传对应的智能合约包(需要使用点融区块链智能合约工具生成)并且批准该上传智能合约请求。 如下图所示,当客户端收到批准请求时右上角的通知中心会有小红点提示,点击它会看到需要处理的批准请求,点击"立即处理",将出现具体的批准请求内容。
以下是上传智能合约的请求页面,点击"导入"按钮,选择已经打包好的智能合约,将会显示已导入的智能合约信息。然后点击"批准"按钮,客户端将会上传智能合约到BaaS控制台。
现在回到BaaS控制台"我的智能合约"页面,点击智能合约列表界面中的智能合约"详情",可以查看如下图所示的智能合约详情页面。
购买智能合约
用户登录点融区块链云服务平台之后,在下图所示界面中点击"我的合约"菜单项将显示用户上传或购买的智能合约列表。如果用户需要购买智能合约,请选择区块链平台为Fabric 2.0的智能合约,点击"立即购买"链接或者点击"合约商店"菜单项。
之后用户可以看到合约商店中可购买的合约列表。
之后用户可以点击"购买"按钮进行合约购买。
购买成功后,回到"我的合约",即可看到刚购买的合约信息。
发布智能合约
用户完成上传智能合约或购买智能合约后,可以将智能合约发布在指定的区块链上。如果指定的区块链是联盟链,发布之后,联盟链中的所有成员都可以下载和安装该智能合约。 一旦用户发布智能合约到指定区块链,该区块链上将保留一份该智能合约发布时的副本。以后即使用户删除了上传的智能合约,发布时生成的智能合约副本也不会被删除.
用户如果需要发布智能合约到指定的区块链,可以点击智能合约列表界面中相应智能合约的"发布"按钮,并选择区块链和要发布的智能合约版本。发布区块链时,可以指定哪些组织可以看到该区块链,也就是指定的组织才能安装该区块链。Fabric 2.0的智能合约只能发布到Fabric 2.0的区块链上,发布Fabric 2.0的智能合约不需要客户端签名,可直接在控制台上发布成功。发如下图所示。
安装智能合约
如果智能合约已经成功发布到区块链上,在该对应区块链的智能合约子菜单,点击上图所示的"安装"按钮,将显示下图对话框,用户可以选择需要安装该智能合约的组织上对应的Peer节点, 然后点击"发送请求到客户端"按钮等待客户端批准。
接下来用户需要登录客户端批准该安装智能合约请求,如下图所示。
批准成功后,刷新区块链的智能合约子菜单页面,可以看到下图所示的节点智能合约安装状态显示为"已安装"。
新建智能合约实例
智能合约实例是智能合约在通道上的运行实例,智能合约实例定义了背书策略和私有化数据的配置。应用程序通过智能合约实例标识调用智能合约。如果希望同一个智能合约在多个不同的通道上运行,需要分别在每个通道上都新建智能合约实例。新建的智能合约实例,需要得到通道内大多数组织的批准,才能提交,提交之后,智能合约实例就正式生效,并可以被应用程序调用。新建智能合约实例的具体步骤如下:
在智能合约实例的标签下,点击"新建智能合约实例",随后会弹出新建智能合约实例对话框,新建智能合约实例时,选择关联的智能合约和通道,输入智能合约实例的标识和版本,并选择背书策略(注意可能需要向智能合约的开发或运维人员获取对应的初始化参数和背书策略), 如果智能合约实例需要初始化,则勾选是否需要初始化选项,如不需要初始化,则不勾选,然后点击"发送请求到客户端"按钮,如下图所示:
接下来用户登录点融区块链云服务平台客户端,对相应的请求做签名和确认操作。
用户在客户端确认成功后,在控制台查看相应的智能合约实例,可以看到智能合约实例的状态已经更改为已经创建,如下图所示。
批准智能合约实例
智能合约实例包含了背书策略和私有数据配置,当通道中的大多数组织批准了智能合约实例之后,也就意味着大多数组织对于背书策略和私有数据配置的认可。当通道中大多数组织批准之后,该智能合约实例才能提交。点击"批准",选择批准的组织和关联的智能合约,然后点击"发送请求到客户端"按钮,如下图所示:
接下来用户登录点融区块链云服务平台客户端,对相应的请求做签名和确认操作。
用户在客户端确认成功后,在控制台查看相应的智能合约实例,可以看到该组织已经批准了智能合约实例,如下图所示。
提交智能合约实例
当通道中的大多数组织批准之后,提交智能合约实例才能使智能合约实例真正生效。提交智能合约实例之后,应用程序才能调用智能合约。点击"提交",如下图所示:
接下来用户登录点融区块链云服务平台客户端,对相应的请求做签名和确认操作。
用户在客户端确认成功后,在控制台查看相应的智能合约实例,可以看到该智能合约实例的状态更改为就绪,如下图所示。
升级智能合约
在"我的智能合约"页面,找到想要升级智能合约,点击后面对应的“更新”按钮。
在弹出的“更新智能合约”对话框里,在“智能合约版本”一栏,输入新版本的版本号,在“功能详细说明”一栏,可以添加一些功能说明。之后,点击“发送更新请求到客户端”。
注意到此时的智能合约记录最新版本显示为“1.1.0”,状态为“等待上传”。
打开客户端后,在“申请管理里面”可以看到刚才提交的请求,在导入新版本的智能合约之后,如下图所示。然后点击批准。
此时,可以上传新版本的智能合约包,成功后点击“批准”。这时刷新智能合约记录页面,可以看到该合约的状态已经从“等待上传”变更为“就绪”。至此,智能合约版本更新成功。智能合约升级之后,需要更新智能合约实例,并关联新版本的智能合约,更新智能合约实例与先前的步骤类似。
调用智能合约
点融区块链智能合约工具(Fabric 2.0)也支持通过命令行的方式调用智能合约(下载和安装请参考这里)。智能合约工具通过与点融区块链客户端导出的组织证书配合,通过简单的配置,就可以方便的调用智能合约。下面介绍如何使用点融智能合约工具调用智能合约。
- 导出组织的用户证书
打开点融区块链客户端,进入到区块链对应的保险箱中,点击组织列表。确保要导出的组织中,已经创建了普通类型的用户,比如下图中的Org1已经创建普通用户User1。如果没有创建普通用户,那么点击"新建用户"按钮,创建普通用户。然后点击"导出用户"按钮,选择导出的目标目录后,会导出该组织的用户证书。
在本示例中,导出的文件路径为: /Users/fengfeng/Desktop/blockchain_Org1.zip。解压该文件,得到组织Org1的用户文件夹。
- 生成智能合约调用的配置文件
执行下面的命令,会自动生成invoke.yaml和package.yaml。其中invoke.yaml是调用智能合约的配置文件,package.yaml是打包智能合约的配置文件。
chaincode2 init
默认生成的invoke.yaml文件,如下图所示:
- 配置智能合约调用的配置文件
对于需要初始化的智能合约实例,需要准备初始化智能合约实例的配置文件。
打开invoke.yaml文件,下面以智能合约商店中的dr_test_cc智能合约为例,配置invoke.yaml文件如下图所示:
复制invoke.yaml文件的内容到init.yaml文件中,然后配置init.yaml文件。该配置文件是调用dr_test_cc的查询接口,配置init.yaml文件如下图所示(注意:IsInit: true):
复制invoke.yaml文件的内容到query.yaml文件中,然后配置query.yaml文件。该配置文件是调用dr_test_cc的查询接口,配置query.yaml文件如下图所示(注意:IsQuery: true):
- 调用智能合约
执行下面的命令调用智能合约dr_test_cc的init接口
chaincode2 invoke --conf=init.yaml
结果如下:
执行下面的命令调用智能合约dr_test_cc的invoke接口
chaincode2 invoke --conf=invoke.yaml
结果如下:
执行下面的命令调用智能合约dr_test_cc的query接口
chaincode2 invoke --conf=query.yaml
智能合约工具用法
chaincode2 help 打印使用说明
chaincode2 pacakge --conf=package.yaml 按照指定的配置文件打包智能合约
chaincode2 package --help 打印package命令的使用说明
chaincode2 inspect --file=example_cc.pkg 查看智能合约打包文件example_cc.pkg的相关信息
chaincode2 invoke --conf=invoke.yaml 按照指定的配置文件调用智能合约