区块链开发框架(区块链开发框架java)

本篇文章给大家谈谈区块链开发框架,以及区块链开发框架java对应的知识点,小编致力于为用户带来全面可靠的币圈信息,希望对各位有所帮助!

摘要

您熟知并喜爱的区块链有一个相当严格的结构。作为一名开发人员,在这种情况下您有两种选择:在受限的环境中构建应用程序,或者进行代码分叉并创建自己的链。然而,创建自己的链并非易事——您还需要启动网络并决定所使用的共识机制。

Tendermint是用来启动区块链的开源软件,让您可以用任何语言编写应用程序。更厉害的是,它可以与其他区块链进行通信。

创建加密货币或区块链网络需要投入大量工作,远远不止于初始化数据库。它需要在安全性、去中心化和可扩展性之间为激励和权衡取得微妙的平衡。

有些团队已经 探索 了一系列不同的方法,来构建最强大的区块链生态系统,这也在情理之中了。在这篇文章中,我们将详细了解其中一种方法:Tendermint。

如果您对区块链有所了解,就会感觉Tendermint的大部分内容都似曾相识。在深入研究之前,我们首先回顾一些关键概念。

Tendermint是一种 区块链堆栈 。比特币和以太坊等同样也是区块链堆栈。请记住,这并非只关乎区块链数据库本身,还关乎节点的对等网络、它们如何相互作用,以及您通过交易和智能合约可以做到的事情。其目标是在即便不信任其他任何人的情况下,让所有人都统一一种 状态 (比如数据库的快照)。

在很大程度上,如今的主要区块链已经想出了达成这一点的“秘籍”。然而,它们通常依赖于 一体化架构 :这是一个软件工程概念,意味着组件相互连接且相互依赖。您不能从中取走一部分,然后插入到别的架构中。

如果您想保证灵活性,一体化架构并非理想的选择。在相反类型的模型(具有 模块化架构 )中,您可以在不必担心破坏任何架构的情况下调整单个组件。对于一体化架构,您在升级单个组件时必须确保每个组件保持兼容。

现在,我们理解了其中的差别,可以继续来了解Tendermint协议。

您可能已经知道,比特币最大的创新之处在于它解决了所谓的 拜占庭将军问题 。在这里我们不会详细讨论这个问题(如果您感兴趣,请参阅我们关于拜占庭容错的文章)。您只需要知道,它详细说明了参与者必须在分布式环境中进行通信的场景。

这些参与者不知道其他人是否在撒谎,也不知道他们之间发送的消息是否被篡改。即便存在这些问题,如果参与者可以针对一组事实达成一致,则系统会被认为存在 拜占庭容错 。

显然,在去中心化的环境中,正确把握这一点至关重要。不具有拜占庭容错的加密货币并不能真正发挥作用——您需要某种中心化组织进行协调,这就与目的背道而驰。如果很多数字货币一样,比特币通过使用工作量证明(PoW)共识算法来解决这个问题。

我们已经了解一体化/模块化架构之间的区别,也知道去中心化加密货币网络需要具有拜占庭容错能力。下面我们谈谈我们通常在区块链中看到的三层架构: 应用 层、 共识 层和 网络 层。

共识层和网络层是让网络节点相互通信并尽量就一组事实达成一致的地方。应用层则可让您自行进行操作——好比以太坊的去中心化应用程序和智能合约或者比特币中的自定义交易。

然而,Tendermint是公司的名称(由最初撰写白皮书的开发人员Jae Kwon创立),而Tendermint Core是这家公司正在开发的实际软件。更具体地说,这款软件有两个主要组件:核心共识引擎(Tendermint core)和应用程序接口(ABCI)。

Tendermint Core是一个能够实现容错的系统。本质上,它是一台大型分布式计算机,可在同一时间向每个人显示相同的状态。只要至少三分之二的参与者是诚实的,一切就会顺利进行。但几乎每个区块链都是这样的,难道不是吗?它究竟有什么特别之处?

首先,Tendermint Core使用的共识机制是权益证明(PoS)。每个周期从一组验证者中选择一个随机节点。随后,该节点必须提出下一个区块(在所谓的 循环 系统上进行)。如果其他验证者对它满意,就会添加新的区块,并更新链。结果可以即时确定——与比特币或以太坊不同,它不需要等待确认来确保您的交易有效。

别着急,它还有其他特色!Tendermint Core采用模块化架构,应用层与共识层和网络层分离。简而言之,这意味着您可以将自己的应用程序层插入到堆栈中,而无需担心繁杂的激励机制或共识算法。

这对终端用户来说并不值得大惊小怪。但对于开发人员来说,能够利用现有框架就意味着他们可以直接构建应用程序,而无需建立整个网络。来自区块链的数据可以通过管道传输到集成层,让开发人员可以用任何语言编写软件。

神奇的事情发生在所谓的应用程序区块链界面(或简称ABCI)上。您可以把它想象成树莓派电脑上的GPIO引脚。您可将各种第三方组件连接到这些引脚,从LED到精心设计的植物洒水系统。ABCI以类似的方式定义了区块链以及在区块链上运行的应用程序之间的边界。

应用程序接口和共识机制的分离为分布式应用程序提供了更大的灵活性,可以将任何编程语言合并到它们的业务逻辑当中。

您只需要看看Ethermint这个具体示例就可以知道它的用处:Ethermint采用了以太坊代码库,删除了工作量证明机制,并将以太坊虚拟机建立在Tendermint之上。

这使得一些有趣的操作成为可能。首先,以太坊开发人员可轻松将他们的智能合约移植到新引擎上,或者使用Solidity语言编写新的合约。除了提供以太坊功能之外,Ethermint还可作为以太坊权益证明,让我们一睹Casper在以太坊2.0中实现的样子。

“区块链互联网”的承诺吸引了许多人使用Tendermint协议。互操作性是加密货币领域期待已久的一个补充,因为它意味着数百个单独的区块链将变得交叉兼容。

目前,Cosmos SDK已投入大量工作,Cosmos SDK是一个开源框架,让任何人都能创建特定于应用程序的公共或私有区块链。随后,这些区块链可以通过所谓的Cosmos Hub接入更广泛的Cosmos网络,并在那里与其他区块链进行交流。

很多热门的项目已经使用Cosmos SDK来构建,比如BSC、KAVA、Band Protocol、Terra和IRISnet。

作为一个区块链引擎,Tendermint已经引起了加密货币领域众多利益相关者的注意,包括开发人员和终端用户。

区块链开发框架(区块链开发框架java)

当前主流的区块链架构包含六个层级:网络层、数据层、共识层、激励层、合约层和应用层。图中将数据层和网络层的位置进行了对调,主要用途将在下一节中详述。

网络层:区块链网络本质是一个P2P(Peer-to-peer点对点)的网络,网络中的资源和服务分散在所有节点上,信息的传输和服务的实现都直接在节点之间进行,可以无需中间环节和服务器的介入。每一个节点既接收信息,也产生信息,节点之间通过维护一个共同的区块链来同步信息,当一个节点创造出新的区块后便以广播的形式通知其他节点,其他节点收到信息后对该区块进行验证,并在该区块的基础上去创建新的区块,从而达到全网共同维护一个底层账本的作用。所以网络层会涉及到P2P网络,传播机制,验证机制等的设计,显而易见,这些设计都能影响到区块信息的确认速度,网络层可以作为区块链技术可扩展方案中的一个研究方向;

数据层:区块链的底层数据是一个区块+链表的数据结构,它包括数据区块、链式结构、时间戳、哈希函数、Merkle树、非对称加密等设计。其中数据区块、链式结构都可作为区块链技术可扩展方案对数据层研究时的改进方向。

共识层:它是让高度分散的节点对区块数据的有效性达到快速共识的基础,主要的共识机制有POW(Proof Of Work工作量证明机制),POS(Proof of Stake权益证明机制),DPOS(Delegated Proof of Stake委托权益证明机制)和PBFT(Practical Byzantine Fault Tolerance实用拜占庭容错)等,它们一直是区块链技术可扩展方案中的重头戏。

激励层:它是大家常说的挖矿机制,用来设计一定的经济激励模型,鼓励节点来参与区块链的安全验证工作,包括发行机制,分配机制的设计等。这个层级的改进貌似与区块链可扩展并无直接联系。

合约层:主要是指各种脚本代码、算法机制以及智能合约等。第一代区块链严格讲这一层是缺失的,所以它们只能进行交易,而无法用于其他的领域或是进行其他的逻辑处理,合约层的出现,使得在其他领域使用区块链成为了现实,以太坊中这部分包括了EVM(以太坊虚拟机)和智能合约两部分。这个层级的改进貌似给区块链可扩展提供了潜在的新方向,但结构上来看貌似并无直接联系

应用层:它是区块链的展示层,包括各种应用场景和案例。如以太坊使用的是truffle和web3-js.区块链的应用层可以是移动端,web端,或是是融合进现有的服务器,把当前的业务服务器当成应用层。这个层级的改进貌似也给区块链可扩展提供了潜在的新方向,但结构上来看貌似并无直接联系。

链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。

Fabric 是超级账本联盟推出的核心区块链框架,它适合在复杂的企业内和企业间搭建联盟链。根据超级账本联盟的目标, Fabric 被建设为一个模块化的、支持可插拔组件的基础联盟链框架。;

与以太坊系的Quorum不同,Fabric从一开始就只考虑企业间的应用。其独有的channel概念,将企业根据业务目的不同以不同的子网连接起来, 每一个子网对应一个channel,而每个channel有自己独立的区块链。而Quorum很显然是只有一个公网(所有企业节点都加入进去),企业与企业间的私有业务是通过Private Manager 完成的。

理解channel的最简单方法就是,将它类比为一个消息服务提供的Topic,实际上Fabic最早就是基于Kafka?的分布式消息服务来实现。

? ? ? ?在Fabric网络中,一个企业可以有一个或多个节点加入整个联盟链;一个企业可以加入1个或者多个Channel(子网);? 一个节点可以加入1个或者多个channel。每个channel构成一个子网,所以Fabric 是 一种由子网组成的网络。

那么Fabric是怎么实现智能合约的执行和完成业务上链(将事务结果记录在区块链里)的呢?

与其它框架不同, Fabric 将整个过程分成了三个阶段:

业务背书阶段 : 客户的请求发送的背书节点,通过智能合约完成业务的计算(但不更新状态),并完成背书;将背书结果返回个客户端。

业务的排序阶段 : 客户端将背书结果通过Channel被发送到排序节点(orderer),在排序节点完成事务的排序,并打包到block里,最后下发给所有连接到channel的节点。

业务验证并写入账本阶段 : 通过Gossip 网络,所有Channel的节点都会接收到新的block,节点会验证block中的每一个事务,确定是否有效:有效地将会跟新world state,无效的将会标志为“无效”,不会更新World state,但整个block会被完整的加入到帐本中(包括无效的事务)。

根据以上的描述,Fabric 节点实际可以分为? ,普通节点和Order节点:

?Peer, 普通节点, 完成背书(包括只能合约的执行)和验证.

orderer,? 排序节点,完成排序。

加入orderer节点的Fabric网络可以被描述如下:

每一个Channel,都定义了所有属于channel的节点,但是并不需要所有节点都连接到Orderer 节点(节点间可以通过gossip 协议通讯来传播私有数据或事务).

? ? ? ?在区块链中,共识是区块链的基础。与公有链不同,联盟链的共识要求所有加入账本的事务是确定的、最终的,也就是不可以有分叉,区块与区块间的顺序是一定的,只存在唯一条链。在Fabric 中,这个客观需求正是由排序实现的,所有的事务将被提交给orderer节点获得确定的顺序,并最终打包成block进入帐本。 Fabric 从1.4.1开始支持基于Raft实现排序服务,? 可以认为基于Raft实现共识。

基于RAFT的排序服务相对于早期的Kafka 具有更好的分布性,配置更加简单,是联盟链里常用的一个常用的达成共识的算法,Quorum就 默认使用RAFT作为共识层。简单的说,RAFT是一个leader和follower的模式, 所有加入RAFT网络的节点,任意时候都有一个leader,? 只有这个leader有权决定事务的顺序,并打包成Block,其它节点只能作为follower提交事务和同步block。

基于FAFT网络,每个企业可以有一个或多个节点参与到Orderer中去。在Frabric中企业间的网络连接可以变化成如下形式:

? ? ? ?区块链的使用用户在以太网中被称作EOA(External of Account), EOA的载体是钱包。我们沿用这个概念,来看看Fabric是如何实现用户和发起事务的。Fabric中EOA是一个CA中心发布的certificate(x.509),一个Certificate代表一个Identity(这与以太坊还是有很大区别的, 以太坊中一个EOA其实是一个hash地址),EOA能够参与的channel以及被授权的操作是有channel的MSP( Membership Service ?Provider)决定的(如下图)。

注:certificate 是一种密码学上验证身份的通用做法; certificate包含了个人的信息,公钥以及发布这个certificate的CA的签名。验证方只需要拥有这个CA的证书(包含CA的公钥),就可以验证这个签名是否正确,certificate的内容是否有篡改。简单的说,通过CA和Certificate,我们可以获得一个可验证的的身份和信任链。

? ? ? 如上图,fabric中通要使用Wallet作为EOA的载体,一个Wallet中可以包含多个Identity(x.509 certificate)。 Identity 通过 CA提供的信任链来验证正确性。

? 验证了身份之后, Fabric 通过MSP在区块链网络中解决该身份是否代表组织的成员和在组织内具有什么角色。例如,channel首先会验证当前用户Identity是否是有效地身份,然后通过MSP查看其所处的企业和具有的角色,最终确定该用户是否有权执行操作。

可以说,Fabric的访问控制是通过MSP来完成的。在每一个需要访问控制的地方都需要定义一个MSP。? 例如,每个channel都定义一个MSP,这个MSP规定了在channel范围内资源的访问权限。 MSP 是Fabric里一个晦涩难懂的概念,也是其赋予企业间安全访问的基础。

前文提到, Fabric 将业务处理和上网分成了三个部分, 背书,排序,验证后加入账本。

其中背书是Fabric执行智能合约的阶段。以太坊中,智能合约是在EVM中执行的,有多种语言支持。 在Fabric,智能合约被称为chaincode: 一个chaincode 可以理解为是智能合约的容器,可以包含一个或多个智能合约, 不用于EVM, chaincode是在 JVM 或NodeJS中执行。

客户应用程序通过智能合约来访问账本,每一个可访问的智能合约都被安装在客户端可以访问的节点上,并被定义在channel里。(有只能合约的节点被称为背书节点,没有只能合约的节点被称未提交节点,提交节点只维护账本)

客户应用提交一个交易请求, 请求到达背书节点, 背书节点首先会验证客户的签名,确保客户的身份有权执行本次交易,接着执行交易提及的智能合约(chaincode),并生成一个背书响应(或者叫做交易提案,tran-proposal)。这个背书响应中通常包含World state 的读集合,写集合, 以及节点对本次交易的签名。这里与以太坊系联盟链最主要的不同是: 背书阶段只模拟交易,并不真正更新交易结果。 而真正更新交易在第三阶段完成。背书节点最后将生成的背书响应fanhui给客户端, 智能合约部分的执行就结束了。

通常一个交易的执行需要多方的签名,所以客户端需要将一个交易发送给多个背书节点,这些背书节点的选择需要满足背书策略的要求。

下图是一个包含有客户、背书节点,提交节点的网络示意图。

根据Fabric官方的参考文档,客户交易的正果过程可使用下图描述。

如上图,从1到3,为背书阶段,4为排序阶段,4.1,4,2, 5为验证提交阶段。 参考 Frabic的节点 概念,可以了解更多在交易细节的概念。??

总的来看, Fabric 更专注于企业间,通过上文,可以让大家对Fabric的基本构成与概念有一个总的了解。? Fabric本身并不神秘,都是使用的现有的企业间的技术。要更好的了解,建议参考阅读分布式消息系统和企业的安全基础设施(CA相关)的支持。与以太坊系联盟链实现比较,? Fabric 的子网更概念对于复杂企业间应用适应更强,但是其复杂的安全考量,使得运营成本很高,另外,Fabric 使用Certificate做为用户身份,有很大的局限性,在新的2.0里,Fabric对于此处将有所改变。

下一篇,我们将来看看Sawtooth?, 由Inter 提供的区块链框架。

区块链之联盟链(一) 认识以太坊

区块链之联盟链(二) 认识Quotum

区块链之联盟链(三) 认识Fabric

区块链之联盟链(四) 认识Sawtooth

学习Hyperledger Fabric有一阵子了,从网络搭建、SDK调用到基于Spring的Gateway的开发,一路走来,感觉还是有不少的坑。最近,终于有空,将这些东西整理出来,希望能帮到同路的小伙伴们。详细文档地址: 。

前一阵子,曾整理过一篇文章,详细的介绍了Fabirc网络的搭建和部署,小伙伴们请自行查阅:推荐几个开源项目,教你快速搭建Hyperledger Fabric区块链网络

1. Java SDK: GitHub – hyperledger/fabric-sdk-java

2. Gateway: GitHub – hyperledger/fabric-gateway-java

这是我基于官方的Gateway项目,结合Spring MVC做出的一套框架。主要是将Chaincode的函数调用,包装成了Spring的服务。

1. 项目地址: GitHub – ecsoya/spring-fabric-gateway

2. 详细文档:

3. Maven地址:

一个精简版的Fabric区块链浏览器。

1. 项目地址: GitHub – ecsoya/spring-fabric-gateway

2. 详细文档:

3. Maven地址:

以上的项目,包含官方的SDK和Gateway,都离不开 Fabric 网络配置文件的支持。

所谓的配置文件,就是将所有的组织、Peer和其相关的证书,全部配置到一个JSON文件或YAML文件中,方便在项目中读取。

详细文档:

1. 文档:

2. 源码: GitHub – ecsoya/fabric-demo

区块链开发很复杂。它涉及复杂的技术(包括先进的密码学和分布式网络通信)你必须掌握这些技术,以便为应用程序的运行和用户的信任提供一个安全平台。还有一些围绕规模、治理、互操作性和可升级性的棘手问题需要解决。这种复杂性为开发者创造了一个需要克服的高门槛。考虑到这一点,要回答的第一个问题是:你想建立什么?

Substrate并不完全适合每一个用例、应用程序或项目。然而,如果你想建立一个区块链,那么Substrate可能是一个完美的选择。

Substrate是一个软件开发工具包(SDK),专门为您提供所有区块链的基本组件,使您能够专注于制作使您的链独特和创新的逻辑。与其他分布式账本平台不同,Substrate是。

大多数区块链平台都有非常紧密的耦合、意见一致的子系统,很难脱钩。在基于另一个区块链分叉的链上也有风险,这些非常明显的耦合会从根本上破坏区块链系统本身。

Substrate是一个完全模块化的区块链框架,让你通过选择适合你的项目的网络堆栈、共识模型或治理方法,或通过创建你自己的组件,组成一个有明确解耦组件的链。

通过Substrate,你可以部署一个为你的规格设计和建造的区块链,但也可以随着你不断变化的需求而发展。

所有的Substrate架构和工具都在开源许可下提供。Substrate框架的核心组件使用开放协议,如libp2p和jsonRPC,同时授权你决定你想定制多少区块链架构。Substrate还有一个庞大的、活跃的、有帮助的开发者社区,为生态系统做出贡献。来自社区的贡献增强了可用的能力,使您能够随着区块链的发展将其纳入自己的区块链中。

大多数区块链平台提供的与其他区块链网络互动的能力有限。所有基于Substrate的区块链都可以通过跨共识信息传递(XCM)与其他区块链进行互操作。Substrate可用于创建作为独立网络的链(单人链),或与中继链紧密耦合,以分享它的安全,作为一个准链。

Substrate是为可升级、可组合和可适应而建立的。状态转换逻辑–Substrate runtime–是一个独立的WebAssembly对象。节点可以被赋予在特定条件下完全改变运行时本身的能力,在整个网络范围内诱发运行时升级。因此,”forkless “升级是可能的,因为在大多数情况下,节点不需要采取任何行动就可以使用这个新的运行时。随着时间的推移,网络的运行时协议可以无缝地,也许是彻底地,随着用户的需求而发展。

其实框架很简单的,你可以认为它是一个工具,甚至一个插件。
框架的作用,就是将一个公用的,常用的技术,封装起来,
帮你处理一些基础的东西,可以让你不用再去写那些繁琐的东西。
就拿你要学的struts来说:他本质上也是用java写的,和我们自己写的类没有区别,他实现的东西我们自己也可以实现。
比如接收客户端的数据,我们是用request.getParameter()来的,但是如果有很多个参数,我们要写很多个,很麻烦。struts它就帮我们实现,不用我们写,直接写个属性,就可以得到。其实本质还是用request.getParameter()。。
所以你不要再在意框架是什么东西,等你接触了就知道了。你把它当做一个工具来用,这就是框架。

以上就是小编小编对区块链开发框架和区块链开发框架java的总结,更多区块链开发框架java方面的知识可以关注我们,在网站首页进行搜索你想知道的!

© 版权声明

相关文章