【Solidity Yul Assembly】2.4 | Return, Require and Keccak256

  • 0xE
  • 发布于 2024-08-26 13:41
  • 阅读 864

本章我们来看看 return(p, s) revert(p, s) keccak256(p, n) 这三条指令。

return

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 则表示数据的长度。上述代码会将内存地址 0x000x40 的数据返回,其中包括两个 32 字节的整数:2 和 4。通过这种方式,可以直接从内存中读取和返回所需的数据。

revert

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 类似,也可以返回数据,在后续章节将会体现。

keccak256


function hashV1() external pure returns (bytes32) {
    bytes memory toBeHashed = abi.encode(1,2,3);
    return kec...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享

0 条评论

请先 登录 后评论
0xE
0xE
0x59f6...a17e
17年进入币圈,Web3 开发者。刨根问底探链上真相,品味坎坷悟 Web3 人生。有工作机会可加v:__0xE__