function amendSellOrder(
uint256 _orderId,
uint256 _newAmountToSell,
uint256 _newPriceInUSDC,
uint256 _newDeadlineDuration
) public {
if (_newDeadlineDuration == 0 || _newDeadlineDuration > MAX_DEADLINE_DURATION) revert InvalidDeadline();
uint256 newDeadlineTimestamp = block.timestamp + _newDeadlineDuration;
order.deadlineTimestamp = newDeadlineTimestamp;
}
contract TestDeadlineExtension {
uint256 constant MAX_DEADLINE_DURATION = 3 days;
function demonstrateUnlimitedExtension() public view returns (uint256[] memory) {
uint256[] memory deadlines = new uint256[](3);
uint256 creationTime = block.timestamp;
deadlines[0] = creationTime + MAX_DEADLINE_DURATION;
uint256 firstAmendTime = creationTime + 2.5 days;
deadlines[1] = firstAmendTime + MAX_DEADLINE_DURATION;
uint256 secondAmendTime = creationTime + 5 days;
deadlines[2] = secondAmendTime + MAX_DEADLINE_DURATION;
return deadlines;
}
}
struct Order {
uint256 id;
address seller;
address tokenToSell;
uint256 amountToSell;
uint256 priceInUSDC;
uint256 deadlineTimestamp;
+ uint256 creationTimestamp; // Track original creation time
bool isActive;
}
function createSellOrder(/*params*/) public returns (uint256) {
// ... validation and token transfer ...
orders[orderId] = Order({
id: orderId,
seller: msg.sender,
tokenToSell: _tokenToSell,
amountToSell: _amountToSell,
priceInUSDC: _priceInUSDC,
deadlineTimestamp: deadlineTimestamp,
+ creationTimestamp: block.timestamp,
isActive: true
});
// ... rest of function
}
function amendSellOrder(/*params*/) public {
// ... validation checks ...
+ // Ensure total order lifetime doesn't exceed maximum
+ uint256 maxAllowedDeadline = orders[_orderId].creationTimestamp + MAX_DEADLINE_DURATION;
+ uint256 newDeadlineTimestamp = block.timestamp + _newDeadlineDuration;
+ if (newDeadlineTimestamp > maxAllowedDeadline) revert InvalidDeadline();
- uint256 newDeadlineTimestamp = block.timestamp + _newDeadlineDuration;
// ... rest of function
}