Search in sources :

Example 1 with ExceptionHandler

use of bisq.common.handlers.ExceptionHandler in project bisq-core by bisq-network.

the class WalletsSetup method initialize.

// /////////////////////////////////////////////////////////////////////////////////////////
// Lifecycle
// /////////////////////////////////////////////////////////////////////////////////////////
public void initialize(@Nullable DeterministicSeed seed, ResultHandler resultHandler, ExceptionHandler exceptionHandler) {
    Log.traceCall();
    // Tell bitcoinj to execute event handlers on the JavaFX UI thread. This keeps things simple and means
    // we cannot forget to switch threads when adding event handlers. Unfortunately, the DownloadListener
    // we give to the app kit is currently an exception and runs on a library thread. It'll get fixed in
    // a future version.
    Threading.USER_THREAD = UserThread.getExecutor();
    Timer timeoutTimer = UserThread.runAfter(() -> exceptionHandler.handleException(new TimeoutException("Wallet did not initialize in " + STARTUP_TIMEOUT + " seconds.")), STARTUP_TIMEOUT);
    backupWallets();
    final Socks5Proxy socks5Proxy = preferences.getUseTorForBitcoinJ() ? socks5ProxyProvider.getSocks5Proxy() : null;
    log.info("Socks5Proxy for bitcoinj: socks5Proxy=" + socks5Proxy);
    walletConfig = new WalletConfig(params, socks5Proxy, walletDir, bisqEnvironment, userAgent, numConnectionForBtc, btcWalletFileName, BSQ_WALLET_FILE_NAME, SPV_CHAIN_FILE_NAME) {

        @Override
        protected void onSetupCompleted() {
            // We are here in the btcj thread Thread[ STARTING,5,main]
            super.onSetupCompleted();
            final PeerGroup peerGroup = walletConfig.peerGroup();
            // We don't want to get our node white list polluted with nodes from AddressMessage calls.
            if (preferences.getBitcoinNodes() != null && !preferences.getBitcoinNodes().isEmpty())
                peerGroup.setAddPeersFromAddressMessage(false);
            peerGroup.addConnectedEventListener((peer, peerCount) -> {
                // We get called here on our user thread
                numPeers.set(peerCount);
                connectedPeers.set(peerGroup.getConnectedPeers());
            });
            peerGroup.addDisconnectedEventListener((peer, peerCount) -> {
                // We get called here on our user thread
                numPeers.set(peerCount);
                connectedPeers.set(peerGroup.getConnectedPeers());
            });
            // Map to user thread
            UserThread.execute(() -> {
                addressEntryList.onWalletReady(walletConfig.getBtcWallet());
                timeoutTimer.stop();
                setupCompletedHandlers.stream().forEach(Runnable::run);
            });
            // onSetupCompleted in walletAppKit is not the called on the last invocations, so we add a bit of delay
            UserThread.runAfter(resultHandler::handleResult, 100, TimeUnit.MILLISECONDS);
        }
    };
    if (params == RegTestParams.get()) {
        walletConfig.setMinBroadcastConnections(1);
        if (regTestHost == RegTestHost.LOCALHOST) {
            walletConfig.setPeerNodesForLocalHost();
        } else if (regTestHost == RegTestHost.REG_TEST_SERVER) {
            walletConfig.setMinBroadcastConnections(1);
            configPeerNodesForRegTestServer();
        } else {
            configPeerNodes(socks5Proxy);
        }
    } else if (bisqEnvironment.isBitcoinLocalhostNodeRunning()) {
        walletConfig.setMinBroadcastConnections(1);
        walletConfig.setPeerNodesForLocalHost();
    } else {
        configPeerNodes(socks5Proxy);
    }
    walletConfig.setDownloadListener(downloadListener).setBlockingStartup(false);
    // If seed is non-null it means we are restoring from backup.
    walletConfig.setSeed(seed);
    walletConfig.addListener(new Service.Listener() {

        @Override
        public void failed(@NotNull Service.State from, @NotNull Throwable failure) {
            walletConfig = null;
            log.error("Service failure from state: {}; failure={}", from, failure);
            timeoutTimer.stop();
            UserThread.execute(() -> exceptionHandler.handleException(failure));
        }
    }, Threading.USER_THREAD);
    walletConfig.startAsync();
}
Also used : RegTestParams(org.bitcoinj.params.RegTestParams) Date(java.util.Date) TimeoutException(java.util.concurrent.TimeoutException) RegTestHost(bisq.core.btc.RegTestHost) StringUtils(org.apache.commons.lang3.StringUtils) InetAddress(java.net.InetAddress) NetworkParameters(org.bitcoinj.core.NetworkParameters) AddressEntryList(bisq.core.btc.AddressEntryList) SimpleIntegerProperty(javafx.beans.property.SimpleIntegerProperty) Socks5Proxy(com.runjva.sourceforge.jsocks.protocol.Socks5Proxy) Context(org.bitcoinj.core.Context) PeerGroup(org.bitcoinj.core.PeerGroup) BlockChain(org.bitcoinj.core.BlockChain) ReadOnlyDoubleProperty(javafx.beans.property.ReadOnlyDoubleProperty) Set(java.util.Set) DownloadProgressTracker(org.bitcoinj.core.listeners.DownloadProgressTracker) Collectors(java.util.stream.Collectors) ExceptionHandler(bisq.common.handlers.ExceptionHandler) FileUtil(bisq.common.storage.FileUtil) BooleanProperty(javafx.beans.property.BooleanProperty) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) DeterministicSeed(org.bitcoinj.wallet.DeterministicSeed) AddressEntry(bisq.core.btc.AddressEntry) Preferences(bisq.core.user.Preferences) UserThread(bisq.common.UserThread) ReadOnlyIntegerProperty(javafx.beans.property.ReadOnlyIntegerProperty) SimpleDoubleProperty(javafx.beans.property.SimpleDoubleProperty) Address(org.bitcoinj.core.Address) NotNull(org.jetbrains.annotations.NotNull) ReadOnlyObjectProperty(javafx.beans.property.ReadOnlyObjectProperty) Wallet(org.bitcoinj.wallet.Wallet) Timer(bisq.common.Timer) DoubleProperty(javafx.beans.property.DoubleProperty) Peer(org.bitcoinj.core.Peer) IntegerProperty(javafx.beans.property.IntegerProperty) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) ImmutableList(com.google.common.collect.ImmutableList) Socks5MultiDiscovery(bisq.network.Socks5MultiDiscovery) PeerAddress(org.bitcoinj.core.PeerAddress) Named(javax.inject.Named) Nullable(javax.annotation.Nullable) BitcoinNodes(bisq.core.btc.BitcoinNodes) ObjectProperty(javafx.beans.property.ObjectProperty) BtcNode(bisq.core.btc.BitcoinNodes.BtcNode) Socks5ProxyProvider(bisq.network.Socks5ProxyProvider) ResultHandler(bisq.common.handlers.ResultHandler) Preconditions.checkNotNull(com.google.common.base.Preconditions.checkNotNull) Log(bisq.common.app.Log) IOException(java.io.IOException) BisqEnvironment(bisq.core.app.BisqEnvironment) BtcOptionKeys(bisq.core.btc.BtcOptionKeys) UnknownHostException(java.net.UnknownHostException) File(java.io.File) Threading(org.bitcoinj.utils.Threading) Service(com.google.common.util.concurrent.Service) TimeUnit(java.util.concurrent.TimeUnit) SimpleBooleanProperty(javafx.beans.property.SimpleBooleanProperty) SimpleObjectProperty(javafx.beans.property.SimpleObjectProperty) Paths(java.nio.file.Paths) VisibleForTesting(com.google.common.annotations.VisibleForTesting) Timer(bisq.common.Timer) Socks5Proxy(com.runjva.sourceforge.jsocks.protocol.Socks5Proxy) PeerGroup(org.bitcoinj.core.PeerGroup) Service(com.google.common.util.concurrent.Service) TimeoutException(java.util.concurrent.TimeoutException)

Aggregations

Timer (bisq.common.Timer)1 UserThread (bisq.common.UserThread)1 Log (bisq.common.app.Log)1 ExceptionHandler (bisq.common.handlers.ExceptionHandler)1 ResultHandler (bisq.common.handlers.ResultHandler)1 FileUtil (bisq.common.storage.FileUtil)1 BisqEnvironment (bisq.core.app.BisqEnvironment)1 AddressEntry (bisq.core.btc.AddressEntry)1 AddressEntryList (bisq.core.btc.AddressEntryList)1 BitcoinNodes (bisq.core.btc.BitcoinNodes)1 BtcNode (bisq.core.btc.BitcoinNodes.BtcNode)1 BtcOptionKeys (bisq.core.btc.BtcOptionKeys)1 RegTestHost (bisq.core.btc.RegTestHost)1 Preferences (bisq.core.user.Preferences)1 Socks5MultiDiscovery (bisq.network.Socks5MultiDiscovery)1 Socks5ProxyProvider (bisq.network.Socks5ProxyProvider)1 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 Preconditions.checkNotNull (com.google.common.base.Preconditions.checkNotNull)1 ImmutableList (com.google.common.collect.ImmutableList)1 Service (com.google.common.util.concurrent.Service)1