如何过滤以太坊地址
How to filter for ethereum address
我尝试编写一个脚本来获取我的以太坊地址发生的交易。
此脚本在监控合约地址时有效,但如果我想监控我自己的地址或非合约地址,它不会获得任何交易
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 library. You can subscribe directly to blocks 并请求新区块的交易信息。但是我不知道 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 代币时都会触发处理程序。
我尝试编写一个脚本来获取我的以太坊地址发生的交易。 此脚本在监控合约地址时有效,但如果我想监控我自己的地址或非合约地址,它不会获得任何交易
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 library. You can subscribe directly to blocks 并请求新区块的交易信息。但是我不知道 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 代币时都会触发处理程序。