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-----