When an auction ends without bids, the auction tokens are transferred back to the owner
, but the owner of the auction is the factory contract, not the protocol owner address. There is no way to retrieve the tokens from the factory contract so they will be stuck there.
If we take a look at the FjordAuction.sol
contract's constructor, we can see that owner
is set to msg.sender
. Since the factory creates the auction itself using create2, then the owner
of an auction will be the Factory contract, and not the address that is invoking the Factory.
If an auction ends without bids then the totalTokens
of auctionToken
are transferred back to the owner
They will be transferred back to the Factory contract and not the protocol. There is no way to retrieve the tokens from the Factory contract so they will remain there stuck.
All auction tokens are stuck in the Factory contract if an auction ends with 0 bids and they remain irretrievable.
Manual review / foundry
For convenience when writing the test I added a return (address)
to the factory's createAuction()
function so that I can fetch the newly created auction's address
Add import {AuctionFactory} from "../../src/FjordAuctionFactory.sol";
to auction.t.sol
Add AuctionFactory public factory;
to the test contract's variables
Add factory = new AuctionFactory(address(fjordPoints));
in the setUp()
PoC:
Result:
Either implement an ERC20 retrieve function in the factory contract or set auction clones' owner
to the protocol owner.
An auction with 0 bids will get the `totalTokens` stuck inside the contract. Impact: High - Tokens are forever lost Likelihood - Low - Super small chances of happening, but not impossible
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.