Fix bug with missing broadcast. Add total traffic info

This commit is contained in:
Manfred Karrer 2016-02-16 01:51:51 +01:00
parent fc1ab8a346
commit 92ad387d70
22 changed files with 48 additions and 180 deletions

View file

@ -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);

View file

@ -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
);

View file

@ -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
);

View file

@ -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();

View file

@ -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();

View file

@ -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) {

View file

@ -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) {

View file

@ -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>() {
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<Transaction>() {
@Override
public void onSuccess(Transaction transaction) {
log.debug("BroadcastTx succeeded. Transaction:" + transaction);

View file

@ -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 <http://www.gnu.org/licenses/>.
*/
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);
}
}
}