From 65a3ea6717a5ab8af9084be68dc22109b0393a9c Mon Sep 17 00:00:00 2001 From: Alva Swanson Date: Wed, 11 Sep 2024 19:49:20 +0000 Subject: [PATCH 1/3] wallets: Remove dependency to Bisq 2 Hex Class We can't depend on Bisq 2's Hex class to be able to reuse the wallets library in Bisq 1. --- .../bisq/wallets/bitcoind/zmq/BitcoindRawTxProcessor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wallets/bitcoind/bitcoind/src/main/java/bisq/wallets/bitcoind/zmq/BitcoindRawTxProcessor.java b/wallets/bitcoind/bitcoind/src/main/java/bisq/wallets/bitcoind/zmq/BitcoindRawTxProcessor.java index 9f2d868818..2bd4c177a4 100644 --- a/wallets/bitcoind/bitcoind/src/main/java/bisq/wallets/bitcoind/zmq/BitcoindRawTxProcessor.java +++ b/wallets/bitcoind/bitcoind/src/main/java/bisq/wallets/bitcoind/zmq/BitcoindRawTxProcessor.java @@ -17,9 +17,9 @@ package bisq.wallets.bitcoind.zmq; -import bisq.common.encoding.Hex; import bisq.wallets.bitcoind.rpc.BitcoindDaemon; import bisq.wallets.bitcoind.rpc.responses.BitcoindDecodeRawTransactionResponse; +import com.google.common.io.BaseEncoding; public class BitcoindRawTxProcessor implements ZmqRawTxProcessor { @@ -33,7 +33,7 @@ public BitcoindRawTxProcessor(BitcoindDaemon daemon, ZmqListeners listeners) { @Override public void processRawTx(byte[] serializedTx, byte[] sequenceNumber) { - String txInHex = Hex.encode(serializedTx); + String txInHex = BaseEncoding.base16().lowerCase().encode(serializedTx); BitcoindDecodeRawTransactionResponse.Result rawTransaction = daemon.decodeRawTransaction(txInHex).getResult(); listeners.fireTxOutputAddressesListeners(rawTransaction); listeners.fireTxIdInputListeners(rawTransaction); From d221ad01995e6e9a105d41a844f4e7c15e306256 Mon Sep 17 00:00:00 2001 From: Alva Swanson Date: Wed, 11 Sep 2024 19:53:57 +0000 Subject: [PATCH 2/3] wallets: Remove dependency to Bisq 2 Threading Class We can't depend on Bisq 2's Threading class to be able to reuse the wallets library in Bisq 1. --- .../bisq/wallets/bitcoind/zmq/ZmqConnection.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/wallets/bitcoind/bitcoind/src/main/java/bisq/wallets/bitcoind/zmq/ZmqConnection.java b/wallets/bitcoind/bitcoind/src/main/java/bisq/wallets/bitcoind/zmq/ZmqConnection.java index 57776ce28c..ec45ba8eb5 100644 --- a/wallets/bitcoind/bitcoind/src/main/java/bisq/wallets/bitcoind/zmq/ZmqConnection.java +++ b/wallets/bitcoind/bitcoind/src/main/java/bisq/wallets/bitcoind/zmq/ZmqConnection.java @@ -17,10 +17,10 @@ package bisq.wallets.bitcoind.zmq; -import bisq.common.threading.ExecutorFactory; import bisq.wallets.bitcoind.rpc.responses.BitcoindGetZmqNotificationsResponse; import bisq.wallets.bitcoind.zmq.exceptions.CannotFindZmqAddressException; import bisq.wallets.bitcoind.zmq.exceptions.CannotFindZmqTopicException; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.zeromq.SocketType; @@ -33,6 +33,8 @@ import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; import java.util.stream.Collectors; @Slf4j @@ -45,8 +47,8 @@ public class ZmqConnection implements AutoCloseable { @Getter private final ZmqListeners listeners; - private final ExecutorService executorService = ExecutorFactory - .newFixedThreadPool("wallet-zeromq-notification-thread-pool", 2); + private final ExecutorService executorService = + newFixedThreadPool("wallet-zeromq-notification-thread-pool", 2); private ZContext context; @@ -151,4 +153,12 @@ private boolean isSocketClosed(int errorCode) { private boolean isZeroMqContextTerminated(int errorCode) { return errorCode == ERROR_CODE_CONTEXT_TERMINATED; } + + public ExecutorService newFixedThreadPool(String name, int numThreads) { + ThreadFactory threadFactory = new ThreadFactoryBuilder() + .setNameFormat(name + "-%d") + .setDaemon(true) + .build(); + return Executors.newFixedThreadPool(numThreads, threadFactory); + } } From 26a677ff72e12b3022b5b2fc329a783878e3416b Mon Sep 17 00:00:00 2001 From: Alva Swanson Date: Wed, 11 Sep 2024 19:57:38 +0000 Subject: [PATCH 3/3] wallets: Remove dependency to Bisq 2 NetworkUtils Class We can't depend on Bisq 2's NetworkUtils class to be able to reuse the wallets library in Bisq 1. --- .../bitcoind/WalletNotRunningTest.java | 21 +++++++++++++++---- .../bitcoind/BitcoindRegtestProcess.java | 5 ++--- .../bitcoind/BitcoindRegtestSetup.java | 16 ++++++++++++-- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/wallets/bitcoind/bitcoind/src/test/java/bisq/wallets/bitcoind/WalletNotRunningTest.java b/wallets/bitcoind/bitcoind/src/test/java/bisq/wallets/bitcoind/WalletNotRunningTest.java index 2038f70b37..c5093d3c88 100644 --- a/wallets/bitcoind/bitcoind/src/test/java/bisq/wallets/bitcoind/WalletNotRunningTest.java +++ b/wallets/bitcoind/bitcoind/src/test/java/bisq/wallets/bitcoind/WalletNotRunningTest.java @@ -17,21 +17,23 @@ package bisq.wallets.bitcoind; -import bisq.common.util.NetworkUtils; import bisq.wallets.bitcoind.rpc.BitcoindDaemon; -import bisq.wallets.json_rpc.RpcConfig; -import bisq.wallets.json_rpc.RpcClientFactory; import bisq.wallets.json_rpc.JsonRpcClient; +import bisq.wallets.json_rpc.RpcClientFactory; +import bisq.wallets.json_rpc.RpcConfig; import org.junit.jupiter.api.Test; +import java.io.IOException; import java.net.ConnectException; +import java.net.ServerSocket; +import java.util.Random; import static org.assertj.core.api.Assertions.assertThatThrownBy; public class WalletNotRunningTest { @Test void notRunningTest() { - int freePort = NetworkUtils.findFreeSystemPort(); + int freePort = findFreeSystemPort(); RpcConfig rpcConfig = RpcConfig.builder() .hostname("127.0.0.1") @@ -46,4 +48,15 @@ void notRunningTest() { assertThatThrownBy(minerChainBackend::listWallets) .hasCauseInstanceOf(ConnectException.class); } + + public static int findFreeSystemPort() { + try { + ServerSocket server = new ServerSocket(0); + int port = server.getLocalPort(); + server.close(); + return port; + } catch (IOException ignored) { + return new Random().nextInt(10000) + 50000; + } + } } diff --git a/wallets/bitcoind/regtest/src/main/java/bisq/wallets/regtest/bitcoind/BitcoindRegtestProcess.java b/wallets/bitcoind/regtest/src/main/java/bisq/wallets/regtest/bitcoind/BitcoindRegtestProcess.java index 30b2a325d1..780f256e3c 100644 --- a/wallets/bitcoind/regtest/src/main/java/bisq/wallets/regtest/bitcoind/BitcoindRegtestProcess.java +++ b/wallets/bitcoind/regtest/src/main/java/bisq/wallets/regtest/bitcoind/BitcoindRegtestProcess.java @@ -17,7 +17,6 @@ package bisq.wallets.regtest.bitcoind; -import bisq.common.util.NetworkUtils; import bisq.wallets.bitcoind.rpc.BitcoindDaemon; import bisq.wallets.json_rpc.JsonRpcClient; import bisq.wallets.json_rpc.RpcCallFailureException; @@ -53,7 +52,7 @@ public BitcoindRegtestProcess(Path binaryPath, RpcConfig rpcConfig, Path dataDir @Override public ProcessConfig createProcessConfig() { - int zmqPort = NetworkUtils.findFreeSystemPort(); + int zmqPort = BitcoindRegtestSetup.findFreeSystemPort(); return ProcessConfig.builder() .name(binaryPath.toAbsolutePath().toString()) .args(List.of( @@ -61,7 +60,7 @@ public ProcessConfig createProcessConfig() { "-datadir=" + dataDir.toAbsolutePath(), "-debug=1", - "-bind=127.0.0.1:" + NetworkUtils.findFreeSystemPort(), + "-bind=127.0.0.1:" + BitcoindRegtestSetup.findFreeSystemPort(), "-whitelist=127.0.0.1", "-rpcbind=127.0.0.1:" + rpcConfig.getPort(), diff --git a/wallets/bitcoind/regtest/src/main/java/bisq/wallets/regtest/bitcoind/BitcoindRegtestSetup.java b/wallets/bitcoind/regtest/src/main/java/bisq/wallets/regtest/bitcoind/BitcoindRegtestSetup.java index d641487508..4bb9e7d86e 100644 --- a/wallets/bitcoind/regtest/src/main/java/bisq/wallets/regtest/bitcoind/BitcoindRegtestSetup.java +++ b/wallets/bitcoind/regtest/src/main/java/bisq/wallets/regtest/bitcoind/BitcoindRegtestSetup.java @@ -17,7 +17,6 @@ package bisq.wallets.regtest.bitcoind; -import bisq.common.util.NetworkUtils; import bisq.wallets.bitcoind.rpc.BitcoindDaemon; import bisq.wallets.bitcoind.rpc.BitcoindWallet; import bisq.wallets.bitcoind.rpc.responses.BitcoindListUnspentResponse; @@ -31,11 +30,13 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.net.ServerSocket; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.Random; public class BitcoindRegtestSetup extends AbstractRegtestSetup { @@ -101,7 +102,7 @@ public static RpcConfig createRpcConfig(String hostname, int port) { } private RpcConfig createRpcConfig() { - int port = NetworkUtils.findFreeSystemPort(); + int port = findFreeSystemPort(); return createRpcConfig("127.0.0.1", port); } @@ -168,4 +169,15 @@ private Path installBitcoind(Path bitcoindBinaryDir) throws IOException { return bitcoindPath; } } + + public static int findFreeSystemPort() { + try { + ServerSocket server = new ServerSocket(0); + int port = server.getLocalPort(); + server.close(); + return port; + } catch (IOException ignored) { + return new Random().nextInt(10000) + 50000; + } + } }