以太坊的企业系统集成

最流行的开源Java集成库——Apache Camel现在支持以太坊的JSON-RPC API。

以太坊生态系统

以太坊是一个开源,公共,区块链平台,用于运行智能合约。它提供了一个去中心化的图灵完备虚拟机,可以执行脚本和加密货币,用于补偿参与者挖掘节点进行的计算或减轻垃圾邮件。今天,以太坊是最成熟和最成熟的区块链平台之一,受益于小型和大型公司,非营利组织和政府。关于以太坊生态系统及其移动速度,可以说很多。但事实不言而喻,以太坊有势头和技术的所有迹象:

  • 以太坊的开发人员比任何其他区块链平台都要活跃一个数量级,并且根据梅特卡夫定律的规定,这一差距日益扩大。以太坊编码学校CryptoZombies拥有超过20万用户,Truffle开发框架拥有超过50万的下载量
  • 以太坊平台拥有最丰富的工具和基础设施生态系统,用于构建去中心化的应用程序:TruffleInfuraWeb3.jsOpenZeppelinGethParityGanacheMetaMaskCryptoZombiesMyCryptoEtherscanERC20(用于ICO)等。
  • 云平台Amazon Web Services和Microsoft Azure为一键式以太坊基础架构部署和管理提供服务。
  • 以太坊技术引起了企业软件公司的兴趣。定制的基于以太坊的应用程序正在由摩根大通,德勤,R3,Innovate UK,巴克莱,瑞银,瑞士信贷等金融机构开发和实验。该领域最着名的之一是J. P. Morgan Chase开发了允许使用名为Quorum的以太坊区块链。
  • 2017年,企业以太坊联盟(EEA)由各种区块链初创企业,财富500强公司,研究团体和其他组织建立,旨在帮助采用基于以太坊的技术。它为企业提供了有关以太坊的标准和资源,并利用这项突破性技术来解决特定的行业用例。

以太坊已经过了一个时髦技术或科学实验的时刻,现在它是企业公司正在研究的一种基本的开源去中心化技术。谈到开源和企业,我想我也是对以太坊生态系统的一小部分贡献并帮助它的采用。让我们看看它是什么。

开源企业集成

以太坊是分布式和去中心化的,但它主要是一个封闭的系统,包含嵌入式分类账,货币和执行节点。为了对企业有用,以太坊必须与现有的旧系统和新系统很好地集成。幸运的是,Ethereum提供了一个健壮且轻量级的JSON-RPC API,并且对JavaScript语言提供了很好的支持。但在企业公司中,JavaScript并不是集成的首选,而是Java,其次是.Net。Java不是必需的轻量级或快速发展,但它拥有庞大的开发人员社区和成熟的开发库生态系统,使其成为大多数企业公司的首选。有助于提高Java语言生产力的主要因素是重用现有库并避免重新发明轮子。Apache Camel是最受欢迎的库之一,可以重用并避免重新发明轮子进行集成。幸运的是,Camel恰好是我的热情和我多年来一直贡献的项目,所以将两者联系起来对我来说是最自然的事情。

对于那些来自区块链背景并且不熟悉Camel的人来说,这是一个非常简短的介绍。Apache Camel是一个轻量级的开源集成库,它在概念上由三部分组成:

  • 广泛使用的企业集成模式(EIP)的实现。(请注意,这不是以太网改进提案共享相同的首字母缩略词。)EIP提供了企业集成空间中概念的通用符号,语言和定义(想想发布——订阅,dead letter通道,基于内容的路由器,过滤器,分割器,聚合器,节流器,重试,断路器等)。其中一些模式已经存在了十多年,有些是新的,但是任何人都以消息传递和分布式系统集成为生。
  • Apache Camel的第二个主要部分是巨大的连接器库。基本上,只要有一个协议,系统端点,SaaS API的Java库,很可能有一个Camel连接器(想想HTTP,JMS,SOAP,REST,AWS SQS,DropBox,Twitter,现在以太坊)等)。连接器抽象出配置不同库的复杂性,并提供基于URI的统一方法来连接到所有类型的系统。
  • Apache Camel的最后一部分是域特定语言(DSL),它将连接器和EIP连接在一起,采用更高级别的集成语言。DSL与连接器和模式相结合,使开发人员在连接系统方面具有高效率,并创建了行业标准且易于长期维护的解决方案。所有这些特征对于希望基于成熟技术创建现代解决方案的企业公司而言非常重要。

公司比以往任何时候都更加集成,公司内部的系统比以往更加集成。如果你是一家Java商店,很可能已经在你的组织中的某个地方使用了一些基于Apache Camel的集成。现在你可以使用Camel以及它提供的所有功能来与以太坊交互。

用于以太坊的Apache Camel连接器

这两种技术的自然交集是以太坊的Camel连接器。这样的连接器将允许将以太坊与任何其他系统,交互方式和协议集成。为此,我评估了以太坊的现有Java库,并得出结论,web3j最适合这个用例。Web3j是一个积极开发的,功能丰富的Java库,用于通过JSON-RPC与以太坊兼容节点进行交互。Camel-web3j连接器(Camel Ethereum连接器的技术名称)是一个瘦包装器,它提供了一种简单的方法来使用Apache Camel DSL的web3j提供的功能。目前,该连接器提供以下功能:

  • 与Geth,Parity,Ganache合作。
  • 支持Infura API。
  • 支持JP Morgan的Quorum API。
  • 通过HTTP和IPC支持JSON-RPC API。
  • 实施所有web3,net,eth,shh操作。
  • 支持过滤器。
  • 支持以太坊名称服务(ENS)。
  • 完全单元和集成测试(超过100和不断增长)。

这种集成的全部功能不是来自连接器功能,而是当连接器与其他连接器,模式和所有其他Camel功能一起使用时,可以在以太坊周围提供完整的集成框架。

以太坊兼容的JSON-RPC API

接下来,我将专注于添加对Parity的Personal,Geth的Personal客户端API,以太坊钱包支持等的支持。目的是使组件与使用Apache Camel的系统到系统集成方案中有用的web3j功能保持同步。连接器被推送到Apache Camel 2.22,并为早期采用者做好准备,试一试并提供反馈。要开始,请查看单元测试以了解每个操作的配置,以及集成测试以了解如何连接到Ganache或以太网主网等。享受。

Apache Camel的用例

Bellow是企业以太网架构堆栈(EEAS),它根据客户端规范v1.0表示企业以太坊(EE)应用程序的公共层和组件的概念框架。

如果你想知道Camel在堆栈中的确切位置,Camel-web3j是工具层的一部分,作为集成库,专注于系统到系统的集成。它使用公共的以太坊JSON-RPC API,任何Enterprise Ethereum兼容的实现都必须支持并保持向后兼容。

然后,Camel将主要用于与以太坊外部的服务进行交互,但受智能合约(所谓的神谕)的信任。以类似的方式,Camel可用于与企业管理系统交互以发送警报和指标,报告故障,更改配置等。

我能用这个连接器想到的主要用例是:

  • 聆听以太坊网络中发生的新块,事件,过滤,转换,丰富并将其发布到其他系统中。例如,监听新块,检索其交易,过滤掉不感兴趣的块,丰富其他块并处理它们。这可以使用以太坊节点过滤器功能完成,或纯粹使用Camel,使用轮询使用者定期查询节点和幂等过滤器以防止处理先前处理的块等。
  • 另一个用例是,监听来自企业系统的事件和命令(可能是业务流程中的一个步骤),然后告诉以太坊网络。例如,KYC被批准或在一个系统中接收支付,这导致Camel与第二系统通话并检索用户的ERC20地址并执行以太坊交易。

真实世界对Camel的使用将涉及上述场景的更复杂的混合,确保Camel非常擅长的高可用性,弹性,重放,审计等。

以太坊Oracle在Apache Camel中实现

“说起来很简单。代码怎么写?“ —— Linus Torvalds

在许多情况下,智能合约需要来自现实世界的信息才能运作。简而言之,一个能够与外部世界互动的智能合约。演示了Camel-web3j的用法,我创建了一个代表oracle的Camel路由。路由侦听特定主题上的CallbackGetBTCCap事件,并且当收到此类事件时,Camel路由生成随机值并通过调用setBTCCap方法将其传递给同一合约。这基本上是一个“HelloWorld”,以太坊的方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Override
public void configure() throws Exception {
from("web3j://http://127.0.0.1:7545?operation=ETH_LOG_OBSERVABLE&topics=" + topics)
.to("log:com.ofbizian.CallbackGetBTCCap?level=INFO&showAll=true")

.setHeader(OPERATION, constant(ETH_SEND_TRANSACTION))
.setHeader(FROM_ADDRESS, constant("0xc8CDceCE5d006dAB638029EBCf6Dd666efF5A952"))
.setHeader(TO_ADDRESS, constant("0x484982345fD584a0a16deC5F9ba330f6383af3d9"))
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
int random = rand.nextInt(50);
Function function = new Function("setBTCCap", Arrays.<Type>asList(
new Uint(BigInteger.valueOf(btcPrice))), Collections.<TypeReference<?>>emptyList());
exchange.getIn().setHeader(DATA, FunctionEncoder.encode(function));
}
})
.to("web3j://http://127.0.0.1:7545");
}

要触发事件,可以使用以下单元测试在智能合约上调用updateBTCCap方法:

1
mvn test -Dtest=CamelOracleRouteTest#updateBTCCap

要检查当前价格,你可以使用以下单元测试在智能合约上调用getBTCCap方法:

1
mvn test -Dtest=CamelOracleRouteTest#getBTCCap

检查智能合约,Camel路线,Github上的完整说明并亲自试用。如果你使用该组件并有疑问或反馈,如果你喜欢这个并且你有兴趣为其他区块链项目实施Camel连接器,请联系。 照顾自己。eth jar:0x6fc1bF6A69B92C444772aCE4CB040705Afd255bD

======================================================================

分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:

  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是以太坊的企业系统集成