该项目可直接在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 SDK最新教程

    Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK ...

  2. fabric sdk java教程,Fabric Java SDK最新教程

    Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK ...

  3. fabric sdk java_Hyperledger Fabric Java SDK最新教程

    Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK ...

  4. Hyperledger Fabric PHP SDK

    Hyperledger Fabric PHP SDK是社区提供的用于Hyperledger Fabric区块链应用开发的软件包,其目的在于为PHP应用提供访问Hyperledger Farbic区块链 ...

  5. fabric sdk php,Hyperledger Fabric PHP SDK

    Hyperledger Fabric PHP SDK是社区提供的用于Hyperledger Fabric区块链应用开发的软件包,其目的在于为PHP应用提供访问Hyperledger Farbic区块链 ...

  6. fabric java sdk解析channel.queryTransactionByID(txId)方法的返回值

    解析区块链上具体某一个块的内容,官方java sdk已经给出了解析案例,具体解析过程也可参考QueryHandler#queryBlockChain. 但是如果要根据交易ID(txId)查找交易信息, ...

  7. Hyperledger Fabric SDK Go构建第一个应用

    写在前面: 本文内容翻译自:https://chainhero.io/2018/03/tutorial-build-blockchain-app-2/ ,文档中的命令操作均在实际环境进行验证,现将成果 ...

  8. Hyperledger Fabric Rest API服务开发教程【含源码】

    Hyperledger Fabric Rest API服务开发教程[含源码] Hyperledger Fabric 提供了软件开发包/SDK以帮助开发者访问fabric网络 和部署在网络上的链码,但是 ...

  9. Hyperledger Fabric 词汇表

    Anchor Peer 在channel中每一个组织都有一个AnchorPeer,用于在不同的组织之间通过Gossip协议进行数据分发和同步. Block(块) 与channel上的前一个块加密链接的 ...

  10. Hyperledger Fabric 1.0 实战开发系列 第四课 搭建node.js服务器

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

最新文章

  1. 别再写 main 方法测试了,太 Low!这才是专业 Java 测试方法!
  2. iOS LaunchScreen和LaunchImage的转换启动图
  3. 浅谈电量传感器在数据中心的UPS电源中的应用
  4. LeetCode 496. 下一个更大元素 I(哈希)
  5. iOS屏幕旋转 浅析
  6. Python 3.9.0 首个迭代版本发布了
  7. ICCV2021 2D和3D通用!新医疗影像自监督SOTA(代码已开源)
  8. Linux的input输入子系统:设备驱动之按键驱动
  9. 组合式应用新利器?SaaS新时代事件网格如何解决集成标准化问题
  10. VUE的导入(HelloWord)
  11. 11 国股市熔断,“祸及”程序员?!
  12. 全球首台商用量子计算机发布!体积如同大象,算力不及笔记本
  13. ubuntu系统安装初始化脚本
  14. dw cs 5 安装失败解决方案
  15. paip.VOB DVD视频的无损分割与截取
  16. 从AWS到阿里云: 产品体系差异分析 | 凌云时刻
  17. [Intellij IDEA] 通过学生认证免费激活IDEA
  18. python 搜索引擎 词位置加权_如何提高python中的词移动距离相似度并利用加权senten提供相似度评分...
  19. STM32中 1u 0u的含义
  20. 从CRUD到自身架构师的蜕变之路?全靠这份:Java中高级核心知识全面解析

热门文章

  1. L3-025 那就别担心了 (30 分)-PAT 团体程序设计天梯赛 GPLT
  2. [Python] L1-007. 念数字-PAT团体程序设计天梯赛GPLT
  3. 蓝桥杯 ALGO-113 算法训练 数的统计
  4. PAT 乙级 1005. 继续(3n+1)猜想 (25) Java版
  5. LeetCode 113. Path Sum II
  6. python安装离线包window_python 离线安装unrar库
  7. java如何解析图片里面文字_如何识别图片中的文字 讯飞输入法文字扫描快捷翻译教程...
  8. Mysql -update - Error Code: 1175. You are using safe update mode and you tried to update a table wit
  9. 12月第2周业务风控关注 | 公安部:严打自媒体“网络水军”违法犯罪,关闭大V账号1100余个...
  10. ceph集群报错:HEALTH_ERR 1 pgs inconsistent; 1 scrub errors