Yul 入门指南
在本节中,我们将详细讲解官方文档中的 100% Yul 实现的 ERC20 合约。
一些内存使用的注意事项。
本文讨论了在去中心化金融(DeFi)协议中,使用Solidity/Yul库进行数学计算的重要性。重点是展示了如何通过等价检查工具检测和证明常量函数市场制造商(CFMM)中的算术漏洞和相应的经济攻击,特别是PRBMath库中的舍入错误。文章提供了案例分析和完整的代码示例,强调了自动化检查的必要性。
这篇文章详细介绍了Yul语言,作为以太坊上智能合约的低级语言,具有更高的代码执行效率。文章包括Yul的语法、数据类型、控制流、函数以及Yul和Solidity的对比,并提供了一些示例代码和编译工具的推荐,以帮助开发者理解和应用Yul语言。文章结构清晰,内容丰富,有助于熟悉低级编程概念的开发者进行智能合约优化。
本文对 ZKsync VM 中的几个预编译函数进行了审计,涵盖了椭圆曲线点加法、标量乘法、配对和模幂运算的系统合约。文章详细讨论了审计范围、系统概述、安全模型、发现的问题及改进建议,并强调了对这些预编译的实施和文档质量的改善需求。
在这最后一节,我们将看一些 Yul 中相对较少使用的指令。
数组与映射是如何存放在“存储槽”的?
从本章开始,我们来研究内存布局。
Solidity 是如何使用内存的?
本章我们来看看 return(p, s) revert(p, s) keccak256(p, n) 这三条指令。
return(p, s)
revert(p, s)
keccak256(p, n)
关于 log 的指令。
log
在 Solidity 中关于 tx.data 有约定俗成的用法。
关于合约之间调用的指令 call、callcode、delegatecall 和 staticcall。
call
callcode
delegatecall
staticcall
可变长度的数据,ABI 采用了一种指针和数据分离的方式进行编码。