Events
檢索非常古老的事件
在過去與 Infura 合作時,如果我沒記錯的話,我在從舊的(非最近的)塊中檢索事件時遇到了麻煩。
麻煩(不僅是 Infura,還有其他流行的乙太坊節點)是否仍然存在?
事實上,我希望能夠從非常古老的區塊中檢索事件,甚至是 100 年前(將來)。
將如此古老的數據儲存在鏈上會更好嗎?(它不會佔用太多儲存空間,因為每個使用者只有一個儲存槽。)
我不知道過去是什麼情況,但現在 Infura 在檢索由事件產生的舊日誌時似乎非常可靠。
事實上,使用下面的腳本,您將能夠檢索塊52029中唯一的日誌(並且可能是第一個創建的),該塊是在2015 年8 月 8 日開采的
var Web3 = require('web3'); var web3 = new Web3(new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/' + your_project_id)); web3.eth.getPastLogs({ fromBlock : 0, toBlock : 52029 }).then(console.log);
為了回答您的第二個問題,我將從solidity 文件中引用一些內容:
事件是合約的可繼承成員。當你呼叫它們時,它們會導致參數儲存在交易日誌中——區塊鏈中的一種特殊資料結構。這些日誌與合約的地址相關聯,併入區塊鏈中,並在區塊可訪問時一直存在(從現在開始一直存在,但這可能會隨著 Serenity 而改變)。無法從合約內部訪問日誌及其事件數據(甚至無法從創建它們的合約中訪問)。
如您所見,目前您可以訪問所有過去的日誌,但這可能會隨著 Serenity 的變化而改變。所以對於這樣的長期數據,你最安全的選擇是將它們儲存在鏈上。