HyperLedger/Fabric JAVA-SDK with 1.1

摘要:
例如,智能合约、渠道、分拣服务、节点、用户等,sdk advanced和app之间的交互可以通过使用节俭或protobuf等数据传输协议来实现。该对象主要提供Orderer的服务器域名和实际访问地址的封装。主要包括当前指定的组织节点域名、当前指定的机构节点事件域名、当前所指定的机构结点访问地址、当前所的机构结点事件监听访问地址以及当前对等方是否添加事件处理。
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

调用示例:

 1 OrgManager orgManager = new OrgManager();
 2 orgManager
 3     .init("Org1")
 4     .setUser("Admin", getCryptoConfigPath("aberic"), getChannleArtifactsPath("aberic"))
 5     .setCA("ca", "http://118.89.243.236:7054")
 6     .setPeers("Org1MSP", "org1.example.com")
 7     .addPeer("peer0.org1.example.com", "peer0.org1.example.com", "grpc://118.89.243.236:7051", "grpc://118.89.243.236:7053", true)
 8     .setOrderers("example.com")
 9     .addOrderer("orderer.example.com", "grpc://118.89.243.236:7050")
10     .setChannel("mychannel")
11     .setChainCode("test2cc", "/code", "chaincode/chaincode_example02", "1.2", 90000, 120)
12     .openTLS(true)
13     .openCATLS(false)
14     .setBlockListener(map -> {
15             logger.debug(map.get("code"));
16             logger.debug(map.get("data"));
17         })
18     .add();
19     FabricManager fabricManager = orgManager.use("Org1");
20     fabricManager.install();
21     fabricManager.instantiate(argArray);
22     fabricManager.upgrade(argArray);
23     fabricManager…

免责声明:文章转载自《HyperLedger/Fabric JAVA-SDK with 1.1》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇07 流程控制 03嵌套循环Data Profiling Task下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基于Selenium2+Java的UI自动化(7)- 模拟键盘鼠标操作

webdriver提供Actions类,来模拟鼠标点击、悬浮、拖拽、键盘输入等操作; 一、鼠标双击、右击 selenium模拟鼠标单击是用WebElement.click(); 方法,但是双击、右击,需要使用Actions类来模拟; package com.automation.actions; import org.openqa.selenium...

我的第一个油猴脚本--微博超话自动签到

简介 用户脚本是一段代码,它们能够优化您的网页浏览体验。安装之后,有些脚本能为网站添加新的功能,有些能使网站的界面更加易用,有些则能隐藏网站上烦人的部分内容。其中常见的有 油猴插件、ChromeExtentions 由于油猴脚本只用一个JS文档,因而相对于ChromeExtentions比较简单。因此便从油猴脚本开始,首先基本的文件架构是: // ==Us...

httpd三种MPM的原理剖析

apache httpd系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 本文专讲httpd MPM。为了更完整、权威,我先把apache httpd 2.4关于prefork、worker和event的官方手册大致翻译了一遍,也就是本文的前3节。水平有限,难免翻译的"鬼才看得懂",还请见谅。...

C#笔记21:多线程之线程同步中的锁定lock、Monitor

C#笔记21:多线程之线程同步中的锁定lock、Monitor 1:什么是锁 2:如何选择锁定对象 3:如何锁定集合 4:Monitor 1:什么是锁      lock 语句可以用来确保代码块完成运行,而不会被其他线程中断。这是通过在代码块运行期间为给定对象获取互斥锁来实现的。 2:如何选择锁定对象      提供给 lock 关键字的参数必须为基于引用...

C#位运算讲解与示例

今天在项目中遇到按位或组合权限串的问题: 首先每一个权限数都是2的N次方数 如:k1=2 ; //添加           k2=4 ; //删除           k3=8; //修改           ... 如此定义功能权限数,当需要组合权限时,就需要对各个所拥有的权限数按位或了。 如:          purview = k2|k3; //...

[转载]java中Statement详细用法

1、创建 Statement 对象建立了到特定数据库的连接之后,就可用该连接发送 SQL 语句。Statement 对象用 Connection 的方法 createStatement 创建,如下列代码段中所示:Connection con = DriverManager.getConnection(url, "sunny", "");Statement...