Go-Ethereum
如何找到支持特定 ABI 的所有契約?
我試圖找到一種簡單的方法來掃描區塊鏈以查找支持特定 ABI 的契約。以 ERC20 為例:在公共乙太坊區塊鏈上找到所有 ERC20 支持合約的最簡單方法是什麼?
我知道我需要從區塊鏈合約字節碼中的 ABI 中搜尋函式簽名。有沒有辦法在不編寫一些自定義程式碼的情況下做到這一點,如果需要自定義程式碼,是否有可用的範例?
我目前正在使用 Geth 來執行我的節點。
你不能,沒有辦法進行智能搜尋。
為了找到合約,您需要掃描區塊鏈並編譯第一個列表。標準基本 erc20 的第一個事件應該是從 0x0 到某個地址的傳輸。為此掃描地址 0x0。
鑑於此,您應該執行一個過濾器程式碼,簡而言之,它可以從列表中的合約中呼叫一個或多個標準函式,以了解該合約是否實現了 Erc20 的基礎。
最合適的測試函式是 balanceOf() 和 totalSupply(),其中第一個可以返回零,它們都是視圖函式,這意味著它們不需要花費任何氣體。
在此階段之後,您應該有一個簡化的列表,可以根據您的應用程序應用一些標准進一步減少該列表。
如您所見,沒有什麼是自動的。至少據我所知。