Platform: Code4rena
Start Date: 05/01/2023
Pot Size: $90,500 USDC
Total HM: 55
Participants: 103
Period: 14 days
Judge: Picodes
Total Solo HM: 18
Id: 202
League: ETH
Rank: 45/103
Findings: 1
Award: $253.34
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: ladboy233
Also found by: 0x1f8b, 0xAgro, 0xSmartContract, 0xbepresent, 0xkato, Aymen0909, CodingNameKiki, Cryptor, Deekshith99, Deivitto, HE1M, IllIllI, Kaysoft, Koolex, PaludoX0, Qeew, RaymondFam, Rolezn, Sathish9098, Tointer, a12jmx, arialblack14, ast3ros, ayeslick, bin2chen, btk, caventa, ch0bu, chaduke, chrisdior4, delfin454000, descharre, evan, fatherOfBlocks, georgits, gz627, jasonxiale, joestakey, kaden, lukris02, nicobevi, nogo, oberon, oyc_109, pfapostol, rbserver, sakshamguruji, seeu, shark, simon135, slvDev, synackrst, tnevler, whilom, zaskoh
253.3371 USDC - $253.34
address(0)
Base64.sol
contract instead of write your own.Function input param owner
is shadowing the function owner()
. The recommendation is to change the name to _owner
.
currentWithdrawProxy
is shadowingRemove any unused variable
tokenContract
is not being used)stack
is not being used)tokenContract
is not used)tokenId
is not used)If an input param is not being used in the function body, then it could be removed to save gas
uint256 shares
could be changed to uint256
)caller
, priorOrderHashes
and criteriaResolvers
are not being used)account
and id
is not being used)ids
is not being used)account
and operator
are not being used)tokenContract
and to
are not being used)data
is not being used)operator_
, from_
, tokenId_
and data_
are unused)tokenContract
is not being used)caller
and offerer
are not used)assers
and receiver
are not used)shares
are not used)msg.sender
is the guardian and throw an error otherwiseAstariaRouter.sol
+ error OnlyGuardianError(); + function onlyGuardian(address guardian) private view { + if (msg.sender != guardian) { + revert OnlyGuardianError(); + } + } function setNewGuardian(address _guardian) external { RouterStorage storage s = _loadRouterSlot(); - require(msg.sender == s.guardian); + onlyGuardian(s.guardian); s.newGuardian = _guardian; } function __renounceGuardian() external { RouterStorage storage s = _loadRouterSlot(); - require(msg.sender == s.guardian); + onlyGuardian(s.guardian); s.guardian = address(0); s.newGuardian = address(0); } function __acceptGuardian() external { RouterStorage storage s = _loadRouterSlot(); - require(msg.sender == s.newGuardian); + onlyGuardian(s.newGuardian); s.guardian = s.newGuardian; delete s.newGuardian; } function fileGuardian(File[] calldata file) external { RouterStorage storage s = _loadRouterSlot(); - require(msg.sender == address(s.guardian)); + onlyGuardian(address(s.guardian)); uint256 i; for (; i < file.length; ) { FileType what = file[i].what; bytes memory data = file[i].data; if (what == FileType.Implementation) { (uint8 implType, address addr) = abi.decode(data, (uint8, address)); if (addr == address(0)) revert InvalidFileData(); s.implementations[implType] = addr; } else if (what == FileType.CollateralToken) { address addr = abi.decode(data, (address)); if (addr == address(0)) revert InvalidFileData(); s.COLLATERAL_TOKEN = ICollateralToken(addr); } else if (what == FileType.LienToken) { address addr = abi.decode(data, (address)); if (addr == address(0)) revert InvalidFileData(); s.LIEN_TOKEN = ILienToken(addr); } else if (what == FileType.TransferProxy) { address addr = abi.decode(data, (address)); if (addr == address(0)) revert InvalidFileData(); s.TRANSFER_PROXY = ITransferProxy(addr); } else { revert UnsupportedFile(); } emit FileUpdated(what, data); unchecked { ++i; } } }
ACTIVE_AUCTION
could be marked as private)ROUTER()
instead of calling the low function _getArgAddress(0)
multiple times on ClearingHouse.sol
- IAstariaRouter ASTARIA_ROUTER = IAstariaRouter(_getArgAddress(0)); + IAstariaRouter ASTARIA_ROUTER = IAstariaRouter(ROUTER());
#0 - c4-judge
2023-01-26T14:27:40Z
Picodes marked the issue as grade-a