mirror of
https://github.com/bisq-network/bisq.git
synced 2025-03-12 02:08:11 +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;
|
|
@ -15,13 +15,13 @@
|
|||
* 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.network.p2p.Msg;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public interface ProtobufferResolver {
|
||||
Optional<Msg> fromProto(PB.Envelope envelope);
|
||||
Optional<Persistable> fromProto(PB.DiskEnvelope envelope);
|
||||
}
|
|
@ -17,16 +17,20 @@
|
|||
|
||||
package io.bisq.common.storage;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.google.protobuf.Message;
|
||||
import io.bisq.common.UserThread;
|
||||
import io.bisq.common.io.LookAheadObjectInputStream;
|
||||
import io.bisq.common.persistance.Persistable;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.common.util.Utilities;
|
||||
import io.bisq.generated.protobuffer.PB;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
|
@ -43,17 +47,17 @@ public class FileManager<T> {
|
|||
private final long delay;
|
||||
private final Callable<Void> saveFileTask;
|
||||
private T serializable;
|
||||
private boolean proto;
|
||||
|
||||
private ProtobufferResolver protobufferResolver;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Constructor
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public FileManager(File dir, File storageFile, long delay) {
|
||||
@Inject
|
||||
public FileManager(File dir, File storageFile, long delay, ProtobufferResolver protobufferResolver) {
|
||||
this.dir = dir;
|
||||
this.storageFile = storageFile;
|
||||
proto = serializable instanceof Persistable;
|
||||
this.protobufferResolver = protobufferResolver;
|
||||
|
||||
executor = Utilities.getScheduledThreadPoolExecutor("FileManager", 1, 10, 5);
|
||||
|
||||
|
@ -106,13 +110,17 @@ public class FileManager<T> {
|
|||
|
||||
public synchronized T read(File file) throws IOException, ClassNotFoundException {
|
||||
log.debug("read" + file);
|
||||
if (proto) {
|
||||
log.info("it's proto");
|
||||
try (final FileInputStream fileInputStream = new FileInputStream(file)) {
|
||||
return (T) ((Persistable) serializable).getParser().parseFrom(fileInputStream);
|
||||
} catch (Throwable t) {
|
||||
log.error("Exception at proto read: " + t.getMessage());
|
||||
}
|
||||
Optional<Persistable> persistable = Optional.empty();
|
||||
|
||||
try (final FileInputStream fileInputStream = new FileInputStream(file)) {
|
||||
persistable = protobufferResolver.fromProto(PB.DiskEnvelope.parseFrom(fileInputStream));
|
||||
} catch (Throwable t) {
|
||||
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);
|
||||
|
@ -192,7 +200,7 @@ public class FileManager<T> {
|
|||
try {
|
||||
message = ((Persistable) serializable).toProtobuf();
|
||||
} catch (Throwable e) {
|
||||
log.info("Not protobufferable: {} {}", serializable.getClass().getSimpleName(), e.getMessage());
|
||||
log.info("Not protobufferable: {}, {}, {}", serializable.getClass().getSimpleName(), storageFile, e.getMessage());
|
||||
}
|
||||
|
||||
try {
|
||||
|
|
|
@ -17,11 +17,12 @@
|
|||
|
||||
package io.bisq.common.storage;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
@ -66,6 +67,8 @@ public class Storage<T extends Serializable> {
|
|||
private T serializable;
|
||||
private String fileName;
|
||||
private int numMaxBackupFiles = 10;
|
||||
@com.google.inject.Inject
|
||||
private ProtobufferResolver protobufferResolver;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -73,21 +76,28 @@ public class Storage<T extends Serializable> {
|
|||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@Inject
|
||||
public Storage(@Named(DIR_KEY) File dir) {
|
||||
public Storage(@Named(DIR_KEY) File dir, ProtobufferResolver protobufferResolver) {
|
||||
this.dir = dir;
|
||||
this.protobufferResolver = protobufferResolver;
|
||||
}
|
||||
|
||||
/*
|
||||
public Storage(@Named(DIR_KEY) File dir) {
|
||||
this.dir = dir;
|
||||
this.protobufferResolver = protobufferResolver;
|
||||
}
|
||||
*/
|
||||
public void initWithFileName(String fileName) {
|
||||
this.fileName = fileName;
|
||||
storageFile = new File(dir, fileName);
|
||||
fileManager = new FileManager<>(dir, storageFile, 300);
|
||||
fileManager = new FileManager<>(dir, storageFile, 300, protobufferResolver);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public T initAndGetPersistedWithFileName(String fileName) {
|
||||
this.fileName = fileName;
|
||||
storageFile = new File(dir, fileName);
|
||||
fileManager = new FileManager<>(dir, storageFile, 300);
|
||||
fileManager = new FileManager<>(dir, storageFile, 300, protobufferResolver);
|
||||
|
||||
return getPersisted();
|
||||
}
|
||||
|
@ -102,7 +112,7 @@ public class Storage<T extends Serializable> {
|
|||
this.serializable = serializable;
|
||||
this.fileName = fileName;
|
||||
storageFile = new File(dir, fileName);
|
||||
fileManager = new FileManager<>(dir, storageFile, 600);
|
||||
fileManager = new FileManager<>(dir, storageFile, 600, protobufferResolver);
|
||||
|
||||
return getPersisted();
|
||||
}
|
||||
|
|
|
@ -776,12 +776,16 @@ message AddressEntry {
|
|||
|
||||
string offer_id = 7;
|
||||
Context context = 8;
|
||||
bytes pubkey = 9;
|
||||
bytes pub_key = 9;
|
||||
bytes pub_key_hash = 10;
|
||||
string param_id = 11;
|
||||
Coin coin_locked_in_multi_sig = 12;
|
||||
}
|
||||
|
||||
message DeterministicKey {
|
||||
bytes serialized = 1;
|
||||
}
|
||||
|
||||
message AddressEntryList {
|
||||
repeated AddressEntry address_entry = 1;
|
||||
}
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
<appender-ref ref="CONSOLE_APPENDER"/>
|
||||
</root>
|
||||
|
||||
<logger name="io.bisq.common.storage.Storage" level="WARN"/>
|
||||
<logger name="io.bisq.common.storage.FileManager" level="WARN"/>
|
||||
<logger name="io.bisq.core.storage.Storage" level="WARN"/>
|
||||
<logger name="io.bisq.core.storage.FileManager" level="WARN"/>
|
||||
<logger name="io.bisq.locale.BSResources" level="ERROR"/>
|
||||
|
||||
<!-- <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.crypto.KeyRing;
|
||||
import io.bisq.common.crypto.PubKeyRing;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
import io.bisq.core.app.AppOptionKeys;
|
||||
import io.bisq.network.p2p.*;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
|
|
|
@ -3,7 +3,7 @@ package io.bisq.core.alert;
|
|||
import io.bisq.common.app.Version;
|
||||
import io.bisq.generated.protobuffer.PB;
|
||||
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 lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
|
|
|
@ -27,6 +27,8 @@ import io.bisq.common.crypto.PubKeyRing;
|
|||
import io.bisq.common.handlers.FaultHandler;
|
||||
import io.bisq.common.handlers.ResultHandler;
|
||||
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.core.arbitration.messages.*;
|
||||
import io.bisq.core.btc.AddressEntry;
|
||||
|
@ -89,6 +91,7 @@ public class DisputeManager {
|
|||
ClosedTradableManager closedTradableManager,
|
||||
OpenOfferManager openOfferManager,
|
||||
KeyRing keyRing,
|
||||
ProtobufferResolver protobufferResolver,
|
||||
@Named(Storage.DIR_KEY) File storageDir) {
|
||||
this.p2PService = p2PService;
|
||||
this.tradeWalletService = tradeWalletService;
|
||||
|
@ -98,7 +101,7 @@ public class DisputeManager {
|
|||
this.openOfferManager = openOfferManager;
|
||||
this.keyRing = keyRing;
|
||||
|
||||
disputeStorage = new Storage<>(storageDir);
|
||||
disputeStorage = new Storage<>(storageDir, protobufferResolver);
|
||||
disputes = new DisputeList(disputeStorage);
|
||||
|
||||
openDisputes = new HashMap<>();
|
||||
|
|
|
@ -20,7 +20,7 @@ package io.bisq.core.arbitration.messages;
|
|||
import io.bisq.common.app.Version;
|
||||
import io.bisq.core.arbitration.Attachment;
|
||||
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 javafx.beans.property.BooleanProperty;
|
||||
import javafx.beans.property.SimpleBooleanProperty;
|
||||
|
@ -38,7 +38,7 @@ import java.util.List;
|
|||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@EqualsAndHashCode
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString
|
||||
@Getter
|
||||
@Slf4j
|
||||
|
|
|
@ -20,7 +20,7 @@ package io.bisq.core.arbitration.messages;
|
|||
import io.bisq.common.app.Version;
|
||||
import io.bisq.core.arbitration.DisputeResult;
|
||||
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 lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
|
|
|
@ -20,7 +20,7 @@ package io.bisq.core.arbitration.messages;
|
|||
import io.bisq.common.app.Version;
|
||||
import io.bisq.core.arbitration.Dispute;
|
||||
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 lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
|
|
|
@ -20,7 +20,7 @@ package io.bisq.core.arbitration.messages;
|
|||
import io.bisq.common.app.Version;
|
||||
import io.bisq.core.arbitration.Dispute;
|
||||
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 lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
|
|
|
@ -20,7 +20,7 @@ package io.bisq.core.arbitration.messages;
|
|||
import com.google.protobuf.ByteString;
|
||||
import io.bisq.common.app.Version;
|
||||
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 lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -110,12 +110,14 @@ public final class AddressEntry implements Persistable {
|
|||
String paramId,
|
||||
Context context,
|
||||
@Nullable String offerId,
|
||||
@Nullable Coin coinLockedInMultiSig,
|
||||
@NotNull KeyBagSupplier keyBagSupplier) {
|
||||
this.pubKey = pubKey;
|
||||
this.pubKeyHash = pubKeyHash;
|
||||
this.paramId = paramId;
|
||||
this.context = context;
|
||||
this.offerId = offerId;
|
||||
this.coinLockedInMultiSig = coinLockedInMultiSig;
|
||||
this.keyBagSupplier = keyBagSupplier;
|
||||
}
|
||||
|
||||
|
@ -210,7 +212,7 @@ public final class AddressEntry implements Persistable {
|
|||
public Message toProtobuf() {
|
||||
PB.AddressEntry.Builder builder = PB.AddressEntry.newBuilder()
|
||||
.setContext(PB.AddressEntry.Context.valueOf(context.name()))
|
||||
.setPubkey(ByteString.copyFrom(pubKey))
|
||||
.setPubKey(ByteString.copyFrom(pubKey))
|
||||
.setPubKeyHash(ByteString.copyFrom(pubKeyHash))
|
||||
.setParamId(paramId);
|
||||
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.persistance.Persistable;
|
||||
import io.bisq.common.storage.Storage;
|
||||
import io.bisq.core.btc.wallet.KeyBagSupplier;
|
||||
import io.bisq.generated.protobuffer.PB;
|
||||
import lombok.Getter;
|
||||
import org.bitcoinj.core.Wallet;
|
||||
|
@ -43,13 +44,16 @@ public final class AddressEntryList implements Persistable {
|
|||
private static final Logger log = LoggerFactory.getLogger(AddressEntryList.class);
|
||||
|
||||
final transient private Storage<AddressEntryList> storage;
|
||||
@Getter
|
||||
final transient private KeyBagSupplier keyBagSupplier;
|
||||
transient private Wallet wallet;
|
||||
@Getter
|
||||
private List<AddressEntry> addressEntryList = new ArrayList<>();
|
||||
|
||||
@Inject
|
||||
public AddressEntryList(Storage<AddressEntryList> storage) {
|
||||
public AddressEntryList(Storage<AddressEntryList> storage, KeyBagSupplier keyBagSupplier) {
|
||||
this.storage = storage;
|
||||
this.keyBagSupplier = keyBagSupplier;
|
||||
}
|
||||
|
||||
public void onWalletReady(Wallet wallet) {
|
||||
|
|
|
@ -22,10 +22,7 @@ import com.google.inject.name.Names;
|
|||
import io.bisq.common.app.AppModule;
|
||||
import io.bisq.core.app.AppOptionKeys;
|
||||
import io.bisq.core.btc.provider.squ.BsqUtxoFeedService;
|
||||
import io.bisq.core.btc.wallet.BsqWalletService;
|
||||
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.btc.wallet.*;
|
||||
import io.bisq.core.provider.fee.FeeService;
|
||||
import io.bisq.core.provider.price.PriceFeedService;
|
||||
import io.bisq.network.http.HttpClient;
|
||||
|
@ -64,6 +61,7 @@ public class BitcoinModule extends AppModule {
|
|||
bind(AddressEntryList.class).in(Singleton.class);
|
||||
bind(WalletsSetup.class).in(Singleton.class);
|
||||
bind(BtcWalletService.class).in(Singleton.class);
|
||||
bind(KeyBagSupplier.class).to(BtcWalletService.class);
|
||||
bind(BsqWalletService.class).in(Singleton.class);
|
||||
bind(TradeWalletService.class).in(Singleton.class);
|
||||
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
|
||||
package io.bisq.core.btc.wallet;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.util.concurrent.FutureCallback;
|
||||
import com.google.common.util.concurrent.Futures;
|
||||
|
@ -48,9 +47,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static com.google.inject.internal.util.$Preconditions.checkArgument;
|
||||
import static com.google.inject.internal.util.$Preconditions.checkState;
|
||||
import static com.google.common.base.Preconditions.*;
|
||||
|
||||
// TradeService handles all relevant transactions used in the trade process
|
||||
/*
|
||||
|
@ -336,7 +333,7 @@ public class TradeWalletService {
|
|||
TransactionOutput makerOutput = null;
|
||||
|
||||
// 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)
|
||||
if (dummyTx.getOutputs().size() > 1)
|
||||
|
|
|
@ -27,6 +27,7 @@ import io.bisq.common.UserThread;
|
|||
import io.bisq.common.app.Log;
|
||||
import io.bisq.common.handlers.ExceptionHandler;
|
||||
import io.bisq.common.handlers.ResultHandler;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.common.storage.FileUtil;
|
||||
import io.bisq.common.storage.Storage;
|
||||
import io.bisq.core.btc.*;
|
||||
|
@ -97,6 +98,7 @@ public class WalletsSetup {
|
|||
UserAgent userAgent,
|
||||
Preferences preferences,
|
||||
Socks5ProxyProvider socks5ProxyProvider,
|
||||
ProtobufferResolver protobufferResolver,
|
||||
@Named(BtcOptionKeys.WALLET_DIR) File appDir,
|
||||
@Named(BtcOptionKeys.SOCKS5_DISCOVER_MODE) String socks5DiscoverModeString) {
|
||||
|
||||
|
@ -111,7 +113,7 @@ public class WalletsSetup {
|
|||
params = preferences.getBitcoinNetwork().getParameters();
|
||||
walletDir = new File(appDir, "bitcoin");
|
||||
|
||||
storage = new Storage<>(walletDir);
|
||||
storage = new Storage<>(walletDir, protobufferResolver);
|
||||
Long nonce = storage.initAndGetPersistedWithFileName("BloomFilterNonce");
|
||||
if (nonce != null) {
|
||||
bloomFilterTweak = nonce;
|
||||
|
|
|
@ -20,6 +20,7 @@ package io.bisq.core.dao.vote;
|
|||
import io.bisq.common.app.Version;
|
||||
import io.bisq.common.persistance.Persistable;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
@ -27,12 +28,13 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
@ToString
|
||||
@EqualsAndHashCode
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Slf4j
|
||||
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.
|
||||
private static final long serialVersionUID = Version.LOCAL_DB_VERSION;
|
||||
|
||||
@Getter
|
||||
private final List<CompensationRequestVoteItem> compensationRequestVoteItems = new ArrayList<>();
|
||||
|
||||
/** constructor */
|
||||
|
@ -40,10 +42,6 @@ public final class CompensationRequestVoteItemCollection extends VoteItem implem
|
|||
super(votingType, null, null);
|
||||
}
|
||||
|
||||
public List<CompensationRequestVoteItem> getCompensationRequestVoteItems() {
|
||||
return compensationRequestVoteItems;
|
||||
}
|
||||
|
||||
public List<CompensationRequestVoteItem> getCompensationRequestVoteItemsSortedByTxId() {
|
||||
ArrayList<CompensationRequestVoteItem> list = new ArrayList<>(compensationRequestVoteItems);
|
||||
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.handlers.ErrorMessageHandler;
|
||||
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.core.btc.AddressEntry;
|
||||
import io.bisq.core.btc.wallet.BtcWalletService;
|
||||
|
@ -96,6 +98,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
|
|||
ClosedTradableManager closedTradableManager,
|
||||
PriceFeedService priceFeedService,
|
||||
Preferences preferences,
|
||||
ProtobufferResolver protobufferResolver,
|
||||
@Named(Storage.DIR_KEY) File storageDir) {
|
||||
this.keyRing = keyRing;
|
||||
this.user = user;
|
||||
|
@ -106,7 +109,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
|
|||
this.closedTradableManager = closedTradableManager;
|
||||
this.preferences = preferences;
|
||||
|
||||
openOffersStorage = new Storage<>(storageDir);
|
||||
openOffersStorage = new Storage<>(storageDir, protobufferResolver);
|
||||
openOffers = new TradableList<>(openOffersStorage, "OpenOffers");
|
||||
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.util.Validator;
|
||||
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.LoggerFactory;
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ import io.bisq.common.app.Capabilities;
|
|||
import io.bisq.common.app.Version;
|
||||
import io.bisq.core.offer.AvailabilityResult;
|
||||
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 javax.annotation.Nullable;
|
||||
|
|
|
@ -1,19 +1,24 @@
|
|||
package io.bisq.core.p2p.network;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.protobuf.ByteString;
|
||||
import io.bisq.common.crypto.PubKeyRing;
|
||||
import io.bisq.common.crypto.SealedAndSigned;
|
||||
import io.bisq.common.locale.CountryUtil;
|
||||
import io.bisq.common.locale.CurrencyUtil;
|
||||
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.PrivateNotificationMsg;
|
||||
import io.bisq.core.alert.PrivateNotificationPayload;
|
||||
import io.bisq.core.arbitration.*;
|
||||
import io.bisq.core.arbitration.messages.*;
|
||||
import io.bisq.core.btc.AddressEntry;
|
||||
import io.bisq.core.btc.AddressEntryList;
|
||||
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.filter.Filter;
|
||||
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.generated.protobuffer.PB;
|
||||
import io.bisq.network.p2p.CloseConnectionMsg;
|
||||
import io.bisq.network.p2p.Msg;
|
||||
import io.bisq.network.p2p.NodeAddress;
|
||||
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.GetUpdatedDataRequest;
|
||||
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.StoragePayload;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.io.output.WriterOutputStream;
|
||||
import org.bitcoinj.core.Coin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
@ -76,12 +75,9 @@ import static io.bisq.generated.protobuffer.PB.Envelope.MessageCase.*;
|
|||
*/
|
||||
@Slf4j
|
||||
public class CoreProtobufferResolver implements ProtobufferResolver {
|
||||
private BtcWalletService btcWalletService;
|
||||
|
||||
@Inject
|
||||
public CoreProtobufferResolver(BtcWalletService btcWalletService) {
|
||||
this.btcWalletService = btcWalletService;
|
||||
}
|
||||
private Provider<AddressEntryList> addressEntryList;
|
||||
|
||||
@Override
|
||||
public Optional<Msg> fromProto(PB.Envelope envelope) {
|
||||
|
@ -95,18 +91,6 @@ public class CoreProtobufferResolver implements ProtobufferResolver {
|
|||
log.debug("Convert protobuffer envelope: {}", envelope.getMessageCase());
|
||||
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;
|
||||
switch (envelope.getMessageCase()) {
|
||||
|
@ -869,4 +853,56 @@ public class CoreProtobufferResolver implements ProtobufferResolver {
|
|||
.stream()
|
||||
.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.FaultHandler;
|
||||
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.core.arbitration.ArbitratorManager;
|
||||
import io.bisq.core.btc.AddressEntry;
|
||||
|
@ -111,6 +113,7 @@ public class TradeManager {
|
|||
PriceFeedService priceFeedService,
|
||||
FilterManager filterManager,
|
||||
TradeStatisticsManager tradeStatisticsManager,
|
||||
ProtobufferResolver protobufferResolver,
|
||||
@Named(Storage.DIR_KEY) File storageDir) {
|
||||
this.user = user;
|
||||
this.keyRing = keyRing;
|
||||
|
@ -124,7 +127,7 @@ public class TradeManager {
|
|||
this.filterManager = filterManager;
|
||||
this.tradeStatisticsManager = tradeStatisticsManager;
|
||||
|
||||
tradableListStorage = new Storage<>(storageDir);
|
||||
tradableListStorage = new Storage<>(storageDir, protobufferResolver);
|
||||
trades = new TradableList<>(tradableListStorage, "PendingTrades");
|
||||
trades.forEach(e -> e.getOffer().setPriceFeedService(priceFeedService));
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ package io.bisq.core.trade.closed;
|
|||
|
||||
import com.google.inject.Inject;
|
||||
import io.bisq.common.crypto.KeyRing;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.common.storage.Storage;
|
||||
import io.bisq.core.offer.Offer;
|
||||
import io.bisq.core.provider.price.PriceFeedService;
|
||||
|
@ -38,9 +39,11 @@ public class ClosedTradableManager {
|
|||
private final KeyRing keyRing;
|
||||
|
||||
@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;
|
||||
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
|
||||
tradableListStorage.setNumMaxBackupFiles(3);
|
||||
this.closedTrades = new TradableList<>(tradableListStorage, "ClosedTrades");
|
||||
|
|
|
@ -19,6 +19,7 @@ package io.bisq.core.trade.failed;
|
|||
|
||||
import com.google.inject.Inject;
|
||||
import io.bisq.common.crypto.KeyRing;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.common.storage.Storage;
|
||||
import io.bisq.core.offer.Offer;
|
||||
import io.bisq.core.provider.price.PriceFeedService;
|
||||
|
@ -38,9 +39,11 @@ public class FailedTradesManager {
|
|||
private final KeyRing keyRing;
|
||||
|
||||
@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.failedTrades = new TradableList<>(new Storage<>(storageDir), "FailedTrades");
|
||||
this.failedTrades = new TradableList<>(new Storage<>(storageDir, protobufferResolver), "FailedTrades");
|
||||
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.generated.protobuffer.PB;
|
||||
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 lombok.EqualsAndHashCode;
|
||||
import org.bouncycastle.util.encoders.Hex;
|
||||
|
|
|
@ -21,7 +21,7 @@ import com.google.protobuf.ByteString;
|
|||
import io.bisq.common.app.Version;
|
||||
import io.bisq.generated.protobuffer.PB;
|
||||
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 lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ import com.google.protobuf.ByteString;
|
|||
import io.bisq.common.app.Version;
|
||||
import io.bisq.generated.protobuffer.PB;
|
||||
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 lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ import io.bisq.common.crypto.PubKeyRing;
|
|||
import io.bisq.core.btc.data.RawTransactionInput;
|
||||
import io.bisq.core.payment.payload.PaymentAccountPayload;
|
||||
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 lombok.EqualsAndHashCode;
|
||||
import org.bouncycastle.util.encoders.Hex;
|
||||
|
|
|
@ -21,7 +21,7 @@ import com.google.protobuf.ByteString;
|
|||
import io.bisq.common.app.Version;
|
||||
import io.bisq.generated.protobuffer.PB;
|
||||
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 lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ import io.bisq.core.btc.data.RawTransactionInput;
|
|||
import io.bisq.core.payment.payload.PaymentAccountPayload;
|
||||
import io.bisq.generated.protobuffer.PB;
|
||||
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 lombok.EqualsAndHashCode;
|
||||
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.util.Validator;
|
||||
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 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.taker.*;
|
||||
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 lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
|
|
@ -88,8 +88,11 @@ public class ProcessModel implements Model, Serializable {
|
|||
@Getter
|
||||
@Setter
|
||||
private List<NodeAddress> takerAcceptedArbitratorNodeAddresses;
|
||||
@Getter
|
||||
@Setter
|
||||
private List<NodeAddress> takerAcceptedMediatorNodeAddresses;
|
||||
|
||||
|
||||
// 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
|
||||
@Getter
|
||||
|
@ -196,10 +199,6 @@ public class ProcessModel implements Model, Serializable {
|
|||
return payoutTxSignature;
|
||||
}
|
||||
|
||||
public void setPayoutTxSignature(byte[] payoutTxSignature) {
|
||||
this.payoutTxSignature = payoutTxSignature;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void persist() {
|
||||
}
|
||||
|
@ -212,62 +211,6 @@ public class ProcessModel implements Model, Serializable {
|
|||
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) {
|
||||
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.util.Validator;
|
||||
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 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.taker.*;
|
||||
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 lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ import io.bisq.core.trade.TradeManager;
|
|||
import io.bisq.core.trade.messages.TradeMsg;
|
||||
import io.bisq.network.p2p.DecryptedDirectMessageListener;
|
||||
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 javafx.beans.value.ChangeListener;
|
||||
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.network.crypto.EncryptionServiceModule;
|
||||
import io.bisq.network.p2p.P2PModule;
|
||||
import io.bisq.network.p2p.network.ProtobufferResolver;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import javafx.stage.Stage;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
|
|
@ -21,6 +21,7 @@ import com.google.inject.Inject;
|
|||
import io.bisq.common.locale.CryptoCurrency;
|
||||
import io.bisq.common.locale.FiatCurrency;
|
||||
import io.bisq.common.locale.TradeCurrency;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.core.offer.OpenOfferManager;
|
||||
import io.bisq.core.payment.CryptoCurrencyAccount;
|
||||
import io.bisq.core.payment.PaymentAccount;
|
||||
|
@ -49,15 +50,17 @@ class AltCoinAccountsDataModel extends ActivatableDataModel {
|
|||
final ObservableList<PaymentAccount> paymentAccounts = FXCollections.observableArrayList();
|
||||
private final SetChangeListener<PaymentAccount> setChangeListener;
|
||||
private final String accountsFileName = "AltcoinPaymentAccounts";
|
||||
private final ProtobufferResolver protobufferResolver;
|
||||
|
||||
@Inject
|
||||
public AltCoinAccountsDataModel(User user, Preferences preferences, OpenOfferManager openOfferManager,
|
||||
TradeManager tradeManager, Stage stage) {
|
||||
TradeManager tradeManager, Stage stage, ProtobufferResolver protobufferResolver) {
|
||||
this.user = user;
|
||||
this.preferences = preferences;
|
||||
this.openOfferManager = openOfferManager;
|
||||
this.tradeManager = tradeManager;
|
||||
this.stage = stage;
|
||||
this.protobufferResolver = protobufferResolver;
|
||||
setChangeListener = change -> fillAndSortPaymentAccounts();
|
||||
}
|
||||
|
||||
|
@ -126,10 +129,10 @@ class AltCoinAccountsDataModel extends ActivatableDataModel {
|
|||
ArrayList<PaymentAccount> accounts = new ArrayList<>(user.getPaymentAccounts().stream()
|
||||
.filter(paymentAccount -> paymentAccount instanceof CryptoCurrencyAccount)
|
||||
.collect(Collectors.toList()));
|
||||
GUIUtil.exportAccounts(accounts, accountsFileName, preferences, stage);
|
||||
GUIUtil.exportAccounts(accounts, accountsFileName, preferences, stage, protobufferResolver);
|
||||
}
|
||||
|
||||
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.FiatCurrency;
|
||||
import io.bisq.common.locale.TradeCurrency;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.core.offer.OpenOfferManager;
|
||||
import io.bisq.core.payment.CryptoCurrencyAccount;
|
||||
import io.bisq.core.payment.PaymentAccount;
|
||||
|
@ -49,15 +50,17 @@ class FiatAccountsDataModel extends ActivatableDataModel {
|
|||
final ObservableList<PaymentAccount> paymentAccounts = FXCollections.observableArrayList();
|
||||
private final SetChangeListener<PaymentAccount> setChangeListener;
|
||||
private final String accountsFileName = "FiatPaymentAccounts";
|
||||
private final ProtobufferResolver protobufferResolver;
|
||||
|
||||
@Inject
|
||||
public FiatAccountsDataModel(User user, Preferences preferences, OpenOfferManager openOfferManager,
|
||||
TradeManager tradeManager, Stage stage) {
|
||||
TradeManager tradeManager, Stage stage, ProtobufferResolver protobufferResolver) {
|
||||
this.user = user;
|
||||
this.preferences = preferences;
|
||||
this.openOfferManager = openOfferManager;
|
||||
this.tradeManager = tradeManager;
|
||||
this.stage = stage;
|
||||
this.protobufferResolver = protobufferResolver;
|
||||
setChangeListener = change -> fillAndSortPaymentAccounts();
|
||||
}
|
||||
|
||||
|
@ -127,10 +130,10 @@ class FiatAccountsDataModel extends ActivatableDataModel {
|
|||
ArrayList<PaymentAccount> accounts = new ArrayList<>(user.getPaymentAccounts().stream()
|
||||
.filter(paymentAccount -> !(paymentAccount instanceof CryptoCurrencyAccount))
|
||||
.collect(Collectors.toList()));
|
||||
GUIUtil.exportAccounts(accounts, accountsFileName, preferences, stage);
|
||||
GUIUtil.exportAccounts(accounts, accountsFileName, preferences, stage, protobufferResolver);
|
||||
}
|
||||
|
||||
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 static com.google.inject.internal.util.$Preconditions.checkArgument;
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
|
||||
|
||||
@FxmlView
|
||||
public class PasswordView extends ActivatableView<GridPane, Void> {
|
||||
|
|
|
@ -59,7 +59,7 @@ import java.time.ZoneId;
|
|||
import java.time.ZoneOffset;
|
||||
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 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.Res;
|
||||
import io.bisq.common.locale.TradeCurrency;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.common.storage.Storage;
|
||||
import io.bisq.common.util.Utilities;
|
||||
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()) {
|
||||
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.queueUpForSave();
|
||||
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.setInitialDirectory(new File(preferences.getDirectoryChooserPath()));
|
||||
fileChooser.setTitle(Res.get("guiUtil.accountExport.selectPath", fileName));
|
||||
|
@ -110,7 +113,7 @@ public class GUIUtil {
|
|||
if (Paths.get(path).getFileName().toString().equals(fileName)) {
|
||||
String directory = Paths.get(path).getParent().toString();
|
||||
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);
|
||||
if (persisted != null) {
|
||||
final StringBuilder msg = new StringBuilder();
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
package io.bisq.network.crypto;
|
||||
|
||||
|
||||
import io.bisq.network.p2p.Msg;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
|
||||
import java.security.PublicKey;
|
||||
|
||||
|
|
|
@ -22,8 +22,8 @@ import io.bisq.common.Marshaller;
|
|||
import io.bisq.common.crypto.*;
|
||||
import io.bisq.generated.protobuffer.PB;
|
||||
import io.bisq.network.p2p.DecryptedMsgWithPubKey;
|
||||
import io.bisq.network.p2p.Msg;
|
||||
import io.bisq.network.p2p.network.ProtobufferResolver;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import javax.crypto.SecretKey;
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
package io.bisq.network.p2p;
|
||||
|
||||
import io.bisq.common.persistance.Msg;
|
||||
|
||||
public interface AnonymousMsg extends Msg {
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package io.bisq.network.p2p;
|
||||
|
||||
import io.bisq.common.app.Version;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
import io.bisq.generated.protobuffer.PB;
|
||||
|
||||
public final class CloseConnectionMsg implements Msg {
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
package io.bisq.network.p2p;
|
||||
|
||||
import io.bisq.common.app.Version;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
import io.bisq.common.persistance.Persistable;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
|
|
@ -17,5 +17,7 @@
|
|||
|
||||
package io.bisq.network.p2p;
|
||||
|
||||
import io.bisq.common.persistance.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.KeyRing;
|
||||
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.Storage;
|
||||
import io.bisq.common.util.Utilities;
|
||||
|
@ -198,11 +200,11 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis
|
|||
else
|
||||
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);
|
||||
|
||||
p2PDataStorage = new P2PDataStorage(broadcaster, networkNode, storageDir);
|
||||
p2PDataStorage = new P2PDataStorage(broadcaster, networkNode, storageDir, protobufferResolver);
|
||||
p2PDataStorage.addHashMapChangedListener(this);
|
||||
|
||||
requestDataManager = new RequestDataManager(networkNode, p2PDataStorage, peerManager, seedNodeAddresses, this);
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package io.bisq.network.p2p;
|
||||
|
||||
|
||||
import io.bisq.common.persistance.Msg;
|
||||
|
||||
public interface SendersNodeAddressMsg extends Msg {
|
||||
NodeAddress getSenderNodeAddress();
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package io.bisq.network.p2p;
|
||||
|
||||
import io.bisq.common.persistance.Msg;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
|
|
@ -6,6 +6,8 @@ import com.google.common.util.concurrent.Uninterruptibles;
|
|||
import io.bisq.common.UserThread;
|
||||
import io.bisq.common.app.Log;
|
||||
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.Utilities;
|
||||
import io.bisq.generated.protobuffer.PB;
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package io.bisq.network.p2p.network;
|
||||
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
|
||||
import java.net.Socket;
|
||||
|
||||
public class InboundConnection extends Connection {
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.msopentech.thali.java.toronionproxy.JavaOnionProxyContext;
|
|||
import com.msopentech.thali.java.toronionproxy.JavaOnionProxyManager;
|
||||
import io.bisq.common.UserThread;
|
||||
import io.bisq.common.app.Log;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.common.util.Utilities;
|
||||
import io.bisq.network.p2p.NodeAddress;
|
||||
import io.nucleo.net.HiddenServiceDescriptor;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package io.bisq.network.p2p.network;
|
||||
|
||||
import io.bisq.network.p2p.Msg;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
|
||||
public interface MessageListener {
|
||||
void onMessage(Msg msg, Connection connection);
|
||||
|
|
|
@ -4,8 +4,9 @@ import com.google.common.util.concurrent.*;
|
|||
import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy;
|
||||
import io.bisq.common.UserThread;
|
||||
import io.bisq.common.app.Log;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
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 javafx.beans.property.ObjectProperty;
|
||||
import javafx.beans.property.ReadOnlyObjectProperty;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package io.bisq.network.p2p.network;
|
||||
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.network.p2p.NodeAddress;
|
||||
|
||||
import java.net.Socket;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package io.bisq.network.p2p.network;
|
||||
|
||||
import io.bisq.common.app.Log;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package io.bisq.network.p2p.network;
|
||||
|
||||
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.LongProperty;
|
||||
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.UserThread;
|
||||
import io.bisq.common.app.Log;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.common.util.Utilities;
|
||||
import io.bisq.network.p2p.NodeAddress;
|
||||
import io.bisq.network.p2p.Utils;
|
||||
|
|
|
@ -4,6 +4,7 @@ import io.bisq.common.Clock;
|
|||
import io.bisq.common.Timer;
|
||||
import io.bisq.common.UserThread;
|
||||
import io.bisq.common.app.Log;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.common.storage.Storage;
|
||||
import io.bisq.network.p2p.NodeAddress;
|
||||
import io.bisq.network.p2p.network.*;
|
||||
|
@ -87,14 +88,14 @@ public class PeerManager implements ConnectionListener {
|
|||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public PeerManager(NetworkNode networkNode, int maxConnections, Set<NodeAddress> seedNodeAddresses,
|
||||
File storageDir, Clock clock) {
|
||||
File storageDir, Clock clock, ProtobufferResolver protobufferResolver) {
|
||||
setConnectionLimits(maxConnections);
|
||||
this.networkNode = networkNode;
|
||||
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)
|
||||
this.seedNodeAddresses = new HashSet<>(seedNodeAddresses);
|
||||
networkNode.addConnectionListener(this);
|
||||
dbStorage = new Storage<>(storageDir);
|
||||
dbStorage = new Storage<>(storageDir, protobufferResolver);
|
||||
HashSet<Peer> persistedPeers = dbStorage.initAndGetPersistedWithFileName("PersistedPeers");
|
||||
if (persistedPeers != null) {
|
||||
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.UserThread;
|
||||
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.network.CloseConnectionReason;
|
||||
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.UserThread;
|
||||
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.network.*;
|
||||
import io.bisq.network.p2p.peers.PeerManager;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package io.bisq.network.p2p.peers.getdata.messages;
|
||||
|
||||
import io.bisq.network.p2p.Msg;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ import com.google.common.util.concurrent.SettableFuture;
|
|||
import io.bisq.common.Timer;
|
||||
import io.bisq.common.UserThread;
|
||||
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.MessageListener;
|
||||
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.UserThread;
|
||||
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.peers.PeerManager;
|
||||
import io.bisq.network.p2p.peers.keepalive.messages.Ping;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package io.bisq.network.p2p.peers.keepalive.messages;
|
||||
|
||||
import io.bisq.common.app.Version;
|
||||
import io.bisq.network.p2p.Msg;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
|
||||
public abstract class KeepAliveMsg implements Msg {
|
||||
//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.generated.protobuffer.PB;
|
||||
import io.bisq.network.p2p.Msg;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
|
||||
public final class Ping extends KeepAliveMsg {
|
||||
// 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.generated.protobuffer.PB;
|
||||
import io.bisq.network.p2p.Msg;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
|
||||
public final class Pong extends KeepAliveMsg {
|
||||
// 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.UserThread;
|
||||
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.network.CloseConnectionReason;
|
||||
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.UserThread;
|
||||
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.network.*;
|
||||
import io.bisq.network.p2p.peers.PeerManager;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package io.bisq.network.p2p.peers.peerexchange.messages;
|
||||
|
||||
import io.bisq.common.app.Version;
|
||||
import io.bisq.network.p2p.Msg;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
|
||||
abstract class PeerExchangeMsg implements Msg {
|
||||
//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.Sig;
|
||||
import io.bisq.common.persistance.Persistable;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.common.storage.FileUtil;
|
||||
import io.bisq.common.storage.ResourceNotFoundException;
|
||||
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.generated.protobuffer.PB;
|
||||
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.network.*;
|
||||
import io.bisq.network.p2p.peers.BroadcastHandler;
|
||||
|
@ -68,14 +69,14 @@ public class P2PDataStorage implements MessageListener, ConnectionListener {
|
|||
// Constructor
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public P2PDataStorage(Broadcaster broadcaster, NetworkNode networkNode, File storageDir) {
|
||||
public P2PDataStorage(Broadcaster broadcaster, NetworkNode networkNode, File storageDir, ProtobufferResolver protobufferResolver) {
|
||||
this.broadcaster = broadcaster;
|
||||
|
||||
networkNode.addMessageListener(this);
|
||||
networkNode.addConnectionListener(this);
|
||||
|
||||
sequenceNumberMapStorage = new Storage<>(storageDir);
|
||||
persistedEntryMapStorage = new Storage<>(storageDir);
|
||||
sequenceNumberMapStorage = new Storage<>(storageDir, protobufferResolver);
|
||||
persistedEntryMapStorage = new Storage<>(storageDir, protobufferResolver);
|
||||
|
||||
init(storageDir);
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package io.bisq.network.p2p.storage.messages;
|
|||
|
||||
import io.bisq.common.app.Version;
|
||||
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.ProtectedStorageEntry;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package io.bisq.network.p2p.storage.messages;
|
||||
|
||||
import io.bisq.common.app.Version;
|
||||
import io.bisq.network.p2p.Msg;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
|
||||
public abstract class BroadcastMsg implements Msg {
|
||||
//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.generated.protobuffer.PB;
|
||||
import io.bisq.network.p2p.Msg;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
import io.bisq.network.p2p.storage.payload.ProtectedStorageEntry;
|
||||
|
||||
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.generated.protobuffer.PB;
|
||||
import io.bisq.network.p2p.Msg;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
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.generated.protobuffer.PB;
|
||||
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 org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.junit.After;
|
||||
|
|
|
@ -2,9 +2,11 @@ package io.bisq.network.p2p;
|
|||
|
||||
import io.bisq.common.Clock;
|
||||
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.network.crypto.EncryptionService;
|
||||
import io.bisq.network.p2p.network.ProtobufferResolver;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.network.p2p.seed.SeedNodesRepository;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -176,6 +178,11 @@ public class TestUtils {
|
|||
public Optional<Msg> fromProto(PB.Envelope envelope) {
|
||||
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.generated.protobuffer.PB;
|
||||
import io.bisq.network.p2p.Msg;
|
||||
import io.bisq.common.persistance.Msg;
|
||||
import io.bisq.network.p2p.storage.payload.ExpirablePayload;
|
||||
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.KeyRing;
|
||||
import io.bisq.common.crypto.KeyStorage;
|
||||
import io.bisq.common.persistance.ProtobufferResolver;
|
||||
import io.bisq.common.storage.FileUtil;
|
||||
import io.bisq.network.crypto.EncryptionService;
|
||||
import io.bisq.network.p2p.NodeAddress;
|
||||
|
@ -43,6 +44,8 @@ public class P2PDataStorageTest {
|
|||
Broadcaster broadcaster;
|
||||
@Mocked
|
||||
NetworkNode networkNode;
|
||||
@Mocked
|
||||
ProtobufferResolver protobufferResolver;
|
||||
|
||||
@Before
|
||||
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));
|
||||
storageSignatureKeyPair2 = keyRing2.getSignatureKeyPair();
|
||||
encryptionService2 = new EncryptionService(keyRing2, TestUtils.getProtobufferResolver());
|
||||
dataStorage1 = new P2PDataStorage(broadcaster, networkNode, dir1);
|
||||
dataStorage1 = new P2PDataStorage(broadcaster, networkNode, dir1, protobufferResolver);
|
||||
}
|
||||
|
||||
@After
|
||||
|
|
10
pom.xml
10
pom.xml
|
@ -122,7 +122,7 @@
|
|||
<dependency>
|
||||
<groupId>com.google.inject</groupId>
|
||||
<artifactId>guice</artifactId>
|
||||
<version>3.0</version>
|
||||
<version>4.1.0</version>
|
||||
</dependency>
|
||||
|
||||
<!--crypto-->
|
||||
|
@ -165,7 +165,7 @@
|
|||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<version>18.0</version>
|
||||
<version>19.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.fxmisc.easybind</groupId>
|
||||
|
@ -239,6 +239,12 @@
|
|||
<groupId>com.google.protobuf</groupId>
|
||||
<artifactId>protobuf-java-util</artifactId>
|
||||
<version>3.2.0</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
@ -36,7 +36,7 @@ import io.bisq.core.user.Preferences;
|
|||
import io.bisq.core.user.User;
|
||||
import io.bisq.network.crypto.EncryptionServiceModule;
|
||||
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.LoggerFactory;
|
||||
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.network.crypto.EncryptionServiceModule;
|
||||
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.LoggerFactory;
|
||||
import org.springframework.core.env.Environment;
|
||||
|
|
Loading…
Add table
Reference in a new issue