Platform: Code4rena
Start Date: 21/04/2022
Pot Size: $100,000 USDC
Total HM: 18
Participants: 60
Period: 7 days
Judge: gzeon
Total Solo HM: 10
Id: 112
League: ETH
Rank: 34/60
Findings: 2
Award: $248.66
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: IllIllI
Also found by: 0v3rf10w, 0x52, 0xDjango, 0xkatana, Dravee, Funen, Kenshin, Ruhum, StyxRave, Tadashi, TerrierLover, TrungOre, antonttc, berndartmueller, catchup, csanuragjain, defsec, dipp, fatherOfBlocks, hake, horsefacts, hubble, jayjonah8, joestakey, kebabsec, kenta, m4rio_eth, oyc_109, pauliax, peritoflores, rayn, remora, robee, securerodd, simon135, sorrynotsorry, sseefried, z3s
159.3125 USDC - $159.31
lack of zero address checks -
StakerVault.sol l#66
function initialize(address _token) external override initializer { token = _token; }
Vault.sol l#73-80
constructor(IController _controller) Authorization(_controller.addressProvider().getRoleManager()) { controller = _controller; IAddressProvider addressProvider_ = _controller.addressProvider(); addressProvider = addressProvider_; reserve = IVaultReserve(addressProvider_.getVaultReserve()); }
🌟 Selected for report: joestakey
Also found by: 0v3rf10w, 0x1f8b, 0x4non, 0xDjango, 0xNazgul, 0xkatana, 0xmint, Dravee, Funen, IllIllI, MaratCerby, NoamYakov, Tadashi, TerrierLover, Tomio, WatchPug, catchup, defsec, fatherOfBlocks, hake, horsefacts, kenta, oyc_109, pauliax, rayn, rfa, robee, saian, securerodd, simon135, slywaters, sorrynotsorry, tin537, z3s
89.3504 USDC - $89.35
l#291,692
... } else { staker.transfer(payer, position.depositTokenBalance); @audit } ...
l#692
... if (position.depositTokenBalance > 0) { // transfer any unused locked tokens to the payer IStakerVault(vault).transfer(payer, position.depositTokenBalance); @audit IStakerVault(vault).decreaseActionLockedBalance( payer, position.depositTokenBalance ); } ...
consistently use safeTransfer instead of transfer
onlyGovernance
can be marked payable
to save gas (gas3)!=
instead of >
for unsigned int (gas1)!=
instead of >
for unsigned int (gas1)token
can gas-golfed via mload, caching in memory rather than 3 loads --- Similarly for unstakeFor() (gas5)!=
instead of >
for unsigned int (gas1)!=
instead of >
for unsigned int (gas1)