code-423n4 / 2022-01-openleverage-findings

0 stars 0 forks source link

Gas in `OLETokenLock.transferTo()`: `releaseVars[beneficiary].startTime` should get cached #182

Closed code423n4 closed 2 years ago

code423n4 commented 2 years ago

Handle

Dravee

Vulnerability details

Impact

SLOADs are expensive (~100 gas) compared to MLOADs/MSTOREs (~3 gas). Minimizing them can save gas.

Proof of Concept

The code is as such (see @audit-info tags):

File: OLETokenLock.sol
55:     function transferTo(address to, uint amount) external {
...
66:         uint128 startTime = uint128(releaseVars[beneficiary].startTime > block.timestamp ? releaseVars[beneficiary].startTime : block.timestamp); //@audit-info cache releaseVars[beneficiary].startTime

It's possible to save these 1 SLOAD (~100 gas) by caching releaseVars[beneficiary].startTime in a memory variable and use it instead of reading it repeatedly from storage.

Tools Used

VS Code

Recommended Mitigation Steps

Cache the storage value in a memory variable and use it instead of repeatedly reading it from storage.

ColaM12 commented 2 years ago

Duplicate to #137

0xleastwood commented 2 years ago

This warden has made a large number of submissions pointing to basically the same area in different parts of the code. Because of how similar issues are, I don't think its fair to other wardens to have these treated as separate. While I understand gas reports should fix this, I've decided for this contest I'll mark similar duplicates as invalid.