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的更多相关文章

  1. Hyperledger Fabric java chaincode 编译部署(1.4V)

    前提条件: 构建好了一个拥有四个peer 一个Order 的1.4版本的Fabric网络. 证书通过Cryptogen生成,没有使用CA服务. 开启TLS. 网络中的peer都加入了一个 名为mych ...

  2. Hyperledger Fabric Node SDK和应用开发

    Hyperledger Fabric 提供了多种语言的SDK版本,其中提出比较早.比较稳定而全面的是Node.js版本的SDK. 前面提到的fabric示例(如first-network和e2e-cl ...

  3. Hyperledger Fabric java chaincode 中文乱码问题

    开发java chaincode过程中遇到一个中文乱码的问题.都是官方的demo,请求的sdk是用java写的,部署的chaincode有两种选择(不考虑node),一种go语言写的chaincode ...

  4. 使用Fabric Node SDK进行Invoke和Query

    前面的文章都是在讲解Fabric网络的搭建和ChainCode的开发,那么在ChainCode开发完毕后,我们就需要使用Fabric SDK做应用程序的开发了.官方虽然提供了Node.JS,Java, ...

  5. HyperLedger Fabric 学习思路分享

    HyperLedger Fabric 学习思路分享 HyperLedger Fabric最初是由Digital Asset和IBM公司贡献的.由Linux基金会主办的一个超级账本项目,它是一个目前非常 ...

  6. 搭建基于hyperledger fabric的联盟社区(六) --搭建node.js服务器

    接下来我要做的是用fabric sdk来做出应用程序,代替CLI与整个区块链网络交互.并且实现一个http API,向社区提供一个简单的接口,使社区轻松的与区块链交互. 官方虽然提供了Node.JS, ...

  7. 搭建基于hyperledger fabric的联盟社区(一) --前言

    三个月前上面发了一个关于智群汇聚和问题求解研究的项目,我们公司做其中的一个子项目,就是基于区块链的科技信息联盟构建.利用区块链的去中心化特性,构建一个基于区块链的科技社区,以提供科技群智汇聚采集的基础 ...

  8. Hyperledger Fabric——balance transfer(一)启动示例

    Blacne transfer是Hyperledger fabric Node SDK的一个示例应用,主要使用了SDK中fabric-client 和 fabric-ca-client 模块中的API ...

  9. hyperledger fabric超级账本java sdk样例e2e代码流程分析

     一  checkConfig  Before     1.1  private static final TestConfig testConfig = TestConfig.getConfig() ...

  10. 区块链:基于Hyperledger Fabric的 java 客户端开发(java sdk /java api server/java event server)

    fabric针对java 开发的部分支持不是很友好.基于目前较为稳定的fabric 1.4版本,我们封装了一个java sdk,apiserver,eventServer 封装java sdk的主要目 ...

随机推荐

  1. python Pipe 双管道通信

    管道:是python多进程中一种交换数据的方式 from multiprocessing import Process,current_process,Queue,Pipe import time i ...

  2. Security Software Engineer

    Security Software Engineer Are you excited to be part of the VR revolution and work on cutting edge ...

  3. 【解决方案】chrome打开新标签页自动打开chrome://newtab并且跳转到谷歌香港

    简述天,昨天开始遇到这个问题,还没有留心,结果今天多次使用chrome的时候,就发现有些不对了..打开chrome的新标签页,结果出现了自动跳转的问题我自动跳转的是下面这个网页:https://www ...

  4. 移动web前端开发时注意事项

    在智能手机横行的时代,作为一个web前端,不会编写移动web界面,的确是件悲催的事情.当公司准备做一个微信的微网站时,作为一个多年经验的web前端码农,我迷茫了,真心不知道从何下手. 接下来就是搜一堆 ...

  5. 关于服务器端的Json文件的接收,踩了一早上的坑的问题

    JSON文件的发送和接收 服务器端接收的JSON文件也是String型的文件,因此不可以直接写成如下的格式,此错误格式下无法找到发送的{}内的数据,服务器会报错提示无法找到你需要的类型数据,也就是根本 ...

  6. Tengine 2.1.2 (nginx/1.6.2)安装配置,淘宝 Web 服务器

    简介 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很 ...

  7. BZOJ5369:[PKUSC2018]最大前缀和(状压DP)

    Description 小C是一个算法竞赛爱好者,有一天小C遇到了一个非常难的问题:求一个序列的最大子段和. 但是小C并不会做这个题,于是小C决定把序列随机打乱,然后取序列的最大前缀和作为答案. 小C ...

  8. 借助强大的IDEA开发ide高效实现equals,hashcode以及toString方法

    IDEA工具提供多种生成hashCode与equals的代码方案,注意:尽量不要使用第一个方案,第一个方案对于null不做判空处理,容易NNP问题. 对于生成toString方法方案,默认使用的是+拼 ...

  9. oracle常见受权与回收权限 grant和revoke

    1.GRANT 赋于权限 常用的系统权限集合有以下三个: CONNECT(基本的连接),   RESOURCE(程序开发),   DBA(数据库管理) 常用的数据对象权限有以下五个: ALL   ON ...

  10. Android 将拼接好并加上边框的图片保存到内存卡中

    通过前两篇文章,问们学会了怎样拼接图片.给拼接好的图片加上边框样式,但这还不够,忙活了大半天 终于拼接好并给图片美化了,但是程序一旦推出,之前做的工作都白费了.这时我们会想,能不能把拼接好的图片保存起 ...