Events
是否可以根據記錄的索引參數使用萬用字元過濾事件
假設我有一個契約,
event PersonCreated(uint personId, bytes32 indexed name)
每次創建一個人時都會觸發。要查詢名稱等於 Jason 的所有過去事件,我們可以使用:
contract.getPastEvents('PersonCreated', { filter: { "name": [web3.utils.toHex("Jason") ] }, fromBlock: 0, toBlock: 'latest' }).then((events)=> { console.log("Events: ", events) })
**$$ Q $$**是否可以創建過濾器來查詢名稱以“J”開頭的所有事件?
根據https://github.com/ethereum/go-ethereum/blob/7f74bdf8dded0e1ac3c01e043c2ed89d78f308cf/eth/filters/filter.go只檢查空過濾器和相等(
func filterLogs
),所以你的問題的答案是:否這是不可能的(儘管如此,擁有該功能會很酷)。==
... for i, topics := range topics { match := len(topics) == 0 // empty rule set == wildcard for _, topic := range topics { if log.Topics[i] == topic { match = true break } } ... } ...
如果您想按起始字母進行過濾,則必須為您的事件定義一個附加參數。例如:
event PersonCreated(uint personId, bytes1 indexed firstLetter, bytes32 indexed name)