Browse Source

Add public key in Qortal address form to tradeoffers and presence websockets

This aids matching PRESENCE to corresponding trade offers for use in UI.

Also tighten up visibility of some fields in ChainChainOfferSummary and
PresenceInfo to private.

PresenceInfo.address should map to CrossChainOfferSummary.qortalCreatorTradeAddress
which is "AT creator's ephemeral trading key-pair represented as Qortal address"
blocksig
catbref 4 years ago
parent
commit
70ec8cb11f
  1. 13
      src/main/java/org/qortal/api/model/CrossChainOfferSummary.java
  2. 14
      src/main/java/org/qortal/api/websocket/PresenceWebSocket.java
  3. 18
      src/main/java/org/qortal/api/websocket/TradeOffersWebSocket.java
  4. 2
      src/main/java/org/qortal/data/crosschain/CrossChainTradeData.java

13
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;
}

14
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 */

18
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;
}
}

2
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

Loading…
Cancel
Save