【问题标题】:Why some events hasnt been shown in Ethereum logs为什么有些事件没有显示在以太坊日志中
【发布时间】:2022-01-20 23:42:00
【问题描述】:

目前,我正在尝试使用 web3.py 从以太坊解码和提取一些交易日志。这是我的代码:

def exarctevent(List, w3, target=None):
    # for tran in List:
    infos=w3.eth.get_transaction_receipt(List)
    abr=[]
    log=infos["logs"]
    for case in log:
        smart_contract=case["address"]
        abi_endpoint = f"https://api.etherscan.io/api?module=contract&action=getabi&address={smart_contract}&apikey={mykey}"
        abi = json.loads(requests.get(abi_endpoint).text)
        contract=w3.eth.contract(smart_contract, abi=abi["result"])
        the_event=[print(adi) for adi in contract.abi if adi['type']=='event']

但今天当我测试我的代码时,我发现我从交易中解码的事件远远超过它们在以太坊上显示的内容。 这是我的解码结果。 交易hx:0x7121a17975f447900eb1e5f664eed712c6129c160f0abaad70bc564cb5a3dd0e

这就是它在以太坊上展示的内容,那里只放了一个事件。 为什么?不是所有发出的事件都会记录为日志吗?为什么有这么多事件没有显示?

我想问的另一件事是索引参数可以做什么。从图2可以看到有两个indexed_topic,它们是干什么用的?我需要为索引参数输入数据吗?上面的地址是什么意思?

如果有人能回答这个问题,真的很感激。

【问题讨论】:

    标签: ethereum smartcontracts


    【解决方案1】:

    你的照片展示了两种不同的东西。此事务中仅发出 1 个事件 - Transfer 事件。你说的黑色图片显示了事件,实际上并没有显示该交易的事件,而是显示了合约中所有事件的合约 ABI。

    我想问的另一件事是索引参数可以做什么。

    索引参数是指日志以排序的方式存储在节点上。它会花费更多的 gas,但这意味着当您在以后查询某些事件时,它会更有效率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      相关资源
      最近更新 更多