原文標題:《Using On-Chain Data for Policy Research: Part 1》
原文作者:Brendan Malone,Paradigm
原文編譯:Kxp,BlockBeats
I. 引言
Crypto 政策在製定時很少會用到真實且細化的數據,原因主要有以下三點:
1. 新興技術領域的相關政策大多還停留在理論及定性分析層面,早期階段很少會使用到數據。
2. 儘管鏈上數據全部開放透明,但要想訪問這些數據人們需要在短期內完成大量工作(即直接從區塊鏈提取原始數據),即便對於Crypto 原生從業者來說也是如此。
3. 區塊鏈「取證」公司和數據供應商有少量的數據產品,但它們都不具備靈活性/可定制性,也不能滿足經濟/金融研究人員的需求。
許多現代經濟學和金融學研究人員錯過了將工具應用於Crypto 數據分析的機會。從設計上講,Crypto 可以向任何人提供細化數據,但大部分政策在製定時仍依賴於CoinMarketCap 等外部預聚合時間序列數據源,而不是直接從數據源獲取數據,這又是什麼原因導致的呢?
正如政策制定者可以查詢美國每家主要銀行的資產負債表,並逐秒觀察消費者存款的變化一樣,他們也可以毫不費力地查看整個Ethereum 生態系統的Stablecoin 發行情況,但大多數分析Stablecoin 的政策文件卻採取了一種探討假設事件的分析方法。
我將在本篇中具體闡釋以下幾點內容,希望可以對想要使用鏈上數據的政策研究人員有所幫助:
· 鏈上數據的獲取方法
· 鏈上數據所採用的結構
· 提取和使用鏈上數據的幾個基本工具
在隨後的文章中,我將探討如何使用這裡收集的數據來判斷Crypto 市場的走勢。同時,我將在結尾發布可供免費使用的數據和代碼。通過闡明如何在區塊鏈中查詢數據,我希望向大家展示Crypto 的開放性可以為數據決策開闢的新方法。
如果您就職於一家監管機構或研究機構,並在獲取Crypto 數據時遇到了困難,歡迎與我們取得聯繫分享你的想法,了解Paradigm 可以為您提供哪些幫助。
II. 鏈上數據獲取方法
一般來講,數據收集工作應集中在一個區塊鏈(Ethereum)及特定項目的子集上,這些項目主要是以美元計價、法幣支持的Stablecoin,具體包括USDC、Tether、Binance USD、Pax Dollar 和Gemini Dollar。該方法廣泛適用於鏈上數據,即便你想創建一個不同的數據集。
Etherscan 這類區塊瀏覽器非常適用於查看交易快照以及收集特定智能合約的信息,但根據我的經驗,它們卻不太能用於生成大型數據集。在收集和處理原始數據時,你基本上有兩個選擇:(1)在本地運行一個完整的節點,或(2)查詢已經從鏈上直接寫入原始數據的數據庫。第一種方法對於專業技能和計算資源的要求比較高,而第二種方法則只需要基本的SQL 和Python 技能就可以實現,所以這裡我們將採用第二種方法。
Dune 和谷歌云平台(GCP)的BigQuery 有最新的鏈上數據,這些數據都以表格的形式存儲在數據庫中,研究人員可使用SQL 命令對其進行查詢。 Dune 還提供免費的數據庫,不過其速度較慢,而且還有些局限性,但它非常適合於A/B 測試的數據查詢,也有助於你熟悉數據庫的運行模式,尤其是對於那些不善於使用SQL 查詢關聯數據庫的人。 BigQuery 雖然更加靈活快捷,但谷歌會對計算資源收費,所以其價格也相對昂貴。我在第一次處理數據時,為了節省費用,我會先在Dune 中測試查詢語句,然後再將其輸入GCP 中運行。在大多數情況下,這種方法都能起到很好的效果(還有一點值得注意的是,Dune 的Crypto 表格數量至少是GCP 的100 倍,包括一些用戶生成、預先清理過的高質量Crypto 表格。相比之下,GCP 中的數據大多是原始區塊或交易。Dune 也有一些非常方便的內置數據可視化工具,值得單獨購買。)
III. 鏈上數據結構
要回答這個問題,你首先需要搞清楚自己處理數據的目的。對於這個測試案例,我決定為主要的法定支持Stablecoin 建立一個大型的時間序列數據集,並觀察一些特定的行為: 鑄幣(即發行Stablecoin),燒毀(即停止流通Stablecoin) 和轉移。我之所以選擇以這種方式進行研究,是因為政策制定者和學者目前最為關注法定支持的Stablecoin,所以這些數據在短期內可能相當有用。
以美元計價的幾大Stablecoin 都採用了ERC-20Token 標準。顧名思義,ERC-20 是一種在Ethereum 上使用智能合約創建Token 的標準化方式。如果你把區塊鏈理解為一個巨大的去中心化Excel 表格,那麼智能合約就類似於Excel 函數。在函數中輸入參數之後,它將使用其內置邏輯產生一個特定的輸出結果(例如,MAX 函數就是用來輸出所輸入參數中的最大值)。
我們可以使用智能合約的Ethereum 地址來對它們進行定位,這些地址是區塊鏈數據結構中的唯一標識符:
· USDC
· Tether USD
· Binance USD
· Pax Dollar
· Gemini Dollar
與API 類似,智能合約也是可以重複使用的程序。每次智能合約獲得互動指令時,都會產生該互動的記錄,並由Ethereum 協議以日誌的形式記錄在區塊鏈上,而這些日誌則構成了智能合約活動的可靠信息來源。
當智能合同執行一個特定函數時,例如燒毀ERC-20 Stablecoin 以將其從流通中移除,該函數及其參數將作為交易日誌記錄在區塊鏈上。
在下面的交易中,USDC Stablecoin 的發行商Circle 燒毀了價值1056.92 美元的USDC。
如果你切換到「日誌」標籤,你就可以查看交易事件日誌,相應的字段為
· 地址:智能合約的合約地址。 USDC Stablecoin 的合約地址是0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48。
· 名稱:智能合約執行的函數,以及該函數中的參數。在這裡,智能合約正在調用燒毀函數,該函數接收的參數指定了所燒毀幣的發送地點(例如燃燒池,必須是Ethereum 地址)和燒毀幣的數量(其金額必須是小於256 位的無符號整數)。
Etherscan 的輸出結果還會顯示主題和數據字段,這些字段包含了我們在分析交易時需要解析的大部分相關信息。
· Topic0 是函數簽名的哈希值。從本質上講,它會將函數及其參數經由單向算法得到一個唯一的函數哈希值。 Ethereum 使用的是Keccak-256 哈希函數,當你通過Keccak-256 算法輸入函數簽名時,它總是會產生相同的哈希值,所以任何時候該哈希值出現在日誌中,你都能確信是調用了同一個函數。
· Topic1 是燒毀函數的一個索引參數。在這裡,Topic1 是燒毀的Token 被發往的地址。 (注意:如果燒毀函數有更多的參數,這些參數將作為額外的主題出現)
· 這裡的數據字段表示所燒毀Token 的數量。
既然我們已經了解了鏈上數據的基本結構,就可以開始從Dune 和GCP 中提取數據了。
IV. 提取並處理鏈上數據的基本工具
如前所述,在這個例子中,我選擇從現有數據庫中提取鏈上數據,而不是訪問Ethereum 網絡上的活動節點。為了便於理解,我使用SQL 從GCP 提取了大量原始數據表格,然後在Python 中使用pandas 庫對其進行清理。
當我們從GCP 提取表格時,我們將使用BigQuery,它儲存有很多Ethereum 的數據表,如下圖左邊一欄所示。當你點擊一個表格時,相應的數據庫模式就會出現,就如下圖中的ethereum.logs 表。與此同時,其中涉及的地址、數據和主題都會記錄到日誌數據中去。
下圖中的查詢語句將用於提取日誌表中涉及與USDC、Tether USD、Binance USD、Pax Dollar 或Gemini Dollar 合約互動的所有記錄。除了ethereum.logs 中的信息外,一些額外的信息也很有用,所以我還合併了ethereum.block 表中的數據,其中涵蓋了Gas 費等信息。
得到的表格可以直接由Python 讀取,並藉助pandas 數據框架細分為以下字段:
· log_index
· transaction_hash
· transaction_index
· address
· data
· topics
· block_timestamp
· block_number
· block_hash
· number
· miner
· size
· gas_limit
· gas_used
· base_fee_per_gas
這些字段中的大多數都可以直接使用,不過第三節中討論的主題字段需要用Python 進行一些額外的清理,以便將其分成多列。
V. 結語
這篇文章使用的是Ethereum 的日誌數據,同樣的方法也可以用來訪問鏈上的各種數據。 Python 和SQL 是大多數經濟學家和政策制定者所熟悉的工具,它們可以發揮很大作用。與傳統金融相比,Crypto 更具透明度。這樣一來,研究人員就可以利用實時數據來闡明金融體系的運作方式,並及時控制住可能出現的風險。