智能合约部分
太困了,休假的时候再把图贴上 .....
运行在docker容器里面,如果需要调试只能通过打日志log方式
一个合约,就是一个用户用go/java/ node编写的文件(包括:字符,方法,返回信息)
块中 (chaincode目录下),一个合约只能对应一个目录
下面目录有用go/java/node语言开发智能合约的代码
下面网址可以查看channel跟存入的数据等(一个合约跟一个channel会生成一个库)
一个channel下可以安装多个合约,每个合约都会生成一个数据库
安装合约
命令行代码
解释:
-n : 合约名称
-v:合约版本
-p:合约所在目录
说明:
合约所在目录从github.com开始,因为前面会自动从根目录(opt)目录层拼上路径
安装后,状态查看
---------------------------------------------------------------------------------------------------------------------------
实例化合约
实例化操作是会存到区块链上的,需要指定是在哪个channel里面上传区块。
指令:
说明:-n、-v跟上面指令相同
-o:指定order的节点 //上块操作都必须只能order节点
--tls --cafile:指定tls证书 //保证数据的安全性
-c:执行方法名参数 //-c '{"Args":["init"]}'
-P:指定倍数策略 //上面指令只装一台节点
实例化后,状态查看
实例化完整之后,可以触发合约
往合约里面上传一条数据【invoke命令】
查询刚刚上传的数据【调用自定义的合约方法】
调用自定义的query方法,查询结果
通过create database查看上传的数据
合约代码调试(log打印方式)
升级合约
情景:增加新功能、有新的优化等
不需要再实例化
1、修改code代码
2、重新安装当前合约(版本更改2.0)
3、调用升级指令(会在区块链上生成一个区块)
a、升级之前先查询当前channel区块信息
结果:高度 = 9
b、执行升级指令
c、升级之后再查询一次channel区块信息,看height增加了没有
注意:更新之后,调用原来合约的查询方法,得到的都是最新数据,原来的版本数据作废
合约里对私有数据(字段)处理【只能指定组织机构查看】
使用private data
1、修改合约代码
调用api存储和取值时,换成保存私有数据的api
2、定义一个json
说明:
name:私有字段名称
policy:策略(允许哪些组织机构访问)
requiredPeerCount:除了倍数节点以外,哪些节点还可以作为私有数据的存储备份
maxPeerCount:私有数据备份的最大数量
blockToLive:私有数据存储上链之后,增加?个块,当前私有数据消失(0:永远不消失)
memberOnlyRead:只有当前定义的组织机构成员可以访问
3、指定实例化合约的路径
说明:所有的策略都是在实例化的时候指定的