mirror of
https://github.com/haveno-dex/haveno.git
synced 2024-12-23 03:59:36 +00:00
manage monero connections from ui #623
use tor for all monero connections by default renames from btc to xmr updated translations
This commit is contained in:
parent
1faedc8121
commit
06be2a4829
45 changed files with 681 additions and 663 deletions
|
@ -58,7 +58,7 @@ public class Config {
|
||||||
public static final String CONFIG_FILE = "configFile";
|
public static final String CONFIG_FILE = "configFile";
|
||||||
public static final String MAX_MEMORY = "maxMemory";
|
public static final String MAX_MEMORY = "maxMemory";
|
||||||
public static final String LOG_LEVEL = "logLevel";
|
public static final String LOG_LEVEL = "logLevel";
|
||||||
public static final String BANNED_BTC_NODES = "bannedBtcNodes";
|
public static final String BANNED_XMR_NODES = "bannedXmrNodes";
|
||||||
public static final String BANNED_PRICE_RELAY_NODES = "bannedPriceRelayNodes";
|
public static final String BANNED_PRICE_RELAY_NODES = "bannedPriceRelayNodes";
|
||||||
public static final String BANNED_SEED_NODES = "bannedSeedNodes";
|
public static final String BANNED_SEED_NODES = "bannedSeedNodes";
|
||||||
public static final String BASE_CURRENCY_NETWORK = "baseCurrencyNetwork";
|
public static final String BASE_CURRENCY_NETWORK = "baseCurrencyNetwork";
|
||||||
|
@ -81,7 +81,7 @@ public class Config {
|
||||||
public static final String MAX_CONNECTIONS = "maxConnections";
|
public static final String MAX_CONNECTIONS = "maxConnections";
|
||||||
public static final String SOCKS_5_PROXY_BTC_ADDRESS = "socks5ProxyBtcAddress";
|
public static final String SOCKS_5_PROXY_BTC_ADDRESS = "socks5ProxyBtcAddress";
|
||||||
public static final String SOCKS_5_PROXY_HTTP_ADDRESS = "socks5ProxyHttpAddress";
|
public static final String SOCKS_5_PROXY_HTTP_ADDRESS = "socks5ProxyHttpAddress";
|
||||||
public static final String USE_TOR_FOR_BTC = "useTorForBtc";
|
public static final String USE_TOR_FOR_XMR = "useTorForXmr";
|
||||||
public static final String TORRC_FILE = "torrcFile";
|
public static final String TORRC_FILE = "torrcFile";
|
||||||
public static final String TORRC_OPTIONS = "torrcOptions";
|
public static final String TORRC_OPTIONS = "torrcOptions";
|
||||||
public static final String TOR_CONTROL_PORT = "torControlPort";
|
public static final String TOR_CONTROL_PORT = "torControlPort";
|
||||||
|
@ -93,12 +93,12 @@ public class Config {
|
||||||
public static final String MSG_THROTTLE_PER_10_SEC = "msgThrottlePer10Sec";
|
public static final String MSG_THROTTLE_PER_10_SEC = "msgThrottlePer10Sec";
|
||||||
public static final String SEND_MSG_THROTTLE_TRIGGER = "sendMsgThrottleTrigger";
|
public static final String SEND_MSG_THROTTLE_TRIGGER = "sendMsgThrottleTrigger";
|
||||||
public static final String SEND_MSG_THROTTLE_SLEEP = "sendMsgThrottleSleep";
|
public static final String SEND_MSG_THROTTLE_SLEEP = "sendMsgThrottleSleep";
|
||||||
public static final String IGNORE_LOCAL_BTC_NODE = "ignoreLocalBtcNode";
|
public static final String IGNORE_LOCAL_XMR_NODE = "ignoreLocalXmrNode";
|
||||||
public static final String BITCOIN_REGTEST_HOST = "bitcoinRegtestHost";
|
public static final String BITCOIN_REGTEST_HOST = "bitcoinRegtestHost";
|
||||||
public static final String XMR_NODE = "xmrNode";
|
public static final String XMR_NODE = "xmrNode";
|
||||||
public static final String XMR_NODE_USERNAME = "xmrNodeUsername";
|
public static final String XMR_NODE_USERNAME = "xmrNodeUsername";
|
||||||
public static final String XMR_NODE_PASSWORD = "xmrNodePassword";
|
public static final String XMR_NODE_PASSWORD = "xmrNodePassword";
|
||||||
public static final String BTC_NODES = "btcNodes";
|
public static final String XMR_NODES = "xmrNodes";
|
||||||
public static final String SOCKS5_DISCOVER_MODE = "socks5DiscoverMode";
|
public static final String SOCKS5_DISCOVER_MODE = "socks5DiscoverMode";
|
||||||
public static final String USE_ALL_PROVIDED_NODES = "useAllProvidedNodes";
|
public static final String USE_ALL_PROVIDED_NODES = "useAllProvidedNodes";
|
||||||
public static final String USER_AGENT = "userAgent";
|
public static final String USER_AGENT = "userAgent";
|
||||||
|
@ -145,12 +145,12 @@ public class Config {
|
||||||
public final int nodePort;
|
public final int nodePort;
|
||||||
public final int maxMemory;
|
public final int maxMemory;
|
||||||
public final String logLevel;
|
public final String logLevel;
|
||||||
public final List<String> bannedBtcNodes;
|
public final List<String> bannedXmrNodes;
|
||||||
public final List<String> bannedPriceRelayNodes;
|
public final List<String> bannedPriceRelayNodes;
|
||||||
public final List<String> bannedSeedNodes;
|
public final List<String> bannedSeedNodes;
|
||||||
public final BaseCurrencyNetwork baseCurrencyNetwork;
|
public final BaseCurrencyNetwork baseCurrencyNetwork;
|
||||||
public final NetworkParameters networkParameters;
|
public final NetworkParameters networkParameters;
|
||||||
public final boolean ignoreLocalBtcNode;
|
public final boolean ignoreLocalXmrNode;
|
||||||
public final String bitcoinRegtestHost;
|
public final String bitcoinRegtestHost;
|
||||||
public final String referralId;
|
public final String referralId;
|
||||||
public final boolean useDevMode;
|
public final boolean useDevMode;
|
||||||
|
@ -179,9 +179,9 @@ public class Config {
|
||||||
public final String xmrNode;
|
public final String xmrNode;
|
||||||
public final String xmrNodeUsername;
|
public final String xmrNodeUsername;
|
||||||
public final String xmrNodePassword;
|
public final String xmrNodePassword;
|
||||||
public final String btcNodes;
|
public final String xmrNodes;
|
||||||
public final boolean useTorForBtc;
|
public final boolean useTorForXmr;
|
||||||
public final boolean useTorForBtcOptionSetExplicitly;
|
public final boolean useTorForXmrOptionSetExplicitly;
|
||||||
public final String socks5DiscoverMode;
|
public final String socks5DiscoverMode;
|
||||||
public final boolean useAllProvidedNodes;
|
public final boolean useAllProvidedNodes;
|
||||||
public final String userAgent;
|
public final String userAgent;
|
||||||
|
@ -295,8 +295,8 @@ public class Config {
|
||||||
.describedAs("OFF|ALL|ERROR|WARN|INFO|DEBUG|TRACE")
|
.describedAs("OFF|ALL|ERROR|WARN|INFO|DEBUG|TRACE")
|
||||||
.defaultsTo(Level.INFO.levelStr);
|
.defaultsTo(Level.INFO.levelStr);
|
||||||
|
|
||||||
ArgumentAcceptingOptionSpec<String> bannedBtcNodesOpt =
|
ArgumentAcceptingOptionSpec<String> bannedXmrNodesOpt =
|
||||||
parser.accepts(BANNED_BTC_NODES, "List Bitcoin nodes to ban")
|
parser.accepts(BANNED_XMR_NODES, "List Bitcoin nodes to ban")
|
||||||
.withRequiredArg()
|
.withRequiredArg()
|
||||||
.ofType(String.class)
|
.ofType(String.class)
|
||||||
.withValuesSeparatedBy(',')
|
.withValuesSeparatedBy(',')
|
||||||
|
@ -324,8 +324,8 @@ public class Config {
|
||||||
.withValuesConvertedBy(new EnumValueConverter(BaseCurrencyNetwork.class))
|
.withValuesConvertedBy(new EnumValueConverter(BaseCurrencyNetwork.class))
|
||||||
.defaultsTo(BaseCurrencyNetwork.XMR_MAINNET);
|
.defaultsTo(BaseCurrencyNetwork.XMR_MAINNET);
|
||||||
|
|
||||||
ArgumentAcceptingOptionSpec<Boolean> ignoreLocalBtcNodeOpt = // TODO: update this to ignore local XMR node
|
ArgumentAcceptingOptionSpec<Boolean> ignoreLocalXmrNodeOpt = // TODO: update this to ignore local XMR node
|
||||||
parser.accepts(IGNORE_LOCAL_BTC_NODE,
|
parser.accepts(IGNORE_LOCAL_XMR_NODE,
|
||||||
"If set to true a Monero node running locally will be ignored")
|
"If set to true a Monero node running locally will be ignored")
|
||||||
.withRequiredArg()
|
.withRequiredArg()
|
||||||
.ofType(Boolean.class)
|
.ofType(Boolean.class)
|
||||||
|
@ -513,14 +513,14 @@ public class Config {
|
||||||
.withRequiredArg()
|
.withRequiredArg()
|
||||||
.defaultsTo("");
|
.defaultsTo("");
|
||||||
|
|
||||||
ArgumentAcceptingOptionSpec<String> btcNodesOpt =
|
ArgumentAcceptingOptionSpec<String> xmrNodesOpt =
|
||||||
parser.accepts(BTC_NODES, "Custom nodes used for BitcoinJ as comma separated IP addresses.")
|
parser.accepts(XMR_NODES, "Custom nodes used for BitcoinJ as comma separated IP addresses.")
|
||||||
.withRequiredArg()
|
.withRequiredArg()
|
||||||
.describedAs("ip[,...]")
|
.describedAs("ip[,...]")
|
||||||
.defaultsTo("");
|
.defaultsTo("");
|
||||||
|
|
||||||
ArgumentAcceptingOptionSpec<Boolean> useTorForBtcOpt =
|
ArgumentAcceptingOptionSpec<Boolean> useTorForXmrOpt =
|
||||||
parser.accepts(USE_TOR_FOR_BTC, "If set to true BitcoinJ is routed over tor (socks 5 proxy).")
|
parser.accepts(USE_TOR_FOR_XMR, "If set to true BitcoinJ is routed over tor (socks 5 proxy).")
|
||||||
.withRequiredArg()
|
.withRequiredArg()
|
||||||
.ofType(Boolean.class)
|
.ofType(Boolean.class)
|
||||||
.defaultsTo(false);
|
.defaultsTo(false);
|
||||||
|
@ -650,12 +650,12 @@ public class Config {
|
||||||
this.walletRpcBindPort = options.valueOf(walletRpcBindPortOpt);
|
this.walletRpcBindPort = options.valueOf(walletRpcBindPortOpt);
|
||||||
this.maxMemory = options.valueOf(maxMemoryOpt);
|
this.maxMemory = options.valueOf(maxMemoryOpt);
|
||||||
this.logLevel = options.valueOf(logLevelOpt);
|
this.logLevel = options.valueOf(logLevelOpt);
|
||||||
this.bannedBtcNodes = options.valuesOf(bannedBtcNodesOpt);
|
this.bannedXmrNodes = options.valuesOf(bannedXmrNodesOpt);
|
||||||
this.bannedPriceRelayNodes = options.valuesOf(bannedPriceRelayNodesOpt);
|
this.bannedPriceRelayNodes = options.valuesOf(bannedPriceRelayNodesOpt);
|
||||||
this.bannedSeedNodes = options.valuesOf(bannedSeedNodesOpt);
|
this.bannedSeedNodes = options.valuesOf(bannedSeedNodesOpt);
|
||||||
this.baseCurrencyNetwork = (BaseCurrencyNetwork) options.valueOf(baseCurrencyNetworkOpt);
|
this.baseCurrencyNetwork = (BaseCurrencyNetwork) options.valueOf(baseCurrencyNetworkOpt);
|
||||||
this.networkParameters = baseCurrencyNetwork.getParameters();
|
this.networkParameters = baseCurrencyNetwork.getParameters();
|
||||||
this.ignoreLocalBtcNode = options.valueOf(ignoreLocalBtcNodeOpt);
|
this.ignoreLocalXmrNode = options.valueOf(ignoreLocalXmrNodeOpt);
|
||||||
this.bitcoinRegtestHost = options.valueOf(bitcoinRegtestHostOpt);
|
this.bitcoinRegtestHost = options.valueOf(bitcoinRegtestHostOpt);
|
||||||
this.torrcFile = options.has(torrcFileOpt) ? options.valueOf(torrcFileOpt).toFile() : null;
|
this.torrcFile = options.has(torrcFileOpt) ? options.valueOf(torrcFileOpt).toFile() : null;
|
||||||
this.torrcOptions = options.valueOf(torrcOptionsOpt);
|
this.torrcOptions = options.valueOf(torrcOptionsOpt);
|
||||||
|
@ -685,9 +685,9 @@ public class Config {
|
||||||
this.xmrNode = options.valueOf(xmrNodeOpt);
|
this.xmrNode = options.valueOf(xmrNodeOpt);
|
||||||
this.xmrNodeUsername = options.valueOf(xmrNodeUsernameOpt);
|
this.xmrNodeUsername = options.valueOf(xmrNodeUsernameOpt);
|
||||||
this.xmrNodePassword = options.valueOf(xmrNodePasswordOpt);
|
this.xmrNodePassword = options.valueOf(xmrNodePasswordOpt);
|
||||||
this.btcNodes = options.valueOf(btcNodesOpt);
|
this.xmrNodes = options.valueOf(xmrNodesOpt);
|
||||||
this.useTorForBtc = options.valueOf(useTorForBtcOpt);
|
this.useTorForXmr = options.valueOf(useTorForXmrOpt);
|
||||||
this.useTorForBtcOptionSetExplicitly = options.has(useTorForBtcOpt);
|
this.useTorForXmrOptionSetExplicitly = options.has(useTorForXmrOpt);
|
||||||
this.socks5DiscoverMode = options.valueOf(socks5DiscoverModeOpt);
|
this.socks5DiscoverMode = options.valueOf(socks5DiscoverModeOpt);
|
||||||
this.useAllProvidedNodes = options.valueOf(useAllProvidedNodesOpt);
|
this.useAllProvidedNodes = options.valueOf(useAllProvidedNodesOpt);
|
||||||
this.userAgent = options.valueOf(userAgentOpt);
|
this.userAgent = options.valueOf(userAgentOpt);
|
||||||
|
|
|
@ -13,7 +13,7 @@ import java.nio.file.Path;
|
||||||
|
|
||||||
import static haveno.common.config.Config.APP_DATA_DIR;
|
import static haveno.common.config.Config.APP_DATA_DIR;
|
||||||
import static haveno.common.config.Config.APP_NAME;
|
import static haveno.common.config.Config.APP_NAME;
|
||||||
import static haveno.common.config.Config.BANNED_BTC_NODES;
|
import static haveno.common.config.Config.BANNED_XMR_NODES;
|
||||||
import static haveno.common.config.Config.CONFIG_FILE;
|
import static haveno.common.config.Config.CONFIG_FILE;
|
||||||
import static haveno.common.config.Config.DEFAULT_CONFIG_FILE_NAME;
|
import static haveno.common.config.Config.DEFAULT_CONFIG_FILE_NAME;
|
||||||
import static haveno.common.config.Config.HELP;
|
import static haveno.common.config.Config.HELP;
|
||||||
|
@ -200,9 +200,9 @@ public class ConfigTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void whenBannedBtcNodesOptionIsSet_thenBannedBtcNodesPropertyReturnsItsValue() {
|
public void whenBannedXmrNodesOptionIsSet_thenBannedXmrNodesPropertyReturnsItsValue() {
|
||||||
Config config = configWithOpts(opt(BANNED_BTC_NODES, "foo.onion:8333,bar.onion:8333"));
|
Config config = configWithOpts(opt(BANNED_XMR_NODES, "foo.onion:8333,bar.onion:8333"));
|
||||||
assertThat(config.bannedBtcNodes, contains("foo.onion:8333", "bar.onion:8333"));
|
assertThat(config.bannedXmrNodes, contains("foo.onion:8333", "bar.onion:8333"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
package haveno.core.api;
|
package haveno.core.api;
|
||||||
|
|
||||||
import haveno.common.app.DevEnv;
|
import haveno.common.app.DevEnv;
|
||||||
import haveno.common.config.BaseCurrencyNetwork;
|
|
||||||
import haveno.common.config.Config;
|
import haveno.common.config.Config;
|
||||||
import haveno.core.trade.HavenoUtils;
|
import haveno.core.trade.HavenoUtils;
|
||||||
|
import haveno.core.user.Preferences;
|
||||||
import haveno.core.xmr.model.EncryptedConnectionList;
|
import haveno.core.xmr.model.EncryptedConnectionList;
|
||||||
|
import haveno.core.xmr.nodes.XmrNodes;
|
||||||
|
import haveno.core.xmr.nodes.XmrNodesSetupPreferences;
|
||||||
|
import haveno.core.xmr.nodes.XmrNodes.XmrNode;
|
||||||
import haveno.core.xmr.setup.DownloadListener;
|
import haveno.core.xmr.setup.DownloadListener;
|
||||||
import haveno.core.xmr.setup.WalletsSetup;
|
import haveno.core.xmr.setup.WalletsSetup;
|
||||||
import haveno.network.Socks5ProxyProvider;
|
import haveno.network.Socks5ProxyProvider;
|
||||||
|
@ -32,10 +35,7 @@ import monero.daemon.model.MoneroPeer;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@ -50,38 +50,14 @@ public final class CoreMoneroConnectionsService {
|
||||||
private static final long MIN_ERROR_LOG_PERIOD_MS = 300000; // minimum period between logging errors fetching daemon info
|
private static final long MIN_ERROR_LOG_PERIOD_MS = 300000; // minimum period between logging errors fetching daemon info
|
||||||
private static Long lastErrorTimestamp;
|
private static Long lastErrorTimestamp;
|
||||||
|
|
||||||
// default Monero nodes
|
|
||||||
private static final Map<BaseCurrencyNetwork, List<MoneroRpcConnection>> DEFAULT_CONNECTIONS;
|
|
||||||
static {
|
|
||||||
DEFAULT_CONNECTIONS = new HashMap<BaseCurrencyNetwork, List<MoneroRpcConnection>>();
|
|
||||||
DEFAULT_CONNECTIONS.put(BaseCurrencyNetwork.XMR_LOCAL, Arrays.asList(
|
|
||||||
new MoneroRpcConnection("http://127.0.0.1:28081").setPriority(1)
|
|
||||||
));
|
|
||||||
DEFAULT_CONNECTIONS.put(BaseCurrencyNetwork.XMR_STAGENET, Arrays.asList(
|
|
||||||
new MoneroRpcConnection("http://127.0.0.1:38081").setPriority(1), // localhost is first priority, use loopback address 127.0.0.1 to match url used by local node service
|
|
||||||
new MoneroRpcConnection("http://127.0.0.1:39081").setPriority(2), // from makefile: `monerod-stagenet-custom`
|
|
||||||
new MoneroRpcConnection("http://45.63.8.26:38081").setPriority(2), // hosted by haveno
|
|
||||||
new MoneroRpcConnection("http://stagenet.community.rino.io:38081").setPriority(2),
|
|
||||||
new MoneroRpcConnection("http://stagenet.melo.tools:38081").setPriority(2),
|
|
||||||
new MoneroRpcConnection("http://node.sethforprivacy.com:38089").setPriority(2),
|
|
||||||
new MoneroRpcConnection("http://node2.sethforprivacy.com:38089").setPriority(2),
|
|
||||||
new MoneroRpcConnection("http://plowsof3t5hogddwabaeiyrno25efmzfxyro2vligremt7sxpsclfaid.onion:38089").setPriority(2)
|
|
||||||
));
|
|
||||||
DEFAULT_CONNECTIONS.put(BaseCurrencyNetwork.XMR_MAINNET, Arrays.asList(
|
|
||||||
new MoneroRpcConnection("http://127.0.0.1:18081").setPriority(1),
|
|
||||||
new MoneroRpcConnection("http://node.community.rino.io:18081").setPriority(2),
|
|
||||||
new MoneroRpcConnection("http://xmr-node.cakewallet.com:18081").setPriority(2),
|
|
||||||
new MoneroRpcConnection("http://xmr-node-eu.cakewallet.com:18081").setPriority(2),
|
|
||||||
new MoneroRpcConnection("http://xmr-node-usa-east.cakewallet.com:18081").setPriority(2),
|
|
||||||
new MoneroRpcConnection("http://xmr-node-uk.cakewallet.com:18081").setPriority(2),
|
|
||||||
new MoneroRpcConnection("http://node.sethforprivacy.com:18089").setPriority(2)
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
private final Object lock = new Object();
|
private final Object lock = new Object();
|
||||||
private final Config config;
|
private final Config config;
|
||||||
private final CoreContext coreContext;
|
private final CoreContext coreContext;
|
||||||
|
private final Preferences preferences;
|
||||||
private final CoreAccountService accountService;
|
private final CoreAccountService accountService;
|
||||||
|
private final XmrNodes xmrNodes;
|
||||||
private final CoreMoneroNodeService nodeService;
|
private final CoreMoneroNodeService nodeService;
|
||||||
private final MoneroConnectionManager connectionManager;
|
private final MoneroConnectionManager connectionManager;
|
||||||
private final EncryptedConnectionList connectionList;
|
private final EncryptedConnectionList connectionList;
|
||||||
|
@ -103,15 +79,19 @@ public final class CoreMoneroConnectionsService {
|
||||||
public CoreMoneroConnectionsService(P2PService p2PService,
|
public CoreMoneroConnectionsService(P2PService p2PService,
|
||||||
Config config,
|
Config config,
|
||||||
CoreContext coreContext,
|
CoreContext coreContext,
|
||||||
|
Preferences preferences,
|
||||||
WalletsSetup walletsSetup,
|
WalletsSetup walletsSetup,
|
||||||
CoreAccountService accountService,
|
CoreAccountService accountService,
|
||||||
|
XmrNodes xmrNodes,
|
||||||
CoreMoneroNodeService nodeService,
|
CoreMoneroNodeService nodeService,
|
||||||
MoneroConnectionManager connectionManager,
|
MoneroConnectionManager connectionManager,
|
||||||
EncryptedConnectionList connectionList,
|
EncryptedConnectionList connectionList,
|
||||||
Socks5ProxyProvider socks5ProxyProvider) {
|
Socks5ProxyProvider socks5ProxyProvider) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.coreContext = coreContext;
|
this.coreContext = coreContext;
|
||||||
|
this.preferences = preferences;
|
||||||
this.accountService = accountService;
|
this.accountService = accountService;
|
||||||
|
this.xmrNodes = xmrNodes;
|
||||||
this.nodeService = nodeService;
|
this.nodeService = nodeService;
|
||||||
this.connectionManager = connectionManager;
|
this.connectionManager = connectionManager;
|
||||||
this.connectionList = connectionList;
|
this.connectionList = connectionList;
|
||||||
|
@ -178,7 +158,7 @@ public final class CoreMoneroConnectionsService {
|
||||||
public void addConnection(MoneroRpcConnection connection) {
|
public void addConnection(MoneroRpcConnection connection) {
|
||||||
synchronized (lock) {
|
synchronized (lock) {
|
||||||
accountService.checkAccountOpen();
|
accountService.checkAccountOpen();
|
||||||
connectionList.addConnection(connection);
|
if (coreContext.isApiUser()) connectionList.addConnection(connection);
|
||||||
connectionManager.addConnection(connection);
|
connectionManager.addConnection(connection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -342,7 +322,7 @@ public final class CoreMoneroConnectionsService {
|
||||||
if (isConnectionLocal()) {
|
if (isConnectionLocal()) {
|
||||||
if (lastInfo != null && (lastInfo.isBusySyncing() || (lastInfo.getHeightWithoutBootstrap() != null && lastInfo.getHeightWithoutBootstrap() > 0 && lastInfo.getHeightWithoutBootstrap() < lastInfo.getHeight()))) return REFRESH_PERIOD_HTTP_MS; // refresh slower if syncing or bootstrapped
|
if (lastInfo != null && (lastInfo.isBusySyncing() || (lastInfo.getHeightWithoutBootstrap() != null && lastInfo.getHeightWithoutBootstrap() > 0 && lastInfo.getHeightWithoutBootstrap() < lastInfo.getHeight()))) return REFRESH_PERIOD_HTTP_MS; // refresh slower if syncing or bootstrapped
|
||||||
else return REFRESH_PERIOD_LOCAL_MS; // TODO: announce faster refresh after done syncing
|
else return REFRESH_PERIOD_LOCAL_MS; // TODO: announce faster refresh after done syncing
|
||||||
} else if (getConnection().isOnion()) {
|
} else if (useProxy(getConnection())) {
|
||||||
return REFRESH_PERIOD_ONION_MS;
|
return REFRESH_PERIOD_ONION_MS;
|
||||||
} else {
|
} else {
|
||||||
return REFRESH_PERIOD_HTTP_MS;
|
return REFRESH_PERIOD_HTTP_MS;
|
||||||
|
@ -350,6 +330,10 @@ public final class CoreMoneroConnectionsService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean useProxy(MoneroRpcConnection connection) {
|
||||||
|
return connection.isOnion() || (preferences.isUseTorForMonero() && !HavenoUtils.isLocalHost(connection.getUri()));
|
||||||
|
}
|
||||||
|
|
||||||
private void initialize() {
|
private void initialize() {
|
||||||
|
|
||||||
// initialize connections
|
// initialize connections
|
||||||
|
@ -384,35 +368,61 @@ public final class CoreMoneroConnectionsService {
|
||||||
connectionManager.reset();
|
connectionManager.reset();
|
||||||
connectionManager.setTimeout(REFRESH_PERIOD_HTTP_MS);
|
connectionManager.setTimeout(REFRESH_PERIOD_HTTP_MS);
|
||||||
|
|
||||||
// load connections
|
// load previous or default connections
|
||||||
log.info("TOR proxy URI: " + getProxyUri());
|
if (coreContext.isApiUser()) {
|
||||||
for (MoneroRpcConnection connection : connectionList.getConnections()) {
|
|
||||||
if (connection.isOnion()) connection.setProxyUri(getProxyUri());
|
// load previous connections
|
||||||
connectionManager.addConnection(connection);
|
for (MoneroRpcConnection connection : connectionList.getConnections()) connectionManager.addConnection(connection);
|
||||||
}
|
log.info("Read " + connectionList.getConnections().size() + " previous connections from disk");
|
||||||
log.info("Read " + connectionList.getConnections().size() + " connections from disk");
|
|
||||||
|
|
||||||
// add default connections
|
// add default connections
|
||||||
for (MoneroRpcConnection connection : DEFAULT_CONNECTIONS.get(Config.baseCurrencyNetwork())) {
|
for (XmrNode node : xmrNodes.getAllXmrNodes()) {
|
||||||
if (connectionList.hasConnection(connection.getUri())) continue;
|
if (node.hasClearNetAddress()) {
|
||||||
if (connection.isOnion()) connection.setProxyUri(getProxyUri());
|
MoneroRpcConnection connection = new MoneroRpcConnection(node.getAddress() + ":" + node.getPort()).setPriority(node.getPriority());
|
||||||
|
if (!connectionList.hasConnection(connection.getUri())) addConnection(connection);
|
||||||
|
}
|
||||||
|
if (node.hasOnionAddress()) {
|
||||||
|
MoneroRpcConnection connection = new MoneroRpcConnection(node.getOnionAddress() + ":" + node.getPort()).setPriority(node.getPriority());
|
||||||
|
if (!connectionList.hasConnection(connection.getUri())) addConnection(connection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// add default connections
|
||||||
|
for (XmrNode node : xmrNodes.selectPreferredNodes(new XmrNodesSetupPreferences(preferences))) {
|
||||||
|
if (node.hasClearNetAddress()) {
|
||||||
|
MoneroRpcConnection connection = new MoneroRpcConnection(node.getAddress() + ":" + node.getPort()).setPriority(node.getPriority());
|
||||||
addConnection(connection);
|
addConnection(connection);
|
||||||
}
|
}
|
||||||
|
if (node.hasOnionAddress()) {
|
||||||
|
MoneroRpcConnection connection = new MoneroRpcConnection(node.getOnionAddress() + ":" + node.getPort()).setPriority(node.getPriority());
|
||||||
|
addConnection(connection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// restore last used connection if unconfigured and present
|
// set current connection
|
||||||
Optional<String> currentConnectionUri = null;
|
Optional<String> currentConnectionUri = Optional.empty();
|
||||||
if ("".equals(config.xmrNode)) {
|
if ("".equals(config.xmrNode)) {
|
||||||
|
if (coreContext.isApiUser() && connectionList.getCurrentConnectionUri().isPresent()) {
|
||||||
currentConnectionUri = connectionList.getCurrentConnectionUri();
|
currentConnectionUri = connectionList.getCurrentConnectionUri();
|
||||||
if (currentConnectionUri.isPresent()) connectionManager.setConnection(currentConnectionUri.get());
|
connectionManager.setConnection(currentConnectionUri.get());
|
||||||
|
}
|
||||||
} else if (!isInitialized) {
|
} else if (!isInitialized) {
|
||||||
|
|
||||||
// set monero connection from startup arguments
|
// set monero connection from startup arguments
|
||||||
MoneroRpcConnection connection = new MoneroRpcConnection(config.xmrNode, config.xmrNodeUsername, config.xmrNodePassword).setPriority(1);
|
MoneroRpcConnection connection = new MoneroRpcConnection(config.xmrNode, config.xmrNodeUsername, config.xmrNodePassword).setPriority(1);
|
||||||
if (connection.isOnion()) connection.setProxyUri(getProxyUri());
|
if (useProxy(connection)) connection.setProxyUri(getProxyUri());
|
||||||
connectionManager.setConnection(connection);
|
connectionManager.setConnection(connection);
|
||||||
currentConnectionUri = Optional.of(connection.getUri());
|
currentConnectionUri = Optional.of(connection.getUri());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set connection proxies
|
||||||
|
log.info("TOR proxy URI: " + getProxyUri());
|
||||||
|
for (MoneroRpcConnection connection : connectionManager.getConnections()) {
|
||||||
|
if (useProxy(connection)) connection.setProxyUri(getProxyUri());
|
||||||
|
}
|
||||||
|
|
||||||
// restore configuration
|
// restore configuration
|
||||||
if ("".equals(config.xmrNode)) connectionManager.setAutoSwitch(connectionList.getAutoSwitch());
|
if ("".equals(config.xmrNode)) connectionManager.setAutoSwitch(connectionList.getAutoSwitch());
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ public class WalletAppSetup {
|
||||||
this.connectionService = connectionService;
|
this.connectionService = connectionService;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.preferences = preferences;
|
this.preferences = preferences;
|
||||||
this.useTorForBTC.set(preferences.getUseTorForBitcoinJ());
|
this.useTorForBTC.set(preferences.getUseTorForMonero());
|
||||||
}
|
}
|
||||||
|
|
||||||
void init(@Nullable Consumer<String> chainFileLockedExceptionHandler,
|
void init(@Nullable Consumer<String> chainFileLockedExceptionHandler,
|
||||||
|
@ -259,9 +259,9 @@ public class WalletAppSetup {
|
||||||
|
|
||||||
private String getBtcNetworkAsString() {
|
private String getBtcNetworkAsString() {
|
||||||
String postFix;
|
String postFix;
|
||||||
if (config.ignoreLocalBtcNode)
|
if (config.ignoreLocalXmrNode)
|
||||||
postFix = " " + Res.get("mainView.footer.localhostBitcoinNode");
|
postFix = " " + Res.get("mainView.footer.localhostBitcoinNode");
|
||||||
else if (preferences.getUseTorForBitcoinJ())
|
else if (preferences.getUseTorForMonero())
|
||||||
postFix = " " + Res.get("mainView.footer.usingTor");
|
postFix = " " + Res.get("mainView.footer.usingTor");
|
||||||
else
|
else
|
||||||
postFix = "";
|
postFix = "";
|
||||||
|
|
|
@ -53,7 +53,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
||||||
private final List<String> seedNodes;
|
private final List<String> seedNodes;
|
||||||
private final List<String> priceRelayNodes;
|
private final List<String> priceRelayNodes;
|
||||||
private final boolean preventPublicBtcNetwork;
|
private final boolean preventPublicBtcNetwork;
|
||||||
private final List<String> btcNodes;
|
private final List<String> xmrNodes;
|
||||||
// SignatureAsBase64 is not set initially as we use the serialized data for signing. We set it after signature is
|
// SignatureAsBase64 is not set initially as we use the serialized data for signing. We set it after signature is
|
||||||
// created by cloning the object with a non-null sig.
|
// created by cloning the object with a non-null sig.
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -104,7 +104,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
||||||
filter.getSeedNodes(),
|
filter.getSeedNodes(),
|
||||||
filter.getPriceRelayNodes(),
|
filter.getPriceRelayNodes(),
|
||||||
filter.isPreventPublicBtcNetwork(),
|
filter.isPreventPublicBtcNetwork(),
|
||||||
filter.getBtcNodes(),
|
filter.getXmrNodes(),
|
||||||
filter.getDisableTradeBelowVersion(),
|
filter.getDisableTradeBelowVersion(),
|
||||||
filter.getMediators(),
|
filter.getMediators(),
|
||||||
filter.getRefundAgents(),
|
filter.getRefundAgents(),
|
||||||
|
@ -134,7 +134,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
||||||
filter.getSeedNodes(),
|
filter.getSeedNodes(),
|
||||||
filter.getPriceRelayNodes(),
|
filter.getPriceRelayNodes(),
|
||||||
filter.isPreventPublicBtcNetwork(),
|
filter.isPreventPublicBtcNetwork(),
|
||||||
filter.getBtcNodes(),
|
filter.getXmrNodes(),
|
||||||
filter.getDisableTradeBelowVersion(),
|
filter.getDisableTradeBelowVersion(),
|
||||||
filter.getMediators(),
|
filter.getMediators(),
|
||||||
filter.getRefundAgents(),
|
filter.getRefundAgents(),
|
||||||
|
@ -162,7 +162,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
||||||
List<String> seedNodes,
|
List<String> seedNodes,
|
||||||
List<String> priceRelayNodes,
|
List<String> priceRelayNodes,
|
||||||
boolean preventPublicBtcNetwork,
|
boolean preventPublicBtcNetwork,
|
||||||
List<String> btcNodes,
|
List<String> xmrNodes,
|
||||||
String disableTradeBelowVersion,
|
String disableTradeBelowVersion,
|
||||||
List<String> mediators,
|
List<String> mediators,
|
||||||
List<String> refundAgents,
|
List<String> refundAgents,
|
||||||
|
@ -185,7 +185,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
||||||
seedNodes,
|
seedNodes,
|
||||||
priceRelayNodes,
|
priceRelayNodes,
|
||||||
preventPublicBtcNetwork,
|
preventPublicBtcNetwork,
|
||||||
btcNodes,
|
xmrNodes,
|
||||||
disableTradeBelowVersion,
|
disableTradeBelowVersion,
|
||||||
mediators,
|
mediators,
|
||||||
refundAgents,
|
refundAgents,
|
||||||
|
@ -219,7 +219,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
||||||
List<String> seedNodes,
|
List<String> seedNodes,
|
||||||
List<String> priceRelayNodes,
|
List<String> priceRelayNodes,
|
||||||
boolean preventPublicBtcNetwork,
|
boolean preventPublicBtcNetwork,
|
||||||
List<String> btcNodes,
|
List<String> xmrNodes,
|
||||||
String disableTradeBelowVersion,
|
String disableTradeBelowVersion,
|
||||||
List<String> mediators,
|
List<String> mediators,
|
||||||
List<String> refundAgents,
|
List<String> refundAgents,
|
||||||
|
@ -245,7 +245,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
||||||
this.seedNodes = seedNodes;
|
this.seedNodes = seedNodes;
|
||||||
this.priceRelayNodes = priceRelayNodes;
|
this.priceRelayNodes = priceRelayNodes;
|
||||||
this.preventPublicBtcNetwork = preventPublicBtcNetwork;
|
this.preventPublicBtcNetwork = preventPublicBtcNetwork;
|
||||||
this.btcNodes = btcNodes;
|
this.xmrNodes = xmrNodes;
|
||||||
this.disableTradeBelowVersion = disableTradeBelowVersion;
|
this.disableTradeBelowVersion = disableTradeBelowVersion;
|
||||||
this.mediators = mediators;
|
this.mediators = mediators;
|
||||||
this.refundAgents = refundAgents;
|
this.refundAgents = refundAgents;
|
||||||
|
@ -286,7 +286,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
||||||
.addAllSeedNodes(seedNodes)
|
.addAllSeedNodes(seedNodes)
|
||||||
.addAllPriceRelayNodes(priceRelayNodes)
|
.addAllPriceRelayNodes(priceRelayNodes)
|
||||||
.setPreventPublicBtcNetwork(preventPublicBtcNetwork)
|
.setPreventPublicBtcNetwork(preventPublicBtcNetwork)
|
||||||
.addAllBtcNodes(btcNodes)
|
.addAllXmrNodes(xmrNodes)
|
||||||
.setDisableTradeBelowVersion(disableTradeBelowVersion)
|
.setDisableTradeBelowVersion(disableTradeBelowVersion)
|
||||||
.addAllMediators(mediators)
|
.addAllMediators(mediators)
|
||||||
.addAllRefundAgents(refundAgents)
|
.addAllRefundAgents(refundAgents)
|
||||||
|
@ -323,7 +323,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
||||||
ProtoUtil.protocolStringListToList(proto.getSeedNodesList()),
|
ProtoUtil.protocolStringListToList(proto.getSeedNodesList()),
|
||||||
ProtoUtil.protocolStringListToList(proto.getPriceRelayNodesList()),
|
ProtoUtil.protocolStringListToList(proto.getPriceRelayNodesList()),
|
||||||
proto.getPreventPublicBtcNetwork(),
|
proto.getPreventPublicBtcNetwork(),
|
||||||
ProtoUtil.protocolStringListToList(proto.getBtcNodesList()),
|
ProtoUtil.protocolStringListToList(proto.getXmrNodesList()),
|
||||||
proto.getDisableTradeBelowVersion(),
|
proto.getDisableTradeBelowVersion(),
|
||||||
ProtoUtil.protocolStringListToList(proto.getMediatorsList()),
|
ProtoUtil.protocolStringListToList(proto.getMediatorsList()),
|
||||||
ProtoUtil.protocolStringListToList(proto.getRefundAgentsList()),
|
ProtoUtil.protocolStringListToList(proto.getRefundAgentsList()),
|
||||||
|
@ -366,7 +366,7 @@ public final class Filter implements ProtectedStoragePayload, ExpirablePayload {
|
||||||
",\n seedNodes=" + seedNodes +
|
",\n seedNodes=" + seedNodes +
|
||||||
",\n priceRelayNodes=" + priceRelayNodes +
|
",\n priceRelayNodes=" + priceRelayNodes +
|
||||||
",\n preventPublicBtcNetwork=" + preventPublicBtcNetwork +
|
",\n preventPublicBtcNetwork=" + preventPublicBtcNetwork +
|
||||||
",\n btcNodes=" + btcNodes +
|
",\n xmrNodes=" + xmrNodes +
|
||||||
",\n signatureAsBase64='" + signatureAsBase64 + '\'' +
|
",\n signatureAsBase64='" + signatureAsBase64 + '\'' +
|
||||||
",\n signerPubKeyAsHex='" + signerPubKeyAsHex + '\'' +
|
",\n signerPubKeyAsHex='" + signerPubKeyAsHex + '\'' +
|
||||||
",\n ownerPubKeyBytes=" + Utilities.bytesAsHexString(ownerPubKeyBytes) +
|
",\n ownerPubKeyBytes=" + Utilities.bytesAsHexString(ownerPubKeyBytes) +
|
||||||
|
|
|
@ -28,7 +28,7 @@ import haveno.core.payment.payload.PaymentMethod;
|
||||||
import haveno.core.provider.ProvidersRepository;
|
import haveno.core.provider.ProvidersRepository;
|
||||||
import haveno.core.user.Preferences;
|
import haveno.core.user.Preferences;
|
||||||
import haveno.core.user.User;
|
import haveno.core.user.User;
|
||||||
import haveno.core.xmr.nodes.BtcNodes;
|
import haveno.core.xmr.nodes.XmrNodes;
|
||||||
import haveno.network.p2p.NodeAddress;
|
import haveno.network.p2p.NodeAddress;
|
||||||
import haveno.network.p2p.P2PService;
|
import haveno.network.p2p.P2PService;
|
||||||
import haveno.network.p2p.P2PServiceListener;
|
import haveno.network.p2p.P2PServiceListener;
|
||||||
|
@ -69,7 +69,7 @@ import static org.bitcoinj.core.Utils.HEX;
|
||||||
public class FilterManager {
|
public class FilterManager {
|
||||||
private static final String BANNED_PRICE_RELAY_NODES = "bannedPriceRelayNodes";
|
private static final String BANNED_PRICE_RELAY_NODES = "bannedPriceRelayNodes";
|
||||||
private static final String BANNED_SEED_NODES = "bannedSeedNodes";
|
private static final String BANNED_SEED_NODES = "bannedSeedNodes";
|
||||||
private static final String BANNED_BTC_NODES = "bannedBtcNodes";
|
private static final String BANNED_XMR_NODES = "bannedXmrNodes";
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Listener
|
// Listener
|
||||||
|
@ -497,7 +497,7 @@ public class FilterManager {
|
||||||
// nodes at the next startup and don't update the list in the P2P network domain.
|
// nodes at the next startup and don't update the list in the P2P network domain.
|
||||||
// We persist it to the property file which is read before any other initialisation.
|
// We persist it to the property file which is read before any other initialisation.
|
||||||
saveBannedNodes(BANNED_SEED_NODES, newFilter.getSeedNodes());
|
saveBannedNodes(BANNED_SEED_NODES, newFilter.getSeedNodes());
|
||||||
saveBannedNodes(BANNED_BTC_NODES, newFilter.getBtcNodes());
|
saveBannedNodes(BANNED_XMR_NODES, newFilter.getXmrNodes());
|
||||||
|
|
||||||
// Banned price relay nodes we can apply at runtime
|
// Banned price relay nodes we can apply at runtime
|
||||||
List<String> priceRelayNodes = newFilter.getPriceRelayNodes();
|
List<String> priceRelayNodes = newFilter.getPriceRelayNodes();
|
||||||
|
@ -508,8 +508,8 @@ public class FilterManager {
|
||||||
|
|
||||||
//TODO should be moved to client with listening on onFilterAdded
|
//TODO should be moved to client with listening on onFilterAdded
|
||||||
if (newFilter.isPreventPublicBtcNetwork() &&
|
if (newFilter.isPreventPublicBtcNetwork() &&
|
||||||
preferences.getBitcoinNodesOptionOrdinal() == BtcNodes.BitcoinNodesOption.PUBLIC.ordinal()) {
|
preferences.getMoneroNodesOptionOrdinal() == XmrNodes.MoneroNodesOption.PUBLIC.ordinal()) {
|
||||||
preferences.setBitcoinNodesOptionOrdinal(BtcNodes.BitcoinNodesOption.PROVIDED.ordinal());
|
preferences.setMoneroNodesOptionOrdinal(XmrNodes.MoneroNodesOption.PROVIDED.ordinal());
|
||||||
}
|
}
|
||||||
|
|
||||||
listeners.forEach(e -> e.onFilterAdded(newFilter));
|
listeners.forEach(e -> e.onFilterAdded(newFilter));
|
||||||
|
@ -541,7 +541,7 @@ public class FilterManager {
|
||||||
|
|
||||||
// Clears options files from banned nodes
|
// Clears options files from banned nodes
|
||||||
private void clearBannedNodes() {
|
private void clearBannedNodes() {
|
||||||
saveBannedNodes(BANNED_BTC_NODES, null);
|
saveBannedNodes(BANNED_XMR_NODES, null);
|
||||||
saveBannedNodes(BANNED_SEED_NODES, null);
|
saveBannedNodes(BANNED_SEED_NODES, null);
|
||||||
saveBannedNodes(BANNED_PRICE_RELAY_NODES, null);
|
saveBannedNodes(BANNED_PRICE_RELAY_NODES, null);
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ import haveno.core.locale.TradeCurrency;
|
||||||
import haveno.core.payment.PaymentAccount;
|
import haveno.core.payment.PaymentAccount;
|
||||||
import haveno.core.payment.PaymentAccountUtil;
|
import haveno.core.payment.PaymentAccountUtil;
|
||||||
import haveno.core.xmr.MoneroNodeSettings;
|
import haveno.core.xmr.MoneroNodeSettings;
|
||||||
import haveno.core.xmr.nodes.BtcNodes;
|
import haveno.core.xmr.nodes.XmrNodes;
|
||||||
import haveno.core.xmr.nodes.LocalBitcoinNode;
|
import haveno.core.xmr.nodes.LocalBitcoinNode;
|
||||||
import haveno.core.xmr.wallet.Restrictions;
|
import haveno.core.xmr.wallet.Restrictions;
|
||||||
import haveno.network.p2p.network.BridgeAddressProvider;
|
import haveno.network.p2p.network.BridgeAddressProvider;
|
||||||
|
@ -154,7 +154,7 @@ public final class Preferences implements PersistedDataHost, BridgeAddressProvid
|
||||||
private final PersistenceManager<PreferencesPayload> persistenceManager;
|
private final PersistenceManager<PreferencesPayload> persistenceManager;
|
||||||
private final Config config;
|
private final Config config;
|
||||||
private final LocalBitcoinNode localBitcoinNode;
|
private final LocalBitcoinNode localBitcoinNode;
|
||||||
private final String btcNodesFromOptions;
|
private final String xmrNodesFromOptions;
|
||||||
@Getter
|
@Getter
|
||||||
private final BooleanProperty useStandbyModeProperty = new SimpleBooleanProperty(prefPayload.isUseStandbyMode());
|
private final BooleanProperty useStandbyModeProperty = new SimpleBooleanProperty(prefPayload.isUseStandbyMode());
|
||||||
|
|
||||||
|
@ -166,12 +166,12 @@ public final class Preferences implements PersistedDataHost, BridgeAddressProvid
|
||||||
public Preferences(PersistenceManager<PreferencesPayload> persistenceManager,
|
public Preferences(PersistenceManager<PreferencesPayload> persistenceManager,
|
||||||
Config config,
|
Config config,
|
||||||
LocalBitcoinNode localBitcoinNode,
|
LocalBitcoinNode localBitcoinNode,
|
||||||
@Named(Config.BTC_NODES) String btcNodesFromOptions) {
|
@Named(Config.XMR_NODES) String xmrNodesFromOptions) {
|
||||||
|
|
||||||
this.persistenceManager = persistenceManager;
|
this.persistenceManager = persistenceManager;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.localBitcoinNode = localBitcoinNode;
|
this.localBitcoinNode = localBitcoinNode;
|
||||||
this.btcNodesFromOptions = btcNodesFromOptions;
|
this.xmrNodesFromOptions = xmrNodesFromOptions;
|
||||||
|
|
||||||
useAnimationsProperty.addListener((ov) -> {
|
useAnimationsProperty.addListener((ov) -> {
|
||||||
prefPayload.setUseAnimations(useAnimationsProperty.get());
|
prefPayload.setUseAnimations(useAnimationsProperty.get());
|
||||||
|
@ -303,16 +303,16 @@ public final class Preferences implements PersistedDataHost, BridgeAddressProvid
|
||||||
dontShowAgainMapAsObservable.putAll(getDontShowAgainMap());
|
dontShowAgainMapAsObservable.putAll(getDontShowAgainMap());
|
||||||
|
|
||||||
// Override settings with options if set
|
// Override settings with options if set
|
||||||
if (config.useTorForBtcOptionSetExplicitly)
|
if (config.useTorForXmrOptionSetExplicitly)
|
||||||
setUseTorForBitcoinJ(config.useTorForBtc);
|
setUseTorForMonero(config.useTorForXmr);
|
||||||
|
|
||||||
if (btcNodesFromOptions != null && !btcNodesFromOptions.isEmpty()) {
|
if (xmrNodesFromOptions != null && !xmrNodesFromOptions.isEmpty()) {
|
||||||
if (getBitcoinNodes() != null && !getBitcoinNodes().equals(btcNodesFromOptions)) {
|
if (getMoneroNodes() != null && !getMoneroNodes().equals(xmrNodesFromOptions)) {
|
||||||
log.warn("The Bitcoin node(s) from the program argument and the one(s) persisted in the UI are different. " +
|
log.warn("The Bitcoin node(s) from the program argument and the one(s) persisted in the UI are different. " +
|
||||||
"The Bitcoin node(s) {} from the program argument will be used.", btcNodesFromOptions);
|
"The Bitcoin node(s) {} from the program argument will be used.", xmrNodesFromOptions);
|
||||||
}
|
}
|
||||||
setBitcoinNodes(btcNodesFromOptions);
|
setMoneroNodes(xmrNodesFromOptions);
|
||||||
setBitcoinNodesOptionOrdinal(BtcNodes.BitcoinNodesOption.CUSTOM.ordinal());
|
setMoneroNodesOptionOrdinal(XmrNodes.MoneroNodesOption.CUSTOM.ordinal());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prefPayload.getIgnoreDustThreshold() < Restrictions.getMinNonDustOutput().value) {
|
if (prefPayload.getIgnoreDustThreshold() < Restrictions.getMinNonDustOutput().value) {
|
||||||
|
@ -492,8 +492,8 @@ public final class Preferences implements PersistedDataHost, BridgeAddressProvid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUseTorForBitcoinJ(boolean useTorForBitcoinJ) {
|
public void setUseTorForMonero(boolean useTorForMonero) {
|
||||||
prefPayload.setUseTorForBitcoinJ(useTorForBitcoinJ);
|
prefPayload.setUseTorForMonero(useTorForMonero);
|
||||||
requestPersistence();
|
requestPersistence();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -577,8 +577,8 @@ public final class Preferences implements PersistedDataHost, BridgeAddressProvid
|
||||||
requestPersistence();
|
requestPersistence();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBitcoinNodes(String bitcoinNodes) {
|
public void setMoneroNodes(String bitcoinNodes) {
|
||||||
prefPayload.setBitcoinNodes(bitcoinNodes);
|
prefPayload.setMoneroNodes(bitcoinNodes);
|
||||||
requestPersistence();
|
requestPersistence();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -663,8 +663,8 @@ public final class Preferences implements PersistedDataHost, BridgeAddressProvid
|
||||||
persistenceManager.forcePersistNow();
|
persistenceManager.forcePersistNow();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBitcoinNodesOptionOrdinal(int bitcoinNodesOptionOrdinal) {
|
public void setMoneroNodesOptionOrdinal(int bitcoinNodesOptionOrdinal) {
|
||||||
prefPayload.setBitcoinNodesOptionOrdinal(bitcoinNodesOptionOrdinal);
|
prefPayload.setMoneroNodesOptionOrdinal(bitcoinNodesOptionOrdinal);
|
||||||
requestPersistence();
|
requestPersistence();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -793,18 +793,8 @@ public final class Preferences implements PersistedDataHost, BridgeAddressProvid
|
||||||
return !prefPayload.getDontShowAgainMap().containsKey(key) || !prefPayload.getDontShowAgainMap().get(key);
|
return !prefPayload.getDontShowAgainMap().containsKey(key) || !prefPayload.getDontShowAgainMap().get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getUseTorForBitcoinJ() {
|
public boolean getUseTorForMonero() {
|
||||||
// We override the useTorForBitcoinJ and set it to false if we will use a
|
return prefPayload.isUseTorForMonero();
|
||||||
// localhost Bitcoin node or if we are not on mainnet, unless the useTorForBtc
|
|
||||||
// parameter is explicitly provided. On testnet there are very few Bitcoin tor
|
|
||||||
// nodes and we don't provide tor nodes.
|
|
||||||
|
|
||||||
if ((!Config.baseCurrencyNetwork().isMainnet()
|
|
||||||
|| localBitcoinNode.shouldBeUsed())
|
|
||||||
&& !config.useTorForBtcOptionSetExplicitly)
|
|
||||||
return false;
|
|
||||||
else
|
|
||||||
return prefPayload.isUseTorForBitcoinJ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getBuyerSecurityDepositAsPercent(PaymentAccount paymentAccount) {
|
public double getBuyerSecurityDepositAsPercent(PaymentAccount paymentAccount) {
|
||||||
|
@ -869,7 +859,7 @@ public final class Preferences implements PersistedDataHost, BridgeAddressProvid
|
||||||
|
|
||||||
void setPreferredTradeCurrency(TradeCurrency preferredTradeCurrency);
|
void setPreferredTradeCurrency(TradeCurrency preferredTradeCurrency);
|
||||||
|
|
||||||
void setUseTorForBitcoinJ(boolean useTorForBitcoinJ);
|
void setUseTorForMonero(boolean useTorForMonero);
|
||||||
|
|
||||||
void setShowOwnOffersInOfferBook(boolean showOwnOffersInOfferBook);
|
void setShowOwnOffersInOfferBook(boolean showOwnOffersInOfferBook);
|
||||||
|
|
||||||
|
@ -899,7 +889,7 @@ public final class Preferences implements PersistedDataHost, BridgeAddressProvid
|
||||||
|
|
||||||
void setSortMarketCurrenciesNumerically(boolean sortMarketCurrenciesNumerically);
|
void setSortMarketCurrenciesNumerically(boolean sortMarketCurrenciesNumerically);
|
||||||
|
|
||||||
void setBitcoinNodes(String bitcoinNodes);
|
void setMoneroNodes(String bitcoinNodes);
|
||||||
|
|
||||||
void setUseCustomWithdrawalTxFee(boolean useCustomWithdrawalTxFee);
|
void setUseCustomWithdrawalTxFee(boolean useCustomWithdrawalTxFee);
|
||||||
|
|
||||||
|
@ -931,7 +921,7 @@ public final class Preferences implements PersistedDataHost, BridgeAddressProvid
|
||||||
|
|
||||||
void setCustomBridges(String customBridges);
|
void setCustomBridges(String customBridges);
|
||||||
|
|
||||||
void setBitcoinNodesOptionOrdinal(int bitcoinNodesOption);
|
void setMoneroNodesOptionOrdinal(int bitcoinNodesOption);
|
||||||
|
|
||||||
void setReferralId(String referralId);
|
void setReferralId(String referralId);
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ package haveno.core.user;
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.protobuf.Message;
|
import com.google.protobuf.Message;
|
||||||
|
|
||||||
import haveno.common.proto.ProtoUtil;
|
import haveno.common.proto.ProtoUtil;
|
||||||
import haveno.common.proto.persistable.PersistableEnvelope;
|
import haveno.common.proto.persistable.PersistableEnvelope;
|
||||||
import haveno.core.locale.Country;
|
import haveno.core.locale.Country;
|
||||||
|
@ -57,7 +58,7 @@ public final class PreferencesPayload implements PersistableEnvelope {
|
||||||
private boolean autoSelectArbitrators = true;
|
private boolean autoSelectArbitrators = true;
|
||||||
private Map<String, Boolean> dontShowAgainMap = new HashMap<>();
|
private Map<String, Boolean> dontShowAgainMap = new HashMap<>();
|
||||||
private boolean tacAccepted;
|
private boolean tacAccepted;
|
||||||
private boolean useTorForBitcoinJ = true;
|
private boolean useTorForMonero = true;
|
||||||
private boolean showOwnOffersInOfferBook = true;
|
private boolean showOwnOffersInOfferBook = true;
|
||||||
@Nullable
|
@Nullable
|
||||||
private TradeCurrency preferredTradeCurrency;
|
private TradeCurrency preferredTradeCurrency;
|
||||||
|
@ -81,8 +82,8 @@ public final class PreferencesPayload implements PersistableEnvelope {
|
||||||
private boolean sortMarketCurrenciesNumerically = true;
|
private boolean sortMarketCurrenciesNumerically = true;
|
||||||
private boolean usePercentageBasedPrice = true;
|
private boolean usePercentageBasedPrice = true;
|
||||||
private Map<String, String> peerTagMap = new HashMap<>();
|
private Map<String, String> peerTagMap = new HashMap<>();
|
||||||
// custom btc nodes
|
// custom xmr nodes
|
||||||
private String bitcoinNodes = "";
|
private String moneroNodes = "";
|
||||||
private List<String> ignoreTradersList = new ArrayList<>();
|
private List<String> ignoreTradersList = new ArrayList<>();
|
||||||
private String directoryChooserPath;
|
private String directoryChooserPath;
|
||||||
|
|
||||||
|
@ -96,7 +97,7 @@ public final class PreferencesPayload implements PersistableEnvelope {
|
||||||
private int torTransportOrdinal;
|
private int torTransportOrdinal;
|
||||||
@Nullable
|
@Nullable
|
||||||
private String customBridges;
|
private String customBridges;
|
||||||
private int bitcoinNodesOptionOrdinal;
|
private int moneroNodesOptionOrdinal;
|
||||||
@Nullable
|
@Nullable
|
||||||
private String referralId;
|
private String referralId;
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -159,7 +160,7 @@ public final class PreferencesPayload implements PersistableEnvelope {
|
||||||
.setAutoSelectArbitrators(autoSelectArbitrators)
|
.setAutoSelectArbitrators(autoSelectArbitrators)
|
||||||
.putAllDontShowAgainMap(dontShowAgainMap)
|
.putAllDontShowAgainMap(dontShowAgainMap)
|
||||||
.setTacAccepted(tacAccepted)
|
.setTacAccepted(tacAccepted)
|
||||||
.setUseTorForBitcoinJ(useTorForBitcoinJ)
|
.setUseTorForMonero(useTorForMonero)
|
||||||
.setShowOwnOffersInOfferBook(showOwnOffersInOfferBook)
|
.setShowOwnOffersInOfferBook(showOwnOffersInOfferBook)
|
||||||
.setWithdrawalTxFeeInVbytes(withdrawalTxFeeInVbytes)
|
.setWithdrawalTxFeeInVbytes(withdrawalTxFeeInVbytes)
|
||||||
.setUseCustomWithdrawalTxFee(useCustomWithdrawalTxFee)
|
.setUseCustomWithdrawalTxFee(useCustomWithdrawalTxFee)
|
||||||
|
@ -169,14 +170,14 @@ public final class PreferencesPayload implements PersistableEnvelope {
|
||||||
.setSortMarketCurrenciesNumerically(sortMarketCurrenciesNumerically)
|
.setSortMarketCurrenciesNumerically(sortMarketCurrenciesNumerically)
|
||||||
.setUsePercentageBasedPrice(usePercentageBasedPrice)
|
.setUsePercentageBasedPrice(usePercentageBasedPrice)
|
||||||
.putAllPeerTagMap(peerTagMap)
|
.putAllPeerTagMap(peerTagMap)
|
||||||
.setBitcoinNodes(bitcoinNodes)
|
.setMoneroNodes(moneroNodes)
|
||||||
.addAllIgnoreTradersList(ignoreTradersList)
|
.addAllIgnoreTradersList(ignoreTradersList)
|
||||||
.setDirectoryChooserPath(directoryChooserPath)
|
.setDirectoryChooserPath(directoryChooserPath)
|
||||||
.setUseAnimations(useAnimations)
|
.setUseAnimations(useAnimations)
|
||||||
.setCssTheme(cssTheme)
|
.setCssTheme(cssTheme)
|
||||||
.setBridgeOptionOrdinal(bridgeOptionOrdinal)
|
.setBridgeOptionOrdinal(bridgeOptionOrdinal)
|
||||||
.setTorTransportOrdinal(torTransportOrdinal)
|
.setTorTransportOrdinal(torTransportOrdinal)
|
||||||
.setBitcoinNodesOptionOrdinal(bitcoinNodesOptionOrdinal)
|
.setMoneroNodesOptionOrdinal(moneroNodesOptionOrdinal)
|
||||||
.setUseSoundForMobileNotifications(useSoundForMobileNotifications)
|
.setUseSoundForMobileNotifications(useSoundForMobileNotifications)
|
||||||
.setUseTradeNotifications(useTradeNotifications)
|
.setUseTradeNotifications(useTradeNotifications)
|
||||||
.setUseMarketNotifications(useMarketNotifications)
|
.setUseMarketNotifications(useMarketNotifications)
|
||||||
|
@ -241,7 +242,7 @@ public final class PreferencesPayload implements PersistableEnvelope {
|
||||||
proto.getAutoSelectArbitrators(),
|
proto.getAutoSelectArbitrators(),
|
||||||
Maps.newHashMap(proto.getDontShowAgainMapMap()),
|
Maps.newHashMap(proto.getDontShowAgainMapMap()),
|
||||||
proto.getTacAccepted(),
|
proto.getTacAccepted(),
|
||||||
proto.getUseTorForBitcoinJ(),
|
proto.getUseTorForMonero(),
|
||||||
proto.getShowOwnOffersInOfferBook(),
|
proto.getShowOwnOffersInOfferBook(),
|
||||||
proto.hasPreferredTradeCurrency() ? TradeCurrency.fromProto(proto.getPreferredTradeCurrency()) : null,
|
proto.hasPreferredTradeCurrency() ? TradeCurrency.fromProto(proto.getPreferredTradeCurrency()) : null,
|
||||||
proto.getWithdrawalTxFeeInVbytes(),
|
proto.getWithdrawalTxFeeInVbytes(),
|
||||||
|
@ -258,7 +259,7 @@ public final class PreferencesPayload implements PersistableEnvelope {
|
||||||
proto.getSortMarketCurrenciesNumerically(),
|
proto.getSortMarketCurrenciesNumerically(),
|
||||||
proto.getUsePercentageBasedPrice(),
|
proto.getUsePercentageBasedPrice(),
|
||||||
Maps.newHashMap(proto.getPeerTagMapMap()),
|
Maps.newHashMap(proto.getPeerTagMapMap()),
|
||||||
proto.getBitcoinNodes(),
|
proto.getMoneroNodes(),
|
||||||
proto.getIgnoreTradersListList(),
|
proto.getIgnoreTradersListList(),
|
||||||
proto.getDirectoryChooserPath(),
|
proto.getDirectoryChooserPath(),
|
||||||
proto.getUseAnimations(),
|
proto.getUseAnimations(),
|
||||||
|
@ -268,7 +269,7 @@ public final class PreferencesPayload implements PersistableEnvelope {
|
||||||
proto.getBridgeOptionOrdinal(),
|
proto.getBridgeOptionOrdinal(),
|
||||||
proto.getTorTransportOrdinal(),
|
proto.getTorTransportOrdinal(),
|
||||||
ProtoUtil.stringOrNullFromProto(proto.getCustomBridges()),
|
ProtoUtil.stringOrNullFromProto(proto.getCustomBridges()),
|
||||||
proto.getBitcoinNodesOptionOrdinal(),
|
proto.getMoneroNodesOptionOrdinal(),
|
||||||
proto.getReferralId().isEmpty() ? null : proto.getReferralId(),
|
proto.getReferralId().isEmpty() ? null : proto.getReferralId(),
|
||||||
proto.getPhoneKeyAndToken().isEmpty() ? null : proto.getPhoneKeyAndToken(),
|
proto.getPhoneKeyAndToken().isEmpty() ? null : proto.getPhoneKeyAndToken(),
|
||||||
proto.getUseSoundForMobileNotifications(),
|
proto.getUseSoundForMobileNotifications(),
|
||||||
|
|
|
@ -27,7 +27,7 @@ import haveno.core.provider.price.PriceFeedService;
|
||||||
import haveno.core.xmr.model.AddressEntryList;
|
import haveno.core.xmr.model.AddressEntryList;
|
||||||
import haveno.core.xmr.model.EncryptedConnectionList;
|
import haveno.core.xmr.model.EncryptedConnectionList;
|
||||||
import haveno.core.xmr.model.XmrAddressEntryList;
|
import haveno.core.xmr.model.XmrAddressEntryList;
|
||||||
import haveno.core.xmr.nodes.BtcNodes;
|
import haveno.core.xmr.nodes.XmrNodes;
|
||||||
import haveno.core.xmr.setup.RegTestHost;
|
import haveno.core.xmr.setup.RegTestHost;
|
||||||
import haveno.core.xmr.setup.WalletsSetup;
|
import haveno.core.xmr.setup.WalletsSetup;
|
||||||
import haveno.core.xmr.wallet.BtcWalletService;
|
import haveno.core.xmr.wallet.BtcWalletService;
|
||||||
|
@ -74,7 +74,7 @@ public class MoneroModule extends AppModule {
|
||||||
bindConstant().annotatedWith(named(Config.XMR_NODE)).to(config.xmrNode);
|
bindConstant().annotatedWith(named(Config.XMR_NODE)).to(config.xmrNode);
|
||||||
bindConstant().annotatedWith(named(Config.XMR_NODE_USERNAME)).to(config.xmrNodeUsername);
|
bindConstant().annotatedWith(named(Config.XMR_NODE_USERNAME)).to(config.xmrNodeUsername);
|
||||||
bindConstant().annotatedWith(named(Config.XMR_NODE_PASSWORD)).to(config.xmrNodePassword);
|
bindConstant().annotatedWith(named(Config.XMR_NODE_PASSWORD)).to(config.xmrNodePassword);
|
||||||
bindConstant().annotatedWith(named(Config.BTC_NODES)).to(config.btcNodes);
|
bindConstant().annotatedWith(named(Config.XMR_NODES)).to(config.xmrNodes);
|
||||||
bindConstant().annotatedWith(named(Config.USER_AGENT)).to(config.userAgent);
|
bindConstant().annotatedWith(named(Config.USER_AGENT)).to(config.userAgent);
|
||||||
bindConstant().annotatedWith(named(Config.NUM_CONNECTIONS_FOR_BTC)).to(config.numConnectionsForBtc);
|
bindConstant().annotatedWith(named(Config.NUM_CONNECTIONS_FOR_BTC)).to(config.numConnectionsForBtc);
|
||||||
bindConstant().annotatedWith(named(Config.USE_ALL_PROVIDED_NODES)).to(config.useAllProvidedNodes);
|
bindConstant().annotatedWith(named(Config.USE_ALL_PROVIDED_NODES)).to(config.useAllProvidedNodes);
|
||||||
|
@ -89,7 +89,7 @@ public class MoneroModule extends AppModule {
|
||||||
bind(BtcWalletService.class).in(Singleton.class);
|
bind(BtcWalletService.class).in(Singleton.class);
|
||||||
bind(TradeWalletService.class).in(Singleton.class);
|
bind(TradeWalletService.class).in(Singleton.class);
|
||||||
bind(NonBsqCoinSelector.class).in(Singleton.class);
|
bind(NonBsqCoinSelector.class).in(Singleton.class);
|
||||||
bind(BtcNodes.class).in(Singleton.class);
|
bind(XmrNodes.class).in(Singleton.class);
|
||||||
bind(Balances.class).in(Singleton.class);
|
bind(Balances.class).in(Singleton.class);
|
||||||
|
|
||||||
bind(ProvidersRepository.class).in(Singleton.class);
|
bind(ProvidersRepository.class).in(Singleton.class);
|
||||||
|
|
|
@ -148,7 +148,7 @@ public class EncryptedConnectionList implements PersistableEnvelope, PersistedDa
|
||||||
writeLock.unlock();
|
writeLock.unlock();
|
||||||
}
|
}
|
||||||
if (currentValue != null) {
|
if (currentValue != null) {
|
||||||
throw new IllegalStateException(String.format("There exists already an connection for \"%s\"", connection.getUri()));
|
throw new IllegalStateException(String.format("There exists already a connection for \"%s\"", connection.getUri()));
|
||||||
}
|
}
|
||||||
requestPersistence();
|
requestPersistence();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,178 +0,0 @@
|
||||||
/*
|
|
||||||
* This file is part of Haveno.
|
|
||||||
*
|
|
||||||
* Haveno 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.
|
|
||||||
*
|
|
||||||
* Haveno 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 Haveno. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package haveno.core.xmr.nodes;
|
|
||||||
|
|
||||||
import haveno.common.config.Config;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkArgument;
|
|
||||||
|
|
||||||
// Managed here: https://github.com/bisq-network/roles/issues/39
|
|
||||||
@Slf4j
|
|
||||||
public class BtcNodes {
|
|
||||||
|
|
||||||
public enum BitcoinNodesOption {
|
|
||||||
PROVIDED,
|
|
||||||
CUSTOM,
|
|
||||||
PUBLIC
|
|
||||||
}
|
|
||||||
|
|
||||||
// For other base currencies or testnet we ignore provided nodes
|
|
||||||
public List<BtcNode> getProvidedBtcNodes() {
|
|
||||||
return useProvidedBtcNodes() ?
|
|
||||||
Arrays.asList(
|
|
||||||
// emzy
|
|
||||||
new BtcNode("btcnode1.emzy.de", "emzybtc3ewh7zihpkdvuwlgxrhzcxy2p5fvjggp7ngjbxcytxvt4rjid.onion", "167.86.90.239", BtcNode.DEFAULT_PORT, "@emzy"),
|
|
||||||
new BtcNode("btcnode2.emzy.de", "emzybtc25oddoa2prol2znpz2axnrg6k77xwgirmhv7igoiucddsxiad.onion", "62.171.129.32", BtcNode.DEFAULT_PORT, "@emzy"),
|
|
||||||
new BtcNode("btcnode3.emzy.de", "emzybtc5bnpb2o6gh54oquiox54o4r7yn4a2wiiwzrjonlouaibm2zid.onion", "136.243.53.40", BtcNode.DEFAULT_PORT, "@emzy"),
|
|
||||||
new BtcNode("btcnode4.emzy.de", "emzybtc454ewbviqnmgtgx3rgublsgkk23r4onbhidcv36wremue4kqd.onion", "135.181.215.237", BtcNode.DEFAULT_PORT, "@emzy"),
|
|
||||||
|
|
||||||
// ripcurlx
|
|
||||||
new BtcNode("bitcoin.christophatteneder.com", "catlnkpdm454ecngktyo4z22m5dlcvfvgzz4nt5l36eeczecrafslkqd.onion", "174.138.35.229", BtcNode.DEFAULT_PORT, "@Christoph"),
|
|
||||||
|
|
||||||
// mrosseel
|
|
||||||
new BtcNode("btc.vante.me", "bsqbtctulf2g4jtjsdfgl2ed7qs6zz5wqx27qnyiik7laockryvszqqd.onion", "94.23.21.80", BtcNode.DEFAULT_PORT, "@miker"),
|
|
||||||
new BtcNode("btc2.vante.me", "bsqbtcparrfihlwolt4xgjbf4cgqckvrvsfyvy6vhiqrnh4w6ghixoid.onion", "94.23.205.110", BtcNode.DEFAULT_PORT, "@miker"),
|
|
||||||
|
|
||||||
// sqrrm
|
|
||||||
new BtcNode("btc1.sqrrm.net", "jygcc54etaubgdpcvzgbihjaqbc37cstpvum5sjzvka4bibkp4wrgnqd.onion", "185.25.48.184", BtcNode.DEFAULT_PORT, "@sqrrm"),
|
|
||||||
new BtcNode("btc2.sqrrm.net", "h32haomoe52ljz6qopedsocvotvoj5lm2zmecfhdhawb3flbsf64l2qd.onion", "81.171.22.143", BtcNode.DEFAULT_PORT, "@sqrrm"),
|
|
||||||
|
|
||||||
// KanoczTomas
|
|
||||||
new BtcNode("btc.ispol.sk", "mbm6ffx6j5ygi2ck.onion", "193.58.196.212", BtcNode.DEFAULT_PORT, "@KanoczTomas"),
|
|
||||||
|
|
||||||
// Devin Bileck
|
|
||||||
new BtcNode("btc1.haveno.services", "devinbtctu7uctl7hly2juu3thbgeivfnvw3ckj3phy6nyvpnx66yeyd.onion", "172.105.21.216", BtcNode.DEFAULT_PORT, "@devinbileck"),
|
|
||||||
new BtcNode("btc2.haveno.services", "devinbtcyk643iruzfpaxw3on2jket7rbjmwygm42dmdyub3ietrbmid.onion", "173.255.240.205", BtcNode.DEFAULT_PORT, "@devinbileck"),
|
|
||||||
new BtcNode(null, "devinbtcmwkuitvxl3tfi5of4zau46ymeannkjv6fpnylkgf3q5fa3id.onion", null, BtcNode.DEFAULT_PORT, "@devinbileck"),
|
|
||||||
|
|
||||||
// m52go
|
|
||||||
new BtcNode(null, "rss2u4embqa6fzuaiuvpp6szklkdckrcfgv6zer3ngclkzclvstywjyd.onion", null, BtcNode.DEFAULT_PORT, "@m52go"),
|
|
||||||
// wiz
|
|
||||||
new BtcNode("node130.hnl.wiz.biz", "wizbit5555bsslwv4ctronnsgk5vh2w2pdx7v7eyuivlyuoteejk7lid.onion", "103.99.168.130", BtcNode.DEFAULT_PORT, "@wiz"),
|
|
||||||
new BtcNode("node140.hnl.wiz.biz", "jto2jfbsxhb6yvhcrrjddrgbakte6tgsy3c3z3prss64gndgvovvosyd.onion", "103.99.168.140", BtcNode.DEFAULT_PORT, "@wiz"),
|
|
||||||
new BtcNode("node210.fmt.wiz.biz", "rfqmn3qe36uaptkxhdvi74p4hyrzhir6vhmzb2hqryxodig4gue2zbyd.onion", "103.99.170.210", BtcNode.DEFAULT_PORT, "@wiz"),
|
|
||||||
new BtcNode("node220.fmt.wiz.biz", "azbpsh4arqlm6442wfimy7qr65bmha2zhgjg7wbaji6vvaug53hur2qd.onion", "103.99.170.220", BtcNode.DEFAULT_PORT, "@wiz")
|
|
||||||
) :
|
|
||||||
new ArrayList<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean useProvidedBtcNodes() {
|
|
||||||
return Config.baseCurrencyNetwork().isMainnet();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<BtcNodes.BtcNode> toBtcNodesList(Collection<String> nodes) {
|
|
||||||
return nodes.stream()
|
|
||||||
.filter(e -> !e.isEmpty())
|
|
||||||
.map(BtcNodes.BtcNode::fromFullAddress)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@EqualsAndHashCode
|
|
||||||
@Getter
|
|
||||||
public static class BtcNode {
|
|
||||||
private static final int DEFAULT_PORT = Config.baseCurrencyNetworkParameters().getPort(); //8333
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private final String onionAddress;
|
|
||||||
@Nullable
|
|
||||||
private final String hostName;
|
|
||||||
@Nullable
|
|
||||||
private final String operator; // null in case the user provides a list of custom btc nodes
|
|
||||||
@Nullable
|
|
||||||
private final String address; // IPv4 address
|
|
||||||
private int port = DEFAULT_PORT;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param fullAddress [IPv4 address:port or onion:port]
|
|
||||||
* @return BtcNode instance
|
|
||||||
*/
|
|
||||||
public static BtcNode fromFullAddress(String fullAddress) {
|
|
||||||
String[] parts = fullAddress.split("]");
|
|
||||||
checkArgument(parts.length > 0);
|
|
||||||
String host = "";
|
|
||||||
int port = DEFAULT_PORT;
|
|
||||||
if (parts[0].contains("[") && parts[0].contains(":")) {
|
|
||||||
// IPv6 address and optional port number
|
|
||||||
// address part delimited by square brackets e.g. [2a01:123:456:789::2]:8333
|
|
||||||
host = parts[0].replace("[", "").replace("]", "");
|
|
||||||
if (parts.length == 2)
|
|
||||||
port = Integer.parseInt(parts[1].replace(":", ""));
|
|
||||||
} else if (parts[0].contains(":") && !parts[0].contains(".")) {
|
|
||||||
// IPv6 address only; not delimited by square brackets
|
|
||||||
host = parts[0];
|
|
||||||
} else if (parts[0].contains(".")) {
|
|
||||||
// address and an optional port number
|
|
||||||
// e.g. 127.0.0.1:8333 or abcdef123xyz.onion:9999
|
|
||||||
parts = fullAddress.split(":");
|
|
||||||
checkArgument(parts.length > 0);
|
|
||||||
host = parts[0];
|
|
||||||
if (parts.length == 2)
|
|
||||||
port = Integer.parseInt(parts[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
checkArgument(host.length() > 0, "BtcNode address format not recognised");
|
|
||||||
return host.contains(".onion") ? new BtcNode(null, host, null, port, null) : new BtcNode(null, null, host, port, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BtcNode(@Nullable String hostName,
|
|
||||||
@Nullable String onionAddress,
|
|
||||||
@Nullable String address,
|
|
||||||
int port,
|
|
||||||
@Nullable String operator) {
|
|
||||||
this.hostName = hostName;
|
|
||||||
this.onionAddress = onionAddress;
|
|
||||||
this.address = address;
|
|
||||||
this.port = port;
|
|
||||||
this.operator = operator;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasOnionAddress() {
|
|
||||||
return onionAddress != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getHostNameOrAddress() {
|
|
||||||
if (hostName != null)
|
|
||||||
return hostName;
|
|
||||||
else
|
|
||||||
return address;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasClearNetAddress() {
|
|
||||||
return hostName != null || address != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "onionAddress='" + onionAddress + '\'' +
|
|
||||||
", hostName='" + hostName + '\'' +
|
|
||||||
", address='" + address + '\'' +
|
|
||||||
", port='" + port + '\'' +
|
|
||||||
", operator='" + operator;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -15,7 +15,7 @@ import java.net.Socket;
|
||||||
/**
|
/**
|
||||||
* Detects whether a Bitcoin node is running on localhost and contains logic for when to
|
* Detects whether a Bitcoin node is running on localhost and contains logic for when to
|
||||||
* ignore it. The query methods lazily trigger the needed checks and cache the results.
|
* ignore it. The query methods lazily trigger the needed checks and cache the results.
|
||||||
* @see haveno.common.config.Config#ignoreLocalBtcNode
|
* @see haveno.common.config.Config#ignoreLocalXmrNode
|
||||||
*/
|
*/
|
||||||
@Singleton
|
@Singleton
|
||||||
public class LocalBitcoinNode {
|
public class LocalBitcoinNode {
|
||||||
|
@ -49,7 +49,7 @@ public class LocalBitcoinNode {
|
||||||
*/
|
*/
|
||||||
public boolean shouldBeIgnored() {
|
public boolean shouldBeIgnored() {
|
||||||
BaseCurrencyNetwork baseCurrencyNetwork = config.baseCurrencyNetwork;
|
BaseCurrencyNetwork baseCurrencyNetwork = config.baseCurrencyNetwork;
|
||||||
return config.ignoreLocalBtcNode;
|
return config.ignoreLocalXmrNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -30,8 +30,8 @@ import org.slf4j.LoggerFactory;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class BtcNetworkConfig {
|
public class XmrNetworkConfig {
|
||||||
private static final Logger log = LoggerFactory.getLogger(BtcNetworkConfig.class);
|
private static final Logger log = LoggerFactory.getLogger(XmrNetworkConfig.class);
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private final Socks5Proxy proxy;
|
private final Socks5Proxy proxy;
|
||||||
|
@ -39,7 +39,7 @@ public class BtcNetworkConfig {
|
||||||
private final NetworkParameters parameters;
|
private final NetworkParameters parameters;
|
||||||
private final int socks5DiscoverMode;
|
private final int socks5DiscoverMode;
|
||||||
|
|
||||||
public BtcNetworkConfig(WalletConfig delegate, NetworkParameters parameters, int socks5DiscoverMode,
|
public XmrNetworkConfig(WalletConfig delegate, NetworkParameters parameters, int socks5DiscoverMode,
|
||||||
@Nullable Socks5Proxy proxy) {
|
@Nullable Socks5Proxy proxy) {
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.parameters = parameters;
|
this.parameters = parameters;
|
|
@ -18,7 +18,7 @@
|
||||||
package haveno.core.xmr.nodes;
|
package haveno.core.xmr.nodes;
|
||||||
|
|
||||||
import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy;
|
import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy;
|
||||||
import haveno.core.xmr.nodes.BtcNodes.BtcNode;
|
import haveno.core.xmr.nodes.XmrNodes.XmrNode;
|
||||||
import haveno.network.DnsLookupException;
|
import haveno.network.DnsLookupException;
|
||||||
import haveno.network.DnsLookupTor;
|
import haveno.network.DnsLookupTor;
|
||||||
import org.bitcoinj.core.PeerAddress;
|
import org.bitcoinj.core.PeerAddress;
|
||||||
|
@ -32,28 +32,28 @@ import java.net.InetSocketAddress;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
class BtcNodeConverter {
|
class XmrNodeConverter {
|
||||||
private static final Logger log = LoggerFactory.getLogger(BtcNodeConverter.class);
|
private static final Logger log = LoggerFactory.getLogger(XmrNodeConverter.class);
|
||||||
|
|
||||||
private final Facade facade;
|
private final Facade facade;
|
||||||
|
|
||||||
BtcNodeConverter() {
|
XmrNodeConverter() {
|
||||||
this.facade = new Facade();
|
this.facade = new Facade();
|
||||||
}
|
}
|
||||||
|
|
||||||
BtcNodeConverter(Facade facade) {
|
XmrNodeConverter(Facade facade) {
|
||||||
this.facade = facade;
|
this.facade = facade;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
PeerAddress convertOnionHost(BtcNode node) {
|
PeerAddress convertOnionHost(XmrNode node) {
|
||||||
// no DNS lookup for onion addresses
|
// no DNS lookup for onion addresses
|
||||||
String onionAddress = Objects.requireNonNull(node.getOnionAddress());
|
String onionAddress = Objects.requireNonNull(node.getOnionAddress());
|
||||||
return new PeerAddress(onionAddress, node.getPort());
|
return new PeerAddress(onionAddress, node.getPort());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
PeerAddress convertClearNode(BtcNode node) {
|
PeerAddress convertClearNode(XmrNode node) {
|
||||||
int port = node.getPort();
|
int port = node.getPort();
|
||||||
|
|
||||||
PeerAddress result = create(node.getHostNameOrAddress(), port);
|
PeerAddress result = create(node.getHostNameOrAddress(), port);
|
||||||
|
@ -69,7 +69,7 @@ class BtcNodeConverter {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
PeerAddress convertWithTor(BtcNode node, Socks5Proxy proxy) {
|
PeerAddress convertWithTor(XmrNode node, Socks5Proxy proxy) {
|
||||||
int port = node.getPort();
|
int port = node.getPort();
|
||||||
|
|
||||||
PeerAddress result = create(proxy, node.getHostNameOrAddress(), port);
|
PeerAddress result = create(proxy, node.getHostNameOrAddress(), port);
|
192
core/src/main/java/haveno/core/xmr/nodes/XmrNodes.java
Normal file
192
core/src/main/java/haveno/core/xmr/nodes/XmrNodes.java
Normal file
|
@ -0,0 +1,192 @@
|
||||||
|
/*
|
||||||
|
* This file is part of Haveno.
|
||||||
|
*
|
||||||
|
* Haveno 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.
|
||||||
|
*
|
||||||
|
* Haveno 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 Haveno. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package haveno.core.xmr.nodes;
|
||||||
|
|
||||||
|
import haveno.common.config.Config;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public class XmrNodes {
|
||||||
|
|
||||||
|
// TODO: rename to XmrNodeType ?
|
||||||
|
public enum MoneroNodesOption {
|
||||||
|
PROVIDED,
|
||||||
|
CUSTOM,
|
||||||
|
PUBLIC
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<XmrNode> selectPreferredNodes(XmrNodesSetupPreferences xmrNodesSetupPreferences) {
|
||||||
|
return xmrNodesSetupPreferences.selectPreferredNodes(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: always using null hostname
|
||||||
|
public List<XmrNode> getAllXmrNodes() {
|
||||||
|
switch (Config.baseCurrencyNetwork()) {
|
||||||
|
case XMR_LOCAL:
|
||||||
|
return Arrays.asList(
|
||||||
|
new XmrNode(MoneroNodesOption.PROVIDED, null, null, "127.0.0.1", 28081, 1, "@local")
|
||||||
|
);
|
||||||
|
case XMR_STAGENET:
|
||||||
|
return Arrays.asList(
|
||||||
|
new XmrNode(MoneroNodesOption.PROVIDED, null, null, "127.0.0.1", 38081, 1, "@local"),
|
||||||
|
new XmrNode(MoneroNodesOption.PROVIDED, null, null, "127.0.0.1", 39081, 1, "@local"),
|
||||||
|
new XmrNode(MoneroNodesOption.PROVIDED, null, null, "45.63.8.26", 38081, 1, "@haveno"),
|
||||||
|
new XmrNode(MoneroNodesOption.PROVIDED, null, null, "stagenet.community.rino.io", 38081, 2, "@RINOwallet"),
|
||||||
|
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "stagenet.melo.tools", 38081, 2, null),
|
||||||
|
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node.sethforprivacy.com", 38089, 2, null),
|
||||||
|
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node2.sethforprivacy.com", 38089, 2, null),
|
||||||
|
new XmrNode(MoneroNodesOption.PUBLIC, null, "plowsof3t5hogddwabaeiyrno25efmzfxyro2vligremt7sxpsclfaid.onion", null, 38089, 2, null)
|
||||||
|
);
|
||||||
|
case XMR_MAINNET:
|
||||||
|
return Arrays.asList(
|
||||||
|
new XmrNode(MoneroNodesOption.PROVIDED, null, null, "127.0.0.1", 18081, 1, "@local"),
|
||||||
|
new XmrNode(MoneroNodesOption.PROVIDED, null, null, "xmr-node.cakewallet.com", 18081, 1, "@cakewallet"),
|
||||||
|
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node.community.rino.io", 18081, 2, "@RINOwallet"),
|
||||||
|
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "xmr-node-eu.cakewallet.com", 18081, 2, "@cakewallet"),
|
||||||
|
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "xmr-node-usa-east.cakewallet.com", 18081, 2, "@cakewallet"),
|
||||||
|
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "xmr-node-uk.cakewallet.com", 18081, 2, "@cakewallet"),
|
||||||
|
new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node.sethforprivacy.com", 18089, 2, "@sethforprivacy")
|
||||||
|
);
|
||||||
|
default:
|
||||||
|
throw new IllegalStateException("Unexpected base currency network: " + Config.baseCurrencyNetwork());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<XmrNode> getProvidedXmrNodes() {
|
||||||
|
return getXmrNodes(MoneroNodesOption.PROVIDED);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<XmrNode> getPublicXmrNodes() {
|
||||||
|
return getXmrNodes(MoneroNodesOption.PUBLIC);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<XmrNode> getXmrNodes(MoneroNodesOption type) {
|
||||||
|
List<XmrNode> nodes = new ArrayList<>();
|
||||||
|
for (XmrNode node : getAllXmrNodes()) if (node.getType() == type) nodes.add(node);
|
||||||
|
return nodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<XmrNodes.XmrNode> toCustomXmrNodesList(Collection<String> nodes) {
|
||||||
|
return nodes.stream()
|
||||||
|
.filter(e -> !e.isEmpty())
|
||||||
|
.map(XmrNodes.XmrNode::fromFullAddress)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EqualsAndHashCode
|
||||||
|
@Getter
|
||||||
|
public static class XmrNode {
|
||||||
|
private static final int DEFAULT_PORT = Config.baseCurrencyNetworkParameters().getPort();
|
||||||
|
|
||||||
|
private final MoneroNodesOption type;
|
||||||
|
@Nullable
|
||||||
|
private final String onionAddress;
|
||||||
|
@Nullable
|
||||||
|
private final String hostName;
|
||||||
|
@Nullable
|
||||||
|
private final String operator; // null in case the user provides a list of custom btc nodes
|
||||||
|
@Nullable
|
||||||
|
private final String address; // IPv4 address
|
||||||
|
private int port = DEFAULT_PORT;
|
||||||
|
private int priority = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fullAddress [IPv4 address:port or onion:port]
|
||||||
|
* @return XmrNode instance
|
||||||
|
*/
|
||||||
|
public static XmrNode fromFullAddress(String fullAddress) {
|
||||||
|
String[] parts = fullAddress.split("]");
|
||||||
|
checkArgument(parts.length > 0);
|
||||||
|
String host = "";
|
||||||
|
int port = DEFAULT_PORT;
|
||||||
|
if (parts[0].contains("[") && parts[0].contains(":")) {
|
||||||
|
// IPv6 address and optional port number
|
||||||
|
// address part delimited by square brackets e.g. [2a01:123:456:789::2]:8333
|
||||||
|
host = parts[0].replace("[", "").replace("]", "");
|
||||||
|
if (parts.length == 2)
|
||||||
|
port = Integer.parseInt(parts[1].replace(":", ""));
|
||||||
|
} else if (parts[0].contains(":") && !parts[0].contains(".")) {
|
||||||
|
// IPv6 address only; not delimited by square brackets
|
||||||
|
host = parts[0];
|
||||||
|
} else if (parts[0].contains(".")) {
|
||||||
|
// address and an optional port number
|
||||||
|
// e.g. 127.0.0.1:8333 or abcdef123xyz.onion:9999
|
||||||
|
parts = fullAddress.split(":");
|
||||||
|
checkArgument(parts.length > 0);
|
||||||
|
host = parts[0];
|
||||||
|
if (parts.length == 2)
|
||||||
|
port = Integer.parseInt(parts[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
checkArgument(host.length() > 0, "XmrNode address format not recognised");
|
||||||
|
return host.contains(".onion") ? new XmrNode(MoneroNodesOption.CUSTOM, null, host, null, port, null, null) : new XmrNode(MoneroNodesOption.CUSTOM, null, null, host, port, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public XmrNode(MoneroNodesOption type,
|
||||||
|
@Nullable String hostName,
|
||||||
|
@Nullable String onionAddress,
|
||||||
|
@Nullable String address,
|
||||||
|
int port,
|
||||||
|
Integer priority,
|
||||||
|
@Nullable String operator) {
|
||||||
|
this.type = type;
|
||||||
|
this.hostName = hostName;
|
||||||
|
this.onionAddress = onionAddress;
|
||||||
|
this.address = address;
|
||||||
|
this.port = port;
|
||||||
|
this.priority = priority == null ? 0 : priority;
|
||||||
|
this.operator = operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasOnionAddress() {
|
||||||
|
return onionAddress != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHostNameOrAddress() {
|
||||||
|
if (hostName != null)
|
||||||
|
return hostName;
|
||||||
|
else
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasClearNetAddress() {
|
||||||
|
return hostName != null || address != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "onionAddress='" + onionAddress + '\'' +
|
||||||
|
", hostName='" + hostName + '\'' +
|
||||||
|
", address='" + address + '\'' +
|
||||||
|
", port='" + port + '\'' +
|
||||||
|
", priority='" + priority + '\'' +
|
||||||
|
", operator='" + operator;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,15 +27,15 @@ import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public class BtcNodesRepository {
|
public class XmrNodesRepository {
|
||||||
private final BtcNodeConverter converter;
|
private final XmrNodeConverter converter;
|
||||||
private final List<BtcNodes.BtcNode> nodes;
|
private final List<XmrNodes.XmrNode> nodes;
|
||||||
|
|
||||||
public BtcNodesRepository(List<BtcNodes.BtcNode> nodes) {
|
public XmrNodesRepository(List<XmrNodes.XmrNode> nodes) {
|
||||||
this(new BtcNodeConverter(), nodes);
|
this(new XmrNodeConverter(), nodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public BtcNodesRepository(BtcNodeConverter converter, List<BtcNodes.BtcNode> nodes) {
|
public XmrNodesRepository(XmrNodeConverter converter, List<XmrNodes.XmrNode> nodes) {
|
||||||
this.converter = converter;
|
this.converter = converter;
|
||||||
this.nodes = nodes;
|
this.nodes = nodes;
|
||||||
}
|
}
|
||||||
|
@ -61,21 +61,21 @@ public class BtcNodesRepository {
|
||||||
|
|
||||||
private List<PeerAddress> getClearNodes() {
|
private List<PeerAddress> getClearNodes() {
|
||||||
return nodes.stream()
|
return nodes.stream()
|
||||||
.filter(BtcNodes.BtcNode::hasClearNetAddress)
|
.filter(XmrNodes.XmrNode::hasClearNetAddress)
|
||||||
.flatMap(node -> nullableAsStream(converter.convertClearNode(node)))
|
.flatMap(node -> nullableAsStream(converter.convertClearNode(node)))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<PeerAddress> getOnionHosts() {
|
private List<PeerAddress> getOnionHosts() {
|
||||||
return nodes.stream()
|
return nodes.stream()
|
||||||
.filter(BtcNodes.BtcNode::hasOnionAddress)
|
.filter(XmrNodes.XmrNode::hasOnionAddress)
|
||||||
.flatMap(node -> nullableAsStream(converter.convertOnionHost(node)))
|
.flatMap(node -> nullableAsStream(converter.convertOnionHost(node)))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<PeerAddress> getClearNodesBehindProxy(Socks5Proxy proxy) {
|
private List<PeerAddress> getClearNodesBehindProxy(Socks5Proxy proxy) {
|
||||||
return nodes.stream()
|
return nodes.stream()
|
||||||
.filter(BtcNodes.BtcNode::hasClearNetAddress)
|
.filter(XmrNodes.XmrNode::hasClearNetAddress)
|
||||||
.flatMap(node -> nullableAsStream(converter.convertWithTor(node, proxy)))
|
.flatMap(node -> nullableAsStream(converter.convertWithTor(node, proxy)))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
|
@ -23,42 +23,41 @@ import haveno.core.user.Preferences;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
||||||
public class BtcNodesSetupPreferences {
|
public class XmrNodesSetupPreferences {
|
||||||
private static final Logger log = LoggerFactory.getLogger(BtcNodesSetupPreferences.class);
|
private static final Logger log = LoggerFactory.getLogger(XmrNodesSetupPreferences.class);
|
||||||
|
|
||||||
private final Preferences preferences;
|
private final Preferences preferences;
|
||||||
|
|
||||||
public BtcNodesSetupPreferences(Preferences preferences) {
|
public XmrNodesSetupPreferences(Preferences preferences) {
|
||||||
this.preferences = preferences;
|
this.preferences = preferences;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<BtcNodes.BtcNode> selectPreferredNodes(BtcNodes nodes) {
|
public List<XmrNodes.XmrNode> selectPreferredNodes(XmrNodes nodes) {
|
||||||
List<BtcNodes.BtcNode> result;
|
List<XmrNodes.XmrNode> result;
|
||||||
|
|
||||||
BtcNodes.BitcoinNodesOption nodesOption = BtcNodes.BitcoinNodesOption.values()[preferences.getBitcoinNodesOptionOrdinal()];
|
XmrNodes.MoneroNodesOption nodesOption = XmrNodes.MoneroNodesOption.values()[preferences.getMoneroNodesOptionOrdinal()];
|
||||||
switch (nodesOption) {
|
switch (nodesOption) {
|
||||||
case CUSTOM:
|
case CUSTOM:
|
||||||
String bitcoinNodes = preferences.getBitcoinNodes();
|
String bitcoinNodes = preferences.getMoneroNodes();
|
||||||
Set<String> distinctNodes = Utilities.commaSeparatedListToSet(bitcoinNodes, false);
|
Set<String> distinctNodes = Utilities.commaSeparatedListToSet(bitcoinNodes, false);
|
||||||
result = BtcNodes.toBtcNodesList(distinctNodes);
|
result = XmrNodes.toCustomXmrNodesList(distinctNodes);
|
||||||
if (result.isEmpty()) {
|
if (result.isEmpty()) {
|
||||||
log.warn("Custom nodes is set but no valid nodes are provided. " +
|
log.warn("Custom nodes is set but no valid nodes are provided. " +
|
||||||
"We fall back to provided nodes option.");
|
"We fall back to provided nodes option.");
|
||||||
preferences.setBitcoinNodesOptionOrdinal(BtcNodes.BitcoinNodesOption.PROVIDED.ordinal());
|
preferences.setMoneroNodesOptionOrdinal(XmrNodes.MoneroNodesOption.PROVIDED.ordinal());
|
||||||
result = nodes.getProvidedBtcNodes();
|
result = nodes.getAllXmrNodes();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PUBLIC:
|
case PUBLIC:
|
||||||
result = Collections.emptyList();
|
result = nodes.getPublicXmrNodes();
|
||||||
break;
|
break;
|
||||||
case PROVIDED:
|
case PROVIDED:
|
||||||
default:
|
default:
|
||||||
result = nodes.getProvidedBtcNodes();
|
result = nodes.getAllXmrNodes();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,11 +65,11 @@ public class BtcNodesSetupPreferences {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUseCustomNodes() {
|
public boolean isUseCustomNodes() {
|
||||||
return BtcNodes.BitcoinNodesOption.CUSTOM.ordinal() == preferences.getBitcoinNodesOptionOrdinal();
|
return XmrNodes.MoneroNodesOption.CUSTOM.ordinal() == preferences.getMoneroNodesOptionOrdinal();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int calculateMinBroadcastConnections(List<BtcNodes.BtcNode> nodes) {
|
public int calculateMinBroadcastConnections(List<XmrNodes.XmrNode> nodes) {
|
||||||
BtcNodes.BitcoinNodesOption nodesOption = BtcNodes.BitcoinNodesOption.values()[preferences.getBitcoinNodesOptionOrdinal()];
|
XmrNodes.MoneroNodesOption nodesOption = XmrNodes.MoneroNodesOption.values()[preferences.getMoneroNodesOptionOrdinal()];
|
||||||
int result;
|
int result;
|
||||||
switch (nodesOption) {
|
switch (nodesOption) {
|
||||||
case CUSTOM:
|
case CUSTOM:
|
|
@ -33,11 +33,11 @@ import haveno.core.user.Preferences;
|
||||||
import haveno.core.xmr.exceptions.InvalidHostException;
|
import haveno.core.xmr.exceptions.InvalidHostException;
|
||||||
import haveno.core.xmr.model.AddressEntry;
|
import haveno.core.xmr.model.AddressEntry;
|
||||||
import haveno.core.xmr.model.AddressEntryList;
|
import haveno.core.xmr.model.AddressEntryList;
|
||||||
import haveno.core.xmr.nodes.BtcNetworkConfig;
|
import haveno.core.xmr.nodes.XmrNetworkConfig;
|
||||||
import haveno.core.xmr.nodes.BtcNodes;
|
import haveno.core.xmr.nodes.XmrNodes;
|
||||||
import haveno.core.xmr.nodes.BtcNodes.BtcNode;
|
import haveno.core.xmr.nodes.XmrNodes.XmrNode;
|
||||||
import haveno.core.xmr.nodes.BtcNodesRepository;
|
import haveno.core.xmr.nodes.XmrNodesRepository;
|
||||||
import haveno.core.xmr.nodes.BtcNodesSetupPreferences;
|
import haveno.core.xmr.nodes.XmrNodesSetupPreferences;
|
||||||
import haveno.core.xmr.nodes.LocalBitcoinNode;
|
import haveno.core.xmr.nodes.LocalBitcoinNode;
|
||||||
import haveno.network.Socks5MultiDiscovery;
|
import haveno.network.Socks5MultiDiscovery;
|
||||||
import haveno.network.Socks5ProxyProvider;
|
import haveno.network.Socks5ProxyProvider;
|
||||||
|
@ -101,7 +101,7 @@ public class WalletsSetup {
|
||||||
private final Socks5ProxyProvider socks5ProxyProvider;
|
private final Socks5ProxyProvider socks5ProxyProvider;
|
||||||
private final Config config;
|
private final Config config;
|
||||||
private final LocalBitcoinNode localBitcoinNode;
|
private final LocalBitcoinNode localBitcoinNode;
|
||||||
private final BtcNodes btcNodes;
|
private final XmrNodes xmrNodes;
|
||||||
private final int numConnectionsForBtc;
|
private final int numConnectionsForBtc;
|
||||||
private final String userAgent;
|
private final String userAgent;
|
||||||
private final NetworkParameters params;
|
private final NetworkParameters params;
|
||||||
|
@ -127,7 +127,7 @@ public class WalletsSetup {
|
||||||
Socks5ProxyProvider socks5ProxyProvider,
|
Socks5ProxyProvider socks5ProxyProvider,
|
||||||
Config config,
|
Config config,
|
||||||
LocalBitcoinNode localBitcoinNode,
|
LocalBitcoinNode localBitcoinNode,
|
||||||
BtcNodes btcNodes,
|
XmrNodes xmrNodes,
|
||||||
@Named(Config.USER_AGENT) String userAgent,
|
@Named(Config.USER_AGENT) String userAgent,
|
||||||
@Named(Config.WALLET_DIR) File walletDir,
|
@Named(Config.WALLET_DIR) File walletDir,
|
||||||
@Named(Config.USE_ALL_PROVIDED_NODES) boolean useAllProvidedNodes,
|
@Named(Config.USE_ALL_PROVIDED_NODES) boolean useAllProvidedNodes,
|
||||||
|
@ -139,7 +139,7 @@ public class WalletsSetup {
|
||||||
this.socks5ProxyProvider = socks5ProxyProvider;
|
this.socks5ProxyProvider = socks5ProxyProvider;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.localBitcoinNode = localBitcoinNode;
|
this.localBitcoinNode = localBitcoinNode;
|
||||||
this.btcNodes = btcNodes;
|
this.xmrNodes = xmrNodes;
|
||||||
this.numConnectionsForBtc = numConnectionsForBtc;
|
this.numConnectionsForBtc = numConnectionsForBtc;
|
||||||
this.useAllProvidedNodes = useAllProvidedNodes;
|
this.useAllProvidedNodes = useAllProvidedNodes;
|
||||||
this.userAgent = userAgent;
|
this.userAgent = userAgent;
|
||||||
|
@ -171,7 +171,7 @@ public class WalletsSetup {
|
||||||
|
|
||||||
backupWallets();
|
backupWallets();
|
||||||
|
|
||||||
final Socks5Proxy socks5Proxy = preferences.getUseTorForBitcoinJ() ? socks5ProxyProvider.getSocks5Proxy() : null;
|
final Socks5Proxy socks5Proxy = preferences.getUseTorForMonero() ? socks5ProxyProvider.getSocks5Proxy() : null;
|
||||||
log.info("Socks5Proxy for bitcoinj: socks5Proxy=" + socks5Proxy);
|
log.info("Socks5Proxy for bitcoinj: socks5Proxy=" + socks5Proxy);
|
||||||
|
|
||||||
walletConfig = new WalletConfig(params, walletDir, "haveno") {
|
walletConfig = new WalletConfig(params, walletDir, "haveno") {
|
||||||
|
@ -195,7 +195,7 @@ public class WalletsSetup {
|
||||||
};
|
};
|
||||||
walletConfig.setSocks5Proxy(socks5Proxy);
|
walletConfig.setSocks5Proxy(socks5Proxy);
|
||||||
walletConfig.setConfig(config);
|
walletConfig.setConfig(config);
|
||||||
walletConfig.setLocalBitcoinNode(localBitcoinNode);
|
walletConfig.setLocalBitcoinNode(localBitcoinNode); // TODO: adapt to xmr or remove
|
||||||
walletConfig.setUserAgent(userAgent, Version.VERSION);
|
walletConfig.setUserAgent(userAgent, Version.VERSION);
|
||||||
walletConfig.setNumConnectionsForBtc(numConnectionsForBtc);
|
walletConfig.setNumConnectionsForBtc(numConnectionsForBtc);
|
||||||
|
|
||||||
|
@ -213,7 +213,7 @@ public class WalletsSetup {
|
||||||
walletConfig.setCheckpoints(getClass().getResourceAsStream(checkpointsPath));
|
walletConfig.setCheckpoints(getClass().getResourceAsStream(checkpointsPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: update this for xmr
|
||||||
if (params.getId().equals(NetworkParameters.ID_REGTEST)) {
|
if (params.getId().equals(NetworkParameters.ID_REGTEST)) {
|
||||||
walletConfig.setMinBroadcastConnections(1);
|
walletConfig.setMinBroadcastConnections(1);
|
||||||
if (regTestHost == RegTestHost.LOCALHOST) {
|
if (regTestHost == RegTestHost.LOCALHOST) {
|
||||||
|
@ -235,7 +235,7 @@ public class WalletsSetup {
|
||||||
walletConfig.connectToLocalHost();
|
walletConfig.connectToLocalHost();
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
configPeerNodes(socks5Proxy);
|
//configPeerNodes(socks5Proxy);
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
timeoutTimer.stop();
|
timeoutTimer.stop();
|
||||||
walletsSetupFailed.set(true);
|
walletsSetupFailed.set(true);
|
||||||
|
@ -329,14 +329,14 @@ public class WalletsSetup {
|
||||||
private void configPeerNodes(@Nullable Socks5Proxy proxy) {
|
private void configPeerNodes(@Nullable Socks5Proxy proxy) {
|
||||||
walletConfig.setMinBroadcastConnections(MIN_BROADCAST_CONNECTIONS);
|
walletConfig.setMinBroadcastConnections(MIN_BROADCAST_CONNECTIONS);
|
||||||
|
|
||||||
BtcNodesSetupPreferences btcNodesSetupPreferences = new BtcNodesSetupPreferences(preferences);
|
XmrNodesSetupPreferences xmrNodesSetupPreferences = new XmrNodesSetupPreferences(preferences);
|
||||||
List<BtcNode> nodes = btcNodesSetupPreferences.selectPreferredNodes(btcNodes);
|
List<XmrNode> nodes = xmrNodesSetupPreferences.selectPreferredNodes(xmrNodes);
|
||||||
|
|
||||||
BtcNodesRepository repository = new BtcNodesRepository(nodes);
|
XmrNodesRepository repository = new XmrNodesRepository(nodes);
|
||||||
boolean isUseClearNodesWithProxies = (useAllProvidedNodes || btcNodesSetupPreferences.isUseCustomNodes());
|
boolean isUseClearNodesWithProxies = (useAllProvidedNodes || xmrNodesSetupPreferences.isUseCustomNodes());
|
||||||
List<PeerAddress> peers = repository.getPeerAddresses(proxy, isUseClearNodesWithProxies);
|
List<PeerAddress> peers = repository.getPeerAddresses(proxy, isUseClearNodesWithProxies);
|
||||||
|
|
||||||
BtcNetworkConfig networkConfig = new BtcNetworkConfig(walletConfig, params, socks5DiscoverMode, proxy);
|
XmrNetworkConfig networkConfig = new XmrNetworkConfig(walletConfig, params, socks5DiscoverMode, proxy);
|
||||||
networkConfig.proposePeers(peers);
|
networkConfig.proposePeers(peers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -626,6 +626,8 @@ public class XmrWalletService {
|
||||||
// sync wallet if open
|
// sync wallet if open
|
||||||
if (wallet != null) {
|
if (wallet != null) {
|
||||||
log.info("Monero wallet uri={}, path={}", wallet.getRpcConnection().getUri(), wallet.getPath());
|
log.info("Monero wallet uri={}, path={}", wallet.getRpcConnection().getUri(), wallet.getPath());
|
||||||
|
int numAttempts = 0;
|
||||||
|
int maxAttempts = 2;
|
||||||
while (!HavenoUtils.havenoSetup.getWalletInitialized().get()) {
|
while (!HavenoUtils.havenoSetup.getWalletInitialized().get()) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
@ -648,8 +650,17 @@ public class XmrWalletService {
|
||||||
// save but skip backup on initialization
|
// save but skip backup on initialization
|
||||||
saveMainWallet(false);
|
saveMainWallet(false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.warn("Error syncing main wallet: {}. Trying again in {} seconds", e.getMessage(), connectionsService.getRefreshPeriodMs() / 1000);
|
log.warn("Error syncing main wallet: {}", e.getMessage());
|
||||||
|
numAttempts++;
|
||||||
|
if (numAttempts < maxAttempts) {
|
||||||
|
log.warn("Trying again in {} seconds", connectionsService.getRefreshPeriodMs() / 1000);
|
||||||
GenUtils.waitFor(connectionsService.getRefreshPeriodMs());
|
GenUtils.waitFor(connectionsService.getRefreshPeriodMs());
|
||||||
|
} else {
|
||||||
|
log.warn("Failed to sync main wallet after {} attempts. Opening app without syncing", maxAttempts);
|
||||||
|
HavenoUtils.havenoSetup.getWalletInitialized().set(true);
|
||||||
|
saveMainWallet(false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -735,9 +746,10 @@ public class XmrWalletService {
|
||||||
if (connection != null) {
|
if (connection != null) {
|
||||||
cmd.add("--daemon-address");
|
cmd.add("--daemon-address");
|
||||||
cmd.add(connection.getUri());
|
cmd.add(connection.getUri());
|
||||||
if (connection.isOnion() && connection.getProxyUri() != null) {
|
if (connection.getProxyUri() != null) {
|
||||||
cmd.add("--proxy");
|
cmd.add("--proxy");
|
||||||
cmd.add(connection.getProxyUri());
|
cmd.add(connection.getProxyUri());
|
||||||
|
if (!connection.isOnion()) cmd.add("--daemon-ssl-allow-any-cert"); // necessary to use proxy with clearnet mmonerod
|
||||||
}
|
}
|
||||||
if (connection.getUsername() != null) {
|
if (connection.getUsername() != null) {
|
||||||
cmd.add("--daemon-login");
|
cmd.add("--daemon-login");
|
||||||
|
@ -1015,10 +1027,10 @@ public class XmrWalletService {
|
||||||
|
|
||||||
public List<MoneroTxWallet> getTxsWithIncomingOutputs(Integer subaddressIndex) {
|
public List<MoneroTxWallet> getTxsWithIncomingOutputs(Integer subaddressIndex) {
|
||||||
List<MoneroTxWallet> txs = wallet.getTxs(new MoneroTxQuery().setIncludeOutputs(true));
|
List<MoneroTxWallet> txs = wallet.getTxs(new MoneroTxQuery().setIncludeOutputs(true));
|
||||||
return getTxsWithIncomingOutputs(txs, subaddressIndex);
|
return getTxsWithIncomingOutputs(subaddressIndex, txs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<MoneroTxWallet> getTxsWithIncomingOutputs(List<MoneroTxWallet> txs, Integer subaddressIndex) {
|
public static List<MoneroTxWallet> getTxsWithIncomingOutputs(Integer subaddressIndex, List<MoneroTxWallet> txs) {
|
||||||
List<MoneroTxWallet> incomingTxs = new ArrayList<>();
|
List<MoneroTxWallet> incomingTxs = new ArrayList<>();
|
||||||
for (MoneroTxWallet tx : txs) {
|
for (MoneroTxWallet tx : txs) {
|
||||||
boolean isIncoming = false;
|
boolean isIncoming = false;
|
||||||
|
|
|
@ -21,7 +21,7 @@ grant {
|
||||||
permission "java.util.PropertyPermission" "useragent.name", "read";
|
permission "java.util.PropertyPermission" "useragent.name", "read";
|
||||||
permission "java.util.PropertyPermission" "useragent.version", "read";
|
permission "java.util.PropertyPermission" "useragent.version", "read";
|
||||||
permission "java.util.PropertyPermission" "walletDir", "read";
|
permission "java.util.PropertyPermission" "walletDir", "read";
|
||||||
permission "java.util.PropertyPermission" "useTorForBtc", "read";
|
permission "java.util.PropertyPermission" "useTorForXmr", "read";
|
||||||
permission "java.util.PropertyPermission" "providers", "read";
|
permission "java.util.PropertyPermission" "providers", "read";
|
||||||
permission "java.util.PropertyPermission" "rpcUser", "read";
|
permission "java.util.PropertyPermission" "rpcUser", "read";
|
||||||
permission "java.util.PropertyPermission" "rpcPassword", "read";
|
permission "java.util.PropertyPermission" "rpcPassword", "read";
|
||||||
|
@ -38,7 +38,7 @@ grant {
|
||||||
permission "java.util.PropertyPermission" "nodePort", "read";
|
permission "java.util.PropertyPermission" "nodePort", "read";
|
||||||
permission "java.util.PropertyPermission" "seedNodes", "read";
|
permission "java.util.PropertyPermission" "seedNodes", "read";
|
||||||
permission "java.util.PropertyPermission" "bitcoinRegtestHost", "read";
|
permission "java.util.PropertyPermission" "bitcoinRegtestHost", "read";
|
||||||
permission "java.util.PropertyPermission" "btcNodes", "read";
|
permission "java.util.PropertyPermission" "xmrNodes", "read";
|
||||||
permission "java.util.PropertyPermission" "appName", "read";
|
permission "java.util.PropertyPermission" "appName", "read";
|
||||||
permission "java.util.PropertyPermission" "socks5DiscoverMode", "read";
|
permission "java.util.PropertyPermission" "socks5DiscoverMode", "read";
|
||||||
permission "java.util.PropertyPermission" "priceFeedProviders", "read";
|
permission "java.util.PropertyPermission" "priceFeedProviders", "read";
|
||||||
|
@ -69,7 +69,7 @@ grant {
|
||||||
permission "java.lang.RuntimePermission" "getenv.useragent.name";
|
permission "java.lang.RuntimePermission" "getenv.useragent.name";
|
||||||
permission "java.lang.RuntimePermission" "getenv.useragent.version";
|
permission "java.lang.RuntimePermission" "getenv.useragent.version";
|
||||||
permission "java.lang.RuntimePermission" "getenv.walletDir";
|
permission "java.lang.RuntimePermission" "getenv.walletDir";
|
||||||
permission "java.lang.RuntimePermission" "getenv.useTorForBtc";
|
permission "java.lang.RuntimePermission" "getenv.useTorForXmr";
|
||||||
permission "java.lang.RuntimePermission" "getenv.providers";
|
permission "java.lang.RuntimePermission" "getenv.providers";
|
||||||
permission "java.lang.RuntimePermission" "getenv.rpcPassword";
|
permission "java.lang.RuntimePermission" "getenv.rpcPassword";
|
||||||
permission "java.lang.RuntimePermission" "getenv.rpcUser";
|
permission "java.lang.RuntimePermission" "getenv.rpcUser";
|
||||||
|
@ -84,7 +84,7 @@ grant {
|
||||||
permission "java.lang.RuntimePermission" "getenv.priceFeedProviders";
|
permission "java.lang.RuntimePermission" "getenv.priceFeedProviders";
|
||||||
permission "java.lang.RuntimePermission" "getenv.seedNodes";
|
permission "java.lang.RuntimePermission" "getenv.seedNodes";
|
||||||
permission "java.lang.RuntimePermission" "getenv.bitcoinRegtestHost";
|
permission "java.lang.RuntimePermission" "getenv.bitcoinRegtestHost";
|
||||||
permission "java.lang.RuntimePermission" "getenv.btcNodes";
|
permission "java.lang.RuntimePermission" "getenv.xmrNodes";
|
||||||
permission "java.lang.RuntimePermission" "getenv.maxMemory";
|
permission "java.lang.RuntimePermission" "getenv.maxMemory";
|
||||||
permission "java.lang.RuntimePermission" "getClassLoader";
|
permission "java.lang.RuntimePermission" "getClassLoader";
|
||||||
permission "java.lang.RuntimePermission" "accessUserInformation";
|
permission "java.lang.RuntimePermission" "accessUserInformation";
|
||||||
|
|
|
@ -1274,25 +1274,23 @@ settings.preferences.editCustomExplorer.addressUrl=Address URL
|
||||||
settings.net.btcHeader=Monero network
|
settings.net.btcHeader=Monero network
|
||||||
settings.net.p2pHeader=Haveno network
|
settings.net.p2pHeader=Haveno network
|
||||||
settings.net.onionAddressLabel=My onion address
|
settings.net.onionAddressLabel=My onion address
|
||||||
settings.net.btcNodesLabel=Use custom Monero Core nodes
|
settings.net.xmrNodesLabel=Use custom Monero nodes
|
||||||
settings.net.bitcoinPeersLabel=Connected peers
|
settings.net.moneroPeersLabel=Connected peers
|
||||||
settings.net.useTorForBtcJLabel=Use Tor for Monero network
|
settings.net.useTorForXmrJLabel=Use Tor for Monero network
|
||||||
settings.net.bitcoinNodesLabel=Monero Core nodes to connect to
|
settings.net.moneroNodesLabel=Monero nodes to connect to
|
||||||
settings.net.useProvidedNodesRadio=Use provided Monero Core nodes
|
settings.net.useProvidedNodesRadio=Use provided Monero nodes
|
||||||
settings.net.usePublicNodesRadio=Use public Monero network
|
settings.net.usePublicNodesRadio=Use public Monero network
|
||||||
settings.net.useCustomNodesRadio=Use custom Monero Core nodes
|
settings.net.useCustomNodesRadio=Use custom Monero nodes
|
||||||
settings.net.warn.usePublicNodes=If you use the public Monero network you are exposed to a severe privacy problem caused by the broken bloom filter design and implementation which is used for SPV wallets like BitcoinJ (used in Haveno). Any full node you are connected to could find out that all your wallet addresses belong to one entity.\n\n\
|
settings.net.warn.usePublicNodes=If you use public Monero nodes, you are subject to any risk of using untrusted remote nodes.\n\nPlease read more details at [HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html].\n\nAre you sure you want to use public nodes?
|
||||||
Please read more about the details at [HYPERLINK:https://bisq.network/blog/privacy-in-bitsquare].\n\n\
|
|
||||||
Are you sure you want to use the public nodes?
|
|
||||||
settings.net.warn.usePublicNodes.useProvided=No, use provided nodes
|
settings.net.warn.usePublicNodes.useProvided=No, use provided nodes
|
||||||
settings.net.warn.usePublicNodes.usePublic=Yes, use public network
|
settings.net.warn.usePublicNodes.usePublic=Yes, use public network
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=Please be sure that your Monero node is a trusted Monero Core node!\n\n\
|
settings.net.warn.useCustomNodes.B2XWarning=Please be sure that your Monero node is a trusted Monero node!\n\n\
|
||||||
Connecting to nodes which do not follow the Monero Core consensus rules could corrupt your wallet and cause problems in the trade process.\n\n\
|
Connecting to nodes which do not follow the Monero consensus rules could corrupt your wallet and cause problems in the trade process.\n\n\
|
||||||
Users who connect to nodes that violate consensus rules are responsible for any resulting damage. \
|
Users who connect to nodes that violate consensus rules are responsible for any resulting damage. \
|
||||||
Any resulting disputes will be decided in favor of the other peer. No technical support will be given \
|
Any resulting disputes will be decided in favor of the other peer. No technical support will be given \
|
||||||
to users who ignore this warning and protection mechanisms!
|
to users who ignore this warning and protection mechanisms!
|
||||||
settings.net.warn.invalidBtcConfig=Connection to the Monero network failed because your configuration is invalid.\n\nYour configuration has been reset to use the provided Monero nodes instead. You will need to restart the application.
|
settings.net.warn.invalidBtcConfig=Connection to the Monero network failed because your configuration is invalid.\n\nYour configuration has been reset to use the provided Monero nodes instead. You will need to restart the application.
|
||||||
settings.net.localhostBtcNodeInfo=Background information: Haveno looks for a local Monero node when starting. If it is found, Haveno will communicate with the Monero network exclusively through it.
|
settings.net.localhostXmrNodeInfo=Background information: Haveno looks for a local Monero node when starting. If it is found, Haveno will communicate with the Monero network exclusively through it.
|
||||||
settings.net.p2PPeersLabel=Connected peers
|
settings.net.p2PPeersLabel=Connected peers
|
||||||
settings.net.onionAddressColumn=Onion address
|
settings.net.onionAddressColumn=Onion address
|
||||||
settings.net.creationDateColumn=Established
|
settings.net.creationDateColumn=Established
|
||||||
|
@ -1916,7 +1914,7 @@ filterWindow.mediators=Filtered mediators (comma sep. onion addresses)
|
||||||
filterWindow.refundAgents=Filtered refund agents (comma sep. onion addresses)
|
filterWindow.refundAgents=Filtered refund agents (comma sep. onion addresses)
|
||||||
filterWindow.seedNode=Filtered seed nodes (comma sep. onion addresses)
|
filterWindow.seedNode=Filtered seed nodes (comma sep. onion addresses)
|
||||||
filterWindow.priceRelayNode=Filtered price relay nodes (comma sep. onion addresses)
|
filterWindow.priceRelayNode=Filtered price relay nodes (comma sep. onion addresses)
|
||||||
filterWindow.btcNode=Filtered Monero nodes (comma sep. addresses + port)
|
filterWindow.xmrNode=Filtered Monero nodes (comma sep. addresses + port)
|
||||||
filterWindow.preventPublicBtcNetwork=Prevent usage of public Monero network
|
filterWindow.preventPublicBtcNetwork=Prevent usage of public Monero network
|
||||||
filterWindow.disableAutoConf=Disable auto-confirm
|
filterWindow.disableAutoConf=Disable auto-confirm
|
||||||
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
||||||
|
|
|
@ -1024,19 +1024,19 @@ settings.preferences.editCustomExplorer.addressUrl=Adresa URL
|
||||||
settings.net.btcHeader=Bitcoinová síť
|
settings.net.btcHeader=Bitcoinová síť
|
||||||
settings.net.p2pHeader=Síť Haveno
|
settings.net.p2pHeader=Síť Haveno
|
||||||
settings.net.onionAddressLabel=Moje onion adresa
|
settings.net.onionAddressLabel=Moje onion adresa
|
||||||
settings.net.btcNodesLabel=Použijte vlastní Bitcoin Core node
|
settings.net.xmrNodesLabel=Použijte vlastní Monero node
|
||||||
settings.net.bitcoinPeersLabel=Připojené peer uzly
|
settings.net.moneroPeersLabel=Připojené peer uzly
|
||||||
settings.net.useTorForBtcJLabel=Použít Tor pro Bitcoinovou síť
|
settings.net.useTorForXmrJLabel=Použít Tor pro Monero síť
|
||||||
settings.net.bitcoinNodesLabel=Bitcoin Core nody, pro připojení
|
settings.net.moneroNodesLabel=Monero nody, pro připojení
|
||||||
settings.net.useProvidedNodesRadio=Použijte nabízené Bitcoin Core nody
|
settings.net.useProvidedNodesRadio=Použijte nabízené Bitcoin Core nody
|
||||||
settings.net.usePublicNodesRadio=Použít veřejnou Bitcoinovou síť
|
settings.net.usePublicNodesRadio=Použít veřejnou Bitcoinovou síť
|
||||||
settings.net.useCustomNodesRadio=Použijte vlastní Bitcoin Core node
|
settings.net.useCustomNodesRadio=Použijte vlastní Bitcoin Core node
|
||||||
settings.net.warn.usePublicNodes=Používáte-li veřejnou bitcoinovou síť, jste vystaveni závažnému problému s ochranou soukromí způsobenému porušením návrhu a implementace bloom filtru, který se používá pro peněženky SPV, jako je BitcoinJ (použitý v Haveno). Každý full node, ke kterému jste připojeni, mohl zjistit, že všechny vaše adresy peněženky patří jedné entitě.\n\nPřečtěte si více o podrobnostech na adrese: [HYPERLINK:https://bisq.network/blog/privacy-in-bitsquare].\n\nOpravdu chcete použít veřejné nody?
|
settings.net.warn.usePublicNodes=Pokud používáte veřejné Monero nody, jste vystaveni riziku spojenému s používáním nedůvěryhodných vzdálených nodů.\n\nProsím, přečtěte si více podrobností na [HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html].\n\nJste si jistí, že chcete použít veřejné nody?
|
||||||
settings.net.warn.usePublicNodes.useProvided=Ne, použijte nabízené nody
|
settings.net.warn.usePublicNodes.useProvided=Ne, použijte nabízené nody
|
||||||
settings.net.warn.usePublicNodes.usePublic=Ano, použít veřejnou síť
|
settings.net.warn.usePublicNodes.usePublic=Ano, použít veřejnou síť
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=Ujistěte se, že váš bitcoinový node je důvěryhodný Bitcoin Core node!\n\nPřipojení k nodům, které nedodržují pravidla konsensu Bitcoin Core, může poškodit vaši peněženku a způsobit problémy v obchodním procesu.\n\nUživatelé, kteří se připojují k nodům, které porušují pravidla konsensu, odpovídají za případné škody, které z toho vyplývají. Jakékoli výsledné spory budou rozhodnuty ve prospěch druhého obchodníka. Uživatelům, kteří ignorují tyto varovné a ochranné mechanismy, nebude poskytována technická podpora!
|
settings.net.warn.useCustomNodes.B2XWarning=Ujistěte se, že váš bitcoinový node je důvěryhodný Bitcoin Core node!\n\nPřipojení k nodům, které nedodržují pravidla konsensu Bitcoin Core, může poškodit vaši peněženku a způsobit problémy v obchodním procesu.\n\nUživatelé, kteří se připojují k nodům, které porušují pravidla konsensu, odpovídají za případné škody, které z toho vyplývají. Jakékoli výsledné spory budou rozhodnuty ve prospěch druhého obchodníka. Uživatelům, kteří ignorují tyto varovné a ochranné mechanismy, nebude poskytována technická podpora!
|
||||||
settings.net.warn.invalidBtcConfig=Připojení k bitcoinové síti selhalo, protože je vaše konfigurace neplatná.\n\nVaše konfigurace byla resetována, aby se místo toho použily poskytnuté bitcoinové uzly. Budete muset restartovat aplikaci.
|
settings.net.warn.invalidBtcConfig=Připojení k bitcoinové síti selhalo, protože je vaše konfigurace neplatná.\n\nVaše konfigurace byla resetována, aby se místo toho použily poskytnuté bitcoinové uzly. Budete muset restartovat aplikaci.
|
||||||
settings.net.localhostBtcNodeInfo=Základní informace: Haveno při spuštění hledá místní Bitcoinový uzel. Pokud je nalezen, Haveno bude komunikovat se sítí Bitcoin výhradně skrze něj.
|
settings.net.localhostXmrNodeInfo=Základní informace: Haveno při spuštění hledá místní Bitcoinový uzel. Pokud je nalezen, Haveno bude komunikovat se sítí Bitcoin výhradně skrze něj.
|
||||||
settings.net.p2PPeersLabel=Připojené uzly
|
settings.net.p2PPeersLabel=Připojené uzly
|
||||||
settings.net.onionAddressColumn=Onion adresa
|
settings.net.onionAddressColumn=Onion adresa
|
||||||
settings.net.creationDateColumn=Založeno
|
settings.net.creationDateColumn=Založeno
|
||||||
|
@ -1425,7 +1425,7 @@ filterWindow.mediators=Filtrovaní mediátoři (onion adresy oddělené čárkam
|
||||||
filterWindow.refundAgents=Filtrovaní rozhodci pro vrácení peněz (onion adresy oddělené čárkami)
|
filterWindow.refundAgents=Filtrovaní rozhodci pro vrácení peněz (onion adresy oddělené čárkami)
|
||||||
filterWindow.seedNode=Filtrované seed nody (onion adresy oddělené čárkami)
|
filterWindow.seedNode=Filtrované seed nody (onion adresy oddělené čárkami)
|
||||||
filterWindow.priceRelayNode=Filtrované cenové relay nody (onion adresy oddělené čárkami)
|
filterWindow.priceRelayNode=Filtrované cenové relay nody (onion adresy oddělené čárkami)
|
||||||
filterWindow.btcNode=Filtrované Bitcoinové nody (adresy+porty oddělené čárkami)
|
filterWindow.xmrNode=Filtrované Bitcoinové nody (adresy+porty oddělené čárkami)
|
||||||
filterWindow.preventPublicBtcNetwork=Zabraňte použití veřejné bitcoinové sítě
|
filterWindow.preventPublicBtcNetwork=Zabraňte použití veřejné bitcoinové sítě
|
||||||
filterWindow.disableAutoConf=Zakázat automatické potvrzení
|
filterWindow.disableAutoConf=Zakázat automatické potvrzení
|
||||||
filterWindow.autoConfExplorers=Filtrované průzkumníky s automatickým potvrzením (adresy oddělené čárkami)
|
filterWindow.autoConfExplorers=Filtrované průzkumníky s automatickým potvrzením (adresy oddělené čárkami)
|
||||||
|
|
|
@ -1024,19 +1024,19 @@ settings.preferences.editCustomExplorer.addressUrl=Adress-URL
|
||||||
settings.net.btcHeader=Bitcoin-Netzwerk
|
settings.net.btcHeader=Bitcoin-Netzwerk
|
||||||
settings.net.p2pHeader=Haveno-Netzwerk
|
settings.net.p2pHeader=Haveno-Netzwerk
|
||||||
settings.net.onionAddressLabel=Meine Onion-Adresse
|
settings.net.onionAddressLabel=Meine Onion-Adresse
|
||||||
settings.net.btcNodesLabel=Spezifische Bitcoin-Core-Knoten verwenden
|
settings.net.xmrNodesLabel=Spezifische Monero-Knoten verwenden
|
||||||
settings.net.bitcoinPeersLabel=Verbundene Peers
|
settings.net.moneroPeersLabel=Verbundene Peers
|
||||||
settings.net.useTorForBtcJLabel=Tor für das Bitcoin-Netzwerk verwenden
|
settings.net.useTorForXmrJLabel=Tor für das Monero-Netzwerk verwenden
|
||||||
settings.net.bitcoinNodesLabel=Mit Bitcoin-Core-Knoten verbinden
|
settings.net.moneroNodesLabel=Mit Monero-Knoten verbinden
|
||||||
settings.net.useProvidedNodesRadio=Bereitgestellte Bitcoin-Core-Knoten verwenden
|
settings.net.useProvidedNodesRadio=Bereitgestellte Bitcoin-Core-Knoten verwenden
|
||||||
settings.net.usePublicNodesRadio=Öffentliches Bitcoin-Netzwerk benutzen
|
settings.net.usePublicNodesRadio=Öffentliches Bitcoin-Netzwerk benutzen
|
||||||
settings.net.useCustomNodesRadio=Spezifische Bitcoin-Core-Knoten verwenden
|
settings.net.useCustomNodesRadio=Spezifische Bitcoin-Core-Knoten verwenden
|
||||||
settings.net.warn.usePublicNodes=Wenn Sie das öffentliche Bitcoin Netzwerk verwenden, sind Sie den Privatsphäre-Probleme die durch das defekte Bloom Filter Design, das von SPV wallets wie BitcoinJ (verwendet von Haveno) verwendet wird, ausgesetzt. Jede Full Node mit der Sie sich verbinden könnte dadurch alle Adressen, die zu einer Entität gehören, herausfinden.\n\nWeitere Informationen finden Sie unter [HYPERLINK:https://bisq.network/blog/privacy-in-bitsquare].\n\nSind Sie sicher, dass Sie die öffentlichen Nodes verwenden wollen?
|
settings.net.warn.usePublicNodes=Wenn Sie öffentliche Monero-Nodes verwenden, sind Sie den Risiken ausgesetzt, die mit der Verwendung unvertrauenswürdiger Remote-Nodes verbunden sind.\n\nBitte lesen Sie weitere Details unter [HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html].\n\nSind Sie sich sicher, dass Sie öffentliche Nodes verwenden möchten?
|
||||||
settings.net.warn.usePublicNodes.useProvided=Nein, bereitgestellte Knoten verwenden
|
settings.net.warn.usePublicNodes.useProvided=Nein, bereitgestellte Knoten verwenden
|
||||||
settings.net.warn.usePublicNodes.usePublic=Ja, öffentliches Netzwerk verwenden
|
settings.net.warn.usePublicNodes.usePublic=Ja, öffentliches Netzwerk verwenden
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=Bitte stellen Sie sicher, dass Sie sich mit einem vertrauenswürdigen Bitcoin-Core-Knoten verbinden!\n\nWenn Sie sich mit Knoten verbinden, die gegen die Bitcoin Core Konsensus-Regeln verstoßen, kann es zu Problemen in Ihrer Wallet und im Verlauf des Handelsprozesses kommen.\n\nBenutzer die sich zu oben genannten Knoten verbinden, sind für den verursachten Schaden verantwortlich. Dadurch entstandene Konflikte werden zugunsten des anderen Teilnehmers entschieden. Benutzer die unsere Warnungen und Sicherheitsmechanismen ignorieren wird keine technische Unterstützung geleistet!
|
settings.net.warn.useCustomNodes.B2XWarning=Bitte stellen Sie sicher, dass Sie sich mit einem vertrauenswürdigen Bitcoin-Core-Knoten verbinden!\n\nWenn Sie sich mit Knoten verbinden, die gegen die Bitcoin Core Konsensus-Regeln verstoßen, kann es zu Problemen in Ihrer Wallet und im Verlauf des Handelsprozesses kommen.\n\nBenutzer die sich zu oben genannten Knoten verbinden, sind für den verursachten Schaden verantwortlich. Dadurch entstandene Konflikte werden zugunsten des anderen Teilnehmers entschieden. Benutzer die unsere Warnungen und Sicherheitsmechanismen ignorieren wird keine technische Unterstützung geleistet!
|
||||||
settings.net.warn.invalidBtcConfig=Die Verbindung zum Bitcoin-Netzwerk ist fehlgeschlagen, weil Ihre Konfiguration ungültig ist.\n\nIhre Konfiguration wurde zurückgesetzt, um stattdessen die bereitgestellten Bitcoin-Nodes zu verwenden. Sie müssen die Anwendung neu starten.
|
settings.net.warn.invalidBtcConfig=Die Verbindung zum Bitcoin-Netzwerk ist fehlgeschlagen, weil Ihre Konfiguration ungültig ist.\n\nIhre Konfiguration wurde zurückgesetzt, um stattdessen die bereitgestellten Bitcoin-Nodes zu verwenden. Sie müssen die Anwendung neu starten.
|
||||||
settings.net.localhostBtcNodeInfo=Hintergrundinformationen: Haveno sucht beim Start nach einem lokalen Bitcoin-Node. Wird dieser gefunden, kommuniziert Haveno ausschließlich über diesen mit dem Bitcoin-Netzwerk.
|
settings.net.localhostXmrNodeInfo=Hintergrundinformationen: Haveno sucht beim Start nach einem lokalen Bitcoin-Node. Wird dieser gefunden, kommuniziert Haveno ausschließlich über diesen mit dem Bitcoin-Netzwerk.
|
||||||
settings.net.p2PPeersLabel=Verbundene Peers
|
settings.net.p2PPeersLabel=Verbundene Peers
|
||||||
settings.net.onionAddressColumn=Onion-Adresse
|
settings.net.onionAddressColumn=Onion-Adresse
|
||||||
settings.net.creationDateColumn=Eingerichtet
|
settings.net.creationDateColumn=Eingerichtet
|
||||||
|
@ -1425,7 +1425,7 @@ filterWindow.mediators=Gefilterte Mediatoren (mit Komma getr. Onion-Adressen)
|
||||||
filterWindow.refundAgents=Gefilterte Rückerstattungsagenten (mit Komma getr. Onion-Adressen)
|
filterWindow.refundAgents=Gefilterte Rückerstattungsagenten (mit Komma getr. Onion-Adressen)
|
||||||
filterWindow.seedNode=Gefilterte Seed-Knoten (Komma getr. Onion-Adressen)
|
filterWindow.seedNode=Gefilterte Seed-Knoten (Komma getr. Onion-Adressen)
|
||||||
filterWindow.priceRelayNode=Gefilterte Preisrelais Knoten (Komma getr. Onion-Adressen)
|
filterWindow.priceRelayNode=Gefilterte Preisrelais Knoten (Komma getr. Onion-Adressen)
|
||||||
filterWindow.btcNode=Gefilterte Bitcoinknoten (Komma getr. Adresse + Port)
|
filterWindow.xmrNode=Gefilterte Bitcoinknoten (Komma getr. Adresse + Port)
|
||||||
filterWindow.preventPublicBtcNetwork=Nutzung des öffentlichen Bitcoin-Netzwerks verhindern
|
filterWindow.preventPublicBtcNetwork=Nutzung des öffentlichen Bitcoin-Netzwerks verhindern
|
||||||
filterWindow.disableAutoConf=Automatische Bestätigung deaktivieren
|
filterWindow.disableAutoConf=Automatische Bestätigung deaktivieren
|
||||||
filterWindow.autoConfExplorers=Gefilterter Explorer mit Auto-Bestätigung (Adressen mit Komma separiert)
|
filterWindow.autoConfExplorers=Gefilterter Explorer mit Auto-Bestätigung (Adressen mit Komma separiert)
|
||||||
|
|
|
@ -1024,19 +1024,19 @@ settings.preferences.editCustomExplorer.addressUrl=URL de la dirección
|
||||||
settings.net.btcHeader=Red Bitcoin
|
settings.net.btcHeader=Red Bitcoin
|
||||||
settings.net.p2pHeader=Red Haveno
|
settings.net.p2pHeader=Red Haveno
|
||||||
settings.net.onionAddressLabel=Mi dirección onion
|
settings.net.onionAddressLabel=Mi dirección onion
|
||||||
settings.net.btcNodesLabel=Utilizar nodos Bitcoin Core personalizados
|
settings.net.xmrNodesLabel=Utilizar nodos Monero personalizados
|
||||||
settings.net.bitcoinPeersLabel=Pares conectados
|
settings.net.moneroPeersLabel=Pares conectados
|
||||||
settings.net.useTorForBtcJLabel=Usar Tor para la red Bitcoin
|
settings.net.useTorForXmrJLabel=Usar Tor para la red Monero
|
||||||
settings.net.bitcoinNodesLabel=Nodos Bitcoin Core para conectarse
|
settings.net.moneroNodesLabel=Nodos Monero para conectarse
|
||||||
settings.net.useProvidedNodesRadio=Utilizar nodos Bitcoin Core proporcionados
|
settings.net.useProvidedNodesRadio=Utilizar nodos Bitcoin Core proporcionados
|
||||||
settings.net.usePublicNodesRadio=Utilizar red pública Bitcoin
|
settings.net.usePublicNodesRadio=Utilizar red pública Bitcoin
|
||||||
settings.net.useCustomNodesRadio=Utilizar nodos Bitcoin Core personalizados
|
settings.net.useCustomNodesRadio=Utilizar nodos Bitcoin Core personalizados
|
||||||
settings.net.warn.usePublicNodes=Si usa la red pública de Bitcoin está expuesto a problemas de privacidad causados por el fallo en el diseño y la implementación del filtro bloom que se utiliza para carteras SPV como BitcoinJ (usado en Haveno). Cualquier nodo completo al que esté conectado podría conocer que todas las direcciones del monedero pertenecen a una entidad.\n\nPor favor, lea más sobre los detalles en: [HYPERLINK:https://bisq.network/blog/privacy-in-bitsquare].\n\n¿Está seguro de que quiere utilizar los nodos públicos?
|
settings.net.warn.usePublicNodes=Si utiliza nodos públicos de Monero, está sujeto a cualquier riesgo asociado con el uso de nodos remotos no confiables.\n\nPor favor, lea más detalles en [HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html].\n\n¿Está seguro de que desea utilizar nodos públicos?
|
||||||
settings.net.warn.usePublicNodes.useProvided=No, utilizar nodos proporcionados
|
settings.net.warn.usePublicNodes.useProvided=No, utilizar nodos proporcionados
|
||||||
settings.net.warn.usePublicNodes.usePublic=Sí, utilizar la red pública
|
settings.net.warn.usePublicNodes.usePublic=Sí, utilizar la red pública
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=¡Por favor, asegúrese de que su nodo Bitcoin es un nodo de confianza Bitcoin Core!\n\nConectar a nodos que no siguen las reglas de consenso puede causar perjuicios a su cartera y causar problemas en el proceso de intercambio.\n\nLos usuarios que se conecten a los nodos que violan las reglas de consenso son responsables de cualquier daño que estos creen. Las disputas causadas por ello se decidirán en favor del otro participante. No se dará soporte técnico a usuarios que ignoren esta advertencia y los mecanismos de protección!
|
settings.net.warn.useCustomNodes.B2XWarning=¡Por favor, asegúrese de que su nodo Bitcoin es un nodo de confianza Bitcoin Core!\n\nConectar a nodos que no siguen las reglas de consenso puede causar perjuicios a su cartera y causar problemas en el proceso de intercambio.\n\nLos usuarios que se conecten a los nodos que violan las reglas de consenso son responsables de cualquier daño que estos creen. Las disputas causadas por ello se decidirán en favor del otro participante. No se dará soporte técnico a usuarios que ignoren esta advertencia y los mecanismos de protección!
|
||||||
settings.net.warn.invalidBtcConfig=La conexión a la red Bitcoin falló debido a que su configuración es inválida.\n\nSu configuración se ha reestablecido para usar los nodos Bitcoin proporcionados. Necesitará reiniciar la aplicación.
|
settings.net.warn.invalidBtcConfig=La conexión a la red Bitcoin falló debido a que su configuración es inválida.\n\nSu configuración se ha reestablecido para usar los nodos Bitcoin proporcionados. Necesitará reiniciar la aplicación.
|
||||||
settings.net.localhostBtcNodeInfo=Información complementaria: Haveno busca un nodo local Bitcoin al inicio. Si lo encuentra, Haveno se comunicará a la red Bitcoin exclusivamente a través de él.
|
settings.net.localhostXmrNodeInfo=Información complementaria: Haveno busca un nodo local Bitcoin al inicio. Si lo encuentra, Haveno se comunicará a la red Bitcoin exclusivamente a través de él.
|
||||||
settings.net.p2PPeersLabel=Pares conectados
|
settings.net.p2PPeersLabel=Pares conectados
|
||||||
settings.net.onionAddressColumn=Dirección onion
|
settings.net.onionAddressColumn=Dirección onion
|
||||||
settings.net.creationDateColumn=Establecido
|
settings.net.creationDateColumn=Establecido
|
||||||
|
@ -1425,7 +1425,7 @@ filterWindow.mediators=Mediadores filtrados (direcciones onion separadas por com
|
||||||
filterWindow.refundAgents=Agentes de devolución de fondos filtrados (direcciones onion separadas por coma)
|
filterWindow.refundAgents=Agentes de devolución de fondos filtrados (direcciones onion separadas por coma)
|
||||||
filterWindow.seedNode=Nodos semilla filtrados (direcciones onion separadas por coma)
|
filterWindow.seedNode=Nodos semilla filtrados (direcciones onion separadas por coma)
|
||||||
filterWindow.priceRelayNode=nodos de retransmisión de precio filtrados (direcciones onion separadas por coma)
|
filterWindow.priceRelayNode=nodos de retransmisión de precio filtrados (direcciones onion separadas por coma)
|
||||||
filterWindow.btcNode=Nodos Bitcoin filtrados (direcciones + puerto separadas por coma)
|
filterWindow.xmrNode=Nodos Bitcoin filtrados (direcciones + puerto separadas por coma)
|
||||||
filterWindow.preventPublicBtcNetwork=Prevenir uso de la red Bitcoin pública
|
filterWindow.preventPublicBtcNetwork=Prevenir uso de la red Bitcoin pública
|
||||||
filterWindow.disableAutoConf=Deshabilitar autoconfirmación
|
filterWindow.disableAutoConf=Deshabilitar autoconfirmación
|
||||||
filterWindow.autoConfExplorers=Exploradores de autoconfirmación filtrados (direcciones separadas por coma)
|
filterWindow.autoConfExplorers=Exploradores de autoconfirmación filtrados (direcciones separadas por coma)
|
||||||
|
|
|
@ -1024,19 +1024,19 @@ settings.preferences.editCustomExplorer.addressUrl=Address URL
|
||||||
settings.net.btcHeader=شبکه بیتکوین
|
settings.net.btcHeader=شبکه بیتکوین
|
||||||
settings.net.p2pHeader=Haveno network
|
settings.net.p2pHeader=Haveno network
|
||||||
settings.net.onionAddressLabel=آدرس onion من
|
settings.net.onionAddressLabel=آدرس onion من
|
||||||
settings.net.btcNodesLabel=استفاده از گرههای Bitcoin Core اختصاصی
|
settings.net.xmrNodesLabel=استفاده از گرههای Monero اختصاصی
|
||||||
settings.net.bitcoinPeersLabel=همتایان متصل
|
settings.net.moneroPeersLabel=همتایان متصل
|
||||||
settings.net.useTorForBtcJLabel=استفاده از Tor برای شبکه بیتکوین
|
settings.net.useTorForXmrJLabel=استفاده از Tor برای شبکه مونرو
|
||||||
settings.net.bitcoinNodesLabel=گرههای Bitcoin Core در دسترس
|
settings.net.moneroNodesLabel=گرههای Monero در دسترس
|
||||||
settings.net.useProvidedNodesRadio=استفاده از نودهای بیتکوین ارائه شده
|
settings.net.useProvidedNodesRadio=استفاده از نودهای بیتکوین ارائه شده
|
||||||
settings.net.usePublicNodesRadio=استفاده از شبکه بیتکوین عمومی
|
settings.net.usePublicNodesRadio=استفاده از شبکه بیتکوین عمومی
|
||||||
settings.net.useCustomNodesRadio=استفاده از نودهای بیتکوین اختصاصی
|
settings.net.useCustomNodesRadio=استفاده از نودهای بیتکوین اختصاصی
|
||||||
settings.net.warn.usePublicNodes=If you use the public Bitcoin network you are exposed to a severe privacy problem caused by the broken bloom filter design and implementation which is used for SPV wallets like BitcoinJ (used in Haveno). Any full node you are connected to could find out that all your wallet addresses belong to one entity.\n\nPlease read more about the details at [HYPERLINK:https://bisq.network/blog/privacy-in-bitsquare].\n\nAre you sure you want to use the public nodes?
|
settings.net.warn.usePublicNodes=If you use public Monero nodes, you are subject to any risk of using untrusted remote nodes.\n\nPlease read more details at [HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html].\n\nAre you sure you want to use public nodes?
|
||||||
settings.net.warn.usePublicNodes.useProvided=خیر، از نودهای فراهم شده استفاده کنید.
|
settings.net.warn.usePublicNodes.useProvided=خیر، از نودهای فراهم شده استفاده کنید.
|
||||||
settings.net.warn.usePublicNodes.usePublic=بلی، از شبکه عمومی استفاده کنید.
|
settings.net.warn.usePublicNodes.usePublic=بلی، از شبکه عمومی استفاده کنید.
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=لطفا مطمئن شوید که گره بیتکوین شما یک گره مورد اعتماد Bitcoin Core است!\n\nمتصل شدن به گرههایی که از قوانین مورد اجماع موجود در Bitcoin Core پیروی نمیکنند میتواند باعث خراب شدن کیف پول شما شود و در فرآیند معامله مشکلاتی را به وجود بیاورد.\n\nکاربرانی که از گرههای ناقض قوانین مورد اجماع استفاده میکند مسئول هر گونه آسیب ایجاد شده هستند. اگر هر گونه اختلافی به وجود بیاید به نفع دیگر گرههایی که از قوانین مورد اجماع پیروی میکنند درمورد آن تصمیم گیری خواهد شد. به کاربرانی که این هشدار و سازوکار محافظتی را نادیده میگیرند هیچگونه پشتیبانی فنی ارائه نخواهد شد!
|
settings.net.warn.useCustomNodes.B2XWarning=لطفا مطمئن شوید که گره بیتکوین شما یک گره مورد اعتماد Bitcoin Core است!\n\nمتصل شدن به گرههایی که از قوانین مورد اجماع موجود در Bitcoin Core پیروی نمیکنند میتواند باعث خراب شدن کیف پول شما شود و در فرآیند معامله مشکلاتی را به وجود بیاورد.\n\nکاربرانی که از گرههای ناقض قوانین مورد اجماع استفاده میکند مسئول هر گونه آسیب ایجاد شده هستند. اگر هر گونه اختلافی به وجود بیاید به نفع دیگر گرههایی که از قوانین مورد اجماع پیروی میکنند درمورد آن تصمیم گیری خواهد شد. به کاربرانی که این هشدار و سازوکار محافظتی را نادیده میگیرند هیچگونه پشتیبانی فنی ارائه نخواهد شد!
|
||||||
settings.net.warn.invalidBtcConfig=Connection to the Bitcoin network failed because your configuration is invalid.\n\nYour configuration has been reset to use the provided Bitcoin nodes instead. You will need to restart the application.
|
settings.net.warn.invalidBtcConfig=Connection to the Bitcoin network failed because your configuration is invalid.\n\nYour configuration has been reset to use the provided Bitcoin nodes instead. You will need to restart the application.
|
||||||
settings.net.localhostBtcNodeInfo=Background information: Haveno looks for a local Bitcoin node when starting. If it is found, Haveno will communicate with the Bitcoin network exclusively through it.
|
settings.net.localhostXmrNodeInfo=Background information: Haveno looks for a local Bitcoin node when starting. If it is found, Haveno will communicate with the Bitcoin network exclusively through it.
|
||||||
settings.net.p2PPeersLabel=همتایان متصل
|
settings.net.p2PPeersLabel=همتایان متصل
|
||||||
settings.net.onionAddressColumn=آدرس Onion
|
settings.net.onionAddressColumn=آدرس Onion
|
||||||
settings.net.creationDateColumn=تثبیت شده
|
settings.net.creationDateColumn=تثبیت شده
|
||||||
|
@ -1425,7 +1425,7 @@ filterWindow.mediators=Filtered mediators (comma sep. onion addresses)
|
||||||
filterWindow.refundAgents=Filtered refund agents (comma sep. onion addresses)
|
filterWindow.refundAgents=Filtered refund agents (comma sep. onion addresses)
|
||||||
filterWindow.seedNode=گره های seed فیلتر شده (آدرس های Onion جدا شده با ویرگول)
|
filterWindow.seedNode=گره های seed فیلتر شده (آدرس های Onion جدا شده با ویرگول)
|
||||||
filterWindow.priceRelayNode=گره های رله قیمت فیلترشده (آدرس های Onion جدا شده با ویرگول)
|
filterWindow.priceRelayNode=گره های رله قیمت فیلترشده (آدرس های Onion جدا شده با ویرگول)
|
||||||
filterWindow.btcNode=گرههای بیتکوین فیلترشده (آدرس + پورت جدا شده با ویرگول)
|
filterWindow.xmrNode=گرههای بیتکوین فیلترشده (آدرس + پورت جدا شده با ویرگول)
|
||||||
filterWindow.preventPublicBtcNetwork=جلوگیری از استفاده ازشبکه عمومی بیتکوین
|
filterWindow.preventPublicBtcNetwork=جلوگیری از استفاده ازشبکه عمومی بیتکوین
|
||||||
filterWindow.disableAutoConf=Disable auto-confirm
|
filterWindow.disableAutoConf=Disable auto-confirm
|
||||||
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
||||||
|
|
|
@ -1025,19 +1025,19 @@ settings.preferences.editCustomExplorer.addressUrl=Addresse URL
|
||||||
settings.net.btcHeader=Réseau Bitcoin
|
settings.net.btcHeader=Réseau Bitcoin
|
||||||
settings.net.p2pHeader=Le réseau Haveno
|
settings.net.p2pHeader=Le réseau Haveno
|
||||||
settings.net.onionAddressLabel=Mon adresse onion
|
settings.net.onionAddressLabel=Mon adresse onion
|
||||||
settings.net.btcNodesLabel=Utiliser des nœuds Bitcoin Core personnalisés
|
settings.net.xmrNodesLabel=Utiliser des nœuds Monero personnalisés
|
||||||
settings.net.bitcoinPeersLabel=Pairs connectés
|
settings.net.moneroPeersLabel=Pairs connectés
|
||||||
settings.net.useTorForBtcJLabel=Utiliser Tor pour le réseau Bitcoin
|
settings.net.useTorForXmrJLabel=Utiliser Tor pour le réseau Monero
|
||||||
settings.net.bitcoinNodesLabel=Nœuds Bitcoin Core pour se connecter à
|
settings.net.moneroNodesLabel=Nœuds Monero pour se connecter à
|
||||||
settings.net.useProvidedNodesRadio=Utiliser les nœuds Bitcoin Core fournis
|
settings.net.useProvidedNodesRadio=Utiliser les nœuds Bitcoin Core fournis
|
||||||
settings.net.usePublicNodesRadio=Utiliser le réseau Bitcoin public
|
settings.net.usePublicNodesRadio=Utiliser le réseau Bitcoin public
|
||||||
settings.net.useCustomNodesRadio=Utiliser des nœuds Bitcoin Core personnalisés
|
settings.net.useCustomNodesRadio=Utiliser des nœuds Bitcoin Core personnalisés
|
||||||
settings.net.warn.usePublicNodes=Si vous utilisez le réseau public Bitcoin, vous serez confronté à de sérieux problèmes de confidentialité. Ceci est dû à la conception et à la mise en œuvre du bloom filter cassé. Il convient aux portefeuilles SPV comme BitcoinJ (utilisé dans Haveno). Tout nœud complet que vous connectez peut découvrir que toutes les adresses de votre portefeuille appartiennent à une seule entité. \n\nPour plus d'informations, veuillez visiter: [HYPERLINK:https://bisq.network/blog/privacy-in-bitsquare] \n\nÊtes-vous sûr de vouloir utiliser un nœud public?
|
settings.net.warn.usePublicNodes=Si vous utilisez des nœuds publics Monero, vous êtes exposé à tout risque lié à l'utilisation de nœuds distants non fiables.\n\nVeuillez lire plus de détails sur [HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html].\n\nÊtes-vous sûr de vouloir utiliser des nœuds publics ?
|
||||||
settings.net.warn.usePublicNodes.useProvided=Non, utiliser les nœuds fournis.
|
settings.net.warn.usePublicNodes.useProvided=Non, utiliser les nœuds fournis.
|
||||||
settings.net.warn.usePublicNodes.usePublic=Oui, utiliser un réseau public
|
settings.net.warn.usePublicNodes.usePublic=Oui, utiliser un réseau public
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=Veuillez vous assurer que votre nœud Bitcoin est un nœud Bitcoin Core de confiance !\n\nLa connexion à des nœuds qui ne respectent pas les règles du consensus de Bitcoin Core peut corrompre votre portefeuille et causer des problèmes dans le processus de trading.\n\nLes utilisateurs qui se connectent à des nœuds qui ne respectent pas les règles du consensus sont responsables des dommages qui en résultent. Tout litige qui en résulte sera tranché en faveur de l'autre pair. Aucune assistance technique ne sera apportée aux utilisateurs qui ignorent ces mécanismes d'alertes et de protections !
|
settings.net.warn.useCustomNodes.B2XWarning=Veuillez vous assurer que votre nœud Bitcoin est un nœud Bitcoin Core de confiance !\n\nLa connexion à des nœuds qui ne respectent pas les règles du consensus de Bitcoin Core peut corrompre votre portefeuille et causer des problèmes dans le processus de trading.\n\nLes utilisateurs qui se connectent à des nœuds qui ne respectent pas les règles du consensus sont responsables des dommages qui en résultent. Tout litige qui en résulte sera tranché en faveur de l'autre pair. Aucune assistance technique ne sera apportée aux utilisateurs qui ignorent ces mécanismes d'alertes et de protections !
|
||||||
settings.net.warn.invalidBtcConfig=La connection au réseau Bitcoin a échoué car votre configuration est invalide.\n\nVotre configuration a été réinitialisée afin d'utiliser les noeuds Bitcoin fournis à la place. Vous allez avoir besoin de relancer l'application.
|
settings.net.warn.invalidBtcConfig=La connection au réseau Bitcoin a échoué car votre configuration est invalide.\n\nVotre configuration a été réinitialisée afin d'utiliser les noeuds Bitcoin fournis à la place. Vous allez avoir besoin de relancer l'application.
|
||||||
settings.net.localhostBtcNodeInfo=Information additionnelle : Haveno cherche un noeud Bitcoin local au démarrage. Si il est trouvé, Haveno communiquera avec le réseau Bitcoin uniquement à travers ce noeud.
|
settings.net.localhostXmrNodeInfo=Information additionnelle : Haveno cherche un noeud Bitcoin local au démarrage. Si il est trouvé, Haveno communiquera avec le réseau Bitcoin uniquement à travers ce noeud.
|
||||||
settings.net.p2PPeersLabel=Pairs connectés
|
settings.net.p2PPeersLabel=Pairs connectés
|
||||||
settings.net.onionAddressColumn=Adresse onion
|
settings.net.onionAddressColumn=Adresse onion
|
||||||
settings.net.creationDateColumn=Établi
|
settings.net.creationDateColumn=Établi
|
||||||
|
@ -1426,7 +1426,7 @@ filterWindow.mediators=Médiateurs filtrés (adresses onion sep. par une virgule
|
||||||
filterWindow.refundAgents=Agents de remboursement filtrés (adresses onion sep. par virgule)
|
filterWindow.refundAgents=Agents de remboursement filtrés (adresses onion sep. par virgule)
|
||||||
filterWindow.seedNode=Nœuds de seed filtrés (adresses onion séparées par une virgule)
|
filterWindow.seedNode=Nœuds de seed filtrés (adresses onion séparées par une virgule)
|
||||||
filterWindow.priceRelayNode=Nœuds relais avec prix filtrés (adresses onion séparées par une virgule)
|
filterWindow.priceRelayNode=Nœuds relais avec prix filtrés (adresses onion séparées par une virgule)
|
||||||
filterWindow.btcNode=Nœuds Bitcoin filtrés (adresses séparées par une virgule + port)
|
filterWindow.xmrNode=Nœuds Bitcoin filtrés (adresses séparées par une virgule + port)
|
||||||
filterWindow.preventPublicBtcNetwork=Empêcher l'utilisation du réseau public Bitcoin
|
filterWindow.preventPublicBtcNetwork=Empêcher l'utilisation du réseau public Bitcoin
|
||||||
filterWindow.disableAutoConf=Désactiver la confirmation automatique
|
filterWindow.disableAutoConf=Désactiver la confirmation automatique
|
||||||
filterWindow.autoConfExplorers=Explorateur d'auto-confirmations filtrés (addresses à virgule de séparation)
|
filterWindow.autoConfExplorers=Explorateur d'auto-confirmations filtrés (addresses à virgule de séparation)
|
||||||
|
|
|
@ -1024,19 +1024,19 @@ settings.preferences.editCustomExplorer.addressUrl=Address URL
|
||||||
settings.net.btcHeader=Network Bitcoin
|
settings.net.btcHeader=Network Bitcoin
|
||||||
settings.net.p2pHeader=Rete Haveno
|
settings.net.p2pHeader=Rete Haveno
|
||||||
settings.net.onionAddressLabel=Il mio indirizzo onion
|
settings.net.onionAddressLabel=Il mio indirizzo onion
|
||||||
settings.net.btcNodesLabel=Usa nodi Bitcoin Core personalizzati
|
settings.net.xmrNodesLabel=Usa nodi Monero personalizzati
|
||||||
settings.net.bitcoinPeersLabel=Peer connessi
|
settings.net.moneroPeersLabel=Peer connessi
|
||||||
settings.net.useTorForBtcJLabel=Usa Tor per la rete Bitcoin
|
settings.net.useTorForXmrJLabel=Usa Tor per la rete Monero
|
||||||
settings.net.bitcoinNodesLabel=Nodi Bitcoin Core a cui connettersi
|
settings.net.moneroNodesLabel=Nodi Monero a cui connettersi
|
||||||
settings.net.useProvidedNodesRadio=Usa i nodi Bitcoin Core forniti
|
settings.net.useProvidedNodesRadio=Usa i nodi Bitcoin Core forniti
|
||||||
settings.net.usePublicNodesRadio=Usa la rete pubblica di Bitcoin
|
settings.net.usePublicNodesRadio=Usa la rete pubblica di Bitcoin
|
||||||
settings.net.useCustomNodesRadio=Usa nodi Bitcoin Core personalizzati
|
settings.net.useCustomNodesRadio=Usa nodi Bitcoin Core personalizzati
|
||||||
settings.net.warn.usePublicNodes=If you use the public Bitcoin network you are exposed to a severe privacy problem caused by the broken bloom filter design and implementation which is used for SPV wallets like BitcoinJ (used in Haveno). Any full node you are connected to could find out that all your wallet addresses belong to one entity.\n\nPlease read more about the details at [HYPERLINK:https://bisq.network/blog/privacy-in-bitsquare].\n\nAre you sure you want to use the public nodes?
|
settings.net.warn.usePublicNodes=If you use public Monero nodes, you are subject to any risk of using untrusted remote nodes.\n\nPlease read more details at [HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html].\n\nAre you sure you want to use public nodes?
|
||||||
settings.net.warn.usePublicNodes.useProvided=No, utilizza i nodi forniti
|
settings.net.warn.usePublicNodes.useProvided=No, utilizza i nodi forniti
|
||||||
settings.net.warn.usePublicNodes.usePublic=Sì, usa la rete pubblica
|
settings.net.warn.usePublicNodes.usePublic=Sì, usa la rete pubblica
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=Assicurati che il tuo nodo Bitcoin sia un nodo Bitcoin Core di fiducia!\n\nLa connessione a nodi che non seguono le regole di consenso di Bitcoin Core potrebbe corrompere il tuo portafoglio e causare problemi nel processo di scambio.\n\nGli utenti che si connettono a nodi che violano le regole di consenso sono responsabili per qualsiasi danno risultante. Eventuali controversie risultanti saranno decise a favore dell'altro pari. Nessun supporto tecnico verrà fornito agli utenti che ignorano questo meccanismo di avvertimento e protezione!
|
settings.net.warn.useCustomNodes.B2XWarning=Assicurati che il tuo nodo Bitcoin sia un nodo Bitcoin Core di fiducia!\n\nLa connessione a nodi che non seguono le regole di consenso di Bitcoin Core potrebbe corrompere il tuo portafoglio e causare problemi nel processo di scambio.\n\nGli utenti che si connettono a nodi che violano le regole di consenso sono responsabili per qualsiasi danno risultante. Eventuali controversie risultanti saranno decise a favore dell'altro pari. Nessun supporto tecnico verrà fornito agli utenti che ignorano questo meccanismo di avvertimento e protezione!
|
||||||
settings.net.warn.invalidBtcConfig=Connessione alla rete Bitcoin non riuscita perché la configurazione non è valida.\n\nLa tua configurazione è stata ripristinata per utilizzare invece i nodi Bitcoin forniti. Dovrai riavviare l'applicazione.
|
settings.net.warn.invalidBtcConfig=Connessione alla rete Bitcoin non riuscita perché la configurazione non è valida.\n\nLa tua configurazione è stata ripristinata per utilizzare invece i nodi Bitcoin forniti. Dovrai riavviare l'applicazione.
|
||||||
settings.net.localhostBtcNodeInfo=Informazioni di base: Haveno cerca un nodo Bitcoin locale all'avvio. Se viene trovato, Haveno comunicherà con la rete Bitcoin esclusivamente attraverso di esso.
|
settings.net.localhostXmrNodeInfo=Informazioni di base: Haveno cerca un nodo Bitcoin locale all'avvio. Se viene trovato, Haveno comunicherà con la rete Bitcoin esclusivamente attraverso di esso.
|
||||||
settings.net.p2PPeersLabel=Peer connessi
|
settings.net.p2PPeersLabel=Peer connessi
|
||||||
settings.net.onionAddressColumn=Indirizzo onion
|
settings.net.onionAddressColumn=Indirizzo onion
|
||||||
settings.net.creationDateColumn=Stabilito
|
settings.net.creationDateColumn=Stabilito
|
||||||
|
@ -1425,7 +1425,7 @@ filterWindow.mediators=Mediatori filtrati (indirizzi onion separati con una virg
|
||||||
filterWindow.refundAgents=Agenti di rimborso filtrati (virgola sep. indirizzi onion)
|
filterWindow.refundAgents=Agenti di rimborso filtrati (virgola sep. indirizzi onion)
|
||||||
filterWindow.seedNode=Nodi seme filtrati (separati con una virgola)
|
filterWindow.seedNode=Nodi seme filtrati (separati con una virgola)
|
||||||
filterWindow.priceRelayNode=Prezzo filtrato dai nodi relay (virgola sep. indirizzi onion)
|
filterWindow.priceRelayNode=Prezzo filtrato dai nodi relay (virgola sep. indirizzi onion)
|
||||||
filterWindow.btcNode=Nodi Bitcoin filtrati (indirizzo + porta separati con una virgola)
|
filterWindow.xmrNode=Nodi Bitcoin filtrati (indirizzo + porta separati con una virgola)
|
||||||
filterWindow.preventPublicBtcNetwork=Impedisci l'utilizzo della rete pubblica Bitcoin
|
filterWindow.preventPublicBtcNetwork=Impedisci l'utilizzo della rete pubblica Bitcoin
|
||||||
filterWindow.disableAutoConf=Disable auto-confirm
|
filterWindow.disableAutoConf=Disable auto-confirm
|
||||||
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
||||||
|
|
|
@ -1024,19 +1024,19 @@ settings.preferences.editCustomExplorer.addressUrl=アドレスURL
|
||||||
settings.net.btcHeader=ビットコインのネットワーク
|
settings.net.btcHeader=ビットコインのネットワーク
|
||||||
settings.net.p2pHeader=Havenoネットワーク
|
settings.net.p2pHeader=Havenoネットワーク
|
||||||
settings.net.onionAddressLabel=私のonionアドレス
|
settings.net.onionAddressLabel=私のonionアドレス
|
||||||
settings.net.btcNodesLabel=任意のビットコインノードを使う
|
settings.net.xmrNodesLabel=任意のモネロノードを使う
|
||||||
settings.net.bitcoinPeersLabel=接続されたピア
|
settings.net.moneroPeersLabel=接続されたピア
|
||||||
settings.net.useTorForBtcJLabel=BitcoinネットワークにTorを使用
|
settings.net.useTorForXmrJLabel=MoneroネットワークにTorを使用
|
||||||
settings.net.bitcoinNodesLabel=接続するBitcoin Coreノード:
|
settings.net.moneroNodesLabel=接続するMoneroノード:
|
||||||
settings.net.useProvidedNodesRadio=提供されたBitcoin Core ノードを使う
|
settings.net.useProvidedNodesRadio=提供されたBitcoin Core ノードを使う
|
||||||
settings.net.usePublicNodesRadio=ビットコインの公共ネットワークを使用
|
settings.net.usePublicNodesRadio=ビットコインの公共ネットワークを使用
|
||||||
settings.net.useCustomNodesRadio=任意のビットコインノードを使う
|
settings.net.useCustomNodesRadio=任意のビットコインノードを使う
|
||||||
settings.net.warn.usePublicNodes=パブリックなビットコインネットワークを使用する場合、BitcoinJ(Havenoで使用)のようなSPVウォレットに使用される破損したブルームフィルターの設計と実装によって、重大なプライバシー問題にさらされます。接続しているすべてのノードは、すべてのウォレットアドレスが1つのエンティティに属していることがわかります。\n\n詳細については、[HYPERLINK:https://bisq.network/blog/privacy-in-bitsquare] をご覧ください。\n\nパブリックノードを使用しても本当によろしいですか?
|
settings.net.warn.usePublicNodes=パブリックなMoneroノードを使用する場合、信頼できないリモートノードを使用するリスクにさらされる可能性があります。\n\n詳細については、[HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html] をご覧ください。\n\nパブリックノードを使用することを確認してもよろしいですか?
|
||||||
settings.net.warn.usePublicNodes.useProvided=いいえ、提供されたノードを使用します
|
settings.net.warn.usePublicNodes.useProvided=いいえ、提供されたノードを使用します
|
||||||
settings.net.warn.usePublicNodes.usePublic=はい、公共ネットワークを使います
|
settings.net.warn.usePublicNodes.usePublic=はい、公共ネットワークを使います
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=あなたのBitcoinノードが信頼できるBitcoin Coreノードであることを確認してください!\n\nBitcoin Coreのコンセンサスルールに従わないノードに接続すると、ウォレットが破損し、トレードプロセスに問題が生じる可能性があります。\n\nコンセンサスルールに違反するノードへ接続したユーザーは、引き起こされるいかなる損害に対しても責任を負います。 結果として生じる係争は、他のピアによって決定されます。この警告と保護のメカニズムを無視しているユーザーには、テクニカルサポートは提供されません!
|
settings.net.warn.useCustomNodes.B2XWarning=あなたのBitcoinノードが信頼できるBitcoin Coreノードであることを確認してください!\n\nBitcoin Coreのコンセンサスルールに従わないノードに接続すると、ウォレットが破損し、トレードプロセスに問題が生じる可能性があります。\n\nコンセンサスルールに違反するノードへ接続したユーザーは、引き起こされるいかなる損害に対しても責任を負います。 結果として生じる係争は、他のピアによって決定されます。この警告と保護のメカニズムを無視しているユーザーには、テクニカルサポートは提供されません!
|
||||||
settings.net.warn.invalidBtcConfig=無効な設定によりビットコインネットワークとの接続は失敗しました。\n\n代りに提供されたビットコインノードを利用するのに設定はリセットされました。アプリを再起動する必要があります。
|
settings.net.warn.invalidBtcConfig=無効な設定によりビットコインネットワークとの接続は失敗しました。\n\n代りに提供されたビットコインノードを利用するのに設定はリセットされました。アプリを再起動する必要があります。
|
||||||
settings.net.localhostBtcNodeInfo=バックグラウンド情報:Havenoが起動時に、ローカルビットコインノードを探します。見つかれば、Havenoはそのノードを排他的に介してビットコインネットワークと接続します。
|
settings.net.localhostXmrNodeInfo=バックグラウンド情報:Havenoが起動時に、ローカルビットコインノードを探します。見つかれば、Havenoはそのノードを排他的に介してビットコインネットワークと接続します。
|
||||||
settings.net.p2PPeersLabel=接続されたピア
|
settings.net.p2PPeersLabel=接続されたピア
|
||||||
settings.net.onionAddressColumn=Onionアドレス
|
settings.net.onionAddressColumn=Onionアドレス
|
||||||
settings.net.creationDateColumn=既定
|
settings.net.creationDateColumn=既定
|
||||||
|
@ -1425,7 +1425,7 @@ filterWindow.mediators=フィルター済調停者(コンマ区切り onionア
|
||||||
filterWindow.refundAgents=フィルター済仲裁人(コンマ区切り onionアドレス)
|
filterWindow.refundAgents=フィルター済仲裁人(コンマ区切り onionアドレス)
|
||||||
filterWindow.seedNode=フィルター済シードノード(コンマ区切り onionアドレス)
|
filterWindow.seedNode=フィルター済シードノード(コンマ区切り onionアドレス)
|
||||||
filterWindow.priceRelayNode=フィルター済価格中継ノード(コンマ区切り onionアドレス)
|
filterWindow.priceRelayNode=フィルター済価格中継ノード(コンマ区切り onionアドレス)
|
||||||
filterWindow.btcNode=フィルター済ビットコインノード(コンマ区切り アドレス+ポート)
|
filterWindow.xmrNode=フィルター済ビットコインノード(コンマ区切り アドレス+ポート)
|
||||||
filterWindow.preventPublicBtcNetwork=パブリックビットコインネットワークの使用を防止
|
filterWindow.preventPublicBtcNetwork=パブリックビットコインネットワークの使用を防止
|
||||||
filterWindow.disableAutoConf=自動確認を無効にする
|
filterWindow.disableAutoConf=自動確認を無効にする
|
||||||
filterWindow.autoConfExplorers=フィルター済自動確認エクスプローラ(コンマ区切りアドレス)
|
filterWindow.autoConfExplorers=フィルター済自動確認エクスプローラ(コンマ区切りアドレス)
|
||||||
|
|
|
@ -1027,19 +1027,19 @@ settings.preferences.editCustomExplorer.addressUrl=Address URL
|
||||||
settings.net.btcHeader=Rede Bitcoin
|
settings.net.btcHeader=Rede Bitcoin
|
||||||
settings.net.p2pHeader=Rede Haveno
|
settings.net.p2pHeader=Rede Haveno
|
||||||
settings.net.onionAddressLabel=Meu endereço onion
|
settings.net.onionAddressLabel=Meu endereço onion
|
||||||
settings.net.btcNodesLabel=Usar nodos personalizados do Bitcoin Core
|
settings.net.xmrNodesLabel=Usar nodos personalizados do Monero
|
||||||
settings.net.bitcoinPeersLabel=Pares conectados
|
settings.net.moneroPeersLabel=Pares conectados
|
||||||
settings.net.useTorForBtcJLabel=Usar Tor na rede Bitcoin
|
settings.net.useTorForXmrJLabel=Usar Tor na rede Monero
|
||||||
settings.net.bitcoinNodesLabel=Conexão a nodos do Bitcoin Core
|
settings.net.moneroNodesLabel=Conexão a nodos do Monero
|
||||||
settings.net.useProvidedNodesRadio=Usar nodos do Bitcoin Core fornecidos
|
settings.net.useProvidedNodesRadio=Usar nodos do Bitcoin Core fornecidos
|
||||||
settings.net.usePublicNodesRadio=Usar rede pública do Bitcoin
|
settings.net.usePublicNodesRadio=Usar rede pública do Bitcoin
|
||||||
settings.net.useCustomNodesRadio=Usar nodos personalizados do Bitcoin Core
|
settings.net.useCustomNodesRadio=Usar nodos personalizados do Bitcoin Core
|
||||||
settings.net.warn.usePublicNodes=If you use the public Bitcoin network you are exposed to a severe privacy problem caused by the broken bloom filter design and implementation which is used for SPV wallets like BitcoinJ (used in Haveno). Any full node you are connected to could find out that all your wallet addresses belong to one entity.\n\nPlease read more about the details at [HYPERLINK:https://bisq.network/blog/privacy-in-bitsquare].\n\nAre you sure you want to use the public nodes?
|
settings.net.warn.usePublicNodes=If you use public Monero nodes, you are subject to any risk of using untrusted remote nodes.\n\nPlease read more details at [HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html].\n\nAre you sure you want to use public nodes?
|
||||||
settings.net.warn.usePublicNodes.useProvided=Não, usar os nodos fornecidos
|
settings.net.warn.usePublicNodes.useProvided=Não, usar os nodos fornecidos
|
||||||
settings.net.warn.usePublicNodes.usePublic=Sim, usar rede pública
|
settings.net.warn.usePublicNodes.usePublic=Sim, usar rede pública
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=Certifique-se de que o seu nodo Bitcoin é um nodo Bitcoin Core confiável!\n\nAo se conectar a nodos que não estão seguindo as regras de consenso do Bitcoin Core, você pode corromper a sua carteira e causar problemas no processo de negociação.\n\nOs usuários que se conectam a nodos que violam as regras de consenso são responsáveis pelos danos que forem criados por isso. As disputas causadas por esse motivo serão decididas a favor do outro negociante. Nenhum suporte técnico será fornecido para os usuários que ignorarem esse aviso e os mecanismos de proteção!
|
settings.net.warn.useCustomNodes.B2XWarning=Certifique-se de que o seu nodo Bitcoin é um nodo Bitcoin Core confiável!\n\nAo se conectar a nodos que não estão seguindo as regras de consenso do Bitcoin Core, você pode corromper a sua carteira e causar problemas no processo de negociação.\n\nOs usuários que se conectam a nodos que violam as regras de consenso são responsáveis pelos danos que forem criados por isso. As disputas causadas por esse motivo serão decididas a favor do outro negociante. Nenhum suporte técnico será fornecido para os usuários que ignorarem esse aviso e os mecanismos de proteção!
|
||||||
settings.net.warn.invalidBtcConfig=A conexão com a rede Bitcoin falhou porque suas configurações são inválidas.\n\nSuas configurações foram resetadas para utilizar os nós fornecidos da rede Bitcoin. É necessário reiniciar o aplicativo.
|
settings.net.warn.invalidBtcConfig=A conexão com a rede Bitcoin falhou porque suas configurações são inválidas.\n\nSuas configurações foram resetadas para utilizar os nós fornecidos da rede Bitcoin. É necessário reiniciar o aplicativo.
|
||||||
settings.net.localhostBtcNodeInfo=Informações básicas: Haveno busca por um nó Bitcoin local na inicialização. Caso encontre, Haveno irá comunicar com a rede Bitcoin exclusivamente através deste nó.
|
settings.net.localhostXmrNodeInfo=Informações básicas: Haveno busca por um nó Bitcoin local na inicialização. Caso encontre, Haveno irá comunicar com a rede Bitcoin exclusivamente através deste nó.
|
||||||
settings.net.p2PPeersLabel=Pares conectados
|
settings.net.p2PPeersLabel=Pares conectados
|
||||||
settings.net.onionAddressColumn=Endereço onion
|
settings.net.onionAddressColumn=Endereço onion
|
||||||
settings.net.creationDateColumn=Estabelecida
|
settings.net.creationDateColumn=Estabelecida
|
||||||
|
@ -1430,7 +1430,7 @@ filterWindow.mediators=Mediadores filtrados (endereços onion separados por vír
|
||||||
filterWindow.refundAgents=Agentes de reembolso filtrados (endereços onion separados por vírgula)
|
filterWindow.refundAgents=Agentes de reembolso filtrados (endereços onion separados por vírgula)
|
||||||
filterWindow.seedNode=Nós de semente filtrados (endereços onion sep. por vírgula)
|
filterWindow.seedNode=Nós de semente filtrados (endereços onion sep. por vírgula)
|
||||||
filterWindow.priceRelayNode=Nós de transmissão de preço filtrados (endereços onion sep. por vírgula)
|
filterWindow.priceRelayNode=Nós de transmissão de preço filtrados (endereços onion sep. por vírgula)
|
||||||
filterWindow.btcNode=Nós de Bitcoin filtrados (endereços + portas sep. por vírgula)
|
filterWindow.xmrNode=Nós de Bitcoin filtrados (endereços + portas sep. por vírgula)
|
||||||
filterWindow.preventPublicBtcNetwork=Prevenir uso da rede de Bitcoin pública
|
filterWindow.preventPublicBtcNetwork=Prevenir uso da rede de Bitcoin pública
|
||||||
filterWindow.disableAutoConf=Disable auto-confirm
|
filterWindow.disableAutoConf=Disable auto-confirm
|
||||||
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
||||||
|
|
|
@ -1024,19 +1024,19 @@ settings.preferences.editCustomExplorer.addressUrl=Address URL
|
||||||
settings.net.btcHeader=Rede Bitcoin
|
settings.net.btcHeader=Rede Bitcoin
|
||||||
settings.net.p2pHeader=Rede do Haveno
|
settings.net.p2pHeader=Rede do Haveno
|
||||||
settings.net.onionAddressLabel=O meu endereço onion
|
settings.net.onionAddressLabel=O meu endereço onion
|
||||||
settings.net.btcNodesLabel=Usar nós de Bitcoin Core personalizados
|
settings.net.xmrNodesLabel=Usar nós de Monero personalizados
|
||||||
settings.net.bitcoinPeersLabel=Pares conectados
|
settings.net.moneroPeersLabel=Pares conectados
|
||||||
settings.net.useTorForBtcJLabel=Usar Tor para a rede de Bitcoin
|
settings.net.useTorForXmrJLabel=Usar Tor para a rede de Monero
|
||||||
settings.net.bitcoinNodesLabel=Nós de Bitcoin Core para conectar
|
settings.net.moneroNodesLabel=Nós de Monero para conectar
|
||||||
settings.net.useProvidedNodesRadio=Usar nós de Bitcoin Core providenciados
|
settings.net.useProvidedNodesRadio=Usar nós de Bitcoin Core providenciados
|
||||||
settings.net.usePublicNodesRadio=Usar rede de Bitcoin pública
|
settings.net.usePublicNodesRadio=Usar rede de Bitcoin pública
|
||||||
settings.net.useCustomNodesRadio=Usar nós de Bitcoin Core personalizados
|
settings.net.useCustomNodesRadio=Usar nós de Bitcoin Core personalizados
|
||||||
settings.net.warn.usePublicNodes=If you use the public Bitcoin network you are exposed to a severe privacy problem caused by the broken bloom filter design and implementation which is used for SPV wallets like BitcoinJ (used in Haveno). Any full node you are connected to could find out that all your wallet addresses belong to one entity.\n\nPlease read more about the details at [HYPERLINK:https://bisq.network/blog/privacy-in-bitsquare].\n\nAre you sure you want to use the public nodes?
|
settings.net.warn.usePublicNodes=If you use public Monero nodes, you are subject to any risk of using untrusted remote nodes.\n\nPlease read more details at [HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html].\n\nAre you sure you want to use public nodes?
|
||||||
settings.net.warn.usePublicNodes.useProvided=Não, usar nós providenciados
|
settings.net.warn.usePublicNodes.useProvided=Não, usar nós providenciados
|
||||||
settings.net.warn.usePublicNodes.usePublic=Sim, usar a rede pública
|
settings.net.warn.usePublicNodes.usePublic=Sim, usar a rede pública
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=Por favor, certifique-se de que seu nó Bitcoin é um nó confiável do Bitcoin Core!\n\nConectar-se a nós que não seguem as regras de consenso do Bitcoin Core pode corromper a sua carteira e causar problemas no processo de negócio.\n\nOs usuários que se conectam a nós que violam regras de consenso são responsáveis por qualquer dano resultante. Quaisquer disputas resultantes serão decididas em favor do outro par. Nenhum suporte técnico será dado aos usuários que ignorarem esses alertas e mecanismos de proteção!
|
settings.net.warn.useCustomNodes.B2XWarning=Por favor, certifique-se de que seu nó Bitcoin é um nó confiável do Bitcoin Core!\n\nConectar-se a nós que não seguem as regras de consenso do Bitcoin Core pode corromper a sua carteira e causar problemas no processo de negócio.\n\nOs usuários que se conectam a nós que violam regras de consenso são responsáveis por qualquer dano resultante. Quaisquer disputas resultantes serão decididas em favor do outro par. Nenhum suporte técnico será dado aos usuários que ignorarem esses alertas e mecanismos de proteção!
|
||||||
settings.net.warn.invalidBtcConfig=A conexão à rede Bitcoin falhou porque sua configuração é inválida.\n\nA sua configuração foi redefinida para usar os nós de Bitcoin fornecidos. Você precisará reiniciar o programa.
|
settings.net.warn.invalidBtcConfig=A conexão à rede Bitcoin falhou porque sua configuração é inválida.\n\nA sua configuração foi redefinida para usar os nós de Bitcoin fornecidos. Você precisará reiniciar o programa.
|
||||||
settings.net.localhostBtcNodeInfo=Background information: Haveno looks for a local Bitcoin node when starting. If it is found, Haveno will communicate with the Bitcoin network exclusively through it.
|
settings.net.localhostXmrNodeInfo=Background information: Haveno looks for a local Bitcoin node when starting. If it is found, Haveno will communicate with the Bitcoin network exclusively through it.
|
||||||
settings.net.p2PPeersLabel=Pares conectados
|
settings.net.p2PPeersLabel=Pares conectados
|
||||||
settings.net.onionAddressColumn=Endereço onion
|
settings.net.onionAddressColumn=Endereço onion
|
||||||
settings.net.creationDateColumn=Estabelecida
|
settings.net.creationDateColumn=Estabelecida
|
||||||
|
@ -1425,7 +1425,7 @@ filterWindow.mediators=Mediadores filtrados (endereços onion separados por vír
|
||||||
filterWindow.refundAgents=Agentes de reembolso filtrados (endereços onion sep. por virgula)
|
filterWindow.refundAgents=Agentes de reembolso filtrados (endereços onion sep. por virgula)
|
||||||
filterWindow.seedNode=Nós de semente filtrados (endereços onion sep. por vírgula)
|
filterWindow.seedNode=Nós de semente filtrados (endereços onion sep. por vírgula)
|
||||||
filterWindow.priceRelayNode=Nós de transmissão de preço filtrados (endereços onion sep. por vírgula)
|
filterWindow.priceRelayNode=Nós de transmissão de preço filtrados (endereços onion sep. por vírgula)
|
||||||
filterWindow.btcNode=Nós de Bitcoin filtrados (endereços + portas sep. por vírgula)
|
filterWindow.xmrNode=Nós de Bitcoin filtrados (endereços + portas sep. por vírgula)
|
||||||
filterWindow.preventPublicBtcNetwork=Prevenir uso da rede de Bitcoin pública
|
filterWindow.preventPublicBtcNetwork=Prevenir uso da rede de Bitcoin pública
|
||||||
filterWindow.disableAutoConf=Disable auto-confirm
|
filterWindow.disableAutoConf=Disable auto-confirm
|
||||||
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
||||||
|
|
|
@ -1024,19 +1024,19 @@ settings.preferences.editCustomExplorer.addressUrl=Address URL
|
||||||
settings.net.btcHeader=Сеть Биткойн
|
settings.net.btcHeader=Сеть Биткойн
|
||||||
settings.net.p2pHeader=Haveno network
|
settings.net.p2pHeader=Haveno network
|
||||||
settings.net.onionAddressLabel=Мой onion-адрес
|
settings.net.onionAddressLabel=Мой onion-адрес
|
||||||
settings.net.btcNodesLabel=Использовать особые узлы Bitcoin Core
|
settings.net.xmrNodesLabel=Использовать особые узлы Monero
|
||||||
settings.net.bitcoinPeersLabel=Подключенные пиры
|
settings.net.moneroPeersLabel=Подключенные пиры
|
||||||
settings.net.useTorForBtcJLabel=Использовать Tor для сети Биткойн
|
settings.net.useTorForXmrJLabel=Использовать Tor для сети Monero
|
||||||
settings.net.bitcoinNodesLabel=Узлы Bitcoin Core для подключения
|
settings.net.moneroNodesLabel=Узлы Monero для подключения
|
||||||
settings.net.useProvidedNodesRadio=Использовать предоставленные узлы Bitcoin Core
|
settings.net.useProvidedNodesRadio=Использовать предоставленные узлы Bitcoin Core
|
||||||
settings.net.usePublicNodesRadio=Использовать общедоступную сеть Bitcoin
|
settings.net.usePublicNodesRadio=Использовать общедоступную сеть Bitcoin
|
||||||
settings.net.useCustomNodesRadio=Использовать особые узлы Bitcoin Core
|
settings.net.useCustomNodesRadio=Использовать особые узлы Bitcoin Core
|
||||||
settings.net.warn.usePublicNodes=If you use the public Bitcoin network you are exposed to a severe privacy problem caused by the broken bloom filter design and implementation which is used for SPV wallets like BitcoinJ (used in Haveno). Any full node you are connected to could find out that all your wallet addresses belong to one entity.\n\nPlease read more about the details at [HYPERLINK:https://bisq.network/blog/privacy-in-bitsquare].\n\nAre you sure you want to use the public nodes?
|
settings.net.warn.usePublicNodes=If you use public Monero nodes, you are subject to any risk of using untrusted remote nodes.\n\nPlease read more details at [HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html].\n\nAre you sure you want to use public nodes?
|
||||||
settings.net.warn.usePublicNodes.useProvided=Нет, использовать предоставленные узлы
|
settings.net.warn.usePublicNodes.useProvided=Нет, использовать предоставленные узлы
|
||||||
settings.net.warn.usePublicNodes.usePublic=Да, использовать общедоступную сеть
|
settings.net.warn.usePublicNodes.usePublic=Да, использовать общедоступную сеть
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=Убедитесь, что ваш узел Биткойн является доверенным узлом Bitcoin Core! \n\nПодключение к узлам, не следующим правилам консенсуса Bitcoin Core, может повредить ваш кошелек и вызвать проблемы в процессе торговли.\n\nПользователи, подключающиеся к узлам, нарушающим правила консенсуса, несут ответственность за любой причиненный ущерб. Любые споры в таком случае будут решаться в пользу вашего контрагента. Пользователям, игнорирующим это предупреждение и механизмы защиты, техническая поддержка предоставляться не будет!
|
settings.net.warn.useCustomNodes.B2XWarning=Убедитесь, что ваш узел Биткойн является доверенным узлом Bitcoin Core! \n\nПодключение к узлам, не следующим правилам консенсуса Bitcoin Core, может повредить ваш кошелек и вызвать проблемы в процессе торговли.\n\nПользователи, подключающиеся к узлам, нарушающим правила консенсуса, несут ответственность за любой причиненный ущерб. Любые споры в таком случае будут решаться в пользу вашего контрагента. Пользователям, игнорирующим это предупреждение и механизмы защиты, техническая поддержка предоставляться не будет!
|
||||||
settings.net.warn.invalidBtcConfig=Connection to the Bitcoin network failed because your configuration is invalid.\n\nYour configuration has been reset to use the provided Bitcoin nodes instead. You will need to restart the application.
|
settings.net.warn.invalidBtcConfig=Connection to the Bitcoin network failed because your configuration is invalid.\n\nYour configuration has been reset to use the provided Bitcoin nodes instead. You will need to restart the application.
|
||||||
settings.net.localhostBtcNodeInfo=Background information: Haveno looks for a local Bitcoin node when starting. If it is found, Haveno will communicate with the Bitcoin network exclusively through it.
|
settings.net.localhostXmrNodeInfo=Background information: Haveno looks for a local Bitcoin node when starting. If it is found, Haveno will communicate with the Bitcoin network exclusively through it.
|
||||||
settings.net.p2PPeersLabel=Подключенные пиры
|
settings.net.p2PPeersLabel=Подключенные пиры
|
||||||
settings.net.onionAddressColumn=Onion-адрес
|
settings.net.onionAddressColumn=Onion-адрес
|
||||||
settings.net.creationDateColumn=Создано
|
settings.net.creationDateColumn=Создано
|
||||||
|
@ -1425,7 +1425,7 @@ filterWindow.mediators=Filtered mediators (comma sep. onion addresses)
|
||||||
filterWindow.refundAgents=Filtered refund agents (comma sep. onion addresses)
|
filterWindow.refundAgents=Filtered refund agents (comma sep. onion addresses)
|
||||||
filterWindow.seedNode=Отфильтрованные исходные узлы (onion-адреса через запят.)
|
filterWindow.seedNode=Отфильтрованные исходные узлы (onion-адреса через запят.)
|
||||||
filterWindow.priceRelayNode=Отфильтрованные ретрансляторы курса (onion-адреса через запят.)
|
filterWindow.priceRelayNode=Отфильтрованные ретрансляторы курса (onion-адреса через запят.)
|
||||||
filterWindow.btcNode=Отфильтрованные узлы Биткойн (адреса + порты через запят.)
|
filterWindow.xmrNode=Отфильтрованные узлы Биткойн (адреса + порты через запят.)
|
||||||
filterWindow.preventPublicBtcNetwork=Не использовать общедоступную сеть Биткойн
|
filterWindow.preventPublicBtcNetwork=Не использовать общедоступную сеть Биткойн
|
||||||
filterWindow.disableAutoConf=Disable auto-confirm
|
filterWindow.disableAutoConf=Disable auto-confirm
|
||||||
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
||||||
|
|
|
@ -1024,19 +1024,19 @@ settings.preferences.editCustomExplorer.addressUrl=Address URL
|
||||||
settings.net.btcHeader=เครือข่าย Bitcoin
|
settings.net.btcHeader=เครือข่าย Bitcoin
|
||||||
settings.net.p2pHeader=Haveno network
|
settings.net.p2pHeader=Haveno network
|
||||||
settings.net.onionAddressLabel=ที่อยู่ onion ของฉัน
|
settings.net.onionAddressLabel=ที่อยู่ onion ของฉัน
|
||||||
settings.net.btcNodesLabel=ใช้โหนดเครือข่าย Bitcoin Core ที่กำหนดเอง
|
settings.net.xmrNodesLabel=ใช้โหนดเครือข่าย Monero ที่กำหนดเอง
|
||||||
settings.net.bitcoinPeersLabel=เชื่อมต่อกับเน็ตเวิร์ก peers แล้ว
|
settings.net.moneroPeersLabel=เชื่อมต่อกับเน็ตเวิร์ก peers แล้ว
|
||||||
settings.net.useTorForBtcJLabel=ใช้ Tor สำหรับเครือข่าย Bitcoin
|
settings.net.useTorForXmrJLabel=ใช้ Tor สำหรับเครือข่าย Monero
|
||||||
settings.net.bitcoinNodesLabel=ใช้โหนดเครือข่าย Bitcoin Core เพื่อเชื่อมต่อ
|
settings.net.moneroNodesLabel=ใช้โหนดเครือข่าย Monero เพื่อเชื่อมต่อ
|
||||||
settings.net.useProvidedNodesRadio=ใช้โหนดเครือข่าย Bitcoin ที่ให้มา
|
settings.net.useProvidedNodesRadio=ใช้โหนดเครือข่าย Bitcoin ที่ให้มา
|
||||||
settings.net.usePublicNodesRadio=ใช้เครือข่าย Bitcoin สาธารณะ
|
settings.net.usePublicNodesRadio=ใช้เครือข่าย Bitcoin สาธารณะ
|
||||||
settings.net.useCustomNodesRadio=ใช้โหนดเครือข่าย Bitcoin Core ที่กำหนดเอง
|
settings.net.useCustomNodesRadio=ใช้โหนดเครือข่าย Bitcoin Core ที่กำหนดเอง
|
||||||
settings.net.warn.usePublicNodes=If you use the public Bitcoin network you are exposed to a severe privacy problem caused by the broken bloom filter design and implementation which is used for SPV wallets like BitcoinJ (used in Haveno). Any full node you are connected to could find out that all your wallet addresses belong to one entity.\n\nPlease read more about the details at [HYPERLINK:https://bisq.network/blog/privacy-in-bitsquare].\n\nAre you sure you want to use the public nodes?
|
settings.net.warn.usePublicNodes=If you use public Monero nodes, you are subject to any risk of using untrusted remote nodes.\n\nPlease read more details at [HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html].\n\nAre you sure you want to use public nodes?
|
||||||
settings.net.warn.usePublicNodes.useProvided=ไม่ ใช้โหนดที่ให้มา
|
settings.net.warn.usePublicNodes.useProvided=ไม่ ใช้โหนดที่ให้มา
|
||||||
settings.net.warn.usePublicNodes.usePublic=ใช่ ใช้เครือข่ายสาธารณะ
|
settings.net.warn.usePublicNodes.usePublic=ใช่ ใช้เครือข่ายสาธารณะ
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=โปรดตรวจสอบว่าโหนด Bitcoin ของคุณเป็นโหนด Bitcoin Core ที่เชื่อถือได้!\n\nการเชื่อมต่อกับโหนดที่ไม่ปฏิบัติตามกฎกติกาการยินยอมของ Bitcoin Core อาจทำให้ wallet ของคุณเกิดปัญหาในกระบวนการทางการซื้อขายได้\n\nผู้ใช้ที่เชื่อมต่อกับโหนดที่ละเมิดกฎเป็นเอกฉันท์นั้นจำเป็นต้องรับผิดชอบต่อความเสียหายที่สร้างขึ้น ข้อพิพาทที่เกิดจากการที่จะได้รับการตัดสินใจจาก เน็ตกเวิร์ก Peer คนอื่น ๆ จะไม่มีการสนับสนุนด้านเทคนิคแก่ผู้ใช้ที่ไม่สนใจคำเตือนและกลไกการป้องกันของเรา!
|
settings.net.warn.useCustomNodes.B2XWarning=โปรดตรวจสอบว่าโหนด Bitcoin ของคุณเป็นโหนด Bitcoin Core ที่เชื่อถือได้!\n\nการเชื่อมต่อกับโหนดที่ไม่ปฏิบัติตามกฎกติกาการยินยอมของ Bitcoin Core อาจทำให้ wallet ของคุณเกิดปัญหาในกระบวนการทางการซื้อขายได้\n\nผู้ใช้ที่เชื่อมต่อกับโหนดที่ละเมิดกฎเป็นเอกฉันท์นั้นจำเป็นต้องรับผิดชอบต่อความเสียหายที่สร้างขึ้น ข้อพิพาทที่เกิดจากการที่จะได้รับการตัดสินใจจาก เน็ตกเวิร์ก Peer คนอื่น ๆ จะไม่มีการสนับสนุนด้านเทคนิคแก่ผู้ใช้ที่ไม่สนใจคำเตือนและกลไกการป้องกันของเรา!
|
||||||
settings.net.warn.invalidBtcConfig=Connection to the Bitcoin network failed because your configuration is invalid.\n\nYour configuration has been reset to use the provided Bitcoin nodes instead. You will need to restart the application.
|
settings.net.warn.invalidBtcConfig=Connection to the Bitcoin network failed because your configuration is invalid.\n\nYour configuration has been reset to use the provided Bitcoin nodes instead. You will need to restart the application.
|
||||||
settings.net.localhostBtcNodeInfo=Background information: Haveno looks for a local Bitcoin node when starting. If it is found, Haveno will communicate with the Bitcoin network exclusively through it.
|
settings.net.localhostXmrNodeInfo=Background information: Haveno looks for a local Bitcoin node when starting. If it is found, Haveno will communicate with the Bitcoin network exclusively through it.
|
||||||
settings.net.p2PPeersLabel=เชื่อมต่อกับเน็ตเวิร์ก peers แล้ว
|
settings.net.p2PPeersLabel=เชื่อมต่อกับเน็ตเวิร์ก peers แล้ว
|
||||||
settings.net.onionAddressColumn=ที่อยู่ Onion
|
settings.net.onionAddressColumn=ที่อยู่ Onion
|
||||||
settings.net.creationDateColumn=ที่จัดตั้งขึ้น
|
settings.net.creationDateColumn=ที่จัดตั้งขึ้น
|
||||||
|
@ -1425,7 +1425,7 @@ filterWindow.mediators=Filtered mediators (comma sep. onion addresses)
|
||||||
filterWindow.refundAgents=Filtered refund agents (comma sep. onion addresses)
|
filterWindow.refundAgents=Filtered refund agents (comma sep. onion addresses)
|
||||||
filterWindow.seedNode=แหล่งข้อมูลในโหนดเครือข่ายที่ได้รับการกรอง (คั่นด้วยเครื่องหมายจุลภาค ที่อยู่ onion)
|
filterWindow.seedNode=แหล่งข้อมูลในโหนดเครือข่ายที่ได้รับการกรอง (คั่นด้วยเครื่องหมายจุลภาค ที่อยู่ onion)
|
||||||
filterWindow.priceRelayNode=โหนดผลัดเปลี่ยนราคาที่ได้รับการกรอง (คั่นด้วยเครื่องหมายจุลภาค ที่อยู่ onion)
|
filterWindow.priceRelayNode=โหนดผลัดเปลี่ยนราคาที่ได้รับการกรอง (คั่นด้วยเครื่องหมายจุลภาค ที่อยู่ onion)
|
||||||
filterWindow.btcNode=โหนด Bitcoin ที่ได้รับการกรองแล้ว (คั่นด้วยเครื่องหมายจุลภาค ที่อยู่ + พอร์ต)
|
filterWindow.xmrNode=โหนด Bitcoin ที่ได้รับการกรองแล้ว (คั่นด้วยเครื่องหมายจุลภาค ที่อยู่ + พอร์ต)
|
||||||
filterWindow.preventPublicBtcNetwork=ป้องกันการใช้เครือข่าย Bitcoin สาธารณะ
|
filterWindow.preventPublicBtcNetwork=ป้องกันการใช้เครือข่าย Bitcoin สาธารณะ
|
||||||
filterWindow.disableAutoConf=Disable auto-confirm
|
filterWindow.disableAutoConf=Disable auto-confirm
|
||||||
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
||||||
|
|
|
@ -1026,19 +1026,19 @@ settings.preferences.editCustomExplorer.addressUrl=Address URL
|
||||||
settings.net.btcHeader=Mạng Bitcoin
|
settings.net.btcHeader=Mạng Bitcoin
|
||||||
settings.net.p2pHeader=Haveno network
|
settings.net.p2pHeader=Haveno network
|
||||||
settings.net.onionAddressLabel=Địa chỉ onion của tôi
|
settings.net.onionAddressLabel=Địa chỉ onion của tôi
|
||||||
settings.net.btcNodesLabel=Sử dụng nút Bitcoin Core thông dụng
|
settings.net.xmrNodesLabel=Sử dụng nút Monero thông dụng
|
||||||
settings.net.bitcoinPeersLabel=Các đối tác được kết nối
|
settings.net.moneroPeersLabel=Các đối tác được kết nối
|
||||||
settings.net.useTorForBtcJLabel=Sử dụng Tor cho mạng Bitcoin
|
settings.net.useTorForXmrJLabel=Sử dụng Tor cho mạng Monero
|
||||||
settings.net.bitcoinNodesLabel=nút Bitcoin Core để kết nối
|
settings.net.moneroNodesLabel=nút Monero để kết nối
|
||||||
settings.net.useProvidedNodesRadio=Sử dụng các nút Bitcoin Core đã cung cấp
|
settings.net.useProvidedNodesRadio=Sử dụng các nút Bitcoin Core đã cung cấp
|
||||||
settings.net.usePublicNodesRadio=Sử dụng mạng Bitcoin công cộng
|
settings.net.usePublicNodesRadio=Sử dụng mạng Bitcoin công cộng
|
||||||
settings.net.useCustomNodesRadio=Sử dụng nút Bitcoin Core thông dụng
|
settings.net.useCustomNodesRadio=Sử dụng nút Bitcoin Core thông dụng
|
||||||
settings.net.warn.usePublicNodes=If you use the public Bitcoin network you are exposed to a severe privacy problem caused by the broken bloom filter design and implementation which is used for SPV wallets like BitcoinJ (used in Haveno). Any full node you are connected to could find out that all your wallet addresses belong to one entity.\n\nPlease read more about the details at [HYPERLINK:https://bisq.network/blog/privacy-in-bitsquare].\n\nAre you sure you want to use the public nodes?
|
settings.net.warn.usePublicNodes=If you use public Monero nodes, you are subject to any risk of using untrusted remote nodes.\n\nPlease read more details at [HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html].\n\nAre you sure you want to use public nodes?
|
||||||
settings.net.warn.usePublicNodes.useProvided=Không, sử dụng nút được cung cấp
|
settings.net.warn.usePublicNodes.useProvided=Không, sử dụng nút được cung cấp
|
||||||
settings.net.warn.usePublicNodes.usePublic=Vâng, sử dụng nút công cộng
|
settings.net.warn.usePublicNodes.usePublic=Vâng, sử dụng nút công cộng
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=Vui lòng chắc chắn rằng nút Bitcoin của bạn là nút Bitcoin Core đáng tin cậy!\n\nKết nối với nút không tuân thủ nguyên tắc đồng thuận Bitcoin Core có thể làm hỏng ví của bạn và gây ra các vấn đề trong quá trình giao dịch.\n\nNgười dùng kết nối với nút vi phạm nguyên tắc đồng thuận chịu trách nhiệm đối với các thiệt hại mà việc này gây ra. Các khiếu nại do điều này gây ra sẽ được quyết định theo hướng có lợi cho đối tác bên kia. Sẽ không có hỗ trợ về mặt kỹ thuật nào cho người dùng không tuân thủ cơ chế cảnh báo và bảo vệ của chúng tôi!
|
settings.net.warn.useCustomNodes.B2XWarning=Vui lòng chắc chắn rằng nút Bitcoin của bạn là nút Bitcoin Core đáng tin cậy!\n\nKết nối với nút không tuân thủ nguyên tắc đồng thuận Bitcoin Core có thể làm hỏng ví của bạn và gây ra các vấn đề trong quá trình giao dịch.\n\nNgười dùng kết nối với nút vi phạm nguyên tắc đồng thuận chịu trách nhiệm đối với các thiệt hại mà việc này gây ra. Các khiếu nại do điều này gây ra sẽ được quyết định theo hướng có lợi cho đối tác bên kia. Sẽ không có hỗ trợ về mặt kỹ thuật nào cho người dùng không tuân thủ cơ chế cảnh báo và bảo vệ của chúng tôi!
|
||||||
settings.net.warn.invalidBtcConfig=Connection to the Bitcoin network failed because your configuration is invalid.\n\nYour configuration has been reset to use the provided Bitcoin nodes instead. You will need to restart the application.
|
settings.net.warn.invalidBtcConfig=Connection to the Bitcoin network failed because your configuration is invalid.\n\nYour configuration has been reset to use the provided Bitcoin nodes instead. You will need to restart the application.
|
||||||
settings.net.localhostBtcNodeInfo=Background information: Haveno looks for a local Bitcoin node when starting. If it is found, Haveno will communicate with the Bitcoin network exclusively through it.
|
settings.net.localhostXmrNodeInfo=Background information: Haveno looks for a local Bitcoin node when starting. If it is found, Haveno will communicate with the Bitcoin network exclusively through it.
|
||||||
settings.net.p2PPeersLabel=Các đối tác được kết nối
|
settings.net.p2PPeersLabel=Các đối tác được kết nối
|
||||||
settings.net.onionAddressColumn=Địa chỉ onion
|
settings.net.onionAddressColumn=Địa chỉ onion
|
||||||
settings.net.creationDateColumn=Đã thiết lập
|
settings.net.creationDateColumn=Đã thiết lập
|
||||||
|
@ -1427,7 +1427,7 @@ filterWindow.mediators=Filtered mediators (comma sep. onion addresses)
|
||||||
filterWindow.refundAgents=Filtered refund agents (comma sep. onion addresses)
|
filterWindow.refundAgents=Filtered refund agents (comma sep. onion addresses)
|
||||||
filterWindow.seedNode=Node cung cấp thông tin đã lọc (địa chỉ onion cách nhau bằng dấu phẩy)
|
filterWindow.seedNode=Node cung cấp thông tin đã lọc (địa chỉ onion cách nhau bằng dấu phẩy)
|
||||||
filterWindow.priceRelayNode=nút rơle giá đã lọc (địa chỉ onion cách nhau bằng dấu phẩy)
|
filterWindow.priceRelayNode=nút rơle giá đã lọc (địa chỉ onion cách nhau bằng dấu phẩy)
|
||||||
filterWindow.btcNode=nút Bitcoin đã lọc (địa chỉ cách nhau bằng dấu phẩy + cửa)
|
filterWindow.xmrNode=nút Bitcoin đã lọc (địa chỉ cách nhau bằng dấu phẩy + cửa)
|
||||||
filterWindow.preventPublicBtcNetwork=Ngăn sử dụng mạng Bitcoin công cộng
|
filterWindow.preventPublicBtcNetwork=Ngăn sử dụng mạng Bitcoin công cộng
|
||||||
filterWindow.disableAutoConf=Disable auto-confirm
|
filterWindow.disableAutoConf=Disable auto-confirm
|
||||||
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
filterWindow.autoConfExplorers=Filtered auto-confirm explorers (comma sep. addresses)
|
||||||
|
|
|
@ -1024,19 +1024,19 @@ settings.preferences.editCustomExplorer.addressUrl=地址 URL
|
||||||
settings.net.btcHeader=比特币网络
|
settings.net.btcHeader=比特币网络
|
||||||
settings.net.p2pHeader=Haveno 网络
|
settings.net.p2pHeader=Haveno 网络
|
||||||
settings.net.onionAddressLabel=我的匿名地址
|
settings.net.onionAddressLabel=我的匿名地址
|
||||||
settings.net.btcNodesLabel=使用自定义比特币主节点
|
settings.net.xmrNodesLabel=使用自定义比特币主节点
|
||||||
settings.net.bitcoinPeersLabel=已连接节点
|
settings.net.moneroPeersLabel=已连接节点
|
||||||
settings.net.useTorForBtcJLabel=使用 Tor 连接比特币网络
|
settings.net.useTorForXmrJLabel=使用 Tor 连接 Monero 网络
|
||||||
settings.net.bitcoinNodesLabel=需要连接比特币核心
|
settings.net.moneroNodesLabel=需要连接 Monero
|
||||||
settings.net.useProvidedNodesRadio=使用公共比特币核心节点
|
settings.net.useProvidedNodesRadio=使用公共比特币核心节点
|
||||||
settings.net.usePublicNodesRadio=使用公共比特币网络
|
settings.net.usePublicNodesRadio=使用公共比特币网络
|
||||||
settings.net.useCustomNodesRadio=使用自定义比特币主节点
|
settings.net.useCustomNodesRadio=使用自定义比特币主节点
|
||||||
settings.net.warn.usePublicNodes=如果你使用公共比特币网络,你就会面临严重的隐私问题,这是由损坏的 bloom filter 设计和实现造成的,它适用于像 BitcoinJ 这样的 SPV 钱包(在 Haveno 中使用)。您所连接的任何完整节点都可以发现您的所有钱包地址都属于一个实体。\n\n详情请浏览: https://bisq.network/blog/privacy-in-bitsquare 。\n\n您确定要使用公共节点吗?
|
settings.net.warn.usePublicNodes=如果您使用公共的Monero节点,您将面临使用不受信任的远程节点带来的任何风险。\n\n请在[HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html]上阅读更多详细信息。\n\n您确定要使用公共节点吗?
|
||||||
settings.net.warn.usePublicNodes.useProvided=不,使用给定的节点
|
settings.net.warn.usePublicNodes.useProvided=不,使用给定的节点
|
||||||
settings.net.warn.usePublicNodes.usePublic=使用公共网络
|
settings.net.warn.usePublicNodes.usePublic=使用公共网络
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=请确保您的比特币节点是一个可信的比特币核心节点!\n\n连接到不遵循比特币核心共识规则的节点可能会损坏您的钱包,并在交易过程中造成问题。\n\n连接到违反共识规则的节点的用户应对任何由此造成的损害负责。任何由此产生的纠纷都将有利于另一方。对于忽略此警告和保护机制的用户,不提供任何技术支持!
|
settings.net.warn.useCustomNodes.B2XWarning=请确保您的比特币节点是一个可信的比特币核心节点!\n\n连接到不遵循比特币核心共识规则的节点可能会损坏您的钱包,并在交易过程中造成问题。\n\n连接到违反共识规则的节点的用户应对任何由此造成的损害负责。任何由此产生的纠纷都将有利于另一方。对于忽略此警告和保护机制的用户,不提供任何技术支持!
|
||||||
settings.net.warn.invalidBtcConfig=由于您的配置无效,无法连接至比特币网络。\n\n您的配置已经被重置为默认比特币节点。你需要重启 Haveno。
|
settings.net.warn.invalidBtcConfig=由于您的配置无效,无法连接至比特币网络。\n\n您的配置已经被重置为默认比特币节点。你需要重启 Haveno。
|
||||||
settings.net.localhostBtcNodeInfo=背景信息:Haveno 在启动时会在本地查找比特币节点。如果有,Haveno 将只通过它与比特币网络进行通信。
|
settings.net.localhostXmrNodeInfo=背景信息:Haveno 在启动时会在本地查找比特币节点。如果有,Haveno 将只通过它与比特币网络进行通信。
|
||||||
settings.net.p2PPeersLabel=已连接节点
|
settings.net.p2PPeersLabel=已连接节点
|
||||||
settings.net.onionAddressColumn=匿名地址
|
settings.net.onionAddressColumn=匿名地址
|
||||||
settings.net.creationDateColumn=已建立连接
|
settings.net.creationDateColumn=已建立连接
|
||||||
|
@ -1426,7 +1426,7 @@ filterWindow.mediators=筛选后的调解员(用逗号“,”隔开的洋葱
|
||||||
filterWindow.refundAgents=筛选后的退款助理(用逗号“,”隔开的洋葱地址)
|
filterWindow.refundAgents=筛选后的退款助理(用逗号“,”隔开的洋葱地址)
|
||||||
filterWindow.seedNode=筛选后的种子节点(用逗号“,”隔开的洋葱地址)
|
filterWindow.seedNode=筛选后的种子节点(用逗号“,”隔开的洋葱地址)
|
||||||
filterWindow.priceRelayNode=筛选后的价格中继节点(用逗号“,”隔开的洋葱地址)
|
filterWindow.priceRelayNode=筛选后的价格中继节点(用逗号“,”隔开的洋葱地址)
|
||||||
filterWindow.btcNode=筛选后的比特币节点(用逗号“,”隔开的地址+端口)
|
filterWindow.xmrNode=筛选后的比特币节点(用逗号“,”隔开的地址+端口)
|
||||||
filterWindow.preventPublicBtcNetwork=禁止使用公共比特币网络
|
filterWindow.preventPublicBtcNetwork=禁止使用公共比特币网络
|
||||||
filterWindow.disableAutoConf=禁用自动确认
|
filterWindow.disableAutoConf=禁用自动确认
|
||||||
filterWindow.autoConfExplorers=已过滤自动确认浏览器(逗号分隔地址)
|
filterWindow.autoConfExplorers=已过滤自动确认浏览器(逗号分隔地址)
|
||||||
|
|
|
@ -1024,19 +1024,19 @@ settings.preferences.editCustomExplorer.addressUrl=地址 URL
|
||||||
settings.net.btcHeader=比特幣網絡
|
settings.net.btcHeader=比特幣網絡
|
||||||
settings.net.p2pHeader=Haveno 網絡
|
settings.net.p2pHeader=Haveno 網絡
|
||||||
settings.net.onionAddressLabel=我的匿名地址
|
settings.net.onionAddressLabel=我的匿名地址
|
||||||
settings.net.btcNodesLabel=使用自定義比特幣主節點
|
settings.net.xmrNodesLabel=使用自定义Monero节点
|
||||||
settings.net.bitcoinPeersLabel=已連接節點
|
settings.net.moneroPeersLabel=已連接節點
|
||||||
settings.net.useTorForBtcJLabel=使用 Tor 連接比特幣網絡
|
settings.net.useTorForXmrJLabel=使用 Tor 連接 Monero 網絡
|
||||||
settings.net.bitcoinNodesLabel=需要連接比特幣核心
|
settings.net.moneroNodesLabel=需要連接 Monero
|
||||||
settings.net.useProvidedNodesRadio=使用公共比特幣核心節點
|
settings.net.useProvidedNodesRadio=使用公共比特幣核心節點
|
||||||
settings.net.usePublicNodesRadio=使用公共比特幣網絡
|
settings.net.usePublicNodesRadio=使用公共比特幣網絡
|
||||||
settings.net.useCustomNodesRadio=使用自定義比特幣主節點
|
settings.net.useCustomNodesRadio=使用自定義比特幣主節點
|
||||||
settings.net.warn.usePublicNodes=如果你使用公共比特幣網絡,你就會面臨嚴重的隱私問題,這是由損壞的 bloom filter 設計和實現造成的,它適用於像 BitcoinJ 這樣的 SPV 錢包(在 Haveno 中使用)。您所連接的任何完整節點都可以發現您的所有錢包地址都屬於一個實體。\n\n詳情請瀏覽: https://bisq.network/blog/privacy-in-bitsquare 。\n\n您確定要使用公共節點嗎?
|
settings.net.warn.usePublicNodes=如果您使用公共的Monero节点,您将面临使用不受信任的远程节点带来的任何风险。\n\n请在[HYPERLINK:https://www.getmonero.org/resources/moneropedia/remote-node.html]阅读更多详细信息。\n\n您确定要使用公共节点吗?
|
||||||
settings.net.warn.usePublicNodes.useProvided=不,使用給定的節點
|
settings.net.warn.usePublicNodes.useProvided=不,使用給定的節點
|
||||||
settings.net.warn.usePublicNodes.usePublic=使用公共網絡
|
settings.net.warn.usePublicNodes.usePublic=使用公共網絡
|
||||||
settings.net.warn.useCustomNodes.B2XWarning=請確保您的比特幣節點是一個可信的比特幣核心節點!\n\n連接到不遵循比特幣核心共識規則的節點可能會損壞您的錢包,並在交易過程中造成問題。\n\n連接到違反共識規則的節點的用户應對任何由此造成的損害負責。任何由此產生的糾紛都將有利於另一方。對於忽略此警吿和保護機制的用户,不提供任何技術支持!
|
settings.net.warn.useCustomNodes.B2XWarning=請確保您的比特幣節點是一個可信的比特幣核心節點!\n\n連接到不遵循比特幣核心共識規則的節點可能會損壞您的錢包,並在交易過程中造成問題。\n\n連接到違反共識規則的節點的用户應對任何由此造成的損害負責。任何由此產生的糾紛都將有利於另一方。對於忽略此警吿和保護機制的用户,不提供任何技術支持!
|
||||||
settings.net.warn.invalidBtcConfig=由於您的配置無效,無法連接至比特幣網絡。\n\n您的配置已經被重置為默認比特幣節點。你需要重啟 Haveno。
|
settings.net.warn.invalidBtcConfig=由於您的配置無效,無法連接至比特幣網絡。\n\n您的配置已經被重置為默認比特幣節點。你需要重啟 Haveno。
|
||||||
settings.net.localhostBtcNodeInfo=背景信息:Haveno 在啟動時會在本地查找比特幣節點。如果有,Haveno 將只通過它與比特幣網絡進行通信。
|
settings.net.localhostXmrNodeInfo=背景信息:Haveno 在啟動時會在本地查找比特幣節點。如果有,Haveno 將只通過它與比特幣網絡進行通信。
|
||||||
settings.net.p2PPeersLabel=已連接節點
|
settings.net.p2PPeersLabel=已連接節點
|
||||||
settings.net.onionAddressColumn=匿名地址
|
settings.net.onionAddressColumn=匿名地址
|
||||||
settings.net.creationDateColumn=已建立連接
|
settings.net.creationDateColumn=已建立連接
|
||||||
|
@ -1426,7 +1426,7 @@ filterWindow.mediators=篩選後的調解員(用逗號“,”隔開的洋葱
|
||||||
filterWindow.refundAgents=篩選後的退款助理(用逗號“,”隔開的洋葱地址)
|
filterWindow.refundAgents=篩選後的退款助理(用逗號“,”隔開的洋葱地址)
|
||||||
filterWindow.seedNode=篩選後的種子節點(用逗號“,”隔開的洋葱地址)
|
filterWindow.seedNode=篩選後的種子節點(用逗號“,”隔開的洋葱地址)
|
||||||
filterWindow.priceRelayNode=篩選後的價格中繼節點(用逗號“,”隔開的洋葱地址)
|
filterWindow.priceRelayNode=篩選後的價格中繼節點(用逗號“,”隔開的洋葱地址)
|
||||||
filterWindow.btcNode=篩選後的比特幣節點(用逗號“,”隔開的地址+端口)
|
filterWindow.xmrNode=篩選後的比特幣節點(用逗號“,”隔開的地址+端口)
|
||||||
filterWindow.preventPublicBtcNetwork=禁止使用公共比特幣網絡
|
filterWindow.preventPublicBtcNetwork=禁止使用公共比特幣網絡
|
||||||
filterWindow.disableAutoConf=禁用自動確認
|
filterWindow.disableAutoConf=禁用自動確認
|
||||||
filterWindow.autoConfExplorers=已過濾自動確認瀏覽器(逗號分隔地址)
|
filterWindow.autoConfExplorers=已過濾自動確認瀏覽器(逗號分隔地址)
|
||||||
|
|
|
@ -44,7 +44,7 @@ public class BtcNetworkConfigTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testProposePeersWhenProxyPresentAndNoPeers() {
|
public void testProposePeersWhenProxyPresentAndNoPeers() {
|
||||||
BtcNetworkConfig config = new BtcNetworkConfig(delegate, mock(NetworkParameters.class), MODE,
|
XmrNetworkConfig config = new XmrNetworkConfig(delegate, mock(NetworkParameters.class), MODE,
|
||||||
mock(Socks5Proxy.class));
|
mock(Socks5Proxy.class));
|
||||||
config.proposePeers(Collections.emptyList());
|
config.proposePeers(Collections.emptyList());
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ public class BtcNetworkConfigTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testProposePeersWhenProxyNotPresentAndNoPeers() {
|
public void testProposePeersWhenProxyNotPresentAndNoPeers() {
|
||||||
BtcNetworkConfig config = new BtcNetworkConfig(delegate, mock(NetworkParameters.class), MODE,
|
XmrNetworkConfig config = new XmrNetworkConfig(delegate, mock(NetworkParameters.class), MODE,
|
||||||
null);
|
null);
|
||||||
config.proposePeers(Collections.emptyList());
|
config.proposePeers(Collections.emptyList());
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ public class BtcNetworkConfigTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testProposePeersWhenPeersPresent() {
|
public void testProposePeersWhenPeersPresent() {
|
||||||
BtcNetworkConfig config = new BtcNetworkConfig(delegate, mock(NetworkParameters.class), MODE,
|
XmrNetworkConfig config = new XmrNetworkConfig(delegate, mock(NetworkParameters.class), MODE,
|
||||||
null);
|
null);
|
||||||
config.proposePeers(Collections.singletonList(mock(PeerAddress.class)));
|
config.proposePeers(Collections.singletonList(mock(PeerAddress.class)));
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
package haveno.core.xmr.nodes;
|
package haveno.core.xmr.nodes;
|
||||||
|
|
||||||
import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy;
|
import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy;
|
||||||
import haveno.core.xmr.nodes.BtcNodeConverter.Facade;
|
import haveno.core.xmr.nodes.XmrNodeConverter.Facade;
|
||||||
import haveno.core.xmr.nodes.BtcNodes.BtcNode;
|
import haveno.core.xmr.nodes.XmrNodes.XmrNode;
|
||||||
import haveno.network.DnsLookupException;
|
import haveno.network.DnsLookupException;
|
||||||
import org.bitcoinj.core.PeerAddress;
|
import org.bitcoinj.core.PeerAddress;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
@ -32,10 +32,10 @@ import static org.mockito.ArgumentMatchers.anyString;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
public class BtcNodeConverterTest {
|
public class XmrNodeConverterTest {
|
||||||
@Test
|
@Test
|
||||||
public void testConvertOnionHost() {
|
public void testConvertOnionHost() {
|
||||||
BtcNode node = mock(BtcNode.class);
|
XmrNode node = mock(XmrNode.class);
|
||||||
when(node.getOnionAddress()).thenReturn("aaa.onion");
|
when(node.getOnionAddress()).thenReturn("aaa.onion");
|
||||||
|
|
||||||
//InetAddress inetAddress = mock(InetAddress.class);
|
//InetAddress inetAddress = mock(InetAddress.class);
|
||||||
|
@ -43,7 +43,7 @@ public class BtcNodeConverterTest {
|
||||||
Facade facade = mock(Facade.class);
|
Facade facade = mock(Facade.class);
|
||||||
//when(facade.onionHostToInetAddress(any())).thenReturn(inetAddress);
|
//when(facade.onionHostToInetAddress(any())).thenReturn(inetAddress);
|
||||||
|
|
||||||
PeerAddress peerAddress = new BtcNodeConverter(facade).convertOnionHost(node);
|
PeerAddress peerAddress = new XmrNodeConverter(facade).convertOnionHost(node);
|
||||||
// noinspection ConstantConditions
|
// noinspection ConstantConditions
|
||||||
assertEquals(node.getOnionAddress(), peerAddress.getHostname());
|
assertEquals(node.getOnionAddress(), peerAddress.getHostname());
|
||||||
}
|
}
|
||||||
|
@ -52,10 +52,10 @@ public class BtcNodeConverterTest {
|
||||||
public void testConvertClearNode() {
|
public void testConvertClearNode() {
|
||||||
final String ip = "192.168.0.1";
|
final String ip = "192.168.0.1";
|
||||||
|
|
||||||
BtcNode node = mock(BtcNode.class);
|
XmrNode node = mock(XmrNode.class);
|
||||||
when(node.getHostNameOrAddress()).thenReturn(ip);
|
when(node.getHostNameOrAddress()).thenReturn(ip);
|
||||||
|
|
||||||
PeerAddress peerAddress = new BtcNodeConverter().convertClearNode(node);
|
PeerAddress peerAddress = new XmrNodeConverter().convertClearNode(node);
|
||||||
// noinspection ConstantConditions
|
// noinspection ConstantConditions
|
||||||
InetAddress inetAddress = peerAddress.getAddr();
|
InetAddress inetAddress = peerAddress.getAddr();
|
||||||
assertEquals(ip, inetAddress.getHostAddress());
|
assertEquals(ip, inetAddress.getHostAddress());
|
||||||
|
@ -68,10 +68,10 @@ public class BtcNodeConverterTest {
|
||||||
Facade facade = mock(Facade.class);
|
Facade facade = mock(Facade.class);
|
||||||
when(facade.torLookup(any(), anyString())).thenReturn(expected);
|
when(facade.torLookup(any(), anyString())).thenReturn(expected);
|
||||||
|
|
||||||
BtcNode node = mock(BtcNode.class);
|
XmrNode node = mock(XmrNode.class);
|
||||||
when(node.getHostNameOrAddress()).thenReturn("aaa.onion");
|
when(node.getHostNameOrAddress()).thenReturn("aaa.onion");
|
||||||
|
|
||||||
PeerAddress peerAddress = new BtcNodeConverter(facade).convertWithTor(node, mock(Socks5Proxy.class));
|
PeerAddress peerAddress = new XmrNodeConverter(facade).convertWithTor(node, mock(Socks5Proxy.class));
|
||||||
|
|
||||||
// noinspection ConstantConditions
|
// noinspection ConstantConditions
|
||||||
assertEquals(expected, peerAddress.getAddr());
|
assertEquals(expected, peerAddress.getAddr());
|
|
@ -19,7 +19,7 @@ package haveno.core.xmr.nodes;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy;
|
import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy;
|
||||||
import haveno.core.xmr.nodes.BtcNodes.BtcNode;
|
import haveno.core.xmr.nodes.XmrNodes.XmrNode;
|
||||||
import org.bitcoinj.core.PeerAddress;
|
import org.bitcoinj.core.PeerAddress;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
@ -35,14 +35,14 @@ import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
public class BtcNodesRepositoryTest {
|
public class XmrNodesRepositoryTest {
|
||||||
@Test
|
@Test
|
||||||
public void testGetPeerAddressesWhenClearNodes() {
|
public void testGetPeerAddressesWhenClearNodes() {
|
||||||
BtcNode node = mock(BtcNode.class);
|
XmrNode node = mock(XmrNode.class);
|
||||||
when(node.hasClearNetAddress()).thenReturn(true);
|
when(node.hasClearNetAddress()).thenReturn(true);
|
||||||
|
|
||||||
BtcNodeConverter converter = mock(BtcNodeConverter.class, RETURNS_DEEP_STUBS);
|
XmrNodeConverter converter = mock(XmrNodeConverter.class, RETURNS_DEEP_STUBS);
|
||||||
BtcNodesRepository repository = new BtcNodesRepository(converter,
|
XmrNodesRepository repository = new XmrNodesRepository(converter,
|
||||||
Collections.singletonList(node));
|
Collections.singletonList(node));
|
||||||
|
|
||||||
List<PeerAddress> peers = repository.getPeerAddresses(null, false);
|
List<PeerAddress> peers = repository.getPeerAddresses(null, false);
|
||||||
|
@ -52,13 +52,13 @@ public class BtcNodesRepositoryTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetPeerAddressesWhenConverterReturnsNull() {
|
public void testGetPeerAddressesWhenConverterReturnsNull() {
|
||||||
BtcNodeConverter converter = mock(BtcNodeConverter.class);
|
XmrNodeConverter converter = mock(XmrNodeConverter.class);
|
||||||
when(converter.convertClearNode(any())).thenReturn(null);
|
when(converter.convertClearNode(any())).thenReturn(null);
|
||||||
|
|
||||||
BtcNode node = mock(BtcNode.class);
|
XmrNode node = mock(XmrNode.class);
|
||||||
when(node.hasClearNetAddress()).thenReturn(true);
|
when(node.hasClearNetAddress()).thenReturn(true);
|
||||||
|
|
||||||
BtcNodesRepository repository = new BtcNodesRepository(converter,
|
XmrNodesRepository repository = new XmrNodesRepository(converter,
|
||||||
Collections.singletonList(node));
|
Collections.singletonList(node));
|
||||||
|
|
||||||
List<PeerAddress> peers = repository.getPeerAddresses(null, false);
|
List<PeerAddress> peers = repository.getPeerAddresses(null, false);
|
||||||
|
@ -69,14 +69,14 @@ public class BtcNodesRepositoryTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetPeerAddressesWhenProxyAndClearNodes() {
|
public void testGetPeerAddressesWhenProxyAndClearNodes() {
|
||||||
BtcNode node = mock(BtcNode.class);
|
XmrNode node = mock(XmrNode.class);
|
||||||
when(node.hasClearNetAddress()).thenReturn(true);
|
when(node.hasClearNetAddress()).thenReturn(true);
|
||||||
|
|
||||||
BtcNode onionNode = mock(BtcNode.class);
|
XmrNode onionNode = mock(XmrNode.class);
|
||||||
when(node.hasOnionAddress()).thenReturn(true);
|
when(node.hasOnionAddress()).thenReturn(true);
|
||||||
|
|
||||||
BtcNodeConverter converter = mock(BtcNodeConverter.class, RETURNS_DEEP_STUBS);
|
XmrNodeConverter converter = mock(XmrNodeConverter.class, RETURNS_DEEP_STUBS);
|
||||||
BtcNodesRepository repository = new BtcNodesRepository(converter,
|
XmrNodesRepository repository = new XmrNodesRepository(converter,
|
||||||
Lists.newArrayList(node, onionNode));
|
Lists.newArrayList(node, onionNode));
|
||||||
|
|
||||||
List<PeerAddress> peers = repository.getPeerAddresses(mock(Socks5Proxy.class), true);
|
List<PeerAddress> peers = repository.getPeerAddresses(mock(Socks5Proxy.class), true);
|
||||||
|
@ -86,14 +86,14 @@ public class BtcNodesRepositoryTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetPeerAddressesWhenOnionNodesOnly() {
|
public void testGetPeerAddressesWhenOnionNodesOnly() {
|
||||||
BtcNode node = mock(BtcNode.class);
|
XmrNode node = mock(XmrNode.class);
|
||||||
when(node.hasClearNetAddress()).thenReturn(true);
|
when(node.hasClearNetAddress()).thenReturn(true);
|
||||||
|
|
||||||
BtcNode onionNode = mock(BtcNode.class);
|
XmrNode onionNode = mock(XmrNode.class);
|
||||||
when(node.hasOnionAddress()).thenReturn(true);
|
when(node.hasOnionAddress()).thenReturn(true);
|
||||||
|
|
||||||
BtcNodeConverter converter = mock(BtcNodeConverter.class, RETURNS_DEEP_STUBS);
|
XmrNodeConverter converter = mock(XmrNodeConverter.class, RETURNS_DEEP_STUBS);
|
||||||
BtcNodesRepository repository = new BtcNodesRepository(converter,
|
XmrNodesRepository repository = new XmrNodesRepository(converter,
|
||||||
Lists.newArrayList(node, onionNode));
|
Lists.newArrayList(node, onionNode));
|
||||||
|
|
||||||
List<PeerAddress> peers = repository.getPeerAddresses(mock(Socks5Proxy.class), false);
|
List<PeerAddress> peers = repository.getPeerAddresses(mock(Socks5Proxy.class), false);
|
|
@ -18,26 +18,26 @@
|
||||||
package haveno.core.xmr.nodes;
|
package haveno.core.xmr.nodes;
|
||||||
|
|
||||||
import haveno.core.user.Preferences;
|
import haveno.core.user.Preferences;
|
||||||
import haveno.core.xmr.nodes.BtcNodes.BtcNode;
|
import haveno.core.xmr.nodes.XmrNodes.XmrNode;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static haveno.core.xmr.nodes.BtcNodes.BitcoinNodesOption.CUSTOM;
|
import static haveno.core.xmr.nodes.XmrNodes.MoneroNodesOption.CUSTOM;
|
||||||
import static haveno.core.xmr.nodes.BtcNodes.BitcoinNodesOption.PUBLIC;
|
import static haveno.core.xmr.nodes.XmrNodes.MoneroNodesOption.PUBLIC;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
public class BtcNodesSetupPreferencesTest {
|
public class XmrNodesSetupPreferencesTest {
|
||||||
@Test
|
@Test
|
||||||
public void testSelectPreferredNodesWhenPublicOption() {
|
public void testSelectPreferredNodesWhenPublicOption() {
|
||||||
Preferences delegate = mock(Preferences.class);
|
Preferences delegate = mock(Preferences.class);
|
||||||
when(delegate.getBitcoinNodesOptionOrdinal()).thenReturn(PUBLIC.ordinal());
|
when(delegate.getMoneroNodesOptionOrdinal()).thenReturn(PUBLIC.ordinal());
|
||||||
|
|
||||||
BtcNodesSetupPreferences preferences = new BtcNodesSetupPreferences(delegate);
|
XmrNodesSetupPreferences preferences = new XmrNodesSetupPreferences(delegate);
|
||||||
List<BtcNode> nodes = preferences.selectPreferredNodes(mock(BtcNodes.class));
|
List<XmrNode> nodes = preferences.selectPreferredNodes(mock(XmrNodes.class));
|
||||||
|
|
||||||
assertTrue(nodes.isEmpty());
|
assertTrue(nodes.isEmpty());
|
||||||
}
|
}
|
||||||
|
@ -45,11 +45,11 @@ public class BtcNodesSetupPreferencesTest {
|
||||||
@Test
|
@Test
|
||||||
public void testSelectPreferredNodesWhenCustomOption() {
|
public void testSelectPreferredNodesWhenCustomOption() {
|
||||||
Preferences delegate = mock(Preferences.class);
|
Preferences delegate = mock(Preferences.class);
|
||||||
when(delegate.getBitcoinNodesOptionOrdinal()).thenReturn(CUSTOM.ordinal());
|
when(delegate.getMoneroNodesOptionOrdinal()).thenReturn(CUSTOM.ordinal());
|
||||||
when(delegate.getBitcoinNodes()).thenReturn("aaa.onion,bbb.onion");
|
when(delegate.getMoneroNodes()).thenReturn("aaa.onion,bbb.onion");
|
||||||
|
|
||||||
BtcNodesSetupPreferences preferences = new BtcNodesSetupPreferences(delegate);
|
XmrNodesSetupPreferences preferences = new XmrNodesSetupPreferences(delegate);
|
||||||
List<BtcNode> nodes = preferences.selectPreferredNodes(mock(BtcNodes.class));
|
List<XmrNode> nodes = preferences.selectPreferredNodes(mock(XmrNodes.class));
|
||||||
|
|
||||||
assertEquals(2, nodes.size());
|
assertEquals(2, nodes.size());
|
||||||
}
|
}
|
|
@ -554,7 +554,7 @@ public class MainViewModel implements ViewModel, HavenoSetup.HavenoSetupListener
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showPopupIfInvalidBtcConfig() {
|
private void showPopupIfInvalidBtcConfig() {
|
||||||
preferences.setBitcoinNodesOptionOrdinal(0);
|
preferences.setMoneroNodesOptionOrdinal(0);
|
||||||
new Popup().warning(Res.get("settings.net.warn.invalidBtcConfig"))
|
new Popup().warning(Res.get("settings.net.warn.invalidBtcConfig"))
|
||||||
.hideCloseButton()
|
.hideCloseButton()
|
||||||
.useShutDownButton()
|
.useShutDownButton()
|
||||||
|
|
|
@ -95,7 +95,7 @@ class DepositListItem {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateUsage(int subaddressIndex, List<MoneroTxWallet> cachedTxs) {
|
private void updateUsage(int subaddressIndex, List<MoneroTxWallet> cachedTxs) {
|
||||||
numTxsWithOutputs = XmrWalletService.getTxsWithIncomingOutputs(cachedTxs, addressEntry.getSubaddressIndex()).size();
|
numTxsWithOutputs = XmrWalletService.getTxsWithIncomingOutputs(addressEntry.getSubaddressIndex(), cachedTxs).size();
|
||||||
usage = subaddressIndex == 0 ? "Base address" : numTxsWithOutputs == 0 ? Res.get("funds.deposit.unused") : Res.get("funds.deposit.usedInTx", numTxsWithOutputs);
|
usage = subaddressIndex == 0 ? "Base address" : numTxsWithOutputs == 0 ? Res.get("funds.deposit.unused") : Res.get("funds.deposit.usedInTx", numTxsWithOutputs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ class DepositListItem {
|
||||||
private MoneroTxWallet getTxWithFewestConfirmations(List<MoneroTxWallet> allIncomingTxs) {
|
private MoneroTxWallet getTxWithFewestConfirmations(List<MoneroTxWallet> allIncomingTxs) {
|
||||||
|
|
||||||
// get txs with incoming outputs to subaddress index
|
// get txs with incoming outputs to subaddress index
|
||||||
List<MoneroTxWallet> txs = XmrWalletService.getTxsWithIncomingOutputs(allIncomingTxs, addressEntry.getSubaddressIndex());
|
List<MoneroTxWallet> txs = XmrWalletService.getTxsWithIncomingOutputs(addressEntry.getSubaddressIndex(), allIncomingTxs);
|
||||||
|
|
||||||
// get tx with fewest confirmations
|
// get tx with fewest confirmations
|
||||||
MoneroTxWallet highestTx = null;
|
MoneroTxWallet highestTx = null;
|
||||||
|
|
|
@ -145,8 +145,8 @@ public class FilterWindow extends Overlay<FilterWindow> {
|
||||||
Res.get("filterWindow.seedNode"));
|
Res.get("filterWindow.seedNode"));
|
||||||
InputTextField priceRelayNodesTF = addInputTextField(gridPane, ++rowIndex,
|
InputTextField priceRelayNodesTF = addInputTextField(gridPane, ++rowIndex,
|
||||||
Res.get("filterWindow.priceRelayNode"));
|
Res.get("filterWindow.priceRelayNode"));
|
||||||
InputTextField btcNodesTF = addInputTextField(gridPane, ++rowIndex,
|
InputTextField xmrNodesTF = addInputTextField(gridPane, ++rowIndex,
|
||||||
Res.get("filterWindow.btcNode"));
|
Res.get("filterWindow.xmrNode"));
|
||||||
CheckBox preventPublicBtcNetworkCheckBox = addLabelCheckBox(gridPane, ++rowIndex,
|
CheckBox preventPublicBtcNetworkCheckBox = addLabelCheckBox(gridPane, ++rowIndex,
|
||||||
Res.get("filterWindow.preventPublicBtcNetwork"));
|
Res.get("filterWindow.preventPublicBtcNetwork"));
|
||||||
CheckBox disableAutoConfCheckBox = addLabelCheckBox(gridPane, ++rowIndex,
|
CheckBox disableAutoConfCheckBox = addLabelCheckBox(gridPane, ++rowIndex,
|
||||||
|
@ -177,7 +177,7 @@ public class FilterWindow extends Overlay<FilterWindow> {
|
||||||
setupFieldFromList(btcFeeReceiverAddressesTF, filter.getBtcFeeReceiverAddresses());
|
setupFieldFromList(btcFeeReceiverAddressesTF, filter.getBtcFeeReceiverAddresses());
|
||||||
setupFieldFromList(seedNodesTF, filter.getSeedNodes());
|
setupFieldFromList(seedNodesTF, filter.getSeedNodes());
|
||||||
setupFieldFromList(priceRelayNodesTF, filter.getPriceRelayNodes());
|
setupFieldFromList(priceRelayNodesTF, filter.getPriceRelayNodes());
|
||||||
setupFieldFromList(btcNodesTF, filter.getBtcNodes());
|
setupFieldFromList(xmrNodesTF, filter.getXmrNodes());
|
||||||
setupFieldFromList(bannedPrivilegedDevPubKeysTF, filter.getBannedPrivilegedDevPubKeys());
|
setupFieldFromList(bannedPrivilegedDevPubKeysTF, filter.getBannedPrivilegedDevPubKeys());
|
||||||
setupFieldFromList(autoConfExplorersTF, filter.getBannedAutoConfExplorers());
|
setupFieldFromList(autoConfExplorersTF, filter.getBannedAutoConfExplorers());
|
||||||
|
|
||||||
|
@ -206,7 +206,7 @@ public class FilterWindow extends Overlay<FilterWindow> {
|
||||||
readAsList(seedNodesTF),
|
readAsList(seedNodesTF),
|
||||||
readAsList(priceRelayNodesTF),
|
readAsList(priceRelayNodesTF),
|
||||||
preventPublicBtcNetworkCheckBox.isSelected(),
|
preventPublicBtcNetworkCheckBox.isSelected(),
|
||||||
readAsList(btcNodesTF),
|
readAsList(xmrNodesTF),
|
||||||
disableTradeBelowVersionTF.getText(),
|
disableTradeBelowVersionTF.getText(),
|
||||||
readAsList(mediatorsTF),
|
readAsList(mediatorsTF),
|
||||||
readAsList(refundAgentsTF),
|
readAsList(refundAgentsTF),
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
|
|
||||||
<TitledGroupBg fx:id="btcHeader" GridPane.rowSpan="5"/>
|
<TitledGroupBg fx:id="btcHeader" GridPane.rowSpan="5"/>
|
||||||
<VBox GridPane.rowIndex="0" GridPane.hgrow="ALWAYS" GridPane.vgrow="SOMETIMES">
|
<VBox GridPane.rowIndex="0" GridPane.hgrow="ALWAYS" GridPane.vgrow="SOMETIMES">
|
||||||
<AutoTooltipLabel fx:id="bitcoinPeersLabel" styleClass="small-text"/>
|
<AutoTooltipLabel fx:id="moneroPeersLabel" styleClass="small-text"/>
|
||||||
<TableView fx:id="moneroPeersTableView">
|
<TableView fx:id="moneroPeersTableView">
|
||||||
<columns>
|
<columns>
|
||||||
<TableColumn fx:id="moneroPeerAddressColumn" minWidth="220">
|
<TableColumn fx:id="moneroPeerAddressColumn" minWidth="220">
|
||||||
|
@ -70,13 +70,13 @@
|
||||||
</TableColumn>
|
</TableColumn>
|
||||||
</columns>
|
</columns>
|
||||||
</TableView>
|
</TableView>
|
||||||
<AutoTooltipLabel fx:id="localhostBtcNodeInfoLabel" styleClass="small-text"/>
|
<AutoTooltipLabel fx:id="localhostXmrNodeInfoLabel" styleClass="small-text"/>
|
||||||
</VBox>
|
</VBox>
|
||||||
|
|
||||||
<AutoTooltipCheckBox fx:id="useTorForBtcJCheckBox" GridPane.rowIndex="1"/>
|
<AutoTooltipCheckBox fx:id="useTorForXmrJCheckBox" GridPane.rowIndex="1"/>
|
||||||
|
|
||||||
<VBox GridPane.rowIndex="2">
|
<VBox GridPane.rowIndex="2">
|
||||||
<AutoTooltipLabel fx:id="bitcoinNodesLabel" styleClass="small-text"/>
|
<AutoTooltipLabel fx:id="moneroNodesLabel" styleClass="small-text"/>
|
||||||
<HBox spacing="10">
|
<HBox spacing="10">
|
||||||
<AutoTooltipRadioButton fx:id="useProvidedNodesRadio"/>
|
<AutoTooltipRadioButton fx:id="useProvidedNodesRadio"/>
|
||||||
<AutoTooltipRadioButton fx:id="useCustomNodesRadio"/>
|
<AutoTooltipRadioButton fx:id="useCustomNodesRadio"/>
|
||||||
|
@ -85,8 +85,8 @@
|
||||||
</VBox>
|
</VBox>
|
||||||
|
|
||||||
<VBox GridPane.rowIndex="3">
|
<VBox GridPane.rowIndex="3">
|
||||||
<AutoTooltipLabel fx:id="btcNodesLabel" styleClass="small-text"/>
|
<AutoTooltipLabel fx:id="xmrNodesLabel" styleClass="small-text"/>
|
||||||
<InputTextField fx:id="btcNodesInputTextField"/>
|
<InputTextField fx:id="xmrNodesInputTextField"/>
|
||||||
</VBox>
|
</VBox>
|
||||||
|
|
||||||
<VBox GridPane.rowIndex="4">
|
<VBox GridPane.rowIndex="4">
|
||||||
|
|
|
@ -27,7 +27,7 @@ import haveno.core.user.Preferences;
|
||||||
import haveno.core.util.FormattingUtils;
|
import haveno.core.util.FormattingUtils;
|
||||||
import haveno.core.util.validation.RegexValidator;
|
import haveno.core.util.validation.RegexValidator;
|
||||||
import haveno.core.util.validation.RegexValidatorFactory;
|
import haveno.core.util.validation.RegexValidatorFactory;
|
||||||
import haveno.core.xmr.nodes.BtcNodes;
|
import haveno.core.xmr.nodes.XmrNodes;
|
||||||
import haveno.core.xmr.nodes.LocalBitcoinNode;
|
import haveno.core.xmr.nodes.LocalBitcoinNode;
|
||||||
import haveno.core.xmr.setup.WalletsSetup;
|
import haveno.core.xmr.setup.WalletsSetup;
|
||||||
import haveno.desktop.app.HavenoApp;
|
import haveno.desktop.app.HavenoApp;
|
||||||
|
@ -75,15 +75,15 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
@FXML
|
@FXML
|
||||||
TitledGroupBg p2pHeader, btcHeader;
|
TitledGroupBg p2pHeader, btcHeader;
|
||||||
@FXML
|
@FXML
|
||||||
Label btcNodesLabel, bitcoinNodesLabel, localhostBtcNodeInfoLabel;
|
Label xmrNodesLabel, moneroNodesLabel, localhostXmrNodeInfoLabel;
|
||||||
@FXML
|
@FXML
|
||||||
InputTextField btcNodesInputTextField;
|
InputTextField xmrNodesInputTextField;
|
||||||
@FXML
|
@FXML
|
||||||
TextField onionAddress, sentDataTextField, receivedDataTextField, chainHeightTextField;
|
TextField onionAddress, sentDataTextField, receivedDataTextField, chainHeightTextField;
|
||||||
@FXML
|
@FXML
|
||||||
Label p2PPeersLabel, bitcoinPeersLabel;
|
Label p2PPeersLabel, moneroPeersLabel;
|
||||||
@FXML
|
@FXML
|
||||||
CheckBox useTorForBtcJCheckBox;
|
CheckBox useTorForXmrJCheckBox;
|
||||||
@FXML
|
@FXML
|
||||||
RadioButton useProvidedNodesRadio, useCustomNodesRadio, usePublicNodesRadio;
|
RadioButton useProvidedNodesRadio, useCustomNodesRadio, usePublicNodesRadio;
|
||||||
@FXML
|
@FXML
|
||||||
|
@ -102,7 +102,7 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
AutoTooltipButton reSyncSPVChainButton, openTorSettingsButton;
|
AutoTooltipButton reSyncSPVChainButton, openTorSettingsButton;
|
||||||
|
|
||||||
private final Preferences preferences;
|
private final Preferences preferences;
|
||||||
private final BtcNodes btcNodes;
|
private final XmrNodes xmrNodes;
|
||||||
private final FilterManager filterManager;
|
private final FilterManager filterManager;
|
||||||
private final LocalBitcoinNode localBitcoinNode;
|
private final LocalBitcoinNode localBitcoinNode;
|
||||||
private final TorNetworkSettingsWindow torNetworkSettingsWindow;
|
private final TorNetworkSettingsWindow torNetworkSettingsWindow;
|
||||||
|
@ -121,10 +121,10 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
private Subscription moneroPeersSubscription;
|
private Subscription moneroPeersSubscription;
|
||||||
private Subscription moneroBlockHeightSubscription;
|
private Subscription moneroBlockHeightSubscription;
|
||||||
private Subscription nodeAddressSubscription;
|
private Subscription nodeAddressSubscription;
|
||||||
private ChangeListener<Boolean> btcNodesInputTextFieldFocusListener;
|
private ChangeListener<Boolean> xmrNodesInputTextFieldFocusListener;
|
||||||
private ToggleGroup bitcoinPeersToggleGroup;
|
private ToggleGroup moneroPeersToggleGroup;
|
||||||
private BtcNodes.BitcoinNodesOption selectedBitcoinNodesOption;
|
private XmrNodes.MoneroNodesOption selectedMoneroNodesOption;
|
||||||
private ChangeListener<Toggle> bitcoinPeersToggleGroupListener;
|
private ChangeListener<Toggle> moneroPeersToggleGroupListener;
|
||||||
private ChangeListener<Filter> filterPropertyListener;
|
private ChangeListener<Filter> filterPropertyListener;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
@ -132,7 +132,7 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
P2PService p2PService,
|
P2PService p2PService,
|
||||||
CoreMoneroConnectionsService connectionManager,
|
CoreMoneroConnectionsService connectionManager,
|
||||||
Preferences preferences,
|
Preferences preferences,
|
||||||
BtcNodes btcNodes,
|
XmrNodes xmrNodes,
|
||||||
FilterManager filterManager,
|
FilterManager filterManager,
|
||||||
LocalBitcoinNode localBitcoinNode,
|
LocalBitcoinNode localBitcoinNode,
|
||||||
TorNetworkSettingsWindow torNetworkSettingsWindow,
|
TorNetworkSettingsWindow torNetworkSettingsWindow,
|
||||||
|
@ -142,7 +142,7 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
this.p2PService = p2PService;
|
this.p2PService = p2PService;
|
||||||
this.connectionManager = connectionManager;
|
this.connectionManager = connectionManager;
|
||||||
this.preferences = preferences;
|
this.preferences = preferences;
|
||||||
this.btcNodes = btcNodes;
|
this.xmrNodes = xmrNodes;
|
||||||
this.filterManager = filterManager;
|
this.filterManager = filterManager;
|
||||||
this.localBitcoinNode = localBitcoinNode;
|
this.localBitcoinNode = localBitcoinNode;
|
||||||
this.torNetworkSettingsWindow = torNetworkSettingsWindow;
|
this.torNetworkSettingsWindow = torNetworkSettingsWindow;
|
||||||
|
@ -154,16 +154,16 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
btcHeader.setText(Res.get("settings.net.btcHeader"));
|
btcHeader.setText(Res.get("settings.net.btcHeader"));
|
||||||
p2pHeader.setText(Res.get("settings.net.p2pHeader"));
|
p2pHeader.setText(Res.get("settings.net.p2pHeader"));
|
||||||
onionAddress.setPromptText(Res.get("settings.net.onionAddressLabel"));
|
onionAddress.setPromptText(Res.get("settings.net.onionAddressLabel"));
|
||||||
btcNodesLabel.setText(Res.get("settings.net.btcNodesLabel"));
|
xmrNodesLabel.setText(Res.get("settings.net.xmrNodesLabel"));
|
||||||
bitcoinPeersLabel.setText(Res.get("settings.net.bitcoinPeersLabel"));
|
moneroPeersLabel.setText(Res.get("settings.net.moneroPeersLabel"));
|
||||||
useTorForBtcJCheckBox.setText(Res.get("settings.net.useTorForBtcJLabel"));
|
useTorForXmrJCheckBox.setText(Res.get("settings.net.useTorForXmrJLabel"));
|
||||||
bitcoinNodesLabel.setText(Res.get("settings.net.bitcoinNodesLabel"));
|
moneroNodesLabel.setText(Res.get("settings.net.moneroNodesLabel"));
|
||||||
moneroPeerAddressColumn.setGraphic(new AutoTooltipLabel(Res.get("settings.net.onionAddressColumn")));
|
moneroPeerAddressColumn.setGraphic(new AutoTooltipLabel(Res.get("settings.net.onionAddressColumn")));
|
||||||
moneroPeerAddressColumn.getStyleClass().add("first-column");
|
moneroPeerAddressColumn.getStyleClass().add("first-column");
|
||||||
moneroPeerVersionColumn.setGraphic(new AutoTooltipLabel(Res.get("settings.net.versionColumn")));
|
moneroPeerVersionColumn.setGraphic(new AutoTooltipLabel(Res.get("settings.net.versionColumn")));
|
||||||
moneroPeerSubVersionColumn.setGraphic(new AutoTooltipLabel(Res.get("settings.net.subVersionColumn")));
|
moneroPeerSubVersionColumn.setGraphic(new AutoTooltipLabel(Res.get("settings.net.subVersionColumn")));
|
||||||
moneroPeerHeightColumn.setGraphic(new AutoTooltipLabel(Res.get("settings.net.heightColumn")));
|
moneroPeerHeightColumn.setGraphic(new AutoTooltipLabel(Res.get("settings.net.heightColumn")));
|
||||||
localhostBtcNodeInfoLabel.setText(Res.get("settings.net.localhostBtcNodeInfo"));
|
localhostXmrNodeInfoLabel.setText(Res.get("settings.net.localhostXmrNodeInfo"));
|
||||||
useProvidedNodesRadio.setText(Res.get("settings.net.useProvidedNodesRadio"));
|
useProvidedNodesRadio.setText(Res.get("settings.net.useProvidedNodesRadio"));
|
||||||
useCustomNodesRadio.setText(Res.get("settings.net.useCustomNodesRadio"));
|
useCustomNodesRadio.setText(Res.get("settings.net.useCustomNodesRadio"));
|
||||||
usePublicNodesRadio.setText(Res.get("settings.net.usePublicNodesRadio"));
|
usePublicNodesRadio.setText(Res.get("settings.net.usePublicNodesRadio"));
|
||||||
|
@ -184,8 +184,8 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
peerTypeColumn.getStyleClass().add("last-column");
|
peerTypeColumn.getStyleClass().add("last-column");
|
||||||
openTorSettingsButton.updateText(Res.get("settings.net.openTorSettingsButton"));
|
openTorSettingsButton.updateText(Res.get("settings.net.openTorSettingsButton"));
|
||||||
|
|
||||||
GridPane.setMargin(bitcoinPeersLabel, new Insets(4, 0, 0, 0));
|
GridPane.setMargin(moneroPeersLabel, new Insets(4, 0, 0, 0));
|
||||||
GridPane.setValignment(bitcoinPeersLabel, VPos.TOP);
|
GridPane.setValignment(moneroPeersLabel, VPos.TOP);
|
||||||
|
|
||||||
GridPane.setMargin(p2PPeersLabel, new Insets(4, 0, 0, 0));
|
GridPane.setMargin(p2PPeersLabel, new Insets(4, 0, 0, 0));
|
||||||
GridPane.setValignment(p2PPeersLabel, VPos.TOP);
|
GridPane.setValignment(p2PPeersLabel, VPos.TOP);
|
||||||
|
@ -205,44 +205,45 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
p2pPeersTableView.getSortOrder().add(creationDateColumn);
|
p2pPeersTableView.getSortOrder().add(creationDateColumn);
|
||||||
creationDateColumn.setSortType(TableColumn.SortType.ASCENDING);
|
creationDateColumn.setSortType(TableColumn.SortType.ASCENDING);
|
||||||
|
|
||||||
bitcoinPeersToggleGroup = new ToggleGroup();
|
moneroPeersToggleGroup = new ToggleGroup();
|
||||||
useProvidedNodesRadio.setToggleGroup(bitcoinPeersToggleGroup);
|
useProvidedNodesRadio.setToggleGroup(moneroPeersToggleGroup);
|
||||||
useCustomNodesRadio.setToggleGroup(bitcoinPeersToggleGroup);
|
useCustomNodesRadio.setToggleGroup(moneroPeersToggleGroup);
|
||||||
usePublicNodesRadio.setToggleGroup(bitcoinPeersToggleGroup);
|
usePublicNodesRadio.setToggleGroup(moneroPeersToggleGroup);
|
||||||
|
|
||||||
useProvidedNodesRadio.setUserData(BtcNodes.BitcoinNodesOption.PROVIDED);
|
useProvidedNodesRadio.setUserData(XmrNodes.MoneroNodesOption.PROVIDED);
|
||||||
useCustomNodesRadio.setUserData(BtcNodes.BitcoinNodesOption.CUSTOM);
|
useCustomNodesRadio.setUserData(XmrNodes.MoneroNodesOption.CUSTOM);
|
||||||
usePublicNodesRadio.setUserData(BtcNodes.BitcoinNodesOption.PUBLIC);
|
usePublicNodesRadio.setUserData(XmrNodes.MoneroNodesOption.PUBLIC);
|
||||||
|
|
||||||
selectedBitcoinNodesOption = BtcNodes.BitcoinNodesOption.values()[preferences.getBitcoinNodesOptionOrdinal()];
|
selectedMoneroNodesOption = XmrNodes.MoneroNodesOption.values()[preferences.getMoneroNodesOptionOrdinal()];
|
||||||
// In case CUSTOM is selected but no custom nodes are set or
|
// In case CUSTOM is selected but no custom nodes are set or
|
||||||
// in case PUBLIC is selected but we blocked it (B2X risk) we revert to provided nodes
|
// in case PUBLIC is selected but we blocked it (B2X risk) we revert to provided nodes
|
||||||
if ((selectedBitcoinNodesOption == BtcNodes.BitcoinNodesOption.CUSTOM &&
|
if ((selectedMoneroNodesOption == XmrNodes.MoneroNodesOption.CUSTOM &&
|
||||||
(preferences.getBitcoinNodes() == null || preferences.getBitcoinNodes().isEmpty())) ||
|
(preferences.getMoneroNodes() == null || preferences.getMoneroNodes().isEmpty())) ||
|
||||||
(selectedBitcoinNodesOption == BtcNodes.BitcoinNodesOption.PUBLIC && isPreventPublicBtcNetwork())) {
|
(selectedMoneroNodesOption == XmrNodes.MoneroNodesOption.PUBLIC && isPreventPublicXmrNetwork())) {
|
||||||
selectedBitcoinNodesOption = BtcNodes.BitcoinNodesOption.PROVIDED;
|
selectedMoneroNodesOption = XmrNodes.MoneroNodesOption.PROVIDED;
|
||||||
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
|
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
|
||||||
}
|
}
|
||||||
|
|
||||||
selectBitcoinPeersToggle();
|
selectMoneroPeersToggle();
|
||||||
onBitcoinPeersToggleSelected(false);
|
onMoneroPeersToggleSelected(false);
|
||||||
|
|
||||||
bitcoinPeersToggleGroupListener = (observable, oldValue, newValue) -> {
|
moneroPeersToggleGroupListener = (observable, oldValue, newValue) -> {
|
||||||
if (newValue != null) {
|
if (newValue != null) {
|
||||||
selectedBitcoinNodesOption = (BtcNodes.BitcoinNodesOption) newValue.getUserData();
|
selectedMoneroNodesOption = (XmrNodes.MoneroNodesOption) newValue.getUserData();
|
||||||
onBitcoinPeersToggleSelected(true);
|
onMoneroPeersToggleSelected(true);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
btcNodesInputTextField.setPromptText(Res.get("settings.net.ips"));
|
xmrNodesInputTextField.setPromptText(Res.get("settings.net.ips"));
|
||||||
RegexValidator regexValidator = RegexValidatorFactory.addressRegexValidator();
|
RegexValidator regexValidator = RegexValidatorFactory.addressRegexValidator();
|
||||||
btcNodesInputTextField.setValidator(regexValidator);
|
xmrNodesInputTextField.setValidator(regexValidator);
|
||||||
btcNodesInputTextField.setErrorMessage(Res.get("validation.invalidAddressList"));
|
xmrNodesInputTextField.setErrorMessage(Res.get("validation.invalidAddressList"));
|
||||||
btcNodesInputTextFieldFocusListener = (observable, oldValue, newValue) -> {
|
xmrNodesInputTextFieldFocusListener = (observable, oldValue, newValue) -> {
|
||||||
if (oldValue && !newValue
|
if (oldValue && !newValue
|
||||||
&& !btcNodesInputTextField.getText().equals(preferences.getBitcoinNodes())
|
&& !xmrNodesInputTextField.getText().equals(preferences.getMoneroNodes())
|
||||||
&& btcNodesInputTextField.validate()) {
|
&& xmrNodesInputTextField.validate()) {
|
||||||
preferences.setBitcoinNodes(btcNodesInputTextField.getText());
|
preferences.setMoneroNodes(xmrNodesInputTextField.getText());
|
||||||
|
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
|
||||||
showShutDownPopup();
|
showShutDownPopup();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -259,25 +260,25 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void activate() {
|
public void activate() {
|
||||||
bitcoinPeersToggleGroup.selectedToggleProperty().addListener(bitcoinPeersToggleGroupListener);
|
moneroPeersToggleGroup.selectedToggleProperty().addListener(moneroPeersToggleGroupListener);
|
||||||
|
|
||||||
if (filterManager.getFilter() != null)
|
if (filterManager.getFilter() != null)
|
||||||
applyPreventPublicBtcNetwork();
|
applyPreventPublicBtcNetwork();
|
||||||
|
|
||||||
filterManager.filterProperty().addListener(filterPropertyListener);
|
filterManager.filterProperty().addListener(filterPropertyListener);
|
||||||
|
|
||||||
useTorForBtcJCheckBox.setSelected(preferences.getUseTorForBitcoinJ());
|
useTorForXmrJCheckBox.setSelected(preferences.getUseTorForMonero());
|
||||||
useTorForBtcJCheckBox.setOnAction(event -> {
|
useTorForXmrJCheckBox.setOnAction(event -> {
|
||||||
boolean selected = useTorForBtcJCheckBox.isSelected();
|
boolean selected = useTorForXmrJCheckBox.isSelected();
|
||||||
if (selected != preferences.getUseTorForBitcoinJ()) {
|
if (selected != preferences.getUseTorForMonero()) {
|
||||||
new Popup().information(Res.get("settings.net.needRestart"))
|
new Popup().information(Res.get("settings.net.needRestart"))
|
||||||
.actionButtonText(Res.get("shared.applyAndShutDown"))
|
.actionButtonText(Res.get("shared.applyAndShutDown"))
|
||||||
.onAction(() -> {
|
.onAction(() -> {
|
||||||
preferences.setUseTorForBitcoinJ(selected);
|
preferences.setUseTorForMonero(selected);
|
||||||
UserThread.runAfter(HavenoApp.getShutDownHandler(), 500, TimeUnit.MILLISECONDS);
|
UserThread.runAfter(HavenoApp.getShutDownHandler(), 500, TimeUnit.MILLISECONDS);
|
||||||
})
|
})
|
||||||
.closeButtonText(Res.get("shared.cancel"))
|
.closeButtonText(Res.get("shared.cancel"))
|
||||||
.onClose(() -> useTorForBtcJCheckBox.setSelected(!selected))
|
.onClose(() -> useTorForXmrJCheckBox.setSelected(!selected))
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -314,19 +315,19 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
p2pSortedList.comparatorProperty().bind(p2pPeersTableView.comparatorProperty());
|
p2pSortedList.comparatorProperty().bind(p2pPeersTableView.comparatorProperty());
|
||||||
p2pPeersTableView.setItems(p2pSortedList);
|
p2pPeersTableView.setItems(p2pSortedList);
|
||||||
|
|
||||||
btcNodesInputTextField.setText(preferences.getBitcoinNodes());
|
xmrNodesInputTextField.setText(preferences.getMoneroNodes());
|
||||||
|
|
||||||
btcNodesInputTextField.focusedProperty().addListener(btcNodesInputTextFieldFocusListener);
|
xmrNodesInputTextField.focusedProperty().addListener(xmrNodesInputTextFieldFocusListener);
|
||||||
|
|
||||||
openTorSettingsButton.setOnAction(e -> torNetworkSettingsWindow.show());
|
openTorSettingsButton.setOnAction(e -> torNetworkSettingsWindow.show());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deactivate() {
|
public void deactivate() {
|
||||||
bitcoinPeersToggleGroup.selectedToggleProperty().removeListener(bitcoinPeersToggleGroupListener);
|
moneroPeersToggleGroup.selectedToggleProperty().removeListener(moneroPeersToggleGroupListener);
|
||||||
filterManager.filterProperty().removeListener(filterPropertyListener);
|
filterManager.filterProperty().removeListener(filterPropertyListener);
|
||||||
|
|
||||||
useTorForBtcJCheckBox.setOnAction(null);
|
useTorForXmrJCheckBox.setOnAction(null);
|
||||||
|
|
||||||
if (nodeAddressSubscription != null)
|
if (nodeAddressSubscription != null)
|
||||||
nodeAddressSubscription.unsubscribe();
|
nodeAddressSubscription.unsubscribe();
|
||||||
|
@ -346,29 +347,27 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
moneroSortedList.comparatorProperty().unbind();
|
moneroSortedList.comparatorProperty().unbind();
|
||||||
p2pSortedList.comparatorProperty().unbind();
|
p2pSortedList.comparatorProperty().unbind();
|
||||||
p2pPeersTableView.getItems().forEach(P2pNetworkListItem::cleanup);
|
p2pPeersTableView.getItems().forEach(P2pNetworkListItem::cleanup);
|
||||||
btcNodesInputTextField.focusedProperty().removeListener(btcNodesInputTextFieldFocusListener);
|
xmrNodesInputTextField.focusedProperty().removeListener(xmrNodesInputTextFieldFocusListener);
|
||||||
|
|
||||||
openTorSettingsButton.setOnAction(null);
|
openTorSettingsButton.setOnAction(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isPreventPublicBtcNetwork() {
|
private boolean isPreventPublicXmrNetwork() {
|
||||||
return true;
|
return filterManager.getFilter() != null &&
|
||||||
//TODO: re-enable it if we are able to check for core nodes that have the correct configuration
|
filterManager.getFilter().isPreventPublicBtcNetwork();
|
||||||
// return filterManager.getFilter() != null &&
|
|
||||||
// filterManager.getFilter().isPreventPublicBtcNetwork();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void selectBitcoinPeersToggle() {
|
private void selectMoneroPeersToggle() {
|
||||||
switch (selectedBitcoinNodesOption) {
|
switch (selectedMoneroNodesOption) {
|
||||||
case CUSTOM:
|
case CUSTOM:
|
||||||
bitcoinPeersToggleGroup.selectToggle(useCustomNodesRadio);
|
moneroPeersToggleGroup.selectToggle(useCustomNodesRadio);
|
||||||
break;
|
break;
|
||||||
case PUBLIC:
|
case PUBLIC:
|
||||||
bitcoinPeersToggleGroup.selectToggle(usePublicNodesRadio);
|
moneroPeersToggleGroup.selectToggle(usePublicNodesRadio);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
case PROVIDED:
|
case PROVIDED:
|
||||||
bitcoinPeersToggleGroup.selectToggle(useProvidedNodesRadio);
|
moneroPeersToggleGroup.selectToggle(useProvidedNodesRadio);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -381,28 +380,28 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onBitcoinPeersToggleSelected(boolean calledFromUser) {
|
private void onMoneroPeersToggleSelected(boolean calledFromUser) {
|
||||||
boolean localBitcoinNodeShouldBeUsed = localBitcoinNode.shouldBeUsed();
|
boolean localBitcoinNodeShouldBeUsed = localBitcoinNode.shouldBeUsed();
|
||||||
useTorForBtcJCheckBox.setDisable(localBitcoinNodeShouldBeUsed);
|
useTorForXmrJCheckBox.setDisable(localBitcoinNodeShouldBeUsed);
|
||||||
bitcoinNodesLabel.setDisable(localBitcoinNodeShouldBeUsed);
|
moneroNodesLabel.setDisable(localBitcoinNodeShouldBeUsed);
|
||||||
btcNodesLabel.setDisable(localBitcoinNodeShouldBeUsed);
|
xmrNodesLabel.setDisable(localBitcoinNodeShouldBeUsed);
|
||||||
btcNodesInputTextField.setDisable(localBitcoinNodeShouldBeUsed);
|
xmrNodesInputTextField.setDisable(localBitcoinNodeShouldBeUsed);
|
||||||
useProvidedNodesRadio.setDisable(localBitcoinNodeShouldBeUsed || !btcNodes.useProvidedBtcNodes());
|
useProvidedNodesRadio.setDisable(localBitcoinNodeShouldBeUsed);
|
||||||
useCustomNodesRadio.setDisable(localBitcoinNodeShouldBeUsed);
|
useCustomNodesRadio.setDisable(localBitcoinNodeShouldBeUsed);
|
||||||
usePublicNodesRadio.setDisable(localBitcoinNodeShouldBeUsed || isPreventPublicBtcNetwork());
|
usePublicNodesRadio.setDisable(localBitcoinNodeShouldBeUsed || isPreventPublicXmrNetwork());
|
||||||
|
|
||||||
BtcNodes.BitcoinNodesOption currentBitcoinNodesOption = BtcNodes.BitcoinNodesOption.values()[preferences.getBitcoinNodesOptionOrdinal()];
|
XmrNodes.MoneroNodesOption currentBitcoinNodesOption = XmrNodes.MoneroNodesOption.values()[preferences.getMoneroNodesOptionOrdinal()];
|
||||||
|
|
||||||
switch (selectedBitcoinNodesOption) {
|
switch (selectedMoneroNodesOption) {
|
||||||
case CUSTOM:
|
case CUSTOM:
|
||||||
btcNodesInputTextField.setDisable(false);
|
xmrNodesInputTextField.setDisable(false);
|
||||||
btcNodesLabel.setDisable(false);
|
xmrNodesLabel.setDisable(false);
|
||||||
if (!btcNodesInputTextField.getText().isEmpty()
|
if (!xmrNodesInputTextField.getText().isEmpty()
|
||||||
&& btcNodesInputTextField.validate()
|
&& xmrNodesInputTextField.validate()
|
||||||
&& currentBitcoinNodesOption != BtcNodes.BitcoinNodesOption.CUSTOM) {
|
&& currentBitcoinNodesOption != XmrNodes.MoneroNodesOption.CUSTOM) {
|
||||||
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
|
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
|
||||||
if (calledFromUser) {
|
if (calledFromUser) {
|
||||||
if (isPreventPublicBtcNetwork()) {
|
if (isPreventPublicXmrNetwork()) {
|
||||||
new Popup().warning(Res.get("settings.net.warn.useCustomNodes.B2XWarning"))
|
new Popup().warning(Res.get("settings.net.warn.useCustomNodes.B2XWarning"))
|
||||||
.onAction(() -> UserThread.runAfter(this::showShutDownPopup, 300, TimeUnit.MILLISECONDS)).show();
|
.onAction(() -> UserThread.runAfter(this::showShutDownPopup, 300, TimeUnit.MILLISECONDS)).show();
|
||||||
} else {
|
} else {
|
||||||
|
@ -412,19 +411,19 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PUBLIC:
|
case PUBLIC:
|
||||||
btcNodesInputTextField.setDisable(true);
|
xmrNodesInputTextField.setDisable(true);
|
||||||
btcNodesLabel.setDisable(true);
|
xmrNodesLabel.setDisable(true);
|
||||||
if (currentBitcoinNodesOption != BtcNodes.BitcoinNodesOption.PUBLIC) {
|
if (currentBitcoinNodesOption != XmrNodes.MoneroNodesOption.PUBLIC) {
|
||||||
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
|
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
|
||||||
if (calledFromUser) {
|
if (calledFromUser) {
|
||||||
new Popup()
|
new Popup()
|
||||||
.warning(Res.get("settings.net.warn.usePublicNodes"))
|
.warning(Res.get("settings.net.warn.usePublicNodes"))
|
||||||
.actionButtonText(Res.get("settings.net.warn.usePublicNodes.useProvided"))
|
.actionButtonText(Res.get("settings.net.warn.usePublicNodes.useProvided"))
|
||||||
.onAction(() -> UserThread.runAfter(() -> {
|
.onAction(() -> UserThread.runAfter(() -> {
|
||||||
selectedBitcoinNodesOption = BtcNodes.BitcoinNodesOption.PROVIDED;
|
selectedMoneroNodesOption = XmrNodes.MoneroNodesOption.PROVIDED;
|
||||||
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
|
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
|
||||||
selectBitcoinPeersToggle();
|
selectMoneroPeersToggle();
|
||||||
onBitcoinPeersToggleSelected(false);
|
onMoneroPeersToggleSelected(false);
|
||||||
}, 300, TimeUnit.MILLISECONDS))
|
}, 300, TimeUnit.MILLISECONDS))
|
||||||
.closeButtonText(Res.get("settings.net.warn.usePublicNodes.usePublic"))
|
.closeButtonText(Res.get("settings.net.warn.usePublicNodes.usePublic"))
|
||||||
.onClose(() -> UserThread.runAfter(this::showShutDownPopup, 300, TimeUnit.MILLISECONDS))
|
.onClose(() -> UserThread.runAfter(this::showShutDownPopup, 300, TimeUnit.MILLISECONDS))
|
||||||
|
@ -434,34 +433,27 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
case PROVIDED:
|
case PROVIDED:
|
||||||
if (btcNodes.useProvidedBtcNodes()) {
|
xmrNodesInputTextField.setDisable(true);
|
||||||
btcNodesInputTextField.setDisable(true);
|
xmrNodesLabel.setDisable(true);
|
||||||
btcNodesLabel.setDisable(true);
|
if (currentBitcoinNodesOption != XmrNodes.MoneroNodesOption.PROVIDED) {
|
||||||
if (currentBitcoinNodesOption != BtcNodes.BitcoinNodesOption.PROVIDED) {
|
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
|
||||||
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
|
|
||||||
if (calledFromUser) {
|
if (calledFromUser) {
|
||||||
showShutDownPopup();
|
showShutDownPopup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
selectedBitcoinNodesOption = BtcNodes.BitcoinNodesOption.PUBLIC;
|
|
||||||
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
|
|
||||||
selectBitcoinPeersToggle();
|
|
||||||
onBitcoinPeersToggleSelected(false);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void applyPreventPublicBtcNetwork() {
|
private void applyPreventPublicBtcNetwork() {
|
||||||
final boolean preventPublicBtcNetwork = isPreventPublicBtcNetwork();
|
final boolean preventPublicBtcNetwork = isPreventPublicXmrNetwork();
|
||||||
usePublicNodesRadio.setDisable(localBitcoinNode.shouldBeUsed() || preventPublicBtcNetwork);
|
usePublicNodesRadio.setDisable(localBitcoinNode.shouldBeUsed() || preventPublicBtcNetwork);
|
||||||
if (preventPublicBtcNetwork && selectedBitcoinNodesOption == BtcNodes.BitcoinNodesOption.PUBLIC) {
|
if (preventPublicBtcNetwork && selectedMoneroNodesOption == XmrNodes.MoneroNodesOption.PUBLIC) {
|
||||||
selectedBitcoinNodesOption = BtcNodes.BitcoinNodesOption.PROVIDED;
|
selectedMoneroNodesOption = XmrNodes.MoneroNodesOption.PROVIDED;
|
||||||
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
|
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
|
||||||
selectBitcoinPeersToggle();
|
selectMoneroPeersToggle();
|
||||||
onBitcoinPeersToggleSelected(false);
|
onMoneroPeersToggleSelected(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -475,10 +467,12 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
|
||||||
|
|
||||||
private void updateMoneroPeersTable(List<MoneroPeer> peers) {
|
private void updateMoneroPeersTable(List<MoneroPeer> peers) {
|
||||||
moneroNetworkListItems.clear();
|
moneroNetworkListItems.clear();
|
||||||
|
if (peers != null) {
|
||||||
moneroNetworkListItems.setAll(peers.stream()
|
moneroNetworkListItems.setAll(peers.stream()
|
||||||
.map(MoneroNetworkListItem::new)
|
.map(MoneroNetworkListItem::new)
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void updateChainHeightTextField(Number chainHeight) {
|
private void updateChainHeightTextField(Number chainHeight) {
|
||||||
chainHeightTextField.textProperty().setValue(Res.get("settings.net.chainHeight", chainHeight));
|
chainHeightTextField.textProperty().setValue(Res.get("settings.net.chainHeight", chainHeight));
|
||||||
|
|
|
@ -563,7 +563,7 @@ message Filter {
|
||||||
repeated string seed_nodes = 10;
|
repeated string seed_nodes = 10;
|
||||||
repeated string price_relay_nodes = 11;
|
repeated string price_relay_nodes = 11;
|
||||||
bool prevent_public_btc_network = 12;
|
bool prevent_public_btc_network = 12;
|
||||||
repeated string btc_nodes = 13;
|
repeated string xmr_nodes = 13;
|
||||||
string disable_trade_below_version = 14;
|
string disable_trade_below_version = 14;
|
||||||
repeated string mediators = 15;
|
repeated string mediators = 15;
|
||||||
repeated string refundAgents = 16;
|
repeated string refundAgents = 16;
|
||||||
|
@ -1660,7 +1660,7 @@ message PreferencesPayload {
|
||||||
bool auto_select_arbitrators = 8;
|
bool auto_select_arbitrators = 8;
|
||||||
map<string, bool> dont_show_again_map = 9;
|
map<string, bool> dont_show_again_map = 9;
|
||||||
bool tac_accepted = 10;
|
bool tac_accepted = 10;
|
||||||
bool use_tor_for_bitcoin_j = 11;
|
bool use_tor_for_monero = 11;
|
||||||
bool show_own_offers_in_offer_book = 12;
|
bool show_own_offers_in_offer_book = 12;
|
||||||
TradeCurrency preferred_trade_currency = 13;
|
TradeCurrency preferred_trade_currency = 13;
|
||||||
int64 withdrawal_tx_fee_in_vbytes = 14;
|
int64 withdrawal_tx_fee_in_vbytes = 14;
|
||||||
|
@ -1671,11 +1671,11 @@ message PreferencesPayload {
|
||||||
string buy_screen_currency_code = 19;
|
string buy_screen_currency_code = 19;
|
||||||
string sell_screen_currency_code = 20;
|
string sell_screen_currency_code = 20;
|
||||||
int32 trade_statistics_tick_unit_index = 21;
|
int32 trade_statistics_tick_unit_index = 21;
|
||||||
bool resync_Spv_requested = 22;
|
bool resync_spv_requested = 22;
|
||||||
bool sort_market_currencies_numerically = 23;
|
bool sort_market_currencies_numerically = 23;
|
||||||
bool use_percentage_based_price = 24;
|
bool use_percentage_based_price = 24;
|
||||||
map<string, string> peer_tag_map = 25;
|
map<string, string> peer_tag_map = 25;
|
||||||
string bitcoin_nodes = 26;
|
string monero_nodes = 26;
|
||||||
repeated string ignore_traders_list = 27;
|
repeated string ignore_traders_list = 27;
|
||||||
string directory_chooser_path = 28;
|
string directory_chooser_path = 28;
|
||||||
bool use_animations = 29;
|
bool use_animations = 29;
|
||||||
|
@ -1684,7 +1684,7 @@ message PreferencesPayload {
|
||||||
int32 bridge_option_ordinal = 32;
|
int32 bridge_option_ordinal = 32;
|
||||||
int32 tor_transport_ordinal = 33;
|
int32 tor_transport_ordinal = 33;
|
||||||
string custom_bridges = 34;
|
string custom_bridges = 34;
|
||||||
int32 bitcoin_nodes_option_ordinal = 35;
|
int32 monero_nodes_option_ordinal = 35;
|
||||||
string referral_id = 36;
|
string referral_id = 36;
|
||||||
string phone_key_and_token = 37;
|
string phone_key_and_token = 37;
|
||||||
bool use_sound_for_mobile_notifications = 38;
|
bool use_sound_for_mobile_notifications = 38;
|
||||||
|
|
Loading…
Reference in a new issue