谷歌宣佈其BigQuery服務已支援以太坊區塊鏈資料分析
以太坊(Ethereum)和其他加密貨幣吸引了技術專家、金融家和經濟學家的想象力。數字貨幣只是底層區塊鏈技術的一種應用。今年早些時候,我們在Google BigQuery中公開了比特幣資料集
(ofollow,noindex" target="_blank">http://u6.gg/e3VqS
)用於分析。今天我們將提供以太坊資料集
。
和它的前身比特幣一樣,你可能認為以太坊區塊鏈是一個不可變的分散式賬本。然而,建立者Vitalik Buterin通過包含一個虛擬機器擴充套件了它的功能集,這個虛擬機器可以執行儲存在區塊鏈上的任意程式碼作為智慧合約。
譯註: 智慧合約(smart contracts),是一種旨在以資訊化方式傳播、驗證或執行合同的計算機協議。智慧合約允許在沒有第三方的情況下進行可信交易。這些交易可追蹤且不可逆轉。智慧合約概念於1994年由Nick Szabo首次提出,但直到近年隨著區塊鏈技術的發展逐步被社會大所熟悉,智慧合約的概念具備承諾、協議、數字形式三大要素,因此能夠將區塊鏈的應用範圍擴充套件至金融行業交易、支付、結算和清算的各個環節。智慧合約是指當一個預先編好的條件被觸發時,智慧合約會立即執行相應的合同條款,其工作原理類似於計算機程式的if-then語句。
就係統架構而言,以太坊與比特幣的相似之處在於,它主要用於記錄不可變的交易。兩者本質上都是OLTP資料庫,並且很少提供OLAP(分析)功能。然而,以太坊資料集明顯不同於比特幣資料集的地方如下:
譯註: OLTP,即Online transaction processing縮寫,意即聯機交易處理。是指通過資訊系統、計算機網路及資料庫,以線上交易的方式處理一般即時性的作業資料,和更早期傳統資料庫系統大量批量的作業方式並不相同。OLTP通常被運用於自動化的資料處理工作,如訂單輸入、金融業務……等反覆性的日常性交易活動。和其相對的是屬於決策分析層次的聯機分析處理(OLAP)。
- 以太坊區塊鏈的主要加密經濟價值單位是以太(Ether),而比特幣區塊鏈的價值單位是比特幣(Bitcoin)。然而,以太坊區塊鏈上的大部分價值轉移都是由所謂的代幣(token)組成的。代幣由智慧合約建立和管理。
- 以太幣的價值轉移是精確和直接的,類似於會計分類賬的借方和貸方。這與比特幣的價值轉移機制形成了鮮明的對比,在這種機制下,很難確定給定錢包地址的餘額。
- 地址不僅可以是儲存餘額的錢包,還可以包含智慧合約位元組碼,這個位元組碼允許以程式設計方式建立協議並自動觸發執行。一組協調的智慧合約可以用來建立去中心化自治組織。
譯註: 去中心化自制組織(decentralized autonomous organization,DAO),是一個通過編碼為稱為智慧合約的計算機程式的規則執行的組織,由計算機網路支援的無中心組織並且沒有單一的領導者,是一種自主的或者是自治的組織結構。
現在,以太坊區塊鏈資料現在可以通過BigQuery進行探索。所有歷史資料都在ethereum_blockchain
資料集中,該資料集每天都會更新。GitHub上的Ethereum ETL專案包含用於從以太坊區塊鏈中提取資料並將其載入到BigQuery中所有的程式碼,我們歡迎更多的貢獻者和更多的區塊鏈加入!
譯註:
ethereum_blockchain
資料集:http://u6.gg/e3Vun
Ethereum ETL的GitHub專案地址:https://github.com/medvedev1088/ethereum-etl
為什麼要在Google Cloud上提供以太坊區塊鏈資料?
雖然以太坊區塊鏈對等軟體有一個用於常用隨機訪問函式的API(如檢查交易狀態、查詢錢包交易關聯以及檢查錢包餘額),但是API端點並不存在,無法方便地訪問鏈上儲存的所有資料。
也許更重要的是,也不存在用於聚合檢視區塊鏈資料的API端點。下面是一個示例圖表,顯示了總轉移成本和平均交易成本(按天計算):
像這樣的視覺化(以及基礎資料庫查詢) 對於指定業務決策很有用,例如從優先考慮以太坊架構本身的改進(系統是否接近容量上限並需要升級?)到資產負債表調整(錢包能以多快的速度重新平衡?)。
BigQuery有強大的OLAP功能來支援這種型別的分析,一般而言,不需要額外的API實現。
因此,我們在Google CLoud上構建了一個軟體系統:
- 將以太坊區塊鏈與在Google CLoud中執行Parity(https://github.com/paritytech/parity-ethereum )的計算機同步。
- 每天從以太坊區塊鏈分類帳提取資料,包括智慧合約交易的結果,例如代幣傳輸。
- 對日期分割槽資料進行反規範化(de-normalizes),並將其儲存到BigQuery,以便進行簡單且經濟高效的探索。
以太坊區塊鏈資料集
也可以在Kaggle上獲得:http://u6.gg/e3Ken
。你可以使用BigQuery Python客戶端在Kaggle免費的瀏覽器內編碼環境Kernel(https://www.kaggle.com/kernels
)中查詢實時資料。派生這個示例的核心(http://u6.gg/e3Kpr
),試驗你自己的Python程式碼副本。
有趣的查詢與分析
下面,我們將展示一些基於以太坊資料集
的有趣查詢和視覺化。我們的分析側重於三個熱門話題上:
- 智慧合約函式呼叫
- 鏈上交易時間序列和交易網路
- 智慧合約函式分析
分析1:流行的智慧合約事件日誌
到目前為止,以太坊區塊鏈的主要用例是數字代幣的交換。下面我們將演示如何查詢資料集的交易和合約表,以找到最流行的智慧合約(通過交易計數進行度量):
根據交易次數,以太坊所收藏的10種最受歡迎的收藏品(ERC-721合約)是哪些?訪問http://u6.gg/e3KWH 來檢視我的查詢檢視。
最受歡迎的ERC-721智慧合約(按交易數量計算)是0x06012c8cf97bead5deae237070f9587f8e7a266d
(http://u6.gg/e3V2D
),是CryptoKitties
遊戲的主要智慧合約。稍後我們將在本文中介紹遊戲的一些屬性。
仔細檢視這個合約的原始碼,它將一個CryptoKitty出生事件(http://u6.gg/e3LdC )記錄到區塊鏈中。您可以在日誌表中查詢此事件的例項:http://u6.gg/e3Ldc 。
我們可以將CryptoKitty譜系進行視覺化,如下圖所示,這些帳戶至少擁有10個CryptoKitties。顏色表示所有者,大小表示每個CryptoKitty的PageRank (生殖適度(reproductive fitness)):
分析2:交易量和交易網路
在以太坊區塊鏈上分佈著許多型別的代幣,它們的分佈模式隨型別和時間而異。通過檢視每個代幣的交易活動,我們可以衡量哪些在總體上更流行,哪些在給定的時間範圍內更流行。
下面是一個用於度量聚合代幣統計資訊的查詢:按交易數量計算,10個最流行的以太坊代幣(ERC20 contract)是哪些?在http://u6.gg/e3LyR 找到答案。
在#5位置,最受歡迎的代幣之一是OmiseGO($OMG)(https://omisego.network/
),其地址為0xd26114cd6ee289accf82350c8d8487fedb8a0c07
(http://u6.gg/e3L3M
)。
作為後續,訪問http://u6.gg/e3L9e ,這裡有一個根據時間視窗度量代幣統計(交易計數)的查詢,具體來說就是$OMG代幣傳輸的每日計數,以及從Google Sheet(http://u6.gg/e3L9R )開始到2018年8月2日的時間序列資料的Data Studio視覺化。
注意,在2017年9月13日,$OMG接收器的數量大幅增加,而傳送者的數量卻沒有增加。這相當於OmiseGO Token Airdrop(https://www.omise.co/omisego-airdrop-update-3 )的開始。
由於資料在高細粒度級別上由錢包地址之間的一組傳輸組成,我們還可以使用有向圖資料結構來推斷資料。
下面是同一資料的一個視覺化子集:這是前5萬筆交易,其中至少有兩個交易夥伴。在這張圖中,節點(點)表示以太坊區塊鏈上的錢包地址,邊(線)表示一對地址之間的代幣的聚合傳輸。邊長與傳遞的代幣數量大致成正比,這意味著在圖中,在它們之間傳遞更多聚合代幣的錢包更靠近。另外一組地址經常相互轉換——排除其他組的成員——將聚集在一起,為清楚起見,我們對這些組進行了顏色編碼。這張圖是用Gephi繪製的,用Modularity 演算法計算的分組對節點進行顏色標記。
分析3:智慧合約函式分析
我們之前提到過,以太坊區塊鏈上的許多智慧合約都是ERC-20合約。這是什麼意思?ERC-20簡單地定義了一個智慧合約可以實現的軟體介面。具體來說,它由一些與代幣傳輸相關的函式組成,在ERC20代幣標準規範文件中有詳細的描述:http://u6.gg/e3LPy 。
智慧合約還可以實現許多其他函式。幸運的是,許多智慧合約的原始碼可以免費使用(開源)。甚至對於那些我們沒有原始碼的合約,我們也可以使用它從函式的名稱來獲得一些關於其他合約的知識,因為常用的函式名稱將會共享一個公共簽名。
回到前面分析3中討論的CyptoKitties,遊戲玩法的主要元素是畜牧業,並且在一個育種事件中的基因混合在CryptoKitties GeneScience智慧合約中實現:0xf97e0a5b616dffc913e72455fde9ea8bbe946a2b
(http://u6.gg/e3LYF
)。假設我們想要找到其他遊戲也實現與CryptoKitties GeneScience合約類似的遊戲機制?我們可以使用此查詢(http://u6.gg/e3LYW
)中的Jaccard相似係數的JavaScript UDF實現來度量這一點。
譯註: Jaccard相似係數(Jaccard similarity coefficient),用於比較有限樣本集之間的相似性與差異性。Jaccard係數值越大,樣本相似度越高。
這些結果表明,GeneScience合約的幾個早期版本(http://u6.gg/e3Mg6
)與在地址0xf97e0a5b616dffc913e72455fde9ea8bbe946a2b
上的智慧合約的當前版本最相似。但是也有一些其他的(例如0xb64e6bef349a0d3e8571ac80b5ec522b417faeb6
(http://u6.gg/e3MhN
)的CryptoPuppy),根據方法簽名的度量,它們似乎是高度相似的合約。
原文連結: Ethereum in BigQuery: a Public Dataset for smart contract analytics
感謝杜小芳對本文的審校。