自從比特幣將世界引入加密貨幣之后的十年中,該行業(yè)的發(fā)展方式甚至可能是Satoshi無法想象的。以太坊區(qū)塊鏈于2015年7月出現,借助于以太坊虛擬機(EVM)-開發(fā)和執(zhí)行智能合約的環(huán)境,開啟了一個新的可能性世界。
我們引入ethvm:基于Apache Kafka的以太坊的第一個開放源代碼塊資源管理器和數據處理引擎。
ethvm的起源:evm的指南針
瀏覽器幫助用戶驗證交易和智能合約的執(zhí)行情況,檢查余額,并監(jiān)控天然氣價格。
對于開發(fā)者來說,區(qū)塊瀏覽器為DAPPs和開源錢包檢索區(qū)塊鏈數據的新可能性,在不斷增長的以太坊生態(tài)系統(tǒng)中激勵創(chuàng)新,同時提供分散網絡中至關重要的透明度。
當我們的團隊第一次開始開發(fā)ethvm alpha時,最初的想法是創(chuàng)建一個易于使用的區(qū)塊鏈瀏覽器,前端由Vuejs構建,后端由RethinkDB提供支持的實時更新。
作為一個開發(fā)人員,您只需要三個基本的東西來構建一個瀏覽器,這就是我們開始使用的:
1. 與網絡同步的以太坊節(jié)點;
2. 存儲信息的數據庫;
3. 一個顯示信息的網站;
然而,這些并不是唯一需要考慮的因素。通常,當區(qū)塊鏈增長到一定規(guī)模時,您需要處理的信息量是非常巨大。不僅完全同步節(jié)點-還是一個復雜的過程。它需要大量的時間和資源,同時對CPU和磁盤也有相當大的需求。
滿足對開源以太坊塊資源管理器的需求
在我們致力于解決這些挑戰(zhàn)的過程中,我們的團隊意識到,現有的Block Explorer Options Limited-大多是閉源的,這意味著只有一小部分開發(fā)人員可以為這一重要工具的創(chuàng)新做出貢獻。
在技術進步的協作性的另一個證明中,ethvm最重要特性的靈感來自一個意想不到的來源。Boerge Svingen在Confluent博客上寫了一篇名為“在紐約時報上與Apache Kafka一起出版”的文章,描述了標志性的紐約時報如何從一大堆API、服務、生產者和消費者轉變?yōu)锳pache Kafka支持的基于日志的架構。
傳統(tǒng)上,數據庫已被用作許多系統(tǒng)的真實來源。盡管有很多明顯的好處,但從長遠來看,數據庫很難管理。
基于日志的體系結構通過使日志成為事實的來源來解決這個問題。雖然數據庫通常存儲某些事件的結果,但日志存儲事件本身,因此日志成為系統(tǒng)中發(fā)生的所有事件的有序表示。
使用日志存儲,您可以創(chuàng)建任意數量的自定義數據存儲空間。這些存儲成為日志-的物化視圖,它們包含派生的而不是原始的內容。如果您想更改數據存儲中的模式,您可以創(chuàng)建一個新的模式,讓它從一開始就使用日志模式,直到它恢復正常,然后扔掉舊的模式。
Boerge上面解釋的意義非凡
如果體系結構是基于日志的,則可以使用和處理Kafka日志,并將信息輸出到其他位置 - 例如,數據庫或PDF報告。
另外,作為一個額外的好處,根據主題的建模和配置方式,您可以多次重放日志。這意味著您可以隨時“返回”時間并重新處理數據。
EthVM和kafka生態(tài)系統(tǒng)
讓我們看看這些工具是如何在ethvm環(huán)境中使用的:
官方項目將Kafka Connect描述為:
Apache Kafka和其他系統(tǒng)之間可伸縮且可靠地傳輸數據的工具。它使得快速定義將大量數據集合移入和移出Kafka的連接器變得簡單。Kafka Connect可以接收整個數據庫,或者將所有應用服務器的指標收集到Kafka主題中,從而使數據以較低的延遲用于流處理。導出作業(yè)可以將來自Kafka主題的數據傳遞到輔助存儲和查詢系統(tǒng)或批處理系統(tǒng)中進行脫機分析。
這就是我們捕獲塊的方法(為了本文的目的而簡化)
對于ethvm,我們創(chuàng)建了一個paritysource連接器,它允許我們從rpc/websocket端點讀取所有必需的信息,并將數據轉儲到特定的主題。
通過Kafka Connect,我們有一套標準化的API來向Kafka提取數據。這種方法的優(yōu)點在于,將來我們將能夠創(chuàng)建更多基于相同原理的連接器(以支持Geth和其他客戶端)。
kafka stream
一旦重要數據在Kafka主題內,第二步是解釋數據以獲得有意義的信息。這就是Kafka Streams的用武之地:
Kafka Streams是一個用于構建應用程序和微服務的客戶端庫,其中輸入和輸出數據存儲在Kafka集群中。它結合了在客戶端編寫和部署標準Java和Scala應用程序的簡單性以及Kafka服務器端集群技術的優(yōu)勢。
在ethvm上,我們創(chuàng)建了專門的“處理器”,利用kafka streams實用程序執(zhí)行聚合、縮減、過濾和其他有用的操作。
例如,一個專用處理器分析并提取可替換的令牌傳輸,如ETH或ERC20。另一個專門研究不可替代的產品,如ERC721上的產品。其他處理器關注有用的塊指標-,其中包含與平均天然氣價格、成功或失敗交易數量-和交易費用相關的信息。事實上,我們可以創(chuàng)建盡可能多的處理器來“鉤住”具體的主題,以便接收最相關的數據。
使用Kafka Connect創(chuàng)建一個接收器,用于存儲處理器的數據輸出。目前,我們正在轉向Postgres / TImescale,但我們最初是從MongoDB開始的。
塑造ethvm的未來
我們很高興地分享生態(tài)系統(tǒng)的Alpha版本目前正在使用 - 使用Mongo作為主存儲數據庫的初始處理器設置。繼續(xù)進入Beta版本,我們希望使EthVM更加穩(wěn)定并實現許多功能,包括:
· 遷移到NestJS API
· 從MongoDB遷移到Postgres/TImescale
· 對Kafka處理的改進(消除錯誤并提高速度)
· 讓TerraForm提供程序在AWS上正確部署代碼
我們的首要目標是盡可能快速地同時處理以太坊鏈,最終在混合中添加更多鏈。有了一個好的Kafka集群,我們將能夠同時處理多個鏈。此外,塊瀏覽器只是查看區(qū)塊鏈數據的眾多方法之一!
EthVM由MyEtherWallet提供支持 - 該公司致力于開發(fā)有利于以太坊生態(tài)系統(tǒng)整體的開源項目。我們共同構想了一個全球金融未來,加密將在為已經建立的市場帶來新機遇方面發(fā)揮重要作用。