diff --git a/build.gradle b/build.gradle index 0804608043..ec2249366d 100644 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ configure(subprojects) { jmockitVersion = '1.42' joptVersion = '5.0.3' langVersion = '3.4' - libdohjVersion = 'd4ace7bc' + libdohjVersion = '7be803fa' lombokVersion = '1.18.2' mockitoVersion = '2.21.0' powermockVersion = '2.0.0-beta.5' diff --git a/core/src/main/java/bisq/core/app/BisqEnvironment.java b/core/src/main/java/bisq/core/app/BisqEnvironment.java index 508e21d604..d40e3bcc23 100644 --- a/core/src/main/java/bisq/core/app/BisqEnvironment.java +++ b/core/src/main/java/bisq/core/app/BisqEnvironment.java @@ -206,7 +206,7 @@ public class BisqEnvironment extends StandardEnvironment { torRcFile, torRcOptions, externalTorControlPort, externalTorPassword, externalTorCookieFile, socks5ProxyHttpAddress, useAllProvidedNodes, numConnectionForBtc, genesisTxId, genesisBlockHeight, referralId, daoActivated; - protected final boolean externalTorUseSafeCookieAuthentication; + protected final boolean externalTorUseSafeCookieAuthentication, torStreamIsolation; public BisqEnvironment(OptionSet options) { this(new JOptCommandLinePropertySource(BISQ_COMMANDLINE_PROPERTY_SOURCE_NAME, checkNotNull( @@ -297,6 +297,9 @@ public class BisqEnvironment extends StandardEnvironment { externalTorUseSafeCookieAuthentication = commandLineProperties.containsProperty(NetworkOptionKeys.EXTERNAL_TOR_USE_SAFECOOKIE) ? true : false; + torStreamIsolation = commandLineProperties.containsProperty(NetworkOptionKeys.TOR_STREAM_ISOLATION) ? + true : + false; //RpcOptionKeys rpcUser = commandLineProperties.containsProperty(DaoOptionKeys.RPC_USER) ? @@ -472,6 +475,8 @@ public class BisqEnvironment extends StandardEnvironment { setProperty(NetworkOptionKeys.EXTERNAL_TOR_COOKIE_FILE, externalTorCookieFile); if (externalTorUseSafeCookieAuthentication) setProperty(NetworkOptionKeys.EXTERNAL_TOR_USE_SAFECOOKIE, "true"); + if (torStreamIsolation) + setProperty(NetworkOptionKeys.TOR_STREAM_ISOLATION, "true"); setProperty(AppOptionKeys.APP_DATA_DIR_KEY, appDataDir); setProperty(AppOptionKeys.DESKTOP_WITH_HTTP_API, desktopWithHttpApi); diff --git a/core/src/main/java/bisq/core/app/BisqExecutable.java b/core/src/main/java/bisq/core/app/BisqExecutable.java index 5db553dd13..a1fb95faee 100644 --- a/core/src/main/java/bisq/core/app/BisqExecutable.java +++ b/core/src/main/java/bisq/core/app/BisqExecutable.java @@ -98,14 +98,12 @@ public abstract class BisqExecutable implements GracefulShutDownHandler { parser.allowsUnrecognizedOptions(); parser.accepts(AppOptionKeys.USER_DATA_DIR_KEY, - "User data directory") - .withRequiredArg() - .defaultsTo(DEFAULT_USER_DATA_DIR); + format("User data directory (default: %s)", DEFAULT_USER_DATA_DIR)) + .withRequiredArg(); parser.accepts(AppOptionKeys.APP_NAME_KEY, - "Application name") - .withRequiredArg() - .defaultsTo(DEFAULT_APP_NAME); + format("Application name (default: %s)", DEFAULT_APP_NAME)) + .withRequiredArg(); OptionSet options; try { @@ -327,10 +325,9 @@ public abstract class BisqExecutable implements GracefulShutDownHandler { protected void customizeOptionParsing(OptionParser parser) { //CommonOptionKeys parser.accepts(CommonOptionKeys.LOG_LEVEL_KEY, - "Log level") + format("Log level (default: %s)", BisqEnvironment.LOG_LEVEL_DEFAULT)) .withRequiredArg() - .describedAs("OFF|ALL|ERROR|WARN|INFO|DEBUG|TRACE") - .defaultsTo(BisqEnvironment.LOG_LEVEL_DEFAULT); + .describedAs("OFF|ALL|ERROR|WARN|INFO|DEBUG|TRACE"); //NetworkOptionKeys parser.accepts(NetworkOptionKeys.SEED_NODES_KEY, @@ -351,22 +348,19 @@ public abstract class BisqExecutable implements GracefulShutDownHandler { // use a fixed port as arbitrator use that for his ID parser.accepts(NetworkOptionKeys.PORT_KEY, - "Port to listen on") + format("Port to listen on (default: %s)", "9999")) .withRequiredArg() - .ofType(int.class) - .defaultsTo(9999); + .ofType(int.class); parser.accepts(NetworkOptionKeys.USE_LOCALHOST_FOR_P2P, - "Use localhost P2P network for development") + format("Use localhost P2P network for development (default: %s)", "false")) .withRequiredArg() - .ofType(boolean.class) - .defaultsTo(false); + .ofType(boolean.class); parser.accepts(NetworkOptionKeys.MAX_CONNECTIONS, - "Max. connections a peer will try to keep") + format("Max. connections a peer will try to keep (default: %s)", P2PService.MAX_CONNECTIONS_DEFAULT)) .withRequiredArg() - .ofType(int.class) - .defaultsTo(P2PService.MAX_CONNECTIONS_DEFAULT); + .ofType(int.class); parser.accepts(NetworkOptionKeys.SOCKS_5_PROXY_BTC_ADDRESS, "A proxy address to be used for Bitcoin network.") @@ -415,68 +409,62 @@ public abstract class BisqExecutable implements GracefulShutDownHandler { "Use the SafeCookie method when authenticating to the already running Tor service.") .availableIf(NetworkOptionKeys.EXTERNAL_TOR_COOKIE_FILE); + parser.accepts(NetworkOptionKeys.TOR_STREAM_ISOLATION, + "Use stream isolation for Tor [experimental!]."); + //AppOptionKeys parser.accepts(AppOptionKeys.USER_DATA_DIR_KEY, - "User data directory") - .withRequiredArg() - .defaultsTo(BisqEnvironment.DEFAULT_USER_DATA_DIR); + format("User data directory (default: %s)", BisqEnvironment.DEFAULT_USER_DATA_DIR)) + .withRequiredArg(); parser.accepts(AppOptionKeys.APP_NAME_KEY, - "Application name") - .withRequiredArg() - .defaultsTo(BisqEnvironment.DEFAULT_APP_NAME); + format("Application name (default: %s)", BisqEnvironment.DEFAULT_APP_NAME)) + .withRequiredArg(); parser.accepts(AppOptionKeys.MAX_MEMORY, - "Max. permitted memory (used only at headless versions)") - .withRequiredArg() - .defaultsTo("600"); + format("Max. permitted memory (used only at headless versions) (default: %s)", "600")) + .withRequiredArg(); parser.accepts(AppOptionKeys.APP_DATA_DIR_KEY, - "Application data directory") - .withRequiredArg() - .defaultsTo(BisqEnvironment.DEFAULT_APP_DATA_DIR); + format("Application data directory (default: %s)", BisqEnvironment.DEFAULT_APP_DATA_DIR)) + .withRequiredArg(); parser.accepts(AppOptionKeys.IGNORE_DEV_MSG_KEY, - "If set to true all signed network_messages from bisq developers are ignored " + - "(Global alert, Version update alert, Filters for offers, nodes or trading account data)") + format("If set to true all signed network_messages from bisq developers are ignored " + + "(Global alert, Version update alert, Filters for offers, nodes or trading account data) (default: %s)", "false")) .withRequiredArg() - .ofType(boolean.class) - .defaultsTo(false); + .ofType(boolean.class); parser.accepts(AppOptionKeys.DESKTOP_WITH_HTTP_API, - "If set to true Bisq Desktop starts with Http API") + format("If set to true Bisq Desktop starts with Http API (default: %s)", "false")) .withRequiredArg() - .ofType(boolean.class) - .defaultsTo(false); + .ofType(boolean.class); parser.accepts(AppOptionKeys.DESKTOP_WITH_GRPC_API, - "If set to true Bisq Desktop starts with gRPC API") + format("If set to true Bisq Desktop starts with gRPC API (default: %s)", "false")) .withRequiredArg() - .ofType(boolean.class) - .defaultsTo(false); + .ofType(boolean.class); parser.accepts(AppOptionKeys.USE_DEV_PRIVILEGE_KEYS, - "If that is true all the privileged features which requires a private key " + - "to enable it are overridden by a dev key pair (This is for developers only!)") + format("If that is true all the privileged features which requires a private key " + + "to enable it are overridden by a dev key pair (This is for developers only!) (default: %s)", "false")) .withRequiredArg() - .ofType(boolean.class) - .defaultsTo(false); + .ofType(boolean.class); parser.accepts(AppOptionKeys.REFERRAL_ID, "Optional Referral ID (e.g. for API users or pro market makers)") .withRequiredArg(); parser.accepts(CommonOptionKeys.USE_DEV_MODE, - "Enables dev mode which is used for convenience for developer testing") + format("Enables dev mode which is used for convenience for developer testing (default: %s)", "false")) .withRequiredArg() - .ofType(boolean.class) - .defaultsTo(false); + .ofType(boolean.class); parser.accepts(AppOptionKeys.DUMP_STATISTICS, - "If set to true the trade statistics are stored as json file in the data dir.") + format("If set to true the trade statistics are stored as json file in the data dir. (default: %s)", + "false")) .withRequiredArg() - .ofType(boolean.class) - .defaultsTo(false); + .ofType(boolean.class); parser.accepts(AppOptionKeys.PROVIDERS, "Custom providers (comma separated)") @@ -490,10 +478,10 @@ public abstract class BisqExecutable implements GracefulShutDownHandler { .ofType(String.class) .describedAs(format("%s|%s|%s", BTC_MAINNET, BTC_TESTNET, BTC_REGTEST)); - parser.accepts(BtcOptionKeys.REG_TEST_HOST) + parser.accepts(BtcOptionKeys.REG_TEST_HOST, + format("(default: %s)", RegTestHost.DEFAULT)) .withRequiredArg() - .ofType(RegTestHost.class) - .defaultsTo(RegTestHost.DEFAULT); + .ofType(RegTestHost.class); parser.accepts(BtcOptionKeys.BTC_NODES, "Custom nodes used for BitcoinJ as comma separated IP addresses.") @@ -505,11 +493,10 @@ public abstract class BisqExecutable implements GracefulShutDownHandler { .withRequiredArg(); parser.accepts(BtcOptionKeys.SOCKS5_DISCOVER_MODE, - "Specify discovery mode for Bitcoin nodes. One or more of: [ADDR, DNS, ONION, ALL]" + - " (comma separated, they get OR'd together).") + format("Specify discovery mode for Bitcoin nodes. One or more of: [ADDR, DNS, ONION, ALL]" + + " (comma separated, they get OR'd together). (default: %s)", "ALL")) .withRequiredArg() - .describedAs("mode[,...]") - .defaultsTo("ALL"); + .describedAs("mode[,...]"); parser.accepts(BtcOptionKeys.USE_ALL_PROVIDED_NODES, "Set to true if connection of bitcoin nodes should include clear net nodes") @@ -520,9 +507,8 @@ public abstract class BisqExecutable implements GracefulShutDownHandler { .withRequiredArg(); parser.accepts(BtcOptionKeys.NUM_CONNECTIONS_FOR_BTC, - "Number of connections to the Bitcoin network") - .withRequiredArg() - .defaultsTo("9"); + format("Number of connections to the Bitcoin network (default: %s)", "9")) + .withRequiredArg(); //RpcOptionKeys parser.accepts(DaoOptionKeys.RPC_USER, @@ -542,11 +528,10 @@ public abstract class BisqExecutable implements GracefulShutDownHandler { .withRequiredArg(); parser.accepts(DaoOptionKeys.DUMP_BLOCKCHAIN_DATA, - "If set to true the blockchain data from RPC requests to Bitcoin Core are " + - "stored as json file in the data dir.") + format("If set to true the blockchain data from RPC requests to Bitcoin Core are " + + "stored as json file in the data dir. (default: %s)", "false")) .withRequiredArg() - .ofType(boolean.class) - .defaultsTo(false); + .ofType(boolean.class); parser.accepts(DaoOptionKeys.FULL_DAO_NODE, "If set to true the node requests the blockchain data via RPC requests " + @@ -559,15 +544,13 @@ public abstract class BisqExecutable implements GracefulShutDownHandler { .withRequiredArg(); parser.accepts(DaoOptionKeys.GENESIS_BLOCK_HEIGHT, - "Genesis transaction block height when not using the hard coded one") - .withRequiredArg() - .defaultsTo("-1"); + format("Genesis transaction block height when not using the hard coded one (default: %s)", "-1")) + .withRequiredArg(); parser.accepts(DaoOptionKeys.DAO_ACTIVATED, - "Developer flag. If true it enables dao phase 2 features.") + format("Developer flag. If true it enables dao phase 2 features. (default: %s)", "false")) .withRequiredArg() - .ofType(boolean.class) - .defaultsTo(false); + .ofType(boolean.class); } public static BisqEnvironment getBisqEnvironment(OptionSet options) { diff --git a/core/src/main/java/bisq/core/app/WalletAppSetup.java b/core/src/main/java/bisq/core/app/WalletAppSetup.java index 59e5bca1da..49237f9095 100644 --- a/core/src/main/java/bisq/core/app/WalletAppSetup.java +++ b/core/src/main/java/bisq/core/app/WalletAppSetup.java @@ -23,6 +23,9 @@ import bisq.core.locale.Res; import bisq.core.user.Preferences; import bisq.core.util.BSFormatter; +import org.libdohj.Version; + +import org.bitcoinj.core.VersionMessage; import org.bitcoinj.store.BlockStoreException; import org.bitcoinj.store.ChainFileLockedException; @@ -86,10 +89,9 @@ public class WalletAppSetup { @Nullable Runnable showFirstPopupIfResyncSPVRequestedHandler, Runnable walletPasswordHandler, Runnable downloadCompleteHandler, - Runnable walletInitializedHandler - - ) { - log.info("init"); + Runnable walletInitializedHandler) { + log.info("Initialize WalletAppSetup with BitcoinJ version {} and LibDohJ version {} with hash of BitcoinJ commit {}", + VersionMessage.BITCOINJ_VERSION, Version.VERSION, Version.BITCOINJ_VERSION); ObjectProperty walletServiceException = new SimpleObjectProperty<>(); btcInfoBinding = EasyBind.combine(walletsSetup.downloadPercentageProperty(), @@ -100,7 +102,7 @@ public class WalletAppSetup { if (exception == null) { double percentage = (double) downloadPercentage; int peers = (int) numPeers; - getBtcSyncProgress().set(percentage); + btcSyncProgress.set(percentage); if (percentage == 1) { result = Res.get("mainView.footer.btcInfo", peers, diff --git a/core/src/main/java/bisq/core/btc/setup/WalletConfig.java b/core/src/main/java/bisq/core/btc/setup/WalletConfig.java index 6f160e8846..2b8eb1b531 100644 --- a/core/src/main/java/bisq/core/btc/setup/WalletConfig.java +++ b/core/src/main/java/bisq/core/btc/setup/WalletConfig.java @@ -201,9 +201,9 @@ public class WalletConfig extends AbstractIdleService { // in the checkpoints file and then download the rest from the network. It makes things much faster. // Checkpoint files are made using the BuildCheckpoints tool and usually we have to download the // last months worth or more (takes a few seconds). - path = "/wallet/checkpoints"; + path = "/wallet/checkpoints.txt"; } else if (params.equals(TestNet3Params.get())) { - path = "/wallet/checkpoints.testnet"; + path = "/wallet/checkpoints.testnet.txt"; } if (path != null) { try { diff --git a/core/src/main/java/bisq/core/offer/Offer.java b/core/src/main/java/bisq/core/offer/Offer.java index 249080fcf7..92b3bf76d6 100644 --- a/core/src/main/java/bisq/core/offer/Offer.java +++ b/core/src/main/java/bisq/core/offer/Offer.java @@ -70,11 +70,11 @@ import static com.google.common.base.Preconditions.checkNotNull; @Slf4j public class Offer implements NetworkPayload, PersistablePayload { - // We allow max. 2 % difference between own offerPayload price calculation and takers calculation. + // We allow max. 0.5 % difference between own offerPayload price calculation and takers calculation. // Market price might be different at maker's and takers side so we need a bit of tolerance. // The tolerance will get smaller once we have multiple price feeds avoiding fast price fluctuations // from one provider. - final static double PRICE_TOLERANCE = 0.02; + final static double PRICE_TOLERANCE = 0.005; /////////////////////////////////////////////////////////////////////////////////////////// // Enums @@ -207,15 +207,20 @@ public class Offer implements NetworkPayload, PersistablePayload { checkArgument(takersTradePrice > 0, "takersTradePrice must be positive"); - double factor = (double) takersTradePrice / (double) offerPrice.getValue(); + double relation = (double) takersTradePrice / (double) offerPrice.getValue(); // We allow max. 2 % difference between own offerPayload price calculation and takers calculation. // Market price might be different at maker's and takers side so we need a bit of tolerance. // The tolerance will get smaller once we have multiple price feeds avoiding fast price fluctuations // from one provider. - if (Math.abs(1 - factor) > PRICE_TOLERANCE) { + + double deviation = Math.abs(1 - relation); + log.info("Price at take-offer time: id={}, currency={}, takersPrice={}, makersPrice={}, deviation={}", + getShortId(), getCurrencyCode(), takersTradePrice, offerPrice.getValue(), + deviation * 100 + "%"); + if (deviation > PRICE_TOLERANCE) { String msg = "Taker's trade price is too far away from our calculated price based on the market price.\n" + - "tradePrice=" + tradePrice.getValue() + "\n" + - "offerPrice=" + offerPrice.getValue(); + "takersPrice=" + tradePrice.getValue() + "\n" + + "makersPrice=" + offerPrice.getValue(); log.warn(msg); throw new TradePriceOutOfToleranceException(msg); } diff --git a/core/src/main/resources/wallet/checkpoints b/core/src/main/resources/wallet/checkpoints deleted file mode 100644 index aa213f3dee..0000000000 Binary files a/core/src/main/resources/wallet/checkpoints and /dev/null differ diff --git a/core/src/main/resources/wallet/checkpoints.testnet b/core/src/main/resources/wallet/checkpoints.testnet deleted file mode 100644 index 4b8df95e76..0000000000 Binary files a/core/src/main/resources/wallet/checkpoints.testnet and /dev/null differ diff --git a/core/src/main/resources/wallet/checkpoints.testnet.txt b/core/src/main/resources/wallet/checkpoints.testnet.txt new file mode 100644 index 0000000000..088a01cf9f --- /dev/null +++ b/core/src/main/resources/wallet/checkpoints.testnet.txt @@ -0,0 +1,718 @@ +TXT CHECKPOINTS 1 +0 +715 +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 diff --git a/core/src/main/resources/wallet/checkpoints.txt b/core/src/main/resources/wallet/checkpoints.txt new file mode 100644 index 0000000000..9939ae7cd9 --- /dev/null +++ b/core/src/main/resources/wallet/checkpoints.txt @@ -0,0 +1,276 @@ +TXT CHECKPOINTS 1 +0 +273 +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 diff --git a/desktop/src/main/java/bisq/desktop/main/account/content/notifications/ManageMarketAlertsWindow.java b/desktop/src/main/java/bisq/desktop/main/account/content/notifications/ManageMarketAlertsWindow.java index 8771b487cd..71cd1bfe58 100644 --- a/desktop/src/main/java/bisq/desktop/main/account/content/notifications/ManageMarketAlertsWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/account/content/notifications/ManageMarketAlertsWindow.java @@ -70,7 +70,7 @@ public class ManageMarketAlertsWindow extends Overlay createGridPane(); addHeadLine(); addContent(); - addCloseButton(); + addButtons(); applyStyles(); display(); } diff --git a/desktop/src/main/java/bisq/desktop/main/account/content/password/PasswordView.java b/desktop/src/main/java/bisq/desktop/main/account/content/password/PasswordView.java index 6a2389c2e8..6497c5620d 100644 --- a/desktop/src/main/java/bisq/desktop/main/account/content/password/PasswordView.java +++ b/desktop/src/main/java/bisq/desktop/main/account/content/password/PasswordView.java @@ -116,13 +116,14 @@ public class PasswordView extends ActivatableView { pwButton.setOnAction(e -> { if (!walletsManager.areWalletsEncrypted()) { new Popup<>().backgroundInfo(Res.get("password.backupReminder")) - .closeButtonText(Res.get("password.backupWasDone")) - .onClose(() -> onApplyPassword(busyAnimation, deriveStatusLabel)) + .secondaryActionButtonText(Res.get("password.backupWasDone")) + .onSecondaryAction(() -> onApplyPassword(busyAnimation, deriveStatusLabel)) .actionButtonTextWithGoTo("navigation.account.walletSeed") .onAction(() -> { navigation.setReturnPath(navigation.getCurrentPath()); navigation.navigateTo(MainView.class, AccountView.class, SeedWordsView.class); }) + .width(800) .show(); } else { onApplyPassword(busyAnimation, deriveStatusLabel); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RoleDetailsWindow.java b/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RoleDetailsWindow.java index 85e48b11ce..f8fd2c5596 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RoleDetailsWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RoleDetailsWindow.java @@ -56,7 +56,7 @@ class RoleDetailsWindow extends Overlay { createGridPane(); addHeadLine(); addContent(); - addCloseButton(); + addButtons(); applyStyles(); display(); } diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/proofofburn/ProofOfBurnSignatureWindow.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/proofofburn/ProofOfBurnSignatureWindow.java index f829c19060..5ef0ef9c01 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/proofofburn/ProofOfBurnSignatureWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/proofofburn/ProofOfBurnSignatureWindow.java @@ -63,7 +63,7 @@ public class ProofOfBurnSignatureWindow extends Overlay tuple = FormBuilder.addTopLabelHyperlinkWithIcon(gridPane, gridRow, @@ -222,15 +224,17 @@ public class ProposalDisplay { checkNotNull(requestedBsqTextField, "requestedBsqTextField must not be null"); inputControls.add(requestedBsqTextField); - BsqValidator bsqValidator = new BsqValidator(bsqFormatter); - if (proposalType == ProposalType.COMPENSATION_REQUEST) { - bsqValidator.setMinValue(daoFacade.getMinCompensationRequestAmount()); - bsqValidator.setMaxValue(daoFacade.getMaxCompensationRequestAmount()); - } else if (proposalType == ProposalType.REIMBURSEMENT_REQUEST) { - bsqValidator.setMinValue(daoFacade.getMinReimbursementRequestAmount()); - bsqValidator.setMaxValue(daoFacade.getMaxReimbursementRequestAmount()); + if (isMakeProposalScreen) { + BsqValidator bsqValidator = new BsqValidator(bsqFormatter); + if (proposalType == ProposalType.COMPENSATION_REQUEST) { + bsqValidator.setMinValue(daoFacade.getMinCompensationRequestAmount()); + bsqValidator.setMaxValue(daoFacade.getMaxCompensationRequestAmount()); + } else if (proposalType == ProposalType.REIMBURSEMENT_REQUEST) { + bsqValidator.setMinValue(daoFacade.getMinReimbursementRequestAmount()); + bsqValidator.setMaxValue(daoFacade.getMaxReimbursementRequestAmount()); + } + requestedBsqTextField.setValidator(bsqValidator); } - requestedBsqTextField.setValidator(bsqValidator); break; case CHANGE_PARAM: checkNotNull(gridPane, "gridPane must not be null"); @@ -264,7 +268,7 @@ public class ProposalDisplay { paramValueTextField.clear(); String currentValue = bsqFormatter.formatParamValue(newValue, daoFacade.getParamValue(newValue)); paramValueTextField.setPromptText(Res.get("dao.param.currentValue", currentValue)); - if (changeParamValidator != null) { + if (changeParamValidator != null && isMakeProposalScreen) { ChangeParamInputValidator validator = new ChangeParamInputValidator(newValue, changeParamValidator); paramValueTextField.setValidator(validator); } diff --git a/desktop/src/main/java/bisq/desktop/main/market/trades/TradesChartsView.java b/desktop/src/main/java/bisq/desktop/main/market/trades/TradesChartsView.java index f1bb2748d7..6b60582d25 100644 --- a/desktop/src/main/java/bisq/desktop/main/market/trades/TradesChartsView.java +++ b/desktop/src/main/java/bisq/desktop/main/market/trades/TradesChartsView.java @@ -449,10 +449,10 @@ public class TradesChartsView extends ActivatableViewAndModel> currencyComboBoxTuple = addTopLabelComboBox(Res.get("shared.currency"), Res.get("list.currency.select")); currencyComboBox = currencyComboBoxTuple.third; - currencyComboBox.setButtonCell(GUIUtil.getCurrencyListItemButtonCell(Res.get("shared.oneOffer"), - Res.get("shared.multipleOffers"), model.preferences)); - currencyComboBox.setCellFactory(GUIUtil.getCurrencyListItemCellFactory(Res.get("shared.oneOffer"), - Res.get("shared.multipleOffers"), model.preferences)); + currencyComboBox.setButtonCell(GUIUtil.getCurrencyListItemButtonCell(Res.get("shared.trade"), + Res.get("shared.trades"), model.preferences)); + currencyComboBox.setCellFactory(GUIUtil.getCurrencyListItemCellFactory(Res.get("shared.trade"), + Res.get("shared.trades"), model.preferences)); currencyComboBox.setPromptText(Res.get("list.currency.select")); diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/Overlay.java b/desktop/src/main/java/bisq/desktop/main/overlays/Overlay.java index 614bec4f29..68e1464786 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/Overlay.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/Overlay.java @@ -77,6 +77,7 @@ import java.nio.file.Paths; import java.io.File; import java.io.IOException; +import java.util.Objects; import java.util.Optional; import java.util.concurrent.TimeUnit; @@ -132,35 +133,36 @@ public abstract class Overlay { } protected final static double DEFAULT_WIDTH = 668; - protected int rowIndex = -1; - protected String headLine; - protected Label headlineIcon; - protected String message; - protected String closeButtonText; - protected String actionButtonText; - protected double width = DEFAULT_WIDTH; - protected Pane owner; + + protected Stage stage; protected GridPane gridPane; + protected Pane owner; + + protected int rowIndex = -1; + protected double width = DEFAULT_WIDTH; + protected double buttonDistance = 20; + + protected boolean showReportErrorButtons; + private boolean showBusyAnimation; + protected boolean hideCloseButton; + protected boolean isDisplayed; + protected boolean useAnimation = true; + + protected Label headlineIcon, headLineLabel, messageLabel; + protected String headLine, message, closeButtonText, actionButtonText, + secondaryActionButtonText, dontShowAgainId, dontShowAgainText, + truncatedMessage; + private String headlineStyle; + protected Button actionButton, secondaryActionButton; protected AutoTooltipButton closeButton; + protected Optional closeHandlerOptional = Optional.empty(); protected Optional actionHandlerOptional = Optional.empty(); - protected Stage stage; - protected boolean showReportErrorButtons; - protected Label messageLabel; - protected String truncatedMessage; - private boolean showBusyAnimation; - protected Button actionButton; - protected Label headLineLabel; - protected String dontShowAgainId; - protected String dontShowAgainText; + protected Optional secondaryActionHandlerOptional = Optional.empty(); protected ChangeListener positionListener; + protected Timer centerTime; - protected double buttonDistance = 20; protected Type type = Type.Undefined; - protected boolean hideCloseButton; - protected boolean useAnimation = true; - private String headlineStyle; - protected boolean isDisplayed; /////////////////////////////////////////////////////////////////////////////////////////// @@ -182,7 +184,7 @@ public abstract class Overlay { if (showReportErrorButtons) addReportErrorButtons(); - addCloseButton(); + addButtons(); addDontShowAgainCheckBox(); applyStyles(); onShow(); @@ -245,6 +247,12 @@ public abstract class Overlay { return (T) this; } + public T onSecondaryAction(Runnable secondaryActionHandlerOptional) { + this.secondaryActionHandlerOptional = Optional.of(secondaryActionHandlerOptional); + //noinspection unchecked + return (T) this; + } + public T headLine(String headLine) { this.headLine = headLine; //noinspection unchecked @@ -382,6 +390,12 @@ public abstract class Overlay { return (T) this; } + public T secondaryActionButtonTextWithGoTo(String target) { + this.secondaryActionButtonText = Res.get("shared.goTo", Res.get(target)); + //noinspection unchecked + return (T) this; + } + public T closeButtonTextWithGoTo(String target) { this.closeButtonText = Res.get("shared.goTo", Res.get(target)); //noinspection unchecked @@ -394,9 +408,15 @@ public abstract class Overlay { return (T) this; } + public T secondaryActionButtonText(String secondaryActionButtonText) { + this.secondaryActionButtonText = secondaryActionButtonText; + //noinspection unchecked + return (T) this; + } + public T useShutDownButton() { this.actionButtonText = Res.get("shared.shutDown"); - this.actionHandlerOptional = Optional.of(BisqApp.getShutDownHandler()::run); + this.actionHandlerOptional = Optional.of(BisqApp.getShutDownHandler()); //noinspection unchecked return (T) this; } @@ -831,7 +851,7 @@ public abstract class Overlay { } } - protected void addCloseButton() { + protected void addButtons() { if (!hideCloseButton) { closeButton = new AutoTooltipButton(closeButtonText == null ? Res.get("shared.close") : closeButtonText); closeButton.getStyleClass().add("compact-button"); @@ -851,10 +871,22 @@ public abstract class Overlay { Pane spacer = new Pane(); HBox hBox = new HBox(); hBox.setSpacing(10); + + hBox.getChildren().addAll(spacer, actionButton); + + if (secondaryActionButtonText != null && secondaryActionHandlerOptional.isPresent()) { + secondaryActionButton = new AutoTooltipButton(secondaryActionButtonText); + secondaryActionButton.setOnAction(event -> { + hide(); + secondaryActionHandlerOptional.ifPresent(Runnable::run); + }); + + hBox.getChildren().add(secondaryActionButton); + } + if (!hideCloseButton) - hBox.getChildren().addAll(spacer, actionButton, closeButton); - else - hBox.getChildren().addAll(spacer, actionButton); + hBox.getChildren().add(closeButton); + HBox.setHgrow(spacer, Priority.ALWAYS); spacer.setMaxWidth(Double.MAX_VALUE); @@ -882,10 +914,7 @@ public abstract class Overlay { protected void setTruncatedMessage() { if (message != null && message.length() > 1800) truncatedMessage = StringUtils.abbreviate(message, 1800); - else if (message != null) - truncatedMessage = message; - else - truncatedMessage = ""; + else truncatedMessage = Objects.requireNonNullElse(message, ""); } protected double getDuration(double duration) { diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/editor/PeerInfoWithTagEditor.java b/desktop/src/main/java/bisq/desktop/main/overlays/editor/PeerInfoWithTagEditor.java index 9d107614ab..229887f2db 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/editor/PeerInfoWithTagEditor.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/editor/PeerInfoWithTagEditor.java @@ -136,7 +136,7 @@ public class PeerInfoWithTagEditor extends Overlay { createGridPane(); addHeadLine(); addContent(); - addCloseButton(); + addButtons(); applyStyles(); onShow(); } @@ -290,9 +290,9 @@ public class PeerInfoWithTagEditor extends Overlay { } @Override - protected void addCloseButton() { + protected void addButtons() { buttonDistance = 10; - super.addCloseButton(); + super.addButtons(); actionButton.setOnAction(event -> save()); } diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/notifications/Notification.java b/desktop/src/main/java/bisq/desktop/main/overlays/notifications/Notification.java index 3b77d1fefe..b26eedd385 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/notifications/Notification.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/notifications/Notification.java @@ -177,9 +177,9 @@ public class Notification extends Overlay { } @Override - protected void addCloseButton() { + protected void addButtons() { buttonDistance = 10; - super.addCloseButton(); + super.addButtons(); } @Override diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/FeeOptionWindow.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/FeeOptionWindow.java index 3e937cc1a1..58db440533 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/windows/FeeOptionWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/FeeOptionWindow.java @@ -94,7 +94,7 @@ public class FeeOptionWindow extends Overlay { createGridPane(); addHeadLine(); addContent(); - addCloseButton(); + addButtons(); addDontShowAgainCheckBox(); applyStyles(); display(); diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/ManualPayoutTxWindow.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/ManualPayoutTxWindow.java index eea07eab31..b6ac7e84ed 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/windows/ManualPayoutTxWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/ManualPayoutTxWindow.java @@ -77,7 +77,7 @@ public class ManualPayoutTxWindow extends Overlay { createGridPane(); addHeadLine(); addContent(); - addCloseButton(); + addButtons(); applyStyles(); display(); } @@ -201,8 +201,8 @@ public class ManualPayoutTxWindow extends Overlay { } @Override - protected void addCloseButton() { - super.addCloseButton(); + protected void addButtons() { + super.addButtons(); actionButton.setOnAction(event -> actionHandlerOptional.ifPresent(Runnable::run)); } } diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/QRCodeWindow.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/QRCodeWindow.java index 40fa8b765d..3ca1bc4ee9 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/windows/QRCodeWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/QRCodeWindow.java @@ -85,7 +85,7 @@ public class QRCodeWindow extends Overlay { GridPane.setColumnSpan(infoLabel, 2); gridPane.getChildren().add(infoLabel); - addCloseButton(); + addButtons(); applyStyles(); display(); } diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/SelectBaseCurrencyWindow.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/SelectBaseCurrencyWindow.java index edb8246722..3abbc11370 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/windows/SelectBaseCurrencyWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/SelectBaseCurrencyWindow.java @@ -69,7 +69,7 @@ public class SelectBaseCurrencyWindow extends Overlay createGridPane(); addHeadLine(); addContent(); - addCloseButton(); + addButtons(); applyStyles(); display(); } diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/SelectDepositTxWindow.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/SelectDepositTxWindow.java index 6777184b48..e40cb72f59 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/windows/SelectDepositTxWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/SelectDepositTxWindow.java @@ -70,7 +70,7 @@ public class SelectDepositTxWindow extends Overlay { createGridPane(); addHeadLine(); addContent(); - addCloseButton(); + addButtons(); applyStyles(); display(); } diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/ShowWalletDataWindow.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/ShowWalletDataWindow.java index a2a327715a..9203909506 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/windows/ShowWalletDataWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/ShowWalletDataWindow.java @@ -58,7 +58,7 @@ public class ShowWalletDataWindow extends Overlay { createGridPane(); addHeadLine(); addContent(); - addCloseButton(); + addButtons(); applyStyles(); display(); } diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/TorNetworkSettingsWindow.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/TorNetworkSettingsWindow.java index ba74b99410..6fb693d22c 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/windows/TorNetworkSettingsWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/TorNetworkSettingsWindow.java @@ -132,13 +132,13 @@ public class TorNetworkSettingsWindow extends Overlay gridPane.getColumnConstraints().get(0).setHalignment(HPos.LEFT); addContent(); - addCloseButton(); + addButtons(); applyStyles(); display(); } } - protected void addCloseButton() { + protected void addButtons() { closeButton = new AutoTooltipButton(closeButtonText == null ? Res.get("shared.close") : closeButtonText); closeButton.setOnAction(event -> doClose()); diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/UnlockArbitrationRegistrationWindow.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/UnlockArbitrationRegistrationWindow.java index a961d1f5a8..e4688f2d3e 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/windows/UnlockArbitrationRegistrationWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/UnlockArbitrationRegistrationWindow.java @@ -125,7 +125,8 @@ public class UnlockArbitrationRegistrationWindow extends Overlay buttonButtonTuple2 = add2ButtonsAfterGroup(gridPane, ++rowIndex, Res.get("shared.unlock"), Res.get("shared.close")); unlockButton = buttonButtonTuple2.first; diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/WalletPasswordWindow.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/WalletPasswordWindow.java index 9e61bc8c59..854a7c6929 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/windows/WalletPasswordWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/WalletPasswordWindow.java @@ -196,7 +196,8 @@ public class WalletPasswordWindow extends Overlay { passwordTextField.textProperty().addListener(changeListener); } - private void addButtons() { + @Override + protected void addButtons() { BusyAnimation busyAnimation = new BusyAnimation(false); Label deriveStatusLabel = new AutoTooltipLabel(); diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/WebCamWindow.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/WebCamWindow.java index 5191a6ea45..c39115465b 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/windows/WebCamWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/WebCamWindow.java @@ -59,7 +59,7 @@ public class WebCamWindow extends Overlay { createGridPane(); addHeadLine(); addContent(); - addCloseButton(); + addButtons(); applyStyles(); display(); } @@ -78,8 +78,8 @@ public class WebCamWindow extends Overlay { } @Override - protected void addCloseButton() { - super.addCloseButton(); + protected void addButtons() { + super.addButtons(); closeButton.setText(Res.get("shared.cancel")); diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/downloadupdate/DisplayUpdateDownloadWindow.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/downloadupdate/DisplayUpdateDownloadWindow.java index 5058f870f1..4646e39969 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/windows/downloadupdate/DisplayUpdateDownloadWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/downloadupdate/DisplayUpdateDownloadWindow.java @@ -94,7 +94,7 @@ public class DisplayUpdateDownloadWindow extends Overlay doClose()); actionButton = new AutoTooltipButton(Res.get("displayUpdateDownloadWindow.button.downloadLater")); diff --git a/gradle/witness/gradle-witness.gradle b/gradle/witness/gradle-witness.gradle index 6c58e78569..d783af5cb0 100644 --- a/gradle/witness/gradle-witness.gradle +++ b/gradle/witness/gradle-witness.gradle @@ -1,15 +1,15 @@ -// To update the `dependencyVerification` block below: +// To update the `dependencyVerification` block below (we don't add local bisq modules and org.openjfx libraries as +// those cause problems): // // 1. Remove the block entirely // 2. Replace the block with the following command: // -// ./gradlew -q calculateChecksums | grep -v network.bisq >> gradle/witness/gradle-witness.gradle +// ./gradlew -q calculateChecksums | grep -v 'bisq:\|org.openjfx:' >> gradle/witness/gradle-witness.gradle // // 3. Run `git diff` to verify that expected hashes have changed // 4. Commit the changes // // See https://github.com/signalapp/gradle-witness#using-witness for further details. - dependencyVerification { verify = [ 'org.controlsfx:controlsfx:b98f1c9507c05600f80323674b33d15674926c71b0116f70085b62bdacf1e573', @@ -20,11 +20,14 @@ dependencyVerification { 'de.jensd:fontawesomefx-commons:5539bb3335ecb822dbf928546f57766eeb9f1516cc1417a064b5709629612149', 'com.googlecode.jcsv:jcsv:73ca7d715e90c8d2c2635cc284543b038245a34f70790660ed590e157b8714a2', 'com.github.sarxos:webcam-capture:d960b7ea8ec3ddf2df0725ef214c3fccc9699ea7772df37f544e1f8e4fd665f6', + 'com.jfoenix:jfoenix:4739e37a05e67c3bc9d5b391a1b93717b5a48fa872992616b0964d3f827f8fe6', 'com.github.JesusMcCloud.netlayer:tor.native:f1bf0096f9eb6020645a65d91aa530d15aef97e69cc5a79d7b2405421f74700a', 'com.github.JesusMcCloud.netlayer:tor.external:cfba681398c191a1906d6d023a3be28a8fa9b1f4eee52e966daf7b1ae630414f', 'org.apache.httpcomponents:httpclient:db3d1b6c2d6a5e5ad47577ad61854e2f0e0936199b8e05eb541ed52349263135', 'net.sf.jopt-simple:jopt-simple:6f45c00908265947c39221035250024f2caec9a15c1c8cf553ebeecee289f342', 'org.fxmisc.easybind:easybind:666af296dda6de68751668a62661571b5238ac6f1c07c8a204fc6f902b222aaf', + 'network.bisq.btcd-cli4j:btcd-cli4j-daemon:4f56e94428a49290056709f3485a266eacde00a33d41ee995a046fac95eb5c25', + 'network.bisq.btcd-cli4j:btcd-cli4j-core:4d1a5637cc89234595ad05f023597bda51fb179c4d1fb296ee94a1106e4fda21', 'com.fasterxml.jackson.core:jackson-databind:fcf3c2b0c332f5f54604f7e27fa7ee502378a2cc5df6a944bbfae391872c32ff', 'com.fasterxml.jackson.core:jackson-core:39a74610521d7fb9eb3f437bb8739bbf47f6435be12d17bf954c731a0c6352bb', 'com.fasterxml.jackson.core:jackson-annotations:2566b3a6662afa3c6af4f5b25006cb46be2efc68f1b5116291d6998a8cdf7ed3', @@ -33,6 +36,8 @@ dependencyVerification { 'com.googlecode.json-simple:json-simple:4e69696892b88b41c55d49ab2fdcc21eead92bf54acc588c0050596c3b75199c', 'org.springframework:spring-core:c451e8417adb2ffb2445636da5e44a2f59307c4100037a1fe387c3fba4f29b52', 'ch.qos.logback:logback-classic:e66efc674e94837344bc5b748ff510c37a44eeff86cbfdbf9e714ef2eb374013', + 'network.bisq.libdohj:libdohj-core:b89d2a6ad6a5aff1fccf2d4e5f7cc8c31991746e61913bcec3e999c2b0d7c954', + 'com.github.bisq-network.bitcoinj:bitcoinj-core:d148d9577cf96540f7f5367011f7626ff9c9f148f0bf903b541740d480652969', 'org.slf4j:slf4j-api:3a4cd4969015f3beb4b5b4d81dbafc01765fb60b8a439955ca64d8476fef553e', 'ch.qos.logback:logback-core:4cd46fa17d77057b39160058df2f21ebbc2aded51d0edcc25d2c1cecc042a005', 'com.google.code.findbugs:jsr305:c885ce34249682bc0236b4a7d56efcc12048e6135a5baf7a9cde8ad8cda13fcd', @@ -40,8 +45,8 @@ dependencyVerification { 'com.google.inject:guice:9b9df27a5b8c7864112b4137fd92b36c3f1395bfe57be42fedf2f520ead1a93e', 'com.github.JesusMcCloud.netlayer:tor:ac8465b7dda30ea920ec31a6bde42df7e88bee0282e805ce2797628938e3cf0b', 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:193ab7813e4d249f2ea4fc1b968fea8c2126bcbeeb5d6127050ce1b93dbaa7c2', - 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:877b59bbe466b24a88275a71fd06cd97359d2085420f6f1ac1d766afa8116001', 'io.github.microutils:kotlin-logging:4992504fd3c6ecdf9ed10874b9508e758bb908af9e9d7af19a61e9afb6b7e27a', + 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:877b59bbe466b24a88275a71fd06cd97359d2085420f6f1ac1d766afa8116001', 'org.jetbrains.kotlin:kotlin-stdlib:4ff0fcb97f4983b4aaba12668c24ad21b08460915db1b021d8f1d8bee687f21c', 'org.jetbrains:annotations:ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478', 'org.bouncycastle:bcpg-jdk15on:de3355b821fc81dd32e1f3f560d5b3eca1c678fd2400011d0bfc69fb91bcde85', @@ -60,7 +65,6 @@ dependencyVerification { 'commons-logging:commons-logging:daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636', 'javax.inject:javax.inject:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff', 'aopalliance:aopalliance:0addec670fedcd3f113c5c8091d783280d23f75e3acb841b61a9cdb079376a08', - 'com.github.bisq-network.bitcoinj:bitcoinj-core:15e0f4304dd92259c4e9ff0114cbeab7a79abb51a5817b422ce629d3a0a2d551', 'com.lambdaworks:scrypt:9a82d218099fb14c10c0e86e7eefeebd8c104de920acdc47b8b4b7a686fb73b4', 'com.google.zxing:core:11aae8fd974ab25faa8208be50468eb12349cd239e93e7c797377fa13e381729', 'com.cedricwalter:tor-binary-geoip:fbd7656a262607e5a73016e048d5270cbabcd4639a1795b4b4e762df8877429d', @@ -71,6 +75,7 @@ dependencyVerification { 'net.jcip:jcip-annotations:be5805392060c71474bf6c9a67a099471274d30b83eef84bfc4e0889a4f1dcc0', 'org.bitcoinj:orchid:f836325cfa0466a011cb755c9b0fee6368487a2352eb45f4306ad9e4c18de080', 'com.squareup.okhttp:okhttp:b4c943138fcef2bcc9d2006b2250c4aabbedeafc5947ed7c0af7fd103ceb2707', + 'org.jetbrains.kotlin:kotlin-stdlib-common:4b161ef619eee0d1a49b1c4f0c4a8e46f4e342573efd8e0106a765f47475fe39', 'com.squareup.okio:okio:114bdc1f47338a68bcbc95abf2f5cdc72beeec91812f2fcd7b521c1937876266', ] } diff --git a/monitor/src/main/java/bisq/monitor/metrics/p2p/MonitorP2PService.java b/monitor/src/main/java/bisq/monitor/metrics/p2p/MonitorP2PService.java index 3f4a63973a..d448bf2d7d 100644 --- a/monitor/src/main/java/bisq/monitor/metrics/p2p/MonitorP2PService.java +++ b/monitor/src/main/java/bisq/monitor/metrics/p2p/MonitorP2PService.java @@ -106,7 +106,7 @@ public class MonitorP2PService implements SetupListener, PersistedDataHost { @Override public void onTorNodeReady() { - socks5ProxyProvider.setSocks5ProxyInternal(networkNode.getSocksProxy()); + socks5ProxyProvider.setSocks5ProxyInternal(networkNode); listener.onTorNodeReady(); } diff --git a/p2p/src/main/java/bisq/network/NetworkOptionKeys.java b/p2p/src/main/java/bisq/network/NetworkOptionKeys.java index c92ab86e59..f2c96ea73f 100644 --- a/p2p/src/main/java/bisq/network/NetworkOptionKeys.java +++ b/p2p/src/main/java/bisq/network/NetworkOptionKeys.java @@ -35,4 +35,5 @@ public class NetworkOptionKeys { public static final String EXTERNAL_TOR_PASSWORD = "torControlPassword"; public static final String EXTERNAL_TOR_COOKIE_FILE = "torControlCookieFile"; public static final String EXTERNAL_TOR_USE_SAFECOOKIE = "torControlUseSafeCookieAuth"; + public static final String TOR_STREAM_ISOLATION = "torStreamIsolation"; } diff --git a/p2p/src/main/java/bisq/network/Socks5ProxyProvider.java b/p2p/src/main/java/bisq/network/Socks5ProxyProvider.java index e7587e182a..15ab3949f4 100644 --- a/p2p/src/main/java/bisq/network/Socks5ProxyProvider.java +++ b/p2p/src/main/java/bisq/network/Socks5ProxyProvider.java @@ -19,6 +19,8 @@ package bisq.network; import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy; +import bisq.network.p2p.network.NetworkNode; + import com.google.inject.Inject; import javax.inject.Named; @@ -45,7 +47,7 @@ public class Socks5ProxyProvider { private static final Logger log = LoggerFactory.getLogger(Socks5ProxyProvider.class); @Nullable - private Socks5Proxy socks5ProxyInternal; + private NetworkNode socks5ProxyInternalFactory; // proxy used for btc network @Nullable @@ -66,8 +68,8 @@ public class Socks5ProxyProvider { public Socks5Proxy getSocks5Proxy() { if (socks5ProxyBtc != null) return socks5ProxyBtc; - else if (socks5ProxyInternal != null) - return socks5ProxyInternal; + else if (socks5ProxyInternalFactory != null) + return getSocks5ProxyInternal(); else return null; } @@ -84,11 +86,11 @@ public class Socks5ProxyProvider { @Nullable public Socks5Proxy getSocks5ProxyInternal() { - return socks5ProxyInternal; + return socks5ProxyInternalFactory.getSocksProxy(); } - public void setSocks5ProxyInternal(@Nullable Socks5Proxy bisqSocks5Proxy) { - this.socks5ProxyInternal = bisqSocks5Proxy; + public void setSocks5ProxyInternal(@Nullable NetworkNode bisqSocks5ProxyFactory) { + this.socks5ProxyInternalFactory = bisqSocks5ProxyFactory; } @Nullable diff --git a/p2p/src/main/java/bisq/network/p2p/NetworkNodeProvider.java b/p2p/src/main/java/bisq/network/p2p/NetworkNodeProvider.java index 82e2694720..6a5b7c7889 100644 --- a/p2p/src/main/java/bisq/network/p2p/NetworkNodeProvider.java +++ b/p2p/src/main/java/bisq/network/p2p/NetworkNodeProvider.java @@ -50,10 +50,11 @@ public class NetworkNodeProvider implements Provider { @Named(NetworkOptionKeys.EXTERNAL_TOR_CONTROL_PORT) String controlPort, @Named(NetworkOptionKeys.EXTERNAL_TOR_PASSWORD) String password, @Named(NetworkOptionKeys.EXTERNAL_TOR_COOKIE_FILE) String cookieFile, + @Named(NetworkOptionKeys.TOR_STREAM_ISOLATION) boolean streamIsolation, @Named(NetworkOptionKeys.EXTERNAL_TOR_USE_SAFECOOKIE) boolean useSafeCookieAuthentication ) { networkNode = useLocalhostForP2P ? new LocalhostNetworkNode(address, port, networkProtoResolver) : - new TorNetworkNode(port, networkProtoResolver, + new TorNetworkNode(port, networkProtoResolver, streamIsolation, !controlPort.isEmpty() ? new RunningTor(torDir, Integer.parseInt(controlPort), password, cookieFile, useSafeCookieAuthentication) : new NewTor(torDir, torrcFile, torrcOptions, bridgeAddressProvider.getBridgeAddresses())); diff --git a/p2p/src/main/java/bisq/network/p2p/P2PModule.java b/p2p/src/main/java/bisq/network/p2p/P2PModule.java index dfd677cd22..ad25aa28ef 100644 --- a/p2p/src/main/java/bisq/network/p2p/P2PModule.java +++ b/p2p/src/main/java/bisq/network/p2p/P2PModule.java @@ -94,5 +94,6 @@ public class P2PModule extends AppModule { bindConstant().annotatedWith(named(NetworkOptionKeys.EXTERNAL_TOR_PASSWORD)).to(environment.getRequiredProperty(NetworkOptionKeys.EXTERNAL_TOR_PASSWORD)); bindConstant().annotatedWith(named(NetworkOptionKeys.EXTERNAL_TOR_COOKIE_FILE)).to(environment.getRequiredProperty(NetworkOptionKeys.EXTERNAL_TOR_COOKIE_FILE)); bindConstant().annotatedWith(named(NetworkOptionKeys.EXTERNAL_TOR_USE_SAFECOOKIE)).to(environment.containsProperty(NetworkOptionKeys.EXTERNAL_TOR_USE_SAFECOOKIE) ? true : false); + bindConstant().annotatedWith(named(NetworkOptionKeys.TOR_STREAM_ISOLATION)).to(environment.containsProperty(NetworkOptionKeys.TOR_STREAM_ISOLATION) ? true : false); } } diff --git a/p2p/src/main/java/bisq/network/p2p/P2PService.java b/p2p/src/main/java/bisq/network/p2p/P2PService.java index f1fd28a016..b881a15996 100644 --- a/p2p/src/main/java/bisq/network/p2p/P2PService.java +++ b/p2p/src/main/java/bisq/network/p2p/P2PService.java @@ -275,7 +275,7 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis public void onTorNodeReady() { Log.traceCall(); - socks5ProxyProvider.setSocks5ProxyInternal(networkNode.getSocksProxy()); + socks5ProxyProvider.setSocks5ProxyInternal(networkNode); boolean seedNodesAvailable = requestDataManager.requestPreliminaryData(); diff --git a/p2p/src/main/java/bisq/network/p2p/network/TorNetworkNode.java b/p2p/src/main/java/bisq/network/p2p/network/TorNetworkNode.java index c560cf409d..c0e891c306 100644 --- a/p2p/src/main/java/bisq/network/p2p/network/TorNetworkNode.java +++ b/p2p/src/main/java/bisq/network/p2p/network/TorNetworkNode.java @@ -45,8 +45,9 @@ import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import java.net.Socket; - +import java.security.SecureRandom; import java.io.IOException; +import java.util.Base64; import java.util.Date; import java.util.concurrent.TimeUnit; @@ -76,13 +77,19 @@ public class TorNetworkNode extends NetworkNode { private TorMode torMode; + private boolean streamIsolation = false; + + private Socks5Proxy socksProxy; + /////////////////////////////////////////////////////////////////////////////////////////// // Constructor /////////////////////////////////////////////////////////////////////////////////////////// - public TorNetworkNode(int servicePort, NetworkProtoResolver networkProtoResolver, TorMode torMode) { + public TorNetworkNode(int servicePort, NetworkProtoResolver networkProtoResolver, boolean useStreamIsolation, + TorMode torMode) { super(servicePort, networkProtoResolver); this.torMode = torMode; + this.streamIsolation = useStreamIsolation; } @@ -114,8 +121,21 @@ public class TorNetworkNode extends NetworkNode { // TODO handle failure more cleanly public Socks5Proxy getSocksProxy() { try { - tor = Tor.getDefault(); - return tor != null ? tor.getProxy() : null; + String stream = null; + if (streamIsolation) { + // create a random string + byte[] bytes = new byte[512]; // note that getProxy does Sha256 that string anyways + new SecureRandom().nextBytes(bytes); + stream = Base64.getEncoder().encodeToString(bytes); + } + + if (socksProxy == null || streamIsolation) { + tor = Tor.getDefault(); + + // ask for the connection + socksProxy = tor != null ? tor.getProxy(stream) : null; + } + return socksProxy; } catch (TorCtlException e) { log.error("TorCtlException at getSocksProxy: " + e.toString()); e.printStackTrace(); diff --git a/p2p/src/test/java/bisq/network/p2p/network/TorNetworkNodeTest.java b/p2p/src/test/java/bisq/network/p2p/network/TorNetworkNodeTest.java index 083195bde4..f4b2ac66b2 100644 --- a/p2p/src/test/java/bisq/network/p2p/network/TorNetworkNodeTest.java +++ b/p2p/src/test/java/bisq/network/p2p/network/TorNetworkNodeTest.java @@ -53,7 +53,7 @@ public class TorNetworkNodeTest { public void testTorNodeBeforeSecondReady() throws InterruptedException, IOException { latch = new CountDownLatch(1); int port = 9001; - TorNetworkNode node1 = new TorNetworkNode(port, TestUtils.getNetworkProtoResolver(), + TorNetworkNode node1 = new TorNetworkNode(port, TestUtils.getNetworkProtoResolver(), false, new NewTor(new File("torNode_" + port), "", "", new ArrayList())); node1.start(new SetupListener() { @Override @@ -80,7 +80,7 @@ public class TorNetworkNodeTest { latch = new CountDownLatch(1); int port2 = 9002; - TorNetworkNode node2 = new TorNetworkNode(port2, TestUtils.getNetworkProtoResolver(), + TorNetworkNode node2 = new TorNetworkNode(port2, TestUtils.getNetworkProtoResolver(), false, new NewTor(new File("torNode_" + port), "", "", new ArrayList())); node2.start(new SetupListener() { @Override @@ -138,7 +138,7 @@ public class TorNetworkNodeTest { public void testTorNodeAfterBothReady() throws InterruptedException, IOException { latch = new CountDownLatch(2); int port = 9001; - TorNetworkNode node1 = new TorNetworkNode(port, TestUtils.getNetworkProtoResolver(), + TorNetworkNode node1 = new TorNetworkNode(port, TestUtils.getNetworkProtoResolver(), false, new NewTor(new File("torNode_" + port), "", "", new ArrayList())); node1.start(new SetupListener() { @Override @@ -164,7 +164,7 @@ public class TorNetworkNodeTest { }); int port2 = 9002; - TorNetworkNode node2 = new TorNetworkNode(port2, TestUtils.getNetworkProtoResolver(), + TorNetworkNode node2 = new TorNetworkNode(port2, TestUtils.getNetworkProtoResolver(), false, new NewTor(new File("torNode_" + port), "", "", new ArrayList())); node2.start(new SetupListener() { @Override diff --git a/scripts/install_java.bat b/scripts/install_java.bat index 94a8028967..c821ba8059 100644 --- a/scripts/install_java.bat +++ b/scripts/install_java.bat @@ -23,27 +23,23 @@ set jdk_version=10.0.2 set jdk_filename=openjdk-%jdk_version%_windows-x64_bin set jdk_url=https://download.java.net/java/GA/jdk10/%jdk_version%/19aef61b38124481863b1413dce1855f/13/%jdk_filename%.tar.gz -echo Downloading required files +if exist "%PROGRAMFILES%\Java\openjdk\jdk-%jdk_version%" ( + echo %PROGRAMFILES%\Java\openjdk\jdk-%jdk_version% already exists, skipping install + goto SetEnvVars +) + +echo Downloading required files to %TEMP% powershell -Command "Invoke-WebRequest %jdk_url% -OutFile $env:temp\%jdk_filename%.tar.gz" ::Download 7zip (command line version) in order to extract the tar.gz file since there is no native support in Windows powershell -Command "Invoke-WebRequest https://www.7-zip.org/a/7za920.zip -OutFile $env:temp\7za920.zip" powershell -Command "Expand-Archive $env:temp\7za920.zip -DestinationPath $env:temp\7za920 -Force" -echo Extracting and installing JDK +echo Extracting and installing JDK to %PROGRAMFILES%\Java\openjdk\jdk-%jdk_version% "%TEMP%\7za920\7za.exe" x "%TEMP%\%jdk_filename%.tar.gz" -o"%TEMP%" -r -y "%TEMP%\7za920\7za.exe" x "%TEMP%\%jdk_filename%.tar" -o"%TEMP%\openjdk-%jdk_version%" -r -y -if exist "%PROGRAMFILES%\Java\openjdk\jdk-%jdk_version%" ( - rmdir /S /Q "%PROGRAMFILES%\Java\openjdk\jdk-%jdk_version%" -) else ( - md "%PROGRAMFILES%\Java\openjdk" -) +md "%PROGRAMFILES%\Java\openjdk" move "%TEMP%\openjdk-%jdk_version%\jdk-%jdk_version%" "%PROGRAMFILES%\Java\openjdk" -echo Setting environment variables -setx /M JAVA_HOME "%PROGRAMFILES%\Java\openjdk\jdk-%jdk_version%" -set java_bin=%%JAVA_HOME%%\bin -echo %PATH%|find /i "%java_bin%">nul || setx /M PATH "%PATH%;%java_bin%" - echo Removing downloaded files rmdir /S /Q %TEMP%\7za920 del /Q %TEMP%\7za920.zip @@ -51,4 +47,10 @@ rmdir /S /Q %TEMP%\openjdk-%jdk_version% del /Q %TEMP%\%jdk_filename%.tar del /Q %TEMP%\%jdk_filename%.tar.gz +:SetEnvVars +echo Setting environment variables +setx /M JAVA_HOME "%PROGRAMFILES%\Java\openjdk\jdk-%jdk_version%" +set java_bin=%%JAVA_HOME%%\bin +echo %PATH%|find /i "%java_bin%">nul || setx /M PATH "%PATH%;%java_bin%" + pause