[bisq-network/bisq] Backup, restore and create a new onion address via GUI (#3044)

Manfred Karrer notifications at github.com
Tue Aug 20 21:54:19 UTC 2019


ManfredKarrer commented on this pull request.



> @@ -97,6 +98,8 @@
     private final P2PService p2PService;
     private final BtcWalletService btcWalletService;
     private final TradeWalletService tradeWalletService;
+    @Inject
+    private TradeManager tradeManager;

With a 3rd component as listener for both open offer and trades it works:
Here is a patch:

```
Index: core/src/main/java/bisq/core/RemoveTradeOrOpenOfferListener.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- core/src/main/java/bisq/core/RemoveTradeOrOpenOfferListener.java	(date 1566337782000)
+++ core/src/main/java/bisq/core/RemoveTradeOrOpenOfferListener.java	(date 1566337782000)
@@ -0,0 +1,88 @@
+/*
+ * This file is part of Bisq.
+ *
+ * Bisq 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.
+ *
+ * Bisq 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 Bisq. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package bisq.core;
+
+import bisq.core.offer.OpenOfferManager;
+import bisq.core.trade.Trade;
+import bisq.core.trade.TradeManager;
+
+import bisq.network.p2p.NodeAddress;
+import bisq.network.p2p.P2PService;
+
+import bisq.common.crypto.PubKeyRing;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import lombok.extern.slf4j.Slf4j;
+
+ at Slf4j
+ at Singleton
+public class RemoveTradeOrOpenOfferListener implements TradeManager.RemoveTradeListener, OpenOfferManager.RemoveOpenOfferListener {
+
+    private final TradeManager tradeManager;
+    private final OpenOfferManager openOfferManager;
+    private final P2PService p2PService;
+    private final PubKeyRing pubKeyRing;
+
+    @Inject
+    public RemoveTradeOrOpenOfferListener(TradeManager tradeManager,
+                                          OpenOfferManager openOfferManager,
+                                          P2PService p2PService,
+                                          PubKeyRing pubKeyRing) {
+        this.tradeManager = tradeManager;
+        this.openOfferManager = openOfferManager;
+        this.p2PService = p2PService;
+        this.pubKeyRing = pubKeyRing;
+
+        tradeManager.addRemoveTradeListener(this);
+        openOfferManager.addRemoveOpenOfferListener(this);
+    }
+
+    @Override
+    public void onRemoveTrade() {
+        reportRequiredHiddenServices();
+    }
+
+
+    @Override
+    public void onRemoveOpenOffer() {
+        reportRequiredHiddenServices();
+
+    }
+
+    private void reportRequiredHiddenServices() {
+        // collect all node addresses (hidden services) we still need for active offers/trades
+        Set<NodeAddress> result = new HashSet<>();
+        result.addAll(openOfferManager.getOpenOffers().stream()
+                .map(openOffer -> openOffer.getOffer().getOfferPayload().getOwnerNodeAddress())
+                .collect(Collectors.toSet()));
+        result.addAll(tradeManager.getTradableList().stream()
+                .map(Trade::getContract)
+                .filter(Objects::nonNull)
+                .map(contract -> contract.getMyNodeAddress(pubKeyRing))
+                .collect(Collectors.toSet()));
+
+        p2PService.reportRequiredHiddenServices(result);
+    }
+}
Index: core/src/main/java/bisq/core/app/BisqSetup.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- core/src/main/java/bisq/core/app/BisqSetup.java	(date 1566334741000)
+++ core/src/main/java/bisq/core/app/BisqSetup.java	(date 1566337886000)
@@ -17,6 +17,7 @@
 
 package bisq.core.app;
 
+import bisq.core.RemoveTradeOrOpenOfferListener;
 import bisq.core.account.witness.AccountAgeWitnessService;
 import bisq.core.alert.Alert;
 import bisq.core.alert.AlertManager;
@@ -154,6 +155,8 @@
     private final AssetService assetService;
     private final TorSetup torSetup;
     private final TradeLimits tradeLimits;
+    // Need to keep a reference for RemoveTradeOrOpenOfferListener
+    private final RemoveTradeOrOpenOfferListener removeTradeOrOpenOfferListener;
     private final BSFormatter formatter;
     @Setter
     @Nullable
@@ -232,6 +235,7 @@
                      AssetService assetService,
                      TorSetup torSetup,
                      TradeLimits tradeLimits,
+                     RemoveTradeOrOpenOfferListener removeTradeOrOpenOfferListener,
                      BSFormatter formatter) {
 
 
@@ -272,6 +276,7 @@
         this.assetService = assetService;
         this.torSetup = torSetup;
         this.tradeLimits = tradeLimits;
+        this.removeTradeOrOpenOfferListener = removeTradeOrOpenOfferListener;
         this.formatter = formatter;
     }
 
Index: core/src/main/java/bisq/core/offer/OpenOfferManager.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- core/src/main/java/bisq/core/offer/OpenOfferManager.java	(date 1566334741000)
+++ core/src/main/java/bisq/core/offer/OpenOfferManager.java	(date 1566337963000)
@@ -78,6 +78,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import lombok.Getter;
+
 import org.jetbrains.annotations.NotNull;
 
 import javax.annotation.Nullable;
@@ -87,6 +89,10 @@
 public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMessageListener, PersistedDataHost {
     private static final Logger log = LoggerFactory.getLogger(OpenOfferManager.class);
 
+    public interface RemoveOpenOfferListener {
+        void onRemoveOpenOffer();
+    }
+
     private static final long RETRY_REPUBLISH_DELAY_SEC = 10;
     private static final long REPUBLISH_AGAIN_AT_STARTUP_DELAY_SEC = 30;
     private static final long REPUBLISH_INTERVAL_MS = TimeUnit.MINUTES.toMillis(40);
@@ -108,7 +114,9 @@
     private final Map<String, OpenOffer> offersToBeEdited = new HashMap<>();
     private boolean stopped;
     private Timer periodicRepublishOffersTimer, periodicRefreshOffersTimer, retryRepublishOffersTimer;
+    @Getter
     private TradableList<OpenOffer> openOffers;
+    private List<RemoveOpenOfferListener> removeOpenOfferListeners = new ArrayList<>();
 
 
     ///////////////////////////////////////////////////////////////////////////////////////////
@@ -479,6 +487,7 @@
         }
     }
 
+    //todo
     private void onRemoved(@NotNull OpenOffer openOffer, ResultHandler resultHandler, Offer offer) {
         offer.setState(Offer.State.REMOVED);
         openOffer.setState(OpenOffer.State.CANCELED);
@@ -487,6 +496,8 @@
         log.info("onRemoved offerId={}", offer.getId());
         btcWalletService.resetAddressEntriesForOpenOffer(offer.getId());
         resultHandler.handleResult();
+
+        removeOpenOfferListeners.forEach(RemoveOpenOfferListener::onRemoveOpenOffer);
     }
 
     // Close openOffer after deposit published
@@ -497,6 +508,8 @@
             offerBookService.removeOffer(openOffer.getOffer().getOfferPayload(),
                     () -> log.trace("Successful removed offer"),
                     log::error);
+
+            removeOpenOfferListeners.forEach(RemoveOpenOfferListener::onRemoveOpenOffer);
         });
     }
 
@@ -792,6 +805,10 @@
         startPeriodicRepublishOffersTimer();
     }
 
+    public void addRemoveOpenOfferListener(RemoveOpenOfferListener removeOpenOfferListener) {
+        removeOpenOfferListeners.add(removeOpenOfferListener);
+    }
+
 
     ///////////////////////////////////////////////////////////////////////////////////////////
     // Private
Index: core/src/main/java/bisq/core/trade/Contract.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- core/src/main/java/bisq/core/trade/Contract.java	(date 1566334741000)
+++ core/src/main/java/bisq/core/trade/Contract.java	(date 1566337963000)
@@ -193,6 +193,13 @@
         return isBuyerMakerAndSellerTaker ? makerPubKeyRing : takerPubKeyRing;
     }
 
+    public NodeAddress getMyNodeAddress(PubKeyRing myPubKeyRing) {
+        if (myPubKeyRing.equals(getBuyerPubKeyRing()))
+            return buyerNodeAddress;
+        else
+            return sellerNodeAddress;
+    }
+
     public PubKeyRing getSellerPubKeyRing() {
         return isBuyerMakerAndSellerTaker ? takerPubKeyRing : makerPubKeyRing;
     }
Index: core/src/main/java/bisq/core/trade/TradeManager.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- core/src/main/java/bisq/core/trade/TradeManager.java	(date 1566334741000)
+++ core/src/main/java/bisq/core/trade/TradeManager.java	(date 1566337963000)
@@ -104,6 +104,11 @@
 public class TradeManager implements PersistedDataHost {
     private static final Logger log = LoggerFactory.getLogger(TradeManager.class);
 
+
+    public interface RemoveTradeListener {
+        void onRemoveTrade();
+    }
+
     private final User user;
     private final KeyRing keyRing;
     private final BtcWalletService btcWalletService;
@@ -130,6 +135,7 @@
     private ErrorMessageHandler takeOfferRequestErrorMessageHandler;
     @Getter
     private final LongProperty numPendingTrades = new SimpleLongProperty();
+    private List<RemoveTradeListener> removeTradeListeners = new ArrayList<>();
 
 
     ///////////////////////////////////////////////////////////////////////////////////////////
@@ -543,6 +549,7 @@
         cleanUpAddressEntries();
     }
 
+    //todo
     private void removeTrade(Trade trade) {
         tradableList.remove(trade);
 
@@ -553,6 +560,8 @@
         result.addAll(getTradableList().stream().map(Trade::getContract).filter(Objects::nonNull).map(contract -> contract.getSellerNodeAddress()).collect(Collectors.toSet()));
 
         p2PService.reportRequiredHiddenServices(result);
+
+        removeTradeListeners.forEach(RemoveTradeListener::onRemoveTrade);
     }
 
 
@@ -660,4 +669,8 @@
             }
         });
     }
+
+    public void addRemoveTradeListener(RemoveTradeListener removeTradeListener) {
+        removeTradeListeners.add(removeTradeListener);
+    }
 }

```



-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/bisq-network/bisq/pull/3044#discussion_r315920461
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bisq.network/pipermail/bisq-github/attachments/20190820/3151e6b2/attachment-0001.html>


More information about the bisq-github mailing list