本章我们来看看 return(p, s)
revert(p, s)
keccak256(p, n)
这三条指令。
function return2and4() external pure returns (uint256, uint256) {
assembly{
mstore(0x00, 2)
mstore(0x20, 4)
return(0x00, 0x40)
}
// returns 2 4
}
在 assembly
里,return(p, s)
是一条指令,表示结束执行并返回结果。这里的 p
是内存的起始位置,而 s
则表示数据的长度。上述代码会将内存地址 0x00
到 0x40
的数据返回,其中包括两个 32 字节的整数:2 和 4。通过这种方式,可以直接从内存中读取和返回所需的数据。
function requireV1() external view {
require(msg.sender == 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2);
}
function requireV2() external view {
assembly {
if iszero(eq(caller(), 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2)) {
revert(0,0)
}
}
}
revert(p, s)
指令用于中止执行并恢复所有状态变化。它与 return
类似,也可以返回数据,在后续章节将会体现。
function hashV1() external pure returns (bytes32) {
bytes memory toBeHashed = abi.encode(1,2,3);
return kec...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!