Platform: Code4rena
Start Date: 05/04/2022
Pot Size: $30,000 USDC
Total HM: 10
Participants: 47
Period: 3 days
Judge: gzeon
Total Solo HM: 4
Id: 106
League: ETH
Rank: 37/47
Findings: 1
Award: $58.88
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: Dravee
Also found by: 0v3rf10w, 0x1f8b, 0xkatana, CertoraInc, FSchmoede, Funen, IllIllI, Kenshin, Meta0xNull, TerrierLover, Tomio, csanuragjain, joshie, obront, rayn, rfa, robee, saian, securerodd, sorrynotsorry, t11s, z3s
58.883 USDC - $58.88
gas
#1 Using custom error
https://github.com/code-423n4/2022-04-backed/blob/main/contracts/NFTLoanFacilitator.sol#L81-L86
https://github.com/code-423n4/2022-04-backed/blob/main/contracts/NFTLoanFacilitator.sol#L118
https://github.com/code-423n4/2022-04-backed/blob/main/contracts/NFTLoanFacilitator.sol#L121
https://github.com/code-423n4/2022-04-backed/blob/main/contracts/NFTLoanFacilitator.sol#L171-L172
Declared by error
statement, and using revert
statement to throw the error message. This method is better for gas improvement than just using long string
#2 Tight var packing in Loan
struct
https://github.com/code-423n4/2022-04-backed/blob/main/contracts/interfaces/INFTLoanFacilitator.sol#L6-L16
By arranging the variables, it is possible to minimize the number of slots used within a contract's storage and therefore reduce deployment costs. Address var are 20 bytes size and bool are 1, there's a slot here that can get saved by moving them closer to an address.
Change to:
struct Loan { uint16 perAnumInterestRate; uint32 durationSeconds; uint40 lastAccumulatedTimestamp; address collateralContractAddress; address loanAssetContractAddress; bool closed; uint128 accumulatedInterest; uint128 loanAmount; uint256 collateralTokenId; }
#3 Better using != than > or < https://github.com/code-423n4/2022-04-backed/blob/main/contracts/NFTLoanFacilitator.sol#L321 != is more efficient than < or > for gas optimization
#4 Using calldata to store string var parameter https://github.com/code-423n4/2022-04-backed/blob/main/contracts/NFTLoanTicket.sol#L21-L22 Using calldata instead of memory can save gas