簡體   English   中英

如何過濾以太坊地址

[英]How to filter for ethereum address

我嘗試編寫一個腳本來獲取我的以太坊地址發生的交易。 此腳本在監控contractAddress時有效,但如果我想監控我自己的地址或非合約地址,它不會得到任何交易

def handle_event(event):
    print(event)
    print(Web3.toJSON(event))    

def log_loop(event_filter, poll_interval):
    while True:
        for event in event_filter.get_new_entries():
            handle_event(event)
        time.sleep(poll_interval)

def main():
    event_filter = web3.eth.filter({"address": trackAddress})
    #get_block = web3.eth.get_block('latest')
    #block_filter = web3.eth.filter('latest')
    log_loop(event_filter, 2)

if __name__ == '__main__':
    main()

據我所知,使用 filter 命令只能監控合約上發生的事件。 此選項不適用於您的情況。

我將編寫 JavaScript 代碼,因為我更熟悉它,但您可以將其改編為 python。 我可能會做這樣的事情:

async function checkBlock(address) {
    const block = await web3.eth.getBlock('latest');
    console.log(`Checking new block ${block.number}`);

    for (let txHash of block.transactions) {
        const tx = await web3.eth.getTransaction(txHash);
        if (address === tx.to.toLowerCase()) {
            console.log(`New transaction found. Block - ${block.number}`);
            console.log(`Transaction: ${tx}`);
        }
    }
}

您可以將此函數插入setInterval並大約每15秒調用一次。 為什么是 15 秒? 平均而言,每 15 秒就會出現一個新塊。

另一種選擇是使用ethers.js庫。 您可以直接訂閱 區塊並請求新區塊的交易信息。 但我不知道python是否存在這樣的庫。

你也可以這樣做:

const topicSets = [
    utils.id("Transfer(address,address,uint256)"),
    null,
    [
        null,
        hexZeroPad(address, 32)
    ]
]
provider.on(topicSets, (log, event) => {
    // Emitted any token is sent TO your address
})

在這種情況下,每次您收到 ERC-20 代幣到您的地址時都會觸發處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM