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