ethvm:第一个由Kafka支持的开源块资源管理器

  • 时间:
  • 浏览:6

  自从比特币将世界引入加密货币之后的十年中,该行业的发展方式甚至可能是Satoshi无法想象的。以太坊区块链于2015年7月出现,借助于以太坊虚拟机(EVM)-开发和执行智能合约的环境,开启了一个新的可能性世界。

  我们引入ethvm:基于Apache Kafka的以太坊的第一个开放源代码块资源管理器和数据处理引擎。

  ethvm的起源:evm的指南针

  区块浏览器是区块链审计和决策不可或缺的工具,使用方便的浏览器格式。浏览器帮助用户验证交易和智能合约的执行情况,检查余额,并监控天然气价格。

  对于开发者来说,区块浏览器为DAPPs和开源钱包检索区块链数据的新可能性,在不断增长的以太坊生态系统中激励创新,同时提供分散网络中至关重要的透明度。

  当我们的团队第一次开始开发ethvm alpha时,最初的想法是创建一个易于使用的区块链浏览器,前端由Vuejs构建,后端由RethinkDB提供支持的实时更新。

  作为一个开发人员,您只需要三个基本的东西来构建一个浏览器,这就是我们开始使用的:

  1. 与网络同步的以太坊节点;

  2. 存储信息的数据库;

  3. 一个显示信息的网站;

  然而,这些并不是唯一需要考虑的因素。通常,当区块链增长到一定规模时,您需要处理的信息量是非常巨大。不仅完全同步节点-还是一个复杂的过程。它需要大量的时间和资源,同时对CPU和磁盘也有相当大的需求。

  满足对开源以太坊块资源管理器的需求

  在我们致力于解决这些挑战的过程中,我们的团队意识到,现有的Block Explorer Options Limited-大多是闭源的,这意味着只有一小部分开发人员可以为这一重要工具的创新做出贡献。

  在技术进步的协作性的另一个证明中,ethvm最重要特性的灵感来自一个意想不到的来源。Boerge Svingen在Confluent博客上写了一篇名为“在纽约时报上与Apache Kafka一起出版”的文章,描述了标志性的纽约时报如何从一大堆API、服务、生产者和消费者转变为Apache Kafka支持的基于日志的架构。

  传统上,数据库已被用作许多系统的真实来源。尽管有很多明显的好处,但从长远来看,数据库很难管理。

  基于日志的体系结构通过使日志成为事实的来源来解决这个问题。虽然数据库通常存储某些事件的结果,但日志存储事件本身,因此日志成为系统中发生的所有事件的有序表示。

  使用日志存储,您可以创建任意数量的自定义数据存储空间。这些存储成为日志-的物化视图,它们包含派生的而不是原始的内容。如果您想更改数据存储中的模式,您可以创建一个新的模式,让它从一开始就使用日志模式,直到它恢复正常,然后扔掉旧的模式。

  Boerge上面解释的意义非凡

  如果体系结构是基于日志的,则可以使用和处理Kafka日志,并将信息输出到其他位置 - 例如,数据库或PDF报告。

  另外,作为一个额外的好处,根据主题的建模和配置方式,您可以多次重放日志。这意味着您可以随时“返回”时间并重新处理数据。

  EthVM和kafka生态系统

  

  让我们看看这些工具是如何在ethvm环境中使用的:

  官方项目将Kafka Connect描述为:

  Apache Kafka和其他系统之间可伸缩且可靠地传输数据的工具。它使得快速定义将大量数据集合移入和移出Kafka的连接器变得简单。Kafka Connect可以接收整个数据库,或者将所有应用服务器的指标收集到Kafka主题中,从而使数据以较低的延迟用于流处理。导出作业可以将来自Kafka主题的数据传递到辅助存储和查询系统或批处理系统中进行脱机分析。

  

  这就是我们捕获块的方法(为了本文的目的而简化)

  对于ethvm,我们创建了一个paritysource连接器,它允许我们从rpc/websocket端点读取所有必需的信息,并将数据转储到特定的主题。

  通过Kafka Connect,我们有一套标准化的API来向Kafka提取数据。这种方法的优点在于,将来我们将能够创建更多基于相同原理的连接器(以支持Geth和其他客户端)。

  kafka stream

  一旦重要数据在Kafka主题内,第二步是解释数据以获得有意义的信息。这就是Kafka Streams的用武之地:

  Kafka Streams是一个用于构建应用程序和微服务的客户端库,其中输入和输出数据存储在Kafka集群中。它结合了在客户端编写和部署标准Java和Scala应用程序的简单性以及Kafka服务器端集群技术的优势。

  在ethvm上,我们创建了专门的“处理器”,利用kafka streams实用程序执行聚合、缩减、过滤和其他有用的操作。

  例如,一个专用处理器分析并提取可替换的令牌传输,如ETH或ERC20。另一个专门研究不可替代的产品,如ERC721上的产品。其他处理器关注有用的块指标-,其中包含与平均天然气价格、成功或失败交易数量-和交易费用相关的信息。事实上,我们可以创建尽可能多的处理器来“钩住”具体的主题,以便接收最相关的数据。

  使用Kafka Connect创建一个接收器,用于存储处理器的数据输出。目前,我们正在转向Postgres / Timescale,但我们最初是从MongoDB开始的。

  塑造ethvm的未来

  我们很高兴地分享生态系统的Alpha版本目前正在使用 - 使用Mongo作为主存储数据库的初始处理器设置。继续进入Beta版本,我们希望使EthVM更加稳定并实现许多功能,包括:

  · 迁移到NestJS API

  · 从MongoDB迁移到Postgres/Timescale

  · 对Kafka处理的改进(消除错误并提高速度)

  · 让TerraForm提供程序在AWS上正确部署代码

  我们的首要目标是尽可能快速地同时处理以太坊链,最终在混合中添加更多链。有了一个好的Kafka集群,我们将能够同时处理多个链。此外,块浏览器只是查看区块链数据的众多方法之一!

  EthVM由MyEtherWallet提供支持 - 该公司致力于开发有利于以太坊生态系统整体的开源项目。我们共同构想了一个全球金融未来,加密将在为已经建立的市场带来新机遇方面发挥重要作用。