mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-04-19 07:15:54 -04:00
fix serialisation issue with address entry
This commit is contained in:
parent
bce5460aa4
commit
6e1e3d4be3
@ -21,10 +21,15 @@ import io.bitsquare.app.Version;
|
||||
import org.bitcoinj.core.Address;
|
||||
import org.bitcoinj.core.NetworkParameters;
|
||||
import org.bitcoinj.crypto.DeterministicKey;
|
||||
import org.bitcoinj.params.MainNetParams;
|
||||
import org.bitcoinj.params.RegTestParams;
|
||||
import org.bitcoinj.params.TestNet3Params;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
@ -56,7 +61,8 @@ public class AddressEntry implements Serializable {
|
||||
private final Context context;
|
||||
private final byte[] pubKey;
|
||||
private final byte[] pubKeyHash;
|
||||
private final NetworkParameters params;
|
||||
private final String paramId;
|
||||
transient private NetworkParameters params;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -75,10 +81,28 @@ public class AddressEntry implements Serializable {
|
||||
this.context = context;
|
||||
this.offerId = offerId;
|
||||
|
||||
paramId = params.getId();
|
||||
|
||||
pubKey = keyPair.getPubKey();
|
||||
pubKeyHash = keyPair.getPubKeyHash();
|
||||
}
|
||||
|
||||
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
|
||||
try {
|
||||
in.defaultReadObject();
|
||||
|
||||
if (MainNetParams.ID_MAINNET.equals(paramId))
|
||||
params = MainNetParams.get();
|
||||
else if (MainNetParams.ID_TESTNET.equals(paramId))
|
||||
params = TestNet3Params.get();
|
||||
else if (MainNetParams.ID_REGTEST.equals(paramId))
|
||||
params = RegTestParams.get();
|
||||
|
||||
} catch (Throwable t) {
|
||||
log.trace("Cannot be deserialized." + t.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// Set after wallet is ready
|
||||
public void setDeterministicKey(DeterministicKey deterministicKey) {
|
||||
this.keyPair = deterministicKey;
|
||||
|
@ -188,6 +188,11 @@ public class WalletService {
|
||||
UserThread.execute(resultHandler::handleResult);
|
||||
}
|
||||
};
|
||||
|
||||
// TODO try to get bitcoinj running over our tor proxy
|
||||
/* if (!params.getId().equals(NetworkParameters.ID_REGTEST))
|
||||
walletAppKit.useTor();*/
|
||||
|
||||
// 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.
|
||||
if (params == RegTestParams.get()) {
|
||||
|
@ -53,6 +53,7 @@ import javafx.scene.layout.StackPane;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.stage.StageStyle;
|
||||
import org.bitcoinj.crypto.DRMWorkaround;
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.controlsfx.dialog.Dialogs;
|
||||
import org.reactfx.EventStreams;
|
||||
@ -114,6 +115,8 @@ public class BitsquareApp extends Application {
|
||||
Thread.setDefaultUncaughtExceptionHandler(handler);
|
||||
Thread.currentThread().setUncaughtExceptionHandler(handler);
|
||||
|
||||
DRMWorkaround.maybeDisableExportControls();
|
||||
|
||||
Security.addProvider(new BouncyCastleProvider());
|
||||
|
||||
try {
|
||||
|
@ -20,7 +20,6 @@ package io.bitsquare.app;
|
||||
import io.bitsquare.BitsquareException;
|
||||
import io.bitsquare.btc.BitcoinNetwork;
|
||||
import io.bitsquare.btc.RegTestHost;
|
||||
import io.bitsquare.p2p.Utils;
|
||||
import io.bitsquare.util.joptsimple.EnumValueConverter;
|
||||
import joptsimple.OptionException;
|
||||
import joptsimple.OptionParser;
|
||||
@ -101,7 +100,8 @@ public class BitsquareAppMain extends BitsquareExecutable {
|
||||
.ofType(boolean.class);
|
||||
parser.accepts(ProgramArguments.NAME_KEY, description("Name of this node", null))
|
||||
.withRequiredArg();
|
||||
parser.accepts(ProgramArguments.PORT_KEY, description("Port to listen on", Utils.findFreeSystemPort()))
|
||||
// use a fixed port as arbitrator use that for his ID
|
||||
parser.accepts(ProgramArguments.PORT_KEY, description("Port to listen on", 9999))
|
||||
.withRequiredArg()
|
||||
.ofType(int.class);
|
||||
parser.accepts(ProgramArguments.USE_LOCALHOST, description("Use localhost network for development", false))
|
||||
|
@ -206,30 +206,6 @@ class MainViewModel implements ViewModel {
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
private BooleanProperty initP2PNetwork() {
|
||||
/* if (networkService.getNetworkInfo() instanceof TomP2PNetworkInfo) {
|
||||
TomP2PNetworkInfo networkInfo = (TomP2PNetworkInfo) networkService.getNetworkInfo();
|
||||
networkInfo.numPeersProperty().addListener((observable, oldValue, newValue) -> {
|
||||
numDHTPeers.set(String.valueOf(newValue) + " peers");
|
||||
if ((int) newValue == 0) {
|
||||
if (lostP2PConnectionTimeoutTimer != null)
|
||||
lostP2PConnectionTimeoutTimer.stop();
|
||||
lostP2PConnectionTimeoutTimer = FxTimer.runLater(Duration.ofMillis(LOST_P2P_CONNECTION_TIMEOUT), () -> {
|
||||
log.trace("Connection lost timeout reached");
|
||||
bootstrapErrorMsg.set("We lost connection to the last peer.");
|
||||
});
|
||||
} else if ((int) oldValue == 0 && (int) newValue > 0) {
|
||||
if (lostP2PConnectionTimeoutTimer != null) {
|
||||
lostP2PConnectionTimeoutTimer.stop();
|
||||
lostP2PConnectionTimeoutTimer = null;
|
||||
}
|
||||
bootstrapErrorMsg.set(null);
|
||||
}
|
||||
});
|
||||
|
||||
networkInfo.stateProperty().addListener((ov, oldValue, newValue) -> {
|
||||
setBootstrapState(newValue);
|
||||
});
|
||||
}*/
|
||||
final BooleanProperty p2pNetworkReady = new SimpleBooleanProperty();
|
||||
p2PService.start(new P2PServiceListener() {
|
||||
@Override
|
||||
|
@ -31,10 +31,10 @@
|
||||
|
||||
<logger name="org.bitcoinj.core.BitcoinSerializer" level="WARN"/>
|
||||
<logger name="org.bitcoinj.core.Peer" level="WARN"/>
|
||||
|
||||
<logger name="org.bitcoinj.core.HeadersMessage" level="WARN"/>
|
||||
<logger name="org.bitcoinj.core.AbstractBlockChain" level="WARN"/>
|
||||
|
||||
<!--
|
||||
<logger name="com.vinumeris.updatefx" level="OFF"/>
|
||||
<logger name="io.netty" level="OFF"/>
|
||||
<logger name="org.bitcoinj.core.BitcoinSerializer" level="ERROR"/>
|
||||
<logger name="org.bitcoinj.core.Peer" level="ERROR"/>-->
|
||||
|
@ -49,7 +49,8 @@ public class P2PModule extends AppModule {
|
||||
File torDir = new File(env.getRequiredProperty(ProgramArguments.TOR_DIR));
|
||||
bind(File.class).annotatedWith(named(ProgramArguments.TOR_DIR)).toInstance(torDir);
|
||||
|
||||
Integer port = env.getProperty(ProgramArguments.PORT_KEY, int.class, Utils.findFreeSystemPort());
|
||||
// use a fixed port as arbitrator use that for his ID
|
||||
Integer port = env.getProperty(ProgramArguments.PORT_KEY, int.class, 9999);
|
||||
bind(int.class).annotatedWith(Names.named(ProgramArguments.PORT_KEY)).toInstance(port);
|
||||
}
|
||||
}
|
@ -92,7 +92,7 @@ public abstract class NetworkNode implements MessageListener, ConnectionListener
|
||||
|
||||
log.info("\n\n############################################################\n" +
|
||||
"NetworkNode created new outbound connection:"
|
||||
+ "\npeerAddress=" + peerAddress.port
|
||||
+ "\npeerAddress=" + peerAddress.getFullAddress()
|
||||
+ "\nconnection.uid=" + newConnection.getUid()
|
||||
+ "\nmessage=" + message
|
||||
+ "\n############################################################\n");
|
||||
|
@ -8,6 +8,7 @@ import com.msopentech.thali.java.toronionproxy.JavaOnionProxyContext;
|
||||
import com.msopentech.thali.java.toronionproxy.JavaOnionProxyManager;
|
||||
import io.bitsquare.common.UserThread;
|
||||
import io.bitsquare.p2p.Address;
|
||||
import io.bitsquare.p2p.Utils;
|
||||
import io.nucleo.net.HiddenServiceDescriptor;
|
||||
import io.nucleo.net.TorNode;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@ -50,8 +51,8 @@ public class TorNetworkNode extends NetworkNode {
|
||||
// Constructor
|
||||
// /////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public TorNetworkNode(int port, File torDir) {
|
||||
super(port);
|
||||
public TorNetworkNode(int servicePort, File torDir) {
|
||||
super(servicePort);
|
||||
|
||||
this.torDir = torDir;
|
||||
}
|
||||
@ -75,7 +76,7 @@ public class TorNetworkNode extends NetworkNode {
|
||||
setupListeners.stream().forEach(e -> UserThread.execute(() -> e.onTorNodeReady()));
|
||||
|
||||
// Create Hidden Service (takes about 40 sec.)
|
||||
createHiddenService(torNode, port, hiddenServiceDescriptor -> {
|
||||
createHiddenService(torNode, Utils.findFreeSystemPort(), port, hiddenServiceDescriptor -> {
|
||||
TorNetworkNode.this.hiddenServiceDescriptor = hiddenServiceDescriptor;
|
||||
|
||||
startServer(hiddenServiceDescriptor.getServerSocket());
|
||||
@ -113,7 +114,6 @@ public class TorNetworkNode extends NetworkNode {
|
||||
} else {
|
||||
log.error("executorService must not be null at shutDown");
|
||||
}
|
||||
|
||||
ListenableFuture<?> future2 = executorService.submit(() -> {
|
||||
try {
|
||||
long ts = System.currentTimeMillis();
|
||||
@ -176,8 +176,11 @@ public class TorNetworkNode extends NetworkNode {
|
||||
start(null);
|
||||
}, WAIT_BEFORE_RESTART, TimeUnit.MILLISECONDS));
|
||||
} else {
|
||||
log.error("We tried to restart tor " + restartCounter
|
||||
+ " times, but we failed to get tor running. We give up now.");
|
||||
String msg = "We tried to restart tor " + restartCounter
|
||||
+ " times, but we failed to get tor running. We give up now.";
|
||||
log.error(msg);
|
||||
// TODO display better error msg
|
||||
throw new RuntimeException(msg);
|
||||
}
|
||||
}
|
||||
|
||||
@ -219,14 +222,14 @@ public class TorNetworkNode extends NetworkNode {
|
||||
});
|
||||
}
|
||||
|
||||
private void createHiddenService(final TorNode torNode, final int port,
|
||||
final Consumer<HiddenServiceDescriptor> resultHandler) {
|
||||
private void createHiddenService(TorNode torNode, int localPort, int servicePort,
|
||||
Consumer<HiddenServiceDescriptor> resultHandler) {
|
||||
ListenableFuture<HiddenServiceDescriptor> future = executorService.submit(() -> {
|
||||
Thread.currentThread().setName("NetworkNode:CreateHiddenService-" + new Random().nextInt(1000));
|
||||
try {
|
||||
long ts = System.currentTimeMillis();
|
||||
log.debug("Create hidden service");
|
||||
HiddenServiceDescriptor hiddenServiceDescriptor = torNode.createHiddenService(port);
|
||||
HiddenServiceDescriptor hiddenServiceDescriptor = torNode.createHiddenService(localPort, servicePort);
|
||||
log.info("\n\n############################################################\n" +
|
||||
"Hidden service created:" +
|
||||
"\nAddress=" + hiddenServiceDescriptor.getFullAddress() +
|
||||
|
@ -3,6 +3,7 @@ package io.bitsquare.p2p.seed;
|
||||
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
import io.bitsquare.app.Logging;
|
||||
import io.bitsquare.common.UserThread;
|
||||
import org.bitcoinj.crypto.DRMWorkaround;
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -29,6 +30,9 @@ public class SeedNodeMain {
|
||||
Path path = Paths.get("seed_node_log");
|
||||
Logging.setup(path.toString());
|
||||
log.info("Log files under: " + path.toAbsolutePath().toString());
|
||||
|
||||
DRMWorkaround.maybeDisableExportControls();
|
||||
|
||||
new SeedNodeMain(args);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user