hyperledger fabric 智能合约开发

北慕城南 提交于 2019-12-06 15:54:19

智能合约部分

太困了,休假的时候再把图贴上 .....

 

运行在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、指定实例化合约的路径

 

说明:所有的策略都是在实例化的时候指定的

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!