在本节中,我们将详细讲解官方文档中的 100% Yul 实现的 ERC20 合约。
Lotus Router是一个专门针对MEV交易的交易路由合约,支持多种DeFi协议,如Uniswap V2/V3等。文章详细介绍了合约的核心逻辑、数据结构及压缩编码方法,展示了如何在处理复杂回调及数据解码时,使用内联汇编来优化执行效率和减少calldata体积,并指出代码中存在重入攻击的风险。
一些内存使用的注意事项。
这篇文章详细介绍了以太坊的预编译合约,包括其创建过程、在Solidity语言中的应用及其通过内联汇编的调用方式,并讨论了使用这些合约时的安全考虑。
在这最后一节,我们将看一些 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 采用了一种指针和数据分离的方式进行编码。
本文将介绍两种常见转账的实现方式,以及它们在 Yul 中的对应写法和 gas 费用的比较。
让我们来看一下如何使用 Yul 编写一个合约,并使其能够接受外部调用。