mirror of
https://github.com/bisq-network/bisq.git
synced 2025-03-12 10:30:25 +01:00
AddressEntryList save/load cycle works
This commit is contained in:
parent
f1ef154b61
commit
ce6620a291
88 changed files with 348 additions and 281 deletions
|
@ -1,4 +1,4 @@
|
||||||
package io.bisq.network.p2p;
|
package io.bisq.common.persistance;
|
||||||
|
|
||||||
|
|
||||||
import io.bisq.common.Marshaller;
|
import io.bisq.common.Marshaller;
|
|
@ -15,13 +15,13 @@
|
||||||
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
|
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.bisq.network.p2p.network;
|
package io.bisq.common.persistance;
|
||||||
|
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public interface ProtobufferResolver {
|
public interface ProtobufferResolver {
|
||||||
Optional<Msg> fromProto(PB.Envelope envelope);
|
Optional<Msg> fromProto(PB.Envelope envelope);
|
||||||
|
Optional<Persistable> fromProto(PB.DiskEnvelope envelope);
|
||||||
}
|
}
|
|
@ -17,16 +17,20 @@
|
||||||
|
|
||||||
package io.bisq.common.storage;
|
package io.bisq.common.storage;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
import com.google.protobuf.Message;
|
import com.google.protobuf.Message;
|
||||||
import io.bisq.common.UserThread;
|
import io.bisq.common.UserThread;
|
||||||
import io.bisq.common.io.LookAheadObjectInputStream;
|
import io.bisq.common.io.LookAheadObjectInputStream;
|
||||||
import io.bisq.common.persistance.Persistable;
|
import io.bisq.common.persistance.Persistable;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.util.Utilities;
|
import io.bisq.common.util.Utilities;
|
||||||
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||||
|
@ -43,17 +47,17 @@ public class FileManager<T> {
|
||||||
private final long delay;
|
private final long delay;
|
||||||
private final Callable<Void> saveFileTask;
|
private final Callable<Void> saveFileTask;
|
||||||
private T serializable;
|
private T serializable;
|
||||||
private boolean proto;
|
private ProtobufferResolver protobufferResolver;
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Constructor
|
// Constructor
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
public FileManager(File dir, File storageFile, long delay) {
|
@Inject
|
||||||
|
public FileManager(File dir, File storageFile, long delay, ProtobufferResolver protobufferResolver) {
|
||||||
this.dir = dir;
|
this.dir = dir;
|
||||||
this.storageFile = storageFile;
|
this.storageFile = storageFile;
|
||||||
proto = serializable instanceof Persistable;
|
this.protobufferResolver = protobufferResolver;
|
||||||
|
|
||||||
executor = Utilities.getScheduledThreadPoolExecutor("FileManager", 1, 10, 5);
|
executor = Utilities.getScheduledThreadPoolExecutor("FileManager", 1, 10, 5);
|
||||||
|
|
||||||
|
@ -106,13 +110,17 @@ public class FileManager<T> {
|
||||||
|
|
||||||
public synchronized T read(File file) throws IOException, ClassNotFoundException {
|
public synchronized T read(File file) throws IOException, ClassNotFoundException {
|
||||||
log.debug("read" + file);
|
log.debug("read" + file);
|
||||||
if (proto) {
|
Optional<Persistable> persistable = Optional.empty();
|
||||||
log.info("it's proto");
|
|
||||||
try (final FileInputStream fileInputStream = new FileInputStream(file)) {
|
try (final FileInputStream fileInputStream = new FileInputStream(file)) {
|
||||||
return (T) ((Persistable) serializable).getParser().parseFrom(fileInputStream);
|
persistable = protobufferResolver.fromProto(PB.DiskEnvelope.parseFrom(fileInputStream));
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
log.error("Exception at proto read: " + t.getMessage());
|
log.error("Exception at proto read: " + t.getMessage() + " " + file.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(persistable.isPresent()) {
|
||||||
|
log.error("Persistable found");
|
||||||
|
return (T) persistable.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
try (final FileInputStream fileInputStream = new FileInputStream(file);
|
try (final FileInputStream fileInputStream = new FileInputStream(file);
|
||||||
|
@ -192,7 +200,7 @@ public class FileManager<T> {
|
||||||
try {
|
try {
|
||||||
message = ((Persistable) serializable).toProtobuf();
|
message = ((Persistable) serializable).toProtobuf();
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
log.info("Not protobufferable: {} {}", serializable.getClass().getSimpleName(), e.getMessage());
|
log.info("Not protobufferable: {}, {}, {}", serializable.getClass().getSimpleName(), storageFile, e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -17,11 +17,12 @@
|
||||||
|
|
||||||
package io.bisq.common.storage;
|
package io.bisq.common.storage;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.inject.Inject;
|
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -66,6 +67,8 @@ public class Storage<T extends Serializable> {
|
||||||
private T serializable;
|
private T serializable;
|
||||||
private String fileName;
|
private String fileName;
|
||||||
private int numMaxBackupFiles = 10;
|
private int numMaxBackupFiles = 10;
|
||||||
|
@com.google.inject.Inject
|
||||||
|
private ProtobufferResolver protobufferResolver;
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -73,21 +76,28 @@ public class Storage<T extends Serializable> {
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public Storage(@Named(DIR_KEY) File dir) {
|
public Storage(@Named(DIR_KEY) File dir, ProtobufferResolver protobufferResolver) {
|
||||||
this.dir = dir;
|
this.dir = dir;
|
||||||
|
this.protobufferResolver = protobufferResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
public Storage(@Named(DIR_KEY) File dir) {
|
||||||
|
this.dir = dir;
|
||||||
|
this.protobufferResolver = protobufferResolver;
|
||||||
|
}
|
||||||
|
*/
|
||||||
public void initWithFileName(String fileName) {
|
public void initWithFileName(String fileName) {
|
||||||
this.fileName = fileName;
|
this.fileName = fileName;
|
||||||
storageFile = new File(dir, fileName);
|
storageFile = new File(dir, fileName);
|
||||||
fileManager = new FileManager<>(dir, storageFile, 300);
|
fileManager = new FileManager<>(dir, storageFile, 300, protobufferResolver);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public T initAndGetPersistedWithFileName(String fileName) {
|
public T initAndGetPersistedWithFileName(String fileName) {
|
||||||
this.fileName = fileName;
|
this.fileName = fileName;
|
||||||
storageFile = new File(dir, fileName);
|
storageFile = new File(dir, fileName);
|
||||||
fileManager = new FileManager<>(dir, storageFile, 300);
|
fileManager = new FileManager<>(dir, storageFile, 300, protobufferResolver);
|
||||||
|
|
||||||
return getPersisted();
|
return getPersisted();
|
||||||
}
|
}
|
||||||
|
@ -102,7 +112,7 @@ public class Storage<T extends Serializable> {
|
||||||
this.serializable = serializable;
|
this.serializable = serializable;
|
||||||
this.fileName = fileName;
|
this.fileName = fileName;
|
||||||
storageFile = new File(dir, fileName);
|
storageFile = new File(dir, fileName);
|
||||||
fileManager = new FileManager<>(dir, storageFile, 600);
|
fileManager = new FileManager<>(dir, storageFile, 600, protobufferResolver);
|
||||||
|
|
||||||
return getPersisted();
|
return getPersisted();
|
||||||
}
|
}
|
||||||
|
|
|
@ -776,12 +776,16 @@ message AddressEntry {
|
||||||
|
|
||||||
string offer_id = 7;
|
string offer_id = 7;
|
||||||
Context context = 8;
|
Context context = 8;
|
||||||
bytes pubkey = 9;
|
bytes pub_key = 9;
|
||||||
bytes pub_key_hash = 10;
|
bytes pub_key_hash = 10;
|
||||||
string param_id = 11;
|
string param_id = 11;
|
||||||
Coin coin_locked_in_multi_sig = 12;
|
Coin coin_locked_in_multi_sig = 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message DeterministicKey {
|
||||||
|
bytes serialized = 1;
|
||||||
|
}
|
||||||
|
|
||||||
message AddressEntryList {
|
message AddressEntryList {
|
||||||
repeated AddressEntry address_entry = 1;
|
repeated AddressEntry address_entry = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
<appender-ref ref="CONSOLE_APPENDER"/>
|
<appender-ref ref="CONSOLE_APPENDER"/>
|
||||||
</root>
|
</root>
|
||||||
|
|
||||||
<logger name="io.bisq.common.storage.Storage" level="WARN"/>
|
<logger name="io.bisq.core.storage.Storage" level="WARN"/>
|
||||||
<logger name="io.bisq.common.storage.FileManager" level="WARN"/>
|
<logger name="io.bisq.core.storage.FileManager" level="WARN"/>
|
||||||
<logger name="io.bisq.locale.BSResources" level="ERROR"/>
|
<logger name="io.bisq.locale.BSResources" level="ERROR"/>
|
||||||
|
|
||||||
<!-- <logger name="io.bisq.p2p.peers.PeerGroup" level="TRACE"/>
|
<!-- <logger name="io.bisq.p2p.peers.PeerGroup" level="TRACE"/>
|
||||||
|
|
|
@ -22,6 +22,7 @@ import com.google.inject.name.Named;
|
||||||
import io.bisq.common.app.DevEnv;
|
import io.bisq.common.app.DevEnv;
|
||||||
import io.bisq.common.crypto.KeyRing;
|
import io.bisq.common.crypto.KeyRing;
|
||||||
import io.bisq.common.crypto.PubKeyRing;
|
import io.bisq.common.crypto.PubKeyRing;
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.core.app.AppOptionKeys;
|
import io.bisq.core.app.AppOptionKeys;
|
||||||
import io.bisq.network.p2p.*;
|
import io.bisq.network.p2p.*;
|
||||||
import javafx.beans.property.ObjectProperty;
|
import javafx.beans.property.ObjectProperty;
|
||||||
|
|
|
@ -3,7 +3,7 @@ package io.bisq.core.alert;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.MailboxMsg;
|
import io.bisq.network.p2p.MailboxMsg;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
|
@ -27,6 +27,8 @@ import io.bisq.common.crypto.PubKeyRing;
|
||||||
import io.bisq.common.handlers.FaultHandler;
|
import io.bisq.common.handlers.FaultHandler;
|
||||||
import io.bisq.common.handlers.ResultHandler;
|
import io.bisq.common.handlers.ResultHandler;
|
||||||
import io.bisq.common.locale.Res;
|
import io.bisq.common.locale.Res;
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.storage.Storage;
|
import io.bisq.common.storage.Storage;
|
||||||
import io.bisq.core.arbitration.messages.*;
|
import io.bisq.core.arbitration.messages.*;
|
||||||
import io.bisq.core.btc.AddressEntry;
|
import io.bisq.core.btc.AddressEntry;
|
||||||
|
@ -89,6 +91,7 @@ public class DisputeManager {
|
||||||
ClosedTradableManager closedTradableManager,
|
ClosedTradableManager closedTradableManager,
|
||||||
OpenOfferManager openOfferManager,
|
OpenOfferManager openOfferManager,
|
||||||
KeyRing keyRing,
|
KeyRing keyRing,
|
||||||
|
ProtobufferResolver protobufferResolver,
|
||||||
@Named(Storage.DIR_KEY) File storageDir) {
|
@Named(Storage.DIR_KEY) File storageDir) {
|
||||||
this.p2PService = p2PService;
|
this.p2PService = p2PService;
|
||||||
this.tradeWalletService = tradeWalletService;
|
this.tradeWalletService = tradeWalletService;
|
||||||
|
@ -98,7 +101,7 @@ public class DisputeManager {
|
||||||
this.openOfferManager = openOfferManager;
|
this.openOfferManager = openOfferManager;
|
||||||
this.keyRing = keyRing;
|
this.keyRing = keyRing;
|
||||||
|
|
||||||
disputeStorage = new Storage<>(storageDir);
|
disputeStorage = new Storage<>(storageDir, protobufferResolver);
|
||||||
disputes = new DisputeList(disputeStorage);
|
disputes = new DisputeList(disputeStorage);
|
||||||
|
|
||||||
openDisputes = new HashMap<>();
|
openDisputes = new HashMap<>();
|
||||||
|
|
|
@ -20,7 +20,7 @@ package io.bisq.core.arbitration.messages;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.core.arbitration.Attachment;
|
import io.bisq.core.arbitration.Attachment;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import javafx.beans.property.BooleanProperty;
|
import javafx.beans.property.BooleanProperty;
|
||||||
import javafx.beans.property.SimpleBooleanProperty;
|
import javafx.beans.property.SimpleBooleanProperty;
|
||||||
|
@ -38,7 +38,7 @@ import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@EqualsAndHashCode
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ToString
|
@ToString
|
||||||
@Getter
|
@Getter
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
|
|
@ -20,7 +20,7 @@ package io.bisq.core.arbitration.messages;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.core.arbitration.DisputeResult;
|
import io.bisq.core.arbitration.DisputeResult;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
|
@ -20,7 +20,7 @@ package io.bisq.core.arbitration.messages;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.core.arbitration.Dispute;
|
import io.bisq.core.arbitration.Dispute;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
|
@ -20,7 +20,7 @@ package io.bisq.core.arbitration.messages;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.core.arbitration.Dispute;
|
import io.bisq.core.arbitration.Dispute;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
|
@ -20,7 +20,7 @@ package io.bisq.core.arbitration.messages;
|
||||||
import com.google.protobuf.ByteString;
|
import com.google.protobuf.ByteString;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -110,12 +110,14 @@ public final class AddressEntry implements Persistable {
|
||||||
String paramId,
|
String paramId,
|
||||||
Context context,
|
Context context,
|
||||||
@Nullable String offerId,
|
@Nullable String offerId,
|
||||||
|
@Nullable Coin coinLockedInMultiSig,
|
||||||
@NotNull KeyBagSupplier keyBagSupplier) {
|
@NotNull KeyBagSupplier keyBagSupplier) {
|
||||||
this.pubKey = pubKey;
|
this.pubKey = pubKey;
|
||||||
this.pubKeyHash = pubKeyHash;
|
this.pubKeyHash = pubKeyHash;
|
||||||
this.paramId = paramId;
|
this.paramId = paramId;
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.offerId = offerId;
|
this.offerId = offerId;
|
||||||
|
this.coinLockedInMultiSig = coinLockedInMultiSig;
|
||||||
this.keyBagSupplier = keyBagSupplier;
|
this.keyBagSupplier = keyBagSupplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,7 +212,7 @@ public final class AddressEntry implements Persistable {
|
||||||
public Message toProtobuf() {
|
public Message toProtobuf() {
|
||||||
PB.AddressEntry.Builder builder = PB.AddressEntry.newBuilder()
|
PB.AddressEntry.Builder builder = PB.AddressEntry.newBuilder()
|
||||||
.setContext(PB.AddressEntry.Context.valueOf(context.name()))
|
.setContext(PB.AddressEntry.Context.valueOf(context.name()))
|
||||||
.setPubkey(ByteString.copyFrom(pubKey))
|
.setPubKey(ByteString.copyFrom(pubKey))
|
||||||
.setPubKeyHash(ByteString.copyFrom(pubKeyHash))
|
.setPubKeyHash(ByteString.copyFrom(pubKeyHash))
|
||||||
.setParamId(paramId);
|
.setParamId(paramId);
|
||||||
Optional.ofNullable(offerId).ifPresent(builder::setOfferId);
|
Optional.ofNullable(offerId).ifPresent(builder::setOfferId);
|
||||||
|
|
|
@ -22,6 +22,7 @@ import com.google.protobuf.Message;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.common.persistance.Persistable;
|
import io.bisq.common.persistance.Persistable;
|
||||||
import io.bisq.common.storage.Storage;
|
import io.bisq.common.storage.Storage;
|
||||||
|
import io.bisq.core.btc.wallet.KeyBagSupplier;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bitcoinj.core.Wallet;
|
import org.bitcoinj.core.Wallet;
|
||||||
|
@ -43,13 +44,16 @@ public final class AddressEntryList implements Persistable {
|
||||||
private static final Logger log = LoggerFactory.getLogger(AddressEntryList.class);
|
private static final Logger log = LoggerFactory.getLogger(AddressEntryList.class);
|
||||||
|
|
||||||
final transient private Storage<AddressEntryList> storage;
|
final transient private Storage<AddressEntryList> storage;
|
||||||
|
@Getter
|
||||||
|
final transient private KeyBagSupplier keyBagSupplier;
|
||||||
transient private Wallet wallet;
|
transient private Wallet wallet;
|
||||||
@Getter
|
@Getter
|
||||||
private List<AddressEntry> addressEntryList = new ArrayList<>();
|
private List<AddressEntry> addressEntryList = new ArrayList<>();
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public AddressEntryList(Storage<AddressEntryList> storage) {
|
public AddressEntryList(Storage<AddressEntryList> storage, KeyBagSupplier keyBagSupplier) {
|
||||||
this.storage = storage;
|
this.storage = storage;
|
||||||
|
this.keyBagSupplier = keyBagSupplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onWalletReady(Wallet wallet) {
|
public void onWalletReady(Wallet wallet) {
|
||||||
|
|
|
@ -22,10 +22,7 @@ import com.google.inject.name.Names;
|
||||||
import io.bisq.common.app.AppModule;
|
import io.bisq.common.app.AppModule;
|
||||||
import io.bisq.core.app.AppOptionKeys;
|
import io.bisq.core.app.AppOptionKeys;
|
||||||
import io.bisq.core.btc.provider.squ.BsqUtxoFeedService;
|
import io.bisq.core.btc.provider.squ.BsqUtxoFeedService;
|
||||||
import io.bisq.core.btc.wallet.BsqWalletService;
|
import io.bisq.core.btc.wallet.*;
|
||||||
import io.bisq.core.btc.wallet.BtcWalletService;
|
|
||||||
import io.bisq.core.btc.wallet.TradeWalletService;
|
|
||||||
import io.bisq.core.btc.wallet.WalletsSetup;
|
|
||||||
import io.bisq.core.provider.fee.FeeService;
|
import io.bisq.core.provider.fee.FeeService;
|
||||||
import io.bisq.core.provider.price.PriceFeedService;
|
import io.bisq.core.provider.price.PriceFeedService;
|
||||||
import io.bisq.network.http.HttpClient;
|
import io.bisq.network.http.HttpClient;
|
||||||
|
@ -64,6 +61,7 @@ public class BitcoinModule extends AppModule {
|
||||||
bind(AddressEntryList.class).in(Singleton.class);
|
bind(AddressEntryList.class).in(Singleton.class);
|
||||||
bind(WalletsSetup.class).in(Singleton.class);
|
bind(WalletsSetup.class).in(Singleton.class);
|
||||||
bind(BtcWalletService.class).in(Singleton.class);
|
bind(BtcWalletService.class).in(Singleton.class);
|
||||||
|
bind(KeyBagSupplier.class).to(BtcWalletService.class);
|
||||||
bind(BsqWalletService.class).in(Singleton.class);
|
bind(BsqWalletService.class).in(Singleton.class);
|
||||||
bind(TradeWalletService.class).in(Singleton.class);
|
bind(TradeWalletService.class).in(Singleton.class);
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
|
|
||||||
package io.bisq.core.btc.wallet;
|
package io.bisq.core.btc.wallet;
|
||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
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;
|
||||||
|
@ -48,9 +47,7 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.*;
|
||||||
import static com.google.inject.internal.util.$Preconditions.checkArgument;
|
|
||||||
import static com.google.inject.internal.util.$Preconditions.checkState;
|
|
||||||
|
|
||||||
// TradeService handles all relevant transactions used in the trade process
|
// TradeService handles all relevant transactions used in the trade process
|
||||||
/*
|
/*
|
||||||
|
@ -336,7 +333,7 @@ public class TradeWalletService {
|
||||||
TransactionOutput makerOutput = null;
|
TransactionOutput makerOutput = null;
|
||||||
|
|
||||||
// We don't support more then 1 optional change output
|
// We don't support more then 1 optional change output
|
||||||
Preconditions.checkArgument(dummyTx.getOutputs().size() < 3, "dummyTx.getOutputs().size() >= 3");
|
checkArgument(dummyTx.getOutputs().size() < 3, "dummyTx.getOutputs().size() >= 3");
|
||||||
|
|
||||||
// Only save change outputs, the dummy output is ignored (that's why we start with index 1)
|
// Only save change outputs, the dummy output is ignored (that's why we start with index 1)
|
||||||
if (dummyTx.getOutputs().size() > 1)
|
if (dummyTx.getOutputs().size() > 1)
|
||||||
|
|
|
@ -27,6 +27,7 @@ import io.bisq.common.UserThread;
|
||||||
import io.bisq.common.app.Log;
|
import io.bisq.common.app.Log;
|
||||||
import io.bisq.common.handlers.ExceptionHandler;
|
import io.bisq.common.handlers.ExceptionHandler;
|
||||||
import io.bisq.common.handlers.ResultHandler;
|
import io.bisq.common.handlers.ResultHandler;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.storage.FileUtil;
|
import io.bisq.common.storage.FileUtil;
|
||||||
import io.bisq.common.storage.Storage;
|
import io.bisq.common.storage.Storage;
|
||||||
import io.bisq.core.btc.*;
|
import io.bisq.core.btc.*;
|
||||||
|
@ -97,6 +98,7 @@ public class WalletsSetup {
|
||||||
UserAgent userAgent,
|
UserAgent userAgent,
|
||||||
Preferences preferences,
|
Preferences preferences,
|
||||||
Socks5ProxyProvider socks5ProxyProvider,
|
Socks5ProxyProvider socks5ProxyProvider,
|
||||||
|
ProtobufferResolver protobufferResolver,
|
||||||
@Named(BtcOptionKeys.WALLET_DIR) File appDir,
|
@Named(BtcOptionKeys.WALLET_DIR) File appDir,
|
||||||
@Named(BtcOptionKeys.SOCKS5_DISCOVER_MODE) String socks5DiscoverModeString) {
|
@Named(BtcOptionKeys.SOCKS5_DISCOVER_MODE) String socks5DiscoverModeString) {
|
||||||
|
|
||||||
|
@ -111,7 +113,7 @@ public class WalletsSetup {
|
||||||
params = preferences.getBitcoinNetwork().getParameters();
|
params = preferences.getBitcoinNetwork().getParameters();
|
||||||
walletDir = new File(appDir, "bitcoin");
|
walletDir = new File(appDir, "bitcoin");
|
||||||
|
|
||||||
storage = new Storage<>(walletDir);
|
storage = new Storage<>(walletDir, protobufferResolver);
|
||||||
Long nonce = storage.initAndGetPersistedWithFileName("BloomFilterNonce");
|
Long nonce = storage.initAndGetPersistedWithFileName("BloomFilterNonce");
|
||||||
if (nonce != null) {
|
if (nonce != null) {
|
||||||
bloomFilterTweak = nonce;
|
bloomFilterTweak = nonce;
|
||||||
|
|
|
@ -20,6 +20,7 @@ package io.bisq.core.dao.vote;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.common.persistance.Persistable;
|
import io.bisq.common.persistance.Persistable;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.Getter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@ -27,12 +28,13 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ToString
|
@ToString
|
||||||
@EqualsAndHashCode
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public final class CompensationRequestVoteItemCollection extends VoteItem implements Persistable {
|
public final class CompensationRequestVoteItemCollection extends VoteItem implements Persistable {
|
||||||
// That object is saved to disc. We need to take care of changes to not break deserialization.
|
// That object is saved to disc. We need to take care of changes to not break deserialization.
|
||||||
private static final long serialVersionUID = Version.LOCAL_DB_VERSION;
|
private static final long serialVersionUID = Version.LOCAL_DB_VERSION;
|
||||||
|
|
||||||
|
@Getter
|
||||||
private final List<CompensationRequestVoteItem> compensationRequestVoteItems = new ArrayList<>();
|
private final List<CompensationRequestVoteItem> compensationRequestVoteItems = new ArrayList<>();
|
||||||
|
|
||||||
/** constructor */
|
/** constructor */
|
||||||
|
@ -40,10 +42,6 @@ public final class CompensationRequestVoteItemCollection extends VoteItem implem
|
||||||
super(votingType, null, null);
|
super(votingType, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<CompensationRequestVoteItem> getCompensationRequestVoteItems() {
|
|
||||||
return compensationRequestVoteItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<CompensationRequestVoteItem> getCompensationRequestVoteItemsSortedByTxId() {
|
public List<CompensationRequestVoteItem> getCompensationRequestVoteItemsSortedByTxId() {
|
||||||
ArrayList<CompensationRequestVoteItem> list = new ArrayList<>(compensationRequestVoteItems);
|
ArrayList<CompensationRequestVoteItem> list = new ArrayList<>(compensationRequestVoteItems);
|
||||||
list.sort((o1, o2) -> o2.compensationRequest.getCompensationRequestPayload().feeTxId.compareTo(o1.compensationRequest.getCompensationRequestPayload().feeTxId));
|
list.sort((o1, o2) -> o2.compensationRequest.getCompensationRequestPayload().feeTxId.compareTo(o1.compensationRequest.getCompensationRequestPayload().feeTxId));
|
||||||
|
|
|
@ -25,6 +25,8 @@ import io.bisq.common.app.Log;
|
||||||
import io.bisq.common.crypto.KeyRing;
|
import io.bisq.common.crypto.KeyRing;
|
||||||
import io.bisq.common.handlers.ErrorMessageHandler;
|
import io.bisq.common.handlers.ErrorMessageHandler;
|
||||||
import io.bisq.common.handlers.ResultHandler;
|
import io.bisq.common.handlers.ResultHandler;
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.storage.Storage;
|
import io.bisq.common.storage.Storage;
|
||||||
import io.bisq.core.btc.AddressEntry;
|
import io.bisq.core.btc.AddressEntry;
|
||||||
import io.bisq.core.btc.wallet.BtcWalletService;
|
import io.bisq.core.btc.wallet.BtcWalletService;
|
||||||
|
@ -96,6 +98,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
|
||||||
ClosedTradableManager closedTradableManager,
|
ClosedTradableManager closedTradableManager,
|
||||||
PriceFeedService priceFeedService,
|
PriceFeedService priceFeedService,
|
||||||
Preferences preferences,
|
Preferences preferences,
|
||||||
|
ProtobufferResolver protobufferResolver,
|
||||||
@Named(Storage.DIR_KEY) File storageDir) {
|
@Named(Storage.DIR_KEY) File storageDir) {
|
||||||
this.keyRing = keyRing;
|
this.keyRing = keyRing;
|
||||||
this.user = user;
|
this.user = user;
|
||||||
|
@ -106,7 +109,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
|
||||||
this.closedTradableManager = closedTradableManager;
|
this.closedTradableManager = closedTradableManager;
|
||||||
this.preferences = preferences;
|
this.preferences = preferences;
|
||||||
|
|
||||||
openOffersStorage = new Storage<>(storageDir);
|
openOffersStorage = new Storage<>(storageDir, protobufferResolver);
|
||||||
openOffers = new TradableList<>(openOffersStorage, "OpenOffers");
|
openOffers = new TradableList<>(openOffersStorage, "OpenOffers");
|
||||||
openOffers.forEach(e -> e.getOffer().setPriceFeedService(priceFeedService));
|
openOffers.forEach(e -> e.getOffer().setPriceFeedService(priceFeedService));
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ import io.bisq.core.offer.messages.OfferAvailabilityResponse;
|
||||||
import io.bisq.core.offer.messages.OfferMsg;
|
import io.bisq.core.offer.messages.OfferMsg;
|
||||||
import io.bisq.core.util.Validator;
|
import io.bisq.core.util.Validator;
|
||||||
import io.bisq.network.p2p.DecryptedDirectMessageListener;
|
import io.bisq.network.p2p.DecryptedDirectMessageListener;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ import io.bisq.common.app.Capabilities;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.core.offer.AvailabilityResult;
|
import io.bisq.core.offer.AvailabilityResult;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.SupportedCapabilitiesMsg;
|
import io.bisq.network.p2p.SupportedCapabilitiesMsg;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
|
@ -1,19 +1,24 @@
|
||||||
package io.bisq.core.p2p.network;
|
package io.bisq.core.p2p.network;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Provider;
|
||||||
import com.google.protobuf.ByteString;
|
import com.google.protobuf.ByteString;
|
||||||
import io.bisq.common.crypto.PubKeyRing;
|
import io.bisq.common.crypto.PubKeyRing;
|
||||||
import io.bisq.common.crypto.SealedAndSigned;
|
import io.bisq.common.crypto.SealedAndSigned;
|
||||||
import io.bisq.common.locale.CountryUtil;
|
import io.bisq.common.locale.CountryUtil;
|
||||||
import io.bisq.common.locale.CurrencyUtil;
|
import io.bisq.common.locale.CurrencyUtil;
|
||||||
import io.bisq.common.monetary.Price;
|
import io.bisq.common.monetary.Price;
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
|
import io.bisq.common.persistance.Persistable;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.core.alert.Alert;
|
import io.bisq.core.alert.Alert;
|
||||||
import io.bisq.core.alert.PrivateNotificationMsg;
|
import io.bisq.core.alert.PrivateNotificationMsg;
|
||||||
import io.bisq.core.alert.PrivateNotificationPayload;
|
import io.bisq.core.alert.PrivateNotificationPayload;
|
||||||
import io.bisq.core.arbitration.*;
|
import io.bisq.core.arbitration.*;
|
||||||
import io.bisq.core.arbitration.messages.*;
|
import io.bisq.core.arbitration.messages.*;
|
||||||
import io.bisq.core.btc.AddressEntry;
|
import io.bisq.core.btc.AddressEntry;
|
||||||
|
import io.bisq.core.btc.AddressEntryList;
|
||||||
import io.bisq.core.btc.data.RawTransactionInput;
|
import io.bisq.core.btc.data.RawTransactionInput;
|
||||||
import io.bisq.core.btc.wallet.BtcWalletService;
|
|
||||||
import io.bisq.core.dao.compensation.CompensationRequestPayload;
|
import io.bisq.core.dao.compensation.CompensationRequestPayload;
|
||||||
import io.bisq.core.filter.Filter;
|
import io.bisq.core.filter.Filter;
|
||||||
import io.bisq.core.filter.PaymentAccountFilter;
|
import io.bisq.core.filter.PaymentAccountFilter;
|
||||||
|
@ -27,10 +32,8 @@ import io.bisq.core.trade.messages.*;
|
||||||
import io.bisq.core.trade.statistics.TradeStatistics;
|
import io.bisq.core.trade.statistics.TradeStatistics;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.CloseConnectionMsg;
|
import io.bisq.network.p2p.CloseConnectionMsg;
|
||||||
import io.bisq.network.p2p.Msg;
|
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import io.bisq.network.p2p.PrefixedSealedAndSignedMsg;
|
import io.bisq.network.p2p.PrefixedSealedAndSignedMsg;
|
||||||
import io.bisq.network.p2p.network.ProtobufferResolver;
|
|
||||||
import io.bisq.network.p2p.peers.getdata.messages.GetDataResponse;
|
import io.bisq.network.p2p.peers.getdata.messages.GetDataResponse;
|
||||||
import io.bisq.network.p2p.peers.getdata.messages.GetUpdatedDataRequest;
|
import io.bisq.network.p2p.peers.getdata.messages.GetUpdatedDataRequest;
|
||||||
import io.bisq.network.p2p.peers.getdata.messages.PreliminaryGetDataRequest;
|
import io.bisq.network.p2p.peers.getdata.messages.PreliminaryGetDataRequest;
|
||||||
|
@ -48,15 +51,11 @@ import io.bisq.network.p2p.storage.payload.ProtectedMailboxStorageEntry;
|
||||||
import io.bisq.network.p2p.storage.payload.ProtectedStorageEntry;
|
import io.bisq.network.p2p.storage.payload.ProtectedStorageEntry;
|
||||||
import io.bisq.network.p2p.storage.payload.StoragePayload;
|
import io.bisq.network.p2p.storage.payload.StoragePayload;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.io.output.WriterOutputStream;
|
|
||||||
import org.bitcoinj.core.Coin;
|
import org.bitcoinj.core.Coin;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@ -76,12 +75,9 @@ import static io.bisq.generated.protobuffer.PB.Envelope.MessageCase.*;
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class CoreProtobufferResolver implements ProtobufferResolver {
|
public class CoreProtobufferResolver implements ProtobufferResolver {
|
||||||
private BtcWalletService btcWalletService;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public CoreProtobufferResolver(BtcWalletService btcWalletService) {
|
private Provider<AddressEntryList> addressEntryList;
|
||||||
this.btcWalletService = btcWalletService;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<Msg> fromProto(PB.Envelope envelope) {
|
public Optional<Msg> fromProto(PB.Envelope envelope) {
|
||||||
|
@ -95,18 +91,6 @@ public class CoreProtobufferResolver implements ProtobufferResolver {
|
||||||
log.debug("Convert protobuffer envelope: {}", envelope.getMessageCase());
|
log.debug("Convert protobuffer envelope: {}", envelope.getMessageCase());
|
||||||
log.trace("Convert protobuffer envelope: {}", envelope.toString());
|
log.trace("Convert protobuffer envelope: {}", envelope.toString());
|
||||||
}
|
}
|
||||||
StringWriter stringWriter = new StringWriter();
|
|
||||||
WriterOutputStream writerOutputStream = new WriterOutputStream(stringWriter);
|
|
||||||
|
|
||||||
try {
|
|
||||||
envelope.writeTo(writerOutputStream);
|
|
||||||
writerOutputStream.flush();
|
|
||||||
stringWriter.flush();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
// todo just for testing...
|
|
||||||
AddressEntry AddressEntry = new AddressEntry(null, null, null, null, null, btcWalletService);
|
|
||||||
|
|
||||||
Msg result = null;
|
Msg result = null;
|
||||||
switch (envelope.getMessageCase()) {
|
switch (envelope.getMessageCase()) {
|
||||||
|
@ -869,4 +853,56 @@ public class CoreProtobufferResolver implements ProtobufferResolver {
|
||||||
.stream()
|
.stream()
|
||||||
.map(ByteString::toByteArray).collect(Collectors.toList()));
|
.map(ByteString::toByteArray).collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////// DISK /////////////////////////////////////
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<Persistable> fromProto(PB.DiskEnvelope envelope) {
|
||||||
|
if (Objects.isNull(envelope)) {
|
||||||
|
log.warn("fromProtoBuf called with empty disk envelope.");
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
log.debug("Convert protobuffer disk envelope: {}", envelope.getMessageCase());
|
||||||
|
|
||||||
|
Persistable result = null;
|
||||||
|
switch (envelope.getMessageCase()) {
|
||||||
|
case ADDRESS_ENTRY_LIST:
|
||||||
|
addToAddressEntryList(envelope);
|
||||||
|
result = addressEntryList.get();
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
case NAVIGATION:
|
||||||
|
result = getPing(envelope);
|
||||||
|
break;
|
||||||
|
case PERSISTED_PEERS:
|
||||||
|
result = getPing(envelope);
|
||||||
|
break;
|
||||||
|
case PREFERENCES:
|
||||||
|
result = getPing(envelope);
|
||||||
|
break;
|
||||||
|
case USER:
|
||||||
|
result = getPing(envelope);
|
||||||
|
break;
|
||||||
|
case PERSISTED_P2P_STORAGE_DATA:
|
||||||
|
result = getPing(envelope);
|
||||||
|
break;
|
||||||
|
case SEQUENCE_NUMBER_MAP:
|
||||||
|
result = getPing(envelope);
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
default:
|
||||||
|
log.warn("Unknown message case:{}:{}", envelope.getMessageCase());
|
||||||
|
}
|
||||||
|
return Optional.ofNullable(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addToAddressEntryList(PB.DiskEnvelope envelope) {
|
||||||
|
envelope.getAddressEntryList().getAddressEntryList().stream().map(addressEntry -> addressEntryList.get().addAddressEntry(
|
||||||
|
new AddressEntry(addressEntry.getPubKey().toByteArray(), addressEntry.getPubKeyHash().toByteArray(), addressEntry.getParamId(), AddressEntry.Context.valueOf(addressEntry.getContext().name()),
|
||||||
|
addressEntry.getOfferId(), Coin.valueOf(addressEntry.getCoinLockedInMultiSig().getValue()), addressEntryList.get().getKeyBagSupplier())));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,8 @@ import io.bisq.common.crypto.KeyRing;
|
||||||
import io.bisq.common.handlers.ErrorMessageHandler;
|
import io.bisq.common.handlers.ErrorMessageHandler;
|
||||||
import io.bisq.common.handlers.FaultHandler;
|
import io.bisq.common.handlers.FaultHandler;
|
||||||
import io.bisq.common.handlers.ResultHandler;
|
import io.bisq.common.handlers.ResultHandler;
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.storage.Storage;
|
import io.bisq.common.storage.Storage;
|
||||||
import io.bisq.core.arbitration.ArbitratorManager;
|
import io.bisq.core.arbitration.ArbitratorManager;
|
||||||
import io.bisq.core.btc.AddressEntry;
|
import io.bisq.core.btc.AddressEntry;
|
||||||
|
@ -111,6 +113,7 @@ public class TradeManager {
|
||||||
PriceFeedService priceFeedService,
|
PriceFeedService priceFeedService,
|
||||||
FilterManager filterManager,
|
FilterManager filterManager,
|
||||||
TradeStatisticsManager tradeStatisticsManager,
|
TradeStatisticsManager tradeStatisticsManager,
|
||||||
|
ProtobufferResolver protobufferResolver,
|
||||||
@Named(Storage.DIR_KEY) File storageDir) {
|
@Named(Storage.DIR_KEY) File storageDir) {
|
||||||
this.user = user;
|
this.user = user;
|
||||||
this.keyRing = keyRing;
|
this.keyRing = keyRing;
|
||||||
|
@ -124,7 +127,7 @@ public class TradeManager {
|
||||||
this.filterManager = filterManager;
|
this.filterManager = filterManager;
|
||||||
this.tradeStatisticsManager = tradeStatisticsManager;
|
this.tradeStatisticsManager = tradeStatisticsManager;
|
||||||
|
|
||||||
tradableListStorage = new Storage<>(storageDir);
|
tradableListStorage = new Storage<>(storageDir, protobufferResolver);
|
||||||
trades = new TradableList<>(tradableListStorage, "PendingTrades");
|
trades = new TradableList<>(tradableListStorage, "PendingTrades");
|
||||||
trades.forEach(e -> e.getOffer().setPriceFeedService(priceFeedService));
|
trades.forEach(e -> e.getOffer().setPriceFeedService(priceFeedService));
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ package io.bisq.core.trade.closed;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import io.bisq.common.crypto.KeyRing;
|
import io.bisq.common.crypto.KeyRing;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.storage.Storage;
|
import io.bisq.common.storage.Storage;
|
||||||
import io.bisq.core.offer.Offer;
|
import io.bisq.core.offer.Offer;
|
||||||
import io.bisq.core.provider.price.PriceFeedService;
|
import io.bisq.core.provider.price.PriceFeedService;
|
||||||
|
@ -38,9 +39,11 @@ public class ClosedTradableManager {
|
||||||
private final KeyRing keyRing;
|
private final KeyRing keyRing;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public ClosedTradableManager(KeyRing keyRing, PriceFeedService priceFeedService, @Named(Storage.DIR_KEY) File storageDir) {
|
public ClosedTradableManager(KeyRing keyRing, PriceFeedService priceFeedService,
|
||||||
|
ProtobufferResolver protobufferResolver,
|
||||||
|
@Named(Storage.DIR_KEY) File storageDir) {
|
||||||
this.keyRing = keyRing;
|
this.keyRing = keyRing;
|
||||||
final Storage<TradableList<Tradable>> tradableListStorage = new Storage<>(storageDir);
|
final Storage<TradableList<Tradable>> tradableListStorage = new Storage<>(storageDir, protobufferResolver);
|
||||||
// The ClosedTrades object can become a few MB so we don't keep so many backups
|
// The ClosedTrades object can become a few MB so we don't keep so many backups
|
||||||
tradableListStorage.setNumMaxBackupFiles(3);
|
tradableListStorage.setNumMaxBackupFiles(3);
|
||||||
this.closedTrades = new TradableList<>(tradableListStorage, "ClosedTrades");
|
this.closedTrades = new TradableList<>(tradableListStorage, "ClosedTrades");
|
||||||
|
|
|
@ -19,6 +19,7 @@ package io.bisq.core.trade.failed;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import io.bisq.common.crypto.KeyRing;
|
import io.bisq.common.crypto.KeyRing;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.storage.Storage;
|
import io.bisq.common.storage.Storage;
|
||||||
import io.bisq.core.offer.Offer;
|
import io.bisq.core.offer.Offer;
|
||||||
import io.bisq.core.provider.price.PriceFeedService;
|
import io.bisq.core.provider.price.PriceFeedService;
|
||||||
|
@ -38,9 +39,11 @@ public class FailedTradesManager {
|
||||||
private final KeyRing keyRing;
|
private final KeyRing keyRing;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public FailedTradesManager(KeyRing keyRing, PriceFeedService priceFeedService, @Named(Storage.DIR_KEY) File storageDir) {
|
public FailedTradesManager(KeyRing keyRing, PriceFeedService priceFeedService,
|
||||||
|
ProtobufferResolver protobufferResolver,
|
||||||
|
@Named(Storage.DIR_KEY) File storageDir) {
|
||||||
this.keyRing = keyRing;
|
this.keyRing = keyRing;
|
||||||
this.failedTrades = new TradableList<>(new Storage<>(storageDir), "FailedTrades");
|
this.failedTrades = new TradableList<>(new Storage<>(storageDir, protobufferResolver), "FailedTrades");
|
||||||
failedTrades.forEach(e -> e.getOffer().setPriceFeedService(priceFeedService));
|
failedTrades.forEach(e -> e.getOffer().setPriceFeedService(priceFeedService));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ import com.google.protobuf.ByteString;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.MailboxMsg;
|
import io.bisq.network.p2p.MailboxMsg;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import org.bouncycastle.util.encoders.Hex;
|
import org.bouncycastle.util.encoders.Hex;
|
||||||
|
|
|
@ -21,7 +21,7 @@ import com.google.protobuf.ByteString;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.MailboxMsg;
|
import io.bisq.network.p2p.MailboxMsg;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ import com.google.protobuf.ByteString;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.MailboxMsg;
|
import io.bisq.network.p2p.MailboxMsg;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ import io.bisq.common.crypto.PubKeyRing;
|
||||||
import io.bisq.core.btc.data.RawTransactionInput;
|
import io.bisq.core.btc.data.RawTransactionInput;
|
||||||
import io.bisq.core.payment.payload.PaymentAccountPayload;
|
import io.bisq.core.payment.payload.PaymentAccountPayload;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import org.bouncycastle.util.encoders.Hex;
|
import org.bouncycastle.util.encoders.Hex;
|
||||||
|
|
|
@ -21,7 +21,7 @@ import com.google.protobuf.ByteString;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.MailboxMsg;
|
import io.bisq.network.p2p.MailboxMsg;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ import io.bisq.core.btc.data.RawTransactionInput;
|
||||||
import io.bisq.core.payment.payload.PaymentAccountPayload;
|
import io.bisq.core.payment.payload.PaymentAccountPayload;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.MailboxMsg;
|
import io.bisq.network.p2p.MailboxMsg;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import org.bouncycastle.util.encoders.Hex;
|
import org.bouncycastle.util.encoders.Hex;
|
||||||
|
|
|
@ -33,7 +33,7 @@ import io.bisq.core.trade.protocol.tasks.buyer_as_maker.BuyerAsMakerSignPayoutTx
|
||||||
import io.bisq.core.trade.protocol.tasks.maker.*;
|
import io.bisq.core.trade.protocol.tasks.maker.*;
|
||||||
import io.bisq.core.util.Validator;
|
import io.bisq.core.util.Validator;
|
||||||
import io.bisq.network.p2p.MailboxMsg;
|
import io.bisq.network.p2p.MailboxMsg;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ import io.bisq.core.trade.protocol.tasks.buyer_as_taker.BuyerAsTakerCreatesDepos
|
||||||
import io.bisq.core.trade.protocol.tasks.buyer_as_taker.BuyerAsTakerSignAndPublishDepositTx;
|
import io.bisq.core.trade.protocol.tasks.buyer_as_taker.BuyerAsTakerSignAndPublishDepositTx;
|
||||||
import io.bisq.core.trade.protocol.tasks.taker.*;
|
import io.bisq.core.trade.protocol.tasks.taker.*;
|
||||||
import io.bisq.network.p2p.MailboxMsg;
|
import io.bisq.network.p2p.MailboxMsg;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
|
|
@ -88,8 +88,11 @@ public class ProcessModel implements Model, Serializable {
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
private List<NodeAddress> takerAcceptedArbitratorNodeAddresses;
|
private List<NodeAddress> takerAcceptedArbitratorNodeAddresses;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
private List<NodeAddress> takerAcceptedMediatorNodeAddresses;
|
private List<NodeAddress> takerAcceptedMediatorNodeAddresses;
|
||||||
|
|
||||||
|
|
||||||
// that is used to store temp. the peers address when we get an incoming message before the message is verified.
|
// that is used to store temp. the peers address when we get an incoming message before the message is verified.
|
||||||
// After successful verified we copy that over to the trade.tradingPeerAddress
|
// After successful verified we copy that over to the trade.tradingPeerAddress
|
||||||
@Getter
|
@Getter
|
||||||
|
@ -196,10 +199,6 @@ public class ProcessModel implements Model, Serializable {
|
||||||
return payoutTxSignature;
|
return payoutTxSignature;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPayoutTxSignature(byte[] payoutTxSignature) {
|
|
||||||
this.payoutTxSignature = payoutTxSignature;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void persist() {
|
public void persist() {
|
||||||
}
|
}
|
||||||
|
@ -212,62 +211,6 @@ public class ProcessModel implements Model, Serializable {
|
||||||
return keyRing.getPubKeyRing();
|
return keyRing.getPubKeyRing();
|
||||||
}
|
}
|
||||||
|
|
||||||
public KeyRing getKeyRing() {
|
|
||||||
return keyRing;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTakerAcceptedArbitratorNodeAddresses(List<NodeAddress> takerAcceptedArbitratorNodeAddresses) {
|
|
||||||
this.takerAcceptedArbitratorNodeAddresses = takerAcceptedArbitratorNodeAddresses;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<NodeAddress> getTakerAcceptedArbitratorNodeAddresses() {
|
|
||||||
return takerAcceptedArbitratorNodeAddresses;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTakerAcceptedMediatorNodeAddresses(List<NodeAddress> takerAcceptedMediatorNodeAddresses) {
|
|
||||||
this.takerAcceptedMediatorNodeAddresses = takerAcceptedMediatorNodeAddresses;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<NodeAddress> getTakerAcceptedMediatorNodeAddresses() {
|
|
||||||
return takerAcceptedMediatorNodeAddresses;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTempTradingPeerNodeAddress(NodeAddress tempTradingPeerNodeAddress) {
|
|
||||||
this.tempTradingPeerNodeAddress = tempTradingPeerNodeAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
public NodeAddress getTempTradingPeerNodeAddress() {
|
|
||||||
return tempTradingPeerNodeAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArbitratorManager getArbitratorManager() {
|
|
||||||
return arbitratorManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPreparedDepositTx(byte[] preparedDepositTx) {
|
|
||||||
this.preparedDepositTx = preparedDepositTx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getPreparedDepositTx() {
|
|
||||||
return preparedDepositTx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRawTransactionInputs(ArrayList<RawTransactionInput> rawTransactionInputs) {
|
|
||||||
this.rawTransactionInputs = rawTransactionInputs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArrayList<RawTransactionInput> getRawTransactionInputs() {
|
|
||||||
return rawTransactionInputs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setChangeOutputValue(long changeOutputValue) {
|
|
||||||
this.changeOutputValue = changeOutputValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getChangeOutputValue() {
|
|
||||||
return changeOutputValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setChangeOutputAddress(String changeOutputAddress) {
|
public void setChangeOutputAddress(String changeOutputAddress) {
|
||||||
this.changeOutputAddress = changeOutputAddress;
|
this.changeOutputAddress = changeOutputAddress;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ import io.bisq.core.trade.protocol.tasks.seller.SellerSignAndFinalizePayoutTx;
|
||||||
import io.bisq.core.trade.protocol.tasks.seller_as_maker.SellerAsMakerCreatesAndSignsDepositTx;
|
import io.bisq.core.trade.protocol.tasks.seller_as_maker.SellerAsMakerCreatesAndSignsDepositTx;
|
||||||
import io.bisq.core.util.Validator;
|
import io.bisq.core.util.Validator;
|
||||||
import io.bisq.network.p2p.MailboxMsg;
|
import io.bisq.network.p2p.MailboxMsg;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ import io.bisq.core.trade.protocol.tasks.seller_as_taker.SellerAsTakerCreatesDep
|
||||||
import io.bisq.core.trade.protocol.tasks.seller_as_taker.SellerAsTakerSignAndPublishDepositTx;
|
import io.bisq.core.trade.protocol.tasks.seller_as_taker.SellerAsTakerSignAndPublishDepositTx;
|
||||||
import io.bisq.core.trade.protocol.tasks.taker.*;
|
import io.bisq.core.trade.protocol.tasks.taker.*;
|
||||||
import io.bisq.network.p2p.MailboxMsg;
|
import io.bisq.network.p2p.MailboxMsg;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ import io.bisq.core.trade.TradeManager;
|
||||||
import io.bisq.core.trade.messages.TradeMsg;
|
import io.bisq.core.trade.messages.TradeMsg;
|
||||||
import io.bisq.network.p2p.DecryptedDirectMessageListener;
|
import io.bisq.network.p2p.DecryptedDirectMessageListener;
|
||||||
import io.bisq.network.p2p.DecryptedMsgWithPubKey;
|
import io.bisq.network.p2p.DecryptedMsgWithPubKey;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import javafx.beans.value.ChangeListener;
|
import javafx.beans.value.ChangeListener;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
|
@ -39,7 +39,7 @@ import io.bisq.gui.common.view.CachingViewLoader;
|
||||||
import io.bisq.gui.main.overlays.notifications.NotificationCenter;
|
import io.bisq.gui.main.overlays.notifications.NotificationCenter;
|
||||||
import io.bisq.network.crypto.EncryptionServiceModule;
|
import io.bisq.network.crypto.EncryptionServiceModule;
|
||||||
import io.bisq.network.p2p.P2PModule;
|
import io.bisq.network.p2p.P2PModule;
|
||||||
import io.bisq.network.p2p.network.ProtobufferResolver;
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
|
@ -21,6 +21,7 @@ import com.google.inject.Inject;
|
||||||
import io.bisq.common.locale.CryptoCurrency;
|
import io.bisq.common.locale.CryptoCurrency;
|
||||||
import io.bisq.common.locale.FiatCurrency;
|
import io.bisq.common.locale.FiatCurrency;
|
||||||
import io.bisq.common.locale.TradeCurrency;
|
import io.bisq.common.locale.TradeCurrency;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.core.offer.OpenOfferManager;
|
import io.bisq.core.offer.OpenOfferManager;
|
||||||
import io.bisq.core.payment.CryptoCurrencyAccount;
|
import io.bisq.core.payment.CryptoCurrencyAccount;
|
||||||
import io.bisq.core.payment.PaymentAccount;
|
import io.bisq.core.payment.PaymentAccount;
|
||||||
|
@ -49,15 +50,17 @@ class AltCoinAccountsDataModel extends ActivatableDataModel {
|
||||||
final ObservableList<PaymentAccount> paymentAccounts = FXCollections.observableArrayList();
|
final ObservableList<PaymentAccount> paymentAccounts = FXCollections.observableArrayList();
|
||||||
private final SetChangeListener<PaymentAccount> setChangeListener;
|
private final SetChangeListener<PaymentAccount> setChangeListener;
|
||||||
private final String accountsFileName = "AltcoinPaymentAccounts";
|
private final String accountsFileName = "AltcoinPaymentAccounts";
|
||||||
|
private final ProtobufferResolver protobufferResolver;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public AltCoinAccountsDataModel(User user, Preferences preferences, OpenOfferManager openOfferManager,
|
public AltCoinAccountsDataModel(User user, Preferences preferences, OpenOfferManager openOfferManager,
|
||||||
TradeManager tradeManager, Stage stage) {
|
TradeManager tradeManager, Stage stage, ProtobufferResolver protobufferResolver) {
|
||||||
this.user = user;
|
this.user = user;
|
||||||
this.preferences = preferences;
|
this.preferences = preferences;
|
||||||
this.openOfferManager = openOfferManager;
|
this.openOfferManager = openOfferManager;
|
||||||
this.tradeManager = tradeManager;
|
this.tradeManager = tradeManager;
|
||||||
this.stage = stage;
|
this.stage = stage;
|
||||||
|
this.protobufferResolver = protobufferResolver;
|
||||||
setChangeListener = change -> fillAndSortPaymentAccounts();
|
setChangeListener = change -> fillAndSortPaymentAccounts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,10 +129,10 @@ class AltCoinAccountsDataModel extends ActivatableDataModel {
|
||||||
ArrayList<PaymentAccount> accounts = new ArrayList<>(user.getPaymentAccounts().stream()
|
ArrayList<PaymentAccount> accounts = new ArrayList<>(user.getPaymentAccounts().stream()
|
||||||
.filter(paymentAccount -> paymentAccount instanceof CryptoCurrencyAccount)
|
.filter(paymentAccount -> paymentAccount instanceof CryptoCurrencyAccount)
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
GUIUtil.exportAccounts(accounts, accountsFileName, preferences, stage);
|
GUIUtil.exportAccounts(accounts, accountsFileName, preferences, stage, protobufferResolver);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void importAccounts() {
|
public void importAccounts() {
|
||||||
GUIUtil.importAccounts(user, accountsFileName, preferences, stage);
|
GUIUtil.importAccounts(user, accountsFileName, preferences, stage, protobufferResolver);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import com.google.inject.Inject;
|
||||||
import io.bisq.common.locale.CryptoCurrency;
|
import io.bisq.common.locale.CryptoCurrency;
|
||||||
import io.bisq.common.locale.FiatCurrency;
|
import io.bisq.common.locale.FiatCurrency;
|
||||||
import io.bisq.common.locale.TradeCurrency;
|
import io.bisq.common.locale.TradeCurrency;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.core.offer.OpenOfferManager;
|
import io.bisq.core.offer.OpenOfferManager;
|
||||||
import io.bisq.core.payment.CryptoCurrencyAccount;
|
import io.bisq.core.payment.CryptoCurrencyAccount;
|
||||||
import io.bisq.core.payment.PaymentAccount;
|
import io.bisq.core.payment.PaymentAccount;
|
||||||
|
@ -49,15 +50,17 @@ class FiatAccountsDataModel extends ActivatableDataModel {
|
||||||
final ObservableList<PaymentAccount> paymentAccounts = FXCollections.observableArrayList();
|
final ObservableList<PaymentAccount> paymentAccounts = FXCollections.observableArrayList();
|
||||||
private final SetChangeListener<PaymentAccount> setChangeListener;
|
private final SetChangeListener<PaymentAccount> setChangeListener;
|
||||||
private final String accountsFileName = "FiatPaymentAccounts";
|
private final String accountsFileName = "FiatPaymentAccounts";
|
||||||
|
private final ProtobufferResolver protobufferResolver;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public FiatAccountsDataModel(User user, Preferences preferences, OpenOfferManager openOfferManager,
|
public FiatAccountsDataModel(User user, Preferences preferences, OpenOfferManager openOfferManager,
|
||||||
TradeManager tradeManager, Stage stage) {
|
TradeManager tradeManager, Stage stage, ProtobufferResolver protobufferResolver) {
|
||||||
this.user = user;
|
this.user = user;
|
||||||
this.preferences = preferences;
|
this.preferences = preferences;
|
||||||
this.openOfferManager = openOfferManager;
|
this.openOfferManager = openOfferManager;
|
||||||
this.tradeManager = tradeManager;
|
this.tradeManager = tradeManager;
|
||||||
this.stage = stage;
|
this.stage = stage;
|
||||||
|
this.protobufferResolver = protobufferResolver;
|
||||||
setChangeListener = change -> fillAndSortPaymentAccounts();
|
setChangeListener = change -> fillAndSortPaymentAccounts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,10 +130,10 @@ class FiatAccountsDataModel extends ActivatableDataModel {
|
||||||
ArrayList<PaymentAccount> accounts = new ArrayList<>(user.getPaymentAccounts().stream()
|
ArrayList<PaymentAccount> accounts = new ArrayList<>(user.getPaymentAccounts().stream()
|
||||||
.filter(paymentAccount -> !(paymentAccount instanceof CryptoCurrencyAccount))
|
.filter(paymentAccount -> !(paymentAccount instanceof CryptoCurrencyAccount))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
GUIUtil.exportAccounts(accounts, accountsFileName, preferences, stage);
|
GUIUtil.exportAccounts(accounts, accountsFileName, preferences, stage, protobufferResolver);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void importAccounts() {
|
public void importAccounts() {
|
||||||
GUIUtil.importAccounts(user, accountsFileName, preferences, stage);
|
GUIUtil.importAccounts(user, accountsFileName, preferences, stage, protobufferResolver);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,8 @@ import org.bitcoinj.crypto.KeyCrypterScrypt;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import static com.google.inject.internal.util.$Preconditions.checkArgument;
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
|
|
||||||
|
|
||||||
@FxmlView
|
@FxmlView
|
||||||
public class PasswordView extends ActivatableView<GridPane, Void> {
|
public class PasswordView extends ActivatableView<GridPane, Void> {
|
||||||
|
|
|
@ -59,7 +59,7 @@ import java.time.ZoneId;
|
||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import static com.google.inject.internal.util.$Preconditions.checkArgument;
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
import static io.bisq.gui.util.FormBuilder.*;
|
import static io.bisq.gui.util.FormBuilder.*;
|
||||||
import static javafx.beans.binding.Bindings.createBooleanBinding;
|
import static javafx.beans.binding.Bindings.createBooleanBinding;
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ import io.bisq.common.app.DevEnv;
|
||||||
import io.bisq.common.locale.CurrencyUtil;
|
import io.bisq.common.locale.CurrencyUtil;
|
||||||
import io.bisq.common.locale.Res;
|
import io.bisq.common.locale.Res;
|
||||||
import io.bisq.common.locale.TradeCurrency;
|
import io.bisq.common.locale.TradeCurrency;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.storage.Storage;
|
import io.bisq.common.storage.Storage;
|
||||||
import io.bisq.common.util.Utilities;
|
import io.bisq.common.util.Utilities;
|
||||||
import io.bisq.core.payment.PaymentAccount;
|
import io.bisq.core.payment.PaymentAccount;
|
||||||
|
@ -88,10 +89,11 @@ public class GUIUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void exportAccounts(ArrayList<PaymentAccount> accounts, String fileName, Preferences preferences, Stage stage) {
|
public static void exportAccounts(ArrayList<PaymentAccount> accounts, String fileName,
|
||||||
|
Preferences preferences, Stage stage, ProtobufferResolver protobufferResolver) {
|
||||||
if (!accounts.isEmpty()) {
|
if (!accounts.isEmpty()) {
|
||||||
String directory = getDirectoryFromChooser(preferences, stage);
|
String directory = getDirectoryFromChooser(preferences, stage);
|
||||||
Storage<ArrayList<PaymentAccount>> paymentAccountsStorage = new Storage<>(new File(directory));
|
Storage<ArrayList<PaymentAccount>> paymentAccountsStorage = new Storage<>(new File(directory), protobufferResolver);
|
||||||
paymentAccountsStorage.initAndGetPersisted(accounts, fileName);
|
paymentAccountsStorage.initAndGetPersisted(accounts, fileName);
|
||||||
paymentAccountsStorage.queueUpForSave();
|
paymentAccountsStorage.queueUpForSave();
|
||||||
new Popup<>().feedback(Res.get("guiUtil.accountExport.savedToPath", Paths.get(directory, fileName).toAbsolutePath())).show();
|
new Popup<>().feedback(Res.get("guiUtil.accountExport.savedToPath", Paths.get(directory, fileName).toAbsolutePath())).show();
|
||||||
|
@ -100,7 +102,8 @@ public class GUIUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void importAccounts(User user, String fileName, Preferences preferences, Stage stage) {
|
public static void importAccounts(User user, String fileName, Preferences preferences, Stage stage,
|
||||||
|
ProtobufferResolver protobufferResolver) {
|
||||||
FileChooser fileChooser = new FileChooser();
|
FileChooser fileChooser = new FileChooser();
|
||||||
fileChooser.setInitialDirectory(new File(preferences.getDirectoryChooserPath()));
|
fileChooser.setInitialDirectory(new File(preferences.getDirectoryChooserPath()));
|
||||||
fileChooser.setTitle(Res.get("guiUtil.accountExport.selectPath", fileName));
|
fileChooser.setTitle(Res.get("guiUtil.accountExport.selectPath", fileName));
|
||||||
|
@ -110,7 +113,7 @@ public class GUIUtil {
|
||||||
if (Paths.get(path).getFileName().toString().equals(fileName)) {
|
if (Paths.get(path).getFileName().toString().equals(fileName)) {
|
||||||
String directory = Paths.get(path).getParent().toString();
|
String directory = Paths.get(path).getParent().toString();
|
||||||
preferences.setDirectoryChooserPath(directory);
|
preferences.setDirectoryChooserPath(directory);
|
||||||
Storage<ArrayList<PaymentAccount>> paymentAccountsStorage = new Storage<>(new File(directory));
|
Storage<ArrayList<PaymentAccount>> paymentAccountsStorage = new Storage<>(new File(directory), protobufferResolver);
|
||||||
ArrayList<PaymentAccount> persisted = paymentAccountsStorage.initAndGetPersistedWithFileName(fileName);
|
ArrayList<PaymentAccount> persisted = paymentAccountsStorage.initAndGetPersistedWithFileName(fileName);
|
||||||
if (persisted != null) {
|
if (persisted != null) {
|
||||||
final StringBuilder msg = new StringBuilder();
|
final StringBuilder msg = new StringBuilder();
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
package io.bisq.network.crypto;
|
package io.bisq.network.crypto;
|
||||||
|
|
||||||
|
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
|
|
||||||
import java.security.PublicKey;
|
import java.security.PublicKey;
|
||||||
|
|
||||||
|
|
|
@ -22,8 +22,8 @@ import io.bisq.common.Marshaller;
|
||||||
import io.bisq.common.crypto.*;
|
import io.bisq.common.crypto.*;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.DecryptedMsgWithPubKey;
|
import io.bisq.network.p2p.DecryptedMsgWithPubKey;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.network.ProtobufferResolver;
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import javax.crypto.SecretKey;
|
import javax.crypto.SecretKey;
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
package io.bisq.network.p2p;
|
package io.bisq.network.p2p;
|
||||||
|
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
|
|
||||||
public interface AnonymousMsg extends Msg {
|
public interface AnonymousMsg extends Msg {
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package io.bisq.network.p2p;
|
package io.bisq.network.p2p;
|
||||||
|
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
|
|
||||||
public final class CloseConnectionMsg implements Msg {
|
public final class CloseConnectionMsg implements Msg {
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
package io.bisq.network.p2p;
|
package io.bisq.network.p2p;
|
||||||
|
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.common.persistance.Persistable;
|
import io.bisq.common.persistance.Persistable;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
|
@ -17,5 +17,7 @@
|
||||||
|
|
||||||
package io.bisq.network.p2p;
|
package io.bisq.network.p2p;
|
||||||
|
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
|
|
||||||
public interface DirectMsg extends Msg {
|
public interface DirectMsg extends Msg {
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,8 @@ import io.bisq.common.app.Log;
|
||||||
import io.bisq.common.crypto.CryptoException;
|
import io.bisq.common.crypto.CryptoException;
|
||||||
import io.bisq.common.crypto.KeyRing;
|
import io.bisq.common.crypto.KeyRing;
|
||||||
import io.bisq.common.crypto.PubKeyRing;
|
import io.bisq.common.crypto.PubKeyRing;
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.storage.FileUtil;
|
import io.bisq.common.storage.FileUtil;
|
||||||
import io.bisq.common.storage.Storage;
|
import io.bisq.common.storage.Storage;
|
||||||
import io.bisq.common.util.Utilities;
|
import io.bisq.common.util.Utilities;
|
||||||
|
@ -198,11 +200,11 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis
|
||||||
else
|
else
|
||||||
seedNodeAddresses = seedNodesRepository.getSeedNodeAddresses(useLocalhostForP2P, networkId);
|
seedNodeAddresses = seedNodesRepository.getSeedNodeAddresses(useLocalhostForP2P, networkId);
|
||||||
|
|
||||||
peerManager = new PeerManager(networkNode, maxConnections, seedNodeAddresses, storageDir, clock);
|
peerManager = new PeerManager(networkNode, maxConnections, seedNodeAddresses, storageDir, clock, protobufferResolver);
|
||||||
|
|
||||||
broadcaster = new Broadcaster(networkNode, peerManager);
|
broadcaster = new Broadcaster(networkNode, peerManager);
|
||||||
|
|
||||||
p2PDataStorage = new P2PDataStorage(broadcaster, networkNode, storageDir);
|
p2PDataStorage = new P2PDataStorage(broadcaster, networkNode, storageDir, protobufferResolver);
|
||||||
p2PDataStorage.addHashMapChangedListener(this);
|
p2PDataStorage.addHashMapChangedListener(this);
|
||||||
|
|
||||||
requestDataManager = new RequestDataManager(networkNode, p2PDataStorage, peerManager, seedNodeAddresses, this);
|
requestDataManager = new RequestDataManager(networkNode, p2PDataStorage, peerManager, seedNodeAddresses, this);
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package io.bisq.network.p2p;
|
package io.bisq.network.p2p;
|
||||||
|
|
||||||
|
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
|
|
||||||
public interface SendersNodeAddressMsg extends Msg {
|
public interface SendersNodeAddressMsg extends Msg {
|
||||||
NodeAddress getSenderNodeAddress();
|
NodeAddress getSenderNodeAddress();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package io.bisq.network.p2p;
|
package io.bisq.network.p2p;
|
||||||
|
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,8 @@ import com.google.common.util.concurrent.Uninterruptibles;
|
||||||
import io.bisq.common.UserThread;
|
import io.bisq.common.UserThread;
|
||||||
import io.bisq.common.app.Log;
|
import io.bisq.common.app.Log;
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.util.Tuple2;
|
import io.bisq.common.util.Tuple2;
|
||||||
import io.bisq.common.util.Utilities;
|
import io.bisq.common.util.Utilities;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package io.bisq.network.p2p.network;
|
package io.bisq.network.p2p.network;
|
||||||
|
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
|
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
|
|
||||||
public class InboundConnection extends Connection {
|
public class InboundConnection extends Connection {
|
||||||
|
|
|
@ -8,6 +8,7 @@ import com.msopentech.thali.java.toronionproxy.JavaOnionProxyContext;
|
||||||
import com.msopentech.thali.java.toronionproxy.JavaOnionProxyManager;
|
import com.msopentech.thali.java.toronionproxy.JavaOnionProxyManager;
|
||||||
import io.bisq.common.UserThread;
|
import io.bisq.common.UserThread;
|
||||||
import io.bisq.common.app.Log;
|
import io.bisq.common.app.Log;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.util.Utilities;
|
import io.bisq.common.util.Utilities;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import io.nucleo.net.HiddenServiceDescriptor;
|
import io.nucleo.net.HiddenServiceDescriptor;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package io.bisq.network.p2p.network;
|
package io.bisq.network.p2p.network;
|
||||||
|
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
|
|
||||||
public interface MessageListener {
|
public interface MessageListener {
|
||||||
void onMessage(Msg msg, Connection connection);
|
void onMessage(Msg msg, Connection connection);
|
||||||
|
|
|
@ -4,8 +4,9 @@ import com.google.common.util.concurrent.*;
|
||||||
import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy;
|
import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy;
|
||||||
import io.bisq.common.UserThread;
|
import io.bisq.common.UserThread;
|
||||||
import io.bisq.common.app.Log;
|
import io.bisq.common.app.Log;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.util.Utilities;
|
import io.bisq.common.util.Utilities;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import javafx.beans.property.ObjectProperty;
|
import javafx.beans.property.ObjectProperty;
|
||||||
import javafx.beans.property.ReadOnlyObjectProperty;
|
import javafx.beans.property.ReadOnlyObjectProperty;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package io.bisq.network.p2p.network;
|
package io.bisq.network.p2p.network;
|
||||||
|
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
|
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package io.bisq.network.p2p.network;
|
package io.bisq.network.p2p.network;
|
||||||
|
|
||||||
import io.bisq.common.app.Log;
|
import io.bisq.common.app.Log;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package io.bisq.network.p2p.network;
|
package io.bisq.network.p2p.network;
|
||||||
|
|
||||||
import io.bisq.common.UserThread;
|
import io.bisq.common.UserThread;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import javafx.beans.property.IntegerProperty;
|
import javafx.beans.property.IntegerProperty;
|
||||||
import javafx.beans.property.LongProperty;
|
import javafx.beans.property.LongProperty;
|
||||||
import javafx.beans.property.SimpleIntegerProperty;
|
import javafx.beans.property.SimpleIntegerProperty;
|
||||||
|
|
|
@ -10,6 +10,7 @@ import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy;
|
||||||
import io.bisq.common.Timer;
|
import io.bisq.common.Timer;
|
||||||
import io.bisq.common.UserThread;
|
import io.bisq.common.UserThread;
|
||||||
import io.bisq.common.app.Log;
|
import io.bisq.common.app.Log;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.util.Utilities;
|
import io.bisq.common.util.Utilities;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import io.bisq.network.p2p.Utils;
|
import io.bisq.network.p2p.Utils;
|
||||||
|
|
|
@ -4,6 +4,7 @@ import io.bisq.common.Clock;
|
||||||
import io.bisq.common.Timer;
|
import io.bisq.common.Timer;
|
||||||
import io.bisq.common.UserThread;
|
import io.bisq.common.UserThread;
|
||||||
import io.bisq.common.app.Log;
|
import io.bisq.common.app.Log;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.storage.Storage;
|
import io.bisq.common.storage.Storage;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import io.bisq.network.p2p.network.*;
|
import io.bisq.network.p2p.network.*;
|
||||||
|
@ -87,14 +88,14 @@ public class PeerManager implements ConnectionListener {
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
public PeerManager(NetworkNode networkNode, int maxConnections, Set<NodeAddress> seedNodeAddresses,
|
public PeerManager(NetworkNode networkNode, int maxConnections, Set<NodeAddress> seedNodeAddresses,
|
||||||
File storageDir, Clock clock) {
|
File storageDir, Clock clock, ProtobufferResolver protobufferResolver) {
|
||||||
setConnectionLimits(maxConnections);
|
setConnectionLimits(maxConnections);
|
||||||
this.networkNode = networkNode;
|
this.networkNode = networkNode;
|
||||||
this.clock = clock;
|
this.clock = clock;
|
||||||
// seedNodeAddresses can be empty (in case there is only 1 seed node, the seed node starting up has no other seed nodes)
|
// seedNodeAddresses can be empty (in case there is only 1 seed node, the seed node starting up has no other seed nodes)
|
||||||
this.seedNodeAddresses = new HashSet<>(seedNodeAddresses);
|
this.seedNodeAddresses = new HashSet<>(seedNodeAddresses);
|
||||||
networkNode.addConnectionListener(this);
|
networkNode.addConnectionListener(this);
|
||||||
dbStorage = new Storage<>(storageDir);
|
dbStorage = new Storage<>(storageDir, protobufferResolver);
|
||||||
HashSet<Peer> persistedPeers = dbStorage.initAndGetPersistedWithFileName("PersistedPeers");
|
HashSet<Peer> persistedPeers = dbStorage.initAndGetPersistedWithFileName("PersistedPeers");
|
||||||
if (persistedPeers != null) {
|
if (persistedPeers != null) {
|
||||||
log.debug("We have persisted reported peers. persistedPeers.size()=" + persistedPeers.size());
|
log.debug("We have persisted reported peers. persistedPeers.size()=" + persistedPeers.size());
|
||||||
|
|
|
@ -6,7 +6,7 @@ import com.google.common.util.concurrent.SettableFuture;
|
||||||
import io.bisq.common.Timer;
|
import io.bisq.common.Timer;
|
||||||
import io.bisq.common.UserThread;
|
import io.bisq.common.UserThread;
|
||||||
import io.bisq.common.app.Log;
|
import io.bisq.common.app.Log;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import io.bisq.network.p2p.network.CloseConnectionReason;
|
import io.bisq.network.p2p.network.CloseConnectionReason;
|
||||||
import io.bisq.network.p2p.network.Connection;
|
import io.bisq.network.p2p.network.Connection;
|
||||||
|
|
|
@ -3,7 +3,7 @@ package io.bisq.network.p2p.peers.getdata;
|
||||||
import io.bisq.common.Timer;
|
import io.bisq.common.Timer;
|
||||||
import io.bisq.common.UserThread;
|
import io.bisq.common.UserThread;
|
||||||
import io.bisq.common.app.Log;
|
import io.bisq.common.app.Log;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import io.bisq.network.p2p.network.*;
|
import io.bisq.network.p2p.network.*;
|
||||||
import io.bisq.network.p2p.peers.PeerManager;
|
import io.bisq.network.p2p.peers.PeerManager;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package io.bisq.network.p2p.peers.getdata.messages;
|
package io.bisq.network.p2p.peers.getdata.messages;
|
||||||
|
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import com.google.common.util.concurrent.SettableFuture;
|
||||||
import io.bisq.common.Timer;
|
import io.bisq.common.Timer;
|
||||||
import io.bisq.common.UserThread;
|
import io.bisq.common.UserThread;
|
||||||
import io.bisq.common.app.Log;
|
import io.bisq.common.app.Log;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.network.Connection;
|
import io.bisq.network.p2p.network.Connection;
|
||||||
import io.bisq.network.p2p.network.MessageListener;
|
import io.bisq.network.p2p.network.MessageListener;
|
||||||
import io.bisq.network.p2p.network.NetworkNode;
|
import io.bisq.network.p2p.network.NetworkNode;
|
||||||
|
|
|
@ -6,7 +6,7 @@ import com.google.common.util.concurrent.SettableFuture;
|
||||||
import io.bisq.common.Timer;
|
import io.bisq.common.Timer;
|
||||||
import io.bisq.common.UserThread;
|
import io.bisq.common.UserThread;
|
||||||
import io.bisq.common.app.Log;
|
import io.bisq.common.app.Log;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.network.*;
|
import io.bisq.network.p2p.network.*;
|
||||||
import io.bisq.network.p2p.peers.PeerManager;
|
import io.bisq.network.p2p.peers.PeerManager;
|
||||||
import io.bisq.network.p2p.peers.keepalive.messages.Ping;
|
import io.bisq.network.p2p.peers.keepalive.messages.Ping;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package io.bisq.network.p2p.peers.keepalive.messages;
|
package io.bisq.network.p2p.peers.keepalive.messages;
|
||||||
|
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
|
|
||||||
public abstract class KeepAliveMsg implements Msg {
|
public abstract class KeepAliveMsg implements Msg {
|
||||||
//TODO add serialVersionUID also in superclasses as changes would break compatibility
|
//TODO add serialVersionUID also in superclasses as changes would break compatibility
|
||||||
|
|
|
@ -2,7 +2,7 @@ package io.bisq.network.p2p.peers.keepalive.messages;
|
||||||
|
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
|
|
||||||
public final class Ping extends KeepAliveMsg {
|
public final class Ping extends KeepAliveMsg {
|
||||||
// That object is sent over the wire, so we need to take care of version compatibility.
|
// That object is sent over the wire, so we need to take care of version compatibility.
|
||||||
|
|
|
@ -2,7 +2,7 @@ package io.bisq.network.p2p.peers.keepalive.messages;
|
||||||
|
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
|
|
||||||
public final class Pong extends KeepAliveMsg {
|
public final class Pong extends KeepAliveMsg {
|
||||||
// That object is sent over the wire, so we need to take care of version compatibility.
|
// That object is sent over the wire, so we need to take care of version compatibility.
|
||||||
|
|
|
@ -6,7 +6,7 @@ import com.google.common.util.concurrent.SettableFuture;
|
||||||
import io.bisq.common.Timer;
|
import io.bisq.common.Timer;
|
||||||
import io.bisq.common.UserThread;
|
import io.bisq.common.UserThread;
|
||||||
import io.bisq.common.app.Log;
|
import io.bisq.common.app.Log;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import io.bisq.network.p2p.network.CloseConnectionReason;
|
import io.bisq.network.p2p.network.CloseConnectionReason;
|
||||||
import io.bisq.network.p2p.network.Connection;
|
import io.bisq.network.p2p.network.Connection;
|
||||||
|
|
|
@ -4,7 +4,7 @@ import com.google.common.base.Preconditions;
|
||||||
import io.bisq.common.Timer;
|
import io.bisq.common.Timer;
|
||||||
import io.bisq.common.UserThread;
|
import io.bisq.common.UserThread;
|
||||||
import io.bisq.common.app.Log;
|
import io.bisq.common.app.Log;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import io.bisq.network.p2p.network.*;
|
import io.bisq.network.p2p.network.*;
|
||||||
import io.bisq.network.p2p.peers.PeerManager;
|
import io.bisq.network.p2p.peers.PeerManager;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package io.bisq.network.p2p.peers.peerexchange.messages;
|
package io.bisq.network.p2p.peers.peerexchange.messages;
|
||||||
|
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
|
|
||||||
abstract class PeerExchangeMsg implements Msg {
|
abstract class PeerExchangeMsg implements Msg {
|
||||||
//TODO add serialVersionUID also in superclasses as changes would break compatibility
|
//TODO add serialVersionUID also in superclasses as changes would break compatibility
|
||||||
|
|
|
@ -9,6 +9,7 @@ import io.bisq.common.app.Version;
|
||||||
import io.bisq.common.crypto.CryptoException;
|
import io.bisq.common.crypto.CryptoException;
|
||||||
import io.bisq.common.crypto.Sig;
|
import io.bisq.common.crypto.Sig;
|
||||||
import io.bisq.common.persistance.Persistable;
|
import io.bisq.common.persistance.Persistable;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.storage.FileUtil;
|
import io.bisq.common.storage.FileUtil;
|
||||||
import io.bisq.common.storage.ResourceNotFoundException;
|
import io.bisq.common.storage.ResourceNotFoundException;
|
||||||
import io.bisq.common.storage.Storage;
|
import io.bisq.common.storage.Storage;
|
||||||
|
@ -16,7 +17,7 @@ import io.bisq.common.util.Tuple2;
|
||||||
import io.bisq.common.util.Utilities;
|
import io.bisq.common.util.Utilities;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.crypto.EncryptionService;
|
import io.bisq.network.crypto.EncryptionService;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import io.bisq.network.p2p.network.*;
|
import io.bisq.network.p2p.network.*;
|
||||||
import io.bisq.network.p2p.peers.BroadcastHandler;
|
import io.bisq.network.p2p.peers.BroadcastHandler;
|
||||||
|
@ -68,14 +69,14 @@ public class P2PDataStorage implements MessageListener, ConnectionListener {
|
||||||
// Constructor
|
// Constructor
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
public P2PDataStorage(Broadcaster broadcaster, NetworkNode networkNode, File storageDir) {
|
public P2PDataStorage(Broadcaster broadcaster, NetworkNode networkNode, File storageDir, ProtobufferResolver protobufferResolver) {
|
||||||
this.broadcaster = broadcaster;
|
this.broadcaster = broadcaster;
|
||||||
|
|
||||||
networkNode.addMessageListener(this);
|
networkNode.addMessageListener(this);
|
||||||
networkNode.addConnectionListener(this);
|
networkNode.addConnectionListener(this);
|
||||||
|
|
||||||
sequenceNumberMapStorage = new Storage<>(storageDir);
|
sequenceNumberMapStorage = new Storage<>(storageDir, protobufferResolver);
|
||||||
persistedEntryMapStorage = new Storage<>(storageDir);
|
persistedEntryMapStorage = new Storage<>(storageDir, protobufferResolver);
|
||||||
|
|
||||||
init(storageDir);
|
init(storageDir);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ package io.bisq.network.p2p.storage.messages;
|
||||||
|
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.storage.payload.ProtectedMailboxStorageEntry;
|
import io.bisq.network.p2p.storage.payload.ProtectedMailboxStorageEntry;
|
||||||
import io.bisq.network.p2p.storage.payload.ProtectedStorageEntry;
|
import io.bisq.network.p2p.storage.payload.ProtectedStorageEntry;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package io.bisq.network.p2p.storage.messages;
|
package io.bisq.network.p2p.storage.messages;
|
||||||
|
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
|
|
||||||
public abstract class BroadcastMsg implements Msg {
|
public abstract class BroadcastMsg implements Msg {
|
||||||
//TODO add serialVersionUID also in superclasses as changes would break compatibility
|
//TODO add serialVersionUID also in superclasses as changes would break compatibility
|
||||||
|
|
|
@ -2,7 +2,7 @@ package io.bisq.network.p2p.storage.messages;
|
||||||
|
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.storage.payload.ProtectedStorageEntry;
|
import io.bisq.network.p2p.storage.payload.ProtectedStorageEntry;
|
||||||
|
|
||||||
public final class RemoveDataMsg extends BroadcastMsg {
|
public final class RemoveDataMsg extends BroadcastMsg {
|
||||||
|
|
|
@ -2,7 +2,7 @@ package io.bisq.network.p2p.storage.messages;
|
||||||
|
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.storage.payload.ProtectedMailboxStorageEntry;
|
import io.bisq.network.p2p.storage.payload.ProtectedMailboxStorageEntry;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ import io.bisq.common.crypto.PubKeyRing;
|
||||||
import io.bisq.common.storage.FileUtil;
|
import io.bisq.common.storage.FileUtil;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.MailboxMsg;
|
import io.bisq.network.p2p.MailboxMsg;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
|
|
|
@ -2,9 +2,11 @@ package io.bisq.network.p2p;
|
||||||
|
|
||||||
import io.bisq.common.Clock;
|
import io.bisq.common.Clock;
|
||||||
import io.bisq.common.crypto.KeyRing;
|
import io.bisq.common.crypto.KeyRing;
|
||||||
|
import io.bisq.common.persistance.Msg;
|
||||||
|
import io.bisq.common.persistance.Persistable;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.crypto.EncryptionService;
|
import io.bisq.network.crypto.EncryptionService;
|
||||||
import io.bisq.network.p2p.network.ProtobufferResolver;
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.network.p2p.seed.SeedNodesRepository;
|
import io.bisq.network.p2p.seed.SeedNodesRepository;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -176,6 +178,11 @@ public class TestUtils {
|
||||||
public Optional<Msg> fromProto(PB.Envelope envelope) {
|
public Optional<Msg> fromProto(PB.Envelope envelope) {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<Persistable> fromProto(PB.DiskEnvelope envelope) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ package io.bisq.network.p2p.mocks;
|
||||||
|
|
||||||
import io.bisq.common.app.Version;
|
import io.bisq.common.app.Version;
|
||||||
import io.bisq.generated.protobuffer.PB;
|
import io.bisq.generated.protobuffer.PB;
|
||||||
import io.bisq.network.p2p.Msg;
|
import io.bisq.common.persistance.Msg;
|
||||||
import io.bisq.network.p2p.storage.payload.ExpirablePayload;
|
import io.bisq.network.p2p.storage.payload.ExpirablePayload;
|
||||||
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
|
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package io.bisq.network.p2p.storage;
|
||||||
import io.bisq.common.crypto.CryptoException;
|
import io.bisq.common.crypto.CryptoException;
|
||||||
import io.bisq.common.crypto.KeyRing;
|
import io.bisq.common.crypto.KeyRing;
|
||||||
import io.bisq.common.crypto.KeyStorage;
|
import io.bisq.common.crypto.KeyStorage;
|
||||||
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import io.bisq.common.storage.FileUtil;
|
import io.bisq.common.storage.FileUtil;
|
||||||
import io.bisq.network.crypto.EncryptionService;
|
import io.bisq.network.crypto.EncryptionService;
|
||||||
import io.bisq.network.p2p.NodeAddress;
|
import io.bisq.network.p2p.NodeAddress;
|
||||||
|
@ -43,6 +44,8 @@ public class P2PDataStorageTest {
|
||||||
Broadcaster broadcaster;
|
Broadcaster broadcaster;
|
||||||
@Mocked
|
@Mocked
|
||||||
NetworkNode networkNode;
|
NetworkNode networkNode;
|
||||||
|
@Mocked
|
||||||
|
ProtobufferResolver protobufferResolver;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setup() throws InterruptedException, NoSuchAlgorithmException, CertificateException, KeyStoreException, IOException, CryptoException, SignatureException, InvalidKeyException {
|
public void setup() throws InterruptedException, NoSuchAlgorithmException, CertificateException, KeyStoreException, IOException, CryptoException, SignatureException, InvalidKeyException {
|
||||||
|
@ -62,7 +65,7 @@ public class P2PDataStorageTest {
|
||||||
keyRing2 = new KeyRing(new KeyStorage(dir2));
|
keyRing2 = new KeyRing(new KeyStorage(dir2));
|
||||||
storageSignatureKeyPair2 = keyRing2.getSignatureKeyPair();
|
storageSignatureKeyPair2 = keyRing2.getSignatureKeyPair();
|
||||||
encryptionService2 = new EncryptionService(keyRing2, TestUtils.getProtobufferResolver());
|
encryptionService2 = new EncryptionService(keyRing2, TestUtils.getProtobufferResolver());
|
||||||
dataStorage1 = new P2PDataStorage(broadcaster, networkNode, dir1);
|
dataStorage1 = new P2PDataStorage(broadcaster, networkNode, dir1, protobufferResolver);
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
|
|
10
pom.xml
10
pom.xml
|
@ -122,7 +122,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.inject</groupId>
|
<groupId>com.google.inject</groupId>
|
||||||
<artifactId>guice</artifactId>
|
<artifactId>guice</artifactId>
|
||||||
<version>3.0</version>
|
<version>4.1.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--crypto-->
|
<!--crypto-->
|
||||||
|
@ -165,7 +165,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.guava</groupId>
|
<groupId>com.google.guava</groupId>
|
||||||
<artifactId>guava</artifactId>
|
<artifactId>guava</artifactId>
|
||||||
<version>18.0</version>
|
<version>19.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.fxmisc.easybind</groupId>
|
<groupId>org.fxmisc.easybind</groupId>
|
||||||
|
@ -239,6 +239,12 @@
|
||||||
<groupId>com.google.protobuf</groupId>
|
<groupId>com.google.protobuf</groupId>
|
||||||
<artifactId>protobuf-java-util</artifactId>
|
<artifactId>protobuf-java-util</artifactId>
|
||||||
<version>3.2.0</version>
|
<version>3.2.0</version>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>com.google.guava</groupId>
|
||||||
|
<artifactId>guava</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -36,7 +36,7 @@ import io.bisq.core.user.Preferences;
|
||||||
import io.bisq.core.user.User;
|
import io.bisq.core.user.User;
|
||||||
import io.bisq.network.crypto.EncryptionServiceModule;
|
import io.bisq.network.crypto.EncryptionServiceModule;
|
||||||
import io.bisq.network.p2p.P2PModule;
|
import io.bisq.network.p2p.P2PModule;
|
||||||
import io.bisq.network.p2p.network.ProtobufferResolver;
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
|
|
|
@ -36,7 +36,7 @@ import io.bisq.core.user.Preferences;
|
||||||
import io.bisq.core.user.User;
|
import io.bisq.core.user.User;
|
||||||
import io.bisq.network.crypto.EncryptionServiceModule;
|
import io.bisq.network.crypto.EncryptionServiceModule;
|
||||||
import io.bisq.network.p2p.P2PModule;
|
import io.bisq.network.p2p.P2PModule;
|
||||||
import io.bisq.network.p2p.network.ProtobufferResolver;
|
import io.bisq.common.persistance.ProtobufferResolver;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
|
|
Loading…
Add table
Reference in a new issue