作者:牛頓區塊
區塊連技術開發工程師,Avatar NFT自動化程序猿,Crypto投資者
如何合法查看加密貨幣交易?
加密貨幣崩了,但技術不死。
專欄朋友早前撰寫了一篇關於Blockchain在農產品應用上的文章,今天筆者也來談談 Blockchain 在技術上的操作罷。
從拜登說起:Blockchain 至 Family office
2021年11月美國總統拜登簽署的總統令提出了針對加密貨幣的最新稅務匯報要求:對於crypto公司的用戶之間的數字資產轉移,他們必須提供一種透明的可audit的機制要求accountability和 auditable記錄。這影響的金融產品包括:Crypto-native business、hedge funds、家族辦公室等。
這樣的合規要求在技術上需要研發一款blockchain explorer,實際上每一種加密貨幣錢包核心就是一款blockchain explorer,具備存儲,轉移加密貨幣和查詢全歷史交易記錄的功能。
Blockchain 是怎麼一回事?
Blockchain的交易記錄本質上是一個分布式賬本,當然每一種blockchain的實現機制有所不同。本篇文章就以以太坊Ethereum為例,因為以太坊是基於賬戶的分布式賬本,類似於傳統銀行,因此便於讀者理解。實現全歷史交易記錄的查詢,主要有兩種方式:利用第三方服務商數據,自建blockchain全節點(full-node)。
不能不談錢:記憶體也需要第三方服務
首先我們需要知道為走甚麼需要第三方服務商,主要是考慮自建全節點的成本。
從圖中今日的最新數據中,運營一個全節點最少需要900GB的存儲空間。Blockchain explorer需要從全節點中獲取交易數據,處理並存儲在本地數據庫中。本地數據庫是指技術成熟的關系型SQL數據庫,可以方便高效的進行各種數據操作。
Infura是市場上的主要第三方服務商之一,他負責運維全節點。我們的應用程序向infura發出請求獲取交易數據,主要流程見下圖
Infura服務是免費的,通過記錄單次取回數據的時間,我們計算出完整分布式賬本的下載時間,很可惜消耗的時間無法滿足要求。因此,我們轉向自建節點架構。
時間是個梗:全節點架構
對於全節點的實現,我們需要一台強勁的服務器配備SSD儲存(必須有900GB以上),或者雲主機。通過安裝Parity程序構建全節點,隨後建立好防火墻有效保護節點。在全節點上同步所有區塊後,我們進入應用平台架構,技術選型為Python Django整個應用服務封裝在容器中(Dockor)。
重要的事問三次:數據建模及交易請求
首先需要思考如何在SQL數據庫(Django)中組織數據,我們通過深入解構以太坊交易的數據結構。以太坊有兩種交易,一種是非合約賬戶(smart contract)間的交易,另一種是合約賬戶參與交易。合約地址參與的交易Log中包含ERC20 token通證交易記錄。
當加密貨幣錢包查詢交易時,他需要發起三次請求:
(1)獲取以太坊交易數據、(2)獲取ERC20交易數據、(3)獲取合約內部交易數據
因此要全面解析一次交易,我們需要查看這三種數據,來明白哪些數據或者狀態發生改變。基於此,我們決定建立如下數據模型(Django models)
用關系型SQL數據庫的另一個原因是:篩選查找歷史交易和交易記錄呈現的格式接近于傳統銀行的交易記錄,因此方便理解。
Python 編程來下載數據
我們通過編寫python程序來下載以太坊賬本數據
(1)獲取區塊和區塊中所有交易
(2)將每個交易解析並存儲在數據庫中
(3)處理交易Log中的operations並在數據庫中創建對象
(4)爬取下一個區塊並重複2和3
程序代碼不超過300行,完成了fetching、processing、storing 和 extracting operations等動作。下載完整的分佈式賬本,並轉換成傳統的數據格式需要的存儲空間是2.5TB,PostgreSQL依然能夠應對自如。因此建議這台賬本服務器的存儲空間應該控制在10TB的量級上。
Blockchain 的未來展望
隨著總統令的頒布,大型投資者,機構和社群都必須向合規和稅務等政府部門報告,例如SEC,IRS和HMRC。Blockchain explorer這類軟件服務將承擔起加密貨幣合規和稅務報告的技術橋樑,使監管機構能夠以傳統金融的技術手段監管加密世界。Blockchain 技術是否正在掀起第三次 accounting revolution,我們拭目以待。
|