Fabric智能合约Chaincode二如何使用Java语言开发智能合约
Fabric智能合约——Chaincode(二)如何使用Java语言开发智能合约
构建工具
Java链码支持两种构建工具 gradle 和 maven 。两种构建工具都需要如下三个步骤:
- 添加插件:遮蔽方式的FatJar——把所有的依赖包都打包到一个jar中。FatJar有三种打包方式:非遮蔽方式、遮蔽方式、嵌套方式(想要了解详细内容的小伙伴可以看看这篇文章 )其中嵌套方式原生不被JVM支持。
- 指定mainClass路径
- 添加fabric-chaincode相关依赖
构建工具pom.xml示例
这个图是maven方式集成Chaincode的例子。
maven方式指定mainClass路径需要注意两个地方,一个是sourceDirectory,另一个是mainClass(图中的红框部分),这两个路径叠加起来找到main方法所在的文件。
下面这个图是gradle构建工具的示例
第一步添加插件,gradle里面的插件叫shadow
第二步是指定mainClass路径,即红框里的部分
第三步是添加依赖,这里指定了两个包,一个是chaincode-java,一个是chaincode-shim
Java chaincode常用方法
Java chaincode示例
ps:不建议在init方法中做一些很耗时的操作,因为在初始化的过程中链码操作 部署的时候会调用实例化和更新的操作,那个时候会调用init方法,但是实例化和更新的操作本身就是很耗时的过程,如果在init中再添加一些处理时间比较长的操作,那么这个交易很可能就会失败。
我们会先在init方法中判断一下它的方法名是不是我们要的,如果不是我们需要的方法名就返回错误信息。
这个invoke方法相当于是一个路由器,在该方法中会根据函数的方法名来路由到具体的操作方法中去。
上面的set方法是在账本中插入一条数据
get方法是获取账本中的数据
看代码你会发现set方法和update方法是一样的,在Java chaincode方法中有:putState方法是在账本中插入或更新键值,所以set和update方法都是使用的putState方法。当然实际编写时,set方法需要先判断一下该数据是否存在,如果存在就返回“已存在”的信息并不再进行插入操作,不存在则进行插入 ;update方法也是如此,如果存在就进行更新,不存在则不能更新键值。
本文的大部分内容来自于小破站上 区块链服务网络BSN 中的 智能合约教程,根据视频内容整理而成,并非原创,感谢!