diff --git a/core/src/main/java/bisq/core/dao/DaoFacade.java b/core/src/main/java/bisq/core/dao/DaoFacade.java index b5d3462bffe..e5e560b2f7a 100644 --- a/core/src/main/java/bisq/core/dao/DaoFacade.java +++ b/core/src/main/java/bisq/core/dao/DaoFacade.java @@ -631,7 +631,7 @@ public Coin getGenesisTotalSupply() { } public int getNumIssuanceTransactions(IssuanceType issuanceType) { - return daoStateService.getIssuanceSet(issuanceType).size(); + return daoStateService.getIssuanceSetForType(issuanceType).size(); } public Set getBurntFeeTxs() { diff --git a/core/src/main/java/bisq/core/dao/governance/blindvote/MyBlindVoteListService.java b/core/src/main/java/bisq/core/dao/governance/blindvote/MyBlindVoteListService.java index 3c09fc3d86a..d0edacc099f 100644 --- a/core/src/main/java/bisq/core/dao/governance/blindvote/MyBlindVoteListService.java +++ b/core/src/main/java/bisq/core/dao/governance/blindvote/MyBlindVoteListService.java @@ -286,7 +286,7 @@ public MeritList getMerits(@Nullable String blindVoteTxId) { .filter(txId -> periodService.isTxInPastCycle(txId, periodService.getChainHeight())) .collect(Collectors.toSet()); - return new MeritList(daoStateService.getIssuanceSet(IssuanceType.COMPENSATION).stream() + return new MeritList(daoStateService.getIssuanceSetForType(IssuanceType.COMPENSATION).stream() .map(issuance -> { checkArgument(issuance.getIssuanceType() == IssuanceType.COMPENSATION, "IssuanceType must be COMPENSATION for MeritList"); diff --git a/core/src/main/java/bisq/core/dao/state/DaoStateService.java b/core/src/main/java/bisq/core/dao/state/DaoStateService.java index 620415a12ca..219f2862851 100644 --- a/core/src/main/java/bisq/core/dao/state/DaoStateService.java +++ b/core/src/main/java/bisq/core/dao/state/DaoStateService.java @@ -597,23 +597,18 @@ public void addIssuance(Issuance issuance) { daoState.getIssuanceMap().put(issuance.getTxId(), issuance); } - public Set getIssuanceSet(IssuanceType issuanceType) { + public Set getIssuanceSetForType(IssuanceType issuanceType) { return daoState.getIssuanceMap().values().stream() .filter(issuance -> issuance.getIssuanceType() == issuanceType) .collect(Collectors.toSet()); } public Optional getIssuance(String txId, IssuanceType issuanceType) { - return daoState.getIssuanceMap().values().stream() - .filter(issuance -> issuance.getTxId().equals(txId)) - .filter(issuance -> issuance.getIssuanceType() == issuanceType) - .findAny(); + return getIssuance(txId).filter(issuance -> issuance.getIssuanceType() == issuanceType); } public Optional getIssuance(String txId) { - return daoState.getIssuanceMap().values().stream() - .filter(issuance -> issuance.getTxId().equals(txId)) - .findAny(); + return Optional.ofNullable(daoState.getIssuanceMap().get(txId)); } public boolean isIssuanceTx(String txId) { diff --git a/core/src/main/java/bisq/core/dao/state/model/DaoState.java b/core/src/main/java/bisq/core/dao/state/model/DaoState.java index c18338b033a..bb65f7b30dc 100644 --- a/core/src/main/java/bisq/core/dao/state/model/DaoState.java +++ b/core/src/main/java/bisq/core/dao/state/model/DaoState.java @@ -81,6 +81,8 @@ public static DaoState getClone(DaoState daoState) { private final LinkedList cycles; // These maps represent mutual data which can get changed at parsing a transaction + // We use TreeMaps instead of HashMaps because we need deterministic sorting of the maps for the hashChains + // used for the DAO monitor. @Getter private final TreeMap unspentTxOutputMap; @Getter diff --git a/desktop/src/main/java/bisq/desktop/main/dao/economy/supply/SupplyView.java b/desktop/src/main/java/bisq/desktop/main/dao/economy/supply/SupplyView.java index 7d07b2bac44..cd3d05b9656 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/economy/supply/SupplyView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/economy/supply/SupplyView.java @@ -61,8 +61,6 @@ import javafx.util.StringConverter; -import java.text.DecimalFormat; - import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; @@ -73,6 +71,8 @@ import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; +import java.text.DecimalFormat; + import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; @@ -630,10 +630,10 @@ private List updateBSQIssuedMonthly() { .toLocalDate() .with(ADJUSTERS.get(MONTH))); - Stream bsqByCompensation = daoStateService.getIssuanceSet(IssuanceType.COMPENSATION).stream() + Stream bsqByCompensation = daoStateService.getIssuanceSetForType(IssuanceType.COMPENSATION).stream() .sorted(Comparator.comparing(Issuance::getChainHeight)); - Stream bsqByReimbursement = daoStateService.getIssuanceSet(IssuanceType.REIMBURSEMENT).stream() + Stream bsqByReimbursement = daoStateService.getIssuanceSetForType(IssuanceType.REIMBURSEMENT).stream() .sorted(Comparator.comparing(Issuance::getChainHeight)); Map> bsqAddedByVote = Stream.concat(bsqByCompensation, bsqByReimbursement)