Tuples, revert, keccak256
function return2and4() external pure returns (uint256, uint256) {
assembly {
mstore(0x00, 2)
mstore(0x20, 4)
return(0x00, 0x40) // beginning and end location in memory of items we want to return
}
}// Solidity example
function hashV1() external pure returns (bytes32) {
bytes memory toBeHashed = abi.encode(1, 2, 3);
return keccak256(toBeHashed);
}
// Yul equivalent version
function hashV2() external pure returns (bytes32) {
assembly {
let freeMemoryPointer := mload(0x40)
// store 1, 2, 3 in memory
mstore(freeMemoryPointer, 1)
mstore(add(freeMemoryPointer, 0x20), 2)
mstore(add(freeMemoryPointer, 0x40), 3)
// update memory pointer to account for 3 32-byte variables
mstore(0x40, add(freeMemoryPointer, 0x60)) // increase memory pointer by 96 bytes
mstore(0x00, keccak256(freeMemoryPointer, 0x60))
return(0x00, 0x60)
}
}Last updated