分享百科

Calldata

该视频的核心内容是展示如何使用 YUL (YORL) 编写几乎全部的智能合约,并演示了如何通过 Solidity 接口与 YUL 合约进行交互。 视频的关键论据和信息包括: * **YUL 合约结构:** 合约主要由内联汇编代码组成,没有明确定义的 Solidity 函数或接口。 * **函数选择器:** 通过提取调用数据的头四个字节(函数选择器)并使用位移操作,实现类似 switch 语句的函数分发机制。 * **YUL 中的返回值:** YUL 使用内存来存储返回值,并通过 `return` 语句将值返回给调用合约。`leave` 关键字用于在 YUL 函数之间跳转并最终返回。 * **调用数据处理:** 使用 `calldataload` 指令加载调用数据,并根据函数选择器和参数执行不同的逻辑。 * **接口合约:** 为了方便测试,视频创建了一个 Solidity 接口合约,该合约调用 YUL 合约的 fallback 函数,从而实现与 YUL 合约的交互。 * **演示示例:** 视频演示了两个函数:`get123` 返回硬编码值 123,`get999` 接受一个参数,如果参数等于 999 则返回 999,否则返回 888。
33
0
0
4天前
视频的核心内容是深入解析区块链交易中的调用数据(call data),特别是如何解读复杂的调用数据结构,以帮助区块链工程师和安全研究人员提升他们的技能。视频通过一个具体的交易示例,详细讲解了调用数据的布局、内存存储的差异,以及如何从中提取有用的信息。 关键论据和信息包括: 1. **调用数据与内存的区别**:视频强调了调用数据是只读的,而内存是可读写的,这导致它们在数据编码和存储方式上存在显著差异。 2. **函数选择器的概念**:调用数据的前四个字节是函数选择器,用于指示要调用的具体函数。 3. **动态与静态数据的编码**:视频详细解释了如何区分动态数据和静态数据,动态数据的编码方式与静态数据不同,动态数据需要使用头部和尾部的结构来指向实际数据的位置。 4. **具体交易的解析**:通过对一个在Avalanche测试网上的交易进行逐步解析,视频展示了如何从调用数据中提取出函数调用的参数,包括地址、金额等信息。 5. **复杂数据结构的处理**:视频还探讨了如何处理包含子结构和枚举的复杂数据结构,强调了理解这些结构在调用数据中的布局对于正确解码的重要性。 6. **实用工具和资源**:视频提供了一些工具和资源,帮助观众更快地学习和理解这些概念,避免常见的错误。 总的来说,视频不仅提供了技术细节,还鼓励观众通过反复学习来掌握这些高级概念,以便在区块链开发和安全审计领域中脱颖而出。
120
0
0
2025-02-08 12:33
W2-1理解 call 与 delegatecall 调用
1664
0
0
2023-03-15 09:04
登链社区