在本文中,我將演示一種緩存以太坊事件的簡單方法。我只想說,通常我們將事務用于鏈下操作,例如跟蹤令牌的傳輸或檢索特定事務的篩選列表,就像一個SQL查詢一樣。
假設我們想要創建一個跟蹤令牌傳輸的網站,Etherscan。我們只需要一波簡單的操作,比如:
取得所有令牌轉移信息
取得以太坊轉賬來源地址
取得以太坊轉賬目標地址
獲得特定金額的轉賬信息
在特定時間范圍內獲得轉移信息
在web3中是有getPastEvents方法,其示例用法是:
這種方法的主要問題是,隨著區塊鏈的增長,速度可能會變慢,尤其是如果您不運行自己的以太坊節點,并且使用像infura或MyEtherApi這樣的公共提供者。
谷歌云推出托管的區塊鏈以太坊節點:金色財經報道,谷歌云公布了它的區塊鏈節點引擎,這是一個以太坊為起點的托管服務。微軟的Azure是第一個提供這種服務的,AWS在2019年推出其版本。谷歌云計算集團最近表示,它將通過與Coinbase的交易接受一些Web3公司的加密貨幣支付,并在1月成立了一個專門的數字資產團隊。
關于該領域的節點供應商,除了AWS和Azure等大品牌外,還有幾個web3供應商在該領域占主導地位。它們包括Alchemy、Blockdaemon、Chainstack、Coinbase Cloud、ConsenSys的Infura和Quicknode。(ledgerinsights)[2022/10/28 11:50:25]
接下來,幾乎不可能實現一些比較復雜的查詢,因為篩選對象的功能非常有限。
青島市北區歷史文化街區文旅產業項目簽約,包括運用區塊鏈的智慧停車項目:近日,青島市北區歷史文化街區文旅產業項目正式簽約,其中包括中車四方所與市北建設投資集團、八維通科技有限公司共同合作的智慧停車項目。該項目將打造城市級智慧停車產業運營平臺,以智慧停車為核心,運用大數據、AI、區塊鏈等技術手段,通過互聯網平臺創新模式,提供智慧停車整體解決方案,打造智慧停車生態圈,將停車時間分段錯時共享,達到資源利用最大化。(瀟湘晨報)[2020/8/12]
此外,已經寫入區塊鏈的事件無法更改,只能隨時間添加新記錄。這個和其他事實使事件成為緩存的完美目標。
數據庫選擇
在這個例子中,我們將使用mysql作為保存事件記錄的數據庫。MySQL有能力存儲原始JSON,然后使用JSON對象的屬性編寫查詢,就好像它們是普通的SQL列一樣。
聲音 | Hyperledger執行董事:供應鏈管理和貿易金融是區塊鏈落地兩大方向:1月21日消息,Hyperledger執行董事Brian Behlendorf在接受專訪時表示,供應鏈管理和貿易金融是區塊鏈落地兩大方向。Brian Behlendorf稱,區塊鏈技術具有不可篡改性。如果有一群機構或公司,大家有共同的需要來保證數據的不可篡改性的時候,就可以使用區塊鏈技術。在落地案例上面,最大的兩個方向,一個是供應鏈管理,一個是貿易金融。雖然我們也看到了不同類型的應用,但這兩個方向的應用最成功。(每日經濟新聞)[2020/1/21]
我們應該儲存什么?
讓我們仔細看看getPastEvents方法的結果,以實現我們使用的數據。我以Binance代幣轉移為例。每個事件對象都具有以下結構:
動態 | KBank將向中國區塊鏈等創業公司投資80億泰銖:據nationmultimedia報道,KBank(中國)總裁Vongpat Bhuncharoen指出,KBank銀行已在北京,上海,上珍和杭州設立了四個創新中心,還將在2019至2024年期間向全國各地的創業公司投資約80億泰銖,其中包括那些專注于金融科技,區塊鏈,電子商務和人工智能(AI)的公司。[2019/1/4]
如您所見,事件參數存儲在returnValues屬性中。blockNumber,transactionHash,logIndex也可能有用,我稍后會告訴你。
我們的目標是將這些JSON對象編寫到數據庫中,并實現可以無縫替換標準web3的getPastEvents方法的簡單訪問方法。
以下是用于創建Transfer表的SQL腳本。
聲音 | 中國社科院尹振濤:可以通過區塊鏈技術手段進行反洗錢:據法制日報報道,中國社會科學院金融研究所法與金融研究室副主任尹振濤最近在接受采訪時表示,比特幣的出現不只是為了貨幣發行,而是確實產生了一種全新的貨幣,但更重要的是,比特幣產生了一個交易體系。尹振濤認為,數字貨幣面臨兩方面的風險。第一是技術層面,數字貨幣依賴于區塊鏈技術和一個系統,這就會使其遭受安全沖擊,比如計算機系統的黑客攻擊,我們在這個過程中看到過很多實際問題。此外,數字貨幣的另一個風險是信用風險問題。因為數字貨幣交易存在中間商,這些中間商不同于現實中的組織。現實中的組織是看得見、摸得著的,但數字貨幣的中間商是在網絡上的,風險更大。區塊鏈技術是一把雙刃劍,從技術的角度看,既然區塊鏈可以用于洗錢,那么也可以通過技術手段進行反洗錢。這一邏輯是成立的,而這也是他所倡導的監管科技的重要方法之一。[2018/8/14]
需要說明的一些重要事項:
json列創建為JSON類型。這允許我們使用特殊語法創建自動生成的列。
from,to,value?-這些是自動生成的列。這個表達式起初看起來很復雜,但實際上它很簡單。例如,從列值等于存儲在json列中的對象的returnValues.from屬性。
txHash和logIndex。這些屬性組合在一起可識別每個事件對象我們需要那些為行創建唯一索引,從而防止偶爾重復事件。
我們還可以選擇添加數據庫索引來提高性能。例如,對于to列
案例實踐
先決條件
Node.js的我使用的是8.4.0版。
Web3npm包與區塊鏈進行交互。我們需要特定版本1.0.0-beta.35。在嘗試檢索某些事件時,最新版本beta.36的使用導致“返回值無效,是否運行OutofGas”錯誤。
3.要在JavaScript中使用MySQL數據庫,我們應該安裝mysql包?
?4.最后一個-?MySQL服務器。值得一提的是,我們將使用MySQL5.7作為最新的8.0版本似乎與mysql包兼容。
MySQL交互
我們將利用連接池對此示例進行查詢。
使用promisified版本的查詢方法會更方便?
現在我們可以使用以下代碼將記錄插入之前創建的傳輸表中。?
在這里,我們還檢查可能的重復行插入。現在我們不希望在這種情況下做任何特別的事情,可能我們已經提前寫過這些重復事件或類似的事情。所以我們只考慮處理這種異常。
緩存功能
讓我們構造一個智能合約對象來從中檢索事件
?我們只能在abi參數中包含Transfer事件接口,如下所示:
這是緩存功能的基本版本。首先,我們獲取事件對象,然后逐個將它們寫入數據庫。?
定期區塊鏈掃描
現在讓我們將其擴展為一個簡單的后臺腳本,該腳本不斷掃描區塊鏈以查找發出的事件。
一些實用功能:
第一個是setTimeout的簡單異步/等待實現。第二個用于fn的無限周期調用-工作函數。
有了這些輔助功能,我們的后臺掃描儀看起來非常簡單
讓我解釋'latestEthBlock1'的事情。Web3的getPastEvents返回在范圍內寫入的事件,包括邊界。因此,如果沒有這個遞增,下一個cacheEvents調用將再次將寫入latestEthBlock的事件作為結果的一部分返回。
雖然由于實現了唯一索引,重復事件不會插入到數據庫中,但我們仍然不希望完成這些多余的工作。
對于簡單的后臺掃描程序,此實現應該足夠了。但是,總有改進的余地。稍后我們會回到它。現在讓我們快速了解一下我們現在可以利用這些數據做些什么。
事件檢索
以下是選擇從特定地址進行的轉移的功能示例:
我們使用生成的列查詢數據庫。這里最值得注意的部分是函數的結果看起來就像web3的getPastEvents的結果。它使得重構當前代碼變得更加容易。
進一步改進
事件對象包含許多可能對您的應用程序完全無用的屬性。在寫入數據庫之前刪除多余部分會更好。這樣我們就節省了很多空間。
您可能還注意到,當前版本的掃描程序在每次重新啟動時都以區塊#0開始。在一直掃描到當前塊時,它會嘗試將重復記錄插入數據庫。我們可以通過查詢數據庫中的最新緩存塊來消除那些多余的工作。
不是從塊#0開始掃描也是很好的,但至少從部署合同時的塊開始掃描。為簡單起見,您可以使用etherscan.io獲取此信息。
這里我們再次使用MySQLjson函數來獲取事件對象的blockNumber屬性。
然后更換舊的掃描功能
新的掃描功能?
?結論
最后,我們創建了一個簡單但有效的事件掃描程序,可以將事件連續緩存到MySQL數據庫中。
本文轉載公眾號:區塊鏈研究實驗室,專注區塊鏈技術,產品社群,經濟模型等全方位的知識體系輸出,為大家帶來不一樣的社群學習體驗。歡迎聯系作者微信加入社群:csschan1120???
親愛的用戶: 您好! ZG.COMNEW打新計劃已進行四期,累計參與人次6萬,累計申購金額高達1.6億USDT,取得了階段性成功,ZG.COM獲得了大量用戶及資金積淀.
1900/1/1 0:00:00親愛的用戶: 您好! ZG.COM將于2019年6月11日12:00開放CBE的充提業務,于6月12日12:00開啟CBE/USDT交易對.
1900/1/1 0:00:00總體原則: 申購金額越大,分配額度越多;參與活動越多,分配額度越多。 具體規則如下: 一、參與條件 ZG.COM注冊用戶即可參與 二、申購額度 1NMST=0.02USDT(私募價格0.05US.
1900/1/1 0:00:00親愛的用戶: 您好! ZG.COM將于2019年6月4日14:00開放ITGC的充提業務,于6月5日14:00開啟ITGC/USDT交易對.
1900/1/1 0:00:00親愛的用戶: 您好! ZG.COM將于2019年5月24日14:00開放HX的充提業務,并同時開啟HX/USDT和HX/CNZ交易對.
1900/1/1 0:00:00親愛的用戶: 您好! 感謝您對ZG.COM的NEW打新計劃第10期項目SEAS的關注,目前所有認購結果已計算完畢,SEAS已發放完畢.
1900/1/1 0:00:00