There’s no mechanism to enforce amountPerRound at listing time. Sellers may list assets with a cumulative value that exceeds this limit without knowing their assets won’t be purchased. They end up paying listing fees (in transferRoyalties()) without any guarantee their assets can be bought due to the buyer agent’s settings.
The amountPerRound parameter in BuyerAgent limits the total spending allowed per round when buying assets. However, this limit is only checked in the purchase() function and is not enforced during the listing process.
Sellers pay a non-refundable buyerFee at listing, assuming their assets will be purchased:
In purchase() within BuyerAgent, assets are iterated, and their cumulative price is tracked against amountPerRound. If this amount is exceeded mid-loop, the function reverts, and none of the assets in that batch get purchased.
Example Flow:
amountPerRound is set to 1,000 USDC.
Sellers list assets totaling 2,000 USDC.
In the purchase() function, as the cumulative price surpasses 1,000 USDC, the transaction reverts.
All sellers who listed do not receive a refund on their buyerFee, and their assets remain unsold.
Sellers pay listing fees (buyerFee) without a guarantee that their assets will be purchased, even though BuyerAgent has full control over amountPerRound.
Malicious or negligent BuyerAgents can set amountPerRound very low, potentially even to 0, to exploit this and continuously collect listing fees without any intention to buy.
Manual Review
Modify the listing functions to calculate the cumulative price of all listed assets for a given buyer. If this cumulative amount exceeds amountPerRound, prevent further listings.
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.