mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-25 07:27:18 +01:00
Remove CompensationRequestModel
This commit is contained in:
parent
74d180fcf7
commit
ac2c95c987
4 changed files with 65 additions and 119 deletions
|
@ -25,7 +25,6 @@ import io.bisq.core.dao.blockchain.BsqLiteNode;
|
|||
import io.bisq.core.dao.blockchain.json.JsonChainStateExporter;
|
||||
import io.bisq.core.dao.blockchain.parse.*;
|
||||
import io.bisq.core.dao.compensation.CompensationRequestManager;
|
||||
import io.bisq.core.dao.compensation.CompensationRequestModel;
|
||||
import io.bisq.core.dao.vote.VotingDefaultValues;
|
||||
import io.bisq.core.dao.vote.VotingManager;
|
||||
import io.bisq.core.dao.vote.VotingService;
|
||||
|
@ -63,7 +62,6 @@ public class DaoModule extends AppModule {
|
|||
bind(VotingService.class).in(Singleton.class);
|
||||
|
||||
bind(CompensationRequestManager.class).in(Singleton.class);
|
||||
bind(CompensationRequestModel.class).in(Singleton.class);
|
||||
bind(VotingManager.class).in(Singleton.class);
|
||||
bind(VotingDefaultValues.class).in(Singleton.class);
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ import io.bisq.core.dao.blockchain.vo.Tx;
|
|||
import io.bisq.core.dao.blockchain.vo.TxOutput;
|
||||
import io.bisq.core.dao.blockchain.vo.TxType;
|
||||
import io.bisq.core.dao.compensation.CompensationRequest;
|
||||
import io.bisq.core.dao.compensation.CompensationRequestModel;
|
||||
import io.bisq.core.dao.compensation.CompensationRequestManager;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
@ -37,17 +37,17 @@ public class IssuanceVerification {
|
|||
private final BsqChainState bsqChainState;
|
||||
private final PeriodVerification periodVerification;
|
||||
private final VotingVerification votingVerification;
|
||||
private final CompensationRequestModel compensationRequestModel;
|
||||
private CompensationRequestManager compensationRequestManager;
|
||||
|
||||
@Inject
|
||||
public IssuanceVerification(BsqChainState bsqChainState,
|
||||
PeriodVerification periodVerification,
|
||||
VotingVerification votingVerification,
|
||||
CompensationRequestModel compensationRequestModel) {
|
||||
CompensationRequestManager compensationRequestManager) {
|
||||
this.bsqChainState = bsqChainState;
|
||||
this.periodVerification = periodVerification;
|
||||
this.votingVerification = votingVerification;
|
||||
this.compensationRequestModel = compensationRequestModel;
|
||||
this.compensationRequestManager = compensationRequestManager;
|
||||
}
|
||||
|
||||
boolean maybeProcessData(Tx tx) {
|
||||
|
@ -57,7 +57,7 @@ public class IssuanceVerification {
|
|||
TxOutput btcTxOutput = outputs.get(1);
|
||||
final String btcAddress = btcTxOutput.getAddress();
|
||||
// TODO find address by block range/cycle
|
||||
final Optional<CompensationRequest> compensationRequest = compensationRequestModel.findByAddress(btcAddress);
|
||||
final Optional<CompensationRequest> compensationRequest = compensationRequestManager.findByAddress(btcAddress);
|
||||
if (compensationRequest.isPresent()) {
|
||||
final CompensationRequest compensationRequest1 = compensationRequest.get();
|
||||
final long bsqAmount = bsqTxOutput.getValue();
|
||||
|
|
|
@ -29,13 +29,17 @@ import io.bisq.core.btc.wallet.BsqWalletService;
|
|||
import io.bisq.core.btc.wallet.BtcWalletService;
|
||||
import io.bisq.core.dao.DaoPeriodService;
|
||||
import io.bisq.core.dao.blockchain.BsqChainStateListener;
|
||||
import io.bisq.core.dao.blockchain.parse.PeriodVerification;
|
||||
import io.bisq.core.dao.blockchain.parse.VotingVerification;
|
||||
import io.bisq.core.dao.vote.VotingDefaultValues;
|
||||
import io.bisq.network.p2p.P2PService;
|
||||
import io.bisq.network.p2p.storage.HashMapChangedListener;
|
||||
import io.bisq.network.p2p.storage.payload.ProtectedStorageEntry;
|
||||
import io.bisq.network.p2p.storage.payload.ProtectedStoragePayload;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.collections.transformation.FilteredList;
|
||||
import lombok.Getter;
|
||||
import org.bitcoinj.core.Coin;
|
||||
import org.bitcoinj.core.Transaction;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -43,6 +47,7 @@ import org.slf4j.LoggerFactory;
|
|||
|
||||
import java.security.PublicKey;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public class CompensationRequestManager implements PersistedDataHost, BsqChainStateListener {
|
||||
private static final Logger log = LoggerFactory.getLogger(CompensationRequestManager.class);
|
||||
|
@ -53,13 +58,20 @@ public class CompensationRequestManager implements PersistedDataHost, BsqChainSt
|
|||
private final DaoPeriodService daoPeriodService;
|
||||
private final BtcWalletService btcWalletService;
|
||||
private final BsqWalletService bsqWalletService;
|
||||
private final CompensationRequestModel model;
|
||||
private final VotingDefaultValues votingDefaultValues;
|
||||
private final PeriodVerification periodVerification;
|
||||
private final VotingVerification votingVerification;
|
||||
|
||||
private final KeyRing keyRing;
|
||||
private final Storage<CompensationRequestList> compensationRequestsStorage;
|
||||
|
||||
private CompensationRequest selectedCompensationRequest;
|
||||
|
||||
@Getter
|
||||
private final ObservableList<CompensationRequest> allRequests = FXCollections.observableArrayList();
|
||||
@Getter
|
||||
private final FilteredList<CompensationRequest> activeRequests = new FilteredList<>(allRequests);
|
||||
@Getter
|
||||
private final FilteredList<CompensationRequest> pastRequests = new FilteredList<>(allRequests);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Constructor
|
||||
|
@ -70,16 +82,18 @@ public class CompensationRequestManager implements PersistedDataHost, BsqChainSt
|
|||
BtcWalletService btcWalletService,
|
||||
BsqWalletService bsqWalletService,
|
||||
DaoPeriodService daoPeriodService,
|
||||
CompensationRequestModel model,
|
||||
VotingDefaultValues votingDefaultValues,
|
||||
PeriodVerification periodVerification,
|
||||
VotingVerification votingVerification,
|
||||
KeyRing keyRing,
|
||||
Storage<CompensationRequestList> compensationRequestsStorage) {
|
||||
this.p2PService = p2PService;
|
||||
this.daoPeriodService = daoPeriodService;
|
||||
this.btcWalletService = btcWalletService;
|
||||
this.bsqWalletService = bsqWalletService;
|
||||
this.model = model;
|
||||
this.votingDefaultValues = votingDefaultValues;
|
||||
this.periodVerification = periodVerification;
|
||||
this.votingVerification = votingVerification;
|
||||
this.keyRing = keyRing;
|
||||
this.compensationRequestsStorage = compensationRequestsStorage;
|
||||
}
|
||||
|
@ -89,7 +103,7 @@ public class CompensationRequestManager implements PersistedDataHost, BsqChainSt
|
|||
if (BisqEnvironment.isDAOActivatedAndBaseCurrencySupportingBsq()) {
|
||||
CompensationRequestList persisted = compensationRequestsStorage.initAndGetPersistedWithFileName("CompensationRequestList", 100);
|
||||
if (persisted != null)
|
||||
model.setPersistedCompensationRequest(persisted.getList());
|
||||
setPersistedCompensationRequest(persisted.getList());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -112,10 +126,10 @@ public class CompensationRequestManager implements PersistedDataHost, BsqChainSt
|
|||
public void onRemoved(ProtectedStorageEntry data) {
|
||||
final ProtectedStoragePayload protectedStoragePayload = data.getProtectedStoragePayload();
|
||||
if (protectedStoragePayload instanceof CompensationRequestPayload) {
|
||||
model.findCompensationRequest((CompensationRequestPayload) protectedStoragePayload).ifPresent(compensationRequest -> {
|
||||
findCompensationRequest((CompensationRequestPayload) protectedStoragePayload).ifPresent(compensationRequest -> {
|
||||
if (daoPeriodService.isInCompensationRequestPhase(compensationRequest)) {
|
||||
model.removeCompensationRequest(compensationRequest);
|
||||
compensationRequestsStorage.queueUpForSave(new CompensationRequestList(model.getAllRequests()), 500);
|
||||
removeCompensationRequestFromList(compensationRequest);
|
||||
compensationRequestsStorage.queueUpForSave(new CompensationRequestList(getAllRequests()), 500);
|
||||
} else {
|
||||
final String msg = "onRemoved called of a CompensationRequest which is outside of the CompensationRequest phase is invalid and we ignore it.";
|
||||
log.warn(msg);
|
||||
|
@ -127,7 +141,7 @@ public class CompensationRequestManager implements PersistedDataHost, BsqChainSt
|
|||
}
|
||||
});
|
||||
|
||||
// At startup the P2PDataStorage inits earlier, otherwise we ge the listener called.
|
||||
// At startup the P2PDataStorage initializes earlier, otherwise we ge the listener called.
|
||||
p2PService.getP2PDataStorage().getMap().values().forEach(e -> {
|
||||
final ProtectedStoragePayload protectedStoragePayload = e.getProtectedStoragePayload();
|
||||
if (protectedStoragePayload instanceof CompensationRequestPayload)
|
||||
|
@ -139,7 +153,7 @@ public class CompensationRequestManager implements PersistedDataHost, BsqChainSt
|
|||
// Republish
|
||||
PublicKey signaturePubKey = keyRing.getPubKeyRing().getSignaturePubKey();
|
||||
UserThread.runAfter(() -> {
|
||||
model.getActiveRequests().stream()
|
||||
activeRequests.stream()
|
||||
.filter(e -> e.getCompensationRequestPayload().getOwnerPubKey().equals(signaturePubKey))
|
||||
.forEach(e -> addToP2PNetwork(e.getCompensationRequestPayload()));
|
||||
}, 1); // TODO increase delay to about 30 sec.
|
||||
|
@ -152,22 +166,22 @@ public class CompensationRequestManager implements PersistedDataHost, BsqChainSt
|
|||
|
||||
@Override
|
||||
public void onBsqChainStateChanged() {
|
||||
model.updateFilteredLists();
|
||||
updateFilteredLists();
|
||||
}
|
||||
|
||||
private void onChainHeightChanged() {
|
||||
model.updateFilteredLists();
|
||||
updateFilteredLists();
|
||||
}
|
||||
|
||||
public void addToP2PNetwork(CompensationRequestPayload compensationRequestPayload) {
|
||||
p2PService.addProtectedStorageEntry(compensationRequestPayload, true);
|
||||
}
|
||||
|
||||
public void addCompensationRequestPayload(CompensationRequestPayload compensationRequestPayload, boolean storeLocally) {
|
||||
private void addCompensationRequestPayload(CompensationRequestPayload compensationRequestPayload, boolean storeLocally) {
|
||||
if (!contains(compensationRequestPayload)) {
|
||||
model.addCompensationRequest(new CompensationRequest(compensationRequestPayload));
|
||||
addCompensationRequest(new CompensationRequest(compensationRequestPayload));
|
||||
if (storeLocally)
|
||||
compensationRequestsStorage.queueUpForSave(new CompensationRequestList(model.getAllRequests()), 500);
|
||||
compensationRequestsStorage.queueUpForSave(new CompensationRequestList(getAllRequests()), 500);
|
||||
} else {
|
||||
log.warn("We have already an item with the same CompensationRequest.");
|
||||
}
|
||||
|
@ -176,8 +190,8 @@ public class CompensationRequestManager implements PersistedDataHost, BsqChainSt
|
|||
public boolean removeCompensationRequest(CompensationRequest compensationRequest) {
|
||||
if (daoPeriodService.isInCompensationRequestPhase(compensationRequest)) {
|
||||
if (isMyCompensationRequest(compensationRequest)) {
|
||||
model.removeCompensationRequest(compensationRequest);
|
||||
compensationRequestsStorage.queueUpForSave(new CompensationRequestList(model.getAllRequests()), 500);
|
||||
removeCompensationRequestFromList(compensationRequest);
|
||||
compensationRequestsStorage.queueUpForSave(new CompensationRequestList(getAllRequests()), 500);
|
||||
return p2PService.removeData(compensationRequest.getCompensationRequestPayload(), true);
|
||||
} else {
|
||||
final String msg = "removeCompensationRequest called for a CompensationRequest which is not ours.";
|
||||
|
@ -195,16 +209,21 @@ public class CompensationRequestManager implements PersistedDataHost, BsqChainSt
|
|||
}
|
||||
}
|
||||
|
||||
private void removeCompensationRequestFromList(CompensationRequest compensationRequest) {
|
||||
allRequests.remove(compensationRequest);
|
||||
updateFilteredLists();
|
||||
}
|
||||
|
||||
public boolean isMyCompensationRequest(CompensationRequest compensationRequest) {
|
||||
return keyRing.getPubKeyRing().getSignaturePubKey().equals(compensationRequest.getCompensationRequestPayload().getOwnerPubKey());
|
||||
}
|
||||
|
||||
private boolean contains(CompensationRequestPayload compensationRequestPayload) {
|
||||
return model.getAllRequests().stream().filter(e -> e.getCompensationRequestPayload().equals(compensationRequestPayload)).findAny().isPresent();
|
||||
return allRequests.stream().filter(e -> e.getCompensationRequestPayload().equals(compensationRequestPayload)).findAny().isPresent();
|
||||
}
|
||||
|
||||
public List<CompensationRequest> getCompensationRequestsList() {
|
||||
return model.getAllRequests();
|
||||
return allRequests;
|
||||
}
|
||||
|
||||
public void fundCompensationRequest(CompensationRequest compensationRequest, Coin amount, FutureCallback<Transaction> callback) {
|
||||
|
@ -219,15 +238,31 @@ public class CompensationRequestManager implements PersistedDataHost, BsqChainSt
|
|||
return selectedCompensationRequest;
|
||||
}
|
||||
|
||||
public ObservableList<CompensationRequest> getAllRequests() {
|
||||
return model.getAllRequests();
|
||||
private void updateFilteredLists() {
|
||||
activeRequests.setPredicate(daoPeriodService::isInCurrentCycle);
|
||||
pastRequests.setPredicate(compensationRequest -> {
|
||||
return !daoPeriodService.isInCurrentCycle(compensationRequest);
|
||||
});
|
||||
}
|
||||
|
||||
public FilteredList<CompensationRequest> getActiveRequests() {
|
||||
return model.getActiveRequests();
|
||||
private void setPersistedCompensationRequest(List<CompensationRequest> list) {
|
||||
this.allRequests.clear();
|
||||
this.allRequests.addAll(list);
|
||||
updateFilteredLists();
|
||||
}
|
||||
|
||||
public FilteredList<CompensationRequest> getPastRequests() {
|
||||
return model.getPastRequests();
|
||||
public Optional<CompensationRequest> findByAddress(String address) {
|
||||
return allRequests.stream()
|
||||
.filter(e -> e.getCompensationRequestPayload().getBsqAddress().equals(address))
|
||||
.findAny();
|
||||
}
|
||||
|
||||
private void addCompensationRequest(CompensationRequest compensationRequest) {
|
||||
allRequests.add(compensationRequest);
|
||||
updateFilteredLists();
|
||||
}
|
||||
|
||||
private Optional<CompensationRequest> findCompensationRequest(CompensationRequestPayload compensationRequestPayload) {
|
||||
return allRequests.stream().filter(e -> e.getCompensationRequestPayload().equals(compensationRequestPayload)).findAny();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,87 +0,0 @@
|
|||
/*
|
||||
* This file is part of Bisq.
|
||||
*
|
||||
* Bisq is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or (at
|
||||
* your option) any later version.
|
||||
*
|
||||
* Bisq is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with Bisq. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package io.bisq.core.dao.compensation;
|
||||
|
||||
import io.bisq.core.dao.DaoPeriodService;
|
||||
import io.bisq.core.dao.blockchain.parse.PeriodVerification;
|
||||
import io.bisq.core.dao.blockchain.parse.VotingVerification;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.collections.transformation.FilteredList;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@Slf4j
|
||||
public class CompensationRequestModel {
|
||||
|
||||
private final DaoPeriodService daoPeriodService;
|
||||
private final PeriodVerification periodVerification;
|
||||
private final VotingVerification votingVerification;
|
||||
@Getter
|
||||
private final ObservableList<CompensationRequest> allRequests = FXCollections.observableArrayList();
|
||||
@Getter
|
||||
private final FilteredList<CompensationRequest> activeRequests = new FilteredList<>(allRequests);
|
||||
@Getter
|
||||
private final FilteredList<CompensationRequest> pastRequests = new FilteredList<>(allRequests);
|
||||
|
||||
@Inject
|
||||
public CompensationRequestModel(DaoPeriodService daoPeriodService,
|
||||
PeriodVerification periodVerification,
|
||||
VotingVerification votingVerification) {
|
||||
this.daoPeriodService = daoPeriodService;
|
||||
this.periodVerification = periodVerification;
|
||||
this.votingVerification = votingVerification;
|
||||
}
|
||||
|
||||
public void updateFilteredLists() {
|
||||
activeRequests.setPredicate(daoPeriodService::isInCurrentCycle);
|
||||
pastRequests.setPredicate(compensationRequest -> {
|
||||
return !daoPeriodService.isInCurrentCycle(compensationRequest);
|
||||
});
|
||||
}
|
||||
|
||||
public void setPersistedCompensationRequest(List<CompensationRequest> list) {
|
||||
this.allRequests.clear();
|
||||
this.allRequests.addAll(list);
|
||||
updateFilteredLists();
|
||||
}
|
||||
|
||||
public Optional<CompensationRequest> findByAddress(String address) {
|
||||
return allRequests.stream()
|
||||
.filter(e -> e.getCompensationRequestPayload().getBsqAddress().equals(address))
|
||||
.findAny();
|
||||
}
|
||||
|
||||
public void addCompensationRequest(CompensationRequest compensationRequest) {
|
||||
allRequests.add(compensationRequest);
|
||||
updateFilteredLists();
|
||||
}
|
||||
|
||||
public void removeCompensationRequest(CompensationRequest compensationRequest) {
|
||||
allRequests.remove(compensationRequest);
|
||||
updateFilteredLists();
|
||||
}
|
||||
|
||||
public Optional<CompensationRequest> findCompensationRequest(CompensationRequestPayload compensationRequestPayload) {
|
||||
return allRequests.stream().filter(e -> e.getCompensationRequestPayload().equals(compensationRequestPayload)).findAny();
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue