diff --git a/src/main/java/org/qortal/api/resource/CrossChainResource.java b/src/main/java/org/qortal/api/resource/CrossChainResource.java index acaec28c..d58ef9c1 100644 --- a/src/main/java/org/qortal/api/resource/CrossChainResource.java +++ b/src/main/java/org/qortal/api/resource/CrossChainResource.java @@ -91,7 +91,7 @@ public class CrossChainResource { throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_CRITERIA); final boolean isExecutable = true; - List crossChainTradesData = new ArrayList<>(); + List crossChainTrades = new ArrayList<>(); try (final Repository repository = RepositoryManager.getRepository()) { Map> acctsByCodeHash = SupportedBlockchain.getFilteredAcctMap(foreignBlockchain); @@ -105,12 +105,26 @@ public class CrossChainResource { for (ATData atData : atsData) { CrossChainTradeData crossChainTradeData = acct.populateTradeData(repository, atData); if (crossChainTradeData.mode == AcctMode.OFFERING) { - crossChainTradesData.add(crossChainTradeData); + crossChainTrades.add(crossChainTradeData); } } } - return crossChainTradesData; + // Sort the trades by timestamp + if (reverse != null && reverse) { + crossChainTrades.sort((a, b) -> Longs.compare(b.creationTimestamp, a.creationTimestamp)); + } + else { + crossChainTrades.sort((a, b) -> Longs.compare(a.creationTimestamp, b.creationTimestamp)); + } + + if (limit != null) { + // Make sure to not return more than the limit + int upperLimit = Math.min(limit, crossChainTrades.size()); + crossChainTrades = crossChainTrades.subList(0, upperLimit); + } + + return crossChainTrades; } catch (DataException e) { throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.REPOSITORY_ISSUE, e); }