40,000 USDC
View results
Submission Details
Severity: gas

Cache storage variables

Summary

Cache Storage variables or block parameters

Vulnerability Details

Storage variables or block parameters like msg.sender can be cached and read from memory to save gas.

Impact

https://github.com/Cyfrin/2023-07-escrow/blob/65a60eb0773803fa0be4ba72defaec7d8567bccc/src/Escrow.sol#L67
https://github.com/Cyfrin/2023-07-escrow/blob/65a60eb0773803fa0be4ba72defaec7d8567bccc/src/EscrowFactory.sol#L20-L53

Tools Used

Manual review

Recommendations

Cache storage variables to save gas

function newEscrow(
uint256 price,
IERC20 tokenContract,
address seller,
address arbiter,
uint256 arbiterFee,
bytes32 salt
) external returns (IEscrow) {
+ address caller = msg.sender;
address computedAddress = computeEscrowAddress(
type(Escrow).creationCode,
address(this),
uint256(salt),
price,
tokenContract,
+ caller,
seller,
arbiter,
arbiterFee
);
+ tokenContract.safeTransferFrom(caller, computedAddress, price);
Escrow escrow = new Escrow{salt: salt}(
price,
tokenContract,
+ caller,
seller,
arbiter,
arbiterFee
);
if (address(escrow) != computedAddress) {
revert EscrowFactory__AddressesDiffer();
}
+ emit EscrowCreated(address(escrow), caller, seller, arbiter);
return escrow;
}

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.