From 92ad387d70f34e82cbbab889b12e45224f6a1b79 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Tue, 16 Feb 2016 01:51:51 +0100 Subject: [PATCH] Fix bug with missing broadcast. Add total traffic info --- .../main/java/io/bitsquare/trade/Trade.java | 3 +- .../trade/BuyerAsOffererProtocol.java | 2 - .../protocol/trade/BuyerAsTakerProtocol.java | 2 - .../trade/SellerAsOffererProtocol.java | 2 - .../protocol/trade/SellerAsTakerProtocol.java | 2 - .../tasks/buyer/SignAndFinalizePayoutTx.java | 1 + .../ProcessPayoutTxFinalizedMessage.java | 5 +- .../tasks/shared/BroadcastAfterLockTime.java | 23 +++--- .../trade/tasks/shared/CommitPayoutTx.java | 47 ------------ .../bitsquare/gui/main/debug/DebugView.java | 5 -- .../transactions/TransactionsListItem.java | 16 +--- .../main/funds/withdrawal/WithdrawalView.java | 2 +- .../pendingtrades/PendingTradesViewModel.java | 3 +- .../steps/buyer/BuyerStep5View.java | 2 +- .../settings/network/NetworkSettingsView.fxml | 11 ++- .../settings/network/NetworkSettingsView.java | 9 ++- .../network/NetworkStatisticListItem.java | 2 +- .../io/bitsquare/gui/util/BSFormatter.java | 75 ------------------- .../io/bitsquare/p2p/network/Connection.java | 2 +- .../io/bitsquare/p2p/peers/PeerManager.java | 6 +- .../peerexchange/PeerExchangeHandler.java | 4 + .../peerexchange/PeerExchangeManager.java | 4 + 22 files changed, 48 insertions(+), 180 deletions(-) delete mode 100644 core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/shared/CommitPayoutTx.java diff --git a/core/src/main/java/io/bitsquare/trade/Trade.java b/core/src/main/java/io/bitsquare/trade/Trade.java index bcefe391c1..f64123248a 100644 --- a/core/src/main/java/io/bitsquare/trade/Trade.java +++ b/core/src/main/java/io/bitsquare/trade/Trade.java @@ -83,9 +83,8 @@ abstract public class Trade implements Tradable, Model, Serializable { FIAT_PAYMENT_RECEIPT_MSG_SENT(Phase.FIAT_RECEIVED), FIAT_PAYMENT_RECEIPT_MSG_RECEIVED(Phase.FIAT_RECEIVED), - PAYOUT_TX_COMMITTED(Phase.PAYOUT_PAID), PAYOUT_TX_SENT(Phase.PAYOUT_PAID), - PAYOUT_TX_RECEIVED(Phase.PAYOUT_PAID), + PAYOUT_TX_RECEIVED_AND_COMMITTED(Phase.PAYOUT_PAID), PAYOUT_BROAD_CASTED(Phase.PAYOUT_PAID), WITHDRAW_COMPLETED(Phase.WITHDRAWN); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsOffererProtocol.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsOffererProtocol.java index 22a0e5670d..a2b0ce3d91 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsOffererProtocol.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsOffererProtocol.java @@ -31,7 +31,6 @@ import io.bitsquare.trade.protocol.trade.messages.TradeMessage; import io.bitsquare.trade.protocol.trade.tasks.buyer.*; import io.bitsquare.trade.protocol.trade.tasks.offerer.*; import io.bitsquare.trade.protocol.trade.tasks.shared.BroadcastAfterLockTime; -import io.bitsquare.trade.protocol.trade.tasks.shared.CommitPayoutTx; import io.bitsquare.trade.protocol.trade.tasks.shared.InitWaitPeriodForOpenDispute; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -183,7 +182,6 @@ public class BuyerAsOffererProtocol extends TradeProtocol implements BuyerProtoc taskRunner.addTasks( ProcessFinalizePayoutTxRequest.class, SignAndFinalizePayoutTx.class, - CommitPayoutTx.class, SendPayoutTxFinalizedMessage.class, BroadcastAfterLockTime.class ); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsTakerProtocol.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsTakerProtocol.java index 4f655b0bbf..7601848750 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsTakerProtocol.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsTakerProtocol.java @@ -30,7 +30,6 @@ import io.bitsquare.trade.protocol.trade.messages.PublishDepositTxRequest; import io.bitsquare.trade.protocol.trade.messages.TradeMessage; import io.bitsquare.trade.protocol.trade.tasks.buyer.*; import io.bitsquare.trade.protocol.trade.tasks.shared.BroadcastAfterLockTime; -import io.bitsquare.trade.protocol.trade.tasks.shared.CommitPayoutTx; import io.bitsquare.trade.protocol.trade.tasks.taker.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -171,7 +170,6 @@ public class BuyerAsTakerProtocol extends TradeProtocol implements BuyerProtocol taskRunner.addTasks( ProcessFinalizePayoutTxRequest.class, SignAndFinalizePayoutTx.class, - CommitPayoutTx.class, SendPayoutTxFinalizedMessage.class, BroadcastAfterLockTime.class ); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsOffererProtocol.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsOffererProtocol.java index b4932d6bf7..84e3d098ac 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsOffererProtocol.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsOffererProtocol.java @@ -27,7 +27,6 @@ import io.bitsquare.trade.protocol.trade.messages.*; import io.bitsquare.trade.protocol.trade.tasks.offerer.*; import io.bitsquare.trade.protocol.trade.tasks.seller.*; import io.bitsquare.trade.protocol.trade.tasks.shared.BroadcastAfterLockTime; -import io.bitsquare.trade.protocol.trade.tasks.shared.CommitPayoutTx; import io.bitsquare.trade.protocol.trade.tasks.shared.InitWaitPeriodForOpenDispute; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -188,7 +187,6 @@ public class SellerAsOffererProtocol extends TradeProtocol implements SellerProt taskRunner.addTasks( ProcessPayoutTxFinalizedMessage.class, - CommitPayoutTx.class, BroadcastAfterLockTime.class ); taskRunner.run(); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsTakerProtocol.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsTakerProtocol.java index f7ad5d1b2d..61943a060f 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsTakerProtocol.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsTakerProtocol.java @@ -29,7 +29,6 @@ import io.bitsquare.trade.protocol.trade.messages.PublishDepositTxRequest; import io.bitsquare.trade.protocol.trade.messages.TradeMessage; import io.bitsquare.trade.protocol.trade.tasks.seller.*; import io.bitsquare.trade.protocol.trade.tasks.shared.BroadcastAfterLockTime; -import io.bitsquare.trade.protocol.trade.tasks.shared.CommitPayoutTx; import io.bitsquare.trade.protocol.trade.tasks.taker.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -187,7 +186,6 @@ public class SellerAsTakerProtocol extends TradeProtocol implements SellerProtoc taskRunner.addTasks( ProcessPayoutTxFinalizedMessage.class, - CommitPayoutTx.class, BroadcastAfterLockTime.class ); taskRunner.run(); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/buyer/SignAndFinalizePayoutTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/buyer/SignAndFinalizePayoutTx.java index cac4591eb5..61aeb83718 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/buyer/SignAndFinalizePayoutTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/buyer/SignAndFinalizePayoutTx.java @@ -57,6 +57,7 @@ public class SignAndFinalizePayoutTx extends TradeTask { ); trade.setPayoutTx(transaction); + trade.setState(Trade.State.PAYOUT_TX_RECEIVED_AND_COMMITTED); complete(); } catch (Throwable t) { diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/seller/ProcessPayoutTxFinalizedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/seller/ProcessPayoutTxFinalizedMessage.java index ca401bdcff..c314330148 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/seller/ProcessPayoutTxFinalizedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/seller/ProcessPayoutTxFinalizedMessage.java @@ -44,14 +44,15 @@ public class ProcessPayoutTxFinalizedMessage extends TradeTask { checkTradeId(processModel.getId(), message); checkNotNull(message); checkArgument(message.payoutTx != null); - trade.setPayoutTx(processModel.getWalletService().getTransactionFromSerializedTx(message.payoutTx)); + trade.setPayoutTx(processModel.getTradeWalletService().addTransactionToWallet(message.payoutTx)); + // update to the latest peer address of our peer if the message is correct trade.setTradingPeerNodeAddress(processModel.getTempTradingPeerNodeAddress()); removeMailboxMessageAfterProcessing(); - trade.setState(Trade.State.PAYOUT_TX_RECEIVED); + trade.setState(Trade.State.PAYOUT_TX_RECEIVED_AND_COMMITTED); complete(); } catch (Throwable t) { diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/shared/BroadcastAfterLockTime.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/shared/BroadcastAfterLockTime.java index 2bb04cd39e..2ae78c80fc 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/shared/BroadcastAfterLockTime.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/shared/BroadcastAfterLockTime.java @@ -32,6 +32,8 @@ import org.slf4j.LoggerFactory; import java.util.concurrent.ExecutionException; +import static com.google.common.base.Preconditions.checkNotNull; + public class BroadcastAfterLockTime extends TradeTask { private static final Logger log = LoggerFactory.getLogger(BroadcastAfterLockTime.class); @@ -67,19 +69,14 @@ public class BroadcastAfterLockTime extends TradeTask { } private void broadcastTx() { - boolean needsBroadCast = true; - Transaction walletTx = processModel.getTradeWalletService().getWalletTx(trade.getPayoutTx().getHash()); - if (walletTx != null) { - TransactionConfidence.ConfidenceType confidenceType = walletTx.getConfidence().getConfidenceType(); - if (confidenceType.equals(TransactionConfidence.ConfidenceType.PENDING) || - confidenceType.equals(TransactionConfidence.ConfidenceType.BUILDING)) { - needsBroadCast = false; - trade.setState(Trade.State.PAYOUT_BROAD_CASTED); - complete(); - } - } - if (needsBroadCast) { - processModel.getTradeWalletService().broadcastTx(trade.getPayoutTx(), new FutureCallback() { + Transaction payoutTx = trade.getPayoutTx(); + checkNotNull(payoutTx, "payoutTx must not be null at BroadcastAfterLockTime.broadcastTx"); + TransactionConfidence.ConfidenceType confidenceType = payoutTx.getConfidence().getConfidenceType(); + if (confidenceType.equals(TransactionConfidence.ConfidenceType.BUILDING)) { + trade.setState(Trade.State.PAYOUT_BROAD_CASTED); + complete(); + } else { + processModel.getTradeWalletService().broadcastTx(payoutTx, new FutureCallback() { @Override public void onSuccess(Transaction transaction) { log.debug("BroadcastTx succeeded. Transaction:" + transaction); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/shared/CommitPayoutTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/shared/CommitPayoutTx.java deleted file mode 100644 index e98736ee58..0000000000 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/shared/CommitPayoutTx.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of Bitsquare. - * - * Bitsquare is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bitsquare is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bitsquare. If not, see . - */ - -package io.bitsquare.trade.protocol.trade.tasks.shared; - -import io.bitsquare.common.taskrunner.TaskRunner; -import io.bitsquare.trade.Trade; -import io.bitsquare.trade.protocol.trade.tasks.TradeTask; -import org.bitcoinj.core.Transaction; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class CommitPayoutTx extends TradeTask { - private static final Logger log = LoggerFactory.getLogger(CommitPayoutTx.class); - - public CommitPayoutTx(TaskRunner taskHandler, Trade trade) { - super(taskHandler, trade); - } - - @Override - protected void run() { - try { - runInterceptHook(); - Transaction transaction = processModel.getTradeWalletService().addTransactionToWallet(trade.getPayoutTx()); - trade.setPayoutTx(transaction); - trade.setState(Trade.State.PAYOUT_TX_COMMITTED); - - complete(); - } catch (Throwable t) { - failed(t); - } - } -} \ No newline at end of file diff --git a/gui/src/main/java/io/bitsquare/gui/main/debug/DebugView.java b/gui/src/main/java/io/bitsquare/gui/main/debug/DebugView.java index 9a406d9dbb..733e95fe6f 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/debug/DebugView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/debug/DebugView.java @@ -36,7 +36,6 @@ import io.bitsquare.trade.protocol.trade.tasks.buyer.*; import io.bitsquare.trade.protocol.trade.tasks.offerer.*; import io.bitsquare.trade.protocol.trade.tasks.seller.*; import io.bitsquare.trade.protocol.trade.tasks.shared.BroadcastAfterLockTime; -import io.bitsquare.trade.protocol.trade.tasks.shared.CommitPayoutTx; import io.bitsquare.trade.protocol.trade.tasks.shared.InitWaitPeriodForOpenDispute; import io.bitsquare.trade.protocol.trade.tasks.taker.*; import javafx.collections.FXCollections; @@ -97,7 +96,6 @@ public class DebugView extends InitializableView { ProcessFinalizePayoutTxRequest.class, SignAndFinalizePayoutTx.class, - CommitPayoutTx.class, SendPayoutTxFinalizedMessage.class, BroadcastAfterLockTime.class, Boolean.class, /* used as seperator*/ @@ -124,7 +122,6 @@ public class DebugView extends InitializableView { SendFinalizePayoutTxRequest.class, ProcessPayoutTxFinalizedMessage.class, - CommitPayoutTx.class, BroadcastAfterLockTime.class, Boolean.class /* used as seperator*/ ) @@ -150,7 +147,6 @@ public class DebugView extends InitializableView { ProcessFinalizePayoutTxRequest.class, SignAndFinalizePayoutTx.class, - CommitPayoutTx.class, SendPayoutTxFinalizedMessage.class, BroadcastAfterLockTime.class, Boolean.class, /* used as seperator*/ @@ -176,7 +172,6 @@ public class DebugView extends InitializableView { SendFinalizePayoutTxRequest.class, ProcessPayoutTxFinalizedMessage.class, - CommitPayoutTx.class, BroadcastAfterLockTime.class, Boolean.class /* used as seperator*/ ) diff --git a/gui/src/main/java/io/bitsquare/gui/main/funds/transactions/TransactionsListItem.java b/gui/src/main/java/io/bitsquare/gui/main/funds/transactions/TransactionsListItem.java index 2a90ecfbb1..6820982fac 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/funds/transactions/TransactionsListItem.java +++ b/gui/src/main/java/io/bitsquare/gui/main/funds/transactions/TransactionsListItem.java @@ -139,22 +139,10 @@ public class TransactionsListItem { } } } else { - /* Optional addressEntryOptional = walletService.getAddressEntryList().stream() - .filter(e -> e.getAddressString() != null && e.getAddressString().equals(addressString)) - .findAny(); - if (addressEntryOptional.isPresent() && - addressEntryOptional.get().getContext() == AddressEntry.Context.ARBITRATOR) - details = received ? "Received funds" : "Withdrawn from wallet"; - else*/ - if (amountAsCoin.isZero()) { + if (amountAsCoin.isZero()) details = "No refund from dispute"; - } else { - details = received ? "Received funds" : "Withdrawn from wallet"; - } - if (received) - details = amountAsCoin.isPositive() ? "Received funds" : "No refund from dispute"; else - details = amountAsCoin.isNegative() ? "Withdrawn from wallet" : "No refund from dispute"; + details = received ? "Received funds" : "Withdrawn from wallet"; } date.set(formatter.formatDateTime(transaction.getUpdateTime())); diff --git a/gui/src/main/java/io/bitsquare/gui/main/funds/withdrawal/WithdrawalView.java b/gui/src/main/java/io/bitsquare/gui/main/funds/withdrawal/WithdrawalView.java index 7204df03de..8d7c92e4cc 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/funds/withdrawal/WithdrawalView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/funds/withdrawal/WithdrawalView.java @@ -346,7 +346,7 @@ public class WithdrawalView extends ActivatableView { withdrawToTextField.setPromptText("Fill in your destination address"); if (BitsquareApp.DEV_MODE) - withdrawToTextField.setText("mhpVDvMjJT1Gn7da44dkq1HXd3wXdFZpXu"); + withdrawToTextField.setText("mi8k5f9L972VgDaT4LgjAhriC9hHEPL7EW"); } private Optional getTradable(WithdrawalListItem item) { diff --git a/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/PendingTradesViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/PendingTradesViewModel.java index 80e3ea0ed6..56467c13ca 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/PendingTradesViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/PendingTradesViewModel.java @@ -305,8 +305,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel