Fabric智能合约——Chaincode(二)如何使用Java语言开发智能合约

构建工具

Java链码支持两种构建工具gradlemaven。两种构建工具都需要如下三个步骤:

  • 添加插件:遮蔽方式的FatJar——把所有的依赖包都打包到一个jar中。FatJar有三种打包方式:非遮蔽方式、遮蔽方式、嵌套方式(想要了解详细内容的小伙伴可以看看这篇文章Java 打包 FatJar 方法小结_zzy7075的专栏-CSDN博客_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 中的 智能合约教程,根据视频内容整理而成,并非原创,感谢!

猜你喜欢

转载自blog.csdn.net/m0_51245596/article/details/121984969
今日推荐