Platform: Code4rena
Start Date: 03/11/2022
Pot Size: $115,500 USDC
Total HM: 17
Participants: 120
Period: 7 days
Judge: LSDan
Total Solo HM: 1
Id: 174
League: ETH
Rank: 100/120
Findings: 1
Award: $61.35
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: IllIllI
Also found by: 0x1f8b, 0xNazgul, 0xRoxas, 0xSmartContract, Awesome, Aymen0909, B2, BClabs, Bnke0x0, Deekshith99, Deivitto, Diana, Dinesh11G, Funen, HE1M, HardlyCodeMan, Josiah, Nyx, Rahoz, RaymondFam, RedOneN, ReyAdmirado, Rolezn, Saintcode_, TomJ, Trust, __141345__, a12jmx, adriro, ajtra, aphak5010, apostle0x01, brgltd, btk, bulej93, c3phas, carlitox477, catwhiskeys, ch0bu, chaduke, chrisdior4, cryptonue, cryptostellar5, csanuragjain, ctf_sec, delfin454000, djxploit, durianSausage, erictee, fatherOfBlocks, gogo, i_got_hacked, immeas, joestakey, jumpdest7d, lukris02, martin, mcwildy, merlin, minhquanym, oyc_109, pashov, peanuts, pedr02b2, rbserver, rotcivegaf, rvierdiiev, sakman, saneryee, seyni, shark, slowmoses, tnevler, trustindistrust, w0Lfrum, yurahod, zaskoh
61.3462 USDC - $61.35
Events are inheritable members of contracts. When you call them, they cause the arguments to be stored in the transaction’s log — a special data structure in the blockchain.
These logs are associated with the address of the contract which can then be used by developers and auditors to keep track of the transactions.
The contract LineFactoryLib
was found to be missing these events on the function transferModulesToLine
which would make it difficult or impossible to track these transactions off-chain.
Piece of code:
function transferModulesToLine(address line, address spigot, address escrow) external { (bool success, bytes memory returnVal) = spigot.call( abi.encodeWithSignature("updateOwner(address)", address(line) )); (bool success2, bytes memory returnVal2) = escrow.call( abi.encodeWithSignature("updateLine(address)", address(line) )); (bool res) = abi.decode(returnVal, (bool)); (bool res2) = abi.decode(returnVal2, (bool)); if(!(success && res && success2 && res2)) { revert ModuleTransferFailed(line, spigot, escrow); } if(SecuredLine(payable(line)).init() != LineLib.STATUS.ACTIVE) { revert InitNewLineFailed(address(line), spigot, escrow); } }
function deploySecuredLine( address oracle, address arbiter, address borrower, address payable swapTarget, address s, address e, uint ttl, uint8 revenueSplit ) external returns(address){ return address(new SecuredLine(oracle, arbiter, borrower, swapTarget,s, e, ttl, revenueSplit)); }
Consider emitting events for the functions mentioned above. It is also recommended to have the addresses indexed.
#0 - c4-judge
2022-12-06T14:33:15Z
dmvt marked the issue as grade-b