Platform: Code4rena
Start Date: 09/09/2022
Pot Size: $42,000 USDC
Total HM: 2
Participants: 101
Period: 3 days
Judge: hickuphh3
Total Solo HM: 2
Id: 161
League: ETH
Rank: 28/101
Findings: 1
Award: $33.81
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: GalloDaSballo
Also found by: 0x040, 0x1f8b, 0x4non, 0x52, 0x85102, 0xNazgul, 0xSky, 0xSmartContract, Aymen0909, Bnke0x0, CertoraInc, Chandr, Chom, CodingNameKiki, Deivitto, Diana, Funen, JC, Jeiwan, Junnon, KIntern_NA, Lambda, Mohandes, Noah3o6, Ocean_Sky, Picodes, R2, Randyyy, RaymondFam, ReyAdmirado, Rohan16, Rolezn, Samatak, Sm4rty, SnowMan, SooYa, StevenL, Tagir2003, Tointer, TomJ, Tomo, V_B, Waze, _Adam, __141345__, a12jmx, ajtra, ak1, asutorufos, bharg4v, bobirichman, brgltd, c3phas, cccz, cryptonue, cryptostellar5, cryptphi, csanuragjain, d3e4, datapunk, delfin454000, dipp, djxploit, durianSausage, erictee, fatherOfBlocks, gogo, got_targ, hansfriese, horsefacts, hyh, ignacio, innertia, izhuer, karanctf, ladboy233, leosathya, lucacez, lukris02, mics, oyc_109, pashov, pauliax, prasantgupta52, rbserver, ret2basic, rfa, robee, rokinot, rotcivegaf, rvierdiiev, sach1r0, scaraven, sikorico, simon135, smiling_heretic, sorrynotsorry, unforgiven, wagmi, yixxas
33.8053 USDC - $33.81
N-01) No check on _claim() and _redeem() for correct cToken address input. While it does not seem to cause any security issues here, it would be a good precaution to take.
Recommended: Check merkleRoot[cToken] != address(0)
N-02) Function redeem() loops through the list of token address and do a safeTransfer. In the event if any of the tokens fail to transfer to the receiving address for whatever reasons, it will revert for all tokens. Recommended: Do a normal transfer instead in case of unexpected transfer failure of a single token that cannot be addressed.
N-03) Likewise, in function previewRedeem(), there is a check of require(balance != 0, "ZERO_BALANCE")
for all of the token, and if one token balance is 0, it will cause a revert for all.
Recommended: Remove this check as it is unnecessary. Instead, in redeem(), we can do the token transfer only if amountsOut[i] != 0
.