Events

檢索非常古老的事件

  • December 28, 2020

在過去與 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 的變化而改變。所以對於這樣的長期數據,你最安全的選擇是將它們儲存在鏈上。

引用自:https://ethereum.stackexchange.com/questions/91604