HyperLedger/Fabric JAVA-SDK with 1.1
HyperLedger/Fabric JAVA-SDK with 1.1
该项目可直接在github上访问。
该项目介绍如何使用fabric-sdk-java框架,基于fabric-sdk-java v1.1正式版开发,可向下兼容1.0版本。
该项目没有对原JAVA-SDK做修改,主要是结合HyperLedger Fabric与fabric-sdk-java中的交互方式做了个人感觉更为清晰的描述,希望能够帮助更多的人尽快熟悉fabric-sdk-java的操作流程和方式。
sdk-advance
sdk-advance是基于fabric-sdk-java v1.1的服务,其主要目的是为了更简单的使用fabric-sdk-java,对原有的调用方法做了进一步封装,主要提供了各种中转对象,如智能合约、通道、排序服务、节点、用户等等,最终将所有的中转对象交由一个中转组织来负责配置,其对外提供服务的方式则交给FabricManager来掌管。
该项目仅作为学习分享的形式提交维护,关于生产部署方面,sdk-advance与app的交互可自行选择采用thrift或protobuf等数据传输协议实现,这里并没有提供该方案的具体实现,需要自己动手解决。
sdk-advance-intermediate
intermediate系列对象是该项目的主要封装对象,间接屏蔽了真实应用层与fabric-sdk-java之间的直接交互。
- IntermediateOrderer
对于Orderer,我们需要知道所选组织名称,同时还需要知道Orderer的服务器域名及真实访问地址。这里的服务器域名是指由crypto-config.yaml中进行指定。
该对象主要提供了对Orderer的服务器域名及真实访问地址的封装。 - IntermediatePeer
Peer是部署于本地节点的配置对象,主要包括当前指定的组织节点域名、当前指定的组织节点事件域名、当前指定的组织节点访问地址、当前指定的组织节点事件监听访问地址以及当前peer是否增加Event事件处理。这里的主要配置信息也由crypto-config.yaml中进行指定 - IntermediateChannel
每一个Peer所加入的Channel都有独立的通道信息,包括名称或通道tx文件等。IntermediateChannel中定义了通道名称,除此之外,还针对上面两个对象进行了调用,并最终生成了Channel对象。
IntermediateChannel中已经开始提供对外服务了,主要依赖于Channel对象所提供的,包括最基本的Peer加入频道的方法。
另外,IntermediateChannel还提供了一系列基本的溯源方法,包括查询当前频道的链信息,包括链长度、当前最新区块hash以及当前最新区块的上一区块hash、在指定频道内根据transactionID查询区块、在指定频道内根据hash查询区块以及在指定频道内根据区块高度查询区块等方法。 - IntermediateChaincodeID
IntermediateChaincodeID对象与IntermediateChannel相似,除了包含了必须的成员参数外,也提供了一些对外服务。在IntermediateChaincodeID中主要对智能合约名称、包含智能合约的go环境路径、智能合约安装路径、智能合约版本号、指定ID的智能合约以及单个提案请求的超时时间以毫秒为单位和事务等待时间以秒为单位。
同时对外提供了安装智能合约、实例化智能合约、升级智能合约、执行智能合约以及查询智能合约的服务。 - IntermediateUser
Fabric中有用户的概念,当然除了用户之外,在1.1中也有组织、节点等基于CA服务的概念。IntermediateUser主要就是用来处理用户CA信息的,目前尚未对此类服务提供更好的封装策略,后续更新中会逐步加入进来,以便提供更简便的实现方案。当前的具体实现可参考IntermediateOrg。 - IntermediateOrg
上述无论是排序服务、节点服务或是通道、合约等内容,都应该被同一个组织所拥有,这里的同一个是指单体组织,而不是只为一个组织服务,整个基于Fabric的区块链网络至少应该为一个组织提供服务。
在IntermediateOrg中集合了已有的对象信息,并从中生成了组织用户以便调用Fabric网络中的接口数据。案例中的方案并非最优方案,关于Fabric CA的实践还没有完成(按照官方的Demo实现无法跑通,如果有能够实现的朋友,欢迎提交代码)。
sdk-advance-manager
- OrgManager
组织生成器,该对象已经完全暴露给APP所使用,可以通过SimpleManager对象查看其主要用法。通过OrgManager对外暴露的服务生成系列Intermediate对象,并最终使用use方法确定调用的组织具体对象来生成真正提供Fabric区块链网络服务的FabricManager。
在使用OrgManager的时候,如果有进一步开发SAAS或更深层BAAS服务的想法,建议不要直接使用SimpleManager中的方案,而是结合关系型数据库如MySQL等解决方案,将组织中的相关数据持久化,以便后台可以直接获取并调用。 - FabricManager
区块链网络服务管理器FabricManager,作为APP直接调用Fabric区块链网络的入口对象,该对象提供了Channel和ChaincodeID相关的所有接口。
simple
simple是一个基于spring-boot的项目,在simple中主要关注SimpleManager对象的使用,该对象的使用建议根据自身业务的实际需求重新包装上线,但直接基于此项目应用也没什么大问题。我的这个simple中的ip的自己申请的服务器,大家可以随便测试,但不保证有效期,建议自行搭建本地服务测试。
simple-demo
调用示例:
OrgManager orgManager = new OrgManager();
orgManager
.init("Org1")
.setUser("Admin", getCryptoConfigPath("aberic"), getChannleArtifactsPath("aberic"))
.setCA("ca", "http://118.89.243.236:7054")
.setPeers("Org1MSP", "org1.example.com")
.addPeer("peer0.org1.example.com", "peer0.org1.example.com", "grpc://118.89.243.236:7051", "grpc://118.89.243.236:7053", true)
.setOrderers("example.com")
.addOrderer("orderer.example.com", "grpc://118.89.243.236:7050")
.setChannel("mychannel")
.setChainCode("test2cc", "/code", "chaincode/chaincode_example02", "1.2", 90000, 120)
.openTLS(true)
.openCATLS(false)
.setBlockListener(map -> {
logger.debug(map.get("code"));
logger.debug(map.get("data"));
})
.add();
FabricManager fabricManager = orgManager.use("Org1");
fabricManager.install();
fabricManager.instantiate(argArray);
fabricManager.upgrade(argArray);
fabricManager…
HyperLedger/Fabric JAVA-SDK with 1.1的更多相关文章
- Hyperledger Fabric java chaincode 编译部署(1.4V)
前提条件: 构建好了一个拥有四个peer 一个Order 的1.4版本的Fabric网络. 证书通过Cryptogen生成,没有使用CA服务. 开启TLS. 网络中的peer都加入了一个 名为mych ...
- Hyperledger Fabric Node SDK和应用开发
Hyperledger Fabric 提供了多种语言的SDK版本,其中提出比较早.比较稳定而全面的是Node.js版本的SDK. 前面提到的fabric示例(如first-network和e2e-cl ...
- Hyperledger Fabric java chaincode 中文乱码问题
开发java chaincode过程中遇到一个中文乱码的问题.都是官方的demo,请求的sdk是用java写的,部署的chaincode有两种选择(不考虑node),一种go语言写的chaincode ...
- 使用Fabric Node SDK进行Invoke和Query
前面的文章都是在讲解Fabric网络的搭建和ChainCode的开发,那么在ChainCode开发完毕后,我们就需要使用Fabric SDK做应用程序的开发了.官方虽然提供了Node.JS,Java, ...
- HyperLedger Fabric 学习思路分享
HyperLedger Fabric 学习思路分享 HyperLedger Fabric最初是由Digital Asset和IBM公司贡献的.由Linux基金会主办的一个超级账本项目,它是一个目前非常 ...
- 搭建基于hyperledger fabric的联盟社区(六) --搭建node.js服务器
接下来我要做的是用fabric sdk来做出应用程序,代替CLI与整个区块链网络交互.并且实现一个http API,向社区提供一个简单的接口,使社区轻松的与区块链交互. 官方虽然提供了Node.JS, ...
- 搭建基于hyperledger fabric的联盟社区(一) --前言
三个月前上面发了一个关于智群汇聚和问题求解研究的项目,我们公司做其中的一个子项目,就是基于区块链的科技信息联盟构建.利用区块链的去中心化特性,构建一个基于区块链的科技社区,以提供科技群智汇聚采集的基础 ...
- Hyperledger Fabric——balance transfer(一)启动示例
Blacne transfer是Hyperledger fabric Node SDK的一个示例应用,主要使用了SDK中fabric-client 和 fabric-ca-client 模块中的API ...
- hyperledger fabric超级账本java sdk样例e2e代码流程分析
一 checkConfig Before 1.1 private static final TestConfig testConfig = TestConfig.getConfig() ...
- 区块链:基于Hyperledger Fabric的 java 客户端开发(java sdk /java api server/java event server)
fabric针对java 开发的部分支持不是很友好.基于目前较为稳定的fabric 1.4版本,我们封装了一个java sdk,apiserver,eventServer 封装java sdk的主要目 ...
随机推荐
- Python代码小片段
1.前面变量值的改变不影响后面变量的调用 index=1 index,a=2,index+1 print(a,index) #2 2 2.类的继承(子类实例如何调用父类同名方法) class a: d ...
- vue组件-子组件向父组件传递数据-自定义事件
自定义事件 我们知道,父组件是使用 props 传递数据给子组件,但如果子组件要把数据传递回去,应该怎样做?那就是自定义事件!
- Breaking Down Type Erasure in Swift
Type Erasure Pattern We can use the type erasure pattern to combine both generic type parameters and ...
- php 数据集转换树、递归重组节点信息多维数组(转)
一.将数据集转换成树 /** * 将返回的数据集转换成树 * @param array $list 数据集 * @param string $pk 主键 * @param string $pid 父节 ...
- 11.C++和C的区别,什么是面向对象
c++封装更好,调用接口,c调用子函数 1.首先C和C++在基础语句上没有太大区别,c++在c基础上改进,兼容大部分c的语法结构.c++面向对象,c面向过程. 2.新增new和delete的语法,引用 ...
- Drool实战系列(二)之eclipse安装drools插件
这里演示是drools7.5.0,大家可以根据自己需要安装不同的drools版本 drools安装地址: http://download.jboss.org/drools/release/ 一. 二. ...
- Springmvc常见问题
问题一:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userCont ...
- Java设置以及获取JavaBean私有属性进阶
在上一篇博客中讲到使用Java提供的原生API设置以及获取一个JavaBean的私有属性. 但是使用Java的原生API过于复杂,有没有更加简单的方法呢?答案是肯定的.下面介绍一个开元工具包来非常方便 ...
- 架构图+kubernetes 问题理解 -- kube-pproxy - endpoint
1.详述kube-proxy原理,一个请求是如何经过层层转发落到某个pod上的整个过程.请求可能来自pod也可能来自外部. 1.1kube-proxy为集群提供service功能,相同功能的pods对 ...
- Vim2.1-Vim简明教程【CoolShell】【非原创】
vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...