function amendSellOrder(uint256 _orderId, uint256 _newAmountToSell, uint256 _newPriceInUSDC, uint256 _newDeadlineDuration) public {
    
    
    
    if (_newAmountToSell > order.amountToSell) {
        uint256 diff = _newAmountToSell - order.amountToSell;
        token.safeTransferFrom(msg.sender, address(this), diff);
    } else if (_newAmountToSell < order.amountToSell) {
        uint256 diff = order.amountToSell - _newAmountToSell;
        token.safeTransfer(order.seller, diff);
    }
    
    
    order.amountToSell = _newAmountToSell;
    order.priceInUSDC = _newPriceInUSDC;
    order.deadlineTimestamp = newDeadlineTimestamp;
}
contract MaliciousToken is IERC20 {
    OrderBook public orderBook;
    
    function transfer(address to, uint256 amount) external returns (bool) {
        
        orderBook.amendSellOrder(1, 0, 0, 1 days);
        return true;
    }
}
function amendSellOrder(uint256 _orderId, uint256 _newAmountToSell, uint256 _newPriceInUSDC, uint256 _newDeadlineDuration) public {
    // ... validation checks ...
    
+   // Update state before external interactions
+   uint256 oldAmount = order.amountToSell;
+   order.amountToSell = _newAmountToSell;
+   order.priceInUSDC = _newPriceInUSDC;
+   order.deadlineTimestamp = newDeadlineTimestamp;
    
    // Handle token amount changes
-   if (_newAmountToSell > order.amountToSell) {
-       uint256 diff = _newAmountToSell - order.amountToSell;
+   if (_newAmountToSell > oldAmount) {
+       uint256 diff = _newAmountToSell - oldAmount;
        token.safeTransferFrom(msg.sender, address(this), diff);
-   } else if (_newAmountToSell < order.amountToSell) {
-       uint256 diff = order.amountToSell - _newAmountToSell;
+   } else if (_newAmountToSell < oldAmount) {
+       uint256 diff = oldAmount - _newAmountToSell;
        token.safeTransfer(order.seller, diff);
    }
    
-   // Update order details
-   order.amountToSell = _newAmountToSell;
-   order.priceInUSDC = _newPriceInUSDC;
-   order.deadlineTimestamp = newDeadlineTimestamp;
}