struct Bid {
uint64 price;
uint256 amount;
}
mapping(address => Bid) internal bidByAddress;
function processBid(uint64 price, uint256 amount, /* permit params */) external {
_validatePurchasePermit(purchasePermit, purchasePermitSignature);
if (price > purchasePermit.maxPrice) {
revert BidPriceExceedsMaxPrice(price, purchasePermit.maxPrice);
}
if (price < purchasePermit.minPrice) {
revert BidPriceBelowMinPrice(price, purchasePermit.minPrice);
}
if (amount < purchasePermit.minAmount) {
revert BidBelowMinAmount(amount, purchasePermit.minAmount);
}
if (amount > purchasePermit.maxAmount) {
revert BidExceedsMaxAmount(amount, purchasePermit.maxAmount);
}
// Replace the existing bid
bidByAddress[msg.sender] = Bid(price, amount);
}