mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-08-10 07:30:05 -04:00
Use tor by default for BitcoinJ (Orchid).
This commit is contained in:
parent
ecac98728a
commit
16f014adb6
4 changed files with 63 additions and 13 deletions
|
@ -80,6 +80,7 @@ public class WalletService {
|
||||||
private final NetworkParameters params;
|
private final NetworkParameters params;
|
||||||
private final File walletDir;
|
private final File walletDir;
|
||||||
private final UserAgent userAgent;
|
private final UserAgent userAgent;
|
||||||
|
private final boolean useTor;
|
||||||
|
|
||||||
private WalletAppKit walletAppKit;
|
private WalletAppKit walletAppKit;
|
||||||
private Wallet wallet;
|
private Wallet wallet;
|
||||||
|
@ -103,6 +104,7 @@ public class WalletService {
|
||||||
this.params = preferences.getBitcoinNetwork().getParameters();
|
this.params = preferences.getBitcoinNetwork().getParameters();
|
||||||
this.walletDir = new File(walletDir, "bitcoin");
|
this.walletDir = new File(walletDir, "bitcoin");
|
||||||
this.userAgent = userAgent;
|
this.userAgent = userAgent;
|
||||||
|
useTor = preferences.getUseTorForBitcoinJ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -192,9 +194,10 @@ public class WalletService {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO try to get bitcoinj running over our tor proxy
|
// TODO Get bitcoinj running over our tor proxy. BlockingClientManager need to be used to use the socket
|
||||||
/* if (!params.getId().equals(NetworkParameters.ID_REGTEST))
|
// from jtorproxy. To get supported it via nio / netty will be harder
|
||||||
walletAppKit.useTor();*/
|
if (!params.getId().equals(NetworkParameters.ID_REGTEST) && useTor)
|
||||||
|
walletAppKit.useTor();
|
||||||
|
|
||||||
// Now configure and start the appkit. This will take a second or two - we could show a temporary splash screen
|
// Now configure and start the appkit. This will take a second or two - we could show a temporary splash screen
|
||||||
// or progress widget to keep the user engaged whilst we initialise, but we don't.
|
// or progress widget to keep the user engaged whilst we initialise, but we don't.
|
||||||
|
@ -620,11 +623,22 @@ public class WalletService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void requestTransactionBlockchainProvider(Transaction transaction, Consumer<Coin> resultHandler) {
|
||||||
|
// TODO use http server over tor to request tx in question
|
||||||
|
// https://btc.blockr.io/api/v1/tx/info/9a0c37209a45a0e61a50a62fcb7d0f52f3d6ed41faaf0afc044d642ab541b675
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void requestTransactionFromBlockChain(Transaction transaction, Consumer<Coin> resultHandler) {
|
public void requestTransactionFromBlockChain(Transaction transaction, Consumer<Coin> resultHandler) {
|
||||||
arbitraryTransactionBloomFilter = new ArbitraryTransactionBloomFilter(transaction, resultHandler);
|
requestTransactionBlockchainProvider(transaction, resultHandler);
|
||||||
|
|
||||||
|
/* arbitraryTransactionBloomFilter = new ArbitraryTransactionBloomFilter(transaction, resultHandler);
|
||||||
PeerGroup peerGroup = walletAppKit.peerGroup();
|
PeerGroup peerGroup = walletAppKit.peerGroup();
|
||||||
peerGroup.addEventListener(arbitraryTransactionBloomFilter);
|
peerGroup.addEventListener(arbitraryTransactionBloomFilter);
|
||||||
peerGroup.addPeerFilterProvider(arbitraryTransactionBloomFilter);
|
peerGroup.addPeerFilterProvider(arbitraryTransactionBloomFilter);
|
||||||
|
|
||||||
|
log.debug("transaction=" + transaction);
|
||||||
|
log.debug("transaction.fee=" + transaction.getFee());*/
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ArbitraryTransactionBloomFilter extends AbstractPeerEventListener implements PeerFilterProvider {
|
private class ArbitraryTransactionBloomFilter extends AbstractPeerEventListener implements PeerFilterProvider {
|
||||||
|
@ -686,8 +700,8 @@ public class WalletService {
|
||||||
if (transactionOutPoints.isEmpty())
|
if (transactionOutPoints.isEmpty())
|
||||||
resultHandler.accept(transaction.getFee());
|
resultHandler.accept(transaction.getFee());
|
||||||
|
|
||||||
log.debug("onTransaction: transaction=" + tx);
|
log.debug("## onTransaction: transaction=" + tx);
|
||||||
log.debug("onTransaction: transaction.fee=" + tx.getFee());
|
log.debug("## onTransaction: transaction.fee=" + tx.getFee());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,6 +101,7 @@ public class Preferences implements Serializable {
|
||||||
private boolean autoSelectArbitrators = true;
|
private boolean autoSelectArbitrators = true;
|
||||||
private final Map<String, Boolean> showAgainMap;
|
private final Map<String, Boolean> showAgainMap;
|
||||||
private boolean tacAccepted;
|
private boolean tacAccepted;
|
||||||
|
private boolean useTorForBitcoinJ = true;
|
||||||
private Locale preferredLocale;
|
private Locale preferredLocale;
|
||||||
private TradeCurrency preferredTradeCurrency;
|
private TradeCurrency preferredTradeCurrency;
|
||||||
private long txFeePerKB = FeePolicy.getFeePerKb().value;
|
private long txFeePerKB = FeePolicy.getFeePerKb().value;
|
||||||
|
@ -150,6 +151,8 @@ public class Preferences implements Serializable {
|
||||||
defaultLocale = preferredLocale;
|
defaultLocale = preferredLocale;
|
||||||
preferredTradeCurrency = persisted.getPreferredTradeCurrency();
|
preferredTradeCurrency = persisted.getPreferredTradeCurrency();
|
||||||
defaultTradeCurrency = preferredTradeCurrency;
|
defaultTradeCurrency = preferredTradeCurrency;
|
||||||
|
useTorForBitcoinJ = persisted.getUseTorForBitcoinJ();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
setTxFeePerKB(persisted.getTxFeePerKB());
|
setTxFeePerKB(persisted.getTxFeePerKB());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -294,6 +297,12 @@ public class Preferences implements Serializable {
|
||||||
storage.queueUpForSave();
|
storage.queueUpForSave();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setUseTorForBitcoinJ(boolean useTorForBitcoinJ) {
|
||||||
|
this.useTorForBitcoinJ = useTorForBitcoinJ;
|
||||||
|
storage.queueUpForSave();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Getter
|
// Getter
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -412,4 +421,8 @@ public class Preferences implements Serializable {
|
||||||
public long getTxFeePerKB() {
|
public long getTxFeePerKB() {
|
||||||
return Math.max(Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.value, txFeePerKB);
|
return Math.max(Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.value, txFeePerKB);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean getUseTorForBitcoinJ() {
|
||||||
|
return useTorForBitcoinJ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,8 +36,11 @@
|
||||||
<Label text="Select Network:" GridPane.rowIndex="0"/>
|
<Label text="Select Network:" GridPane.rowIndex="0"/>
|
||||||
<ComboBox fx:id="netWorkComboBox" GridPane.rowIndex="0" GridPane.columnIndex="1"/>
|
<ComboBox fx:id="netWorkComboBox" GridPane.rowIndex="0" GridPane.columnIndex="1"/>
|
||||||
|
|
||||||
<Label fx:id="bitcoinPeersLabel" text="Connected peers:" GridPane.rowIndex="1"/>
|
<Label text="Use tor:" GridPane.rowIndex="1"/>
|
||||||
<TextArea fx:id="bitcoinPeersTextArea" GridPane.rowIndex="1" GridPane.columnIndex="1" GridPane.hgrow="ALWAYS"
|
<CheckBox fx:id="useTorCheckBox" GridPane.rowIndex="1" GridPane.columnIndex="1"/>
|
||||||
|
|
||||||
|
<Label fx:id="bitcoinPeersLabel" text="Connected peers:" GridPane.rowIndex="2"/>
|
||||||
|
<TextArea fx:id="bitcoinPeersTextArea" GridPane.rowIndex="2" GridPane.columnIndex="1" GridPane.hgrow="ALWAYS"
|
||||||
GridPane.vgrow="ALWAYS" editable="false" focusTraversable="false"/>
|
GridPane.vgrow="ALWAYS" editable="false" focusTraversable="false"/>
|
||||||
|
|
||||||
<TitledGroupBg text="P2P network" GridPane.rowIndex="3" GridPane.rowSpan="5">
|
<TitledGroupBg text="P2P network" GridPane.rowIndex="3" GridPane.rowSpan="5">
|
||||||
|
|
|
@ -36,10 +36,7 @@ import javafx.collections.FXCollections;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.geometry.VPos;
|
import javafx.geometry.VPos;
|
||||||
import javafx.scene.control.ComboBox;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.control.Label;
|
|
||||||
import javafx.scene.control.TextArea;
|
|
||||||
import javafx.scene.control.TextField;
|
|
||||||
import javafx.scene.layout.GridPane;
|
import javafx.scene.layout.GridPane;
|
||||||
import javafx.util.StringConverter;
|
import javafx.util.StringConverter;
|
||||||
import org.bitcoinj.core.Peer;
|
import org.bitcoinj.core.Peer;
|
||||||
|
@ -67,6 +64,8 @@ public class NetworkSettingsView extends ActivatableViewAndModel<GridPane, Activ
|
||||||
TextArea bitcoinPeersTextArea, p2PPeersTextArea;
|
TextArea bitcoinPeersTextArea, p2PPeersTextArea;
|
||||||
@FXML
|
@FXML
|
||||||
Label bitcoinPeersLabel, p2PPeersLabel;
|
Label bitcoinPeersLabel, p2PPeersLabel;
|
||||||
|
@FXML
|
||||||
|
CheckBox useTorCheckBox;
|
||||||
|
|
||||||
private P2PServiceListener p2PServiceListener;
|
private P2PServiceListener p2PServiceListener;
|
||||||
private ChangeListener<Number> numP2PPeersChangeListener;
|
private ChangeListener<Number> numP2PPeersChangeListener;
|
||||||
|
@ -91,6 +90,7 @@ public class NetworkSettingsView extends ActivatableViewAndModel<GridPane, Activ
|
||||||
GridPane.setValignment(bitcoinPeersLabel, VPos.TOP);
|
GridPane.setValignment(bitcoinPeersLabel, 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);
|
||||||
|
|
||||||
bitcoinPeersTextArea.setPrefRowCount(12);
|
bitcoinPeersTextArea.setPrefRowCount(12);
|
||||||
netWorkComboBox.setItems(FXCollections.observableArrayList(BitcoinNetwork.values()));
|
netWorkComboBox.setItems(FXCollections.observableArrayList(BitcoinNetwork.values()));
|
||||||
netWorkComboBox.getSelectionModel().select(preferences.getBitcoinNetwork());
|
netWorkComboBox.getSelectionModel().select(preferences.getBitcoinNetwork());
|
||||||
|
@ -140,6 +140,24 @@ public class NetworkSettingsView extends ActivatableViewAndModel<GridPane, Activ
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void activate() {
|
public void activate() {
|
||||||
|
useTorCheckBox.setSelected(preferences.getUseTorForBitcoinJ());
|
||||||
|
useTorCheckBox.setOnAction(event -> {
|
||||||
|
boolean selected = useTorCheckBox.isSelected();
|
||||||
|
if (selected != preferences.getUseTorForBitcoinJ()) {
|
||||||
|
new Popup().information("You need to restart the application to apply that change.\n" +
|
||||||
|
"Do you want to do that now?")
|
||||||
|
.actionButtonText("Apply and shut down")
|
||||||
|
.onAction(() -> {
|
||||||
|
preferences.setUseTorForBitcoinJ(selected);
|
||||||
|
FxTimer.runLater(Duration.ofMillis(500), BitsquareApp.shutDownHandler::run);
|
||||||
|
})
|
||||||
|
.closeButtonText("Cancel")
|
||||||
|
.onClose(() -> useTorCheckBox.setSelected(!selected))
|
||||||
|
.show();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
NodeAddress nodeAddress = p2PService.getAddress();
|
NodeAddress nodeAddress = p2PService.getAddress();
|
||||||
if (nodeAddress == null) {
|
if (nodeAddress == null) {
|
||||||
p2PService.addP2PServiceListener(p2PServiceListener);
|
p2PService.addP2PServiceListener(p2PServiceListener);
|
||||||
|
@ -158,6 +176,8 @@ public class NetworkSettingsView extends ActivatableViewAndModel<GridPane, Activ
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deactivate() {
|
public void deactivate() {
|
||||||
|
useTorCheckBox.setOnAction(null);
|
||||||
|
|
||||||
if (p2PServiceListener != null)
|
if (p2PServiceListener != null)
|
||||||
p2PService.removeP2PServiceListener(p2PServiceListener);
|
p2PService.removeP2PServiceListener(p2PServiceListener);
|
||||||
|
|
||||||
|
@ -202,7 +222,7 @@ public class NetworkSettingsView extends ActivatableViewAndModel<GridPane, Activ
|
||||||
"Do you want to shut down now?")
|
"Do you want to shut down now?")
|
||||||
.onAction(() -> {
|
.onAction(() -> {
|
||||||
preferences.setBitcoinNetwork(netWorkComboBox.getSelectionModel().getSelectedItem());
|
preferences.setBitcoinNetwork(netWorkComboBox.getSelectionModel().getSelectedItem());
|
||||||
FxTimer.runLater(Duration.ofMillis(500), () -> BitsquareApp.shutDownHandler.run());
|
FxTimer.runLater(Duration.ofMillis(500), BitsquareApp.shutDownHandler::run);
|
||||||
})
|
})
|
||||||
.actionButtonText("Shut down")
|
.actionButtonText("Shut down")
|
||||||
.closeButtonText("Cancel")
|
.closeButtonText("Cancel")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue