Support for open JDK 21 by updating dependencies (#647)

This commit is contained in:
napoly 2024-03-09 16:36:37 +01:00 committed by GitHub
parent c72372be68
commit c777133d36
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
254 changed files with 1616 additions and 1983 deletions

View file

@ -14,13 +14,13 @@ jobs:
fail-fast: false fail-fast: false
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- name: Set up JDK 11 - name: Set up JDK 21
uses: actions/setup-java@v3 uses: actions/setup-java@v4
with: with:
java-version: '11' java-version: '21'
distribution: 'adopt' distribution: 'adopt'
cache: gradle cache: gradle
- name: Build with Gradle - name: Build with Gradle

View file

@ -10,12 +10,12 @@ jobs:
name: Publish coverage name: Publish coverage
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Set up JDK 11 - name: Set up JDK 21
uses: actions/setup-java@v3 uses: actions/setup-java@v4
with: with:
java-version: '11' java-version: '21'
distribution: 'adopt' distribution: 'adopt'
- name: Build with Gradle - name: Build with Gradle

View file

@ -33,7 +33,14 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'adopt'
cache: gradle
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
@ -47,8 +54,8 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
# If this step fails, then you should remove it and run the build manually (see below). # If this step fails, then you should remove it and run the build manually (see below).
- name: Autobuild # - name: Autobuild
uses: github/codeql-action/autobuild@v2 # uses: github/codeql-action/autobuild@v2
# Command-line programs to run using the OS shell. # Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl # 📚 https://git.io/JvXDl
@ -57,8 +64,8 @@ jobs:
# and modify them (or add more) to build your code if your project # and modify them (or add more) to build your code if your project
# uses a compiled language # uses a compiled language
#- run: | - name: Build
# ./gradlew build run: ./gradlew build --stacktrace -x test -x checkstyleMain -x checkstyleTest
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2 uses: github/codeql-action/analyze@v2

View file

@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Bounty explanation - name: Bounty explanation
uses: peter-evans/create-or-update-comment@v2 uses: peter-evans/create-or-update-comment@v3
if: github.event.label.name == '💰bounty' if: github.event.label.name == '💰bounty'
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}

View file

@ -10,7 +10,7 @@ buildscript {
classpath 'com.google.gradle:osdetector-gradle-plugin:1.7.3' classpath 'com.google.gradle:osdetector-gradle-plugin:1.7.3'
classpath 'com.github.johnrengelman:shadow:8.1.1' classpath 'com.github.johnrengelman:shadow:8.1.1'
classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.6.3' classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.6.3'
classpath 'com.gradle:gradle-enterprise-gradle-plugin:3.12.4' // added for windows build verification-metadata.xml error classpath 'com.gradle:gradle-enterprise-gradle-plugin:3.16.1' // added for windows build verification-metadata.xml error
} }
} }
@ -31,7 +31,7 @@ configure(subprojects) {
apply plugin: 'jacoco-report-aggregation' apply plugin: 'jacoco-report-aggregation'
apply plugin: 'checkstyle' apply plugin: 'checkstyle'
sourceCompatibility = JavaVersion.VERSION_11 sourceCompatibility = JavaVersion.VERSION_21
ext { // in alphabetical order ext { // in alphabetical order
bcVersion = '1.63' bcVersion = '1.63'
@ -47,8 +47,8 @@ configure(subprojects) {
fontawesomefxMaterialdesignfontVersion = '2.0.26-9.1.2' fontawesomefxMaterialdesignfontVersion = '2.0.26-9.1.2'
grpcVersion = '1.42.1' grpcVersion = '1.42.1'
gsonVersion = '2.8.5' gsonVersion = '2.8.5'
guavaVersion = '30.1.1-jre' guavaVersion = '32.1.1-jre'
guiceVersion = '5.1.0' guiceVersion = '7.0.0'
moneroJavaVersion = '0.8.10' moneroJavaVersion = '0.8.10'
httpclient5Version = '5.0' httpclient5Version = '5.0'
hamcrestVersion = '2.2' hamcrestVersion = '2.2'
@ -56,7 +56,7 @@ configure(subprojects) {
httpcoreVersion = '4.4.13' httpcoreVersion = '4.4.13'
ioVersion = '2.6' ioVersion = '2.6'
jacksonVersion = '2.12.1' jacksonVersion = '2.12.1'
javafxVersion = '16' javafxVersion = '21.0.2'
javaxAnnotationVersion = '1.2' javaxAnnotationVersion = '1.2'
jcsvVersion = '1.4.0' jcsvVersion = '1.4.0'
jetbrainsAnnotationsVersion = '13.0' jetbrainsAnnotationsVersion = '13.0'
@ -69,8 +69,8 @@ configure(subprojects) {
langVersion = '3.11' langVersion = '3.11'
logbackVersion = '1.1.11' logbackVersion = '1.1.11'
loggingVersion = '1.2' loggingVersion = '1.2'
lombokVersion = '1.18.24' lombokVersion = '1.18.30'
mockitoVersion = '5.2.0' mockitoVersion = '5.10.0'
netlayerVersion = '6797461310f077bbea4f43a3a509c077b0ed8c34' // Netlayer version 0.7.3 with Tor browser version 11.0.14 and tor binary version: 0.4.7.7 netlayerVersion = '6797461310f077bbea4f43a3a509c077b0ed8c34' // Netlayer version 0.7.3 with Tor browser version 11.0.14 and tor binary version: 0.4.7.7
protobufVersion = '3.19.1' protobufVersion = '3.19.1'
protocVersion = protobufVersion protocVersion = protobufVersion
@ -174,7 +174,11 @@ configure([project(':cli'),
if (applicationName == 'desktop') { if (applicationName == 'desktop') {
def script = file("${rootProject.projectDir}/haveno-$applicationName") def script = file("${rootProject.projectDir}/haveno-$applicationName")
script.text = script.text.replace( script.text = script.text.replace(
'DEFAULT_JVM_OPTS=""', 'DEFAULT_JVM_OPTS="-XX:MaxRAM=4g"') 'DEFAULT_JVM_OPTS=""', 'DEFAULT_JVM_OPTS="-XX:MaxRAM=4g ' +
'--add-opens=javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED ' +
'--add-opens=javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED ' +
'--add-opens=java.base/java.lang.reflect=ALL-UNNAMED ' +
'--add-opens=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED"')
} }
if (applicationName == 'apitest') { if (applicationName == 'apitest') {

View file

@ -17,12 +17,11 @@
package haveno.common; package haveno.common;
import lombok.extern.slf4j.Slf4j; import com.google.inject.Singleton;
import javax.inject.Singleton;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
// Helps configure listener objects that are run by the `UserThread` each second // Helps configure listener objects that are run by the `UserThread` each second
// and can do per second, per minute and delayed second actions. Also detects when we were in standby, and logs it. // and can do per second, per minute and delayed second actions. Also detects when we were in standby, and logs it.

View file

@ -17,16 +17,15 @@
package haveno.common.crypto; package haveno.common.crypto;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.security.KeyPair;
import javax.annotation.Nullable;
import javax.crypto.SecretKey;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.annotation.Nullable;
import javax.crypto.SecretKey;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.security.KeyPair;
@Getter @Getter
@EqualsAndHashCode @EqualsAndHashCode
@Slf4j @Slf4j

View file

@ -18,15 +18,11 @@
package haveno.common.crypto; package haveno.common.crypto;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.file.FileUtil; import haveno.common.file.FileUtil;
import org.jetbrains.annotations.NotNull; import static haveno.common.util.Preconditions.checkDir;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.SecretKey;
import javax.inject.Named;
import javax.inject.Singleton;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@ -48,8 +44,10 @@ import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec; import java.security.spec.KeySpec;
import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.RSAPublicKeySpec; import java.security.spec.RSAPublicKeySpec;
import javax.crypto.SecretKey;
import static haveno.common.util.Preconditions.checkDir; import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* KeyStorage uses password protection to save a symmetric key in PKCS#12 format. * KeyStorage uses password protection to save a symmetric key in PKCS#12 format.

View file

@ -17,13 +17,12 @@
package haveno.common.file; package haveno.common.file;
import lombok.extern.slf4j.Slf4j; import com.google.inject.Inject;
import com.google.inject.Singleton;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -17,7 +17,9 @@
package haveno.common.persistence; package haveno.common.persistence;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.name.Named;
import haveno.common.Timer; import haveno.common.Timer;
import haveno.common.UserThread; import haveno.common.UserThread;
import haveno.common.app.DevEnv; import haveno.common.app.DevEnv;
@ -30,13 +32,9 @@ import haveno.common.file.FileUtil;
import haveno.common.handlers.ResultHandler; import haveno.common.handlers.ResultHandler;
import haveno.common.proto.persistable.PersistableEnvelope; import haveno.common.proto.persistable.PersistableEnvelope;
import haveno.common.proto.persistable.PersistenceProtoResolver; import haveno.common.proto.persistable.PersistenceProtoResolver;
import haveno.common.util.SingleThreadExecutorUtils;
import haveno.common.util.GcUtil; import haveno.common.util.GcUtil;
import lombok.Getter; import static haveno.common.util.Preconditions.checkDir;
import lombok.extern.slf4j.Slf4j; import haveno.common.util.SingleThreadExecutorUtils;
import javax.annotation.Nullable;
import javax.inject.Named;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
@ -51,9 +49,9 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer; import java.util.function.Consumer;
import javax.annotation.Nullable;
import static com.google.common.base.Preconditions.checkNotNull; import lombok.Getter;
import static haveno.common.util.Preconditions.checkDir; import lombok.extern.slf4j.Slf4j;
/** /**
* Responsible for reading persisted data and writing it on disk. We read usually only at start-up and keep data in RAM. * Responsible for reading persisted data and writing it on disk. We read usually only at start-up and keep data in RAM.

View file

@ -19,6 +19,7 @@ package haveno.core.account.sign;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Charsets; import com.google.common.base.Charsets;
import com.google.inject.Inject;
import haveno.common.UserThread; import haveno.common.UserThread;
import haveno.common.crypto.CryptoException; import haveno.common.crypto.CryptoException;
import haveno.common.crypto.Hash; import haveno.common.crypto.Hash;
@ -34,11 +35,6 @@ import haveno.network.p2p.BootstrapListener;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import haveno.network.p2p.storage.P2PDataStorage; import haveno.network.p2p.storage.P2PDataStorage;
import haveno.network.p2p.storage.persistence.AppendOnlyDataStoreService; import haveno.network.p2p.storage.persistence.AppendOnlyDataStoreService;
import lombok.extern.slf4j.Slf4j;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.Utils;
import javax.inject.Inject;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.PublicKey; import java.security.PublicKey;
import java.security.SignatureException; import java.security.SignatureException;
@ -56,6 +52,9 @@ import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.Stack; import java.util.Stack;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.Utils;
@Slf4j @Slf4j
public class SignedWitnessService { public class SignedWitnessService {

View file

@ -17,17 +17,16 @@
package haveno.core.account.sign; package haveno.core.account.sign;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.persistence.PersistenceManager; import haveno.common.persistence.PersistenceManager;
import haveno.network.p2p.storage.P2PDataStorage; import haveno.network.p2p.storage.P2PDataStorage;
import haveno.network.p2p.storage.payload.PersistableNetworkPayload; import haveno.network.p2p.storage.payload.PersistableNetworkPayload;
import haveno.network.p2p.storage.persistence.MapStoreService; import haveno.network.p2p.storage.persistence.MapStoreService;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Named;
import java.io.File; import java.io.File;
import java.util.Map; import java.util.Map;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class SignedWitnessStorageService extends MapStoreService<SignedWitnessStore, PersistableNetworkPayload> { public class SignedWitnessStorageService extends MapStoreService<SignedWitnessStore, PersistableNetworkPayload> {

View file

@ -18,6 +18,8 @@
package haveno.core.account.witness; package haveno.core.account.witness;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.inject.Inject;
import haveno.common.UserThread; import haveno.common.UserThread;
import haveno.common.crypto.CryptoException; import haveno.common.crypto.CryptoException;
import haveno.common.crypto.Hash; import haveno.common.crypto.Hash;
@ -51,12 +53,6 @@ import haveno.network.p2p.BootstrapListener;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import haveno.network.p2p.storage.P2PDataStorage; import haveno.network.p2p.storage.P2PDataStorage;
import haveno.network.p2p.storage.persistence.AppendOnlyDataStoreService; import haveno.network.p2p.storage.persistence.AppendOnlyDataStoreService;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.Utils;
import javax.inject.Inject;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.PublicKey; import java.security.PublicKey;
import java.time.Clock; import java.time.Clock;
@ -74,8 +70,10 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import lombok.Getter;
import static com.google.common.base.Preconditions.checkNotNull; import lombok.extern.slf4j.Slf4j;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.Utils;
@Slf4j @Slf4j
public class AccountAgeWitnessService { public class AccountAgeWitnessService {

View file

@ -17,15 +17,14 @@
package haveno.core.account.witness; package haveno.core.account.witness;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.persistence.PersistenceManager; import haveno.common.persistence.PersistenceManager;
import haveno.network.p2p.storage.payload.PersistableNetworkPayload; import haveno.network.p2p.storage.payload.PersistableNetworkPayload;
import haveno.network.p2p.storage.persistence.HistoricalDataStoreService; import haveno.network.p2p.storage.persistence.HistoricalDataStoreService;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Named;
import java.io.File; import java.io.File;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class AccountAgeWitnessStorageService extends HistoricalDataStoreService<AccountAgeWitnessStore> { public class AccountAgeWitnessStorageService extends HistoricalDataStoreService<AccountAgeWitnessStore> {

View file

@ -18,6 +18,8 @@
package haveno.core.alert; package haveno.core.alert;
import com.google.common.base.Charsets; import com.google.common.base.Charsets;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import haveno.common.app.DevEnv; import haveno.common.app.DevEnv;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.crypto.KeyRing; import haveno.common.crypto.KeyRing;
@ -26,22 +28,18 @@ import haveno.network.p2p.P2PService;
import haveno.network.p2p.storage.HashMapChangedListener; import haveno.network.p2p.storage.HashMapChangedListener;
import haveno.network.p2p.storage.payload.ProtectedStorageEntry; import haveno.network.p2p.storage.payload.ProtectedStorageEntry;
import haveno.network.p2p.storage.payload.ProtectedStoragePayload; import haveno.network.p2p.storage.payload.ProtectedStoragePayload;
import java.math.BigInteger;
import java.security.SignatureException;
import java.util.Collection;
import javafx.beans.property.ObjectProperty; import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyObjectProperty; import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
import org.bitcoinj.core.ECKey; import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.Utils; import org.bitcoinj.core.Utils;
import static org.bitcoinj.core.Utils.HEX;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Named;
import java.math.BigInteger;
import java.security.SignatureException;
import java.util.Collection;
import static org.bitcoinj.core.Utils.HEX;
public class AlertManager { public class AlertManager {
private static final Logger log = LoggerFactory.getLogger(AlertManager.class); private static final Logger log = LoggerFactory.getLogger(AlertManager.class);

View file

@ -22,6 +22,8 @@ import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.MoreExecutors;
import com.google.common.util.concurrent.SettableFuture; import com.google.common.util.concurrent.SettableFuture;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import haveno.common.app.DevEnv; import haveno.common.app.DevEnv;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.crypto.KeyRing; import haveno.common.crypto.KeyRing;
@ -37,25 +39,21 @@ import haveno.network.p2p.network.MessageListener;
import haveno.network.p2p.network.NetworkNode; import haveno.network.p2p.network.NetworkNode;
import haveno.network.p2p.peers.keepalive.messages.Ping; import haveno.network.p2p.peers.keepalive.messages.Ping;
import haveno.network.p2p.peers.keepalive.messages.Pong; import haveno.network.p2p.peers.keepalive.messages.Pong;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.Utils;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Named;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.SignatureException; import java.security.SignatureException;
import java.util.Random; import java.util.Random;
import java.util.UUID; import java.util.UUID;
import java.util.function.Consumer; import java.util.function.Consumer;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javax.annotation.Nullable;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.Utils;
import static org.bitcoinj.core.Utils.HEX; import static org.bitcoinj.core.Utils.HEX;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PrivateNotificationManager implements MessageListener { public class PrivateNotificationManager implements MessageListener {
private static final Logger log = LoggerFactory.getLogger(PrivateNotificationManager.class); private static final Logger log = LoggerFactory.getLogger(PrivateNotificationManager.class);

View file

@ -17,6 +17,9 @@
package haveno.core.api; package haveno.core.api;
import static com.google.common.base.Preconditions.checkState;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.crypto.IncorrectPasswordException; import haveno.common.crypto.IncorrectPasswordException;
import haveno.common.crypto.KeyRing; import haveno.common.crypto.KeyRing;
@ -24,12 +27,6 @@ import haveno.common.crypto.KeyStorage;
import haveno.common.file.FileUtil; import haveno.common.file.FileUtil;
import haveno.common.persistence.PersistenceManager; import haveno.common.persistence.PersistenceManager;
import haveno.common.util.ZipUtils; import haveno.common.util.ZipUtils;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.File; import java.io.File;
import java.io.InputStream; import java.io.InputStream;
import java.io.PipedInputStream; import java.io.PipedInputStream;
@ -37,8 +34,9 @@ import java.io.PipedOutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
import lombok.Getter;
import static com.google.common.base.Preconditions.checkState; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
/** /**
* Manages the account state. A created account must have a password which encrypts * Manages the account state. A created account must have a password which encrypts

View file

@ -34,6 +34,8 @@
package haveno.core.api; package haveno.core.api;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.app.Version; import haveno.common.app.Version;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.crypto.IncorrectPasswordException; import haveno.common.crypto.IncorrectPasswordException;
@ -62,15 +64,6 @@ import haveno.core.trade.statistics.TradeStatistics3;
import haveno.core.trade.statistics.TradeStatisticsManager; import haveno.core.trade.statistics.TradeStatisticsManager;
import haveno.core.xmr.XmrNodeSettings; import haveno.core.xmr.XmrNodeSettings;
import haveno.proto.grpc.NotificationMessage; import haveno.proto.grpc.NotificationMessage;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import monero.common.MoneroRpcConnection;
import monero.wallet.model.MoneroDestination;
import monero.wallet.model.MoneroTxWallet;
import org.bitcoinj.core.Transaction;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.math.BigInteger; import java.math.BigInteger;
@ -80,6 +73,12 @@ import java.util.Set;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import java.util.function.Consumer; import java.util.function.Consumer;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import monero.common.MoneroRpcConnection;
import monero.wallet.model.MoneroDestination;
import monero.wallet.model.MoneroTxWallet;
import org.bitcoinj.core.Transaction;
/** /**
* Provides high level interface to functionality of core Haveno features. * Provides high level interface to functionality of core Haveno features.

View file

@ -17,13 +17,12 @@
package haveno.core.api; package haveno.core.api;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
@Singleton @Singleton
@Slf4j @Slf4j
public class CoreContext { public class CoreContext {

View file

@ -17,11 +17,17 @@
package haveno.core.api; package haveno.core.api;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.crypto.KeyRing; import haveno.common.crypto.KeyRing;
import haveno.common.handlers.ErrorMessageHandler; import haveno.common.handlers.ErrorMessageHandler;
import haveno.common.handlers.ResultHandler; import haveno.common.handlers.ResultHandler;
import haveno.core.support.SupportType; import haveno.core.support.SupportType;
import static haveno.core.support.SupportType.ARBITRATION;
import static haveno.core.support.SupportType.MEDIATION;
import static haveno.core.support.SupportType.REFUND;
import static haveno.core.support.SupportType.TRADE;
import haveno.core.support.dispute.arbitration.arbitrator.Arbitrator; import haveno.core.support.dispute.arbitration.arbitrator.Arbitrator;
import haveno.core.support.dispute.arbitration.arbitrator.ArbitratorManager; import haveno.core.support.dispute.arbitration.arbitrator.ArbitratorManager;
import haveno.core.support.dispute.mediation.mediator.Mediator; import haveno.core.support.dispute.mediation.mediator.Mediator;
@ -32,24 +38,16 @@ import haveno.core.user.User;
import haveno.core.xmr.wallet.XmrWalletService; import haveno.core.xmr.wallet.XmrWalletService;
import haveno.network.p2p.NodeAddress; import haveno.network.p2p.NodeAddress;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import lombok.extern.slf4j.Slf4j; import static java.lang.String.format;
import org.bitcoinj.core.ECKey; import static java.net.InetAddress.getLoopbackAddress;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.ArrayList; import java.util.ArrayList;
import static java.util.Arrays.asList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import lombok.extern.slf4j.Slf4j;
import static haveno.core.support.SupportType.ARBITRATION; import org.bitcoinj.core.ECKey;
import static haveno.core.support.SupportType.MEDIATION;
import static haveno.core.support.SupportType.REFUND;
import static haveno.core.support.SupportType.TRADE;
import static java.lang.String.format;
import static java.net.InetAddress.getLoopbackAddress;
import static java.util.Arrays.asList;
@Singleton @Singleton
@Slf4j @Slf4j

View file

@ -17,6 +17,9 @@
package haveno.core.api; package haveno.core.api;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named; import com.google.inject.name.Named;
import haveno.common.ThreadUtils; import haveno.common.ThreadUtils;
@ -43,18 +46,13 @@ import haveno.core.trade.TradeManager;
import haveno.core.util.FormattingUtils; import haveno.core.util.FormattingUtils;
import haveno.core.util.coin.CoinFormatter; import haveno.core.util.coin.CoinFormatter;
import haveno.core.xmr.wallet.XmrWalletService; import haveno.core.xmr.wallet.XmrWalletService;
import lombok.extern.slf4j.Slf4j; import static java.lang.String.format;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import lombok.extern.slf4j.Slf4j;
import static com.google.common.base.Preconditions.checkNotNull;
import static java.lang.String.format;
@Singleton @Singleton

View file

@ -17,18 +17,16 @@
package haveno.core.api; package haveno.core.api;
import lombok.extern.slf4j.Slf4j; import com.google.inject.Inject;
import com.google.inject.Singleton;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.BufferedReader; import java.io.BufferedReader;
import static java.io.File.separator;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import static java.io.File.separator;
import static java.lang.String.format; import static java.lang.String.format;
import static java.lang.System.out; import static java.lang.System.out;
import lombok.extern.slf4j.Slf4j;
@Singleton @Singleton
@Slf4j @Slf4j

View file

@ -1,17 +1,16 @@
package haveno.core.api; package haveno.core.api;
import com.google.inject.Singleton;
import haveno.core.api.model.TradeInfo; import haveno.core.api.model.TradeInfo;
import haveno.core.support.messages.ChatMessage; import haveno.core.support.messages.ChatMessage;
import haveno.core.trade.Trade; import haveno.core.trade.Trade;
import haveno.proto.grpc.NotificationMessage; import haveno.proto.grpc.NotificationMessage;
import haveno.proto.grpc.NotificationMessage.NotificationType; import haveno.proto.grpc.NotificationMessage.NotificationType;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Singleton;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
@Singleton @Singleton
@Slf4j @Slf4j

View file

@ -34,8 +34,13 @@
package haveno.core.api; package haveno.core.api;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.crypto.KeyRing; import haveno.common.crypto.KeyRing;
import haveno.common.handlers.ErrorMessageHandler; import haveno.common.handlers.ErrorMessageHandler;
import static haveno.common.util.MathUtils.exactMultiply;
import static haveno.common.util.MathUtils.roundDoubleToLong;
import static haveno.common.util.MathUtils.scaleUpByPowerOf10;
import haveno.core.locale.CurrencyUtil; import haveno.core.locale.CurrencyUtil;
import haveno.core.monetary.CryptoMoney; import haveno.core.monetary.CryptoMoney;
import haveno.core.monetary.Price; import haveno.core.monetary.Price;
@ -44,37 +49,30 @@ import haveno.core.offer.CreateOfferService;
import haveno.core.offer.Offer; import haveno.core.offer.Offer;
import haveno.core.offer.OfferBookService; import haveno.core.offer.OfferBookService;
import haveno.core.offer.OfferDirection; import haveno.core.offer.OfferDirection;
import static haveno.core.offer.OfferDirection.BUY;
import haveno.core.offer.OfferFilterService; import haveno.core.offer.OfferFilterService;
import haveno.core.offer.OfferFilterService.Result; import haveno.core.offer.OfferFilterService.Result;
import haveno.core.offer.OfferUtil; import haveno.core.offer.OfferUtil;
import haveno.core.offer.OpenOffer; import haveno.core.offer.OpenOffer;
import haveno.core.offer.OpenOfferManager; import haveno.core.offer.OpenOfferManager;
import haveno.core.payment.PaymentAccount; import haveno.core.payment.PaymentAccount;
import static haveno.core.payment.PaymentAccountUtil.isPaymentAccountValidForOffer;
import haveno.core.user.User; import haveno.core.user.User;
import haveno.core.util.PriceUtil; import haveno.core.util.PriceUtil;
import lombok.extern.slf4j.Slf4j; import static java.lang.String.format;
import org.bitcoinj.core.Transaction;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import static java.util.Comparator.comparing;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import static haveno.common.util.MathUtils.exactMultiply; import org.bitcoinj.core.Transaction;
import static haveno.common.util.MathUtils.roundDoubleToLong;
import static haveno.common.util.MathUtils.scaleUpByPowerOf10;
import static haveno.core.offer.OfferDirection.BUY;
import static haveno.core.payment.PaymentAccountUtil.isPaymentAccountValidForOffer;
import static java.lang.String.format;
import static java.util.Comparator.comparing;
@Singleton @Singleton
@Slf4j @Slf4j

View file

@ -17,13 +17,18 @@
package haveno.core.api; package haveno.core.api;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.asset.Asset; import haveno.asset.Asset;
import haveno.asset.AssetRegistry; import haveno.asset.AssetRegistry;
import static haveno.common.config.Config.baseCurrencyNetwork;
import haveno.core.account.witness.AccountAgeWitnessService; import haveno.core.account.witness.AccountAgeWitnessService;
import haveno.core.api.model.PaymentAccountForm; import haveno.core.api.model.PaymentAccountForm;
import haveno.core.api.model.PaymentAccountFormField; import haveno.core.api.model.PaymentAccountFormField;
import haveno.core.locale.CryptoCurrency; import haveno.core.locale.CryptoCurrency;
import haveno.core.locale.CurrencyUtil; import haveno.core.locale.CurrencyUtil;
import static haveno.core.locale.CurrencyUtil.findAsset;
import static haveno.core.locale.CurrencyUtil.getCryptoCurrency;
import haveno.core.locale.TradeCurrency; import haveno.core.locale.TradeCurrency;
import haveno.core.payment.AssetAccount; import haveno.core.payment.AssetAccount;
import haveno.core.payment.CryptoCurrencyAccount; import haveno.core.payment.CryptoCurrencyAccount;
@ -32,21 +37,14 @@ import haveno.core.payment.PaymentAccount;
import haveno.core.payment.PaymentAccountFactory; import haveno.core.payment.PaymentAccountFactory;
import haveno.core.payment.payload.PaymentMethod; import haveno.core.payment.payload.PaymentMethod;
import haveno.core.user.User; import haveno.core.user.User;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.File; import java.io.File;
import static java.lang.String.format;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import static haveno.common.config.Config.baseCurrencyNetwork;
import static haveno.core.locale.CurrencyUtil.findAsset;
import static haveno.core.locale.CurrencyUtil.getCryptoCurrency;
import static java.lang.String.format;
@Singleton @Singleton
@Slf4j @Slf4j

View file

@ -35,6 +35,8 @@
package haveno.core.api; package haveno.core.api;
import com.google.common.math.LongMath; import com.google.common.math.LongMath;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.core.api.model.MarketDepthInfo; import haveno.core.api.model.MarketDepthInfo;
import haveno.core.api.model.MarketPriceInfo; import haveno.core.api.model.MarketPriceInfo;
import haveno.core.locale.CurrencyUtil; import haveno.core.locale.CurrencyUtil;
@ -44,16 +46,13 @@ import haveno.core.offer.OfferBookService;
import haveno.core.offer.OfferDirection; import haveno.core.offer.OfferDirection;
import haveno.core.provider.price.PriceFeedService; import haveno.core.provider.price.PriceFeedService;
import haveno.core.trade.HavenoUtils; import haveno.core.trade.HavenoUtils;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.Comparator; import java.util.Comparator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
@Singleton @Singleton

View file

@ -34,6 +34,8 @@
package haveno.core.api; package haveno.core.api;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.handlers.ErrorMessageHandler; import haveno.common.handlers.ErrorMessageHandler;
import haveno.common.handlers.ResultHandler; import haveno.common.handlers.ResultHandler;
import haveno.core.offer.Offer; import haveno.core.offer.Offer;
@ -55,20 +57,16 @@ import haveno.core.user.User;
import haveno.core.util.coin.CoinUtil; import haveno.core.util.coin.CoinUtil;
import haveno.core.util.validation.BtcAddressValidator; import haveno.core.util.validation.BtcAddressValidator;
import haveno.core.xmr.model.AddressEntry; import haveno.core.xmr.model.AddressEntry;
import static haveno.core.xmr.model.AddressEntry.Context.TRADE_PAYOUT;
import haveno.core.xmr.wallet.BtcWalletService; import haveno.core.xmr.wallet.BtcWalletService;
import lombok.extern.slf4j.Slf4j; import static java.lang.String.format;
import org.bitcoinj.core.Coin;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.function.Consumer; import java.util.function.Consumer;
import lombok.extern.slf4j.Slf4j;
import static haveno.core.xmr.model.AddressEntry.Context.TRADE_PAYOUT; import org.bitcoinj.core.Coin;
import static java.lang.String.format;
@Singleton @Singleton
@Slf4j @Slf4j

View file

@ -37,6 +37,9 @@ package haveno.core.api;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader; import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache; import com.google.common.cache.LoadingCache;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import haveno.common.Timer; import haveno.common.Timer;
import haveno.common.UserThread; import haveno.common.UserThread;
import haveno.core.api.model.AddressBalanceInfo; import haveno.core.api.model.AddressBalanceInfo;
@ -46,13 +49,22 @@ import haveno.core.api.model.XmrBalanceInfo;
import haveno.core.app.AppStartupState; import haveno.core.app.AppStartupState;
import haveno.core.user.Preferences; import haveno.core.user.Preferences;
import haveno.core.util.FormattingUtils; import haveno.core.util.FormattingUtils;
import static haveno.core.util.ParsingUtils.parseToCoin;
import haveno.core.util.coin.CoinFormatter; import haveno.core.util.coin.CoinFormatter;
import haveno.core.xmr.Balances; import haveno.core.xmr.Balances;
import haveno.core.xmr.model.AddressEntry; import haveno.core.xmr.model.AddressEntry;
import haveno.core.xmr.setup.WalletsSetup; import haveno.core.xmr.setup.WalletsSetup;
import haveno.core.xmr.wallet.BtcWalletService; import haveno.core.xmr.wallet.BtcWalletService;
import static haveno.core.xmr.wallet.Restrictions.getMinNonDustOutput;
import haveno.core.xmr.wallet.WalletsManager; import haveno.core.xmr.wallet.WalletsManager;
import haveno.core.xmr.wallet.XmrWalletService; import haveno.core.xmr.wallet.XmrWalletService;
import static java.lang.String.format;
import java.util.List;
import java.util.Optional;
import static java.util.concurrent.TimeUnit.SECONDS;
import java.util.function.Function;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import monero.wallet.model.MoneroDestination; import monero.wallet.model.MoneroDestination;
import monero.wallet.model.MoneroTxWallet; import monero.wallet.model.MoneroTxWallet;
@ -64,20 +76,6 @@ import org.bitcoinj.core.TransactionConfidence;
import org.bitcoinj.crypto.KeyCrypterScrypt; import org.bitcoinj.crypto.KeyCrypterScrypt;
import org.bouncycastle.crypto.params.KeyParameter; import org.bouncycastle.crypto.params.KeyParameter;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import static haveno.core.util.ParsingUtils.parseToCoin;
import static haveno.core.xmr.wallet.Restrictions.getMinNonDustOutput;
import static java.lang.String.format;
import static java.util.concurrent.TimeUnit.SECONDS;
@Singleton @Singleton
@Slf4j @Slf4j
class CoreWalletsService { class CoreWalletsService {

View file

@ -17,6 +17,8 @@
package haveno.core.api; package haveno.core.api;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.ThreadUtils; import haveno.common.ThreadUtils;
import haveno.common.UserThread; import haveno.common.UserThread;
import haveno.common.app.DevEnv; import haveno.common.app.DevEnv;
@ -26,13 +28,16 @@ import haveno.core.trade.HavenoUtils;
import haveno.core.user.Preferences; import haveno.core.user.Preferences;
import haveno.core.xmr.model.EncryptedConnectionList; import haveno.core.xmr.model.EncryptedConnectionList;
import haveno.core.xmr.nodes.XmrNodes; import haveno.core.xmr.nodes.XmrNodes;
import haveno.core.xmr.nodes.XmrNodesSetupPreferences;
import haveno.core.xmr.nodes.XmrNodes.XmrNode; import haveno.core.xmr.nodes.XmrNodes.XmrNode;
import haveno.core.xmr.nodes.XmrNodesSetupPreferences;
import haveno.core.xmr.setup.DownloadListener; import haveno.core.xmr.setup.DownloadListener;
import haveno.core.xmr.setup.WalletsSetup; import haveno.core.xmr.setup.WalletsSetup;
import haveno.network.Socks5ProxyProvider; import haveno.network.Socks5ProxyProvider;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import haveno.network.p2p.P2PServiceListener; import haveno.network.p2p.P2PServiceListener;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import javafx.beans.property.IntegerProperty; import javafx.beans.property.IntegerProperty;
import javafx.beans.property.LongProperty; import javafx.beans.property.LongProperty;
import javafx.beans.property.ObjectProperty; import javafx.beans.property.ObjectProperty;
@ -53,12 +58,6 @@ import monero.daemon.MoneroDaemonRpc;
import monero.daemon.model.MoneroDaemonInfo; import monero.daemon.model.MoneroDaemonInfo;
import monero.daemon.model.MoneroPeer; import monero.daemon.model.MoneroPeer;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Singleton @Singleton
public final class XmrConnectionService { public final class XmrConnectionService {
@ -387,7 +386,7 @@ public final class XmrConnectionService {
public void onNodeStopped() { public void onNodeStopped() {
log.info("Local monero node stopped"); log.info("Local monero node stopped");
} }
@Override @Override
public void onConnectionChanged(MoneroRpcConnection connection) { public void onConnectionChanged(MoneroRpcConnection connection) {
log.info("Local monerod connection changed: " + connection); log.info("Local monerod connection changed: " + connection);
@ -395,7 +394,7 @@ public final class XmrConnectionService {
// skip if ignored // skip if ignored
if (isShutDownStarted || !connectionManager.getAutoSwitch() || !accountService.isAccountOpen() || if (isShutDownStarted || !connectionManager.getAutoSwitch() || !accountService.isAccountOpen() ||
!connectionManager.hasConnection(connection.getUri()) || xmrLocalNode.shouldBeIgnored()) return; !connectionManager.hasConnection(connection.getUri()) || xmrLocalNode.shouldBeIgnored()) return;
// check connection // check connection
boolean isConnected = false; boolean isConnected = false;
if (xmrLocalNode.isConnected()) { if (xmrLocalNode.isConnected()) {
@ -646,7 +645,7 @@ public final class XmrConnectionService {
// skip if shut down or connected // skip if shut down or connected
if (isShutDownStarted || Boolean.TRUE.equals(isConnected())) return; if (isShutDownStarted || Boolean.TRUE.equals(isConnected())) return;
// log error message periodically // log error message periodically
if ((lastErrorTimestamp == null || System.currentTimeMillis() - lastErrorTimestamp > MIN_ERROR_LOG_PERIOD_MS)) { if ((lastErrorTimestamp == null || System.currentTimeMillis() - lastErrorTimestamp > MIN_ERROR_LOG_PERIOD_MS)) {
lastErrorTimestamp = System.currentTimeMillis(); lastErrorTimestamp = System.currentTimeMillis();

View file

@ -14,9 +14,10 @@
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with Haveno. If not, see <http://www.gnu.org/licenses/>. * along with Haveno. If not, see <http://www.gnu.org/licenses/>.
*/ */
package haveno.core.api; package haveno.core.api;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.config.BaseCurrencyNetwork; import haveno.common.config.BaseCurrencyNetwork;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.util.Utilities; import haveno.common.util.Utilities;
@ -24,16 +25,15 @@ import haveno.core.trade.HavenoUtils;
import haveno.core.user.Preferences; import haveno.core.user.Preferences;
import haveno.core.xmr.XmrNodeSettings; import haveno.core.xmr.XmrNodeSettings;
import haveno.core.xmr.nodes.XmrNodes; import haveno.core.xmr.nodes.XmrNodes;
import lombok.extern.slf4j.Slf4j;
import monero.common.MoneroConnectionManager;
import monero.common.MoneroUtils;
import monero.daemon.MoneroDaemonRpc;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import lombok.extern.slf4j.Slf4j;
import monero.common.MoneroConnectionManager;
import monero.common.MoneroUtils;
import monero.daemon.MoneroDaemonRpc;
/** /**
* Start and stop or connect to a local Monero node. * Start and stop or connect to a local Monero node.
@ -81,7 +81,7 @@ public class XmrLocalNode {
this.config = config; this.config = config;
this.preferences = preferences; this.preferences = preferences;
this.daemon = new MoneroDaemonRpc("http://" + HavenoUtils.LOOPBACK_HOST + ":" + rpcPort); this.daemon = new MoneroDaemonRpc("http://" + HavenoUtils.LOOPBACK_HOST + ":" + rpcPort);
// initialize connection manager to listen to local connection // initialize connection manager to listen to local connection
this.connectionManager = new MoneroConnectionManager().setConnection(daemon.getRpcConnection()); this.connectionManager = new MoneroConnectionManager().setConnection(daemon.getRpcConnection());
this.connectionManager.setTimeout(REFRESH_PERIOD_LOCAL_MS); this.connectionManager.setTimeout(REFRESH_PERIOD_LOCAL_MS);

View file

@ -17,6 +17,8 @@
package haveno.core.app; package haveno.core.app;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.core.api.XmrConnectionService; import haveno.core.api.XmrConnectionService;
import haveno.core.api.CoreNotificationService; import haveno.core.api.CoreNotificationService;
import haveno.core.xmr.wallet.XmrWalletService; import haveno.core.xmr.wallet.XmrWalletService;
@ -29,9 +31,6 @@ import lombok.extern.slf4j.Slf4j;
import org.fxmisc.easybind.EasyBind; import org.fxmisc.easybind.EasyBind;
import org.fxmisc.easybind.monadic.MonadicBinding; import org.fxmisc.easybind.monadic.MonadicBinding;
import javax.inject.Inject;
import javax.inject.Singleton;
/** /**
* We often need to wait until network and wallet is ready or other combination of startup states. * We often need to wait until network and wallet is ready or other combination of startup states.
* To avoid those repeated checks for the state or setting of listeners on different domains we provide here a * To avoid those repeated checks for the state or setting of listeners on different domains we provide here a

View file

@ -17,21 +17,13 @@
package haveno.core.app; package haveno.core.app;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.file.FileUtil; import haveno.common.file.FileUtil;
import haveno.common.file.ResourceNotFoundException; import haveno.common.file.ResourceNotFoundException;
import haveno.common.util.Utilities; import haveno.common.util.Utilities;
import haveno.core.user.Preferences; import haveno.core.user.Preferences;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Paths; import java.nio.file.Paths;
@ -43,6 +35,13 @@ import java.util.concurrent.CountDownLatch;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.function.Supplier; import java.util.function.Supplier;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import lombok.extern.slf4j.Slf4j;
/** /**
* Prevents that Haveno gets hibernated from the OS. On OSX there is a tool called caffeinate but it seems it does not * Prevents that Haveno gets hibernated from the OS. On OSX there is a tool called caffeinate but it seems it does not

View file

@ -17,6 +17,7 @@
package haveno.core.app; package haveno.core.app;
import com.google.inject.Inject;
import haveno.common.ClockWatcher; import haveno.common.ClockWatcher;
import haveno.common.persistence.PersistenceManager; import haveno.common.persistence.PersistenceManager;
import haveno.core.account.sign.SignedWitnessService; import haveno.core.account.sign.SignedWitnessService;
@ -50,8 +51,6 @@ import haveno.core.user.User;
import haveno.core.xmr.Balances; import haveno.core.xmr.Balances;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import haveno.network.p2p.mailbox.MailboxMessageService; import haveno.network.p2p.mailbox.MailboxMessageService;
import javax.inject.Inject;
import java.util.List; import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.stream.Collectors; import java.util.stream.Collectors;

View file

@ -34,6 +34,9 @@
package haveno.core.app; package haveno.core.app;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import haveno.common.Timer; import haveno.common.Timer;
import haveno.common.UserThread; import haveno.common.UserThread;
import haveno.common.app.DevEnv; import haveno.common.app.DevEnv;
@ -65,8 +68,8 @@ import haveno.core.trade.HavenoUtils;
import haveno.core.trade.TradeManager; import haveno.core.trade.TradeManager;
import haveno.core.trade.TradeTxException; import haveno.core.trade.TradeTxException;
import haveno.core.user.Preferences; import haveno.core.user.Preferences;
import haveno.core.user.User;
import haveno.core.user.Preferences.UseTorForXmr; import haveno.core.user.Preferences.UseTorForXmr;
import haveno.core.user.User;
import haveno.core.util.FormattingUtils; import haveno.core.util.FormattingUtils;
import haveno.core.util.coin.CoinFormatter; import haveno.core.util.coin.CoinFormatter;
import haveno.core.xmr.model.AddressEntry; import haveno.core.xmr.model.AddressEntry;
@ -79,24 +82,6 @@ import haveno.network.p2p.NodeAddress;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import haveno.network.p2p.storage.payload.PersistableNetworkPayload; import haveno.network.p2p.storage.payload.PersistableNetworkPayload;
import haveno.network.utils.Utils; import haveno.network.utils.Utils;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ChangeListener;
import javafx.collections.SetChangeListener;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.bitcoinj.core.Coin;
import org.fxmisc.easybind.EasyBind;
import org.fxmisc.easybind.monadic.MonadicBinding;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileWriter; import java.io.FileWriter;
@ -111,6 +96,20 @@ import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Consumer; import java.util.function.Consumer;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ChangeListener;
import javafx.collections.SetChangeListener;
import javax.annotation.Nullable;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.bitcoinj.core.Coin;
import org.fxmisc.easybind.EasyBind;
import org.fxmisc.easybind.monadic.MonadicBinding;
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -17,6 +17,8 @@
package haveno.core.app; package haveno.core.app;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.UserThread; import haveno.common.UserThread;
import haveno.core.api.XmrConnectionService; import haveno.core.api.XmrConnectionService;
import haveno.core.locale.Res; import haveno.core.locale.Res;
@ -27,20 +29,17 @@ import haveno.network.p2p.P2PServiceListener;
import haveno.network.p2p.network.CloseConnectionReason; import haveno.network.p2p.network.CloseConnectionReason;
import haveno.network.p2p.network.Connection; import haveno.network.p2p.network.Connection;
import haveno.network.p2p.network.ConnectionListener; import haveno.network.p2p.network.ConnectionListener;
import java.util.function.Consumer;
import javafx.beans.property.BooleanProperty; import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import javax.annotation.Nullable;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.fxmisc.easybind.EasyBind; import org.fxmisc.easybind.EasyBind;
import org.fxmisc.easybind.monadic.MonadicBinding; import org.fxmisc.easybind.monadic.MonadicBinding;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.function.Consumer;
@Singleton @Singleton
@Slf4j @Slf4j
public class P2PNetworkSetup { public class P2PNetworkSetup {

View file

@ -17,20 +17,18 @@
package haveno.core.app; package haveno.core.app;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.file.FileUtil; import haveno.common.file.FileUtil;
import haveno.common.handlers.ErrorMessageHandler; import haveno.common.handlers.ErrorMessageHandler;
import lombok.extern.slf4j.Slf4j; import static haveno.common.util.Preconditions.checkDir;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Paths; import java.nio.file.Paths;
import javax.annotation.Nullable;
import static haveno.common.util.Preconditions.checkDir; import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -34,6 +34,8 @@
package haveno.core.app; package haveno.core.app;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.UserThread; import haveno.common.UserThread;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.core.api.CoreContext; import haveno.core.api.CoreContext;
@ -49,12 +51,15 @@ import haveno.core.xmr.exceptions.RejectedTxException;
import haveno.core.xmr.setup.WalletsSetup; import haveno.core.xmr.setup.WalletsSetup;
import haveno.core.xmr.wallet.WalletsManager; import haveno.core.xmr.wallet.WalletsManager;
import haveno.core.xmr.wallet.XmrWalletService; import haveno.core.xmr.wallet.XmrWalletService;
import java.util.concurrent.TimeoutException;
import java.util.function.Consumer;
import javafx.beans.property.DoubleProperty; import javafx.beans.property.DoubleProperty;
import javafx.beans.property.ObjectProperty; import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleDoubleProperty; import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import javax.annotation.Nullable;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import monero.common.MoneroUtils; import monero.common.MoneroUtils;
@ -64,12 +69,6 @@ import org.bitcoinj.store.ChainFileLockedException;
import org.fxmisc.easybind.EasyBind; import org.fxmisc.easybind.EasyBind;
import org.fxmisc.easybind.monadic.MonadicBinding; import org.fxmisc.easybind.monadic.MonadicBinding;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.concurrent.TimeoutException;
import java.util.function.Consumer;
@Slf4j @Slf4j
@Singleton @Singleton
public class WalletAppSetup { public class WalletAppSetup {
@ -135,7 +134,7 @@ public class WalletAppSetup {
(numConnectionUpdates, walletDownloadPercentage, walletHeight, exception, errorMsg) -> { (numConnectionUpdates, walletDownloadPercentage, walletHeight, exception, errorMsg) -> {
String result; String result;
if (exception == null && errorMsg == null) { if (exception == null && errorMsg == null) {
// update wallet sync progress // update wallet sync progress
double walletDownloadPercentageD = (double) walletDownloadPercentage; double walletDownloadPercentageD = (double) walletDownloadPercentage;
xmrWalletSyncProgress.set(walletDownloadPercentageD); xmrWalletSyncProgress.set(walletDownloadPercentageD);

View file

@ -17,12 +17,11 @@
package haveno.core.app.misc; package haveno.core.app.misc;
import com.google.inject.Inject;
import haveno.common.app.Version; import haveno.common.app.Version;
import haveno.common.config.Config; import haveno.common.config.Config;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
@Slf4j @Slf4j
public abstract class AppSetup { public abstract class AppSetup {
protected final Config config; protected final Config config;

View file

@ -17,6 +17,7 @@
package haveno.core.app.misc; package haveno.core.app.misc;
import com.google.inject.Inject;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.persistence.PersistenceManager; import haveno.common.persistence.PersistenceManager;
import haveno.common.proto.persistable.PersistedDataHost; import haveno.common.proto.persistable.PersistedDataHost;
@ -31,13 +32,11 @@ import haveno.network.p2p.network.Connection;
import haveno.network.p2p.network.ConnectionListener; import haveno.network.p2p.network.ConnectionListener;
import haveno.network.p2p.peers.PeerManager; import haveno.network.p2p.peers.PeerManager;
import haveno.network.p2p.storage.P2PDataStorage; import haveno.network.p2p.storage.P2PDataStorage;
import java.util.ArrayList;
import javafx.beans.property.BooleanProperty; import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleBooleanProperty;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import java.util.ArrayList;
@Slf4j @Slf4j
public class AppSetupWithP2P extends AppSetup { public class AppSetupWithP2P extends AppSetup {
protected final P2PService p2PService; protected final P2PService p2PService;

View file

@ -17,6 +17,9 @@
package haveno.core.filter; package haveno.core.filter;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import haveno.common.app.DevEnv; import haveno.common.app.DevEnv;
import haveno.common.app.Version; import haveno.common.app.Version;
import haveno.common.config.Config; import haveno.common.config.Config;
@ -35,16 +38,6 @@ import haveno.network.p2p.P2PServiceListener;
import haveno.network.p2p.network.BanFilter; import haveno.network.p2p.network.BanFilter;
import haveno.network.p2p.storage.HashMapChangedListener; import haveno.network.p2p.storage.HashMapChangedListener;
import haveno.network.p2p.storage.payload.ProtectedStorageEntry; import haveno.network.p2p.storage.payload.ProtectedStorageEntry;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import lombok.extern.slf4j.Slf4j;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.Sha256Hash;
import org.bouncycastle.util.encoders.Base64;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Named;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.math.BigInteger; import java.math.BigInteger;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
@ -58,9 +51,14 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Consumer; import java.util.function.Consumer;
import javafx.beans.property.ObjectProperty;
import static com.google.common.base.Preconditions.checkNotNull; import javafx.beans.property.SimpleObjectProperty;
import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.Sha256Hash;
import static org.bitcoinj.core.Utils.HEX; import static org.bitcoinj.core.Utils.HEX;
import org.bouncycastle.util.encoders.Base64;
/** /**
* We only support one active filter, if we receive multiple we use the one with the more recent creationDate. * We only support one active filter, if we receive multiple we use the one with the more recent creationDate.

View file

@ -17,17 +17,16 @@
package haveno.core.network; package haveno.core.network;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.network.p2p.NodeAddress; import haveno.network.p2p.NodeAddress;
import haveno.network.p2p.network.BanFilter; import haveno.network.p2p.network.BanFilter;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Named;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.function.Predicate; import java.util.function.Predicate;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class CoreBanFilter implements BanFilter { public class CoreBanFilter implements BanFilter {

View file

@ -20,6 +20,8 @@ package haveno.core.network.p2p.inventory;
import com.google.common.base.Enums; import com.google.common.base.Enums;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import haveno.common.app.Version; import haveno.common.app.Version;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.proto.network.NetworkEnvelope; import haveno.common.proto.network.NetworkEnvelope;
@ -37,13 +39,10 @@ import haveno.network.p2p.network.Statistic;
import haveno.network.p2p.peers.PeerManager; import haveno.network.p2p.peers.PeerManager;
import haveno.network.p2p.storage.P2PDataStorage; import haveno.network.p2p.storage.P2PDataStorage;
import haveno.network.p2p.storage.payload.ProtectedStorageEntry; import haveno.network.p2p.storage.payload.ProtectedStorageEntry;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Named;
import java.lang.management.ManagementFactory; import java.lang.management.ManagementFactory;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class GetInventoryRequestHandler implements MessageListener { public class GetInventoryRequestHandler implements MessageListener {

View file

@ -17,16 +17,15 @@
package haveno.core.network.p2p.inventory; package haveno.core.network.p2p.inventory;
import com.google.inject.Inject;
import haveno.common.handlers.ErrorMessageHandler; import haveno.common.handlers.ErrorMessageHandler;
import haveno.core.network.p2p.inventory.model.InventoryItem; import haveno.core.network.p2p.inventory.model.InventoryItem;
import haveno.network.p2p.NodeAddress; import haveno.network.p2p.NodeAddress;
import haveno.network.p2p.network.NetworkNode; import haveno.network.p2p.network.NetworkNode;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.function.Consumer; import java.util.function.Consumer;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class GetInventoryRequestManager { public class GetInventoryRequestManager {

View file

@ -17,13 +17,11 @@
package haveno.core.network.p2p.seed; package haveno.core.network.p2p.seed;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.network.p2p.NodeAddress; import haveno.network.p2p.NodeAddress;
import haveno.network.p2p.seed.SeedNodeRepository; import haveno.network.p2p.seed.SeedNodeRepository;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
@ -35,6 +33,7 @@ import java.util.Optional;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
// If a new BaseCurrencyNetwork type gets added we need to add the resource file for it as well! // If a new BaseCurrencyNetwork type gets added we need to add the resource file for it as well!
@Slf4j @Slf4j

View file

@ -18,16 +18,15 @@
package haveno.core.notifications; package haveno.core.notifications;
import com.google.common.base.Charsets; import com.google.common.base.Charsets;
import lombok.extern.slf4j.Slf4j; import com.google.inject.Inject;
import org.apache.commons.codec.binary.Base64; import com.google.inject.Singleton;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException; import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import javax.inject.Inject; import lombok.extern.slf4j.Slf4j;
import javax.inject.Singleton; import org.apache.commons.codec.binary.Base64;
import java.security.NoSuchAlgorithmException;
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -18,15 +18,14 @@
package haveno.core.notifications; package haveno.core.notifications;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.util.Arrays;
import javax.annotation.Nullable;
import lombok.Data; import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.Arrays;
@Data @Data
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -17,6 +17,8 @@
package haveno.core.notifications; package haveno.core.notifications;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
@ -25,12 +27,15 @@ import com.google.common.util.concurrent.MoreExecutors;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import com.google.inject.name.Named;
import haveno.common.UserThread; import haveno.common.UserThread;
import haveno.common.app.Version; import haveno.common.app.Version;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.util.Utilities; import haveno.common.util.Utilities;
import haveno.core.user.Preferences; import haveno.core.user.Preferences;
import haveno.network.http.HttpClient; import haveno.network.http.HttpClient;
import java.util.UUID;
import java.util.function.Consumer;
import javafx.beans.property.BooleanProperty; import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleBooleanProperty;
import lombok.Getter; import lombok.Getter;
@ -38,13 +43,6 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Hex; import org.apache.commons.codec.binary.Hex;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.inject.Named;
import java.util.UUID;
import java.util.function.Consumer;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
@Slf4j @Slf4j
@Singleton @Singleton
public class MobileNotificationService { public class MobileNotificationService {

View file

@ -17,11 +17,10 @@
package haveno.core.notifications; package haveno.core.notifications;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
@Slf4j @Slf4j
@Singleton @Singleton
public class MobileNotificationValidator { public class MobileNotificationValidator {

View file

@ -17,6 +17,8 @@
package haveno.core.notifications.alerts; package haveno.core.notifications.alerts;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.core.locale.Res; import haveno.core.locale.Res;
import haveno.core.notifications.MobileMessage; import haveno.core.notifications.MobileMessage;
import haveno.core.notifications.MobileMessageType; import haveno.core.notifications.MobileMessageType;
@ -27,14 +29,11 @@ import haveno.core.support.dispute.mediation.MediationManager;
import haveno.core.support.dispute.refund.RefundManager; import haveno.core.support.dispute.refund.RefundManager;
import haveno.core.support.messages.ChatMessage; import haveno.core.support.messages.ChatMessage;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import java.util.UUID;
import javafx.collections.ListChangeListener; import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.UUID;
@Slf4j @Slf4j
@Singleton @Singleton
public class DisputeMsgEvents { public class DisputeMsgEvents {

View file

@ -17,19 +17,18 @@
package haveno.core.notifications.alerts; package haveno.core.notifications.alerts;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.core.locale.Res; import haveno.core.locale.Res;
import haveno.core.notifications.MobileMessage; import haveno.core.notifications.MobileMessage;
import haveno.core.notifications.MobileMessageType; import haveno.core.notifications.MobileMessageType;
import haveno.core.notifications.MobileNotificationService; import haveno.core.notifications.MobileNotificationService;
import haveno.core.offer.OpenOffer; import haveno.core.offer.OpenOffer;
import haveno.core.offer.OpenOfferManager; import haveno.core.offer.OpenOfferManager;
import java.util.UUID;
import javafx.collections.ListChangeListener; import javafx.collections.ListChangeListener;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.UUID;
@Slf4j @Slf4j
@Singleton @Singleton
public class MyOfferTakenEvents { public class MyOfferTakenEvents {

View file

@ -17,6 +17,8 @@
package haveno.core.notifications.alerts; package haveno.core.notifications.alerts;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.crypto.PubKeyRingProvider; import haveno.common.crypto.PubKeyRingProvider;
import haveno.core.locale.Res; import haveno.core.locale.Res;
import haveno.core.notifications.MobileMessage; import haveno.core.notifications.MobileMessage;
@ -24,14 +26,11 @@ import haveno.core.notifications.MobileMessageType;
import haveno.core.notifications.MobileNotificationService; import haveno.core.notifications.MobileNotificationService;
import haveno.core.trade.Trade; import haveno.core.trade.Trade;
import haveno.core.trade.TradeManager; import haveno.core.trade.TradeManager;
import javafx.collections.ListChangeListener;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import javafx.collections.ListChangeListener;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -17,6 +17,8 @@
package haveno.core.notifications.alerts.market; package haveno.core.notifications.alerts.market;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.crypto.KeyRing; import haveno.common.crypto.KeyRing;
import haveno.common.util.MathUtils; import haveno.common.util.MathUtils;
import haveno.core.locale.CurrencyUtil; import haveno.core.locale.CurrencyUtil;
@ -34,12 +36,9 @@ import haveno.core.provider.price.MarketPrice;
import haveno.core.provider.price.PriceFeedService; import haveno.core.provider.price.PriceFeedService;
import haveno.core.user.User; import haveno.core.user.User;
import haveno.core.util.FormattingUtils; import haveno.core.util.FormattingUtils;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -17,6 +17,8 @@
package haveno.core.notifications.alerts.price; package haveno.core.notifications.alerts.price;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.util.MathUtils; import haveno.common.util.MathUtils;
import haveno.core.locale.CurrencyUtil; import haveno.core.locale.CurrencyUtil;
import haveno.core.locale.Res; import haveno.core.locale.Res;
@ -31,9 +33,6 @@ import haveno.core.user.User;
import haveno.core.util.FormattingUtils; import haveno.core.util.FormattingUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
@Slf4j @Slf4j
@Singleton @Singleton
public class PriceAlert { public class PriceAlert {

View file

@ -17,6 +17,8 @@
package haveno.core.offer; package haveno.core.offer;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.app.Version; import haveno.common.app.Version;
import haveno.common.crypto.PubKeyRingProvider; import haveno.common.crypto.PubKeyRingProvider;
import haveno.common.util.Utilities; import haveno.common.util.Utilities;
@ -38,15 +40,12 @@ import haveno.core.xmr.wallet.Restrictions;
import haveno.core.xmr.wallet.XmrWalletService; import haveno.core.xmr.wallet.XmrWalletService;
import haveno.network.p2p.NodeAddress; import haveno.network.p2p.NodeAddress;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -34,6 +34,8 @@
package haveno.core.offer; package haveno.core.offer;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import common.utils.GenUtils; import common.utils.GenUtils;
import haveno.common.UserThread; import haveno.common.UserThread;
import haveno.common.config.Config; import haveno.common.config.Config;
@ -51,13 +53,6 @@ import haveno.network.p2p.BootstrapListener;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import haveno.network.p2p.storage.HashMapChangedListener; import haveno.network.p2p.storage.HashMapChangedListener;
import haveno.network.p2p.storage.payload.ProtectedStorageEntry; import haveno.network.p2p.storage.payload.ProtectedStorageEntry;
import monero.daemon.model.MoneroKeyImageSpentStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Named;
import java.io.File; import java.io.File;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedList; import java.util.LinkedList;
@ -65,13 +60,14 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Nullable;
import monero.daemon.model.MoneroKeyImageSpentStatus;
/** /**
* Handles storage and retrieval of offers. * Handles storage and retrieval of offers.
* Uses an invalidation flag to only request the full offer map in case there was a change (anyone has added or removed an offer). * Uses an invalidation flag to only request the full offer map in case there was a change (anyone has added or removed an offer).
*/ */
public class OfferBookService { public class OfferBookService {
private static final Logger log = LoggerFactory.getLogger(OfferBookService.class);
private final P2PService p2PService; private final P2PService p2PService;
private final PriceFeedService priceFeedService; private final PriceFeedService priceFeedService;

View file

@ -17,6 +17,8 @@
package haveno.core.offer; package haveno.core.offer;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.app.Version; import haveno.common.app.Version;
import haveno.core.account.witness.AccountAgeWitnessService; import haveno.core.account.witness.AccountAgeWitnessService;
import haveno.core.filter.FilterManager; import haveno.core.filter.FilterManager;
@ -28,18 +30,15 @@ import haveno.core.user.Preferences;
import haveno.core.user.User; import haveno.core.user.User;
import haveno.network.p2p.NodeAddress; import haveno.network.p2p.NodeAddress;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import javafx.collections.SetChangeListener;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.bitcoinj.core.Coin;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javafx.collections.SetChangeListener;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.bitcoinj.core.Coin;
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -17,9 +17,15 @@
package haveno.core.offer; package haveno.core.offer;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.app.Capabilities; import haveno.common.app.Capabilities;
import haveno.common.app.Version; import haveno.common.app.Version;
import haveno.common.util.MathUtils; import haveno.common.util.MathUtils;
import static haveno.common.util.MathUtils.roundDoubleToLong;
import static haveno.common.util.MathUtils.scaleUpByPowerOf10;
import haveno.common.util.Utilities; import haveno.common.util.Utilities;
import haveno.core.account.witness.AccountAgeWitnessService; import haveno.core.account.witness.AccountAgeWitnessService;
import haveno.core.filter.FilterManager; import haveno.core.filter.FilterManager;
@ -28,8 +34,16 @@ import haveno.core.locale.Res;
import haveno.core.monetary.Price; import haveno.core.monetary.Price;
import haveno.core.monetary.TraditionalMoney; import haveno.core.monetary.TraditionalMoney;
import haveno.core.monetary.Volume; import haveno.core.monetary.Volume;
import haveno.core.payment.PayByMailAccount; import static haveno.core.offer.OfferPayload.ACCOUNT_AGE_WITNESS_HASH;
import static haveno.core.offer.OfferPayload.CAPABILITIES;
import static haveno.core.offer.OfferPayload.F2F_CITY;
import static haveno.core.offer.OfferPayload.F2F_EXTRA_INFO;
import static haveno.core.offer.OfferPayload.PAY_BY_MAIL_EXTRA_INFO;
import static haveno.core.offer.OfferPayload.REFERRAL_ID;
import static haveno.core.offer.OfferPayload.XMR_AUTO_CONF;
import static haveno.core.offer.OfferPayload.XMR_AUTO_CONF_ENABLED_VALUE;
import haveno.core.payment.F2FAccount; import haveno.core.payment.F2FAccount;
import haveno.core.payment.PayByMailAccount;
import haveno.core.payment.PaymentAccount; import haveno.core.payment.PaymentAccount;
import haveno.core.provider.price.MarketPrice; import haveno.core.provider.price.MarketPrice;
import haveno.core.provider.price.PriceFeedService; import haveno.core.provider.price.PriceFeedService;
@ -37,31 +51,15 @@ import haveno.core.trade.statistics.ReferralIdService;
import haveno.core.user.AutoConfirmSettings; import haveno.core.user.AutoConfirmSettings;
import haveno.core.user.Preferences; import haveno.core.user.Preferences;
import haveno.core.util.coin.CoinFormatter; import haveno.core.util.coin.CoinFormatter;
import static haveno.core.xmr.wallet.Restrictions.getMaxBuyerSecurityDepositAsPercent;
import static haveno.core.xmr.wallet.Restrictions.getMinBuyerSecurityDepositAsPercent;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import lombok.extern.slf4j.Slf4j;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static haveno.common.util.MathUtils.roundDoubleToLong;
import static haveno.common.util.MathUtils.scaleUpByPowerOf10;
import static haveno.core.offer.OfferPayload.ACCOUNT_AGE_WITNESS_HASH;
import static haveno.core.offer.OfferPayload.CAPABILITIES;
import static haveno.core.offer.OfferPayload.PAY_BY_MAIL_EXTRA_INFO;
import static haveno.core.offer.OfferPayload.F2F_CITY;
import static haveno.core.offer.OfferPayload.F2F_EXTRA_INFO;
import static haveno.core.offer.OfferPayload.REFERRAL_ID;
import static haveno.core.offer.OfferPayload.XMR_AUTO_CONF;
import static haveno.core.offer.OfferPayload.XMR_AUTO_CONF_ENABLED_VALUE;
import static haveno.core.xmr.wallet.Restrictions.getMaxBuyerSecurityDepositAsPercent;
import static haveno.core.xmr.wallet.Restrictions.getMinBuyerSecurityDepositAsPercent;
/** /**
* This class holds utility methods for creating, editing and taking an Offer. * This class holds utility methods for creating, editing and taking an Offer.

View file

@ -34,6 +34,8 @@
package haveno.core.offer; package haveno.core.offer;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.inject.Inject;
import common.utils.GenUtils; import common.utils.GenUtils;
import haveno.common.ThreadUtils; import haveno.common.ThreadUtils;
import haveno.common.Timer; import haveno.common.Timer;
@ -90,24 +92,6 @@ import haveno.network.p2p.P2PService;
import haveno.network.p2p.SendDirectMessageListener; import haveno.network.p2p.SendDirectMessageListener;
import haveno.network.p2p.peers.Broadcaster; import haveno.network.p2p.peers.Broadcaster;
import haveno.network.p2p.peers.PeerManager; import haveno.network.p2p.peers.PeerManager;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import lombok.Getter;
import monero.daemon.model.MoneroKeyImageSpentStatus;
import monero.daemon.model.MoneroTx;
import monero.wallet.model.MoneroIncomingTransfer;
import monero.wallet.model.MoneroOutputQuery;
import monero.wallet.model.MoneroTransferQuery;
import monero.wallet.model.MoneroTxConfig;
import monero.wallet.model.MoneroTxQuery;
import monero.wallet.model.MoneroTxWallet;
import monero.wallet.model.MoneroWalletListener;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Nullable;
import javax.inject.Inject;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -121,8 +105,22 @@ import java.util.UUID;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javafx.collections.FXCollections;
import static com.google.common.base.Preconditions.checkNotNull; import javafx.collections.ObservableList;
import javax.annotation.Nullable;
import lombok.Getter;
import monero.daemon.model.MoneroKeyImageSpentStatus;
import monero.daemon.model.MoneroTx;
import monero.wallet.model.MoneroIncomingTransfer;
import monero.wallet.model.MoneroOutputQuery;
import monero.wallet.model.MoneroTransferQuery;
import monero.wallet.model.MoneroTxConfig;
import monero.wallet.model.MoneroTxQuery;
import monero.wallet.model.MoneroTxWallet;
import monero.wallet.model.MoneroWalletListener;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMessageListener, PersistedDataHost { public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMessageListener, PersistedDataHost {
private static final Logger log = LoggerFactory.getLogger(OpenOfferManager.class); private static final Logger log = LoggerFactory.getLogger(OpenOfferManager.class);
@ -335,7 +333,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
log.info("Remove open offers at shutDown. Number of open offers: {}", size); log.info("Remove open offers at shutDown. Number of open offers: {}", size);
if (offerBookService.isBootstrapped() && size > 0) { if (offerBookService.isBootstrapped() && size > 0) {
ThreadUtils.execute(() -> { ThreadUtils.execute(() -> {
// remove offers from offer book // remove offers from offer book
synchronized (openOffers) { synchronized (openOffers) {
openOffers.forEach(openOffer -> { openOffers.forEach(openOffer -> {
@ -360,9 +358,9 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
// shut down thread pool off main thread // shut down thread pool off main thread
ThreadUtils.submitToPool(() -> { ThreadUtils.submitToPool(() -> {
shutDownThreadPool(); shutDownThreadPool();
// invoke completion handler // invoke completion handler
if (completeHandler != null) completeHandler.run(); if (completeHandler != null) completeHandler.run();
}); });
} }
@ -443,13 +441,13 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
// process open offers on dedicated thread // process open offers on dedicated thread
ThreadUtils.execute(() -> { ThreadUtils.execute(() -> {
// Republish means we send the complete offer object // Republish means we send the complete offer object
republishOffers(); republishOffers();
startPeriodicRepublishOffersTimer(); startPeriodicRepublishOffersTimer();
// Refresh is started once we get a success from republish // Refresh is started once we get a success from republish
// We republish after a bit as it might be that our connected node still has the offer in the data map // We republish after a bit as it might be that our connected node still has the offer in the data map
// but other peers have it already removed because of expired TTL. // but other peers have it already removed because of expired TTL.
// Those other not directly connected peers would not get the broadcast of the new offer, as the first // Those other not directly connected peers would not get the broadcast of the new offer, as the first
@ -460,19 +458,19 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
if (retryRepublishOffersTimer == null) if (retryRepublishOffersTimer == null)
retryRepublishOffersTimer = UserThread.runAfter(OpenOfferManager.this::republishOffers, retryRepublishOffersTimer = UserThread.runAfter(OpenOfferManager.this::republishOffers,
REPUBLISH_AGAIN_AT_STARTUP_DELAY_SEC); REPUBLISH_AGAIN_AT_STARTUP_DELAY_SEC);
p2PService.getPeerManager().addListener(this); p2PService.getPeerManager().addListener(this);
// TODO: add to invalid offers on failure // TODO: add to invalid offers on failure
// openOffers.stream() // openOffers.stream()
// .forEach(openOffer -> OfferUtil.getInvalidMakerFeeTxErrorMessage(openOffer.getOffer(), btcWalletService) // .forEach(openOffer -> OfferUtil.getInvalidMakerFeeTxErrorMessage(openOffer.getOffer(), btcWalletService)
// .ifPresent(errorMsg -> invalidOffers.add(new Tuple2<>(openOffer, errorMsg)))); // .ifPresent(errorMsg -> invalidOffers.add(new Tuple2<>(openOffer, errorMsg))));
// process scheduled offers // process scheduled offers
processScheduledOffers((transaction) -> {}, (errorMessage) -> { processScheduledOffers((transaction) -> {}, (errorMessage) -> {
log.warn("Error processing unposted offers: " + errorMessage); log.warn("Error processing unposted offers: " + errorMessage);
}); });
// register to process unposted offers when unlocked balance increases // register to process unposted offers when unlocked balance increases
if (xmrWalletService.getWallet() != null) lastUnlockedBalance = xmrWalletService.getWallet().getUnlockedBalance(0); if (xmrWalletService.getWallet() != null) lastUnlockedBalance = xmrWalletService.getWallet().getUnlockedBalance(0);
xmrWalletService.addWalletListener(new MoneroWalletListener() { xmrWalletService.addWalletListener(new MoneroWalletListener() {
@ -486,10 +484,10 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
lastUnlockedBalance = newUnlockedBalance; lastUnlockedBalance = newUnlockedBalance;
} }
}); });
// initialize key image poller for signed offers // initialize key image poller for signed offers
maybeInitializeKeyImagePoller(); maybeInitializeKeyImagePoller();
// poll spent status of key images // poll spent status of key images
for (SignedOffer signedOffer : signedOffers.getList()) { for (SignedOffer signedOffer : signedOffers.getList()) {
signedOfferKeyImagePoller.addKeyImages(signedOffer.getReserveTxKeyImages()); signedOfferKeyImagePoller.addKeyImages(signedOffer.getReserveTxKeyImages());
@ -883,7 +881,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
// get offer reserve amount // get offer reserve amount
BigInteger offerReserveAmount = openOffer.getOffer().getReserveAmount(); BigInteger offerReserveAmount = openOffer.getOffer().getReserveAmount();
// handle split output offer // handle split output offer
if (openOffer.isReserveExactAmount()) { if (openOffer.isReserveExactAmount()) {
@ -1025,7 +1023,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
} }
private void splitOrSchedule(List<OpenOffer> openOffers, OpenOffer openOffer, BigInteger offerReserveAmount) { private void splitOrSchedule(List<OpenOffer> openOffers, OpenOffer openOffer, BigInteger offerReserveAmount) {
// handle sufficient available balance to split output // handle sufficient available balance to split output
boolean sufficientAvailableBalance = xmrWalletService.getWallet().getUnlockedBalance(0).compareTo(offerReserveAmount) >= 0; boolean sufficientAvailableBalance = xmrWalletService.getWallet().getUnlockedBalance(0).compareTo(offerReserveAmount) >= 0;
if (sufficientAvailableBalance) { if (sufficientAvailableBalance) {

View file

@ -17,7 +17,11 @@
package haveno.core.offer; package haveno.core.offer;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.util.MathUtils; import haveno.common.util.MathUtils;
import static haveno.common.util.MathUtils.roundDoubleToLong;
import static haveno.common.util.MathUtils.scaleUpByPowerOf10;
import haveno.core.locale.CurrencyUtil; import haveno.core.locale.CurrencyUtil;
import haveno.core.monetary.CryptoMoney; import haveno.core.monetary.CryptoMoney;
import haveno.core.monetary.Price; import haveno.core.monetary.Price;
@ -26,20 +30,14 @@ import haveno.core.provider.price.MarketPrice;
import haveno.core.provider.price.PriceFeedService; import haveno.core.provider.price.PriceFeedService;
import haveno.network.p2p.BootstrapListener; import haveno.network.p2p.BootstrapListener;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import javafx.collections.ListChangeListener;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import javafx.collections.ListChangeListener;
import static haveno.common.util.MathUtils.roundDoubleToLong; import lombok.extern.slf4j.Slf4j;
import static haveno.common.util.MathUtils.scaleUpByPowerOf10;
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -17,31 +17,29 @@
package haveno.core.offer.takeoffer; package haveno.core.offer.takeoffer;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.inject.Inject;
import haveno.common.taskrunner.Model; import haveno.common.taskrunner.Model;
import haveno.core.account.witness.AccountAgeWitnessService; import haveno.core.account.witness.AccountAgeWitnessService;
import haveno.core.monetary.Price; import haveno.core.monetary.Price;
import haveno.core.monetary.Volume; import haveno.core.monetary.Volume;
import haveno.core.offer.Offer; import haveno.core.offer.Offer;
import static haveno.core.offer.OfferDirection.SELL;
import haveno.core.offer.OfferUtil; import haveno.core.offer.OfferUtil;
import haveno.core.payment.PaymentAccount; import haveno.core.payment.PaymentAccount;
import haveno.core.provider.price.PriceFeedService; import haveno.core.provider.price.PriceFeedService;
import haveno.core.trade.HavenoUtils; import haveno.core.trade.HavenoUtils;
import haveno.core.util.VolumeUtil; import haveno.core.util.VolumeUtil;
import haveno.core.xmr.model.XmrAddressEntry; import haveno.core.xmr.model.XmrAddressEntry;
import static haveno.core.xmr.model.XmrAddressEntry.Context.OFFER_FUNDING;
import haveno.core.xmr.wallet.XmrWalletService; import haveno.core.xmr.wallet.XmrWalletService;
import java.math.BigInteger;
import java.util.Objects;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import java.math.BigInteger;
import java.util.Objects;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static haveno.core.offer.OfferDirection.SELL;
import static haveno.core.xmr.model.XmrAddressEntry.Context.OFFER_FUNDING;
@Slf4j @Slf4j
public class TakeOfferModel implements Model { public class TakeOfferModel implements Model {
// Immutable // Immutable

View file

@ -17,10 +17,9 @@
package haveno.core.payment; package haveno.core.payment;
import com.google.inject.Singleton;
import haveno.core.payment.payload.PaymentMethod; import haveno.core.payment.payload.PaymentMethod;
import javax.inject.Singleton;
@Singleton @Singleton
public class ChargeBackRisk { public class ChargeBackRisk {
public boolean hasChargebackRisk(String id, String currencyCode) { public boolean hasChargebackRisk(String id, String currencyCode) {

View file

@ -18,16 +18,15 @@
package haveno.core.payment; package haveno.core.payment;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.util.MathUtils; import haveno.common.util.MathUtils;
import haveno.core.trade.HavenoUtils; import haveno.core.trade.HavenoUtils;
import java.math.BigInteger;
import javax.annotation.Nullable;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.math.BigInteger;
@Slf4j @Slf4j
@Singleton @Singleton
public class TradeLimits { public class TradeLimits {

View file

@ -1,11 +1,10 @@
package haveno.core.payment.validation; package haveno.core.payment.validation;
import com.google.inject.Inject;
import haveno.core.locale.Res; import haveno.core.locale.Res;
import haveno.core.util.validation.InputValidator; import haveno.core.util.validation.InputValidator;
import haveno.core.util.validation.RegexValidator; import haveno.core.util.validation.RegexValidator;
import javax.inject.Inject;
public class AdvancedCashValidator extends InputValidator { public class AdvancedCashValidator extends InputValidator {
private EmailValidator emailValidator; private EmailValidator emailValidator;
private RegexValidator regexValidator; private RegexValidator regexValidator;

View file

@ -18,11 +18,10 @@
package haveno.core.payment.validation; package haveno.core.payment.validation;
import com.google.inject.Inject;
import haveno.core.util.validation.InputValidator; import haveno.core.util.validation.InputValidator;
import haveno.core.util.validation.RegexValidator; import haveno.core.util.validation.RegexValidator;
import javax.inject.Inject;
public final class AustraliaPayidAccountNameValidator extends InputValidator { public final class AustraliaPayidAccountNameValidator extends InputValidator {
@Override @Override
public ValidationResult validate(String input) { public ValidationResult validate(String input) {

View file

@ -1,11 +1,10 @@
package haveno.core.payment.validation; package haveno.core.payment.validation;
import com.google.inject.Inject;
import haveno.core.locale.Res; import haveno.core.locale.Res;
import haveno.core.util.validation.InputValidator; import haveno.core.util.validation.InputValidator;
import haveno.core.util.validation.RegexValidator; import haveno.core.util.validation.RegexValidator;
import javax.inject.Inject;
public class CapitualValidator extends InputValidator { public class CapitualValidator extends InputValidator {
private final RegexValidator regexValidator; private final RegexValidator regexValidator;

View file

@ -17,10 +17,9 @@
package haveno.core.payment.validation; package haveno.core.payment.validation;
import com.google.inject.Inject;
import haveno.core.util.validation.MonetaryValidator; import haveno.core.util.validation.MonetaryValidator;
import javax.inject.Inject;
public class FiatVolumeValidator extends MonetaryValidator { public class FiatVolumeValidator extends MonetaryValidator {
@Override @Override
public double getMinValue() { public double getMinValue() {

View file

@ -1,11 +1,10 @@
package haveno.core.payment.validation; package haveno.core.payment.validation;
import com.google.inject.Inject;
import haveno.core.locale.Res; import haveno.core.locale.Res;
import haveno.core.util.validation.InputValidator; import haveno.core.util.validation.InputValidator;
import haveno.core.util.validation.RegexValidator; import haveno.core.util.validation.RegexValidator;
import javax.inject.Inject;
public class InteracETransferAnswerValidator extends InputValidator { public class InteracETransferAnswerValidator extends InputValidator {
private LengthValidator lengthValidator; private LengthValidator lengthValidator;
private RegexValidator regexValidator; private RegexValidator regexValidator;

View file

@ -1,11 +1,10 @@
package haveno.core.payment.validation; package haveno.core.payment.validation;
import com.google.inject.Inject;
import haveno.core.locale.Res; import haveno.core.locale.Res;
import haveno.core.util.validation.InputValidator; import haveno.core.util.validation.InputValidator;
import haveno.core.util.validation.RegexValidator; import haveno.core.util.validation.RegexValidator;
import javax.inject.Inject;
public class InteracETransferQuestionValidator extends InputValidator { public class InteracETransferQuestionValidator extends InputValidator {
private LengthValidator lengthValidator; private LengthValidator lengthValidator;
private RegexValidator regexValidator; private RegexValidator regexValidator;

View file

@ -17,12 +17,11 @@
package haveno.core.payment.validation; package haveno.core.payment.validation;
import com.google.inject.Inject;
import haveno.core.locale.Res; import haveno.core.locale.Res;
import haveno.core.util.validation.InputValidator; import haveno.core.util.validation.InputValidator;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import javax.inject.Inject;
/* /*
* Interac e-Transfer requires a mail address or Canadian (mobile) phone number * Interac e-Transfer requires a mail address or Canadian (mobile) phone number
* *

View file

@ -17,12 +17,11 @@
package haveno.core.payment.validation; package haveno.core.payment.validation;
import com.google.inject.Inject;
import haveno.core.payment.JapanBankData; import haveno.core.payment.JapanBankData;
import haveno.core.util.validation.InputValidator; import haveno.core.util.validation.InputValidator;
import haveno.core.util.validation.RegexValidator; import haveno.core.util.validation.RegexValidator;
import javax.inject.Inject;
public final class JapanBankAccountNameValidator extends InputValidator public final class JapanBankAccountNameValidator extends InputValidator
{ {
@Override @Override

View file

@ -17,12 +17,11 @@
package haveno.core.payment.validation; package haveno.core.payment.validation;
import com.google.inject.Inject;
import haveno.core.payment.JapanBankData; import haveno.core.payment.JapanBankData;
import haveno.core.util.validation.InputValidator; import haveno.core.util.validation.InputValidator;
import haveno.core.util.validation.RegexValidator; import haveno.core.util.validation.RegexValidator;
import javax.inject.Inject;
public final class JapanBankBranchNameValidator extends InputValidator public final class JapanBankBranchNameValidator extends InputValidator
{ {
@Override @Override

View file

@ -17,6 +17,7 @@
package haveno.core.payment.validation; package haveno.core.payment.validation;
import com.google.inject.Inject;
import haveno.core.locale.Res; import haveno.core.locale.Res;
import haveno.core.payment.PaymentAccount; import haveno.core.payment.PaymentAccount;
import haveno.core.util.FormattingUtils; import haveno.core.util.FormattingUtils;
@ -24,8 +25,6 @@ import haveno.core.util.ParsingUtils;
import haveno.core.util.validation.NumberValidator; import haveno.core.util.validation.NumberValidator;
import haveno.core.xmr.wallet.Restrictions; import haveno.core.xmr.wallet.Restrictions;
import javax.inject.Inject;
public class SecurityDepositValidator extends NumberValidator { public class SecurityDepositValidator extends NumberValidator {
private PaymentAccount paymentAccount; private PaymentAccount paymentAccount;

View file

@ -17,10 +17,9 @@
package haveno.core.payment.validation; package haveno.core.payment.validation;
import com.google.inject.Inject;
import haveno.core.util.validation.InputValidator; import haveno.core.util.validation.InputValidator;
import javax.inject.Inject;
public final class TransferwiseValidator extends InputValidator { public final class TransferwiseValidator extends InputValidator {
private final EmailValidator emailValidator; private final EmailValidator emailValidator;

View file

@ -17,16 +17,15 @@
package haveno.core.payment.validation; package haveno.core.payment.validation;
import com.google.inject.Inject;
import haveno.core.locale.Res; import haveno.core.locale.Res;
import haveno.core.trade.HavenoUtils; import haveno.core.trade.HavenoUtils;
import haveno.core.util.validation.NumberValidator; import haveno.core.util.validation.NumberValidator;
import lombok.Getter;
import lombok.Setter;
import javax.annotation.Nullable;
import javax.inject.Inject;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import javax.annotation.Nullable;
import lombok.Getter;
import lombok.Setter;
public class XmrValidator extends NumberValidator { public class XmrValidator extends NumberValidator {

View file

@ -17,6 +17,7 @@
package haveno.core.presentation; package haveno.core.presentation;
import com.google.inject.Inject;
import haveno.common.UserThread; import haveno.common.UserThread;
import haveno.core.trade.HavenoUtils; import haveno.core.trade.HavenoUtils;
import haveno.core.xmr.Balances; import haveno.core.xmr.Balances;
@ -25,8 +26,6 @@ import javafx.beans.property.StringProperty;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
@Slf4j @Slf4j
public class BalancePresentation { public class BalancePresentation {

View file

@ -17,6 +17,7 @@
package haveno.core.presentation; package haveno.core.presentation;
import com.google.inject.Inject;
import haveno.core.support.dispute.arbitration.ArbitrationManager; import haveno.core.support.dispute.arbitration.ArbitrationManager;
import haveno.core.support.dispute.mediation.MediationManager; import haveno.core.support.dispute.mediation.MediationManager;
import haveno.core.support.dispute.refund.RefundManager; import haveno.core.support.dispute.refund.RefundManager;
@ -26,8 +27,6 @@ import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import lombok.Getter; import lombok.Getter;
import javax.inject.Inject;
public class SupportTicketsPresentation { public class SupportTicketsPresentation {
@Getter @Getter
private final StringProperty numOpenSupportTickets = new SimpleStringProperty(); private final StringProperty numOpenSupportTickets = new SimpleStringProperty();

View file

@ -17,6 +17,7 @@
package haveno.core.presentation; package haveno.core.presentation;
import com.google.inject.Inject;
import haveno.common.UserThread; import haveno.common.UserThread;
import haveno.core.trade.TradeManager; import haveno.core.trade.TradeManager;
import javafx.beans.property.BooleanProperty; import javafx.beans.property.BooleanProperty;
@ -25,8 +26,6 @@ import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import lombok.Getter; import lombok.Getter;
import javax.inject.Inject;
public class TradePresentation { public class TradePresentation {
@Getter @Getter
private final StringProperty numPendingTrades = new SimpleStringProperty(); private final StringProperty numPendingTrades = new SimpleStringProperty();

View file

@ -17,6 +17,8 @@
package haveno.core.proto.network; package haveno.core.proto.network;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.proto.ProtobufferException; import haveno.common.proto.ProtobufferException;
import haveno.common.proto.ProtobufferRuntimeException; import haveno.common.proto.ProtobufferRuntimeException;
import haveno.common.proto.network.NetworkEnvelope; import haveno.common.proto.network.NetworkEnvelope;
@ -69,11 +71,8 @@ import haveno.network.p2p.storage.messages.RemoveMailboxDataMessage;
import haveno.network.p2p.storage.payload.MailboxStoragePayload; import haveno.network.p2p.storage.payload.MailboxStoragePayload;
import haveno.network.p2p.storage.payload.ProtectedMailboxStorageEntry; import haveno.network.p2p.storage.payload.ProtectedMailboxStorageEntry;
import haveno.network.p2p.storage.payload.ProtectedStorageEntry; import haveno.network.p2p.storage.payload.ProtectedStorageEntry;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.time.Clock; import java.time.Clock;
import lombok.extern.slf4j.Slf4j;
// TODO Use ProtobufferException instead of ProtobufferRuntimeException // TODO Use ProtobufferException instead of ProtobufferRuntimeException
@Slf4j @Slf4j

View file

@ -17,7 +17,9 @@
package haveno.core.proto.persistable; package haveno.core.proto.persistable;
import com.google.inject.Inject;
import com.google.inject.Provider; import com.google.inject.Provider;
import com.google.inject.Singleton;
import haveno.common.proto.ProtobufferRuntimeException; import haveno.common.proto.ProtobufferRuntimeException;
import haveno.common.proto.network.NetworkProtoResolver; import haveno.common.proto.network.NetworkProtoResolver;
import haveno.common.proto.persistable.NavigationPath; import haveno.common.proto.persistable.NavigationPath;
@ -47,9 +49,6 @@ import haveno.network.p2p.storage.persistence.RemovedPayloadsMap;
import haveno.network.p2p.storage.persistence.SequenceNumberMap; import haveno.network.p2p.storage.persistence.SequenceNumberMap;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
// TODO Use ProtobufferException instead of ProtobufferRuntimeException // TODO Use ProtobufferException instead of ProtobufferRuntimeException
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -17,12 +17,11 @@
package haveno.core.provider; package haveno.core.provider;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.network.Socks5ProxyProvider; import haveno.network.Socks5ProxyProvider;
import haveno.network.http.HttpClientImpl; import haveno.network.http.HttpClientImpl;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Singleton;
@Singleton @Singleton
public class FeeHttpClient extends HttpClientImpl { public class FeeHttpClient extends HttpClientImpl {

View file

@ -17,14 +17,13 @@
package haveno.core.provider; package haveno.core.provider;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.app.Version; import haveno.common.app.Version;
import haveno.network.Socks5ProxyProvider; import haveno.network.Socks5ProxyProvider;
import haveno.network.http.HttpClientImpl; import haveno.network.http.HttpClientImpl;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.IOException; import java.io.IOException;
import javax.annotation.Nullable;
@Singleton @Singleton
public class MempoolHttpClient extends HttpClientImpl { public class MempoolHttpClient extends HttpClientImpl {

View file

@ -17,12 +17,11 @@
package haveno.core.provider; package haveno.core.provider;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.network.Socks5ProxyProvider; import haveno.network.Socks5ProxyProvider;
import haveno.network.http.HttpClientImpl; import haveno.network.http.HttpClientImpl;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Singleton;
@Singleton @Singleton
public class PriceHttpClient extends HttpClientImpl { public class PriceHttpClient extends HttpClientImpl {

View file

@ -35,17 +35,15 @@
package haveno.core.provider; package haveno.core.provider;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.name.Named;
import haveno.common.config.Config; import haveno.common.config.Config;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import javax.annotation.Nullable;
import javax.inject.Named;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Nullable;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class ProvidersRepository { public class ProvidersRepository {

View file

@ -17,12 +17,11 @@
package haveno.core.support.dispute.arbitration; package haveno.core.support.dispute.arbitration;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.persistence.PersistenceManager; import haveno.common.persistence.PersistenceManager;
import haveno.core.support.dispute.DisputeListService; import haveno.core.support.dispute.DisputeListService;
import javax.inject.Inject;
import javax.inject.Singleton;
@Singleton @Singleton
public final class ArbitrationDisputeListService extends DisputeListService<ArbitrationDisputeList> { public final class ArbitrationDisputeListService extends DisputeListService<ArbitrationDisputeList> {

View file

@ -34,18 +34,17 @@
package haveno.core.support.dispute.arbitration.arbitrator; package haveno.core.support.dispute.arbitration.arbitrator;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.config.Config; import haveno.common.config.Config;
import haveno.common.crypto.KeyRing; import haveno.common.crypto.KeyRing;
import haveno.core.filter.FilterManager; import haveno.core.filter.FilterManager;
import haveno.core.support.dispute.agent.DisputeAgentManager; import haveno.core.support.dispute.agent.DisputeAgentManager;
import haveno.core.user.User; import haveno.core.user.User;
import haveno.network.p2p.storage.payload.ProtectedStorageEntry; import haveno.network.p2p.storage.payload.ProtectedStorageEntry;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -17,13 +17,12 @@
package haveno.core.support.dispute.arbitration.arbitrator; package haveno.core.support.dispute.arbitration.arbitrator;
import com.google.inject.Inject;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import haveno.core.filter.FilterManager; import haveno.core.filter.FilterManager;
import haveno.core.support.dispute.agent.DisputeAgentService; import haveno.core.support.dispute.agent.DisputeAgentService;
import haveno.network.p2p.NodeAddress; import haveno.network.p2p.NodeAddress;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import javax.inject.Inject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;

View file

@ -17,12 +17,11 @@
package haveno.core.support.dispute.mediation; package haveno.core.support.dispute.mediation;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.persistence.PersistenceManager; import haveno.common.persistence.PersistenceManager;
import haveno.core.support.dispute.DisputeListService; import haveno.core.support.dispute.DisputeListService;
import javax.inject.Inject;
import javax.inject.Singleton;
@Singleton @Singleton
public final class MediationDisputeListService extends DisputeListService<MediationDisputeList> { public final class MediationDisputeListService extends DisputeListService<MediationDisputeList> {

View file

@ -17,14 +17,13 @@
package haveno.core.support.dispute.mediation.mediator; package haveno.core.support.dispute.mediation.mediator;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.crypto.KeyRing; import haveno.common.crypto.KeyRing;
import haveno.core.filter.FilterManager; import haveno.core.filter.FilterManager;
import haveno.core.support.dispute.agent.DisputeAgentManager; import haveno.core.support.dispute.agent.DisputeAgentManager;
import haveno.core.user.User; import haveno.core.user.User;
import haveno.network.p2p.storage.payload.ProtectedStorageEntry; import haveno.network.p2p.storage.payload.ProtectedStorageEntry;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.List; import java.util.List;
@Singleton @Singleton

View file

@ -17,19 +17,18 @@
package haveno.core.support.dispute.mediation.mediator; package haveno.core.support.dispute.mediation.mediator;
import com.google.inject.Inject;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import haveno.core.filter.FilterManager; import haveno.core.filter.FilterManager;
import haveno.core.support.dispute.agent.DisputeAgentService; import haveno.core.support.dispute.agent.DisputeAgentService;
import haveno.network.p2p.NodeAddress; import haveno.network.p2p.NodeAddress;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j

View file

@ -17,12 +17,11 @@
package haveno.core.support.dispute.refund; package haveno.core.support.dispute.refund;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.persistence.PersistenceManager; import haveno.common.persistence.PersistenceManager;
import haveno.core.support.dispute.DisputeListService; import haveno.core.support.dispute.DisputeListService;
import javax.inject.Inject;
import javax.inject.Singleton;
@Singleton @Singleton
public final class RefundDisputeListService extends DisputeListService<RefundDisputeList> { public final class RefundDisputeListService extends DisputeListService<RefundDisputeList> {

View file

@ -17,16 +17,15 @@
package haveno.core.support.dispute.refund.refundagent; package haveno.core.support.dispute.refund.refundagent;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.crypto.KeyRing; import haveno.common.crypto.KeyRing;
import haveno.core.filter.FilterManager; import haveno.core.filter.FilterManager;
import haveno.core.support.dispute.agent.DisputeAgentManager; import haveno.core.support.dispute.agent.DisputeAgentManager;
import haveno.core.user.User; import haveno.core.user.User;
import haveno.network.p2p.storage.payload.ProtectedStorageEntry; import haveno.network.p2p.storage.payload.ProtectedStorageEntry;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.List; import java.util.List;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -17,13 +17,12 @@
package haveno.core.support.dispute.refund.refundagent; package haveno.core.support.dispute.refund.refundagent;
import com.google.inject.Inject;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import haveno.core.filter.FilterManager; import haveno.core.filter.FilterManager;
import haveno.core.support.dispute.agent.DisputeAgentService; import haveno.core.support.dispute.agent.DisputeAgentService;
import haveno.network.p2p.NodeAddress; import haveno.network.p2p.NodeAddress;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import javax.inject.Inject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;

View file

@ -17,10 +17,12 @@
package haveno.core.support.traderchat; package haveno.core.support.traderchat;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.crypto.PubKeyRing; import haveno.common.crypto.PubKeyRing;
import haveno.common.crypto.PubKeyRingProvider; import haveno.common.crypto.PubKeyRingProvider;
import haveno.core.api.XmrConnectionService;
import haveno.core.api.CoreNotificationService; import haveno.core.api.CoreNotificationService;
import haveno.core.api.XmrConnectionService;
import haveno.core.locale.Res; import haveno.core.locale.Res;
import haveno.core.support.SupportManager; import haveno.core.support.SupportManager;
import haveno.core.support.SupportType; import haveno.core.support.SupportType;
@ -32,15 +34,12 @@ import haveno.core.xmr.wallet.XmrWalletService;
import haveno.network.p2p.AckMessageSourceType; import haveno.network.p2p.AckMessageSourceType;
import haveno.network.p2p.NodeAddress; import haveno.network.p2p.NodeAddress;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import java.util.List;
import java.util.Optional;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.List;
import java.util.Optional;
@Slf4j @Slf4j
@Singleton @Singleton
public class TraderChatManager extends SupportManager { public class TraderChatManager extends SupportManager {

View file

@ -17,6 +17,7 @@
package haveno.core.trade; package haveno.core.trade;
import com.google.inject.Inject;
import haveno.common.crypto.PubKeyRing; import haveno.common.crypto.PubKeyRing;
import haveno.common.proto.network.NetworkEnvelope; import haveno.common.proto.network.NetworkEnvelope;
import haveno.core.trade.messages.TradeMessage; import haveno.core.trade.messages.TradeMessage;
@ -27,10 +28,8 @@ import haveno.network.p2p.DecryptedMessageWithPubKey;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import haveno.network.p2p.mailbox.MailboxMessage; import haveno.network.p2p.mailbox.MailboxMessage;
import haveno.network.p2p.mailbox.MailboxMessageService; import haveno.network.p2p.mailbox.MailboxMessageService;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import java.util.List; import java.util.List;
import lombok.extern.slf4j.Slf4j;
//TODO with the redesign of mailbox messages that is not required anymore. We leave it for now as we want to minimize //TODO with the redesign of mailbox messages that is not required anymore. We leave it for now as we want to minimize
// changes for the 1.5.0 release but we should clean up afterwards... // changes for the 1.5.0 release but we should clean up afterwards...

View file

@ -17,6 +17,7 @@
package haveno.core.trade; package haveno.core.trade;
import com.google.inject.Inject;
import haveno.common.proto.network.NetworkEnvelope; import haveno.common.proto.network.NetworkEnvelope;
import haveno.core.trade.messages.TradeMessage; import haveno.core.trade.messages.TradeMessage;
import haveno.network.p2p.AckMessage; import haveno.network.p2p.AckMessage;
@ -26,10 +27,8 @@ import haveno.network.p2p.DecryptedMessageWithPubKey;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import haveno.network.p2p.mailbox.MailboxMessage; import haveno.network.p2p.mailbox.MailboxMessage;
import haveno.network.p2p.mailbox.MailboxMessageService; import haveno.network.p2p.mailbox.MailboxMessageService;
import lombok.extern.slf4j.Slf4j;
import javax.inject.Inject;
import java.util.List; import java.util.List;
import lombok.extern.slf4j.Slf4j;
//TODO with the redesign of mailbox messages that is not required anymore. We leave it for now as we want to minimize //TODO with the redesign of mailbox messages that is not required anymore. We leave it for now as we want to minimize
// changes for the 1.5.0 release but we should clean up afterwards... // changes for the 1.5.0 release but we should clean up afterwards...

View file

@ -17,23 +17,14 @@
package haveno.core.trade; package haveno.core.trade;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.core.locale.CurrencyUtil; import haveno.core.locale.CurrencyUtil;
import haveno.core.locale.Res; import haveno.core.locale.Res;
import haveno.core.monetary.CryptoMoney; import haveno.core.monetary.CryptoMoney;
import haveno.core.monetary.TraditionalMoney; import haveno.core.monetary.TraditionalMoney;
import haveno.core.monetary.Volume; import haveno.core.monetary.Volume;
import haveno.core.offer.OpenOffer; import haveno.core.offer.OpenOffer;
import haveno.core.util.FormattingUtils;
import lombok.extern.slf4j.Slf4j;
import org.bitcoinj.core.Monetary;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static haveno.core.trade.ClosedTradableUtil.castToTrade; import static haveno.core.trade.ClosedTradableUtil.castToTrade;
import static haveno.core.trade.ClosedTradableUtil.getTotalTxFee; import static haveno.core.trade.ClosedTradableUtil.getTotalTxFee;
import static haveno.core.trade.ClosedTradableUtil.getTotalVolumeByCurrency; import static haveno.core.trade.ClosedTradableUtil.getTotalVolumeByCurrency;
@ -42,10 +33,17 @@ import static haveno.core.trade.ClosedTradableUtil.isOpenOffer;
import static haveno.core.trade.Trade.DisputeState.DISPUTE_CLOSED; import static haveno.core.trade.Trade.DisputeState.DISPUTE_CLOSED;
import static haveno.core.trade.Trade.DisputeState.MEDIATION_CLOSED; import static haveno.core.trade.Trade.DisputeState.MEDIATION_CLOSED;
import static haveno.core.trade.Trade.DisputeState.REFUND_REQUEST_CLOSED; import static haveno.core.trade.Trade.DisputeState.REFUND_REQUEST_CLOSED;
import haveno.core.util.FormattingUtils;
import static haveno.core.util.FormattingUtils.formatPercentagePrice; import static haveno.core.util.FormattingUtils.formatPercentagePrice;
import static haveno.core.util.FormattingUtils.formatToPercentWithSymbol; import static haveno.core.util.FormattingUtils.formatToPercentWithSymbol;
import static haveno.core.util.VolumeUtil.formatVolume; import static haveno.core.util.VolumeUtil.formatVolume;
import static haveno.core.util.VolumeUtil.formatVolumeWithCode; import static haveno.core.util.VolumeUtil.formatVolumeWithCode;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.bitcoinj.core.Monetary;
@Slf4j @Slf4j
@Singleton @Singleton

View file

@ -34,8 +34,10 @@
package haveno.core.trade; package haveno.core.trade;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.inject.Inject;
import common.utils.GenUtils; import common.utils.GenUtils;
import haveno.common.ClockWatcher; import haveno.common.ClockWatcher;
import haveno.common.ThreadUtils; import haveno.common.ThreadUtils;
@ -105,23 +107,6 @@ import haveno.network.p2p.SendMailboxMessageListener;
import haveno.network.p2p.mailbox.MailboxMessage; import haveno.network.p2p.mailbox.MailboxMessage;
import haveno.network.p2p.mailbox.MailboxMessageService; import haveno.network.p2p.mailbox.MailboxMessageService;
import haveno.network.p2p.network.TorNetworkNode; import haveno.network.p2p.network.TorNetworkNode;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.LongProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleLongProperty;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import lombok.Getter;
import monero.daemon.model.MoneroTx;
import org.bitcoinj.core.Coin;
import org.bouncycastle.crypto.params.KeyParameter;
import org.fxmisc.easybind.EasyBind;
import org.fxmisc.easybind.Subscription;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Nullable;
import javax.inject.Inject;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -137,9 +122,21 @@ import java.util.UUID;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import javafx.beans.property.BooleanProperty;
import static com.google.common.base.Preconditions.checkArgument; import javafx.beans.property.LongProperty;
import static com.google.common.base.Preconditions.checkNotNull; import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleLongProperty;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javax.annotation.Nullable;
import lombok.Getter;
import monero.daemon.model.MoneroTx;
import org.bitcoinj.core.Coin;
import org.bouncycastle.crypto.params.KeyParameter;
import org.fxmisc.easybind.EasyBind;
import org.fxmisc.easybind.Subscription;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TradeManager implements PersistedDataHost, DecryptedDirectMessageListener { public class TradeManager implements PersistedDataHost, DecryptedDirectMessageListener {
@ -442,7 +439,7 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi
for (Trade trade : trades) { for (Trade trade : trades) {
tasks.add(() -> { tasks.add(() -> {
try { try {
// check for duplicate uid // check for duplicate uid
if (!uids.add(trade.getUid())) { if (!uids.add(trade.getUid())) {
log.warn("Found trade with duplicate uid, skipping. That should never happen. {} {}, uid={}", trade.getClass().getSimpleName(), trade.getId(), trade.getUid()); log.warn("Found trade with duplicate uid, skipping. That should never happen. {} {}, uid={}", trade.getClass().getSimpleName(), trade.getId(), trade.getUid());
@ -477,7 +474,7 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi
for (Trade trade : trades) { for (Trade trade : trades) {
if (trade.isIdling()) ThreadUtils.submitToPool(() -> trade.syncAndPollWallet()); if (trade.isIdling()) ThreadUtils.submitToPool(() -> trade.syncAndPollWallet());
} }
// process after all wallets initialized // process after all wallets initialized
if (!HavenoUtils.isSeedNode()) { if (!HavenoUtils.isSeedNode()) {
@ -1140,7 +1137,7 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
public void sendAckMessage(NodeAddress peer, PubKeyRing peersPubKeyRing, TradeMessage message, boolean result, @Nullable String errorMessage) { public void sendAckMessage(NodeAddress peer, PubKeyRing peersPubKeyRing, TradeMessage message, boolean result, @Nullable String errorMessage) {
// create ack message // create ack message
String tradeId = message.getTradeId(); String tradeId = message.getTradeId();
String sourceUid = message.getUid(); String sourceUid = message.getUid();
@ -1252,7 +1249,7 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi
public Optional<Trade> getClosedTrade(String tradeId) { public Optional<Trade> getClosedTrade(String tradeId) {
return closedTradableManager.getClosedTrades().stream().filter(e -> e.getId().equals(tradeId)).findFirst(); return closedTradableManager.getClosedTrades().stream().filter(e -> e.getId().equals(tradeId)).findFirst();
} }
public Optional<Trade> getFailedTrade(String tradeId) { public Optional<Trade> getFailedTrade(String tradeId) {
return failedTradesManager.getTradeById(tradeId); return failedTradesManager.getTradeById(tradeId);
} }

View file

@ -17,24 +17,22 @@
package haveno.core.trade; package haveno.core.trade;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import haveno.common.crypto.KeyRing; import haveno.common.crypto.KeyRing;
import haveno.common.util.Tuple2; import haveno.common.util.Tuple2;
import haveno.core.locale.Res;
import haveno.core.offer.Offer;
import haveno.core.xmr.wallet.BtcWalletService;
import lombok.extern.slf4j.Slf4j;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.Date;
import java.util.Objects;
import static com.google.common.base.Preconditions.checkNotNull;
import static haveno.core.locale.CurrencyUtil.getCurrencyPair; import static haveno.core.locale.CurrencyUtil.getCurrencyPair;
import static haveno.core.locale.CurrencyUtil.isTraditionalCurrency; import static haveno.core.locale.CurrencyUtil.isTraditionalCurrency;
import haveno.core.locale.Res;
import haveno.core.offer.Offer;
import static haveno.core.util.FormattingUtils.formatDurationAsWords; import static haveno.core.util.FormattingUtils.formatDurationAsWords;
import haveno.core.xmr.wallet.BtcWalletService;
import static java.lang.String.format; import static java.lang.String.format;
import java.util.Date;
import java.util.Objects;
import javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
/** /**
* This class contains trade utility methods. * This class contains trade utility methods.

View file

@ -17,6 +17,7 @@
package haveno.core.trade.protocol; package haveno.core.trade.protocol;
import com.google.inject.Inject;
import haveno.common.crypto.KeyRing; import haveno.common.crypto.KeyRing;
import haveno.core.account.witness.AccountAgeWitnessService; import haveno.core.account.witness.AccountAgeWitnessService;
import haveno.core.filter.FilterManager; import haveno.core.filter.FilterManager;
@ -33,8 +34,6 @@ import haveno.core.xmr.wallet.XmrWalletService;
import haveno.network.p2p.P2PService; import haveno.network.p2p.P2PService;
import lombok.Getter; import lombok.Getter;
import javax.inject.Inject;
@Getter @Getter
public class ProcessModelServiceProvider { public class ProcessModelServiceProvider {
private final OpenOfferManager openOfferManager; private final OpenOfferManager openOfferManager;

View file

@ -17,12 +17,11 @@
package haveno.core.trade.statistics; package haveno.core.trade.statistics;
import com.google.inject.Inject;
import haveno.core.user.Preferences; import haveno.core.user.Preferences;
import javax.annotation.Nullable;
import javax.inject.Inject;
import java.util.Arrays; import java.util.Arrays;
import java.util.Optional; import java.util.Optional;
import javax.annotation.Nullable;
public class ReferralIdService { public class ReferralIdService {
private final Preferences preferences; private final Preferences preferences;

Some files were not shown because too many files have changed in this diff Show more