登录 后可观看高清视频

在 Yul 中使用映射

Reanblock Reanblock
10次播放
11小时前

该视频主要讲解了如何使用 Yul (YOR) 在 Solidity 合约中处理和读取 mappings (映射) 的数据。

核心内容/主要观点:

  • Yul 可以用来读取 Solidity 合约中 mappings 的数据,包括简单映射、嵌套映射以及地址到动态数组的映射。
  • 读取 mapping 数据的关键在于计算出数据存储的位置 (data location),这通常涉及到将 mapping 的 slot (存储位置) 与 key (键) 进行 Keccak-256 哈希运算。

关键论据/关键信息:

  • 简单映射: 通过 keccak256(key, slot) 计算数据位置,然后使用 sload 读取数据。
  • 嵌套映射: 按照从左到右的顺序,依次将 key 与 slot 进行 Keccak-256 哈希运算。例如,对于 mapping(uint256 => mapping(uint256 => uint256)),先计算 keccak256(key1, slot),再计算 keccak256(key2, 上一步的结果),得到最终的数据位置。
  • 地址到动态数组的映射:
    • 首先,keccak256(key, slot) 得到的是动态数组的长度,而不是数组本身的数据位置。
    • 要获取数组中的元素,需要再次进行 Keccak-256 哈希运算,计算 keccak256(keccak256(key, slot)),得到数组的起始数据位置。
    • 然后,通过将索引 (index) 添加到起始数据位置,即可使用 sload 读取数组中特定索引的元素。
Yul  Solidity  mappings  data location  Keccak-256  SLOAD