由於區塊鏈上的交易可以作為公共數據訪問,我們可以開發一個抓取客戶端來檢索每個區塊中的數據進行分析。
這裡是Rust API中我用來訪問Solana區塊鏈的代碼。
創建RPC客戶端。
RpcClient::new('https://solana-api.projectserum.com'.to_string());
獲取當前Epoch
client.get_epoch_info().unwrap();
獲取Epoch間隔的時隙號(absolute_slot)。
start_slot = epoch_start.absolute_slot; end_slot =
epoch_end.absolute_slot;
獲取兩個時隙號之間的交易區塊。
let blocks = _client.get_blocks(start, Some(end)).unwrap();
for s in blocks {
let _blk = _client.get_block(s);
// get the data we need from each block
每個區塊包含一個交易列表。每個交易都有元數據、消息、交易前和交易後的餘額以及賬戶列表。
有許多不同種類的信息。從測試中,我發現以下2條消息將表示轉賬。
'Program 11111111111111111111111111111111 success''Program log: Instruction: Transfer'
我過濾掉了消息,然後從預平衡中減去後平衡。它可以追踪在帳戶鍵之間轉移了多少lamport。
我為每個交易提取這些信息,並將其輸入到Neo4J圖形數據庫中,以構建不同帳戶之間所有轉賬的關係。這是在Neo4J 中建立傳輸關係的Cypher Query。
MATCH (ac1:Account {key: $ckey}),(ac2:Account {key: $dkey})
MERGE (ac1)-[rel:TRANSFER_TO]->(ac2)')
下面顯示了轉賬圖的可視化。每個紅色節點代表一個Solana帳戶,直接鏈接是transfer_to關係。

圖中顯示了幾個繁忙的集群。

圖形數據庫可以支持許多分析,例如查詢哪些帳戶是最受歡迎的帳戶。我們可以很容易地追踪到經常轉賬到某個可疑賬戶的賬戶群。這有助於識別違法行為。
Source:https://medium.com/coinmonks/solana-blockchain-data-scraping-2cca0dc056aa
