Solidity

web3js 中 getPastEvents 的預設選項

  • March 24, 2022

我正在嘗試為我的契約獲取特定的過去事件,名為“轉讓”;當我嘗試簡單地使用以下程式碼時,它會給出空結果。

myContract.getPastEvents("Transfer").then(function (event) {
   console.log(event);
})
//output is: []

當我使用一些可選參數執行時,它會根據我的契約中的兩個事件提供正確的輸出。

myContract.getPastEvents("Transfer", { fromBlock: 25635490, toBlock: 25635656 }).then(function (event) {
   console.log(event);
})
//output is: Array[2] -- which is array of two events as expected

該合約託管在多邊形孟買測試網上 - https://mumbai.polygonscan.com/address/0x1d7f71e9dd4283B5b4431e7a51498f4C14b18715

並且對 web3js 文件的引用引用了 fromBlock 和 toBlock 是可選參數,所以作為一個新手,我假設它從塊 0 掃描到最新塊,請幫助我。

Contract.getPastEvents文件連結

fromBlock/toBlock - Number|String|BN|BigNumber(可選):從中獲取事件的塊號(大於或等於)。也可以使用預定義的塊號,如“最早”、“最新”和“待定”。

預設塊用於某些方法。您可以通過傳入 defaultBlock 作為最後一個參數來覆蓋它。預設值為“最新”。

fromBlock預設設置為“最新”,這就是你沒有事件的原因。

預設塊參數可以是以下之一:

Number|BN|BigNumber:區塊號

“earliest” - 字元串:創世塊

“latest” - 字元串:最新的區塊(區塊鏈的目前頭部) >

“pending” - 字元串:目前開采的區塊(包括待處理的交易)

但是如果你嘗試“genesis”,你可能會遇到類似這樣的錯誤: Error: Returned error: Blockheight too far in the past: eth_getLogs. Range of blocks allowed for your plan: 1000,這意味著你的節點不允許你搜尋超過 1000 個塊的事件。

在這種情況下,您可以嘗試付費解決方案(moralis、infura 等)

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