diff --git a/core/src/main/java/bisq/core/api/CoreDisputesService.java b/core/src/main/java/bisq/core/api/CoreDisputesService.java index f03630ae87..57c8fdb969 100644 --- a/core/src/main/java/bisq/core/api/CoreDisputesService.java +++ b/core/src/main/java/bisq/core/api/CoreDisputesService.java @@ -116,7 +116,7 @@ public class CoreDisputesService { byte[] payoutTxSerialized = null; String payoutTxHashAsString = null; - PubKeyRing arbitratorPubKeyRing = trade.getArbitratorPubKeyRing(); + PubKeyRing arbitratorPubKeyRing = trade.getArbitrator().getPubKeyRing(); checkNotNull(arbitratorPubKeyRing, "arbitratorPubKeyRing must not be null"); byte[] depositTxSerialized = null; // depositTx.bitcoinSerialize(); TODO (woodser) String depositTxHashAsString = null; // depositTx.getHashAsString(); TODO (woodser) diff --git a/core/src/main/java/bisq/core/api/model/TradeInfo.java b/core/src/main/java/bisq/core/api/model/TradeInfo.java index 17e25daee7..74a69cfb95 100644 --- a/core/src/main/java/bisq/core/api/model/TradeInfo.java +++ b/core/src/main/java/bisq/core/api/model/TradeInfo.java @@ -42,14 +42,14 @@ public class TradeInfo implements Payload { // view and interact with trades. private static final Function toPeerNodeAddress = (trade) -> - trade.getTradingPeerNodeAddress() == null + trade.getTradingPeer() == null || trade.getTradingPeer().getNodeAddress() == null ? "" - : trade.getTradingPeerNodeAddress().getFullAddress(); + : trade.getTradingPeer().getNodeAddress().getFullAddress(); private static final Function toArbitratorNodeAddress = (trade) -> - trade.getArbitratorNodeAddress() == null + trade.getArbitrator() == null || trade.getArbitrator().getNodeAddress() == null ? "" - : trade.getArbitratorNodeAddress().getFullAddress(); + : trade.getArbitrator().getNodeAddress().getFullAddress(); private static final Function toRoundedVolume = (trade) -> trade.getVolume() == null diff --git a/core/src/main/java/bisq/core/btc/Balances.java b/core/src/main/java/bisq/core/btc/Balances.java index d22c0a59d5..21c1a329e9 100644 --- a/core/src/main/java/bisq/core/btc/Balances.java +++ b/core/src/main/java/bisq/core/btc/Balances.java @@ -139,7 +139,7 @@ public class Balances { if (trade.getContract() == null) continue; Long reservedAmt; OfferPayload offerPayload = trade.getContract().getOfferPayload(); - if (trade.getArbitratorNodeAddress().equals(P2PService.getMyNodeAddress())) { // TODO (woodser): this only works if node address does not change + if (trade.getArbitrator().getNodeAddress().equals(P2PService.getMyNodeAddress())) { // TODO (woodser): this only works if node address does not change reservedAmt = offerPayload.getAmount() + offerPayload.getBuyerSecurityDeposit() + offerPayload.getSellerSecurityDeposit(); // arbitrator reserved balance is sum of amounts sent to multisig } else { reservedAmt = trade.getContract().isMyRoleBuyer(tradeManager.getKeyRing().getPubKeyRing()) ? offerPayload.getBuyerSecurityDeposit() : offerPayload.getAmount() + offerPayload.getSellerSecurityDeposit(); diff --git a/core/src/main/java/bisq/core/trade/ArbitratorTrade.java b/core/src/main/java/bisq/core/trade/ArbitratorTrade.java index 3f67d45c5a..d3b51f9cdf 100644 --- a/core/src/main/java/bisq/core/trade/ArbitratorTrade.java +++ b/core/src/main/java/bisq/core/trade/ArbitratorTrade.java @@ -68,9 +68,9 @@ public class ArbitratorTrade extends Trade { xmrWalletService, processModel, uid, - proto.hasMakerNodeAddress() ? NodeAddress.fromProto(proto.getMakerNodeAddress()) : null, - proto.hasTakerNodeAddress() ? NodeAddress.fromProto(proto.getTakerNodeAddress()) : null, - proto.hasArbitratorNodeAddress() ? NodeAddress.fromProto(proto.getArbitratorNodeAddress()) : null), + proto.getProcessModel().getMaker().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getMaker().getNodeAddress()) : null, + proto.getProcessModel().getTaker().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getTaker().getNodeAddress()) : null, + proto.getProcessModel().getArbitrator().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getArbitrator().getNodeAddress()) : null), proto, coreProtoResolver); } diff --git a/core/src/main/java/bisq/core/trade/BuyerAsMakerTrade.java b/core/src/main/java/bisq/core/trade/BuyerAsMakerTrade.java index e1fc7ed1ad..ce86301b41 100644 --- a/core/src/main/java/bisq/core/trade/BuyerAsMakerTrade.java +++ b/core/src/main/java/bisq/core/trade/BuyerAsMakerTrade.java @@ -92,17 +92,13 @@ public final class BuyerAsMakerTrade extends BuyerTrade implements MakerTrade { xmrWalletService, processModel, uid, - proto.hasMakerNodeAddress() ? NodeAddress.fromProto(proto.getMakerNodeAddress()) : null, - proto.hasTakerNodeAddress() ? NodeAddress.fromProto(proto.getTakerNodeAddress()) : null, - proto.hasArbitratorNodeAddress() ? NodeAddress.fromProto(proto.getArbitratorNodeAddress()) : null); + proto.getProcessModel().getMaker().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getMaker().getNodeAddress()) : null, + proto.getProcessModel().getTaker().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getTaker().getNodeAddress()) : null, + proto.getProcessModel().getArbitrator().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getArbitrator().getNodeAddress()) : null); trade.setAmountAsLong(proto.getAmountAsLong()); trade.setPrice(proto.getPrice()); - trade.setMakerNodeAddress(proto.hasMakerNodeAddress() ? NodeAddress.fromProto(proto.getMakerNodeAddress()) : null); - trade.setTakerNodeAddress(proto.hasTakerNodeAddress() ? NodeAddress.fromProto(proto.getTakerNodeAddress()) : null); - trade.setArbitratorNodeAddress(proto.hasArbitratorNodeAddress() ? NodeAddress.fromProto(proto.getArbitratorNodeAddress()) : null); - return fromProto(trade, proto, coreProtoResolver); diff --git a/core/src/main/java/bisq/core/trade/BuyerAsTakerTrade.java b/core/src/main/java/bisq/core/trade/BuyerAsTakerTrade.java index c984711c48..4126e7d67f 100644 --- a/core/src/main/java/bisq/core/trade/BuyerAsTakerTrade.java +++ b/core/src/main/java/bisq/core/trade/BuyerAsTakerTrade.java @@ -93,9 +93,9 @@ public final class BuyerAsTakerTrade extends BuyerTrade implements TakerTrade { xmrWalletService, processModel, uid, - proto.hasMakerNodeAddress() ? NodeAddress.fromProto(proto.getMakerNodeAddress()) : null, - proto.hasTakerNodeAddress() ? NodeAddress.fromProto(proto.getTakerNodeAddress()) : null, - proto.hasArbitratorNodeAddress() ? NodeAddress.fromProto(proto.getArbitratorNodeAddress()) : null), + proto.getProcessModel().getMaker().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getMaker().getNodeAddress()) : null, + proto.getProcessModel().getTaker().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getTaker().getNodeAddress()) : null, + proto.getProcessModel().getArbitrator().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getArbitrator().getNodeAddress()) : null), proto, coreProtoResolver); } diff --git a/core/src/main/java/bisq/core/trade/ClosedTradableManager.java b/core/src/main/java/bisq/core/trade/ClosedTradableManager.java index 3eed4b4c7a..35ded1c2ef 100644 --- a/core/src/main/java/bisq/core/trade/ClosedTradableManager.java +++ b/core/src/main/java/bisq/core/trade/ClosedTradableManager.java @@ -22,6 +22,7 @@ import bisq.core.monetary.Volume; import bisq.core.offer.Offer; import bisq.core.offer.OpenOffer; import bisq.core.provider.price.PriceFeedService; +import bisq.core.trade.protocol.TradingPeer; import bisq.core.trade.statistics.TradeStatisticsManager; import bisq.core.user.Preferences; @@ -191,9 +192,10 @@ public class ClosedTradableManager implements PersistedDataHost { if (isOpenOffer(tradable)) { return 0; } - NodeAddress addressInTrade = castToTradeModel(tradable).getTradingPeerNodeAddress(); + NodeAddress addressInTrade = castToTradeModel(tradable).getTradingPeer().getNodeAddress(); return (int) getTradeModelStream() - .map(Trade::getTradingPeerNodeAddress) + .map(Trade::getTradingPeer) + .map(TradingPeer::getNodeAddress) .filter(Objects::nonNull) .filter(address -> address.equals(addressInTrade)) .count(); diff --git a/core/src/main/java/bisq/core/trade/SellerAsMakerTrade.java b/core/src/main/java/bisq/core/trade/SellerAsMakerTrade.java index 7484b5751e..2128fbf94f 100644 --- a/core/src/main/java/bisq/core/trade/SellerAsMakerTrade.java +++ b/core/src/main/java/bisq/core/trade/SellerAsMakerTrade.java @@ -93,9 +93,9 @@ public final class SellerAsMakerTrade extends SellerTrade implements MakerTrade xmrWalletService, processModel, uid, - proto.hasMakerNodeAddress() ? NodeAddress.fromProto(proto.getMakerNodeAddress()) : null, - proto.hasTakerNodeAddress() ? NodeAddress.fromProto(proto.getTakerNodeAddress()) : null, - proto.hasArbitratorNodeAddress() ? NodeAddress.fromProto(proto.getArbitratorNodeAddress()) : null); + proto.getProcessModel().getMaker().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getMaker().getNodeAddress()) : null, + proto.getProcessModel().getTaker().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getTaker().getNodeAddress()) : null, + proto.getProcessModel().getArbitrator().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getArbitrator().getNodeAddress()) : null); trade.setAmountAsLong(proto.getAmountAsLong()); trade.setPrice(proto.getPrice()); diff --git a/core/src/main/java/bisq/core/trade/SellerAsTakerTrade.java b/core/src/main/java/bisq/core/trade/SellerAsTakerTrade.java index 7b94f3dd46..6c2c021c42 100644 --- a/core/src/main/java/bisq/core/trade/SellerAsTakerTrade.java +++ b/core/src/main/java/bisq/core/trade/SellerAsTakerTrade.java @@ -93,9 +93,9 @@ public final class SellerAsTakerTrade extends SellerTrade implements TakerTrade xmrWalletService, processModel, uid, - proto.hasMakerNodeAddress() ? NodeAddress.fromProto(proto.getMakerNodeAddress()) : null, - proto.hasTakerNodeAddress() ? NodeAddress.fromProto(proto.getTakerNodeAddress()) : null, - proto.hasArbitratorNodeAddress() ? NodeAddress.fromProto(proto.getArbitratorNodeAddress()) : null), + proto.getProcessModel().getMaker().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getMaker().getNodeAddress()) : null, + proto.getProcessModel().getTaker().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getTaker().getNodeAddress()) : null, + proto.getProcessModel().getArbitrator().hasNodeAddress() ? NodeAddress.fromProto(proto.getProcessModel().getArbitrator().getNodeAddress()) : null), proto, coreProtoResolver); } diff --git a/core/src/main/java/bisq/core/trade/Tradable.java b/core/src/main/java/bisq/core/trade/Tradable.java index 9ac50f370b..771362ba85 100644 --- a/core/src/main/java/bisq/core/trade/Tradable.java +++ b/core/src/main/java/bisq/core/trade/Tradable.java @@ -20,7 +20,7 @@ package bisq.core.trade; import bisq.core.monetary.Price; import bisq.core.monetary.Volume; import bisq.core.offer.Offer; - +import bisq.core.trade.protocol.TradingPeer; import bisq.network.p2p.NodeAddress; import bisq.common.proto.persistable.PersistablePayload; @@ -76,6 +76,6 @@ public interface Tradable extends PersistablePayload { } default Optional getOptionalTradingPeerNodeAddress() { - return asTradeModel().map(Trade::getTradingPeerNodeAddress); + return asTradeModel().map(Trade::getTradingPeer).map(TradingPeer::getNodeAddress); } } diff --git a/core/src/main/java/bisq/core/trade/Trade.java b/core/src/main/java/bisq/core/trade/Trade.java index ba512ac0ca..a9c3bcdc33 100644 --- a/core/src/main/java/bisq/core/trade/Trade.java +++ b/core/src/main/java/bisq/core/trade/Trade.java @@ -44,7 +44,6 @@ import bisq.network.p2p.NodeAddress; import bisq.network.p2p.P2PService; import bisq.common.UserThread; import bisq.common.crypto.Encryption; -import bisq.common.crypto.PubKeyRing; import bisq.common.proto.ProtoUtil; import bisq.common.taskrunner.Model; import bisq.common.util.Utilities; @@ -337,18 +336,6 @@ public abstract class Trade implements Tradable, Model { @Setter private byte[] contractHash; @Nullable - @Getter - @Setter - private NodeAddress arbitratorNodeAddress; - @Nullable - @Getter - @Setter - private PubKeyRing arbitratorPubKeyRing; - @Nullable - @Getter - @Setter - private String takerPaymentAccountId; - @Nullable private String errorMessage; @Getter @Setter @@ -402,14 +389,6 @@ public abstract class Trade implements Tradable, Model { @Getter @Setter private byte[] delayedPayoutTxBytes; - @Nullable - @Getter - @Setter - private NodeAddress refundAgentNodeAddress; - @Nullable - @Getter - @Setter - private PubKeyRing refundAgentPubKeyRing; @Getter @Nullable private RefundResultState refundResultState = RefundResultState.UNDEFINED_REFUND_RESULT; @@ -436,23 +415,9 @@ public abstract class Trade implements Tradable, Model { // Added in XMR integration private transient List tradeListeners; // notified on fully validated trade messages - @Getter - @Setter - private NodeAddress makerNodeAddress; - @Getter - @Setter - private NodeAddress takerNodeAddress; - @Getter - @Setter - private PubKeyRing makerPubKeyRing; - @Getter - @Setter - private PubKeyRing takerPubKeyRing; transient MoneroWalletListener depositTxListener; transient Boolean makerDepositLocked; // null when unknown, true while locked, false when unlocked transient Boolean takerDepositLocked; - transient private MoneroTx makerDepositTx; - transient private MoneroTx takerDepositTx; private Long startTime; // cache /////////////////////////////////////////////////////////////////////////////////////////// @@ -484,9 +449,9 @@ public abstract class Trade implements Tradable, Model { this.takeOfferDate = new Date().getTime(); this.tradeListeners = new ArrayList(); - this.makerNodeAddress = makerNodeAddress; - this.takerNodeAddress = takerNodeAddress; - this.arbitratorNodeAddress = arbitratorNodeAddress; + getMaker().setNodeAddress(makerNodeAddress); + getTaker().setNodeAddress(takerNodeAddress); + getArbitrator().setNodeAddress(arbitratorNodeAddress); setAmount(tradeAmount); } @@ -578,22 +543,13 @@ public abstract class Trade implements Tradable, Model { Optional.ofNullable(contract).ifPresent(e -> builder.setContract(contract.toProtoMessage())); Optional.ofNullable(contractAsJson).ifPresent(builder::setContractAsJson); Optional.ofNullable(contractHash).ifPresent(e -> builder.setContractHash(ByteString.copyFrom(contractHash))); - Optional.ofNullable(arbitratorNodeAddress).ifPresent(e -> builder.setArbitratorNodeAddress(arbitratorNodeAddress.toProtoMessage())); - Optional.ofNullable(refundAgentNodeAddress).ifPresent(e -> builder.setRefundAgentNodeAddress(refundAgentNodeAddress.toProtoMessage())); - Optional.ofNullable(takerPaymentAccountId).ifPresent(builder::setTakerPaymentAccountId); Optional.ofNullable(errorMessage).ifPresent(builder::setErrorMessage); - Optional.ofNullable(arbitratorPubKeyRing).ifPresent(e -> builder.setArbitratorPubKeyRing(arbitratorPubKeyRing.toProtoMessage())); - Optional.ofNullable(refundAgentPubKeyRing).ifPresent(e -> builder.setRefundAgentPubKeyRing(refundAgentPubKeyRing.toProtoMessage())); Optional.ofNullable(counterCurrencyTxId).ifPresent(e -> builder.setCounterCurrencyTxId(counterCurrencyTxId)); Optional.ofNullable(mediationResultState).ifPresent(e -> builder.setMediationResultState(MediationResultState.toProtoMessage(mediationResultState))); Optional.ofNullable(refundResultState).ifPresent(e -> builder.setRefundResultState(RefundResultState.toProtoMessage(refundResultState))); Optional.ofNullable(delayedPayoutTxBytes).ifPresent(e -> builder.setDelayedPayoutTxBytes(ByteString.copyFrom(delayedPayoutTxBytes))); Optional.ofNullable(counterCurrencyExtraData).ifPresent(e -> builder.setCounterCurrencyExtraData(counterCurrencyExtraData)); Optional.ofNullable(assetTxProofResult).ifPresent(e -> builder.setAssetTxProofResult(assetTxProofResult.name())); - Optional.ofNullable(makerNodeAddress).ifPresent(e -> builder.setMakerNodeAddress(makerNodeAddress.toProtoMessage())); - Optional.ofNullable(makerPubKeyRing).ifPresent(e -> builder.setMakerPubKeyRing(makerPubKeyRing.toProtoMessage())); - Optional.ofNullable(takerNodeAddress).ifPresent(e -> builder.setTakerNodeAddress(takerNodeAddress.toProtoMessage())); - Optional.ofNullable(takerPubKeyRing).ifPresent(e -> builder.setTakerPubKeyRing(takerPubKeyRing.toProtoMessage())); return builder.build(); } @@ -607,12 +563,7 @@ public abstract class Trade implements Tradable, Model { trade.setContract(proto.hasContract() ? Contract.fromProto(proto.getContract(), coreProtoResolver) : null); trade.setContractAsJson(ProtoUtil.stringOrNullFromProto(proto.getContractAsJson())); trade.setContractHash(ProtoUtil.byteArrayOrNullFromProto(proto.getContractHash())); - trade.setArbitratorNodeAddress(proto.hasArbitratorNodeAddress() ? NodeAddress.fromProto(proto.getArbitratorNodeAddress()) : null); - trade.setRefundAgentNodeAddress(proto.hasRefundAgentNodeAddress() ? NodeAddress.fromProto(proto.getRefundAgentNodeAddress()) : null); - trade.setTakerPaymentAccountId(ProtoUtil.stringOrNullFromProto(proto.getTakerPaymentAccountId())); trade.setErrorMessage(ProtoUtil.stringOrNullFromProto(proto.getErrorMessage())); - trade.setArbitratorPubKeyRing(proto.hasArbitratorPubKeyRing() ? PubKeyRing.fromProto(proto.getArbitratorPubKeyRing()) : null); - trade.setRefundAgentPubKeyRing(proto.hasRefundAgentPubKeyRing() ? PubKeyRing.fromProto(proto.getRefundAgentPubKeyRing()) : null); trade.setCounterCurrencyTxId(proto.getCounterCurrencyTxId().isEmpty() ? null : proto.getCounterCurrencyTxId()); trade.setMediationResultState(MediationResultState.fromProto(proto.getMediationResultState())); trade.setRefundResultState(RefundResultState.fromProto(proto.getRefundResultState())); @@ -626,10 +577,6 @@ public abstract class Trade implements Tradable, Model { persistedAssetTxProofResult = null; } trade.setAssetTxProofResult(persistedAssetTxProofResult); - trade.setMakerNodeAddress(NodeAddress.fromProto(proto.getMakerNodeAddress())); - trade.setMakerPubKeyRing(proto.hasMakerPubKeyRing() ? PubKeyRing.fromProto(proto.getMakerPubKeyRing()) : null); - trade.setTakerNodeAddress(NodeAddress.fromProto(proto.getTakerNodeAddress())); - trade.setTakerPubKeyRing(proto.hasTakerPubKeyRing() ? PubKeyRing.fromProto(proto.getTakerPubKeyRing()) : null); trade.chatMessages.addAll(proto.getChatMessageList().stream() .map(ChatMessage::fromPayloadProto) @@ -639,8 +586,8 @@ public abstract class Trade implements Tradable, Model { } public void initialize(ProcessModelServiceProvider serviceProvider) { - serviceProvider.getArbitratorManager().getDisputeAgentByNodeAddress(arbitratorNodeAddress).ifPresent(arbitrator -> { - arbitratorPubKeyRing = arbitrator.getPubKeyRing(); + serviceProvider.getArbitratorManager().getDisputeAgentByNodeAddress(getArbitrator().getNodeAddress()).ifPresent(arbitrator -> { + getArbitrator().setPubKeyRing(arbitrator.getPubKeyRing()); }); isInitialized = true; @@ -652,36 +599,7 @@ public abstract class Trade implements Tradable, Model { /////////////////////////////////////////////////////////////////////////////////////////// public void setMyNodeAddress() { - if (this instanceof MakerTrade) makerNodeAddress = P2PService.getMyNodeAddress(); - else if (this instanceof TakerTrade) takerNodeAddress = P2PService.getMyNodeAddress(); - else if (this instanceof ArbitratorTrade) arbitratorNodeAddress = P2PService.getMyNodeAddress(); - else throw new RuntimeException("Must be maker, taker, or arbitrator to set own address"); - } - - public void setTradingPeerNodeAddress(NodeAddress peerAddress) { - if (this instanceof MakerTrade) takerNodeAddress = peerAddress; - else if (this instanceof TakerTrade) makerNodeAddress = peerAddress; - else throw new RuntimeException("Must be maker or taker to set peer address"); - } - - public NodeAddress getTradingPeerNodeAddress() { - if (this instanceof MakerTrade) return takerNodeAddress; - else if (this instanceof TakerTrade) return makerNodeAddress; - else if (this instanceof ArbitratorTrade) return null; - else throw new RuntimeException("Unknown trade type: " + this.getClass().getName()); - } - - public void setTradingPeerPubKeyRing(PubKeyRing peerPubKeyRing) { - if (this instanceof MakerTrade) takerPubKeyRing = peerPubKeyRing; - else if (this instanceof TakerTrade) makerPubKeyRing = peerPubKeyRing; - else throw new RuntimeException("Must be maker or taker to set peer address"); - } - - public PubKeyRing getTradingPeerPubKeyRing() { - if (this instanceof MakerTrade) return takerPubKeyRing; - else if (this instanceof TakerTrade) return makerPubKeyRing; - else if (this instanceof ArbitratorTrade) return null; - else throw new RuntimeException("Unknown trade type: " + this.getClass().getName()); + getSelf().setNodeAddress(P2PService.getMyNodeAddress()); } /** @@ -696,9 +614,9 @@ public abstract class Trade implements Tradable, Model { getOffer().getOfferPayload(), checkNotNull(getAmount()).value, getPrice().getValue(), - isBuyerMakerAndSellerTaker ? getMakerNodeAddress() : getTakerNodeAddress(), // buyer node address // TODO (woodser): use maker and taker node address instead of buyer and seller node address for consistency - isBuyerMakerAndSellerTaker ? getTakerNodeAddress() : getMakerNodeAddress(), // seller node address - getArbitratorNodeAddress(), + (isBuyerMakerAndSellerTaker ? getMaker() : getTaker()).getNodeAddress(), // buyer node address // TODO (woodser): use maker and taker node address instead of buyer and seller node address for consistency + (isBuyerMakerAndSellerTaker ? getTaker() : getMaker()).getNodeAddress(), // seller node address + getArbitrator().getNodeAddress(), isBuyerMakerAndSellerTaker, this instanceof MakerTrade ? processModel.getAccountId() : getMaker().getAccountId(), // maker account id this instanceof TakerTrade ? processModel.getAccountId() : getTaker().getAccountId(), // taker account id @@ -706,8 +624,8 @@ public abstract class Trade implements Tradable, Model { checkNotNull(this instanceof TakerTrade ? processModel.getPaymentAccountPayload(this).getPaymentMethodId() : getTaker().getPaymentMethodId()), // taker payment method id this instanceof MakerTrade ? processModel.getPaymentAccountPayload(this).getHash() : getMaker().getPaymentAccountPayloadHash(), // maker payment account payload hash this instanceof TakerTrade ? processModel.getPaymentAccountPayload(this).getHash() : getTaker().getPaymentAccountPayloadHash(), // maker payment account payload hash - getMakerPubKeyRing(), - getTakerPubKeyRing(), + getMaker().getPubKeyRing(), + getTaker().getPubKeyRing(), this instanceof MakerTrade ? xmrWalletService.getAddressEntry(getId(), XmrAddressEntry.Context.TRADE_PAYOUT).get().getAddressString() : getMaker().getPayoutAddressString(), // maker payout address this instanceof TakerTrade ? xmrWalletService.getAddressEntry(getId(), XmrAddressEntry.Context.TRADE_PAYOUT).get().getAddressString() : getTaker().getPayoutAddressString(), // taker payout address getLockTime(), @@ -891,8 +809,8 @@ public abstract class Trade implements Tradable, Model { if (txs.size() == 2) { setStatePublished(); boolean makerFirst = txs.get(0).getHash().equals(processModel.getMaker().getDepositTxHash()); - makerDepositTx = makerFirst ? txs.get(0) : txs.get(1); - takerDepositTx = makerFirst ? txs.get(1) : txs.get(0); + getMaker().setDepositTx(makerFirst ? txs.get(0) : txs.get(1)); + getTaker().setDepositTx(makerFirst ? txs.get(1) : txs.get(0)); // check if deposit txs unlocked if (txs.get(0).isConfirmed() && txs.get(1).isConfirmed()) { @@ -930,8 +848,8 @@ public abstract class Trade implements Tradable, Model { // update deposit txs boolean makerFirst = txs.get(0).getHash().equals(processModel.getMaker().getDepositTxHash()); - makerDepositTx = makerFirst ? txs.get(0) : txs.get(1); - takerDepositTx = makerFirst ? txs.get(1) : txs.get(0); + getMaker().setDepositTx(makerFirst ? txs.get(0) : txs.get(1)); + getTaker().setDepositTx(makerFirst ? txs.get(1) : txs.get(0)); // check if deposit txs confirmed and compute unlock height if (txs.size() == 2 && txs.get(0).isConfirmed() && txs.get(1).isConfirmed() && unlockHeight == null) { @@ -958,8 +876,8 @@ public abstract class Trade implements Tradable, Model { public MoneroTx getTakerDepositTx() { String depositTxHash = getProcessModel().getTaker().getDepositTxHash(); try { - if (takerDepositTx == null) takerDepositTx = depositTxHash == null ? null : getXmrWalletService().getTxWithCache(depositTxHash); - return takerDepositTx; + if (getTaker().getDepositTx() == null) getTaker().setDepositTx(depositTxHash == null ? null : getXmrWalletService().getTxWithCache(depositTxHash)); + return getTaker().getDepositTx(); } catch (MoneroError e) { log.error("Wallet is missing taker deposit tx " + depositTxHash); return null; @@ -970,8 +888,8 @@ public abstract class Trade implements Tradable, Model { public MoneroTx getMakerDepositTx() { String depositTxHash = getProcessModel().getMaker().getDepositTxHash(); try { - if (makerDepositTx == null) makerDepositTx = depositTxHash == null ? null : getXmrWalletService().getTxWithCache(depositTxHash); - return makerDepositTx; + if (getMaker().getDepositTx() == null) getMaker().setDepositTx(depositTxHash == null ? null : getXmrWalletService().getTxWithCache(depositTxHash)); + return getMaker().getDepositTx(); } catch (MoneroError e) { log.error("Wallet is missing maker deposit tx " + depositTxHash); return null; @@ -1171,6 +1089,10 @@ public abstract class Trade implements Tradable, Model { throw new RuntimeException("Trade is not maker, taker, or arbitrator"); } + public TradingPeer getArbitrator() { + return processModel.getArbitrator(); + } + public TradingPeer getMaker() { return processModel.getMaker(); } @@ -1208,10 +1130,10 @@ public abstract class Trade implements Tradable, Model { * @return the trade peer */ public TradingPeer getTradingPeer(NodeAddress address) { - if (address.equals(getMakerNodeAddress())) return processModel.getMaker(); - if (address.equals(getTakerNodeAddress())) return processModel.getTaker(); - if (address.equals(getArbitratorNodeAddress())) return processModel.getArbitrator(); - throw new RuntimeException("No protocol participant has node address: " + address); + if (address.equals(getMaker().getNodeAddress())) return processModel.getMaker(); + if (address.equals(getTaker().getNodeAddress())) return processModel.getTaker(); + if (address.equals(getArbitrator().getNodeAddress())) return processModel.getArbitrator(); + throw new RuntimeException("No trade participant with the given address. Their address might have changed: " + address); } public Date getTakeOfferDate() { @@ -1505,7 +1427,6 @@ public abstract class Trade implements Tradable, Model { ",\n contract=" + contract + ",\n contractAsJson='" + contractAsJson + '\'' + ",\n contractHash=" + Utilities.bytesAsHexString(contractHash) + - ",\n takerPaymentAccountId='" + takerPaymentAccountId + '\'' + ",\n errorMessage='" + errorMessage + '\'' + ",\n counterCurrencyTxId='" + counterCurrencyTxId + '\'' + ",\n counterCurrencyExtraData='" + counterCurrencyExtraData + '\'' + @@ -1519,7 +1440,6 @@ public abstract class Trade implements Tradable, Model { ",\n disputeStateProperty=" + disputeStateProperty + ",\n tradePeriodStateProperty=" + tradePeriodStateProperty + ",\n errorMessageProperty=" + errorMessageProperty + - ",\n depositTx=" + takerDepositTx + ",\n delayedPayoutTx=" + delayedPayoutTx + ",\n payoutTx=" + payoutTx + ",\n tradeAmount=" + tradeAmount + @@ -1529,16 +1449,8 @@ public abstract class Trade implements Tradable, Model { ",\n mediationResultStateProperty=" + mediationResultStateProperty + ",\n lockTime=" + lockTime + ",\n delayedPayoutTxBytes=" + Utilities.bytesAsHexString(delayedPayoutTxBytes) + - ",\n refundAgentNodeAddress=" + refundAgentNodeAddress + - ",\n refundAgentPubKeyRing=" + refundAgentPubKeyRing + ",\n refundResultState=" + refundResultState + ",\n refundResultStateProperty=" + refundResultStateProperty + - ",\n makerNodeAddress=" + makerNodeAddress + - ",\n makerPubKeyRing=" + makerPubKeyRing + - ",\n takerNodeAddress=" + takerNodeAddress + - ",\n takerPubKeyRing=" + takerPubKeyRing + - ",\n arbitratorNodeAddress=" + arbitratorNodeAddress + - ",\n arbitratorPubKeyRing=" + arbitratorPubKeyRing + "\n}"; } } diff --git a/core/src/main/java/bisq/core/trade/TradeManager.java b/core/src/main/java/bisq/core/trade/TradeManager.java index 28d0db3935..9da4dcdf80 100644 --- a/core/src/main/java/bisq/core/trade/TradeManager.java +++ b/core/src/main/java/bisq/core/trade/TradeManager.java @@ -538,11 +538,11 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi request.getTakerNodeAddress(), request.getArbitratorNodeAddress()); - //System.out.println("TradeManager trade.setTradingPeerNodeAddress(): " + sender); - //trade.setTradingPeerNodeAddress(sender); + //System.out.println("TradeManager trade.getTradingPeer().setNodeAddress(): " + sender); + //trade.getTradingPeer().setNodeAddress(sender); // TODO (woodser): what if maker's address changes while offer open, or taker's address changes after multisig deposit available? need to verify and update. see OpenOfferManager.maybeUpdatePersistedOffers() - trade.setArbitratorPubKeyRing(arbitrator.getPubKeyRing()); - trade.setMakerPubKeyRing(trade.getOffer().getPubKeyRing()); + trade.getArbitrator().setPubKeyRing(arbitrator.getPubKeyRing()); + trade.getMaker().setPubKeyRing(trade.getOffer().getPubKeyRing()); initTradeAndProtocol(trade, getTradeProtocol(trade)); trade.getSelf().setReserveTxHash(openOffer.getReserveTxHash()); // TODO (woodser): initialize in initTradeAndProtocol? trade.getSelf().setReserveTxHex(openOffer.getReserveTxHex()); @@ -764,8 +764,8 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi trade.getProcessModel().setMakerSignature(model.getMakerSignature()); trade.getProcessModel().setUseSavingsWallet(useSavingsWallet); trade.getProcessModel().setFundsNeededForTradeAsLong(fundsNeededForTrade.value); - trade.setTakerPubKeyRing(model.getPubKeyRing()); - trade.setTakerPaymentAccountId(paymentAccountId); + trade.getTaker().setPubKeyRing(model.getPubKeyRing()); + trade.getTaker().setPaymentAccountId(paymentAccountId); TradeProtocol tradeProtocol = TradeProtocolFactory.getNewTradeProtocol(trade); TradeProtocol prev = tradeProtocolByTradeId.put(trade.getUid(), tradeProtocol); diff --git a/core/src/main/java/bisq/core/trade/protocol/BuyerAsTakerProtocol.java b/core/src/main/java/bisq/core/trade/protocol/BuyerAsTakerProtocol.java index fb19fba442..240e5c2470 100644 --- a/core/src/main/java/bisq/core/trade/protocol/BuyerAsTakerProtocol.java +++ b/core/src/main/java/bisq/core/trade/protocol/BuyerAsTakerProtocol.java @@ -51,7 +51,7 @@ public class BuyerAsTakerProtocol extends BuyerProtocol implements TakerProtocol super(trade); Offer offer = checkNotNull(trade.getOffer()); trade.getTradingPeer().setPubKeyRing(offer.getPubKeyRing()); - trade.setMakerPubKeyRing(offer.getPubKeyRing()); + trade.getMaker().setPubKeyRing(offer.getPubKeyRing()); // TODO (woodser): setup deposit and payout listeners on construction for startup like before rebase? } @@ -72,7 +72,7 @@ public class BuyerAsTakerProtocol extends BuyerProtocol implements TakerProtocol this.errorMessageHandler = errorMessageHandler; expect(phase(Trade.Phase.INIT) .with(TakerEvent.TAKE_OFFER) - .from(trade.getTradingPeerNodeAddress())) + .from(trade.getTradingPeer().getNodeAddress())) .setup(tasks( ApplyFilter.class, TakerReserveTradeFunds.class, diff --git a/core/src/main/java/bisq/core/trade/protocol/ProcessModel.java b/core/src/main/java/bisq/core/trade/protocol/ProcessModel.java index b4d19f9660..7545464fb3 100644 --- a/core/src/main/java/bisq/core/trade/protocol/ProcessModel.java +++ b/core/src/main/java/bisq/core/trade/protocol/ProcessModel.java @@ -285,7 +285,7 @@ public class ProcessModel implements Model, PersistablePayload { if (trade instanceof MakerTrade) paymentAccount = getUser().getPaymentAccount(offer.getMakerPaymentAccountId()); else - paymentAccount = getUser().getPaymentAccount(trade.getTakerPaymentAccountId()); + paymentAccount = getUser().getPaymentAccount(trade.getTaker().getPaymentAccountId()); return paymentAccount != null ? paymentAccount.getPaymentAccountPayload() : null; } diff --git a/core/src/main/java/bisq/core/trade/protocol/SellerAsTakerProtocol.java b/core/src/main/java/bisq/core/trade/protocol/SellerAsTakerProtocol.java index 3b4f9a5e39..2443551838 100644 --- a/core/src/main/java/bisq/core/trade/protocol/SellerAsTakerProtocol.java +++ b/core/src/main/java/bisq/core/trade/protocol/SellerAsTakerProtocol.java @@ -51,7 +51,7 @@ public class SellerAsTakerProtocol extends SellerProtocol implements TakerProtoc super(trade); Offer offer = checkNotNull(trade.getOffer()); trade.getTradingPeer().setPubKeyRing(offer.getPubKeyRing()); - trade.setMakerPubKeyRing(offer.getPubKeyRing()); + trade.getMaker().setPubKeyRing(offer.getPubKeyRing()); } @@ -70,7 +70,7 @@ public class SellerAsTakerProtocol extends SellerProtocol implements TakerProtoc this.errorMessageHandler = errorMessageHandler; expect(phase(Trade.Phase.INIT) .with(TakerEvent.TAKE_OFFER) - .from(trade.getTradingPeerNodeAddress())) + .from(trade.getTradingPeer().getNodeAddress())) .setup(tasks( ApplyFilter.class, TakerReserveTradeFunds.class, diff --git a/core/src/main/java/bisq/core/trade/protocol/TradeProtocol.java b/core/src/main/java/bisq/core/trade/protocol/TradeProtocol.java index d8b6c6664a..e05d7448f0 100644 --- a/core/src/main/java/bisq/core/trade/protocol/TradeProtocol.java +++ b/core/src/main/java/bisq/core/trade/protocol/TradeProtocol.java @@ -453,8 +453,6 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D protected void sendAckMessage(NodeAddress peer, TradeMessage message, boolean result, @Nullable String errorMessage) { - // TODO (woodser): remove trade.getTradingPeerNodeAddress() and processModel.getTempTradingPeerNodeAddress() if everything should be maker, taker, or arbitrator - // get peer's pub key ring PubKeyRing peersPubKeyRing = getPeersPubKeyRing(peer); if (peersPubKeyRing == null) { @@ -546,9 +544,9 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D private PubKeyRing getPeersPubKeyRing(NodeAddress peer) { trade.setMyNodeAddress(); // TODO: this is a hack to update my node address before verifying the message - if (peer.equals(trade.getArbitratorNodeAddress())) return trade.getArbitratorPubKeyRing(); - else if (peer.equals(trade.getMakerNodeAddress())) return trade.getMakerPubKeyRing(); - else if (peer.equals(trade.getTakerNodeAddress())) return trade.getTakerPubKeyRing(); + if (peer.equals(trade.getArbitrator().getNodeAddress())) return trade.getArbitrator().getPubKeyRing(); + else if (peer.equals(trade.getMaker().getNodeAddress())) return trade.getMaker().getPubKeyRing(); + else if (peer.equals(trade.getTaker().getNodeAddress())) return trade.getTaker().getPubKeyRing(); else { log.warn("Cannot get peer's pub key ring because peer is not maker, taker, or arbitrator. Their address might have changed: " + peer); return null; @@ -565,7 +563,7 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D if (this instanceof ArbitratorProtocol) { // valid if traders unknown - if (trade.getMaker().getPubKeyRing() == null || trade.getTakerPubKeyRing() == null) return true; + if (trade.getMaker().getPubKeyRing() == null || trade.getTaker().getPubKeyRing() == null) return true; // valid if maker pub key if (message.getSignaturePubKey().equals(trade.getMaker().getPubKeyRing().getSignaturePubKey())) return true; @@ -575,10 +573,10 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D } else { // valid if arbitrator or peer unknown - if (trade.getArbitratorPubKeyRing() == null || (trade.getTradingPeer() == null || trade.getTradingPeer().getPubKeyRing() == null)) return true; + if (trade.getArbitrator().getPubKeyRing() == null || (trade.getTradingPeer() == null || trade.getTradingPeer().getPubKeyRing() == null)) return true; // valid if arbitrator's pub key ring - if (message.getSignaturePubKey().equals(trade.getArbitratorPubKeyRing().getSignaturePubKey())) return true; + if (message.getSignaturePubKey().equals(trade.getArbitrator().getPubKeyRing().getSignaturePubKey())) return true; // valid if peer's pub key ring if (message.getSignaturePubKey().equals(trade.getTradingPeer().getPubKeyRing().getSignaturePubKey())) return true; diff --git a/core/src/main/java/bisq/core/trade/protocol/TradingPeer.java b/core/src/main/java/bisq/core/trade/protocol/TradingPeer.java index 792b1e6f5d..e7c6fc6577 100644 --- a/core/src/main/java/bisq/core/trade/protocol/TradingPeer.java +++ b/core/src/main/java/bisq/core/trade/protocol/TradingPeer.java @@ -20,7 +20,7 @@ package bisq.core.trade.protocol; import bisq.core.btc.model.RawTransactionInput; import bisq.core.payment.payload.PaymentAccountPayload; import bisq.core.proto.CoreProtoResolver; - +import bisq.network.p2p.NodeAddress; import bisq.common.crypto.PubKeyRing; import bisq.common.proto.ProtoUtil; import bisq.common.proto.persistable.PersistablePayload; @@ -35,6 +35,7 @@ import java.util.stream.Collectors; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; +import monero.daemon.model.MoneroTx; import monero.wallet.model.MoneroTxWallet; import javax.annotation.Nullable; @@ -53,9 +54,14 @@ public final class TradingPeer implements PersistablePayload { @Setter @Nullable transient private byte[] preparedDepositTx; + transient private MoneroTx depositTx; // Persistable mutable @Nullable + private NodeAddress nodeAddress; + @Nullable + private PubKeyRing pubKeyRing; + @Nullable private String accountId; @Nullable private String paymentAccountId; @@ -78,8 +84,6 @@ public final class TradingPeer implements PersistablePayload { @Nullable private byte[] signature; @Nullable - private PubKeyRing pubKeyRing; - @Nullable private byte[] multiSigPubKey; @Nullable private List rawTransactionInputs; @@ -134,6 +138,8 @@ public final class TradingPeer implements PersistablePayload { final protobuf.TradingPeer.Builder builder = protobuf.TradingPeer.newBuilder() .setChangeOutputValue(changeOutputValue) .addAllReserveTxKeyImages(reserveTxKeyImages); + Optional.ofNullable(nodeAddress).ifPresent(e -> builder.setNodeAddress(nodeAddress.toProtoMessage())); + Optional.ofNullable(pubKeyRing).ifPresent(e -> builder.setPubKeyRing(pubKeyRing.toProtoMessage())); Optional.ofNullable(accountId).ifPresent(builder::setAccountId); Optional.ofNullable(paymentAccountId).ifPresent(builder::setPaymentAccountId); Optional.ofNullable(paymentMethodId).ifPresent(builder::setPaymentMethodId); @@ -173,6 +179,8 @@ public final class TradingPeer implements PersistablePayload { return null; } else { TradingPeer tradingPeer = new TradingPeer(); + tradingPeer.setNodeAddress(proto.hasNodeAddress() ? NodeAddress.fromProto(proto.getNodeAddress()) : null); + tradingPeer.setPubKeyRing(proto.hasPubKeyRing() ? PubKeyRing.fromProto(proto.getPubKeyRing()) : null); tradingPeer.setChangeOutputValue(proto.getChangeOutputValue()); tradingPeer.setAccountId(ProtoUtil.stringOrNullFromProto(proto.getAccountId())); tradingPeer.setPaymentAccountId(ProtoUtil.stringOrNullFromProto(proto.getPaymentAccountId())); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessDepositRequest.java b/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessDepositRequest.java index 5c3aab72f9..c2fc12abbe 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessDepositRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessDepositRequest.java @@ -56,14 +56,9 @@ public class ArbitratorProcessDepositRequest extends TradeTask { String signature = request.getContractSignature(); // get peer info - // TODO (woodser): make these utilities / refactor model - // TODO (woodser): verify request - PubKeyRing peerPubKeyRing; TradingPeer peer = trade.getTradingPeer(request.getSenderNodeAddress()); - if (peer == processModel.getArbitrator()) peerPubKeyRing = trade.getArbitratorPubKeyRing(); - else if (peer == processModel.getMaker()) peerPubKeyRing = trade.getMakerPubKeyRing(); - else if (peer == processModel.getTaker()) peerPubKeyRing = trade.getTakerPubKeyRing(); - else throw new RuntimeException(request.getClass().getSimpleName() + " is not from maker, taker, or arbitrator"); + if (peer == null) throw new RuntimeException(request.getClass().getSimpleName() + " is not from maker, taker, or arbitrator"); + PubKeyRing peerPubKeyRing = peer.getPubKeyRing(); // verify signature if (!Sig.verify(peerPubKeyRing.getSignaturePubKey(), contractAsJson, signature)) throw new RuntimeException("Peer's contract signature is invalid"); @@ -73,7 +68,7 @@ public class ArbitratorProcessDepositRequest extends TradeTask { // collect expected values of deposit tx Offer offer = trade.getOffer(); - boolean isFromTaker = request.getSenderNodeAddress().equals(trade.getTakerNodeAddress()); + boolean isFromTaker = request.getSenderNodeAddress().equals(trade.getTaker().getNodeAddress()); boolean isFromBuyer = isFromTaker ? offer.getDirection() == OfferDirection.SELL : offer.getDirection() == OfferDirection.BUY; BigInteger depositAmount = ParsingUtils.coinToAtomicUnits(isFromBuyer ? offer.getBuyerSecurityDeposit() : offer.getAmount().add(offer.getSellerSecurityDeposit())); String depositAddress = processModel.getMultisigAddress(); @@ -121,8 +116,8 @@ public class ArbitratorProcessDepositRequest extends TradeTask { new Date().getTime()); // send deposit response to maker and taker - sendDepositResponse(trade.getMakerNodeAddress(), trade.getMakerPubKeyRing(), response); - sendDepositResponse(trade.getTakerNodeAddress(), trade.getTakerPubKeyRing(), response); + sendDepositResponse(trade.getMaker().getNodeAddress(), trade.getMaker().getPubKeyRing(), response); + sendDepositResponse(trade.getTaker().getNodeAddress(), trade.getTaker().getPubKeyRing(), response); } else { if (processModel.getMaker().getDepositTxHex() == null) log.info("Arbitrator waiting for deposit request from maker for trade " + trade.getId()); if (processModel.getTaker().getDepositTxHex() == null) log.info("Arbitrator waiting for deposit request from taker for trade " + trade.getId()); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessPaymentAccountKeyRequest.java b/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessPaymentAccountKeyRequest.java index df12736630..da79589f12 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessPaymentAccountKeyRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessPaymentAccountKeyRequest.java @@ -59,11 +59,9 @@ public class ArbitratorProcessPaymentAccountKeyRequest extends TradeTask { ); // send response to buyer - boolean isMakerBuyer = trade.getOffer().isBuyOffer(); - NodeAddress buyerAddress = isMakerBuyer ? trade.getMakerNodeAddress() : trade.getTakerNodeAddress(); // TODO: trade.getBuyer().getNodeAddress() - PubKeyRing buyerPubKeyRing = isMakerBuyer ? trade.getMakerPubKeyRing() : trade.getTakerPubKeyRing(); + NodeAddress buyerAddress = trade.getBuyer().getNodeAddress(); log.info("Arbitrator sending PaymentAccountKeyResponse to buyer={}; offerId={}", buyerAddress, trade.getId()); - processModel.getP2PService().sendEncryptedDirectMessage(buyerAddress, buyerPubKeyRing, response, new SendDirectMessageListener() { + processModel.getP2PService().sendEncryptedDirectMessage(buyerAddress, trade.getBuyer().getPubKeyRing(), response, new SendDirectMessageListener() { @Override public void onArrived() { log.info("{} arrived: trading peer={}; offerId={}; uid={}", response.getClass().getSimpleName(), buyerAddress, trade.getId()); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessPayoutTxPublishedMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessPayoutTxPublishedMessage.java index ead62e287e..bec4cc2a23 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessPayoutTxPublishedMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessPayoutTxPublishedMessage.java @@ -41,8 +41,8 @@ public class ArbitratorProcessPayoutTxPublishedMessage extends TradeTask { trade.verifyPayoutTx(request.getSignedPayoutTxHex(), false, true); // update latest peer address - if (request.isMaker()) trade.setMakerNodeAddress(processModel.getTempTradingPeerNodeAddress()); - else trade.setTakerNodeAddress(processModel.getTempTradingPeerNodeAddress()); + if (request.isMaker()) trade.getMaker().setNodeAddress(processModel.getTempTradingPeerNodeAddress()); + else trade.getTaker().setNodeAddress(processModel.getTempTradingPeerNodeAddress()); // TODO: publish signed witness data? //request.getSignedWitness() diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessReserveTx.java b/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessReserveTx.java index a93784d7b1..957839efac 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessReserveTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorProcessReserveTx.java @@ -46,7 +46,7 @@ public class ArbitratorProcessReserveTx extends TradeTask { runInterceptHook(); Offer offer = trade.getOffer(); InitTradeRequest request = (InitTradeRequest) processModel.getTradeMessage(); - boolean isFromTaker = request.getSenderNodeAddress().equals(trade.getTakerNodeAddress()); + boolean isFromTaker = request.getSenderNodeAddress().equals(trade.getTaker().getNodeAddress()); boolean isFromBuyer = isFromTaker ? offer.getDirection() == OfferDirection.SELL : offer.getDirection() == OfferDirection.BUY; // TODO (woodser): if signer online, should never be called by maker diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorSendInitTradeOrMultisigRequests.java b/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorSendInitTradeOrMultisigRequests.java index 12d7fe0e2a..9e4894ac46 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorSendInitTradeOrMultisigRequests.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/ArbitratorSendInitTradeOrMultisigRequests.java @@ -58,7 +58,7 @@ public class ArbitratorSendInitTradeOrMultisigRequests extends TradeTask { byte[] sig = Sig.sign(processModel.getKeyRing().getSignatureKeyPair().getPrivate(), processModel.getOfferId().getBytes(Charsets.UTF_8)); // handle request from taker - if (request.getSenderNodeAddress().equals(trade.getTakerNodeAddress())) { + if (request.getSenderNodeAddress().equals(trade.getTaker().getNodeAddress())) { // create request to initialize trade with maker InitTradeRequest makerRequest = new InitTradeRequest( @@ -75,9 +75,9 @@ public class ArbitratorSendInitTradeOrMultisigRequests extends TradeTask { Version.getP2PMessageVersion(), sig, new Date().getTime(), - trade.getMakerNodeAddress(), - trade.getTakerNodeAddress(), - trade.getArbitratorNodeAddress(), + trade.getMaker().getNodeAddress(), + trade.getTaker().getNodeAddress(), + trade.getArbitrator().getNodeAddress(), null, null, // do not include taker's reserve tx null, @@ -85,10 +85,10 @@ public class ArbitratorSendInitTradeOrMultisigRequests extends TradeTask { null); // send request to maker - log.info("Send {} with offerId {} and uid {} to maker {} with pub key ring", makerRequest.getClass().getSimpleName(), makerRequest.getTradeId(), makerRequest.getUid(), trade.getMakerNodeAddress(), trade.getMakerPubKeyRing()); + log.info("Send {} with offerId {} and uid {} to maker {} with pub key ring", makerRequest.getClass().getSimpleName(), makerRequest.getTradeId(), makerRequest.getUid(), trade.getMaker().getNodeAddress(), trade.getMaker().getPubKeyRing()); processModel.getP2PService().sendEncryptedDirectMessage( - trade.getMakerNodeAddress(), // TODO (woodser): maker's address might be different from original owner address if they disconnect and reconnect, need to validate and update address when requests received - trade.getMakerPubKeyRing(), + trade.getMaker().getNodeAddress(), // TODO (woodser): maker's address might be different from original owner address if they disconnect and reconnect, need to validate and update address when requests received + trade.getMaker().getPubKeyRing(), makerRequest, new SendDirectMessageListener() { @Override @@ -98,7 +98,7 @@ public class ArbitratorSendInitTradeOrMultisigRequests extends TradeTask { } @Override public void onFault(String errorMessage) { - log.error("Sending {} failed: uid={}; peer={}; error={}", makerRequest.getClass().getSimpleName(), makerRequest.getUid(), trade.getArbitratorNodeAddress(), errorMessage); + log.error("Sending {} failed: uid={}; peer={}; error={}", makerRequest.getClass().getSimpleName(), makerRequest.getUid(), trade.getArbitrator().getNodeAddress(), errorMessage); appendToErrorMessage("Sending message failed: message=" + makerRequest + "\nerrorMessage=" + errorMessage); failed(); } @@ -107,7 +107,7 @@ public class ArbitratorSendInitTradeOrMultisigRequests extends TradeTask { } // handle request from maker - else if (request.getSenderNodeAddress().equals(trade.getMakerNodeAddress())) { + else if (request.getSenderNodeAddress().equals(trade.getMaker().getNodeAddress())) { sendInitMultisigRequests(); complete(); // TODO: wait for InitMultisigRequest arrivals? } else { @@ -145,10 +145,10 @@ public class ArbitratorSendInitTradeOrMultisigRequests extends TradeTask { null); // send request to maker - log.info("Send {} with offerId {} and uid {} to maker {}", initMultisigRequest.getClass().getSimpleName(), initMultisigRequest.getTradeId(), initMultisigRequest.getUid(), trade.getMakerNodeAddress()); + log.info("Send {} with offerId {} and uid {} to maker {}", initMultisigRequest.getClass().getSimpleName(), initMultisigRequest.getTradeId(), initMultisigRequest.getUid(), trade.getMaker().getNodeAddress()); processModel.getP2PService().sendEncryptedDirectMessage( - trade.getMakerNodeAddress(), - trade.getMakerPubKeyRing(), + trade.getMaker().getNodeAddress(), + trade.getMaker().getPubKeyRing(), initMultisigRequest, new SendDirectMessageListener() { @Override @@ -157,16 +157,16 @@ public class ArbitratorSendInitTradeOrMultisigRequests extends TradeTask { } @Override public void onFault(String errorMessage) { - log.error("Sending {} failed: uid={}; peer={}; error={}", initMultisigRequest.getClass().getSimpleName(), initMultisigRequest.getUid(), trade.getMakerNodeAddress(), errorMessage); + log.error("Sending {} failed: uid={}; peer={}; error={}", initMultisigRequest.getClass().getSimpleName(), initMultisigRequest.getUid(), trade.getMaker().getNodeAddress(), errorMessage); } } ); // send request to taker - log.info("Send {} with offerId {} and uid {} to taker {}", initMultisigRequest.getClass().getSimpleName(), initMultisigRequest.getTradeId(), initMultisigRequest.getUid(), trade.getTakerNodeAddress()); + log.info("Send {} with offerId {} and uid {} to taker {}", initMultisigRequest.getClass().getSimpleName(), initMultisigRequest.getTradeId(), initMultisigRequest.getUid(), trade.getTaker().getNodeAddress()); processModel.getP2PService().sendEncryptedDirectMessage( - trade.getTakerNodeAddress(), - trade.getTakerPubKeyRing(), + trade.getTaker().getNodeAddress(), + trade.getTaker().getPubKeyRing(), initMultisigRequest, new SendDirectMessageListener() { @Override @@ -175,7 +175,7 @@ public class ArbitratorSendInitTradeOrMultisigRequests extends TradeTask { } @Override public void onFault(String errorMessage) { - log.error("Sending {} failed: uid={}; peer={}; error={}", initMultisigRequest.getClass().getSimpleName(), initMultisigRequest.getUid(), trade.getTakerNodeAddress(), errorMessage); + log.error("Sending {} failed: uid={}; peer={}; error={}", initMultisigRequest.getClass().getSimpleName(), initMultisigRequest.getUid(), trade.getTaker().getNodeAddress(), errorMessage); } } ); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerProcessPaymentAccountKeyResponse.java b/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerProcessPaymentAccountKeyResponse.java index eb936b06b6..08015fcffe 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerProcessPaymentAccountKeyResponse.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerProcessPaymentAccountKeyResponse.java @@ -37,8 +37,8 @@ public class BuyerProcessPaymentAccountKeyResponse extends TradeTask { runInterceptHook(); // update peer node address if not from arbitrator - if (!processModel.getTempTradingPeerNodeAddress().equals(trade.getArbitratorNodeAddress())) { - trade.setTradingPeerNodeAddress(processModel.getTempTradingPeerNodeAddress()); + if (!processModel.getTempTradingPeerNodeAddress().equals(trade.getArbitrator().getNodeAddress())) { + trade.getTradingPeer().setNodeAddress(processModel.getTempTradingPeerNodeAddress()); } // decrypt peer's payment account payload diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerProcessPaymentReceivedMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerProcessPaymentReceivedMessage.java index 7e2bd6552f..3c7183f8b0 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerProcessPaymentReceivedMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerProcessPaymentReceivedMessage.java @@ -53,7 +53,7 @@ public class BuyerProcessPaymentReceivedMessage extends TradeTask { checkArgument(message.getPayoutTxHex() != null); // update to the latest peer address of our peer if the message is correct - trade.setTradingPeerNodeAddress(processModel.getTempTradingPeerNodeAddress()); + trade.getTradingPeer().setNodeAddress(processModel.getTempTradingPeerNodeAddress()); // handle if payout tx is not seen on network if (trade.getPhase().ordinal() < Trade.Phase.PAYOUT_PUBLISHED.ordinal()) { diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerSendPaymentAccountKeyRequestToArbitrator.java b/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerSendPaymentAccountKeyRequestToArbitrator.java index db61a2a5ee..15f3ee161f 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerSendPaymentAccountKeyRequestToArbitrator.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerSendPaymentAccountKeyRequestToArbitrator.java @@ -49,10 +49,10 @@ public class BuyerSendPaymentAccountKeyRequestToArbitrator extends TradeTask { ); // send request to arbitrator - log.info("Sending {} with offerId {} and uid {} to arbitrator {} with pub key ring {}", request.getClass().getSimpleName(), request.getTradeId(), request.getUid(), trade.getArbitratorNodeAddress(), trade.getArbitratorPubKeyRing()); + log.info("Sending {} with offerId {} and uid {} to arbitrator {} with pub key ring {}", request.getClass().getSimpleName(), request.getTradeId(), request.getUid(), trade.getArbitrator().getNodeAddress(), trade.getArbitrator().getPubKeyRing()); processModel.getP2PService().sendEncryptedDirectMessage( - trade.getArbitratorNodeAddress(), - trade.getArbitratorPubKeyRing(), + trade.getArbitrator().getNodeAddress(), + trade.getArbitrator().getPubKeyRing(), request, new SendDirectMessageListener() { @Override diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerSendPayoutTxPublishedMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerSendPayoutTxPublishedMessage.java index cd454f4c3e..843124d947 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerSendPayoutTxPublishedMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/BuyerSendPayoutTxPublishedMessage.java @@ -40,12 +40,12 @@ public class BuyerSendPayoutTxPublishedMessage extends SendMailboxMessageTask { @Override protected NodeAddress getReceiverNodeAddress() { - return trade.getArbitratorNodeAddress(); + return trade.getArbitrator().getNodeAddress(); } @Override protected PubKeyRing getReceiverPubKeyRing() { - return trade.getArbitratorPubKeyRing(); + return trade.getArbitrator().getPubKeyRing(); } @Override diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/MakerSendInitTradeRequest.java b/core/src/main/java/bisq/core/trade/protocol/tasks/MakerSendInitTradeRequest.java index 44addcc4b7..253a1909a3 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/MakerSendInitTradeRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/MakerSendInitTradeRequest.java @@ -72,9 +72,9 @@ public class MakerSendInitTradeRequest extends TradeTask { Version.getP2PMessageVersion(), sig, makerRequest.getCurrentDate(), - trade.getMakerNodeAddress(), - trade.getTakerNodeAddress(), - trade.getArbitratorNodeAddress(), + trade.getMaker().getNodeAddress(), + trade.getTaker().getNodeAddress(), + trade.getArbitrator().getNodeAddress(), trade.getSelf().getReserveTxHash(), trade.getSelf().getReserveTxHex(), trade.getSelf().getReserveTxKey(), @@ -82,10 +82,10 @@ public class MakerSendInitTradeRequest extends TradeTask { null); // send request to arbitrator - log.info("Sending {} with offerId {} and uid {} to arbitrator {} with pub key ring {}", arbitratorRequest.getClass().getSimpleName(), arbitratorRequest.getTradeId(), arbitratorRequest.getUid(), trade.getArbitratorNodeAddress(), trade.getArbitratorPubKeyRing()); + log.info("Sending {} with offerId {} and uid {} to arbitrator {} with pub key ring {}", arbitratorRequest.getClass().getSimpleName(), arbitratorRequest.getTradeId(), arbitratorRequest.getUid(), trade.getArbitrator().getNodeAddress(), trade.getArbitrator().getPubKeyRing()); processModel.getP2PService().sendEncryptedDirectMessage( - trade.getArbitratorNodeAddress(), - trade.getArbitratorPubKeyRing(), + trade.getArbitrator().getNodeAddress(), + trade.getArbitrator().getPubKeyRing(), arbitratorRequest, new SendDirectMessageListener() { @Override diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/MaybeSendSignContractRequest.java b/core/src/main/java/bisq/core/trade/protocol/tasks/MaybeSendSignContractRequest.java index 5c1acb7f5d..a51e41495c 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/MaybeSendSignContractRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/MaybeSendSignContractRequest.java @@ -97,32 +97,32 @@ public class MaybeSendSignContractRequest extends TradeTask { depositTx.getHash()); // send request to trading peer - processModel.getP2PService().sendEncryptedDirectMessage(trade.getTradingPeerNodeAddress(), trade.getTradingPeerPubKeyRing(), request, new SendDirectMessageListener() { + processModel.getP2PService().sendEncryptedDirectMessage(trade.getTradingPeer().getNodeAddress(), trade.getTradingPeer().getPubKeyRing(), request, new SendDirectMessageListener() { @Override public void onArrived() { - log.info("{} arrived: trading peer={}; offerId={}; uid={}", request.getClass().getSimpleName(), trade.getTradingPeerNodeAddress(), trade.getId()); + log.info("{} arrived: trading peer={}; offerId={}; uid={}", request.getClass().getSimpleName(), trade.getTradingPeer().getNodeAddress(), trade.getId()); ack1 = true; if (ack1 && ack2) completeAux(); } @Override public void onFault(String errorMessage) { - log.error("Sending {} failed: uid={}; peer={}; error={}", request.getClass().getSimpleName(), trade.getTradingPeerNodeAddress(), trade.getId(), errorMessage); + log.error("Sending {} failed: uid={}; peer={}; error={}", request.getClass().getSimpleName(), trade.getTradingPeer().getNodeAddress(), trade.getId(), errorMessage); appendToErrorMessage("Sending message failed: message=" + request + "\nerrorMessage=" + errorMessage); failed(); } }); // send request to arbitrator - processModel.getP2PService().sendEncryptedDirectMessage(trade.getArbitratorNodeAddress(), trade.getArbitratorPubKeyRing(), request, new SendDirectMessageListener() { + processModel.getP2PService().sendEncryptedDirectMessage(trade.getArbitrator().getNodeAddress(), trade.getArbitrator().getPubKeyRing(), request, new SendDirectMessageListener() { @Override public void onArrived() { - log.info("{} arrived: trading peer={}; offerId={}; uid={}", request.getClass().getSimpleName(), trade.getArbitratorNodeAddress(), trade.getId()); + log.info("{} arrived: trading peer={}; offerId={}; uid={}", request.getClass().getSimpleName(), trade.getArbitrator().getNodeAddress(), trade.getId()); ack2 = true; if (ack1 && ack2) completeAux(); } @Override public void onFault(String errorMessage) { - log.error("Sending {} failed: uid={}; peer={}; error={}", request.getClass().getSimpleName(), trade.getArbitratorNodeAddress(), trade.getId(), errorMessage); + log.error("Sending {} failed: uid={}; peer={}; error={}", request.getClass().getSimpleName(), trade.getArbitrator().getNodeAddress(), trade.getId(), errorMessage); appendToErrorMessage("Sending message failed: message=" + request + "\nerrorMessage=" + errorMessage); failed(); } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessInitMultisigRequest.java b/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessInitMultisigRequest.java index c037e63c1b..00a19f3bd7 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessInitMultisigRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessInitMultisigRequest.java @@ -73,9 +73,9 @@ public class ProcessInitMultisigRequest extends TradeTask { // get peer multisig participant TradingPeer multisigParticipant; - if (request.getSenderNodeAddress().equals(trade.getMakerNodeAddress())) multisigParticipant = processModel.getMaker(); - else if (request.getSenderNodeAddress().equals(trade.getTakerNodeAddress())) multisigParticipant = processModel.getTaker(); - else if (request.getSenderNodeAddress().equals(trade.getArbitratorNodeAddress())) multisigParticipant = processModel.getArbitrator(); + if (request.getSenderNodeAddress().equals(trade.getMaker().getNodeAddress())) multisigParticipant = processModel.getMaker(); + else if (request.getSenderNodeAddress().equals(trade.getTaker().getNodeAddress())) multisigParticipant = processModel.getTaker(); + else if (request.getSenderNodeAddress().equals(trade.getArbitrator().getNodeAddress())) multisigParticipant = processModel.getArbitrator(); else throw new RuntimeException("Invalid sender to process init trade message: " + trade.getClass().getName()); // reconcile peer's established multisig hex with message @@ -135,20 +135,20 @@ public class ProcessInitMultisigRequest extends TradeTask { NodeAddress peer2Address; PubKeyRing peer2PubKeyRing; if (trade instanceof ArbitratorTrade) { - peer1Address = trade.getTakerNodeAddress(); - peer1PubKeyRing = trade.getTakerPubKeyRing(); - peer2Address = trade.getMakerNodeAddress(); - peer2PubKeyRing = trade.getMakerPubKeyRing(); + peer1Address = trade.getTaker().getNodeAddress(); + peer1PubKeyRing = trade.getTaker().getPubKeyRing(); + peer2Address = trade.getMaker().getNodeAddress(); + peer2PubKeyRing = trade.getMaker().getPubKeyRing(); } else if (trade instanceof MakerTrade) { - peer1Address = trade.getTakerNodeAddress(); - peer1PubKeyRing = trade.getTakerPubKeyRing(); - peer2Address = trade.getArbitratorNodeAddress(); - peer2PubKeyRing = trade.getArbitratorPubKeyRing(); + peer1Address = trade.getTaker().getNodeAddress(); + peer1PubKeyRing = trade.getTaker().getPubKeyRing(); + peer2Address = trade.getArbitrator().getNodeAddress(); + peer2PubKeyRing = trade.getArbitrator().getPubKeyRing(); } else { - peer1Address = trade.getMakerNodeAddress(); - peer1PubKeyRing = trade.getMakerPubKeyRing(); - peer2Address = trade.getArbitratorNodeAddress(); - peer2PubKeyRing = trade.getArbitratorPubKeyRing(); + peer1Address = trade.getMaker().getNodeAddress(); + peer1PubKeyRing = trade.getMaker().getPubKeyRing(); + peer2Address = trade.getArbitrator().getNodeAddress(); + peer2PubKeyRing = trade.getArbitrator().getPubKeyRing(); } if (peer1Address == null) throw new RuntimeException("Peer1 address is null"); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessInitTradeRequest.java b/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessInitTradeRequest.java index 35b7c8ed4c..134def2644 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessInitTradeRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessInitTradeRequest.java @@ -61,16 +61,16 @@ public class ProcessInitTradeRequest extends TradeTask { // handle request as arbitrator TradingPeer multisigParticipant; if (trade instanceof ArbitratorTrade) { - trade.setMakerPubKeyRing((trade.getOffer().getPubKeyRing())); - trade.setArbitratorPubKeyRing(processModel.getPubKeyRing()); + trade.getMaker().setPubKeyRing((trade.getOffer().getPubKeyRing())); + trade.getArbitrator().setPubKeyRing(processModel.getPubKeyRing()); processModel.getArbitrator().setPubKeyRing(processModel.getPubKeyRing()); // TODO (woodser): why duplicating field in process model // handle request from taker if (request.getSenderNodeAddress().equals(request.getTakerNodeAddress())) { multisigParticipant = processModel.getTaker(); - if (!trade.getTakerNodeAddress().equals(request.getTakerNodeAddress())) throw new RuntimeException("Init trade requests from maker and taker do not agree"); - if (trade.getTakerPubKeyRing() != null) throw new RuntimeException("Pub key ring should not be initialized before processing InitTradeRequest"); - trade.setTakerPubKeyRing(request.getPubKeyRing()); + if (!trade.getTaker().getNodeAddress().equals(request.getTakerNodeAddress())) throw new RuntimeException("Init trade requests from maker and taker do not agree"); + if (trade.getTaker().getPubKeyRing() != null) throw new RuntimeException("Pub key ring should not be initialized before processing InitTradeRequest"); + trade.getTaker().setPubKeyRing(request.getPubKeyRing()); if (!TradeUtils.isMakerSignatureValid(request, request.getMakerSignature(), offer.getPubKeyRing())) throw new RuntimeException("Maker signature is invalid for the trade request"); // verify maker signature // check trade price @@ -88,10 +88,10 @@ public class ProcessInitTradeRequest extends TradeTask { // handle request from maker else if (request.getSenderNodeAddress().equals(request.getMakerNodeAddress())) { multisigParticipant = processModel.getMaker(); - if (!trade.getMakerNodeAddress().equals(request.getMakerNodeAddress())) throw new RuntimeException("Init trade requests from maker and taker do not agree"); // TODO (woodser): test when maker and taker do not agree, use proper handling, uninitialize trade for other takers - if (trade.getMakerPubKeyRing() == null) trade.setMakerPubKeyRing(request.getPubKeyRing()); - else if (!trade.getMakerPubKeyRing().equals(request.getPubKeyRing())) throw new RuntimeException("Init trade requests from maker and taker do not agree"); // TODO (woodser): proper handling - trade.setMakerPubKeyRing(request.getPubKeyRing()); + if (!trade.getMaker().getNodeAddress().equals(request.getMakerNodeAddress())) throw new RuntimeException("Init trade requests from maker and taker do not agree"); // TODO (woodser): test when maker and taker do not agree, use proper handling, uninitialize trade for other takers + if (trade.getMaker().getPubKeyRing() == null) trade.getMaker().setPubKeyRing(request.getPubKeyRing()); + else if (!trade.getMaker().getPubKeyRing().equals(request.getPubKeyRing())) throw new RuntimeException("Init trade requests from maker and taker do not agree"); // TODO (woodser): proper handling + trade.getMaker().setPubKeyRing(request.getPubKeyRing()); if (trade.getPrice().getValue() != request.getTradePrice()) throw new RuntimeException("Maker and taker price do not agree"); } else { throw new RuntimeException("Sender is not trade's maker or taker"); @@ -101,8 +101,8 @@ public class ProcessInitTradeRequest extends TradeTask { // handle maker trade else if (trade instanceof MakerTrade) { multisigParticipant = processModel.getTaker(); - trade.setTakerNodeAddress(request.getSenderNodeAddress()); // arbitrator sends maker InitTradeRequest with taker's node address and pub key ring - trade.setTakerPubKeyRing(request.getPubKeyRing()); + trade.getTaker().setNodeAddress(request.getSenderNodeAddress()); // arbitrator sends maker InitTradeRequest with taker's node address and pub key ring + trade.getTaker().setPubKeyRing(request.getPubKeyRing()); // check trade price try { diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessSignContractRequest.java b/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessSignContractRequest.java index fa56e56a7f..43992d4b5d 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessSignContractRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessSignContractRequest.java @@ -112,10 +112,10 @@ public class ProcessSignContractRequest extends TradeTask { encryptedPaymentAccountPayload); // get response recipients. only arbitrator sends response to both peers - NodeAddress recipient1 = trade instanceof ArbitratorTrade ? trade.getMakerNodeAddress() : trade.getTradingPeerNodeAddress(); - PubKeyRing recipient1PubKey = trade instanceof ArbitratorTrade ? trade.getMakerPubKeyRing() : trade.getTradingPeerPubKeyRing(); - NodeAddress recipient2 = trade instanceof ArbitratorTrade ? trade.getTakerNodeAddress() : null; - PubKeyRing recipient2PubKey = trade instanceof ArbitratorTrade ? trade.getTakerPubKeyRing() : null; + NodeAddress recipient1 = trade instanceof ArbitratorTrade ? trade.getMaker().getNodeAddress() : trade.getTradingPeer().getNodeAddress(); + PubKeyRing recipient1PubKey = trade instanceof ArbitratorTrade ? trade.getMaker().getPubKeyRing() : trade.getTradingPeer().getPubKeyRing(); + NodeAddress recipient2 = trade instanceof ArbitratorTrade ? trade.getTaker().getNodeAddress() : null; + PubKeyRing recipient2PubKey = trade instanceof ArbitratorTrade ? trade.getTaker().getPubKeyRing() : null; // send response to recipient 1 processModel.getP2PService().sendEncryptedDirectMessage(recipient1, recipient1PubKey, response, new SendDirectMessageListener() { diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessSignContractResponse.java b/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessSignContractResponse.java index c6ba9186c9..cfbb46dc29 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessSignContractResponse.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessSignContractResponse.java @@ -54,13 +54,8 @@ public class ProcessSignContractResponse extends TradeTask { } // get peer info - // TODO (woodser): make these utilities / refactor model - PubKeyRing peerPubKeyRing; TradingPeer peer = trade.getTradingPeer(response.getSenderNodeAddress()); - if (peer == processModel.getArbitrator()) peerPubKeyRing = trade.getArbitratorPubKeyRing(); - else if (peer == processModel.getMaker()) peerPubKeyRing = trade.getMakerPubKeyRing(); - else if (peer == processModel.getTaker()) peerPubKeyRing = trade.getTakerPubKeyRing(); - else throw new RuntimeException(response.getClass().getSimpleName() + " is not from maker, taker, or arbitrator"); + PubKeyRing peerPubKeyRing = peer.getPubKeyRing(); // save peer's encrypted payment account payload peer.setEncryptedPaymentAccountPayload(response.getEncryptedPaymentAccountPayload()); @@ -94,18 +89,18 @@ public class ProcessSignContractResponse extends TradeTask { trade.getSelf().getPaymentAccountKey()); // send request to arbitrator - log.info("Sending {} to arbitrator {}; offerId={}; uid={}", request.getClass().getSimpleName(), trade.getArbitratorNodeAddress(), trade.getId(), request.getUid()); - processModel.getP2PService().sendEncryptedDirectMessage(trade.getArbitratorNodeAddress(), trade.getArbitratorPubKeyRing(), request, new SendDirectMessageListener() { + log.info("Sending {} to arbitrator {}; offerId={}; uid={}", request.getClass().getSimpleName(), trade.getArbitrator().getNodeAddress(), trade.getId(), request.getUid()); + processModel.getP2PService().sendEncryptedDirectMessage(trade.getArbitrator().getNodeAddress(), trade.getArbitrator().getPubKeyRing(), request, new SendDirectMessageListener() { @Override public void onArrived() { - log.info("{} arrived: arbitrator={}; offerId={}; uid={}", request.getClass().getSimpleName(), trade.getArbitratorNodeAddress(), trade.getId(), request.getUid()); + log.info("{} arrived: arbitrator={}; offerId={}; uid={}", request.getClass().getSimpleName(), trade.getArbitrator().getNodeAddress(), trade.getId(), request.getUid()); trade.setStateIfValidTransitionTo(Trade.State.SAW_ARRIVED_PUBLISH_DEPOSIT_TX_REQUEST); processModel.getTradeManager().requestPersistence(); complete(); } @Override public void onFault(String errorMessage) { - log.error("Sending {} failed: uid={}; peer={}; error={}", request.getClass().getSimpleName(), trade.getArbitratorNodeAddress(), trade.getId(), errorMessage); + log.error("Sending {} failed: uid={}; peer={}; error={}", request.getClass().getSimpleName(), trade.getArbitrator().getNodeAddress(), trade.getId(), errorMessage); appendToErrorMessage("Sending message failed: message=" + request + "\nerrorMessage=" + errorMessage); failed(); } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessUpdateMultisigRequest.java b/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessUpdateMultisigRequest.java index 8d29ef6322..cb427c11b7 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessUpdateMultisigRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/ProcessUpdateMultisigRequest.java @@ -88,8 +88,8 @@ public class ProcessUpdateMultisigRequest extends TradeTask { new Date().getTime(), updatedMultisigHex); - log.info("Send {} with offerId {} and uid {} to peer {}", response.getClass().getSimpleName(), response.getTradeId(), response.getUid(), trade.getTradingPeerNodeAddress()); - processModel.getP2PService().sendEncryptedDirectMessage(trade.getTradingPeerNodeAddress(), trade.getTradingPeerPubKeyRing(), response, new SendDirectMessageListener() { + log.info("Send {} with offerId {} and uid {} to peer {}", response.getClass().getSimpleName(), response.getTradeId(), response.getUid(), trade.getTradingPeer().getNodeAddress()); + processModel.getP2PService().sendEncryptedDirectMessage(trade.getTradingPeer().getNodeAddress(), trade.getTradingPeer().getPubKeyRing(), response, new SendDirectMessageListener() { @Override public void onArrived() { log.info("{} arrived at trading peer: offerId={}; uid={}", response.getClass().getSimpleName(), response.getTradeId(), response.getUid()); @@ -97,7 +97,7 @@ public class ProcessUpdateMultisigRequest extends TradeTask { } @Override public void onFault(String errorMessage) { - log.error("Sending {} failed: uid={}; peer={}; error={}", response.getClass().getSimpleName(), response.getUid(), trade.getArbitratorNodeAddress(), errorMessage); + log.error("Sending {} failed: uid={}; peer={}; error={}", response.getClass().getSimpleName(), response.getUid(), trade.getArbitrator().getNodeAddress(), errorMessage); appendToErrorMessage("Sending response failed: response=" + response + "\nerrorMessage=" + errorMessage); failed(); } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/PublishTradeStatistics.java b/core/src/main/java/bisq/core/trade/protocol/tasks/PublishTradeStatistics.java index 78e4615ba8..9bf16fac9b 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/PublishTradeStatistics.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/PublishTradeStatistics.java @@ -54,7 +54,7 @@ public class PublishTradeStatistics extends TradeTask { extraDataMap.put(OfferPayload.REFERRAL_ID, processModel.getReferralIdService().getOptionalReferralId().get()); } - NodeAddress mediatorNodeAddress = checkNotNull(trade.getArbitratorNodeAddress()); + NodeAddress mediatorNodeAddress = checkNotNull(trade.getArbitrator().getNodeAddress()); // The first 4 chars are sufficient to identify a mediator. // For testing with regtest/localhost we use the full address as its localhost and would result in // same values for multiple mediators. diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/SellerMaybeSendPayoutTxPublishedMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/SellerMaybeSendPayoutTxPublishedMessage.java index 6872e0ddef..905b6b5492 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/SellerMaybeSendPayoutTxPublishedMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/SellerMaybeSendPayoutTxPublishedMessage.java @@ -55,12 +55,12 @@ public class SellerMaybeSendPayoutTxPublishedMessage extends SendMailboxMessageT @Override protected NodeAddress getReceiverNodeAddress() { - return trade.getArbitratorNodeAddress(); + return trade.getArbitrator().getNodeAddress(); } @Override protected PubKeyRing getReceiverPubKeyRing() { - return trade.getArbitratorPubKeyRing(); + return trade.getArbitrator().getPubKeyRing(); } @Override diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/SellerProcessPaymentSentMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/SellerProcessPaymentSentMessage.java index 09dbeb3859..e576fcf659 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/SellerProcessPaymentSentMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/SellerProcessPaymentSentMessage.java @@ -58,7 +58,7 @@ public class SellerProcessPaymentSentMessage extends TradeTask { } // update latest peer address - trade.setTradingPeerNodeAddress(processModel.getTempTradingPeerNodeAddress()); + trade.getTradingPeer().setNodeAddress(processModel.getTempTradingPeerNodeAddress()); String counterCurrencyTxId = message.getCounterCurrencyTxId(); if (counterCurrencyTxId != null && counterCurrencyTxId.length() < 100) { diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/SellerPublishTradeStatistics.java b/core/src/main/java/bisq/core/trade/protocol/tasks/SellerPublishTradeStatistics.java index d52d3519dc..9904390b03 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/SellerPublishTradeStatistics.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/SellerPublishTradeStatistics.java @@ -36,7 +36,7 @@ public class SellerPublishTradeStatistics extends TradeTask { // // checkNotNull(trade.getDepositTx()); // -// processModel.getP2PService().findPeersCapabilities(trade.getTradingPeerNodeAddress()) +// processModel.getP2PService().findPeersCapabilities(trade.getTradingPeer().getNodeAddress()) // .filter(capabilities -> capabilities.containsAll(Capability.TRADE_STATISTICS_3)) // .ifPresentOrElse(capabilities -> { // // Our peer has updated, so as we are the seller we will publish the trade statistics. diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/SellerSendPaymentReceivedMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/SellerSendPaymentReceivedMessage.java index ec5aefea2e..8c610ad987 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/SellerSendPaymentReceivedMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/SellerSendPaymentReceivedMessage.java @@ -71,7 +71,7 @@ public class SellerSendPaymentReceivedMessage extends SendMailboxMessageTask { protected void setStateSent() { trade.setState(trade.getState().ordinal() >= Trade.State.SELLER_PUBLISHED_PAYOUT_TX.ordinal() ? Trade.State.SELLER_SENT_PAYOUT_TX_PUBLISHED_MSG : Trade.State.SELLER_SENT_PAYMENT_RECEIVED_MSG); log.info("Sent SellerReceivedPaymentMessage: tradeId={} at peer {} SignedWitness {}", - trade.getId(), trade.getTradingPeerNodeAddress(), signedWitness); + trade.getId(), trade.getTradingPeer().getNodeAddress(), signedWitness); processModel.getTradeManager().requestPersistence(); } @@ -79,7 +79,7 @@ public class SellerSendPaymentReceivedMessage extends SendMailboxMessageTask { protected void setStateArrived() { trade.setState(trade.getState().ordinal() >= Trade.State.SELLER_PUBLISHED_PAYOUT_TX.ordinal() ? Trade.State.SELLER_SAW_ARRIVED_PAYOUT_TX_PUBLISHED_MSG : Trade.State.SELLER_SAW_ARRIVED_PAYMENT_RECEIVED_MSG); log.info("Seller's PaymentReceivedMessage arrived: tradeId={} at peer {} SignedWitness {}", - trade.getId(), trade.getTradingPeerNodeAddress(), signedWitness); + trade.getId(), trade.getTradingPeer().getNodeAddress(), signedWitness); processModel.getTradeManager().requestPersistence(); } @@ -87,7 +87,7 @@ public class SellerSendPaymentReceivedMessage extends SendMailboxMessageTask { protected void setStateStoredInMailbox() { trade.setState(trade.getState().ordinal() >= Trade.State.SELLER_PUBLISHED_PAYOUT_TX.ordinal() ? Trade.State.SELLER_STORED_IN_MAILBOX_PAYOUT_TX_PUBLISHED_MSG : Trade.State.SELLER_STORED_IN_MAILBOX_PAYMENT_RECEIVED_MSG); log.info("Seller's PaymentReceivedMessage stored in mailbox: tradeId={} at peer {} SignedWitness {}", - trade.getId(), trade.getTradingPeerNodeAddress(), signedWitness); + trade.getId(), trade.getTradingPeer().getNodeAddress(), signedWitness); processModel.getTradeManager().requestPersistence(); } @@ -95,7 +95,7 @@ public class SellerSendPaymentReceivedMessage extends SendMailboxMessageTask { protected void setStateFault() { trade.setState(trade.getState().ordinal() >= Trade.State.SELLER_PUBLISHED_PAYOUT_TX.ordinal() ? Trade.State.SELLER_SEND_FAILED_PAYOUT_TX_PUBLISHED_MSG : Trade.State.SELLER_SEND_FAILED_PAYMENT_RECEIVED_MSG); log.error("SellerReceivedPaymentMessage failed: tradeId={} at peer {} SignedWitness {}", - trade.getId(), trade.getTradingPeerNodeAddress(), signedWitness); + trade.getId(), trade.getTradingPeer().getNodeAddress(), signedWitness); processModel.getTradeManager().requestPersistence(); } } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/SendMailboxMessageTask.java b/core/src/main/java/bisq/core/trade/protocol/tasks/SendMailboxMessageTask.java index 4eb7d7c568..252316af0b 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/SendMailboxMessageTask.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/SendMailboxMessageTask.java @@ -35,7 +35,7 @@ public abstract class SendMailboxMessageTask extends TradeTask { } protected NodeAddress getReceiverNodeAddress() { - return trade.getTradingPeerNodeAddress(); + return trade.getTradingPeer().getNodeAddress(); } protected PubKeyRing getReceiverPubKeyRing() { diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/TakerSendInitTradeRequestToArbitrator.java b/core/src/main/java/bisq/core/trade/protocol/tasks/TakerSendInitTradeRequestToArbitrator.java index d99e69a20f..0ff741fdf0 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/TakerSendInitTradeRequestToArbitrator.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/TakerSendInitTradeRequestToArbitrator.java @@ -93,8 +93,8 @@ public class TakerSendInitTradeRequestToArbitrator extends TradeTask { // set pub keys processModel.getArbitrator().setPubKeyRing(arbitrator.getPubKeyRing()); - trade.setArbitratorNodeAddress(arbitratorNodeAddress); - trade.setArbitratorPubKeyRing(processModel.getArbitrator().getPubKeyRing()); + trade.getArbitrator().setNodeAddress(arbitratorNodeAddress); + trade.getArbitrator().setPubKeyRing(processModel.getArbitrator().getPubKeyRing()); // create request to arbitrator InitTradeRequest makerRequest = (InitTradeRequest) processModel.getTradeMessage(); // taker's InitTradeRequest to maker @@ -114,7 +114,7 @@ public class TakerSendInitTradeRequestToArbitrator extends TradeTask { makerRequest.getCurrentDate(), makerRequest.getMakerNodeAddress(), makerRequest.getTakerNodeAddress(), - trade.getArbitratorNodeAddress(), + trade.getArbitrator().getNodeAddress(), processModel.getReserveTx().getHash(), processModel.getReserveTx().getFullHex(), processModel.getReserveTx().getKey(), @@ -122,7 +122,7 @@ public class TakerSendInitTradeRequestToArbitrator extends TradeTask { processModel.getMakerSignature()); // send request to arbitrator - log.info("Sending {} with offerId {} and uid {} to arbitrator {} with pub key ring {}", arbitratorRequest.getClass().getSimpleName(), arbitratorRequest.getTradeId(), arbitratorRequest.getUid(), trade.getArbitratorNodeAddress(), trade.getArbitratorPubKeyRing()); + log.info("Sending {} with offerId {} and uid {} to arbitrator {} with pub key ring {}", arbitratorRequest.getClass().getSimpleName(), arbitratorRequest.getTradeId(), arbitratorRequest.getUid(), trade.getArbitrator().getNodeAddress(), trade.getArbitrator().getPubKeyRing()); processModel.getP2PService().sendEncryptedDirectMessage( arbitratorNodeAddress, arbitrator.getPubKeyRing(), diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/UpdateMultisigWithTradingPeer.java b/core/src/main/java/bisq/core/trade/protocol/tasks/UpdateMultisigWithTradingPeer.java index 4fdd5fbb56..5d4983a1bc 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/UpdateMultisigWithTradingPeer.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/UpdateMultisigWithTradingPeer.java @@ -95,16 +95,16 @@ public class UpdateMultisigWithTradingPeer extends TradeTask { System.out.println("Sending message: " + message); - // TODO (woodser): trade.getTradingPeerNodeAddress() and/or trade.getTradingPeerPubKeyRing() are null on restart of application, so cannot send payment to complete trade - log.info("Send {} with offerId {} and uid {} to peer {}", message.getClass().getSimpleName(), message.getTradeId(), message.getUid(), trade.getTradingPeerNodeAddress()); - processModel.getP2PService().sendEncryptedDirectMessage(trade.getTradingPeerNodeAddress(), trade.getTradingPeerPubKeyRing(), message, new SendDirectMessageListener() { + // TODO (woodser): trade.getTradingPeer().getNodeAddress() and/or trade.getTradingPeer().getPubKeyRing() are null on restart of application, so cannot send payment to complete trade + log.info("Send {} with offerId {} and uid {} to peer {}", message.getClass().getSimpleName(), message.getTradeId(), message.getUid(), trade.getTradingPeer().getNodeAddress()); + processModel.getP2PService().sendEncryptedDirectMessage(trade.getTradingPeer().getNodeAddress(), trade.getTradingPeer().getPubKeyRing(), message, new SendDirectMessageListener() { @Override public void onArrived() { log.info("{} arrived at trading peer: offerId={}; uid={}", message.getClass().getSimpleName(), message.getTradeId(), message.getUid()); } @Override public void onFault(String errorMessage) { - log.error("Sending {} failed: uid={}; peer={}; error={}", message.getClass().getSimpleName(), message.getUid(), trade.getArbitratorNodeAddress(), errorMessage); + log.error("Sending {} failed: uid={}; peer={}; error={}", message.getClass().getSimpleName(), message.getUid(), trade.getArbitrator().getNodeAddress(), errorMessage); appendToErrorMessage("Sending message failed: message=" + message + "\nerrorMessage=" + errorMessage); failed(); } diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutSignatureMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutSignatureMessage.java index b5287bfd76..b11f91d3a8 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutSignatureMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutSignatureMessage.java @@ -47,7 +47,7 @@ public class ProcessMediatedPayoutSignatureMessage extends TradeTask { trade.getTradingPeer().setMediatedPayoutTxSignature(checkNotNull(message.getTxSignature())); // update to the latest peer address of our peer if the message is correct - trade.setTradingPeerNodeAddress(processModel.getTempTradingPeerNodeAddress()); + trade.getTradingPeer().setNodeAddress(processModel.getTempTradingPeerNodeAddress()); trade.setMediationResultState(MediationResultState.RECEIVED_SIG_MSG); diff --git a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutTxPublishedMessage.java b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutTxPublishedMessage.java index 6ae50e3d6d..3a3812767b 100644 --- a/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutTxPublishedMessage.java +++ b/core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutTxPublishedMessage.java @@ -41,7 +41,7 @@ public class ProcessMediatedPayoutTxPublishedMessage extends TradeTask { // checkArgument(message.getPayoutTx() != null); // // // update to the latest peer address of our peer if the message is correct -// trade.setTradingPeerNodeAddress(processModel.getTempTradingPeerNodeAddress()); +// trade.getTradingPeer().setNodeAddress(processModel.getTempTradingPeerNodeAddress()); // // if (trade.getPayoutTx() == null) { // Transaction committedMediatedPayoutTx = WalletService.maybeAddNetworkTxToWallet(message.getPayoutTx(), processModel.getBtcWalletService().getWallet()); diff --git a/core/src/main/java/bisq/core/trade/statistics/TradeStatistics2.java b/core/src/main/java/bisq/core/trade/statistics/TradeStatistics2.java index 8ab7915c44..6ca6f6f17f 100644 --- a/core/src/main/java/bisq/core/trade/statistics/TradeStatistics2.java +++ b/core/src/main/java/bisq/core/trade/statistics/TradeStatistics2.java @@ -81,7 +81,7 @@ public final class TradeStatistics2 implements ProcessOncePersistableNetworkPayl extraDataMap.put(OfferPayload.REFERRAL_ID, referralId); } - NodeAddress arbitratorNodeAddress = trade.getArbitratorNodeAddress(); + NodeAddress arbitratorNodeAddress = trade.getArbitrator().getNodeAddress(); if (arbitratorNodeAddress != null) { // The first 4 chars are sufficient to identify a arbitrator. // For testing with regtest/localhost we use the full address as its localhost and would result in diff --git a/core/src/main/java/bisq/core/trade/statistics/TradeStatistics3.java b/core/src/main/java/bisq/core/trade/statistics/TradeStatistics3.java index 4aca2d6f61..9ed981a797 100644 --- a/core/src/main/java/bisq/core/trade/statistics/TradeStatistics3.java +++ b/core/src/main/java/bisq/core/trade/statistics/TradeStatistics3.java @@ -86,7 +86,7 @@ public final class TradeStatistics3 implements ProcessOncePersistableNetworkPayl extraDataMap.put(OfferPayload.REFERRAL_ID, referralId); } - NodeAddress arbitratorNodeAddress = checkNotNull(trade.getArbitratorNodeAddress()); + NodeAddress arbitratorNodeAddress = checkNotNull(trade.getArbitrator().getNodeAddress()); // The first 4 chars are sufficient to identify an arbitrator. // For testing with regtest/localhost we use the full address as its localhost and would result in diff --git a/desktop/src/main/java/bisq/desktop/main/account/content/altcoinaccounts/AltCoinAccountsDataModel.java b/desktop/src/main/java/bisq/desktop/main/account/content/altcoinaccounts/AltCoinAccountsDataModel.java index c6602ec1d5..adbaf3ea99 100644 --- a/desktop/src/main/java/bisq/desktop/main/account/content/altcoinaccounts/AltCoinAccountsDataModel.java +++ b/desktop/src/main/java/bisq/desktop/main/account/content/altcoinaccounts/AltCoinAccountsDataModel.java @@ -142,7 +142,7 @@ class AltCoinAccountsDataModel extends ActivatableDataModel { .isPresent(); isPaymentAccountUsed = isPaymentAccountUsed || tradeManager.getObservableList().stream() .filter(t -> t.getOffer().getMakerPaymentAccountId().equals(paymentAccount.getId()) || - paymentAccount.getId().equals(t.getTakerPaymentAccountId())) + paymentAccount.getId().equals(t.getTaker().getPaymentAccountId())) .findAny() .isPresent(); if (!isPaymentAccountUsed) diff --git a/desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsDataModel.java b/desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsDataModel.java index 8c2f5c9598..e815f37979 100644 --- a/desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsDataModel.java +++ b/desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsDataModel.java @@ -147,7 +147,7 @@ class FiatAccountsDataModel extends ActivatableDataModel { .anyMatch(o -> o.getOffer().getMakerPaymentAccountId().equals(paymentAccount.getId())); isPaymentAccountUsed = isPaymentAccountUsed || tradeManager.getObservableList().stream() .anyMatch(t -> t.getOffer().getMakerPaymentAccountId().equals(paymentAccount.getId()) || - paymentAccount.getId().equals(t.getTakerPaymentAccountId())); + paymentAccount.getId().equals(t.getTaker().getPaymentAccountId())); if (!isPaymentAccountUsed) user.removePaymentAccount(paymentAccount); return isPaymentAccountUsed; diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/TradeDetailsWindow.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/TradeDetailsWindow.java index c50d2d6a69..b9a10220ec 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/windows/TradeDetailsWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/TradeDetailsWindow.java @@ -208,7 +208,7 @@ public class TradeDetailsWindow extends Overlay { rows++; if (trade.hasFailed()) rows += 2; - if (trade.getTradingPeerNodeAddress() != null) + if (trade.getTradingPeer().getNodeAddress() != null) rows++; if (showXmrProofResult) rows++; @@ -232,16 +232,16 @@ public class TradeDetailsWindow extends Overlay { Res.get("shared.takerTxFee", formatter.formatCoinWithCode(trade.getTxFee().multiply(3))); addConfirmationLabelTextField(gridPane, ++rowIndex, Res.get("tradeDetailsWindow.txFee"), txFee); - NodeAddress arbitratorNodeAddress = trade.getArbitratorNodeAddress(); + NodeAddress arbitratorNodeAddress = trade.getArbitrator().getNodeAddress(); if (arbitratorNodeAddress != null) { addConfirmationLabelTextField(gridPane, ++rowIndex, Res.get("tradeDetailsWindow.agentAddresses"), arbitratorNodeAddress.getFullAddress()); } - if (trade.getTradingPeerNodeAddress() != null) + if (trade.getTradingPeer().getNodeAddress() != null) addConfirmationLabelTextField(gridPane, ++rowIndex, Res.get("tradeDetailsWindow.tradingPeersOnion"), - trade.getTradingPeerNodeAddress().getFullAddress()); + trade.getTradingPeer().getNodeAddress().getFullAddress()); if (showXmrProofResult) { // As the window is already overloaded we replace the tradingPeersPubKeyHash field with the auto-conf state diff --git a/desktop/src/main/java/bisq/desktop/main/portfolio/closedtrades/ClosedTradesView.java b/desktop/src/main/java/bisq/desktop/main/portfolio/closedtrades/ClosedTradesView.java index d36beb5ee3..070be3a55b 100644 --- a/desktop/src/main/java/bisq/desktop/main/portfolio/closedtrades/ClosedTradesView.java +++ b/desktop/src/main/java/bisq/desktop/main/portfolio/closedtrades/ClosedTradesView.java @@ -501,7 +501,7 @@ public class ClosedTradesView extends ActivatableViewAndModel navigation.navigateTo(MainView.class, SupportView.class, MediationClientView.class); disputeManager = mediationManager; - PubKeyRing arbitratorPubKeyRing = trade.getArbitratorPubKeyRing(); + PubKeyRing arbitratorPubKeyRing = trade.getArbitrator().getPubKeyRing(); checkNotNull(arbitratorPubKeyRing, "arbitratorPubKeyRing must not be null"); byte[] depositTxSerialized = null; // depositTx.bitcoinSerialize(); // TODO (woodser): no serialized txs in xmr Dispute dispute = new Dispute(new Date().getTime(), diff --git a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java index 576ab64546..2571ba4ece 100644 --- a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java +++ b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java @@ -849,7 +849,7 @@ public class PendingTradesView extends ActivatableViewAndModel { if (e instanceof Trade) { Trade t = (Trade) e; - return t.getTradingPeerNodeAddress() != null && - trade.getTradingPeerNodeAddress() != null && - t.getTradingPeerNodeAddress().getFullAddress().equals(trade.getTradingPeerNodeAddress().getFullAddress()); + return t.getTradingPeer().getNodeAddress() != null && + trade.getTradingPeer().getNodeAddress() != null && + t.getTradingPeer().getNodeAddress().getFullAddress().equals(trade.getTradingPeer().getNodeAddress().getFullAddress()); } else return false; diff --git a/proto/src/main/proto/pb.proto b/proto/src/main/proto/pb.proto index 430146e56c..82f1b88518 100644 --- a/proto/src/main/proto/pb.proto +++ b/proto/src/main/proto/pb.proto @@ -1725,28 +1725,18 @@ message Trade { bytes contract_hash = 16; NodeAddress arbitrator_node_address = 17; NodeAddress mediator_node_address = 18; - bytes arbitrator_btc_pub_key = 19; - string taker_payment_account_id = 20; string error_message = 21; - PubKeyRing arbitrator_pub_key_ring = 22; - PubKeyRing mediator_pub_key_ring = 23; string counter_currency_tx_id = 24; repeated ChatMessage chat_message = 25; MediationResultState mediation_result_state = 26; int64 lock_time = 27; bytes delayed_payout_tx_bytes = 28; NodeAddress refund_agent_node_address = 29; - PubKeyRing refund_agent_pub_key_ring = 30; - RefundResultState refund_result_state = 31; - int64 last_refresh_request_date = 32 [deprecated = true]; - string counter_currency_extra_data = 33; - string asset_tx_proof_result = 34; // name of AssetTxProofResult enum - string uid = 35; - - NodeAddress maker_node_address = 100; // TODO (woodser): move these into TradingPeer - NodeAddress taker_node_address = 101; - PubKeyRing taker_pub_key_ring = 102; - PubKeyRing maker_pub_key_ring = 103; + RefundResultState refund_result_state = 30; + int64 last_refresh_request_date = 31 [deprecated = true]; + string counter_currency_extra_data = 32; + string asset_tx_proof_result = 33; // name of AssetTxProofResult enum + string uid = 34; } message BuyerAsMakerTrade { @@ -1800,26 +1790,27 @@ message ProcessModel { } message TradingPeer { - string account_id = 1; - string payment_account_id = 2; - string payment_method_id = 3; - bytes payment_account_payload_hash = 4; - bytes encrypted_payment_account_payload = 5; - bytes payment_account_key = 6; - PaymentAccountPayload payment_account_payload = 7; - string payout_address_string = 8; - string contract_as_json = 9; - string contract_signature = 10; - bytes signature = 11; // TODO (woodser): remove unused fields? this was buyer-signed payout tx as bytes - PubKeyRing pub_key_ring = 12; - bytes multi_sig_pub_key = 13; - repeated RawTransactionInput raw_transaction_inputs = 14; - int64 change_output_value = 15; - string change_output_address = 16; - bytes account_age_witness_nonce = 17; - bytes account_age_witness_signature = 18; - int64 current_date = 19; - bytes mediated_payout_tx_signature = 20; + NodeAddress node_address = 1; + PubKeyRing pub_key_ring = 2; + string account_id = 3; + string payment_account_id = 4; + string payment_method_id = 5; + bytes payment_account_payload_hash = 6; + bytes encrypted_payment_account_payload = 7; + bytes payment_account_key = 8; + PaymentAccountPayload payment_account_payload = 9; + string payout_address_string = 10; + string contract_as_json = 11; + string contract_signature = 12; + bytes signature = 13; // TODO (woodser): remove unused fields? this was buyer-signed payout tx as bytes + bytes multi_sig_pub_key = 14; + repeated RawTransactionInput raw_transaction_inputs = 15; + int64 change_output_value = 16; + string change_output_address = 17; + bytes account_age_witness_nonce = 18; + bytes account_age_witness_signature = 19; + int64 current_date = 20; + bytes mediated_payout_tx_signature = 21; string reserve_tx_hash = 1001; string reserve_tx_hex = 1002;