登录 后可观看高清视频

在 Yul 中记录事件

Reanblock Reanblock
6次播放
8小时前

该视频主要讲解了在YUL中如何处理日志(logging),特别是如何手动生成和发出事件(events),以及如何区分索引(indexed)和非索引(non-indexed)数据。

核心内容/主要观点:

  • YUL需要手动处理事件的生成和发出,包括生成事件签名的哈希值(keccak256)。
  • YUL使用log系列操作码(opcode)来发出事件,log3用于有三个topic的情况,log2用于有两个topic的情况。
  • 索引数据存储在交易收据(transaction receipt)的topics中,而非索引数据存储在data中。

关键论据/关键信息:

  • Solidity vs. YUL: Solidity会自动处理事件签名哈希的生成,而YUL需要手动生成。
  • 事件签名哈希: 事件签名哈希是事件接口(interface)的keccak256哈希值,用于唯一标识事件类型。
  • log操作码: log操作码的参数包括:
    • PS: 指向内存中非索引数据的指针和大小。
    • T1, T2, T3...: 事件的topics,第一个topic通常是事件签名哈希,后续topics是索引数据。
  • 索引 vs. 非索引数据: 索引数据可以被快速搜索,而非索引数据不能。非索引数据需要先存储在内存中,然后通过log操作码指定内存地址和大小。
  • 交易收据分析: 通过分析交易收据的topics和data字段,可以区分事件中的索引和非索引数据。
Yul  events  logging  indexed data  non-indexed data