web3js 中 getPastEvents 的預設選項
我正在嘗試為我的契約獲取特定的過去事件,名為“轉讓”;當我嘗試簡單地使用以下程式碼時,它會給出空結果。
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 等)