Savings wallet (WIP)

This commit is contained in:
Manfred Karrer 2016-03-31 19:29:54 +02:00
parent d0e4792094
commit 04845e4382
13 changed files with 280 additions and 127 deletions

View file

@ -221,6 +221,7 @@ public abstract class Trade implements Tradable, Model {
OpenOfferManager openOfferManager,
User user,
KeyRing keyRing,
boolean useSavingsWallet,
Coin fundsNeededForTrade) {
Log.traceCall();
processModel.onAllServicesInitialized(offer,
@ -232,6 +233,7 @@ public abstract class Trade implements Tradable, Model {
arbitratorManager,
user,
keyRing,
useSavingsWallet,
fundsNeededForTrade);
createProtocol();

View file

@ -178,7 +178,7 @@ public class TradeManager {
else {*/
trade.setStorage(tradableListStorage);
trade.updateDepositTxFromWallet(tradeWalletService);
initTrade(trade, trade.getProcessModel().getFundsNeededForTrade());
initTrade(trade, trade.getProcessModel().getUseSavingsWallet(), trade.getProcessModel().getFundsNeededForTrade());
// }
@ -209,7 +209,7 @@ public class TradeManager {
trade = new SellerAsOffererTrade(offer, tradableListStorage);
trade.setStorage(tradableListStorage);
initTrade(trade, trade.getProcessModel().getFundsNeededForTrade());
initTrade(trade, trade.getProcessModel().getUseSavingsWallet(), trade.getProcessModel().getFundsNeededForTrade());
trades.add(trade);
((OffererTrade) trade).handleTakeOfferRequest(message, peerNodeAddress);
} else {
@ -220,7 +220,7 @@ public class TradeManager {
}
}
private void initTrade(Trade trade, Coin fundsNeededForTrade) {
private void initTrade(Trade trade, boolean useSavingsWallet, Coin fundsNeededForTrade) {
trade.init(p2PService,
walletService,
tradeWalletService,
@ -229,6 +229,7 @@ public class TradeManager {
openOfferManager,
user,
keyRing,
useSavingsWallet,
fundsNeededForTrade);
}
@ -260,12 +261,13 @@ public class TradeManager {
Coin fundsNeededForTrade,
Offer offer,
String paymentAccountId,
boolean useSavingsWallet,
TradeResultHandler tradeResultHandler) {
final OfferAvailabilityModel model = getOfferAvailabilityModel(offer);
offer.checkOfferAvailability(model,
() -> {
if (offer.getState() == Offer.State.AVAILABLE)
createTrade(amount, fundsNeededForTrade, offer, paymentAccountId, model, tradeResultHandler);
createTrade(amount, fundsNeededForTrade, offer, paymentAccountId, useSavingsWallet, model, tradeResultHandler);
});
}
@ -273,6 +275,7 @@ public class TradeManager {
Coin fundsNeededForTrade,
Offer offer,
String paymentAccountId,
boolean useSavingsWallet,
OfferAvailabilityModel model,
TradeResultHandler tradeResultHandler) {
Trade trade;
@ -285,7 +288,7 @@ public class TradeManager {
trade.setTakeOfferDateAsBlockHeight(tradeWalletService.getBestChainHeight());
trade.setTakerPaymentAccountId(paymentAccountId);
initTrade(trade, fundsNeededForTrade);
initTrade(trade, useSavingsWallet, fundsNeededForTrade);
trades.add(trade);
((TakerTrade) trade).takeAvailableOffer();

View file

@ -141,8 +141,11 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
log.info("remove all open offers at shutDown");
// we remove own offers from offerbook when we go offline
// Normally we use a delay for broadcasting to the peers, but at shut down we want to get it fast out
openOffers.forEach(openOffer -> offerBookService.removeOfferAtShutDown(openOffer.getOffer()));
closeAllOpenOffers(completeHandler);
}
public void closeAllOpenOffers(@Nullable Runnable completeHandler) {
openOffers.forEach(openOffer -> offerBookService.removeOfferAtShutDown(openOffer.getOffer()));
if (completeHandler != null)
UserThread.runAfter(completeHandler::run, openOffers.size() * 200 + 300, TimeUnit.MILLISECONDS);
}

View file

@ -83,7 +83,7 @@ public class ProcessModel implements Model, Serializable {
@Nullable
private String changeOutputAddress;
private Transaction takeOfferFeeTx;
public boolean useSavingsWallet;
private boolean useSavingsWallet;
private Coin fundsNeededForTrade;
public ProcessModel() {
@ -107,6 +107,7 @@ public class ProcessModel implements Model, Serializable {
ArbitratorManager arbitratorManager,
User user,
KeyRing keyRing,
boolean useSavingsWallet,
Coin fundsNeededForTrade) {
this.offer = offer;
this.tradeManager = tradeManager;
@ -117,6 +118,7 @@ public class ProcessModel implements Model, Serializable {
this.user = user;
this.keyRing = keyRing;
this.p2PService = p2PService;
this.useSavingsWallet = useSavingsWallet;
this.fundsNeededForTrade = fundsNeededForTrade;
}
@ -291,4 +293,8 @@ public class ProcessModel implements Model, Serializable {
public Transaction getTakeOfferFeeTx() {
return takeOfferFeeTx;
}
public boolean getUseSavingsWallet() {
return useSavingsWallet;
}
}

View file

@ -52,7 +52,7 @@ public class CreateTakeOfferFeeTx extends TradeTask {
processModel.getAddressEntry(),
processModel.getUnusedSavingsAddress(),
processModel.getFundsNeededForTrade(),
processModel.useSavingsWallet,
processModel.getUseSavingsWallet(),
FeePolicy.getTakeOfferFee(),
selectedArbitrator.getBtcAddress());