ubuntu Fabric 2.1 搭建(三、链码部署)

一、chaincode项目整体结构

ubuntu Fabric 2.1 搭建(三、链码部署)_第1张图片下面介绍项目中各部分具体内容

1.build.gradle

整个gradle项目的一些配置和依赖
ubuntu Fabric 2.1 搭建(三、链码部署)_第2张图片
1.repositories:从官方reposiry、url途径/或第三方(阿里云镜像)拿到的jar文件/package 保证无误

2.dependencies键值对存储,json保存value,实现复杂查询逻辑。把json格式转换成java instance:安装org.json

3.shadowjar:sourcecode打包成可以用来部署的package

4.test:用于单元测试

总的来说,其他步骤主要还是为第3步服务,即链码打包



2.chaincode开发

ubuntu Fabric 2.1 搭建(三、链码部署)_第3张图片1.chaincoede的metadata(紫色部分):识别constract smart,用于描述基本信息

2.defalt :默认构造器
若要构造非默认的:通过紫色的name

3.其余都是一些类似对链码进行读写的函数



3.chaincodeAPI

两种数据:状态(worldstate)数据(都是以键值对存在、账本数据(余额))和历史(block)数据
通过调用API实现对chaincode的增删改查·
ubuntu Fabric 2.1 搭建(三、链码部署)_第4张图片
1.getState:获取、查询键,得到值

2.putState:写、更新(两者无区别,写后存在即可)

3.getStateByRange批量查询:key的起始值和终止值(注意:同一类key字符串长度要相等,否则(比如9到10范围(改成09-10),否则查不出来(9比10大,ascll码排序))要做补齐操纵(左边加空格或0)),value是json形式。

4.getHistoryForKey:唯一一个查询历史(block)数据,基于database,什么被iput\update\delete,并非基于block.

5.privatedata:只保存在特定节点本地里,通过private hash广播、交易。

6.setevent:跟外部(应用程序)交互/集成,是基于消息的集成(可以是application层面,也可以是智能合约层面集成),监听、触发外部某些程序。
(application之间(或与智能合约)层面集成invokechaincode:从一个chaincode调用另一个chaincode(可以同一个channel,也可以不同channel),智能合约层面的集成



4.单元测试

可在没有fabric环境下进行测试
ubuntu Fabric 2.1 搭建(三、链码部署)_第5张图片1.构造一个虚拟实例
用mock方式创建Context对象,通过Context、mock拿到chaincodeStub对象(
所有API都基于context、stub),流程就是:
在这里插入图片描述
2.测试smartcontract方法
assert:比较查询和预期结果相等,则通过(判断查)
indorder–verify:是否按指定顺序执行(判断写)



5.链码查询Query(读账本)

注:对链码的query和下面的invoke都要通过外部SDK来操作
正常情况下,不同智能合约是不能直接访问的,即一个peer只能查询它对应的智能合约。当它们在同一个网络中,可以通过给与适当的权限,达到跨合约访问的目的,不同通道之间,只能查询状态。



6.链码调用Invoke(写账本)

相比较于Query,Invoke方法要复杂的多,主要是因为Invoke需要和Orderer通信,而且发起了Transaction之后,还要设置EventHub来接收消息。

你可能感兴趣的:(ubuntu Fabric 2.1 搭建(三、链码部署))