diff --git a/src/main/java/org/qortal/api/model/CrossChainOfferSummary.java b/src/main/java/org/qortal/api/model/CrossChainOfferSummary.java index 97ab7eb8..bf71c2d2 100644 --- a/src/main/java/org/qortal/api/model/CrossChainOfferSummary.java +++ b/src/main/java/org/qortal/api/model/CrossChainOfferSummary.java @@ -16,10 +16,13 @@ public class CrossChainOfferSummary { // Properties @Schema(description = "AT's Qortal address") - public String qortalAtAddress; + private String qortalAtAddress; @Schema(description = "AT creator's Qortal address") - public String qortalCreator; + private String qortalCreator; + + @Schema(description = "AT creator's ephemeral trading key-pair represented as Qortal address") + private String qortalCreatorTradeAddress; @XmlJavaTypeAdapter(value = org.qortal.api.AmountTypeAdapter.class) private long qortAmount; @@ -41,6 +44,7 @@ public class CrossChainOfferSummary { private long timestamp; + @Schema(description = "Trade partner's Qortal receiving address") private String partnerQortalReceivingAddress; private String foreignBlockchain; @@ -54,6 +58,7 @@ public class CrossChainOfferSummary { public CrossChainOfferSummary(CrossChainTradeData crossChainTradeData, long timestamp) { this.qortalAtAddress = crossChainTradeData.qortalAtAddress; this.qortalCreator = crossChainTradeData.qortalCreator; + this.qortalCreatorTradeAddress = crossChainTradeData.qortalCreatorTradeAddress; this.qortAmount = crossChainTradeData.qortAmount; this.foreignAmount = crossChainTradeData.expectedForeignAmount; this.btcAmount = this.foreignAmount; // Duplicate for deprecated field @@ -73,6 +78,10 @@ public class CrossChainOfferSummary { return this.qortalCreator; } + public String getQortalCreatorTradeAddress() { + return this.qortalCreatorTradeAddress; + } + public long getQortAmount() { return this.qortAmount; } diff --git a/src/main/java/org/qortal/api/websocket/PresenceWebSocket.java b/src/main/java/org/qortal/api/websocket/PresenceWebSocket.java index e4eef0ae..27bc603f 100644 --- a/src/main/java/org/qortal/api/websocket/PresenceWebSocket.java +++ b/src/main/java/org/qortal/api/websocket/PresenceWebSocket.java @@ -20,6 +20,7 @@ import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; import org.eclipse.jetty.websocket.api.annotations.WebSocket; import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; import org.qortal.controller.Controller; +import org.qortal.crypto.Crypto; import org.qortal.data.transaction.PresenceTransactionData; import org.qortal.data.transaction.TransactionData; import org.qortal.event.Event; @@ -39,20 +40,23 @@ public class PresenceWebSocket extends ApiWebSocket implements Listener { @XmlAccessorType(XmlAccessType.FIELD) @SuppressWarnings("unused") private static class PresenceInfo { - public final PresenceType presenceType; - public final String publicKey; - public final long timestamp; + private final PresenceType presenceType; + private final String publicKey; + private final long timestamp; + private final String address; protected PresenceInfo() { this.presenceType = null; this.publicKey = null; this.timestamp = 0L; + this.address = null; } public PresenceInfo(PresenceType presenceType, String pubKey58, long timestamp) { this.presenceType = presenceType; this.publicKey = pubKey58; this.timestamp = timestamp; + this.address = Crypto.toAddress(Base58.decode(this.publicKey)); } public PresenceType getPresenceType() { @@ -66,6 +70,10 @@ public class PresenceWebSocket extends ApiWebSocket implements Listener { public long getTimestamp() { return this.timestamp; } + + public String getAddress() { + return this.address; + } } /** Outer map key is PresenceType (enum), inner map key is public key in base58, inner map value is timestamp */ diff --git a/src/main/java/org/qortal/api/websocket/TradeOffersWebSocket.java b/src/main/java/org/qortal/api/websocket/TradeOffersWebSocket.java index 59a16344..f03b05ae 100644 --- a/src/main/java/org/qortal/api/websocket/TradeOffersWebSocket.java +++ b/src/main/java/org/qortal/api/websocket/TradeOffersWebSocket.java @@ -122,25 +122,27 @@ public class TradeOffersWebSocket extends ApiWebSocket implements Listener { // Update for (CrossChainOfferSummary offerSummary : crossChainOfferSummaries) { - cachedInfo.previousAtModes.put(offerSummary.qortalAtAddress, offerSummary.getMode()); - LOGGER.trace(() -> String.format("Block height: %d, AT: %s, mode: %s", blockData.getHeight(), offerSummary.qortalAtAddress, offerSummary.getMode().name())); + String offerAtAddress = offerSummary.getQortalAtAddress(); + + cachedInfo.previousAtModes.put(offerAtAddress, offerSummary.getMode()); + LOGGER.trace(() -> String.format("Block height: %d, AT: %s, mode: %s", blockData.getHeight(), offerAtAddress, offerSummary.getMode().name())); switch (offerSummary.getMode()) { case OFFERING: - cachedInfo.currentSummaries.put(offerSummary.qortalAtAddress, offerSummary); - cachedInfo.historicSummaries.remove(offerSummary.qortalAtAddress); + cachedInfo.currentSummaries.put(offerAtAddress, offerSummary); + cachedInfo.historicSummaries.remove(offerAtAddress); break; case REDEEMED: case REFUNDED: case CANCELLED: - cachedInfo.currentSummaries.remove(offerSummary.qortalAtAddress); - cachedInfo.historicSummaries.put(offerSummary.qortalAtAddress, offerSummary); + cachedInfo.currentSummaries.remove(offerAtAddress); + cachedInfo.historicSummaries.put(offerAtAddress, offerSummary); break; case TRADING: - cachedInfo.currentSummaries.remove(offerSummary.qortalAtAddress); - cachedInfo.historicSummaries.remove(offerSummary.qortalAtAddress); + cachedInfo.currentSummaries.remove(offerAtAddress); + cachedInfo.historicSummaries.remove(offerAtAddress); break; } } diff --git a/src/main/java/org/qortal/data/crosschain/CrossChainTradeData.java b/src/main/java/org/qortal/data/crosschain/CrossChainTradeData.java index 76b6a930..69250e54 100644 --- a/src/main/java/org/qortal/data/crosschain/CrossChainTradeData.java +++ b/src/main/java/org/qortal/data/crosschain/CrossChainTradeData.java @@ -20,7 +20,7 @@ public class CrossChainTradeData { @Schema(description = "AT creator's Qortal address") public String qortalCreator; - @Schema(description = "AT creator's Qortal trade address") + @Schema(description = "AT creator's ephemeral trading key-pair represented as Qortal address") public String qortalCreatorTradeAddress; @Deprecated