code-423n4 / 2021-12-defiprotocol-findings

0 stars 0 forks source link

`Auction.sol#initialize()` Use msg.sender rather than factory_ parameter can save gas #126

Open code423n4 opened 2 years ago

code423n4 commented 2 years ago

Handle

WatchPug

Vulnerability details

https://github.com/code-423n4/2021-12-defiprotocol/blob/205d3766044171e325df6a8bf2e79b37856eece1/contracts/contracts/Auction.sol#L49-L57

function initialize(address basket_, address factory_) public override {
    require(address(factory) == address(0));
    require(!initialized);

    basket = IBasket(basket_);
    factory = IFactory(factory_);
    initialized = true;
}

Auction.sol#initialize() is using the factory_ parameter as the value of factory, while Basket.sol#initialize() uses msg.sender.

https://github.com/code-423n4/2021-12-defiprotocol/blob/205d3766044171e325df6a8bf2e79b37856eece1/contracts/contracts/Basket.sol#L44-L61

function initialize(IFactory.Proposal memory proposal, IAuction auction_) external override {
    require(address(factory) == address(0));
    require(!initialized);

    publisher = proposal.proposer;
    licenseFee = proposal.licenseFee;
    factory = IFactory(msg.sender);
    auction = auction_;
    ibRatio = BASE;
    tokens = proposal.tokens;
    weights = proposal.weights;
    maxSupply = proposal.maxSupply;
    approveUnderlying(address(auction));

    __ERC20_init(proposal.tokenName, proposal.tokenSymbol);

    initialized = true;
}

Consider changing to msg.sender and removing the factory_ parameter for the purpose of consistency and gas saving.