Platform: Code4rena
Start Date: 04/01/2022
Pot Size: $25,000 USDC
Total HM: 3
Participants: 40
Period: 3 days
Judge: Ivo Georgiev
Total Solo HM: 1
Id: 75
League: ETH
Rank: 27/40
Findings: 1
Award: $49.89
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: agusduha
Also found by: 0xsanson, Czar102, Dravee, GiveMeTestEther, WatchPug, p4st13r4, saian, sirhashalot
4.7941 USDC - $4.79
GiveMeTestEther
Save gas by making storage variable constant that is never written.
uint88 internal constant MAX_TOTAL_XDEFI_SUPPLY = uint88(240_000_000_000_000_000_000_000_000);
#0 - deluca-mike
2022-01-05T08:26:01Z
Yup, good catch. However, we will be removing this variable anyway now.
#1 - deluca-mike
2022-01-09T10:27:37Z
Duplicate #36
🌟 Selected for report: Dravee
Also found by: GiveMeTestEther
45.1044 USDC - $45.10
GiveMeTestEther
Custom errors from Solidity 0.8.4 are more gas efficient than revert strings, when the revert condition is met, and also decreases deploy time costs.
XDEFIDistribution.sol: require((XDEFI = XDEFI_) != address(0), "INVALID_TOKEN"); XDEFIDistribution.sol: require(owner == msg.sender, "NOT_OWNER"); XDEFIDistribution.sol: require(locked == 0, "LOCKED"); XDEFIDistribution.sol: require(pendingOwner == msg.sender, "NOT_PENDING_OWNER"); XDEFIDistribution.sol: require(duration <= uint256(18250 days), "INVALID_DURATION"); XDEFIDistribution.sol: require(lockAmount <= amountUnlocked_, "INSUFFICIENT_AMOUNT_UNLOCKED"); XDEFIDistribution.sol: require(totalUnitsCached > uint256(0), "NO_UNIT_SUPPLY"); XDEFIDistribution.sol: require(lockAmount_ <= amountUnlocked_, "INSUFFICIENT_AMOUNT_UNLOCKED"); XDEFIDistribution.sol: require(count > uint256(1), "MIN_2_TO_MERGE"); XDEFIDistribution.sol: require(ownerOf(tokenId) == msg.sender, "NOT_OWNER"); XDEFIDistribution.sol: require(positionOf[tokenId].expiry == uint32(0), "POSITION_NOT_UNLOCKED"); XDEFIDistribution.sol: require(exists(tokenId), "NO_TOKEN"); XDEFIDistribution.sol: require(exists(tokenId), "NO_TOKEN"); XDEFIDistribution.sol: require(amount_ != uint256(0) && amount_ <= MAX_TOTAL_XDEFI_SUPPLY, "INVALID_AMOUNT"); XDEFIDistribution.sol: require(bonusMultiplier != uint8(0), "INVALID_DURATION"); XDEFIDistribution.sol: require(ownerOf(tokenId_) == account_, "NOT_OWNER"); XDEFIDistribution.sol: require(expiry != uint32(0), "NO_LOCKED_POSITION"); XDEFIDistribution.sol: require(block.timestamp >= uint256(expiry), "CANNOT_UNLOCK"); XDEFIDistribution.sol: require(count > uint256(1), "USE_UNLOCK")
Use 0.8.4’s custom errors instead to save on gas.
#0 - deluca-mike
2022-01-05T08:24:20Z
Yep, we'll do this. I have been meaning to move away from revert strings for a while now.
#1 - deluca-mike
2022-01-09T10:28:31Z
Duplicate #22