Solidity
如何訪問 ethereumJ ( java ) 中的事件日誌
從 javascript 訪問事件日誌既簡單又直接,但是我正在嘗試從 Java 客戶端訪問日誌。任何範常式式碼都會有所幫助
您可以使用 JsonRpc 類對塊的日誌進行過濾。您可以從 EthereumImpl 的實例中獲取它,如下所示:
JsonRpc jsonrpc = ethereum.getApplicationContext().getBean(JsonRpc.class);
然後,您可以向它傳遞一個 FilterRequest 對象來告訴它要搜尋的內容:
FilterRequest fr = new FilterRequest(); fr.fromBlock = "latest"; fr.toBlock = "latest"; fr.address = ""; //String or String[] - addresses to match fr.topics = ...//String or String[] of topics to match //Hash of event signature is first, then indexed parameters //I believe you can give it a String[][] also, so for each param in the event you can filter for multiple options Object[] logs = jsonrpc.eth_getLogs(fr); for(Object logObject : logs) { LogFilterElement log = (LogFilterElement)logObject; //do stuff with the log of the event }
LogFilterElement 包含來自事件的地址、主題和數據,但它仍然是十六進制格式,因此您必須對其進行解碼。事件的索引值僅在主題中找到,並且被索引的可變長度數據(如字元串或字節)僅作為雜湊儲存在主題中。
我寫了一個 EthereumEventManager 類來為自己處理這些東西。你可以看看這裡。您可以為過濾器請求添加偵聽器,然後它會偵聽新塊並在找到這些過濾器請求時發出通知。隨意使用它,修改它,或者在你認為合適的時候學習它。它沒有很好的記錄,但是如果您有任何問題,我很樂意回答。