From 03c76227a9304648169c177ccbfe603036908de1 Mon Sep 17 00:00:00 2001 From: KewbitXMR Date: Sat, 7 Jun 2025 08:29:08 +0700 Subject: [PATCH] add patch for 1.0.18 --- 1.0.18-complete.patch | 794 ++++++++++++++++++ README.md | 81 -- build.gradle | 2 + .../main/java/haveno/common/app/Version.java | 2 +- .../java/haveno/core/alert/AlertManager.java | 9 +- .../alert/PrivateNotificationManager.java | 11 +- .../haveno/core/app/HavenoExecutable.java | 2 +- .../haveno/core/filter/FilterManager.java | 4 +- .../arbitration/ArbitrationManager.java | 2 +- .../arbitrator/ArbitratorManager.java | 19 +- .../java/haveno/core/trade/HavenoUtils.java | 12 +- core/src/main/resources/xmr_mainnet.seednodes | 4 +- desktop/package/package.gradle | 2 +- docker/1.0.18-complete.patch | 794 ++++++++++++++++++ docker/Dockerfile.core | 36 + docker/build_then_publish_all.sh | 0 .../nodes/haveno_seednode_2001/hostname | 1 + .../hs_ed25519_public_key | Bin 0 -> 64 bytes .../hs_ed25519_secret_key | Bin 0 -> 96 bytes .../nodes/haveno_seednode_2002/hostname | 1 + .../hs_ed25519_public_key | Bin 0 -> 64 bytes .../hs_ed25519_secret_key | Bin 0 -> 96 bytes .../nodes/haveno_seednode_2003/hostname | 1 + .../hs_ed25519_public_key | Bin 0 -> 64 bytes .../hs_ed25519_secret_key | Bin 0 -> 96 bytes docker/daemon/.env | 3 + docker/daemon/docker-compose.yml | 28 + docker/initial_setup.sh | 13 + docker/seednode/.env | 2 + docker/seednode/docker-compose.yml | 79 ++ docker/statsnode/.env | 2 + docker/statsnode/docker-compose.yml | 15 + docker/torrc | 109 +++ gpg_keys/woodser.asc | 53 -- patches/1.0.18-complete.patch | 794 ++++++++++++++++++ update-patch.sh | 56 ++ 36 files changed, 2755 insertions(+), 176 deletions(-) create mode 100644 1.0.18-complete.patch create mode 100644 docker/1.0.18-complete.patch create mode 100755 docker/Dockerfile.core create mode 100644 docker/build_then_publish_all.sh create mode 100755 docker/config/nodes/haveno_seednode_2001/hostname create mode 100755 docker/config/nodes/haveno_seednode_2001/hs_ed25519_public_key create mode 100755 docker/config/nodes/haveno_seednode_2001/hs_ed25519_secret_key create mode 100755 docker/config/nodes/haveno_seednode_2002/hostname create mode 100755 docker/config/nodes/haveno_seednode_2002/hs_ed25519_public_key create mode 100755 docker/config/nodes/haveno_seednode_2002/hs_ed25519_secret_key create mode 100755 docker/config/nodes/haveno_seednode_2003/hostname create mode 100755 docker/config/nodes/haveno_seednode_2003/hs_ed25519_public_key create mode 100755 docker/config/nodes/haveno_seednode_2003/hs_ed25519_secret_key create mode 100644 docker/daemon/.env create mode 100644 docker/daemon/docker-compose.yml create mode 100644 docker/initial_setup.sh create mode 100644 docker/seednode/.env create mode 100644 docker/seednode/docker-compose.yml create mode 100644 docker/statsnode/.env create mode 100644 docker/statsnode/docker-compose.yml create mode 100755 docker/torrc delete mode 100644 gpg_keys/woodser.asc create mode 100644 patches/1.0.18-complete.patch create mode 100755 update-patch.sh diff --git a/1.0.18-complete.patch b/1.0.18-complete.patch new file mode 100644 index 00000000..c45167ac --- /dev/null +++ b/1.0.18-complete.patch @@ -0,0 +1,794 @@ +diff --git a/README.md b/README.md +index 5c439f9a..e69de29b 100644 +--- a/README.md ++++ b/README.md +@@ -1,81 +0,0 @@ +-
+- Haveno logo +- +- ![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/haveno-dex/haveno/build.yml?branch=master) +- [![GitHub issues with bounty](https://img.shields.io/github/issues-search/haveno-dex/haveno?color=%23fef2c0&label=Issues%20with%20bounties&query=is%3Aopen+is%3Aissue+label%3A%F0%9F%92%B0bounty)](https://github.com/haveno-dex/haveno/issues?q=is%3Aopen+is%3Aissue+label%3A%F0%9F%92%B0bounty) +- [![Twitter Follow](https://img.shields.io/twitter/follow/HavenoDEX?style=social)](https://twitter.com/havenodex) +- [![Matrix rooms](https://img.shields.io/badge/Matrix%20room-%23haveno-blue)](https://matrix.to/#/#haveno:monero.social) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/haveno-dex/.github/blob/master/CODE_OF_CONDUCT.md) +-
+- +-## What is Haveno? +- +-Haveno (pronounced ha‧ve‧no) is an open source platform to exchange [Monero](https://getmonero.org) for fiat currencies like USD, EUR, and GBP or other cryptocurrencies like BTC, ETH, and BCH. +- +-Main features: +- +-- Communications are routed through **Tor**, to preserve your privacy. +- +-- Trades are **peer-to-peer**: trades on Haveno happen between people only, there is no central authority. +- +-- Trades are **non-custodial**: Haveno supports arbitration in case something goes wrong during the trade, but arbitrators never have access to your funds. +- +-- There is **No token**, because it's not needed. Transactions between traders are secured by non-custodial multisignature transactions on the Monero network. +- +-See the [FAQ on our website](https://haveno.exchange/faq/) for more information. +- +-## Installing Haveno +- +-Haveno can be installed on Linux, macOS, and Windows by using a third party installer and network. +- +-> [!note] +-> The official Haveno repository does not support making real trades directly. +-> +-> To make real trades with Haveno, first find a third party network, and then use their installer or build their repository. We do not endorse any networks at this time. +- +-A test network is also available for users to make test trades using Monero's stagenet. See the [instructions](https://github.com/haveno-dex/haveno/blob/master/docs/installing.md) to build Haveno and connect to the test network. +- +-Alternatively, you can [create your own mainnet network](create-mainnet.md). +- +-Note that Haveno is being actively developed. If you find issues or bugs, please let us know. +- +-## Main repositories +- +-- **[haveno](https://github.com/haveno-dex/haveno)** - This repository. The core of Haveno. +-- **[haveno-ts](https://github.com/haveno-dex/haveno-ts)** - TypeScript library for using Haveno. +-- **[haveno-ui](https://github.com/haveno-dex/haveno-ui)** - A new user interface (WIP). +-- **[haveno-meta](https://github.com/haveno-dex/haveno-meta)** - For project-wide discussions and proposals. +- +-If you wish to help, take a look at the repositories above and look for open issues. We run a bounty program to incentivize development. See [Bounties](#bounties). +- +-## Keep in touch and help out! +- +-Haveno is a community-driven project. For it to be successful it's fundamental to have the support and help of the community. Join the community rooms on our Matrix server: +- +-- General discussions: **Haveno** ([#haveno:monero.social](https://matrix.to/#/#haveno:monero.social)) relayed on IRC/Libera (`#haveno`) +-- Development discussions: **Haveno Development** ([#haveno-development:monero.social](https://matrix.to/#/#haveno-development:monero.social)) relayed on IRC/Libera (`#haveno-development`) +- +-Email: contact@haveno.exchange +-Website: [haveno.exchange](https://haveno.exchange) +- +-## Contributing to Haveno +- +-See the [developer guide](docs/developer-guide.md) to get started developing for Haveno. +- +-See [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) for our styling guides. +- +-If you are not able to contribute code and want to contribute development resources, [donations](#support) fund development bounties. +- +-## Bounties +- +-To incentivize development and reward contributors, we adopt a simple bounty system. Contributors may be awarded bounties after completing a task (resolving an issue). Take a look at the [issues labeled '💰bounty'](https://github.com/haveno-dex/haveno/issues?q=is%3Aopen+is%3Aissue+label%3A%F0%9F%92%B0bounty) in the main `haveno` repository. [Details and conditions for receiving a bounty](docs/bounties.md). +- +-## Support and sponsorships +- +-To bring Haveno to life, we need resources. If you have the possibility, please consider [becoming a sponsor](https://haveno.exchange/sponsors/) or donating to the project: +- +-

+- Donate Monero
+- 42sjokkT9FmiWPqVzrWPFE5NCJXwt96bkBozHf4vgLR9hXyJDqKHEHKVscAARuD7in5wV1meEcSTJTanCTDzidTe2cFXS1F +-

+- +-If you are using a wallet that supports OpenAlias (like the 'official' CLI and GUI wallets), you can simply put `fund@haveno.exchange` as the "receiver" address. +diff --git a/build.gradle b/build.gradle +index c8a80a90..e9f54053 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -787,6 +787,8 @@ configure(project(':statsnode')) { + } + + configure(project(':daemon')) { ++ apply plugin: 'com.github.johnrengelman.shadow' ++ + mainClassName = 'haveno.daemon.app.HavenoDaemonMain' + + dependencies { +diff --git a/common/src/main/java/haveno/common/app/Version.java b/common/src/main/java/haveno/common/app/Version.java +index d39016dc..37158383 100644 +--- a/common/src/main/java/haveno/common/app/Version.java ++++ b/common/src/main/java/haveno/common/app/Version.java +@@ -80,7 +80,7 @@ public class Version { + + // The version no. for the objects sent over the network. A change will break the serialization of old objects. + // If objects are used for both network and database the network version is applied. +- public static final String P2P_NETWORK_VERSION = "A"; ++ public static final String P2P_NETWORK_VERSION = System.getenv().getOrDefault("P2P_NETWORK_VERSION", "X");; + + // The version no. of the serialized data stored to disc. A change will break the serialization of old objects. + // VERSION = 0.5.0 -> LOCAL_DB_VERSION = 1 +diff --git a/core/src/main/java/haveno/core/alert/AlertManager.java b/core/src/main/java/haveno/core/alert/AlertManager.java +index a54f45c4..372641ad 100644 +--- a/core/src/main/java/haveno/core/alert/AlertManager.java ++++ b/core/src/main/java/haveno/core/alert/AlertManager.java +@@ -101,15 +101,12 @@ public class AlertManager { + switch (Config.baseCurrencyNetwork()) { + case XMR_LOCAL: + return List.of( +- "027a381b5333a56e1cc3d90d3a7d07f26509adf7029ed06fc997c656621f8da1ee", +- "024baabdba90e7cc0dc4626ef73ea9d722ea7085d1104491da8c76f28187513492"); ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + case XMR_STAGENET: + return List.of( +- "036d8a1dfcb406886037d2381da006358722823e1940acc2598c844bbc0fd1026f", +- "026c581ad773d987e6bd10785ac7f7e0e64864aedeb8bce5af37046de812a37854", +- "025b058c9f2c60d839669dbfa5578cf5a8117d60e6b70e2f0946f8a691273c6a36"); ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + case XMR_MAINNET: +- return List.of(); ++ return List.of("0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + default: + throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); + } +diff --git a/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java b/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java +index fd6abac5..bd93565c 100644 +--- a/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java ++++ b/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java +@@ -99,16 +99,11 @@ public class PrivateNotificationManager implements MessageListener { + if (useDevPrivilegeKeys) return List.of(DevEnv.DEV_PRIVILEGE_PUB_KEY); + switch (Config.baseCurrencyNetwork()) { + case XMR_LOCAL: +- return List.of( +- "027a381b5333a56e1cc3d90d3a7d07f26509adf7029ed06fc997c656621f8da1ee", +- "024baabdba90e7cc0dc4626ef73ea9d722ea7085d1104491da8c76f28187513492"); ++ return List.of("023c8fdea9ff2d03daef54337907e70a7b0e20084a75fcc3ad2f0c28d8b691dea1"); + case XMR_STAGENET: +- return List.of( +- "02ba7c5de295adfe57b60029f3637a2c6b1d0e969a8aaefb9e0ddc3a7963f26925", +- "026c581ad773d987e6bd10785ac7f7e0e64864aedeb8bce5af37046de812a37854", +- "025b058c9f2c60d839669dbfa5578cf5a8117d60e6b70e2f0946f8a691273c6a36"); ++ return List.of("023c8fdea9ff2d03daef54337907e70a7b0e20084a75fcc3ad2f0c28d8b691dea1"); + case XMR_MAINNET: +- return List.of(); ++ return List.of("023c8fdea9ff2d03daef54337907e70a7b0e20084a75fcc3ad2f0c28d8b691dea1"); + default: + throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); + } +diff --git a/core/src/main/java/haveno/core/app/HavenoExecutable.java b/core/src/main/java/haveno/core/app/HavenoExecutable.java +index 5f2d1462..a665b03e 100644 +--- a/core/src/main/java/haveno/core/app/HavenoExecutable.java ++++ b/core/src/main/java/haveno/core/app/HavenoExecutable.java +@@ -84,7 +84,7 @@ public abstract class HavenoExecutable implements GracefulShutDownHandler, Haven + + // TODO: regular expression is used to parse application name for the flatpak manifest, a more stable approach would be nice + // Don't edit the next line unless you're only editing in between the quotes. +- public static final String DEFAULT_APP_NAME = "Haveno"; ++ public static final String DEFAULT_APP_NAME = "Haveno App"; + + public static final int EXIT_SUCCESS = 0; + public static final int EXIT_FAILURE = 1; +diff --git a/core/src/main/java/haveno/core/filter/FilterManager.java b/core/src/main/java/haveno/core/filter/FilterManager.java +index cb7e0e9b..a92caf52 100644 +--- a/core/src/main/java/haveno/core/filter/FilterManager.java ++++ b/core/src/main/java/haveno/core/filter/FilterManager.java +@@ -116,9 +116,7 @@ public class FilterManager { + + publicKeys = useDevPrivilegeKeys ? + Collections.singletonList(DevEnv.DEV_PRIVILEGE_PUB_KEY) : +- List.of("0358d47858acdc41910325fce266571540681ef83a0d6fedce312bef9810793a27", +- "029340c3e7d4bb0f9e651b5f590b434fecb6175aeaa57145c7804ff05d210e534f", +- "034dc7530bf66ffd9580aa98031ea9a18ac2d269f7c56c0e71eca06105b9ed69f9"); ++ List.of("03d62d14438adbe7aea688ade1f73933c6f0a705f238c02c5b54b83dd1e4fca225"); + + banFilter.setBannedNodePredicate(this::isNodeAddressBannedFromNetwork); + } +diff --git a/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java b/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java +index 50be387c..406e8986 100644 +--- a/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java ++++ b/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java +@@ -200,7 +200,7 @@ public final class ArbitrationManager extends DisputeManager { + switch (Config.baseCurrencyNetwork()) { + case XMR_LOCAL: + return List.of( +- "027a381b5333a56e1cc3d90d3a7d07f26509adf7029ed06fc997c656621f8da1ee", +- "024baabdba90e7cc0dc4626ef73ea9d722ea7085d1104491da8c76f28187513492", +- "026eeec3c119dd6d537249d74e5752a642dd2c3cc5b6a9b44588eb58344f29b519"); ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + case XMR_STAGENET: + return List.of( +- "03bb559ce207a4deb51d4c705076c95b85ad8581d35936b2a422dcb504eaf7cdb0", +- "026c581ad773d987e6bd10785ac7f7e0e64864aedeb8bce5af37046de812a37854", +- "025b058c9f2c60d839669dbfa5578cf5a8117d60e6b70e2f0946f8a691273c6a36", +- "036c7d3f4bf05ef39b9d1b0a5d453a18210de36220c3d83cd16e59bd6132b037ad", +- "030f7122a10ff73cd73808bddace95be77a94189c8a0eb24586265e125ce5ce6b9", +- "03aa23e062afa0dda465f46986f8aa8d0374ad3e3f256141b05681dcb1e39c3859", +- "02d3beb1293ca2ca14e6d42ca8bd18089a62aac62fd6bb23923ee6ead46ac60fba", +- "03fa0f38f27bdd324db6f933f7e57851dadf3b911e4db6b19dd0950492c4525a31", +- "02a1a458df5acf4ab08fdca748e28f33a955a30854c8c1a831ee733dca7f0d2fcd", +- "0374dd70f3fa6e47ec5ab97932e1cec6233e98e6ae3129036b17118650c44fd3de"); ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + case XMR_MAINNET: +- return List.of(); ++ return List.of( ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78" ++ ); + default: + throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); + } +diff --git a/core/src/main/java/haveno/core/trade/HavenoUtils.java b/core/src/main/java/haveno/core/trade/HavenoUtils.java +index d238d788..2a4f9159 100644 +--- a/core/src/main/java/haveno/core/trade/HavenoUtils.java ++++ b/core/src/main/java/haveno/core/trade/HavenoUtils.java +@@ -85,17 +85,17 @@ import org.bitcoinj.core.Coin; + public class HavenoUtils { + + // configure release date +- private static final String RELEASE_DATE = "25-05-2024 00:00:00"; // optionally set to release date of the network in format dd-mm-yyyy to impose temporary limits, etc. e.g. "25-05-2024 00:00:00" ++ private static final String RELEASE_DATE = "25-11-2024 00:00:00"; // optionally set to release date of the network in format dd-mm-yyyy to impose temporary limits, etc. e.g. "25-05-2024 00:00:00" + public static final int RELEASE_LIMIT_DAYS = 60; // number of days to limit sell offers to max buy limit for new accounts + public static final int WARN_ON_OFFER_EXCEEDS_UNSIGNED_BUY_LIMIT_DAYS = 182; // number of days to warn if sell offer exceeds unsigned buy limit + public static final int ARBITRATOR_ACK_TIMEOUT_SECONDS = 60; + + // configure fees +- public static final boolean ARBITRATOR_ASSIGNS_TRADE_FEE_ADDRESS = true; +- public static final double PENALTY_FEE_PCT = 0.02; // 2% ++ public static final boolean ARBITRATOR_ASSIGNS_TRADE_FEE_ADDRESS = false; + public static final double MAKER_FEE_PCT = 0.0015; // 0.15% +- public static final double TAKER_FEE_PCT = 0.0075; // 0.75% +- public static final double MAKER_FEE_FOR_TAKER_WITHOUT_DEPOSIT_PCT = MAKER_FEE_PCT + TAKER_FEE_PCT; // customize maker's fee when no deposit or fee from taker ++ public static final double TAKER_FEE_PCT = 0.0015; // 0.15% ++ public static final double PENALTY_FEE_PCT = 0.02; // 2% ++ public static final double MAKER_FEE_FOR_TAKER_WITHOUT_DEPOSIT_PCT = MAKER_FEE_PCT + TAKER_FEE_PCT; + + // other configuration + public static final long LOG_POLL_ERROR_PERIOD_MS = 1000 * 60 * 4; // log poll errors up to once every 4 minutes +@@ -464,7 +464,7 @@ public class HavenoUtils { + case XMR_STAGENET: + return "5B11hTJdG2XDNwjdKGLRxwSLwDhkbGg7C7UEAZBxjE6FbCeRMjudrpNACmDNtWPiSnNfjDQf39QRjdtdgoL69txv81qc2Mc"; + case XMR_MAINNET: +- throw new RuntimeException("Mainnet fee address not implemented"); ++ return "84R8DfswAtT5eZ97ioKFjJYvd6HKuSdZTKyZYYJr77oVWcAiJDJgTAc3piVm2prKmeAgf92iSr7jkcjmmHNFLWGEDGUDafc"; + default: + throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); + } +diff --git a/core/src/main/resources/xmr_mainnet.seednodes b/core/src/main/resources/xmr_mainnet.seednodes +index 3f81fa04..aacaca7e 100644 +--- a/core/src/main/resources/xmr_mainnet.seednodes ++++ b/core/src/main/resources/xmr_mainnet.seednodes +@@ -1,2 +1,4 @@ + # nodeaddress.onion:port [(@owner,@backup)] +-placeholder.onion:8000 (@placeholder) +\ No newline at end of file ++5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001 (@xox) ++dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002 (@xox) ++ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003 (@xox) +\ No newline at end of file +diff --git a/desktop/package/package.gradle b/desktop/package/package.gradle +index 65e09d55..de2c99e7 100644 +--- a/desktop/package/package.gradle ++++ b/desktop/package/package.gradle +@@ -278,7 +278,7 @@ task packageInstallers { + " --java-options --add-opens=java.base/java.lang.reflect=ALL-UNNAMED" + + " --java-options --add-opens=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED" + + " --java-options -Djava.net.preferIPv4Stack=true" + +- " --arguments --baseCurrencyNetwork=XMR_STAGENET" ++ " --arguments --baseCurrencyNetwork=XMR_MAINNET" + // Warning: this will cause guice reflection exceptions and lead to issues with the guice internal cache + // resulting in the UI not loading + // " --java-options -Djdk.module.illegalAccess=deny" + +diff --git a/docker/Dockerfile.core b/docker/Dockerfile.core +new file mode 100755 +index 00000000..bee1bb1c +--- /dev/null ++++ b/docker/Dockerfile.core +@@ -0,0 +1,38 @@ ++FROM openjdk:21-jdk-bullseye ++ ++RUN set -ex && \ ++ apt update && \ ++ apt --no-install-recommends --yes install \ ++ make \ ++ git \ ++ tor ++ ++RUN set -ex && adduser --system --group --disabled-password haveno && \ ++ mkdir -p /home/haveno && \ ++ chown -R haveno:haveno /home/haveno ++ ++USER haveno ++ ++WORKDIR /home/haveno ++ ++RUN echo 'Cache3' ++ ++RUN set -ex && git clone https://git.haveno.com/haveno/haveno.git ++ ++WORKDIR /home/haveno/haveno ++ ++COPY 1.0.18-complete.patch /home/haveno/haveno/1.0.18-complete.patch ++ ++RUN git checkout tags/1.0.18 && \ ++ git reset --hard 1.0.18 && \ ++ git apply 1.0.18-complete.patch ++ ++ ++RUN make clean && make skip-tests ++ ++WORKDIR /home/haveno/haveno ++ ++ENTRYPOINT [ "./haveno-seednode" ] ++ ++## CMDs are conditional based on type ++CMD ["--baseCurrencyNetwork=XMR_MAINNET", "--useLocalhostForP2P=false", "--useDevPrivilegeKeys=false", "--nodePort=2002"] +diff --git a/docker/build_then_publish_all.sh b/docker/build_then_publish_all.sh +new file mode 100644 +index 00000000..e69de29b +diff --git a/docker/config/nodes/haveno_seednode_2001/hostname b/docker/config/nodes/haveno_seednode_2001/hostname +new file mode 100755 +index 00000000..fff219c8 +--- /dev/null ++++ b/docker/config/nodes/haveno_seednode_2001/hostname +@@ -0,0 +1 @@ ++5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion +diff --git a/docker/config/nodes/haveno_seednode_2001/hs_ed25519_public_key b/docker/config/nodes/haveno_seednode_2001/hs_ed25519_public_key +new file mode 100755 +index 0000000000000000000000000000000000000000..622eb855ac4d65892c59e70d03cfcf70f17d038a +GIT binary patch +literal 64 +zcmV-G0Kfk|Js@RdGBq_ZId(BEaCKsAX=6Gdba`-PFd#iW0002$JQanMD&fg-4E95f +Wcpo;j;up%p|4`czr=1Ryegd+wXBcMy + +literal 0 +HcmV?d00001 + +diff --git a/docker/config/nodes/haveno_seednode_2001/hs_ed25519_secret_key b/docker/config/nodes/haveno_seednode_2001/hs_ed25519_secret_key +new file mode 100755 +index 0000000000000000000000000000000000000000..4a8ce9291914a3a540e054fd5342da9fd9c15e22 +GIT binary patch +literal 96 +zcmV-m0H6OoJs@RdGBq_ZId(BEb7f<4Wpp|qba`-PFd#iW00013!WD+FnYMllinWAq +zy2eLprwa_T^V|X&>cLb4=a5rWmwhRtvz;;=Ce#wvslSlv-mEknEcz;Ww;o^ptRg>1` +CBPja- + +literal 0 +HcmV?d00001 + +diff --git a/docker/daemon/.env b/docker/daemon/.env +new file mode 100644 +index 00000000..931de414 +--- /dev/null ++++ b/docker/daemon/.env +@@ -0,0 +1,3 @@ ++NETWORK_VERSION_TAG=1.0.18 ++BASE_NETWORK=STAGENET ++P2P_NETWORK_VERSION="X" +\ No newline at end of file +diff --git a/docker/daemon/docker-compose.yml b/docker/daemon/docker-compose.yml +new file mode 100644 +index 00000000..72a17d33 +--- /dev/null ++++ b/docker/daemon/docker-compose.yml +@@ -0,0 +1,28 @@ ++version: '3' ++ ++services: ++ haveno-daemon: ++ image: haveno-core ++ build: ++ context: ../ ++ ports: ++ - "127.0.0.1:3201:3201" ++ environment: ++ - P2P_NETWORK_VERSION=X ++ - NETWORK_VERSION_TAG=${NETWORK_VERSION_TAG} ++ - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} ++ - USE_LOCALHOST_FOR_P2P=false ++ - USE_DEV_PRIVILEGE_KEYS=false ++ - NODE_PORT=9999 ++ - APP_NAME=haveno-XMR_${BASE_NETWORK}_DAEMON ++ - EXPORT_SHADOW=yes ++ - EXPORT_SHADOW_PATH=daemon/build/libs/daemon-all.sh # Leave this blank in most cases ++ entrypoint: ["./haveno-daemon"] ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--useLocalhostForP2P=false" ++ - "--useDevPrivilegeKeys=false" ++ - "--nodePort=9999" ++ - "--appName=XMR_${BASE_NETWORK}_DAEMON" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" ++ restart: unless-stopped +diff --git a/docker/initial_setup.sh b/docker/initial_setup.sh +new file mode 100644 +index 00000000..2241009b +--- /dev/null ++++ b/docker/initial_setup.sh +@@ -0,0 +1,13 @@ ++## check if sudo frst other wise exist ++ ++## setup docker ++apt-get update -y ++apt-get install docker.io docker-compose tor make -y ++ ++cp torrc /etc/tor/torrc ++cp -r config/nodes/* /var/lib/tor/ ++ ++## build base files ++cd .. && make skip-tests ++ ++cd docker/seednode && docker compose up --build +diff --git a/docker/seednode/.env b/docker/seednode/.env +new file mode 100644 +index 00000000..586a660c +--- /dev/null ++++ b/docker/seednode/.env +@@ -0,0 +1,2 @@ ++BASE_NETWORK=STAGENET ++P2P_NETWORK_VERSION="X" +\ No newline at end of file +diff --git a/docker/seednode/docker-compose.yml b/docker/seednode/docker-compose.yml +new file mode 100644 +index 00000000..0da5abb7 +--- /dev/null ++++ b/docker/seednode/docker-compose.yml +@@ -0,0 +1,79 @@ ++version: '3.8' ++ ++services: ++ haveno-core: ++ image: haveno-core ++ build: ++ context: ../ ++ dockerfile: Dockerfile.core ++ # No ports, this one just builds the image ++ entrypoint: ["true"] # No need to run ++ ++ haveno-seednode_2001: ++ image: haveno-core ++ depends_on: ++ - haveno-core ++ ports: ++ - "127.0.0.1:2001:2001" ++ environment: ++ - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} ++ - USE_LOCALHOST_FOR_P2P=false ++ - USE_DEV_PRIVILEGE_KEYS=false ++ - NODE_PORT=2001 ++ - APP_NAME=haveno-XMR_${BASE_NETWORK}_Seed_2001 ++ entrypoint: ["./haveno-seednode"] ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--useLocalhostForP2P=false" ++ - "--useDevPrivilegeKeys=false" ++ - "--nodePort=2001" ++ - "--appName=haveno-XMR_${BASE_NETWORK}_Seed_2001" ++ - "--hiddenServiceAddress=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" ++ restart: unless-stopped ++ ++ haveno-seednode_2002: ++ image: haveno-core ++ depends_on: ++ - haveno-core ++ ports: ++ - "127.0.0.1:2002:2002" ++ environment: ++ - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} ++ - USE_LOCALHOST_FOR_P2P=false ++ - USE_DEV_PRIVILEGE_KEYS=false ++ - NODE_PORT=2002 ++ - APP_NAME=haveno-XMR_${BASE_NETWORK}_Seed_2002 ++ entrypoint: ["./haveno-seednode"] ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--useLocalhostForP2P=false" ++ - "--useDevPrivilegeKeys=false" ++ - "--nodePort=2002" ++ - "--appName=haveno-XMR_${BASE_NETWORK}_Seed_2002" ++ - "--hiddenServiceAddress=dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" ++ restart: unless-stopped ++ ++ haveno-seednode_2003: ++ image: haveno-core ++ depends_on: ++ - haveno-core ++ ports: ++ - "127.0.0.1:2003:2003" ++ environment: ++ - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} ++ - USE_LOCALHOST_FOR_P2P=false ++ - USE_DEV_PRIVILEGE_KEYS=false ++ - NODE_PORT=2003 ++ - APP_NAME=haveno-XMR_${BASE_NETWORK}_Seed_2003 ++ entrypoint: ["./haveno-seednode"] ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--useLocalhostForP2P=false" ++ - "--useDevPrivilegeKeys=false" ++ - "--nodePort=2003" ++ - "--appName=haveno-XMR_${BASE_NETWORK}_Seed_2003" ++ - "--hiddenServiceAddress=ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" ++ restart: unless-stopped +\ No newline at end of file +diff --git a/docker/statsnode/.env b/docker/statsnode/.env +new file mode 100644 +index 00000000..586a660c +--- /dev/null ++++ b/docker/statsnode/.env +@@ -0,0 +1,2 @@ ++BASE_NETWORK=STAGENET ++P2P_NETWORK_VERSION="X" +\ No newline at end of file +diff --git a/docker/statsnode/docker-compose.yml b/docker/statsnode/docker-compose.yml +new file mode 100644 +index 00000000..5dfa7e8a +--- /dev/null ++++ b/docker/statsnode/docker-compose.yml +@@ -0,0 +1,15 @@ ++version: '3' ++ ++services: ++ haveno-statsnode: ++ image: haveno-core ++ build: ++ context: ../ ++ dockerfile: Dockerfile.core ++ entrypoint: ["./haveno-statsnode"] ++ evironment: ++ - P2P_NETWORK_VERSION=X ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--appName=XMR_${BASE_NETWORK}_STATSNODE" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" +diff --git a/docker/torrc b/docker/torrc +new file mode 100755 +index 00000000..8ddaf97e +--- /dev/null ++++ b/docker/torrc +@@ -0,0 +1,109 @@ ++## Configuration file for Haveno Seednode ++## ++## Tor opens a socks proxy on port 9050 by default -- even if you don't ++## configure one below. Set "SocksPort 0" if you plan to run Tor only ++## as a relay, and not make any local application connections yourself. ++#SocksPort 9050 # Default: Bind to localhost:9050 for local connections. ++# ### SocksPort flag: OnionTrafficOnly ### ++## Tell the tor client to only connect to .onion addresses in response to SOCKS5 requests on this connection. ++## This is equivalent to NoDNSRequest, NoIPv4Traffic, NoIPv6Traffic. ++# ### SocksPort flag: ExtendedErrors ### ++## Return extended error code in the SOCKS reply. So far, the possible errors are: ++# X'F0' Onion Service Descriptor Can Not be Found ++# X'F1' Onion Service Descriptor Is Invalid ++# X'F2' Onion Service Introduction Failed ++# X'F3' Onion Service Rendezvous Failed ++# X'F4' Onion Service Missing Client Authorization ++# X'F5' Onion Service Wrong Client Authorization ++# X'F6' Onion Service Invalid Address ++# X'F7' Onion Service Introduction Timed Out ++SocksPort 9050 OnionTrafficOnly ExtendedErrors ++ ++## Entry policies to allow/deny SOCKS requests based on IP address. ++## First entry that matches wins. If no SocksPolicy is set, we accept ++## all (and only) requests that reach a SocksPort. Untrusted users who ++## can access your SocksPort may be able to learn about the connections ++## you make. ++SocksPolicy accept 127.0.0.1 ++SocksPolicy accept6 [::1] ++SocksPolicy reject * ++ ++## Tor will reject application connections that use unsafe variants of the socks protocol ++## — ones that only provide an IP address, meaning the application is doing a DNS resolve first. ++## Specifically, these are socks4 and socks5 when not doing remote DNS. (Default: 0) ++#SafeSocks 1 ++ ++## Tor will make a notice-level log entry for each connection to the Socks port indicating ++## whether the request used a safe socks protocol or an unsafe one (see above entry on SafeSocks). ++## This helps to determine whether an application using Tor is possibly leaking DNS requests. (Default: 0) ++TestSocks 1 ++ ++## Logs go to stdout at level "notice" unless redirected by something ++## else, like one of the below lines. You can have as many Log lines as ++## you want. ++## ++## We advise using "notice" in most cases, since anything more verbose ++## may provide sensitive information to an attacker who obtains the logs. ++## ++## Send all messages of level 'notice' or higher to /var/log/tor/notices.log ++#Log notice file /var/log/tor/notices.log ++## Send every possible message to /var/log/tor/debug.log ++#Log debug file /var/log/tor/debug.log ++## Use the system log instead of Tor's logfiles (This is default) ++#Log notice syslog ++## To send all messages to stderr: ++#Log debug stderr ++ ++# Try to write to disk less frequently than we would otherwise. This is useful when running on flash memory. ++AvoidDiskWrites 1 ++ ++HiddenServiceStatistics 0 ++ ++## Compute the hash of a password with "tor --hash-password password". ++HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C ++#CookieAuthentication 0 # (Default: 1) ++ ++## MetricsPort provides an interface to the underlying Tor relay metrics. ++## Exposing publicly is dangerous, set a very strict access policy. ++## Retrieve the metrics with: curl http://127.0.0.1:9035/metrics ++MetricsPort 127.0.0.1:9035 ++MetricsPortPolicy accept 127.0.0.1 ++MetricsPortPolicy accept [::1] ++ ++HiddenServiceDir /var/lib/tor/haveno_seednode_2001 ++HiddenServicePort 2001 127.0.0.1:2001 ++HiddenServicePort 2001 [::1]:2001 ++HiddenServiceEnableIntroDoSDefense 1 ++HiddenServicePoWDefensesEnabled 1 ++HiddenServicePoWQueueRate 50 # (Default: 250) ++HiddenServicePoWQueueBurst 250 # (Default: 2500) ++HiddenServiceMaxStreams 25 ++ ++ ++HiddenServiceDir /var/lib/tor/haveno_seednode_2002 ++HiddenServicePort 2002 127.0.0.1:2002 ++HiddenServicePort 2002 [::1]:2002 ++HiddenServiceEnableIntroDoSDefense 1 ++#HiddenServiceEnableIntroDoSRatePerSec 25 # (Default: 25) ++#HiddenServiceEnableIntroDoSBurstPerSec 200 # (Default: 200) ++HiddenServicePoWDefensesEnabled 1 ++HiddenServicePoWQueueRate 50 # (Default: 250) ++HiddenServicePoWQueueBurst 250 # (Default: 2500) ++HiddenServiceMaxStreams 25 ++#HiddenServiceMaxStreamsCloseCircuit 1 ++ ++ ++HiddenServiceDir /var/lib/tor/haveno_seednode_2003 ++HiddenServicePort 2003 127.0.0.1:2003 ++HiddenServicePort 2003 [::1]:2003 ++HiddenServiceEnableIntroDoSDefense 1 ++#HiddenServiceEnableIntroDoSRatePerSec 25 # (Default: 25) ++#HiddenServiceEnableIntroDoSBurstPerSec 200 # (Default: 200) ++#HiddenServiceNumIntroductionPoints 3 # (Default: 3) ++HiddenServicePoWDefensesEnabled 1 ++HiddenServicePoWQueueRate 50 # (Default: 250) ++HiddenServicePoWQueueBurst 250 # (Default: 2500) ++HiddenServiceMaxStreams 25 ++#HiddenServiceMaxStreamsCloseCircuit 1 ++ ++LongLivedPorts 2001,2002,2003 +\ No newline at end of file +diff --git a/gpg_keys/woodser.asc b/gpg_keys/woodser.asc +deleted file mode 100644 +index 2dcc3f3a..00000000 +--- a/gpg_keys/woodser.asc ++++ /dev/null +@@ -1,53 +0,0 @@ +------BEGIN PGP PUBLIC KEY BLOCK----- +-Comment: GPGTools - https://gpgtools.org +- +-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 +-mqKdaDoa +-=bRX1 +------END PGP PUBLIC KEY BLOCK----- diff --git a/README.md b/README.md index 5c439f9a..e69de29b 100644 --- a/README.md +++ b/README.md @@ -1,81 +0,0 @@ -
- Haveno logo - - ![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/haveno-dex/haveno/build.yml?branch=master) - [![GitHub issues with bounty](https://img.shields.io/github/issues-search/haveno-dex/haveno?color=%23fef2c0&label=Issues%20with%20bounties&query=is%3Aopen+is%3Aissue+label%3A%F0%9F%92%B0bounty)](https://github.com/haveno-dex/haveno/issues?q=is%3Aopen+is%3Aissue+label%3A%F0%9F%92%B0bounty) - [![Twitter Follow](https://img.shields.io/twitter/follow/HavenoDEX?style=social)](https://twitter.com/havenodex) - [![Matrix rooms](https://img.shields.io/badge/Matrix%20room-%23haveno-blue)](https://matrix.to/#/#haveno:monero.social) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/haveno-dex/.github/blob/master/CODE_OF_CONDUCT.md) -
- -## What is Haveno? - -Haveno (pronounced ha‧ve‧no) is an open source platform to exchange [Monero](https://getmonero.org) for fiat currencies like USD, EUR, and GBP or other cryptocurrencies like BTC, ETH, and BCH. - -Main features: - -- Communications are routed through **Tor**, to preserve your privacy. - -- Trades are **peer-to-peer**: trades on Haveno happen between people only, there is no central authority. - -- Trades are **non-custodial**: Haveno supports arbitration in case something goes wrong during the trade, but arbitrators never have access to your funds. - -- There is **No token**, because it's not needed. Transactions between traders are secured by non-custodial multisignature transactions on the Monero network. - -See the [FAQ on our website](https://haveno.exchange/faq/) for more information. - -## Installing Haveno - -Haveno can be installed on Linux, macOS, and Windows by using a third party installer and network. - -> [!note] -> The official Haveno repository does not support making real trades directly. -> -> To make real trades with Haveno, first find a third party network, and then use their installer or build their repository. We do not endorse any networks at this time. - -A test network is also available for users to make test trades using Monero's stagenet. See the [instructions](https://github.com/haveno-dex/haveno/blob/master/docs/installing.md) to build Haveno and connect to the test network. - -Alternatively, you can [create your own mainnet network](create-mainnet.md). - -Note that Haveno is being actively developed. If you find issues or bugs, please let us know. - -## Main repositories - -- **[haveno](https://github.com/haveno-dex/haveno)** - This repository. The core of Haveno. -- **[haveno-ts](https://github.com/haveno-dex/haveno-ts)** - TypeScript library for using Haveno. -- **[haveno-ui](https://github.com/haveno-dex/haveno-ui)** - A new user interface (WIP). -- **[haveno-meta](https://github.com/haveno-dex/haveno-meta)** - For project-wide discussions and proposals. - -If you wish to help, take a look at the repositories above and look for open issues. We run a bounty program to incentivize development. See [Bounties](#bounties). - -## Keep in touch and help out! - -Haveno is a community-driven project. For it to be successful it's fundamental to have the support and help of the community. Join the community rooms on our Matrix server: - -- General discussions: **Haveno** ([#haveno:monero.social](https://matrix.to/#/#haveno:monero.social)) relayed on IRC/Libera (`#haveno`) -- Development discussions: **Haveno Development** ([#haveno-development:monero.social](https://matrix.to/#/#haveno-development:monero.social)) relayed on IRC/Libera (`#haveno-development`) - -Email: contact@haveno.exchange -Website: [haveno.exchange](https://haveno.exchange) - -## Contributing to Haveno - -See the [developer guide](docs/developer-guide.md) to get started developing for Haveno. - -See [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) for our styling guides. - -If you are not able to contribute code and want to contribute development resources, [donations](#support) fund development bounties. - -## Bounties - -To incentivize development and reward contributors, we adopt a simple bounty system. Contributors may be awarded bounties after completing a task (resolving an issue). Take a look at the [issues labeled '💰bounty'](https://github.com/haveno-dex/haveno/issues?q=is%3Aopen+is%3Aissue+label%3A%F0%9F%92%B0bounty) in the main `haveno` repository. [Details and conditions for receiving a bounty](docs/bounties.md). - -## Support and sponsorships - -To bring Haveno to life, we need resources. If you have the possibility, please consider [becoming a sponsor](https://haveno.exchange/sponsors/) or donating to the project: - -

- Donate Monero
- 42sjokkT9FmiWPqVzrWPFE5NCJXwt96bkBozHf4vgLR9hXyJDqKHEHKVscAARuD7in5wV1meEcSTJTanCTDzidTe2cFXS1F -

- -If you are using a wallet that supports OpenAlias (like the 'official' CLI and GUI wallets), you can simply put `fund@haveno.exchange` as the "receiver" address. diff --git a/build.gradle b/build.gradle index c8a80a90..e9f54053 100644 --- a/build.gradle +++ b/build.gradle @@ -787,6 +787,8 @@ configure(project(':statsnode')) { } configure(project(':daemon')) { + apply plugin: 'com.github.johnrengelman.shadow' + mainClassName = 'haveno.daemon.app.HavenoDaemonMain' dependencies { diff --git a/common/src/main/java/haveno/common/app/Version.java b/common/src/main/java/haveno/common/app/Version.java index d39016dc..37158383 100644 --- a/common/src/main/java/haveno/common/app/Version.java +++ b/common/src/main/java/haveno/common/app/Version.java @@ -80,7 +80,7 @@ public class Version { // The version no. for the objects sent over the network. A change will break the serialization of old objects. // If objects are used for both network and database the network version is applied. - public static final String P2P_NETWORK_VERSION = "A"; + public static final String P2P_NETWORK_VERSION = System.getenv().getOrDefault("P2P_NETWORK_VERSION", "X");; // The version no. of the serialized data stored to disc. A change will break the serialization of old objects. // VERSION = 0.5.0 -> LOCAL_DB_VERSION = 1 diff --git a/core/src/main/java/haveno/core/alert/AlertManager.java b/core/src/main/java/haveno/core/alert/AlertManager.java index a54f45c4..372641ad 100644 --- a/core/src/main/java/haveno/core/alert/AlertManager.java +++ b/core/src/main/java/haveno/core/alert/AlertManager.java @@ -101,15 +101,12 @@ public class AlertManager { switch (Config.baseCurrencyNetwork()) { case XMR_LOCAL: return List.of( - "027a381b5333a56e1cc3d90d3a7d07f26509adf7029ed06fc997c656621f8da1ee", - "024baabdba90e7cc0dc4626ef73ea9d722ea7085d1104491da8c76f28187513492"); + "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); case XMR_STAGENET: return List.of( - "036d8a1dfcb406886037d2381da006358722823e1940acc2598c844bbc0fd1026f", - "026c581ad773d987e6bd10785ac7f7e0e64864aedeb8bce5af37046de812a37854", - "025b058c9f2c60d839669dbfa5578cf5a8117d60e6b70e2f0946f8a691273c6a36"); + "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); case XMR_MAINNET: - return List.of(); + return List.of("0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); default: throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); } diff --git a/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java b/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java index fd6abac5..bd93565c 100644 --- a/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java +++ b/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java @@ -99,16 +99,11 @@ public class PrivateNotificationManager implements MessageListener { if (useDevPrivilegeKeys) return List.of(DevEnv.DEV_PRIVILEGE_PUB_KEY); switch (Config.baseCurrencyNetwork()) { case XMR_LOCAL: - return List.of( - "027a381b5333a56e1cc3d90d3a7d07f26509adf7029ed06fc997c656621f8da1ee", - "024baabdba90e7cc0dc4626ef73ea9d722ea7085d1104491da8c76f28187513492"); + return List.of("023c8fdea9ff2d03daef54337907e70a7b0e20084a75fcc3ad2f0c28d8b691dea1"); case XMR_STAGENET: - return List.of( - "02ba7c5de295adfe57b60029f3637a2c6b1d0e969a8aaefb9e0ddc3a7963f26925", - "026c581ad773d987e6bd10785ac7f7e0e64864aedeb8bce5af37046de812a37854", - "025b058c9f2c60d839669dbfa5578cf5a8117d60e6b70e2f0946f8a691273c6a36"); + return List.of("023c8fdea9ff2d03daef54337907e70a7b0e20084a75fcc3ad2f0c28d8b691dea1"); case XMR_MAINNET: - return List.of(); + return List.of("023c8fdea9ff2d03daef54337907e70a7b0e20084a75fcc3ad2f0c28d8b691dea1"); default: throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); } diff --git a/core/src/main/java/haveno/core/app/HavenoExecutable.java b/core/src/main/java/haveno/core/app/HavenoExecutable.java index 5f2d1462..a665b03e 100644 --- a/core/src/main/java/haveno/core/app/HavenoExecutable.java +++ b/core/src/main/java/haveno/core/app/HavenoExecutable.java @@ -84,7 +84,7 @@ public abstract class HavenoExecutable implements GracefulShutDownHandler, Haven // TODO: regular expression is used to parse application name for the flatpak manifest, a more stable approach would be nice // Don't edit the next line unless you're only editing in between the quotes. - public static final String DEFAULT_APP_NAME = "Haveno"; + public static final String DEFAULT_APP_NAME = "Haveno App"; public static final int EXIT_SUCCESS = 0; public static final int EXIT_FAILURE = 1; diff --git a/core/src/main/java/haveno/core/filter/FilterManager.java b/core/src/main/java/haveno/core/filter/FilterManager.java index cb7e0e9b..a92caf52 100644 --- a/core/src/main/java/haveno/core/filter/FilterManager.java +++ b/core/src/main/java/haveno/core/filter/FilterManager.java @@ -116,9 +116,7 @@ public class FilterManager { publicKeys = useDevPrivilegeKeys ? Collections.singletonList(DevEnv.DEV_PRIVILEGE_PUB_KEY) : - List.of("0358d47858acdc41910325fce266571540681ef83a0d6fedce312bef9810793a27", - "029340c3e7d4bb0f9e651b5f590b434fecb6175aeaa57145c7804ff05d210e534f", - "034dc7530bf66ffd9580aa98031ea9a18ac2d269f7c56c0e71eca06105b9ed69f9"); + List.of("03d62d14438adbe7aea688ade1f73933c6f0a705f238c02c5b54b83dd1e4fca225"); banFilter.setBannedNodePredicate(this::isNodeAddressBannedFromNetwork); } diff --git a/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java b/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java index 50be387c..406e8986 100644 --- a/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java +++ b/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java @@ -200,7 +200,7 @@ public final class ArbitrationManager extends DisputeManager { switch (Config.baseCurrencyNetwork()) { case XMR_LOCAL: return List.of( - "027a381b5333a56e1cc3d90d3a7d07f26509adf7029ed06fc997c656621f8da1ee", - "024baabdba90e7cc0dc4626ef73ea9d722ea7085d1104491da8c76f28187513492", - "026eeec3c119dd6d537249d74e5752a642dd2c3cc5b6a9b44588eb58344f29b519"); + "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); case XMR_STAGENET: return List.of( - "03bb559ce207a4deb51d4c705076c95b85ad8581d35936b2a422dcb504eaf7cdb0", - "026c581ad773d987e6bd10785ac7f7e0e64864aedeb8bce5af37046de812a37854", - "025b058c9f2c60d839669dbfa5578cf5a8117d60e6b70e2f0946f8a691273c6a36", - "036c7d3f4bf05ef39b9d1b0a5d453a18210de36220c3d83cd16e59bd6132b037ad", - "030f7122a10ff73cd73808bddace95be77a94189c8a0eb24586265e125ce5ce6b9", - "03aa23e062afa0dda465f46986f8aa8d0374ad3e3f256141b05681dcb1e39c3859", - "02d3beb1293ca2ca14e6d42ca8bd18089a62aac62fd6bb23923ee6ead46ac60fba", - "03fa0f38f27bdd324db6f933f7e57851dadf3b911e4db6b19dd0950492c4525a31", - "02a1a458df5acf4ab08fdca748e28f33a955a30854c8c1a831ee733dca7f0d2fcd", - "0374dd70f3fa6e47ec5ab97932e1cec6233e98e6ae3129036b17118650c44fd3de"); + "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); case XMR_MAINNET: - return List.of(); + return List.of( + "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78" + ); default: throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); } diff --git a/core/src/main/java/haveno/core/trade/HavenoUtils.java b/core/src/main/java/haveno/core/trade/HavenoUtils.java index d238d788..2a4f9159 100644 --- a/core/src/main/java/haveno/core/trade/HavenoUtils.java +++ b/core/src/main/java/haveno/core/trade/HavenoUtils.java @@ -85,17 +85,17 @@ import org.bitcoinj.core.Coin; public class HavenoUtils { // configure release date - private static final String RELEASE_DATE = "25-05-2024 00:00:00"; // optionally set to release date of the network in format dd-mm-yyyy to impose temporary limits, etc. e.g. "25-05-2024 00:00:00" + private static final String RELEASE_DATE = "25-11-2024 00:00:00"; // optionally set to release date of the network in format dd-mm-yyyy to impose temporary limits, etc. e.g. "25-05-2024 00:00:00" public static final int RELEASE_LIMIT_DAYS = 60; // number of days to limit sell offers to max buy limit for new accounts public static final int WARN_ON_OFFER_EXCEEDS_UNSIGNED_BUY_LIMIT_DAYS = 182; // number of days to warn if sell offer exceeds unsigned buy limit public static final int ARBITRATOR_ACK_TIMEOUT_SECONDS = 60; // configure fees - public static final boolean ARBITRATOR_ASSIGNS_TRADE_FEE_ADDRESS = true; - public static final double PENALTY_FEE_PCT = 0.02; // 2% + public static final boolean ARBITRATOR_ASSIGNS_TRADE_FEE_ADDRESS = false; public static final double MAKER_FEE_PCT = 0.0015; // 0.15% - public static final double TAKER_FEE_PCT = 0.0075; // 0.75% - public static final double MAKER_FEE_FOR_TAKER_WITHOUT_DEPOSIT_PCT = MAKER_FEE_PCT + TAKER_FEE_PCT; // customize maker's fee when no deposit or fee from taker + public static final double TAKER_FEE_PCT = 0.0015; // 0.15% + public static final double PENALTY_FEE_PCT = 0.02; // 2% + public static final double MAKER_FEE_FOR_TAKER_WITHOUT_DEPOSIT_PCT = MAKER_FEE_PCT + TAKER_FEE_PCT; // other configuration public static final long LOG_POLL_ERROR_PERIOD_MS = 1000 * 60 * 4; // log poll errors up to once every 4 minutes @@ -464,7 +464,7 @@ public class HavenoUtils { case XMR_STAGENET: return "5B11hTJdG2XDNwjdKGLRxwSLwDhkbGg7C7UEAZBxjE6FbCeRMjudrpNACmDNtWPiSnNfjDQf39QRjdtdgoL69txv81qc2Mc"; case XMR_MAINNET: - throw new RuntimeException("Mainnet fee address not implemented"); + return "84R8DfswAtT5eZ97ioKFjJYvd6HKuSdZTKyZYYJr77oVWcAiJDJgTAc3piVm2prKmeAgf92iSr7jkcjmmHNFLWGEDGUDafc"; default: throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); } diff --git a/core/src/main/resources/xmr_mainnet.seednodes b/core/src/main/resources/xmr_mainnet.seednodes index 3f81fa04..aacaca7e 100644 --- a/core/src/main/resources/xmr_mainnet.seednodes +++ b/core/src/main/resources/xmr_mainnet.seednodes @@ -1,2 +1,4 @@ # nodeaddress.onion:port [(@owner,@backup)] -placeholder.onion:8000 (@placeholder) \ No newline at end of file +5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001 (@xox) +dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002 (@xox) +ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003 (@xox) \ No newline at end of file diff --git a/desktop/package/package.gradle b/desktop/package/package.gradle index 65e09d55..de2c99e7 100644 --- a/desktop/package/package.gradle +++ b/desktop/package/package.gradle @@ -278,7 +278,7 @@ task packageInstallers { " --java-options --add-opens=java.base/java.lang.reflect=ALL-UNNAMED" + " --java-options --add-opens=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED" + " --java-options -Djava.net.preferIPv4Stack=true" + - " --arguments --baseCurrencyNetwork=XMR_STAGENET" + " --arguments --baseCurrencyNetwork=XMR_MAINNET" // Warning: this will cause guice reflection exceptions and lead to issues with the guice internal cache // resulting in the UI not loading // " --java-options -Djdk.module.illegalAccess=deny" + diff --git a/docker/1.0.18-complete.patch b/docker/1.0.18-complete.patch new file mode 100644 index 00000000..c45167ac --- /dev/null +++ b/docker/1.0.18-complete.patch @@ -0,0 +1,794 @@ +diff --git a/README.md b/README.md +index 5c439f9a..e69de29b 100644 +--- a/README.md ++++ b/README.md +@@ -1,81 +0,0 @@ +-
+- Haveno logo +- +- ![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/haveno-dex/haveno/build.yml?branch=master) +- [![GitHub issues with bounty](https://img.shields.io/github/issues-search/haveno-dex/haveno?color=%23fef2c0&label=Issues%20with%20bounties&query=is%3Aopen+is%3Aissue+label%3A%F0%9F%92%B0bounty)](https://github.com/haveno-dex/haveno/issues?q=is%3Aopen+is%3Aissue+label%3A%F0%9F%92%B0bounty) +- [![Twitter Follow](https://img.shields.io/twitter/follow/HavenoDEX?style=social)](https://twitter.com/havenodex) +- [![Matrix rooms](https://img.shields.io/badge/Matrix%20room-%23haveno-blue)](https://matrix.to/#/#haveno:monero.social) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/haveno-dex/.github/blob/master/CODE_OF_CONDUCT.md) +-
+- +-## What is Haveno? +- +-Haveno (pronounced ha‧ve‧no) is an open source platform to exchange [Monero](https://getmonero.org) for fiat currencies like USD, EUR, and GBP or other cryptocurrencies like BTC, ETH, and BCH. +- +-Main features: +- +-- Communications are routed through **Tor**, to preserve your privacy. +- +-- Trades are **peer-to-peer**: trades on Haveno happen between people only, there is no central authority. +- +-- Trades are **non-custodial**: Haveno supports arbitration in case something goes wrong during the trade, but arbitrators never have access to your funds. +- +-- There is **No token**, because it's not needed. Transactions between traders are secured by non-custodial multisignature transactions on the Monero network. +- +-See the [FAQ on our website](https://haveno.exchange/faq/) for more information. +- +-## Installing Haveno +- +-Haveno can be installed on Linux, macOS, and Windows by using a third party installer and network. +- +-> [!note] +-> The official Haveno repository does not support making real trades directly. +-> +-> To make real trades with Haveno, first find a third party network, and then use their installer or build their repository. We do not endorse any networks at this time. +- +-A test network is also available for users to make test trades using Monero's stagenet. See the [instructions](https://github.com/haveno-dex/haveno/blob/master/docs/installing.md) to build Haveno and connect to the test network. +- +-Alternatively, you can [create your own mainnet network](create-mainnet.md). +- +-Note that Haveno is being actively developed. If you find issues or bugs, please let us know. +- +-## Main repositories +- +-- **[haveno](https://github.com/haveno-dex/haveno)** - This repository. The core of Haveno. +-- **[haveno-ts](https://github.com/haveno-dex/haveno-ts)** - TypeScript library for using Haveno. +-- **[haveno-ui](https://github.com/haveno-dex/haveno-ui)** - A new user interface (WIP). +-- **[haveno-meta](https://github.com/haveno-dex/haveno-meta)** - For project-wide discussions and proposals. +- +-If you wish to help, take a look at the repositories above and look for open issues. We run a bounty program to incentivize development. See [Bounties](#bounties). +- +-## Keep in touch and help out! +- +-Haveno is a community-driven project. For it to be successful it's fundamental to have the support and help of the community. Join the community rooms on our Matrix server: +- +-- General discussions: **Haveno** ([#haveno:monero.social](https://matrix.to/#/#haveno:monero.social)) relayed on IRC/Libera (`#haveno`) +-- Development discussions: **Haveno Development** ([#haveno-development:monero.social](https://matrix.to/#/#haveno-development:monero.social)) relayed on IRC/Libera (`#haveno-development`) +- +-Email: contact@haveno.exchange +-Website: [haveno.exchange](https://haveno.exchange) +- +-## Contributing to Haveno +- +-See the [developer guide](docs/developer-guide.md) to get started developing for Haveno. +- +-See [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) for our styling guides. +- +-If you are not able to contribute code and want to contribute development resources, [donations](#support) fund development bounties. +- +-## Bounties +- +-To incentivize development and reward contributors, we adopt a simple bounty system. Contributors may be awarded bounties after completing a task (resolving an issue). Take a look at the [issues labeled '💰bounty'](https://github.com/haveno-dex/haveno/issues?q=is%3Aopen+is%3Aissue+label%3A%F0%9F%92%B0bounty) in the main `haveno` repository. [Details and conditions for receiving a bounty](docs/bounties.md). +- +-## Support and sponsorships +- +-To bring Haveno to life, we need resources. If you have the possibility, please consider [becoming a sponsor](https://haveno.exchange/sponsors/) or donating to the project: +- +-

+- Donate Monero
+- 42sjokkT9FmiWPqVzrWPFE5NCJXwt96bkBozHf4vgLR9hXyJDqKHEHKVscAARuD7in5wV1meEcSTJTanCTDzidTe2cFXS1F +-

+- +-If you are using a wallet that supports OpenAlias (like the 'official' CLI and GUI wallets), you can simply put `fund@haveno.exchange` as the "receiver" address. +diff --git a/build.gradle b/build.gradle +index c8a80a90..e9f54053 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -787,6 +787,8 @@ configure(project(':statsnode')) { + } + + configure(project(':daemon')) { ++ apply plugin: 'com.github.johnrengelman.shadow' ++ + mainClassName = 'haveno.daemon.app.HavenoDaemonMain' + + dependencies { +diff --git a/common/src/main/java/haveno/common/app/Version.java b/common/src/main/java/haveno/common/app/Version.java +index d39016dc..37158383 100644 +--- a/common/src/main/java/haveno/common/app/Version.java ++++ b/common/src/main/java/haveno/common/app/Version.java +@@ -80,7 +80,7 @@ public class Version { + + // The version no. for the objects sent over the network. A change will break the serialization of old objects. + // If objects are used for both network and database the network version is applied. +- public static final String P2P_NETWORK_VERSION = "A"; ++ public static final String P2P_NETWORK_VERSION = System.getenv().getOrDefault("P2P_NETWORK_VERSION", "X");; + + // The version no. of the serialized data stored to disc. A change will break the serialization of old objects. + // VERSION = 0.5.0 -> LOCAL_DB_VERSION = 1 +diff --git a/core/src/main/java/haveno/core/alert/AlertManager.java b/core/src/main/java/haveno/core/alert/AlertManager.java +index a54f45c4..372641ad 100644 +--- a/core/src/main/java/haveno/core/alert/AlertManager.java ++++ b/core/src/main/java/haveno/core/alert/AlertManager.java +@@ -101,15 +101,12 @@ public class AlertManager { + switch (Config.baseCurrencyNetwork()) { + case XMR_LOCAL: + return List.of( +- "027a381b5333a56e1cc3d90d3a7d07f26509adf7029ed06fc997c656621f8da1ee", +- "024baabdba90e7cc0dc4626ef73ea9d722ea7085d1104491da8c76f28187513492"); ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + case XMR_STAGENET: + return List.of( +- "036d8a1dfcb406886037d2381da006358722823e1940acc2598c844bbc0fd1026f", +- "026c581ad773d987e6bd10785ac7f7e0e64864aedeb8bce5af37046de812a37854", +- "025b058c9f2c60d839669dbfa5578cf5a8117d60e6b70e2f0946f8a691273c6a36"); ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + case XMR_MAINNET: +- return List.of(); ++ return List.of("0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + default: + throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); + } +diff --git a/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java b/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java +index fd6abac5..bd93565c 100644 +--- a/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java ++++ b/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java +@@ -99,16 +99,11 @@ public class PrivateNotificationManager implements MessageListener { + if (useDevPrivilegeKeys) return List.of(DevEnv.DEV_PRIVILEGE_PUB_KEY); + switch (Config.baseCurrencyNetwork()) { + case XMR_LOCAL: +- return List.of( +- "027a381b5333a56e1cc3d90d3a7d07f26509adf7029ed06fc997c656621f8da1ee", +- "024baabdba90e7cc0dc4626ef73ea9d722ea7085d1104491da8c76f28187513492"); ++ return List.of("023c8fdea9ff2d03daef54337907e70a7b0e20084a75fcc3ad2f0c28d8b691dea1"); + case XMR_STAGENET: +- return List.of( +- "02ba7c5de295adfe57b60029f3637a2c6b1d0e969a8aaefb9e0ddc3a7963f26925", +- "026c581ad773d987e6bd10785ac7f7e0e64864aedeb8bce5af37046de812a37854", +- "025b058c9f2c60d839669dbfa5578cf5a8117d60e6b70e2f0946f8a691273c6a36"); ++ return List.of("023c8fdea9ff2d03daef54337907e70a7b0e20084a75fcc3ad2f0c28d8b691dea1"); + case XMR_MAINNET: +- return List.of(); ++ return List.of("023c8fdea9ff2d03daef54337907e70a7b0e20084a75fcc3ad2f0c28d8b691dea1"); + default: + throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); + } +diff --git a/core/src/main/java/haveno/core/app/HavenoExecutable.java b/core/src/main/java/haveno/core/app/HavenoExecutable.java +index 5f2d1462..a665b03e 100644 +--- a/core/src/main/java/haveno/core/app/HavenoExecutable.java ++++ b/core/src/main/java/haveno/core/app/HavenoExecutable.java +@@ -84,7 +84,7 @@ public abstract class HavenoExecutable implements GracefulShutDownHandler, Haven + + // TODO: regular expression is used to parse application name for the flatpak manifest, a more stable approach would be nice + // Don't edit the next line unless you're only editing in between the quotes. +- public static final String DEFAULT_APP_NAME = "Haveno"; ++ public static final String DEFAULT_APP_NAME = "Haveno App"; + + public static final int EXIT_SUCCESS = 0; + public static final int EXIT_FAILURE = 1; +diff --git a/core/src/main/java/haveno/core/filter/FilterManager.java b/core/src/main/java/haveno/core/filter/FilterManager.java +index cb7e0e9b..a92caf52 100644 +--- a/core/src/main/java/haveno/core/filter/FilterManager.java ++++ b/core/src/main/java/haveno/core/filter/FilterManager.java +@@ -116,9 +116,7 @@ public class FilterManager { + + publicKeys = useDevPrivilegeKeys ? + Collections.singletonList(DevEnv.DEV_PRIVILEGE_PUB_KEY) : +- List.of("0358d47858acdc41910325fce266571540681ef83a0d6fedce312bef9810793a27", +- "029340c3e7d4bb0f9e651b5f590b434fecb6175aeaa57145c7804ff05d210e534f", +- "034dc7530bf66ffd9580aa98031ea9a18ac2d269f7c56c0e71eca06105b9ed69f9"); ++ List.of("03d62d14438adbe7aea688ade1f73933c6f0a705f238c02c5b54b83dd1e4fca225"); + + banFilter.setBannedNodePredicate(this::isNodeAddressBannedFromNetwork); + } +diff --git a/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java b/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java +index 50be387c..406e8986 100644 +--- a/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java ++++ b/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java +@@ -200,7 +200,7 @@ public final class ArbitrationManager extends DisputeManager { + switch (Config.baseCurrencyNetwork()) { + case XMR_LOCAL: + return List.of( +- "027a381b5333a56e1cc3d90d3a7d07f26509adf7029ed06fc997c656621f8da1ee", +- "024baabdba90e7cc0dc4626ef73ea9d722ea7085d1104491da8c76f28187513492", +- "026eeec3c119dd6d537249d74e5752a642dd2c3cc5b6a9b44588eb58344f29b519"); ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + case XMR_STAGENET: + return List.of( +- "03bb559ce207a4deb51d4c705076c95b85ad8581d35936b2a422dcb504eaf7cdb0", +- "026c581ad773d987e6bd10785ac7f7e0e64864aedeb8bce5af37046de812a37854", +- "025b058c9f2c60d839669dbfa5578cf5a8117d60e6b70e2f0946f8a691273c6a36", +- "036c7d3f4bf05ef39b9d1b0a5d453a18210de36220c3d83cd16e59bd6132b037ad", +- "030f7122a10ff73cd73808bddace95be77a94189c8a0eb24586265e125ce5ce6b9", +- "03aa23e062afa0dda465f46986f8aa8d0374ad3e3f256141b05681dcb1e39c3859", +- "02d3beb1293ca2ca14e6d42ca8bd18089a62aac62fd6bb23923ee6ead46ac60fba", +- "03fa0f38f27bdd324db6f933f7e57851dadf3b911e4db6b19dd0950492c4525a31", +- "02a1a458df5acf4ab08fdca748e28f33a955a30854c8c1a831ee733dca7f0d2fcd", +- "0374dd70f3fa6e47ec5ab97932e1cec6233e98e6ae3129036b17118650c44fd3de"); ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + case XMR_MAINNET: +- return List.of(); ++ return List.of( ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78" ++ ); + default: + throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); + } +diff --git a/core/src/main/java/haveno/core/trade/HavenoUtils.java b/core/src/main/java/haveno/core/trade/HavenoUtils.java +index d238d788..2a4f9159 100644 +--- a/core/src/main/java/haveno/core/trade/HavenoUtils.java ++++ b/core/src/main/java/haveno/core/trade/HavenoUtils.java +@@ -85,17 +85,17 @@ import org.bitcoinj.core.Coin; + public class HavenoUtils { + + // configure release date +- private static final String RELEASE_DATE = "25-05-2024 00:00:00"; // optionally set to release date of the network in format dd-mm-yyyy to impose temporary limits, etc. e.g. "25-05-2024 00:00:00" ++ private static final String RELEASE_DATE = "25-11-2024 00:00:00"; // optionally set to release date of the network in format dd-mm-yyyy to impose temporary limits, etc. e.g. "25-05-2024 00:00:00" + public static final int RELEASE_LIMIT_DAYS = 60; // number of days to limit sell offers to max buy limit for new accounts + public static final int WARN_ON_OFFER_EXCEEDS_UNSIGNED_BUY_LIMIT_DAYS = 182; // number of days to warn if sell offer exceeds unsigned buy limit + public static final int ARBITRATOR_ACK_TIMEOUT_SECONDS = 60; + + // configure fees +- public static final boolean ARBITRATOR_ASSIGNS_TRADE_FEE_ADDRESS = true; +- public static final double PENALTY_FEE_PCT = 0.02; // 2% ++ public static final boolean ARBITRATOR_ASSIGNS_TRADE_FEE_ADDRESS = false; + public static final double MAKER_FEE_PCT = 0.0015; // 0.15% +- public static final double TAKER_FEE_PCT = 0.0075; // 0.75% +- public static final double MAKER_FEE_FOR_TAKER_WITHOUT_DEPOSIT_PCT = MAKER_FEE_PCT + TAKER_FEE_PCT; // customize maker's fee when no deposit or fee from taker ++ public static final double TAKER_FEE_PCT = 0.0015; // 0.15% ++ public static final double PENALTY_FEE_PCT = 0.02; // 2% ++ public static final double MAKER_FEE_FOR_TAKER_WITHOUT_DEPOSIT_PCT = MAKER_FEE_PCT + TAKER_FEE_PCT; + + // other configuration + public static final long LOG_POLL_ERROR_PERIOD_MS = 1000 * 60 * 4; // log poll errors up to once every 4 minutes +@@ -464,7 +464,7 @@ public class HavenoUtils { + case XMR_STAGENET: + return "5B11hTJdG2XDNwjdKGLRxwSLwDhkbGg7C7UEAZBxjE6FbCeRMjudrpNACmDNtWPiSnNfjDQf39QRjdtdgoL69txv81qc2Mc"; + case XMR_MAINNET: +- throw new RuntimeException("Mainnet fee address not implemented"); ++ return "84R8DfswAtT5eZ97ioKFjJYvd6HKuSdZTKyZYYJr77oVWcAiJDJgTAc3piVm2prKmeAgf92iSr7jkcjmmHNFLWGEDGUDafc"; + default: + throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); + } +diff --git a/core/src/main/resources/xmr_mainnet.seednodes b/core/src/main/resources/xmr_mainnet.seednodes +index 3f81fa04..aacaca7e 100644 +--- a/core/src/main/resources/xmr_mainnet.seednodes ++++ b/core/src/main/resources/xmr_mainnet.seednodes +@@ -1,2 +1,4 @@ + # nodeaddress.onion:port [(@owner,@backup)] +-placeholder.onion:8000 (@placeholder) +\ No newline at end of file ++5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001 (@xox) ++dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002 (@xox) ++ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003 (@xox) +\ No newline at end of file +diff --git a/desktop/package/package.gradle b/desktop/package/package.gradle +index 65e09d55..de2c99e7 100644 +--- a/desktop/package/package.gradle ++++ b/desktop/package/package.gradle +@@ -278,7 +278,7 @@ task packageInstallers { + " --java-options --add-opens=java.base/java.lang.reflect=ALL-UNNAMED" + + " --java-options --add-opens=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED" + + " --java-options -Djava.net.preferIPv4Stack=true" + +- " --arguments --baseCurrencyNetwork=XMR_STAGENET" ++ " --arguments --baseCurrencyNetwork=XMR_MAINNET" + // Warning: this will cause guice reflection exceptions and lead to issues with the guice internal cache + // resulting in the UI not loading + // " --java-options -Djdk.module.illegalAccess=deny" + +diff --git a/docker/Dockerfile.core b/docker/Dockerfile.core +new file mode 100755 +index 00000000..bee1bb1c +--- /dev/null ++++ b/docker/Dockerfile.core +@@ -0,0 +1,38 @@ ++FROM openjdk:21-jdk-bullseye ++ ++RUN set -ex && \ ++ apt update && \ ++ apt --no-install-recommends --yes install \ ++ make \ ++ git \ ++ tor ++ ++RUN set -ex && adduser --system --group --disabled-password haveno && \ ++ mkdir -p /home/haveno && \ ++ chown -R haveno:haveno /home/haveno ++ ++USER haveno ++ ++WORKDIR /home/haveno ++ ++RUN echo 'Cache3' ++ ++RUN set -ex && git clone https://git.haveno.com/haveno/haveno.git ++ ++WORKDIR /home/haveno/haveno ++ ++COPY 1.0.18-complete.patch /home/haveno/haveno/1.0.18-complete.patch ++ ++RUN git checkout tags/1.0.18 && \ ++ git reset --hard 1.0.18 && \ ++ git apply 1.0.18-complete.patch ++ ++ ++RUN make clean && make skip-tests ++ ++WORKDIR /home/haveno/haveno ++ ++ENTRYPOINT [ "./haveno-seednode" ] ++ ++## CMDs are conditional based on type ++CMD ["--baseCurrencyNetwork=XMR_MAINNET", "--useLocalhostForP2P=false", "--useDevPrivilegeKeys=false", "--nodePort=2002"] +diff --git a/docker/build_then_publish_all.sh b/docker/build_then_publish_all.sh +new file mode 100644 +index 00000000..e69de29b +diff --git a/docker/config/nodes/haveno_seednode_2001/hostname b/docker/config/nodes/haveno_seednode_2001/hostname +new file mode 100755 +index 00000000..fff219c8 +--- /dev/null ++++ b/docker/config/nodes/haveno_seednode_2001/hostname +@@ -0,0 +1 @@ ++5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion +diff --git a/docker/config/nodes/haveno_seednode_2001/hs_ed25519_public_key b/docker/config/nodes/haveno_seednode_2001/hs_ed25519_public_key +new file mode 100755 +index 0000000000000000000000000000000000000000..622eb855ac4d65892c59e70d03cfcf70f17d038a +GIT binary patch +literal 64 +zcmV-G0Kfk|Js@RdGBq_ZId(BEaCKsAX=6Gdba`-PFd#iW0002$JQanMD&fg-4E95f +Wcpo;j;up%p|4`czr=1Ryegd+wXBcMy + +literal 0 +HcmV?d00001 + +diff --git a/docker/config/nodes/haveno_seednode_2001/hs_ed25519_secret_key b/docker/config/nodes/haveno_seednode_2001/hs_ed25519_secret_key +new file mode 100755 +index 0000000000000000000000000000000000000000..4a8ce9291914a3a540e054fd5342da9fd9c15e22 +GIT binary patch +literal 96 +zcmV-m0H6OoJs@RdGBq_ZId(BEb7f<4Wpp|qba`-PFd#iW00013!WD+FnYMllinWAq +zy2eLprwa_T^V|X&>cLb4=a5rWmwhRtvz;;=Ce#wvslSlv-mEknEcz;Ww;o^ptRg>1` +CBPja- + +literal 0 +HcmV?d00001 + +diff --git a/docker/daemon/.env b/docker/daemon/.env +new file mode 100644 +index 00000000..931de414 +--- /dev/null ++++ b/docker/daemon/.env +@@ -0,0 +1,3 @@ ++NETWORK_VERSION_TAG=1.0.18 ++BASE_NETWORK=STAGENET ++P2P_NETWORK_VERSION="X" +\ No newline at end of file +diff --git a/docker/daemon/docker-compose.yml b/docker/daemon/docker-compose.yml +new file mode 100644 +index 00000000..72a17d33 +--- /dev/null ++++ b/docker/daemon/docker-compose.yml +@@ -0,0 +1,28 @@ ++version: '3' ++ ++services: ++ haveno-daemon: ++ image: haveno-core ++ build: ++ context: ../ ++ ports: ++ - "127.0.0.1:3201:3201" ++ environment: ++ - P2P_NETWORK_VERSION=X ++ - NETWORK_VERSION_TAG=${NETWORK_VERSION_TAG} ++ - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} ++ - USE_LOCALHOST_FOR_P2P=false ++ - USE_DEV_PRIVILEGE_KEYS=false ++ - NODE_PORT=9999 ++ - APP_NAME=haveno-XMR_${BASE_NETWORK}_DAEMON ++ - EXPORT_SHADOW=yes ++ - EXPORT_SHADOW_PATH=daemon/build/libs/daemon-all.sh # Leave this blank in most cases ++ entrypoint: ["./haveno-daemon"] ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--useLocalhostForP2P=false" ++ - "--useDevPrivilegeKeys=false" ++ - "--nodePort=9999" ++ - "--appName=XMR_${BASE_NETWORK}_DAEMON" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" ++ restart: unless-stopped +diff --git a/docker/initial_setup.sh b/docker/initial_setup.sh +new file mode 100644 +index 00000000..2241009b +--- /dev/null ++++ b/docker/initial_setup.sh +@@ -0,0 +1,13 @@ ++## check if sudo frst other wise exist ++ ++## setup docker ++apt-get update -y ++apt-get install docker.io docker-compose tor make -y ++ ++cp torrc /etc/tor/torrc ++cp -r config/nodes/* /var/lib/tor/ ++ ++## build base files ++cd .. && make skip-tests ++ ++cd docker/seednode && docker compose up --build +diff --git a/docker/seednode/.env b/docker/seednode/.env +new file mode 100644 +index 00000000..586a660c +--- /dev/null ++++ b/docker/seednode/.env +@@ -0,0 +1,2 @@ ++BASE_NETWORK=STAGENET ++P2P_NETWORK_VERSION="X" +\ No newline at end of file +diff --git a/docker/seednode/docker-compose.yml b/docker/seednode/docker-compose.yml +new file mode 100644 +index 00000000..0da5abb7 +--- /dev/null ++++ b/docker/seednode/docker-compose.yml +@@ -0,0 +1,79 @@ ++version: '3.8' ++ ++services: ++ haveno-core: ++ image: haveno-core ++ build: ++ context: ../ ++ dockerfile: Dockerfile.core ++ # No ports, this one just builds the image ++ entrypoint: ["true"] # No need to run ++ ++ haveno-seednode_2001: ++ image: haveno-core ++ depends_on: ++ - haveno-core ++ ports: ++ - "127.0.0.1:2001:2001" ++ environment: ++ - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} ++ - USE_LOCALHOST_FOR_P2P=false ++ - USE_DEV_PRIVILEGE_KEYS=false ++ - NODE_PORT=2001 ++ - APP_NAME=haveno-XMR_${BASE_NETWORK}_Seed_2001 ++ entrypoint: ["./haveno-seednode"] ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--useLocalhostForP2P=false" ++ - "--useDevPrivilegeKeys=false" ++ - "--nodePort=2001" ++ - "--appName=haveno-XMR_${BASE_NETWORK}_Seed_2001" ++ - "--hiddenServiceAddress=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" ++ restart: unless-stopped ++ ++ haveno-seednode_2002: ++ image: haveno-core ++ depends_on: ++ - haveno-core ++ ports: ++ - "127.0.0.1:2002:2002" ++ environment: ++ - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} ++ - USE_LOCALHOST_FOR_P2P=false ++ - USE_DEV_PRIVILEGE_KEYS=false ++ - NODE_PORT=2002 ++ - APP_NAME=haveno-XMR_${BASE_NETWORK}_Seed_2002 ++ entrypoint: ["./haveno-seednode"] ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--useLocalhostForP2P=false" ++ - "--useDevPrivilegeKeys=false" ++ - "--nodePort=2002" ++ - "--appName=haveno-XMR_${BASE_NETWORK}_Seed_2002" ++ - "--hiddenServiceAddress=dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" ++ restart: unless-stopped ++ ++ haveno-seednode_2003: ++ image: haveno-core ++ depends_on: ++ - haveno-core ++ ports: ++ - "127.0.0.1:2003:2003" ++ environment: ++ - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} ++ - USE_LOCALHOST_FOR_P2P=false ++ - USE_DEV_PRIVILEGE_KEYS=false ++ - NODE_PORT=2003 ++ - APP_NAME=haveno-XMR_${BASE_NETWORK}_Seed_2003 ++ entrypoint: ["./haveno-seednode"] ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--useLocalhostForP2P=false" ++ - "--useDevPrivilegeKeys=false" ++ - "--nodePort=2003" ++ - "--appName=haveno-XMR_${BASE_NETWORK}_Seed_2003" ++ - "--hiddenServiceAddress=ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" ++ restart: unless-stopped +\ No newline at end of file +diff --git a/docker/statsnode/.env b/docker/statsnode/.env +new file mode 100644 +index 00000000..586a660c +--- /dev/null ++++ b/docker/statsnode/.env +@@ -0,0 +1,2 @@ ++BASE_NETWORK=STAGENET ++P2P_NETWORK_VERSION="X" +\ No newline at end of file +diff --git a/docker/statsnode/docker-compose.yml b/docker/statsnode/docker-compose.yml +new file mode 100644 +index 00000000..5dfa7e8a +--- /dev/null ++++ b/docker/statsnode/docker-compose.yml +@@ -0,0 +1,15 @@ ++version: '3' ++ ++services: ++ haveno-statsnode: ++ image: haveno-core ++ build: ++ context: ../ ++ dockerfile: Dockerfile.core ++ entrypoint: ["./haveno-statsnode"] ++ evironment: ++ - P2P_NETWORK_VERSION=X ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--appName=XMR_${BASE_NETWORK}_STATSNODE" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" +diff --git a/docker/torrc b/docker/torrc +new file mode 100755 +index 00000000..8ddaf97e +--- /dev/null ++++ b/docker/torrc +@@ -0,0 +1,109 @@ ++## Configuration file for Haveno Seednode ++## ++## Tor opens a socks proxy on port 9050 by default -- even if you don't ++## configure one below. Set "SocksPort 0" if you plan to run Tor only ++## as a relay, and not make any local application connections yourself. ++#SocksPort 9050 # Default: Bind to localhost:9050 for local connections. ++# ### SocksPort flag: OnionTrafficOnly ### ++## Tell the tor client to only connect to .onion addresses in response to SOCKS5 requests on this connection. ++## This is equivalent to NoDNSRequest, NoIPv4Traffic, NoIPv6Traffic. ++# ### SocksPort flag: ExtendedErrors ### ++## Return extended error code in the SOCKS reply. So far, the possible errors are: ++# X'F0' Onion Service Descriptor Can Not be Found ++# X'F1' Onion Service Descriptor Is Invalid ++# X'F2' Onion Service Introduction Failed ++# X'F3' Onion Service Rendezvous Failed ++# X'F4' Onion Service Missing Client Authorization ++# X'F5' Onion Service Wrong Client Authorization ++# X'F6' Onion Service Invalid Address ++# X'F7' Onion Service Introduction Timed Out ++SocksPort 9050 OnionTrafficOnly ExtendedErrors ++ ++## Entry policies to allow/deny SOCKS requests based on IP address. ++## First entry that matches wins. If no SocksPolicy is set, we accept ++## all (and only) requests that reach a SocksPort. Untrusted users who ++## can access your SocksPort may be able to learn about the connections ++## you make. ++SocksPolicy accept 127.0.0.1 ++SocksPolicy accept6 [::1] ++SocksPolicy reject * ++ ++## Tor will reject application connections that use unsafe variants of the socks protocol ++## — ones that only provide an IP address, meaning the application is doing a DNS resolve first. ++## Specifically, these are socks4 and socks5 when not doing remote DNS. (Default: 0) ++#SafeSocks 1 ++ ++## Tor will make a notice-level log entry for each connection to the Socks port indicating ++## whether the request used a safe socks protocol or an unsafe one (see above entry on SafeSocks). ++## This helps to determine whether an application using Tor is possibly leaking DNS requests. (Default: 0) ++TestSocks 1 ++ ++## Logs go to stdout at level "notice" unless redirected by something ++## else, like one of the below lines. You can have as many Log lines as ++## you want. ++## ++## We advise using "notice" in most cases, since anything more verbose ++## may provide sensitive information to an attacker who obtains the logs. ++## ++## Send all messages of level 'notice' or higher to /var/log/tor/notices.log ++#Log notice file /var/log/tor/notices.log ++## Send every possible message to /var/log/tor/debug.log ++#Log debug file /var/log/tor/debug.log ++## Use the system log instead of Tor's logfiles (This is default) ++#Log notice syslog ++## To send all messages to stderr: ++#Log debug stderr ++ ++# Try to write to disk less frequently than we would otherwise. This is useful when running on flash memory. ++AvoidDiskWrites 1 ++ ++HiddenServiceStatistics 0 ++ ++## Compute the hash of a password with "tor --hash-password password". ++HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C ++#CookieAuthentication 0 # (Default: 1) ++ ++## MetricsPort provides an interface to the underlying Tor relay metrics. ++## Exposing publicly is dangerous, set a very strict access policy. ++## Retrieve the metrics with: curl http://127.0.0.1:9035/metrics ++MetricsPort 127.0.0.1:9035 ++MetricsPortPolicy accept 127.0.0.1 ++MetricsPortPolicy accept [::1] ++ ++HiddenServiceDir /var/lib/tor/haveno_seednode_2001 ++HiddenServicePort 2001 127.0.0.1:2001 ++HiddenServicePort 2001 [::1]:2001 ++HiddenServiceEnableIntroDoSDefense 1 ++HiddenServicePoWDefensesEnabled 1 ++HiddenServicePoWQueueRate 50 # (Default: 250) ++HiddenServicePoWQueueBurst 250 # (Default: 2500) ++HiddenServiceMaxStreams 25 ++ ++ ++HiddenServiceDir /var/lib/tor/haveno_seednode_2002 ++HiddenServicePort 2002 127.0.0.1:2002 ++HiddenServicePort 2002 [::1]:2002 ++HiddenServiceEnableIntroDoSDefense 1 ++#HiddenServiceEnableIntroDoSRatePerSec 25 # (Default: 25) ++#HiddenServiceEnableIntroDoSBurstPerSec 200 # (Default: 200) ++HiddenServicePoWDefensesEnabled 1 ++HiddenServicePoWQueueRate 50 # (Default: 250) ++HiddenServicePoWQueueBurst 250 # (Default: 2500) ++HiddenServiceMaxStreams 25 ++#HiddenServiceMaxStreamsCloseCircuit 1 ++ ++ ++HiddenServiceDir /var/lib/tor/haveno_seednode_2003 ++HiddenServicePort 2003 127.0.0.1:2003 ++HiddenServicePort 2003 [::1]:2003 ++HiddenServiceEnableIntroDoSDefense 1 ++#HiddenServiceEnableIntroDoSRatePerSec 25 # (Default: 25) ++#HiddenServiceEnableIntroDoSBurstPerSec 200 # (Default: 200) ++#HiddenServiceNumIntroductionPoints 3 # (Default: 3) ++HiddenServicePoWDefensesEnabled 1 ++HiddenServicePoWQueueRate 50 # (Default: 250) ++HiddenServicePoWQueueBurst 250 # (Default: 2500) ++HiddenServiceMaxStreams 25 ++#HiddenServiceMaxStreamsCloseCircuit 1 ++ ++LongLivedPorts 2001,2002,2003 +\ No newline at end of file +diff --git a/gpg_keys/woodser.asc b/gpg_keys/woodser.asc +deleted file mode 100644 +index 2dcc3f3a..00000000 +--- a/gpg_keys/woodser.asc ++++ /dev/null +@@ -1,53 +0,0 @@ +------BEGIN PGP PUBLIC KEY BLOCK----- +-Comment: GPGTools - https://gpgtools.org +- +-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 +-mqKdaDoa +-=bRX1 +------END PGP PUBLIC KEY BLOCK----- diff --git a/docker/Dockerfile.core b/docker/Dockerfile.core new file mode 100755 index 00000000..cc5aa15c --- /dev/null +++ b/docker/Dockerfile.core @@ -0,0 +1,36 @@ +FROM openjdk:21-jdk-bullseye + +RUN set -ex && \ + apt update && \ + apt --no-install-recommends --yes install \ + make \ + git \ + tor + +RUN set -ex && adduser --system --group --disabled-password haveno && \ + mkdir -p /home/haveno && \ + chown -R haveno:haveno /home/haveno + +USER haveno + +WORKDIR /home/haveno + +RUN set -ex && git clone https://git.haveno.com/haveno/haveno.git + +WORKDIR /home/haveno/haveno + +COPY 1.0.18-complete.patch /home/haveno/haveno/1.0.18-complete.patch + +RUN git checkout tags/1.0.18 && \ + git reset --hard 1.0.18 && \ + git apply 1.0.18-complete.patch + + +RUN make clean && make skip-tests + +WORKDIR /home/haveno/haveno + +ENTRYPOINT [ "./haveno-seednode" ] + +## CMDs are conditional based on type +CMD ["--baseCurrencyNetwork=XMR_MAINNET", "--useLocalhostForP2P=false", "--useDevPrivilegeKeys=false", "--nodePort=2002"] diff --git a/docker/build_then_publish_all.sh b/docker/build_then_publish_all.sh new file mode 100644 index 00000000..e69de29b diff --git a/docker/config/nodes/haveno_seednode_2001/hostname b/docker/config/nodes/haveno_seednode_2001/hostname new file mode 100755 index 00000000..fff219c8 --- /dev/null +++ b/docker/config/nodes/haveno_seednode_2001/hostname @@ -0,0 +1 @@ +5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion diff --git a/docker/config/nodes/haveno_seednode_2001/hs_ed25519_public_key b/docker/config/nodes/haveno_seednode_2001/hs_ed25519_public_key new file mode 100755 index 0000000000000000000000000000000000000000..622eb855ac4d65892c59e70d03cfcf70f17d038a GIT binary patch literal 64 zcmV-G0Kfk|Js@RdGBq_ZId(BEaCKsAX=6Gdba`-PFd#iW0002$JQanMD&fg-4E95f Wcpo;j;up%p|4`czr=1Ryegd+wXBcMy literal 0 HcmV?d00001 diff --git a/docker/config/nodes/haveno_seednode_2001/hs_ed25519_secret_key b/docker/config/nodes/haveno_seednode_2001/hs_ed25519_secret_key new file mode 100755 index 0000000000000000000000000000000000000000..4a8ce9291914a3a540e054fd5342da9fd9c15e22 GIT binary patch literal 96 zcmV-m0H6OoJs@RdGBq_ZId(BEb7f<4Wpp|qba`-PFd#iW00013!WD+FnYMllinWAq zy2eLprwa_T^V|X&>cLb4=a5rWmwhRtvz;;=Ce#wvslSlv-mEknEcz;Ww;o^ptRg>1` CBPja- literal 0 HcmV?d00001 diff --git a/docker/daemon/.env b/docker/daemon/.env new file mode 100644 index 00000000..931de414 --- /dev/null +++ b/docker/daemon/.env @@ -0,0 +1,3 @@ +NETWORK_VERSION_TAG=1.0.18 +BASE_NETWORK=STAGENET +P2P_NETWORK_VERSION="X" \ No newline at end of file diff --git a/docker/daemon/docker-compose.yml b/docker/daemon/docker-compose.yml new file mode 100644 index 00000000..72a17d33 --- /dev/null +++ b/docker/daemon/docker-compose.yml @@ -0,0 +1,28 @@ +version: '3' + +services: + haveno-daemon: + image: haveno-core + build: + context: ../ + ports: + - "127.0.0.1:3201:3201" + environment: + - P2P_NETWORK_VERSION=X + - NETWORK_VERSION_TAG=${NETWORK_VERSION_TAG} + - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} + - USE_LOCALHOST_FOR_P2P=false + - USE_DEV_PRIVILEGE_KEYS=false + - NODE_PORT=9999 + - APP_NAME=haveno-XMR_${BASE_NETWORK}_DAEMON + - EXPORT_SHADOW=yes + - EXPORT_SHADOW_PATH=daemon/build/libs/daemon-all.sh # Leave this blank in most cases + entrypoint: ["./haveno-daemon"] + command: + - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" + - "--useLocalhostForP2P=false" + - "--useDevPrivilegeKeys=false" + - "--nodePort=9999" + - "--appName=XMR_${BASE_NETWORK}_DAEMON" + - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" + restart: unless-stopped diff --git a/docker/initial_setup.sh b/docker/initial_setup.sh new file mode 100644 index 00000000..2241009b --- /dev/null +++ b/docker/initial_setup.sh @@ -0,0 +1,13 @@ +## check if sudo frst other wise exist + +## setup docker +apt-get update -y +apt-get install docker.io docker-compose tor make -y + +cp torrc /etc/tor/torrc +cp -r config/nodes/* /var/lib/tor/ + +## build base files +cd .. && make skip-tests + +cd docker/seednode && docker compose up --build diff --git a/docker/seednode/.env b/docker/seednode/.env new file mode 100644 index 00000000..586a660c --- /dev/null +++ b/docker/seednode/.env @@ -0,0 +1,2 @@ +BASE_NETWORK=STAGENET +P2P_NETWORK_VERSION="X" \ No newline at end of file diff --git a/docker/seednode/docker-compose.yml b/docker/seednode/docker-compose.yml new file mode 100644 index 00000000..0da5abb7 --- /dev/null +++ b/docker/seednode/docker-compose.yml @@ -0,0 +1,79 @@ +version: '3.8' + +services: + haveno-core: + image: haveno-core + build: + context: ../ + dockerfile: Dockerfile.core + # No ports, this one just builds the image + entrypoint: ["true"] # No need to run + + haveno-seednode_2001: + image: haveno-core + depends_on: + - haveno-core + ports: + - "127.0.0.1:2001:2001" + environment: + - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} + - USE_LOCALHOST_FOR_P2P=false + - USE_DEV_PRIVILEGE_KEYS=false + - NODE_PORT=2001 + - APP_NAME=haveno-XMR_${BASE_NETWORK}_Seed_2001 + entrypoint: ["./haveno-seednode"] + command: + - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" + - "--useLocalhostForP2P=false" + - "--useDevPrivilegeKeys=false" + - "--nodePort=2001" + - "--appName=haveno-XMR_${BASE_NETWORK}_Seed_2001" + - "--hiddenServiceAddress=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion" + - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" + restart: unless-stopped + + haveno-seednode_2002: + image: haveno-core + depends_on: + - haveno-core + ports: + - "127.0.0.1:2002:2002" + environment: + - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} + - USE_LOCALHOST_FOR_P2P=false + - USE_DEV_PRIVILEGE_KEYS=false + - NODE_PORT=2002 + - APP_NAME=haveno-XMR_${BASE_NETWORK}_Seed_2002 + entrypoint: ["./haveno-seednode"] + command: + - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" + - "--useLocalhostForP2P=false" + - "--useDevPrivilegeKeys=false" + - "--nodePort=2002" + - "--appName=haveno-XMR_${BASE_NETWORK}_Seed_2002" + - "--hiddenServiceAddress=dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion" + - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" + restart: unless-stopped + + haveno-seednode_2003: + image: haveno-core + depends_on: + - haveno-core + ports: + - "127.0.0.1:2003:2003" + environment: + - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} + - USE_LOCALHOST_FOR_P2P=false + - USE_DEV_PRIVILEGE_KEYS=false + - NODE_PORT=2003 + - APP_NAME=haveno-XMR_${BASE_NETWORK}_Seed_2003 + entrypoint: ["./haveno-seednode"] + command: + - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" + - "--useLocalhostForP2P=false" + - "--useDevPrivilegeKeys=false" + - "--nodePort=2003" + - "--appName=haveno-XMR_${BASE_NETWORK}_Seed_2003" + - "--hiddenServiceAddress=ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion" + - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" + restart: unless-stopped \ No newline at end of file diff --git a/docker/statsnode/.env b/docker/statsnode/.env new file mode 100644 index 00000000..586a660c --- /dev/null +++ b/docker/statsnode/.env @@ -0,0 +1,2 @@ +BASE_NETWORK=STAGENET +P2P_NETWORK_VERSION="X" \ No newline at end of file diff --git a/docker/statsnode/docker-compose.yml b/docker/statsnode/docker-compose.yml new file mode 100644 index 00000000..5dfa7e8a --- /dev/null +++ b/docker/statsnode/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3' + +services: + haveno-statsnode: + image: haveno-core + build: + context: ../ + dockerfile: Dockerfile.core + entrypoint: ["./haveno-statsnode"] + evironment: + - P2P_NETWORK_VERSION=X + command: + - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" + - "--appName=XMR_${BASE_NETWORK}_STATSNODE" + - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" diff --git a/docker/torrc b/docker/torrc new file mode 100755 index 00000000..8ddaf97e --- /dev/null +++ b/docker/torrc @@ -0,0 +1,109 @@ +## Configuration file for Haveno Seednode +## +## Tor opens a socks proxy on port 9050 by default -- even if you don't +## configure one below. Set "SocksPort 0" if you plan to run Tor only +## as a relay, and not make any local application connections yourself. +#SocksPort 9050 # Default: Bind to localhost:9050 for local connections. +# ### SocksPort flag: OnionTrafficOnly ### +## Tell the tor client to only connect to .onion addresses in response to SOCKS5 requests on this connection. +## This is equivalent to NoDNSRequest, NoIPv4Traffic, NoIPv6Traffic. +# ### SocksPort flag: ExtendedErrors ### +## Return extended error code in the SOCKS reply. So far, the possible errors are: +# X'F0' Onion Service Descriptor Can Not be Found +# X'F1' Onion Service Descriptor Is Invalid +# X'F2' Onion Service Introduction Failed +# X'F3' Onion Service Rendezvous Failed +# X'F4' Onion Service Missing Client Authorization +# X'F5' Onion Service Wrong Client Authorization +# X'F6' Onion Service Invalid Address +# X'F7' Onion Service Introduction Timed Out +SocksPort 9050 OnionTrafficOnly ExtendedErrors + +## Entry policies to allow/deny SOCKS requests based on IP address. +## First entry that matches wins. If no SocksPolicy is set, we accept +## all (and only) requests that reach a SocksPort. Untrusted users who +## can access your SocksPort may be able to learn about the connections +## you make. +SocksPolicy accept 127.0.0.1 +SocksPolicy accept6 [::1] +SocksPolicy reject * + +## Tor will reject application connections that use unsafe variants of the socks protocol +## — ones that only provide an IP address, meaning the application is doing a DNS resolve first. +## Specifically, these are socks4 and socks5 when not doing remote DNS. (Default: 0) +#SafeSocks 1 + +## Tor will make a notice-level log entry for each connection to the Socks port indicating +## whether the request used a safe socks protocol or an unsafe one (see above entry on SafeSocks). +## This helps to determine whether an application using Tor is possibly leaking DNS requests. (Default: 0) +TestSocks 1 + +## Logs go to stdout at level "notice" unless redirected by something +## else, like one of the below lines. You can have as many Log lines as +## you want. +## +## We advise using "notice" in most cases, since anything more verbose +## may provide sensitive information to an attacker who obtains the logs. +## +## Send all messages of level 'notice' or higher to /var/log/tor/notices.log +#Log notice file /var/log/tor/notices.log +## Send every possible message to /var/log/tor/debug.log +#Log debug file /var/log/tor/debug.log +## Use the system log instead of Tor's logfiles (This is default) +#Log notice syslog +## To send all messages to stderr: +#Log debug stderr + +# Try to write to disk less frequently than we would otherwise. This is useful when running on flash memory. +AvoidDiskWrites 1 + +HiddenServiceStatistics 0 + +## Compute the hash of a password with "tor --hash-password password". +HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C +#CookieAuthentication 0 # (Default: 1) + +## MetricsPort provides an interface to the underlying Tor relay metrics. +## Exposing publicly is dangerous, set a very strict access policy. +## Retrieve the metrics with: curl http://127.0.0.1:9035/metrics +MetricsPort 127.0.0.1:9035 +MetricsPortPolicy accept 127.0.0.1 +MetricsPortPolicy accept [::1] + +HiddenServiceDir /var/lib/tor/haveno_seednode_2001 +HiddenServicePort 2001 127.0.0.1:2001 +HiddenServicePort 2001 [::1]:2001 +HiddenServiceEnableIntroDoSDefense 1 +HiddenServicePoWDefensesEnabled 1 +HiddenServicePoWQueueRate 50 # (Default: 250) +HiddenServicePoWQueueBurst 250 # (Default: 2500) +HiddenServiceMaxStreams 25 + + +HiddenServiceDir /var/lib/tor/haveno_seednode_2002 +HiddenServicePort 2002 127.0.0.1:2002 +HiddenServicePort 2002 [::1]:2002 +HiddenServiceEnableIntroDoSDefense 1 +#HiddenServiceEnableIntroDoSRatePerSec 25 # (Default: 25) +#HiddenServiceEnableIntroDoSBurstPerSec 200 # (Default: 200) +HiddenServicePoWDefensesEnabled 1 +HiddenServicePoWQueueRate 50 # (Default: 250) +HiddenServicePoWQueueBurst 250 # (Default: 2500) +HiddenServiceMaxStreams 25 +#HiddenServiceMaxStreamsCloseCircuit 1 + + +HiddenServiceDir /var/lib/tor/haveno_seednode_2003 +HiddenServicePort 2003 127.0.0.1:2003 +HiddenServicePort 2003 [::1]:2003 +HiddenServiceEnableIntroDoSDefense 1 +#HiddenServiceEnableIntroDoSRatePerSec 25 # (Default: 25) +#HiddenServiceEnableIntroDoSBurstPerSec 200 # (Default: 200) +#HiddenServiceNumIntroductionPoints 3 # (Default: 3) +HiddenServicePoWDefensesEnabled 1 +HiddenServicePoWQueueRate 50 # (Default: 250) +HiddenServicePoWQueueBurst 250 # (Default: 2500) +HiddenServiceMaxStreams 25 +#HiddenServiceMaxStreamsCloseCircuit 1 + +LongLivedPorts 2001,2002,2003 \ No newline at end of file diff --git a/gpg_keys/woodser.asc b/gpg_keys/woodser.asc deleted file mode 100644 index 2dcc3f3a..00000000 --- a/gpg_keys/woodser.asc +++ /dev/null @@ -1,53 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Comment: GPGTools - https://gpgtools.org - -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 -mqKdaDoa -=bRX1 ------END PGP PUBLIC KEY BLOCK----- diff --git a/patches/1.0.18-complete.patch b/patches/1.0.18-complete.patch new file mode 100644 index 00000000..c45167ac --- /dev/null +++ b/patches/1.0.18-complete.patch @@ -0,0 +1,794 @@ +diff --git a/README.md b/README.md +index 5c439f9a..e69de29b 100644 +--- a/README.md ++++ b/README.md +@@ -1,81 +0,0 @@ +-
+- Haveno logo +- +- ![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/haveno-dex/haveno/build.yml?branch=master) +- [![GitHub issues with bounty](https://img.shields.io/github/issues-search/haveno-dex/haveno?color=%23fef2c0&label=Issues%20with%20bounties&query=is%3Aopen+is%3Aissue+label%3A%F0%9F%92%B0bounty)](https://github.com/haveno-dex/haveno/issues?q=is%3Aopen+is%3Aissue+label%3A%F0%9F%92%B0bounty) +- [![Twitter Follow](https://img.shields.io/twitter/follow/HavenoDEX?style=social)](https://twitter.com/havenodex) +- [![Matrix rooms](https://img.shields.io/badge/Matrix%20room-%23haveno-blue)](https://matrix.to/#/#haveno:monero.social) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/haveno-dex/.github/blob/master/CODE_OF_CONDUCT.md) +-
+- +-## What is Haveno? +- +-Haveno (pronounced ha‧ve‧no) is an open source platform to exchange [Monero](https://getmonero.org) for fiat currencies like USD, EUR, and GBP or other cryptocurrencies like BTC, ETH, and BCH. +- +-Main features: +- +-- Communications are routed through **Tor**, to preserve your privacy. +- +-- Trades are **peer-to-peer**: trades on Haveno happen between people only, there is no central authority. +- +-- Trades are **non-custodial**: Haveno supports arbitration in case something goes wrong during the trade, but arbitrators never have access to your funds. +- +-- There is **No token**, because it's not needed. Transactions between traders are secured by non-custodial multisignature transactions on the Monero network. +- +-See the [FAQ on our website](https://haveno.exchange/faq/) for more information. +- +-## Installing Haveno +- +-Haveno can be installed on Linux, macOS, and Windows by using a third party installer and network. +- +-> [!note] +-> The official Haveno repository does not support making real trades directly. +-> +-> To make real trades with Haveno, first find a third party network, and then use their installer or build their repository. We do not endorse any networks at this time. +- +-A test network is also available for users to make test trades using Monero's stagenet. See the [instructions](https://github.com/haveno-dex/haveno/blob/master/docs/installing.md) to build Haveno and connect to the test network. +- +-Alternatively, you can [create your own mainnet network](create-mainnet.md). +- +-Note that Haveno is being actively developed. If you find issues or bugs, please let us know. +- +-## Main repositories +- +-- **[haveno](https://github.com/haveno-dex/haveno)** - This repository. The core of Haveno. +-- **[haveno-ts](https://github.com/haveno-dex/haveno-ts)** - TypeScript library for using Haveno. +-- **[haveno-ui](https://github.com/haveno-dex/haveno-ui)** - A new user interface (WIP). +-- **[haveno-meta](https://github.com/haveno-dex/haveno-meta)** - For project-wide discussions and proposals. +- +-If you wish to help, take a look at the repositories above and look for open issues. We run a bounty program to incentivize development. See [Bounties](#bounties). +- +-## Keep in touch and help out! +- +-Haveno is a community-driven project. For it to be successful it's fundamental to have the support and help of the community. Join the community rooms on our Matrix server: +- +-- General discussions: **Haveno** ([#haveno:monero.social](https://matrix.to/#/#haveno:monero.social)) relayed on IRC/Libera (`#haveno`) +-- Development discussions: **Haveno Development** ([#haveno-development:monero.social](https://matrix.to/#/#haveno-development:monero.social)) relayed on IRC/Libera (`#haveno-development`) +- +-Email: contact@haveno.exchange +-Website: [haveno.exchange](https://haveno.exchange) +- +-## Contributing to Haveno +- +-See the [developer guide](docs/developer-guide.md) to get started developing for Haveno. +- +-See [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) for our styling guides. +- +-If you are not able to contribute code and want to contribute development resources, [donations](#support) fund development bounties. +- +-## Bounties +- +-To incentivize development and reward contributors, we adopt a simple bounty system. Contributors may be awarded bounties after completing a task (resolving an issue). Take a look at the [issues labeled '💰bounty'](https://github.com/haveno-dex/haveno/issues?q=is%3Aopen+is%3Aissue+label%3A%F0%9F%92%B0bounty) in the main `haveno` repository. [Details and conditions for receiving a bounty](docs/bounties.md). +- +-## Support and sponsorships +- +-To bring Haveno to life, we need resources. If you have the possibility, please consider [becoming a sponsor](https://haveno.exchange/sponsors/) or donating to the project: +- +-

+- Donate Monero
+- 42sjokkT9FmiWPqVzrWPFE5NCJXwt96bkBozHf4vgLR9hXyJDqKHEHKVscAARuD7in5wV1meEcSTJTanCTDzidTe2cFXS1F +-

+- +-If you are using a wallet that supports OpenAlias (like the 'official' CLI and GUI wallets), you can simply put `fund@haveno.exchange` as the "receiver" address. +diff --git a/build.gradle b/build.gradle +index c8a80a90..e9f54053 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -787,6 +787,8 @@ configure(project(':statsnode')) { + } + + configure(project(':daemon')) { ++ apply plugin: 'com.github.johnrengelman.shadow' ++ + mainClassName = 'haveno.daemon.app.HavenoDaemonMain' + + dependencies { +diff --git a/common/src/main/java/haveno/common/app/Version.java b/common/src/main/java/haveno/common/app/Version.java +index d39016dc..37158383 100644 +--- a/common/src/main/java/haveno/common/app/Version.java ++++ b/common/src/main/java/haveno/common/app/Version.java +@@ -80,7 +80,7 @@ public class Version { + + // The version no. for the objects sent over the network. A change will break the serialization of old objects. + // If objects are used for both network and database the network version is applied. +- public static final String P2P_NETWORK_VERSION = "A"; ++ public static final String P2P_NETWORK_VERSION = System.getenv().getOrDefault("P2P_NETWORK_VERSION", "X");; + + // The version no. of the serialized data stored to disc. A change will break the serialization of old objects. + // VERSION = 0.5.0 -> LOCAL_DB_VERSION = 1 +diff --git a/core/src/main/java/haveno/core/alert/AlertManager.java b/core/src/main/java/haveno/core/alert/AlertManager.java +index a54f45c4..372641ad 100644 +--- a/core/src/main/java/haveno/core/alert/AlertManager.java ++++ b/core/src/main/java/haveno/core/alert/AlertManager.java +@@ -101,15 +101,12 @@ public class AlertManager { + switch (Config.baseCurrencyNetwork()) { + case XMR_LOCAL: + return List.of( +- "027a381b5333a56e1cc3d90d3a7d07f26509adf7029ed06fc997c656621f8da1ee", +- "024baabdba90e7cc0dc4626ef73ea9d722ea7085d1104491da8c76f28187513492"); ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + case XMR_STAGENET: + return List.of( +- "036d8a1dfcb406886037d2381da006358722823e1940acc2598c844bbc0fd1026f", +- "026c581ad773d987e6bd10785ac7f7e0e64864aedeb8bce5af37046de812a37854", +- "025b058c9f2c60d839669dbfa5578cf5a8117d60e6b70e2f0946f8a691273c6a36"); ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + case XMR_MAINNET: +- return List.of(); ++ return List.of("0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + default: + throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); + } +diff --git a/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java b/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java +index fd6abac5..bd93565c 100644 +--- a/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java ++++ b/core/src/main/java/haveno/core/alert/PrivateNotificationManager.java +@@ -99,16 +99,11 @@ public class PrivateNotificationManager implements MessageListener { + if (useDevPrivilegeKeys) return List.of(DevEnv.DEV_PRIVILEGE_PUB_KEY); + switch (Config.baseCurrencyNetwork()) { + case XMR_LOCAL: +- return List.of( +- "027a381b5333a56e1cc3d90d3a7d07f26509adf7029ed06fc997c656621f8da1ee", +- "024baabdba90e7cc0dc4626ef73ea9d722ea7085d1104491da8c76f28187513492"); ++ return List.of("023c8fdea9ff2d03daef54337907e70a7b0e20084a75fcc3ad2f0c28d8b691dea1"); + case XMR_STAGENET: +- return List.of( +- "02ba7c5de295adfe57b60029f3637a2c6b1d0e969a8aaefb9e0ddc3a7963f26925", +- "026c581ad773d987e6bd10785ac7f7e0e64864aedeb8bce5af37046de812a37854", +- "025b058c9f2c60d839669dbfa5578cf5a8117d60e6b70e2f0946f8a691273c6a36"); ++ return List.of("023c8fdea9ff2d03daef54337907e70a7b0e20084a75fcc3ad2f0c28d8b691dea1"); + case XMR_MAINNET: +- return List.of(); ++ return List.of("023c8fdea9ff2d03daef54337907e70a7b0e20084a75fcc3ad2f0c28d8b691dea1"); + default: + throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); + } +diff --git a/core/src/main/java/haveno/core/app/HavenoExecutable.java b/core/src/main/java/haveno/core/app/HavenoExecutable.java +index 5f2d1462..a665b03e 100644 +--- a/core/src/main/java/haveno/core/app/HavenoExecutable.java ++++ b/core/src/main/java/haveno/core/app/HavenoExecutable.java +@@ -84,7 +84,7 @@ public abstract class HavenoExecutable implements GracefulShutDownHandler, Haven + + // TODO: regular expression is used to parse application name for the flatpak manifest, a more stable approach would be nice + // Don't edit the next line unless you're only editing in between the quotes. +- public static final String DEFAULT_APP_NAME = "Haveno"; ++ public static final String DEFAULT_APP_NAME = "Haveno App"; + + public static final int EXIT_SUCCESS = 0; + public static final int EXIT_FAILURE = 1; +diff --git a/core/src/main/java/haveno/core/filter/FilterManager.java b/core/src/main/java/haveno/core/filter/FilterManager.java +index cb7e0e9b..a92caf52 100644 +--- a/core/src/main/java/haveno/core/filter/FilterManager.java ++++ b/core/src/main/java/haveno/core/filter/FilterManager.java +@@ -116,9 +116,7 @@ public class FilterManager { + + publicKeys = useDevPrivilegeKeys ? + Collections.singletonList(DevEnv.DEV_PRIVILEGE_PUB_KEY) : +- List.of("0358d47858acdc41910325fce266571540681ef83a0d6fedce312bef9810793a27", +- "029340c3e7d4bb0f9e651b5f590b434fecb6175aeaa57145c7804ff05d210e534f", +- "034dc7530bf66ffd9580aa98031ea9a18ac2d269f7c56c0e71eca06105b9ed69f9"); ++ List.of("03d62d14438adbe7aea688ade1f73933c6f0a705f238c02c5b54b83dd1e4fca225"); + + banFilter.setBannedNodePredicate(this::isNodeAddressBannedFromNetwork); + } +diff --git a/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java b/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java +index 50be387c..406e8986 100644 +--- a/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java ++++ b/core/src/main/java/haveno/core/support/dispute/arbitration/ArbitrationManager.java +@@ -200,7 +200,7 @@ public final class ArbitrationManager extends DisputeManager { + switch (Config.baseCurrencyNetwork()) { + case XMR_LOCAL: + return List.of( +- "027a381b5333a56e1cc3d90d3a7d07f26509adf7029ed06fc997c656621f8da1ee", +- "024baabdba90e7cc0dc4626ef73ea9d722ea7085d1104491da8c76f28187513492", +- "026eeec3c119dd6d537249d74e5752a642dd2c3cc5b6a9b44588eb58344f29b519"); ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + case XMR_STAGENET: + return List.of( +- "03bb559ce207a4deb51d4c705076c95b85ad8581d35936b2a422dcb504eaf7cdb0", +- "026c581ad773d987e6bd10785ac7f7e0e64864aedeb8bce5af37046de812a37854", +- "025b058c9f2c60d839669dbfa5578cf5a8117d60e6b70e2f0946f8a691273c6a36", +- "036c7d3f4bf05ef39b9d1b0a5d453a18210de36220c3d83cd16e59bd6132b037ad", +- "030f7122a10ff73cd73808bddace95be77a94189c8a0eb24586265e125ce5ce6b9", +- "03aa23e062afa0dda465f46986f8aa8d0374ad3e3f256141b05681dcb1e39c3859", +- "02d3beb1293ca2ca14e6d42ca8bd18089a62aac62fd6bb23923ee6ead46ac60fba", +- "03fa0f38f27bdd324db6f933f7e57851dadf3b911e4db6b19dd0950492c4525a31", +- "02a1a458df5acf4ab08fdca748e28f33a955a30854c8c1a831ee733dca7f0d2fcd", +- "0374dd70f3fa6e47ec5ab97932e1cec6233e98e6ae3129036b17118650c44fd3de"); ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78"); + case XMR_MAINNET: +- return List.of(); ++ return List.of( ++ "0326b14f3a55d02575dceed5202b8b125f458cbe0fdceeee294b443bf1a8d8cf78" ++ ); + default: + throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); + } +diff --git a/core/src/main/java/haveno/core/trade/HavenoUtils.java b/core/src/main/java/haveno/core/trade/HavenoUtils.java +index d238d788..2a4f9159 100644 +--- a/core/src/main/java/haveno/core/trade/HavenoUtils.java ++++ b/core/src/main/java/haveno/core/trade/HavenoUtils.java +@@ -85,17 +85,17 @@ import org.bitcoinj.core.Coin; + public class HavenoUtils { + + // configure release date +- private static final String RELEASE_DATE = "25-05-2024 00:00:00"; // optionally set to release date of the network in format dd-mm-yyyy to impose temporary limits, etc. e.g. "25-05-2024 00:00:00" ++ private static final String RELEASE_DATE = "25-11-2024 00:00:00"; // optionally set to release date of the network in format dd-mm-yyyy to impose temporary limits, etc. e.g. "25-05-2024 00:00:00" + public static final int RELEASE_LIMIT_DAYS = 60; // number of days to limit sell offers to max buy limit for new accounts + public static final int WARN_ON_OFFER_EXCEEDS_UNSIGNED_BUY_LIMIT_DAYS = 182; // number of days to warn if sell offer exceeds unsigned buy limit + public static final int ARBITRATOR_ACK_TIMEOUT_SECONDS = 60; + + // configure fees +- public static final boolean ARBITRATOR_ASSIGNS_TRADE_FEE_ADDRESS = true; +- public static final double PENALTY_FEE_PCT = 0.02; // 2% ++ public static final boolean ARBITRATOR_ASSIGNS_TRADE_FEE_ADDRESS = false; + public static final double MAKER_FEE_PCT = 0.0015; // 0.15% +- public static final double TAKER_FEE_PCT = 0.0075; // 0.75% +- public static final double MAKER_FEE_FOR_TAKER_WITHOUT_DEPOSIT_PCT = MAKER_FEE_PCT + TAKER_FEE_PCT; // customize maker's fee when no deposit or fee from taker ++ public static final double TAKER_FEE_PCT = 0.0015; // 0.15% ++ public static final double PENALTY_FEE_PCT = 0.02; // 2% ++ public static final double MAKER_FEE_FOR_TAKER_WITHOUT_DEPOSIT_PCT = MAKER_FEE_PCT + TAKER_FEE_PCT; + + // other configuration + public static final long LOG_POLL_ERROR_PERIOD_MS = 1000 * 60 * 4; // log poll errors up to once every 4 minutes +@@ -464,7 +464,7 @@ public class HavenoUtils { + case XMR_STAGENET: + return "5B11hTJdG2XDNwjdKGLRxwSLwDhkbGg7C7UEAZBxjE6FbCeRMjudrpNACmDNtWPiSnNfjDQf39QRjdtdgoL69txv81qc2Mc"; + case XMR_MAINNET: +- throw new RuntimeException("Mainnet fee address not implemented"); ++ return "84R8DfswAtT5eZ97ioKFjJYvd6HKuSdZTKyZYYJr77oVWcAiJDJgTAc3piVm2prKmeAgf92iSr7jkcjmmHNFLWGEDGUDafc"; + default: + throw new RuntimeException("Unhandled base currency network: " + Config.baseCurrencyNetwork()); + } +diff --git a/core/src/main/resources/xmr_mainnet.seednodes b/core/src/main/resources/xmr_mainnet.seednodes +index 3f81fa04..aacaca7e 100644 +--- a/core/src/main/resources/xmr_mainnet.seednodes ++++ b/core/src/main/resources/xmr_mainnet.seednodes +@@ -1,2 +1,4 @@ + # nodeaddress.onion:port [(@owner,@backup)] +-placeholder.onion:8000 (@placeholder) +\ No newline at end of file ++5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001 (@xox) ++dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002 (@xox) ++ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003 (@xox) +\ No newline at end of file +diff --git a/desktop/package/package.gradle b/desktop/package/package.gradle +index 65e09d55..de2c99e7 100644 +--- a/desktop/package/package.gradle ++++ b/desktop/package/package.gradle +@@ -278,7 +278,7 @@ task packageInstallers { + " --java-options --add-opens=java.base/java.lang.reflect=ALL-UNNAMED" + + " --java-options --add-opens=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED" + + " --java-options -Djava.net.preferIPv4Stack=true" + +- " --arguments --baseCurrencyNetwork=XMR_STAGENET" ++ " --arguments --baseCurrencyNetwork=XMR_MAINNET" + // Warning: this will cause guice reflection exceptions and lead to issues with the guice internal cache + // resulting in the UI not loading + // " --java-options -Djdk.module.illegalAccess=deny" + +diff --git a/docker/Dockerfile.core b/docker/Dockerfile.core +new file mode 100755 +index 00000000..bee1bb1c +--- /dev/null ++++ b/docker/Dockerfile.core +@@ -0,0 +1,38 @@ ++FROM openjdk:21-jdk-bullseye ++ ++RUN set -ex && \ ++ apt update && \ ++ apt --no-install-recommends --yes install \ ++ make \ ++ git \ ++ tor ++ ++RUN set -ex && adduser --system --group --disabled-password haveno && \ ++ mkdir -p /home/haveno && \ ++ chown -R haveno:haveno /home/haveno ++ ++USER haveno ++ ++WORKDIR /home/haveno ++ ++RUN echo 'Cache3' ++ ++RUN set -ex && git clone https://git.haveno.com/haveno/haveno.git ++ ++WORKDIR /home/haveno/haveno ++ ++COPY 1.0.18-complete.patch /home/haveno/haveno/1.0.18-complete.patch ++ ++RUN git checkout tags/1.0.18 && \ ++ git reset --hard 1.0.18 && \ ++ git apply 1.0.18-complete.patch ++ ++ ++RUN make clean && make skip-tests ++ ++WORKDIR /home/haveno/haveno ++ ++ENTRYPOINT [ "./haveno-seednode" ] ++ ++## CMDs are conditional based on type ++CMD ["--baseCurrencyNetwork=XMR_MAINNET", "--useLocalhostForP2P=false", "--useDevPrivilegeKeys=false", "--nodePort=2002"] +diff --git a/docker/build_then_publish_all.sh b/docker/build_then_publish_all.sh +new file mode 100644 +index 00000000..e69de29b +diff --git a/docker/config/nodes/haveno_seednode_2001/hostname b/docker/config/nodes/haveno_seednode_2001/hostname +new file mode 100755 +index 00000000..fff219c8 +--- /dev/null ++++ b/docker/config/nodes/haveno_seednode_2001/hostname +@@ -0,0 +1 @@ ++5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion +diff --git a/docker/config/nodes/haveno_seednode_2001/hs_ed25519_public_key b/docker/config/nodes/haveno_seednode_2001/hs_ed25519_public_key +new file mode 100755 +index 0000000000000000000000000000000000000000..622eb855ac4d65892c59e70d03cfcf70f17d038a +GIT binary patch +literal 64 +zcmV-G0Kfk|Js@RdGBq_ZId(BEaCKsAX=6Gdba`-PFd#iW0002$JQanMD&fg-4E95f +Wcpo;j;up%p|4`czr=1Ryegd+wXBcMy + +literal 0 +HcmV?d00001 + +diff --git a/docker/config/nodes/haveno_seednode_2001/hs_ed25519_secret_key b/docker/config/nodes/haveno_seednode_2001/hs_ed25519_secret_key +new file mode 100755 +index 0000000000000000000000000000000000000000..4a8ce9291914a3a540e054fd5342da9fd9c15e22 +GIT binary patch +literal 96 +zcmV-m0H6OoJs@RdGBq_ZId(BEb7f<4Wpp|qba`-PFd#iW00013!WD+FnYMllinWAq +zy2eLprwa_T^V|X&>cLb4=a5rWmwhRtvz;;=Ce#wvslSlv-mEknEcz;Ww;o^ptRg>1` +CBPja- + +literal 0 +HcmV?d00001 + +diff --git a/docker/daemon/.env b/docker/daemon/.env +new file mode 100644 +index 00000000..931de414 +--- /dev/null ++++ b/docker/daemon/.env +@@ -0,0 +1,3 @@ ++NETWORK_VERSION_TAG=1.0.18 ++BASE_NETWORK=STAGENET ++P2P_NETWORK_VERSION="X" +\ No newline at end of file +diff --git a/docker/daemon/docker-compose.yml b/docker/daemon/docker-compose.yml +new file mode 100644 +index 00000000..72a17d33 +--- /dev/null ++++ b/docker/daemon/docker-compose.yml +@@ -0,0 +1,28 @@ ++version: '3' ++ ++services: ++ haveno-daemon: ++ image: haveno-core ++ build: ++ context: ../ ++ ports: ++ - "127.0.0.1:3201:3201" ++ environment: ++ - P2P_NETWORK_VERSION=X ++ - NETWORK_VERSION_TAG=${NETWORK_VERSION_TAG} ++ - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} ++ - USE_LOCALHOST_FOR_P2P=false ++ - USE_DEV_PRIVILEGE_KEYS=false ++ - NODE_PORT=9999 ++ - APP_NAME=haveno-XMR_${BASE_NETWORK}_DAEMON ++ - EXPORT_SHADOW=yes ++ - EXPORT_SHADOW_PATH=daemon/build/libs/daemon-all.sh # Leave this blank in most cases ++ entrypoint: ["./haveno-daemon"] ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--useLocalhostForP2P=false" ++ - "--useDevPrivilegeKeys=false" ++ - "--nodePort=9999" ++ - "--appName=XMR_${BASE_NETWORK}_DAEMON" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" ++ restart: unless-stopped +diff --git a/docker/initial_setup.sh b/docker/initial_setup.sh +new file mode 100644 +index 00000000..2241009b +--- /dev/null ++++ b/docker/initial_setup.sh +@@ -0,0 +1,13 @@ ++## check if sudo frst other wise exist ++ ++## setup docker ++apt-get update -y ++apt-get install docker.io docker-compose tor make -y ++ ++cp torrc /etc/tor/torrc ++cp -r config/nodes/* /var/lib/tor/ ++ ++## build base files ++cd .. && make skip-tests ++ ++cd docker/seednode && docker compose up --build +diff --git a/docker/seednode/.env b/docker/seednode/.env +new file mode 100644 +index 00000000..586a660c +--- /dev/null ++++ b/docker/seednode/.env +@@ -0,0 +1,2 @@ ++BASE_NETWORK=STAGENET ++P2P_NETWORK_VERSION="X" +\ No newline at end of file +diff --git a/docker/seednode/docker-compose.yml b/docker/seednode/docker-compose.yml +new file mode 100644 +index 00000000..0da5abb7 +--- /dev/null ++++ b/docker/seednode/docker-compose.yml +@@ -0,0 +1,79 @@ ++version: '3.8' ++ ++services: ++ haveno-core: ++ image: haveno-core ++ build: ++ context: ../ ++ dockerfile: Dockerfile.core ++ # No ports, this one just builds the image ++ entrypoint: ["true"] # No need to run ++ ++ haveno-seednode_2001: ++ image: haveno-core ++ depends_on: ++ - haveno-core ++ ports: ++ - "127.0.0.1:2001:2001" ++ environment: ++ - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} ++ - USE_LOCALHOST_FOR_P2P=false ++ - USE_DEV_PRIVILEGE_KEYS=false ++ - NODE_PORT=2001 ++ - APP_NAME=haveno-XMR_${BASE_NETWORK}_Seed_2001 ++ entrypoint: ["./haveno-seednode"] ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--useLocalhostForP2P=false" ++ - "--useDevPrivilegeKeys=false" ++ - "--nodePort=2001" ++ - "--appName=haveno-XMR_${BASE_NETWORK}_Seed_2001" ++ - "--hiddenServiceAddress=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" ++ restart: unless-stopped ++ ++ haveno-seednode_2002: ++ image: haveno-core ++ depends_on: ++ - haveno-core ++ ports: ++ - "127.0.0.1:2002:2002" ++ environment: ++ - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} ++ - USE_LOCALHOST_FOR_P2P=false ++ - USE_DEV_PRIVILEGE_KEYS=false ++ - NODE_PORT=2002 ++ - APP_NAME=haveno-XMR_${BASE_NETWORK}_Seed_2002 ++ entrypoint: ["./haveno-seednode"] ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--useLocalhostForP2P=false" ++ - "--useDevPrivilegeKeys=false" ++ - "--nodePort=2002" ++ - "--appName=haveno-XMR_${BASE_NETWORK}_Seed_2002" ++ - "--hiddenServiceAddress=dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" ++ restart: unless-stopped ++ ++ haveno-seednode_2003: ++ image: haveno-core ++ depends_on: ++ - haveno-core ++ ports: ++ - "127.0.0.1:2003:2003" ++ environment: ++ - BASE_CURRENCY_NETWORK=XMR_${BASE_NETWORK} ++ - USE_LOCALHOST_FOR_P2P=false ++ - USE_DEV_PRIVILEGE_KEYS=false ++ - NODE_PORT=2003 ++ - APP_NAME=haveno-XMR_${BASE_NETWORK}_Seed_2003 ++ entrypoint: ["./haveno-seednode"] ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--useLocalhostForP2P=false" ++ - "--useDevPrivilegeKeys=false" ++ - "--nodePort=2003" ++ - "--appName=haveno-XMR_${BASE_NETWORK}_Seed_2003" ++ - "--hiddenServiceAddress=ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" ++ restart: unless-stopped +\ No newline at end of file +diff --git a/docker/statsnode/.env b/docker/statsnode/.env +new file mode 100644 +index 00000000..586a660c +--- /dev/null ++++ b/docker/statsnode/.env +@@ -0,0 +1,2 @@ ++BASE_NETWORK=STAGENET ++P2P_NETWORK_VERSION="X" +\ No newline at end of file +diff --git a/docker/statsnode/docker-compose.yml b/docker/statsnode/docker-compose.yml +new file mode 100644 +index 00000000..5dfa7e8a +--- /dev/null ++++ b/docker/statsnode/docker-compose.yml +@@ -0,0 +1,15 @@ ++version: '3' ++ ++services: ++ haveno-statsnode: ++ image: haveno-core ++ build: ++ context: ../ ++ dockerfile: Dockerfile.core ++ entrypoint: ["./haveno-statsnode"] ++ evironment: ++ - P2P_NETWORK_VERSION=X ++ command: ++ - "--baseCurrencyNetwork=XMR_${BASE_NETWORK}" ++ - "--appName=XMR_${BASE_NETWORK}_STATSNODE" ++ - "--seedNodes=5i6blbmuflq4s4im6zby26a7g22oef6kyp7vbwyru6oq5e36akzo3ayd.onion:2001,dx4ktxyiemjc354imehuaswbhqlidhy62b4ifzigk5p2rb37lxqbveqd.onion:2002,ajbqx4clnjlr7lmzoftuvpvmqafdiilidsgocvokx6bqj3okk56ccfqd.onion:2003" +diff --git a/docker/torrc b/docker/torrc +new file mode 100755 +index 00000000..8ddaf97e +--- /dev/null ++++ b/docker/torrc +@@ -0,0 +1,109 @@ ++## Configuration file for Haveno Seednode ++## ++## Tor opens a socks proxy on port 9050 by default -- even if you don't ++## configure one below. Set "SocksPort 0" if you plan to run Tor only ++## as a relay, and not make any local application connections yourself. ++#SocksPort 9050 # Default: Bind to localhost:9050 for local connections. ++# ### SocksPort flag: OnionTrafficOnly ### ++## Tell the tor client to only connect to .onion addresses in response to SOCKS5 requests on this connection. ++## This is equivalent to NoDNSRequest, NoIPv4Traffic, NoIPv6Traffic. ++# ### SocksPort flag: ExtendedErrors ### ++## Return extended error code in the SOCKS reply. So far, the possible errors are: ++# X'F0' Onion Service Descriptor Can Not be Found ++# X'F1' Onion Service Descriptor Is Invalid ++# X'F2' Onion Service Introduction Failed ++# X'F3' Onion Service Rendezvous Failed ++# X'F4' Onion Service Missing Client Authorization ++# X'F5' Onion Service Wrong Client Authorization ++# X'F6' Onion Service Invalid Address ++# X'F7' Onion Service Introduction Timed Out ++SocksPort 9050 OnionTrafficOnly ExtendedErrors ++ ++## Entry policies to allow/deny SOCKS requests based on IP address. ++## First entry that matches wins. If no SocksPolicy is set, we accept ++## all (and only) requests that reach a SocksPort. Untrusted users who ++## can access your SocksPort may be able to learn about the connections ++## you make. ++SocksPolicy accept 127.0.0.1 ++SocksPolicy accept6 [::1] ++SocksPolicy reject * ++ ++## Tor will reject application connections that use unsafe variants of the socks protocol ++## — ones that only provide an IP address, meaning the application is doing a DNS resolve first. ++## Specifically, these are socks4 and socks5 when not doing remote DNS. (Default: 0) ++#SafeSocks 1 ++ ++## Tor will make a notice-level log entry for each connection to the Socks port indicating ++## whether the request used a safe socks protocol or an unsafe one (see above entry on SafeSocks). ++## This helps to determine whether an application using Tor is possibly leaking DNS requests. (Default: 0) ++TestSocks 1 ++ ++## Logs go to stdout at level "notice" unless redirected by something ++## else, like one of the below lines. You can have as many Log lines as ++## you want. ++## ++## We advise using "notice" in most cases, since anything more verbose ++## may provide sensitive information to an attacker who obtains the logs. ++## ++## Send all messages of level 'notice' or higher to /var/log/tor/notices.log ++#Log notice file /var/log/tor/notices.log ++## Send every possible message to /var/log/tor/debug.log ++#Log debug file /var/log/tor/debug.log ++## Use the system log instead of Tor's logfiles (This is default) ++#Log notice syslog ++## To send all messages to stderr: ++#Log debug stderr ++ ++# Try to write to disk less frequently than we would otherwise. This is useful when running on flash memory. ++AvoidDiskWrites 1 ++ ++HiddenServiceStatistics 0 ++ ++## Compute the hash of a password with "tor --hash-password password". ++HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C ++#CookieAuthentication 0 # (Default: 1) ++ ++## MetricsPort provides an interface to the underlying Tor relay metrics. ++## Exposing publicly is dangerous, set a very strict access policy. ++## Retrieve the metrics with: curl http://127.0.0.1:9035/metrics ++MetricsPort 127.0.0.1:9035 ++MetricsPortPolicy accept 127.0.0.1 ++MetricsPortPolicy accept [::1] ++ ++HiddenServiceDir /var/lib/tor/haveno_seednode_2001 ++HiddenServicePort 2001 127.0.0.1:2001 ++HiddenServicePort 2001 [::1]:2001 ++HiddenServiceEnableIntroDoSDefense 1 ++HiddenServicePoWDefensesEnabled 1 ++HiddenServicePoWQueueRate 50 # (Default: 250) ++HiddenServicePoWQueueBurst 250 # (Default: 2500) ++HiddenServiceMaxStreams 25 ++ ++ ++HiddenServiceDir /var/lib/tor/haveno_seednode_2002 ++HiddenServicePort 2002 127.0.0.1:2002 ++HiddenServicePort 2002 [::1]:2002 ++HiddenServiceEnableIntroDoSDefense 1 ++#HiddenServiceEnableIntroDoSRatePerSec 25 # (Default: 25) ++#HiddenServiceEnableIntroDoSBurstPerSec 200 # (Default: 200) ++HiddenServicePoWDefensesEnabled 1 ++HiddenServicePoWQueueRate 50 # (Default: 250) ++HiddenServicePoWQueueBurst 250 # (Default: 2500) ++HiddenServiceMaxStreams 25 ++#HiddenServiceMaxStreamsCloseCircuit 1 ++ ++ ++HiddenServiceDir /var/lib/tor/haveno_seednode_2003 ++HiddenServicePort 2003 127.0.0.1:2003 ++HiddenServicePort 2003 [::1]:2003 ++HiddenServiceEnableIntroDoSDefense 1 ++#HiddenServiceEnableIntroDoSRatePerSec 25 # (Default: 25) ++#HiddenServiceEnableIntroDoSBurstPerSec 200 # (Default: 200) ++#HiddenServiceNumIntroductionPoints 3 # (Default: 3) ++HiddenServicePoWDefensesEnabled 1 ++HiddenServicePoWQueueRate 50 # (Default: 250) ++HiddenServicePoWQueueBurst 250 # (Default: 2500) ++HiddenServiceMaxStreams 25 ++#HiddenServiceMaxStreamsCloseCircuit 1 ++ ++LongLivedPorts 2001,2002,2003 +\ No newline at end of file +diff --git a/gpg_keys/woodser.asc b/gpg_keys/woodser.asc +deleted file mode 100644 +index 2dcc3f3a..00000000 +--- a/gpg_keys/woodser.asc ++++ /dev/null +@@ -1,53 +0,0 @@ +------BEGIN PGP PUBLIC KEY BLOCK----- +-Comment: GPGTools - https://gpgtools.org +- +-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 +-mqKdaDoa +-=bRX1 +------END PGP PUBLIC KEY BLOCK----- diff --git a/update-patch.sh b/update-patch.sh new file mode 100755 index 00000000..c5f1e8d5 --- /dev/null +++ b/update-patch.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ----------- CONFIG ----------- + +TAG="1.0.18" +PATCH_FILE="1.0.18-complete-x.patch" +NEW_PATCH_FILE="1.0.18-complete-x-x.patch" +SCRIPT_NAME="$(basename "$0")" + +# ----------- INTERNAL ----------- + +REPO_ROOT="$(git rev-parse --show-toplevel)" +TMP_DIR="/tmp/git_patch_workflow_$$" +mkdir -p "$TMP_DIR" + +PATCH_BACKUP="$TMP_DIR/$(basename "$PATCH_FILE")" +SCRIPT_BACKUP="$TMP_DIR/$SCRIPT_NAME" + +# ----------- START ----------- + +echo "📁 Backing up patch and script..." +cp "$PATCH_FILE" "$PATCH_BACKUP" +cp "$0" "$SCRIPT_BACKUP" + +echo "🔁 Resetting to tag: $TAG" +git checkout "$TAG" +git reset --hard +git clean -fdx + +echo "📦 Applying patch..." +git apply --binary "$PATCH_BACKUP" || { + echo "❌ Patch failed to apply. Check for conflicts or mismatched context." + exit 1 +} + +echo "🛠️ Patch applied. Make your changes now." +echo "👉 Press ENTER when you're done editing..." +read -r _ + +echo "✅ Staging changes..." +git add . + +echo "📤 Generating new patch: $NEW_PATCH_FILE" +git diff --binary "$TAG" > "$NEW_PATCH_FILE" + +echo "🔙 Restoring original patch and script..." +cp "$PATCH_BACKUP" "$REPO_ROOT/$PATCH_FILE" +cp "$SCRIPT_BACKUP" "$REPO_ROOT/$SCRIPT_NAME" + +echo "✅ Done." +echo "📄 Patch written to: $NEW_PATCH_FILE" +echo "📄 Original patch and script restored in the repo." + +# Clean up tmp +rm -rf "$TMP_DIR" \ No newline at end of file