如何正確的分析 EOS 區塊資料

2021-09-11 09:03:55 字數 2536 閱讀 4773

經過簡單的調研,我們發現可以通過分析區塊 transaction 裡面的 actions 來得到我們想要的結果。但是問題來了,我們如何拿到想要分析的那個合約的資料呢。又去搜了一下發現大概有這麼幾個方法:eos rpc api、區塊鏈瀏覽器 api、跑個全節點。

rpc api 非常粗暴,調研了一大圈發現基本上能用的就兩個 api:

獲取當前區塊高度,即 get_info

獲取區塊內容,即 get_blocks

這個時候我們發現乙個非常蛋疼的事情,我們若想分析這一周某個合約的呼叫情況,我們就需要算出來這一周的區塊高度範圍,然後開始乙個個的拿區塊資訊。

比如說我們想拿兩個月的資料,首先我們知道 eos 是每 0.5s 乙個區塊,那麼兩個月就是 3600 * 24 * 60 * 2 這麼多個區塊,大概是一千萬左右。然後每個區塊大小是 1mb,那麼這個請求尺寸可想而知。雖說,eos 很少有超過 100k 的區塊,但就 1000w 個 10kb 的區塊,這也要將近 100g 的資料量了。不過看起來好像還好?20m/s 的速度,100g 一天也就同步完了。

但最蛋疼的事情是,中國大陸沒有乙個超級節點訪問起來非常友好的,經常有乙個請求好幾秒的情況,那麼我們要爬這麼大的資料就**三公升了。如果願意在境外伺服器上做爬蟲,那麼就要堆伺服器儲存,而且再搬回國內一樣的麻煩。

於是這條路基本上行不通,rpc api 還是留著用追蹤區塊資訊,做觸發器吧。

rpc 撞牆了,倒也無所謂,因為我們大部分研究區塊資料都是從瀏覽器裡面獲取的,而且瀏覽器的 api 擴充套件了很多方法。比如根據 account/合約位址查詢交易行為、持幣量等等。

然而經過調研各大區塊鏈瀏覽器的 api 健壯程度,發現我真是太樂觀了,這簡直是刀耕火種。不是 api 動不動就超時,就是直接整個瀏覽器間歇性的服務掛了,伺服器直接 503 。當然最不能理解的就是,這樣粗製濫造的 api,居然是收費的!

於是對於區塊鏈瀏覽器,我們做簡單分析還行,資料量大了實在是沒戲,這條路也行不通。

於是,看起來最複雜的方法也成了唯一的方法,只能跑全節點了。經過跑 btc 全節點的經驗,我們直接配一台伺服器,讓他慢慢同步就好了。

方法很接單:

wget 

sudo apt install ./eosio_1.5.0-1-ubuntu-18.04_amd64.deb

複製**

wget 

複製**

mkdir ~/.local/share/eosio/nodes/config/

nodeos --print-default-config > ~/.local/share/eosio/nodes/config/config.ini

複製**

裡面的東西貼入 config.ini 檔案中對應的位置。

然而發現,這玩意跑起來每十分鐘大概同步 1w 個區塊,現在 eos 已經到了 3000w,於是我需要 30000分鐘,也就是 20 多天才能同步完成。本著幣圈一日,人間一年的信念,這必須要研究有沒有更優雅的解決方案。

通過 google,發現有個 bp 提供當日 backup 服務:,截至聖誕節當天,壓縮包已經 85g,解壓後 150g 左右。我們把它解壓好了,用 nodeos -d 指定到解壓目錄即可執行,這個時候 nodeos 會做這麼幾件事:

重建 blocks.log 的索引

重放每個請求,恢復 ram 資料。

由於上面我們修改過 config 裡面的 peers 資訊,重放完了之後它會繼續同步區塊資訊直到追上 bp。

這個時候狗血的事情就來了,重建索引這個事情還好,大概一小時就跑完了。然而重放 3000w 條區塊裡面每個 transaction 的資料,刺激的很。

而且這個過程不!可!以!停!止!一旦停止了,就會觸發 dirty flag,官方提供的解決方法就是重新 hardreply!然後最欠抽的事情是,重放過程中,ram 是完全堆在記憶體裡面的,哪怕沒有用過也不會換出去,我們會看著記憶體從幾百m一直飆到將近 30g。

我之前是在 16g 的機器上跑的,結果到後面一分鐘也就只能重放 100 個區塊左右,因為時間全浪費在記憶體頁錯誤上了,cpu佔用率極低。於是只能**又買了兩條記憶體插上,從頭重放!

過了 80 小時後,重放完成了,這個時候可以停止 nodeos了,當我們再次啟動的時候,記憶體使用量不可思議地回到了 1g 以內。但 ram 資料都在的,lazy 載入硬碟資料。於是,為啥重放的時候不做個 lru!?

重放完成後,又同步了 12小時,終於追上了 bp。

從我有念頭做 eos 資料分析,到能獲取到分析資料花了我兩周的時間,走了大量的彎路。這裡面很多東西都是官方文件完全沒提,需要自己 google 或者看原始碼去摸索的。

讓我有一種當初折騰 ubuntu 6.06 一樣的感覺,完全靠蒙。所有配套設施都不完善,很多東西感覺都像是趕時間糊出來的。如此惡劣的環境,eos 卻是當今開發最友好的公鏈,沒有之一,你敢信?

作為韭菜,只能一遍遍的安慰自己這只是剛開始,正規軍還沒入場,麵包會有的,牛奶會有的,一切都會好起來的。

不過不管正規軍能不能入場,我終於有一套資料可以丟給 map reduce 來玩了。

區塊鏈 EOS 環境的搭建

目錄概述 開始編譯並安裝 如上圖,目標是主要包含幾個工具 nodeos eos的核心部分,能夠提供各種api服務,能夠同步節點。cleos 是用於給使用者操作的部分,只要nodeos配置好並執行後,都是通過cleos對其進行呼叫的 當然也可以呼叫別的節點的nodeos介面 keosd 用於安全儲存使...

盧鬆鬆 如何正確進行資料分析

先給大家看幾條關於網際網路的新程式設計客棧聞,第一條是網頁搜尋份額達到73.2 處理了1096億條網頁搜尋請求,與去年相比提公升了0.6個百分點。報告發布後,有出現了很多部落格就根據這個數字來攻擊google,說它做的不好。來看第二條,還是同乙份資料,裡面提到搜尋請求提公升了0.5個百分點,goog...

如何選出正確分析方法?正確姿勢在這裡

對於初學者而言,選擇正確的統計方式可能是一項非常艱鉅的任務。雖然現在有很多統計軟體可以非常方便的計算出結果,但是統計軟體仍然不能完全代替研究人員操作分析,尤其是軟體沒有匹配正確的統計檢驗方法的能力。如果盲目地靠軟體執行操作,很難得到有實際意義的結果。一 資料型別鑑別 資料一般可分為兩類,定量資料和定...