Platform: Code4rena
Start Date: 31/03/2022
Pot Size: $75,000 USDC
Total HM: 7
Participants: 42
Period: 7 days
Judge: Jack the Pug
Total Solo HM: 5
Id: 102
League: ETH
Rank: 14/42
Findings: 2
Award: $294.09
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: rayn
Also found by: 0xDjango, 0xkatana, 0xkowloon, BouSalman, CertoraInc, Dravee, Funen, Hawkeye, IllIllI, Jujic, Kenshin, Kthere, Meta0xNull, Sleepy, TerrierLover, async, aysha, berndartmueller, catchup, cccz, cmichel, csanuragjain, danb, defsec, georgypetrov, hake, hubble, kenta, kyliek, pauliax, rfa, robee, sahar, shenwilly, teryanarmen
148.9858 USDC - $148.99
DOMAIN_SEPARATOR
in Volt
contract, CONTRACT_ADMIN_ROLE
in CoreRef
contract^0.8.4
. That is to avoid possible bugs that could turn out if the code will be used in newer solidity version.init
method of the Core
contract is front-runnable, so an attacker can front run the transaction and call the function, which will make him become the governor and will make the contract must be re-deployedWETH9
contract is different than the rest of the contract (^0.4.18
instead of ^0.8.4
), also the version of IVoltTimedMinter
, Constants
and some of the mock contracts is ^0.8.0
minter
in 2 phases, where the pending minter must accept in order to become the new minter. That way, the minter
cannot be transferred to an un-reachable address.function setMinter(address minter_) external { require( msg.sender == minter, "Vcon: only the minter can change the minter address" ); emit MinterChanged(minter, minter_); minter = minter_; }
🌟 Selected for report: IllIllI
Also found by: 0v3rf10w, 0xNazgul, 0xkatana, 0xkowloon, CertoraInc, Dravee, Funen, Hawkeye, Jujic, Kenshin, Meta0xNull, Sleepy, TerrierLover, catchup, csanuragjain, defsec, georgypetrov, kenta, okkothejawa, rayn, rfa, robee, saian, samruna
145.0996 USDC - $145.10
Volt
contract you can calculate keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")
and keccak("1")
before the deployment in order to save gas_depleteBuffer
function in RateLimited
contract and in the _depleteIndividualBuffer
function in MultiRateLimited
contract (we know that usedAmount <= newBuffer
so newBuffer - usedAmount
won't underflow)2 << 32
and 2 << 96
instead of 2 ** 32
and 2 ** 96
(in the safe32
and safe96
functions of the Vcon
contract)