首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当实际存在一个事件日志时,为什么会有几个绘制事件日志?

当实际存在一个事件日志时,为什么会有几个绘制事件日志?
EN

Ethereum用户
提问于 2019-02-10 06:41:29
回答 1查看 128关注 0票数 1

我正在查看makerdao的CDP操作的事件日志,我很困惑为什么一个cdp操作有几个事件日志,比如这个tx:https://etherscan.io/tx/0x0fb6a8d8f10410c544b27b848319e67a422be883e4252fea639c89a444209685#eventlog,它包含了一个cdp操作:makerdao。

第九十五届戴只有一次抽签:

在事件日志中,有几个带有Topic0 (0x440f19ba00000000000000000000000000000000000000000000000000000000)的事件日志(总共6条):

这是为什么?

注:抽签活动签名如下:

代码语言:javascript
复制
  function draw(bytes32 cup, uint wad) public note {

在这里,日志由修饰符note创建,即:

代码语言:javascript
复制
event LogNote(
    bytes4   indexed  sig,
    address  indexed  guy,
    bytes32  indexed  foo,
    bytes32  indexed  bar,
    uint              wad,
    bytes             fax
) anonymous;

modifier note {
    bytes32 foo;
    bytes32 bar;

    assembly {
        foo := calldataload(4)
        bar := calldataload(36)
    }

    LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data);

    _;
}

事件LogNoteanonymous,所以topic0是msg.sig,而不是事件的签名。msg.sig for func dai is:draw(bytes32,uint256),keccak is:0x440f19ba0

EN

回答 1

Ethereum用户

回答已采纳

发布于 2019-02-11 10:40:07

感谢chat的聊天频道link1 link2的@dc和@equivrel的帮助

有相当多的sai函数会产生多个日志条目--这是由于使用了DSNote,每次内部注释函数被称为@dc时都会生成一个日志事件

因此,6个事件日志来自:

  • 3次直接调用chi()
  • 1 rhi()的直接呼叫
  • 1 chi()的非直接调用(safe() -> tab() -> chi())
  • 1次调用draw()
票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/66866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档