diff --git a/core/src/main/java/bisq/core/dao/DaoFacade.java b/core/src/main/java/bisq/core/dao/DaoFacade.java index 2a273f1fa3f..e3413b6ea9e 100644 --- a/core/src/main/java/bisq/core/dao/DaoFacade.java +++ b/core/src/main/java/bisq/core/dao/DaoFacade.java @@ -92,6 +92,7 @@ import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.Set; @@ -548,7 +549,13 @@ public Optional getLockTime(String txId) { public List getAllBonds() { - List bonds = bondedReputationRepository.getActiveBonds(); + List bonds = new ArrayList<>(bondedReputationRepository.getBonds()); + bonds.addAll(bondedRolesRepository.getBonds()); + return bonds; + } + + public List getAllActiveBonds() { + List bonds = new ArrayList<>(bondedReputationRepository.getActiveBonds()); bonds.addAll(bondedRolesRepository.getActiveBonds()); return bonds; } diff --git a/core/src/main/java/bisq/core/dao/governance/voteresult/VoteResultException.java b/core/src/main/java/bisq/core/dao/governance/voteresult/VoteResultException.java index 76d382d36ad..505c4e7655b 100644 --- a/core/src/main/java/bisq/core/dao/governance/voteresult/VoteResultException.java +++ b/core/src/main/java/bisq/core/dao/governance/voteresult/VoteResultException.java @@ -69,6 +69,10 @@ public static class ValidationException extends Exception { super("Validation of vote result failed.", cause); } + public ValidationException(String message) { + super(message); + } + @Override public String toString() { return "VoteResultException{" + diff --git a/desktop/src/main/java/bisq/desktop/main/dao/governance/ProposalDisplay.java b/desktop/src/main/java/bisq/desktop/main/dao/governance/ProposalDisplay.java index bd877887446..5b548d03682 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/governance/ProposalDisplay.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/governance/ProposalDisplay.java @@ -334,7 +334,7 @@ public BondedRoleType fromString(String string) { comboBoxValueTextFieldIndex = gridRow; checkNotNull(confiscateBondComboBox, "confiscateBondComboBox must not be null"); - confiscateBondComboBox.setItems(FXCollections.observableArrayList(daoFacade.getAllBonds())); + confiscateBondComboBox.setItems(FXCollections.observableArrayList(daoFacade.getAllActiveBonds())); confiscateBondComboBox.setConverter(new StringConverter<>() { @Override public String toString(Bond bond) { @@ -347,7 +347,6 @@ public String toString(Bond bond) { bondType = Res.get("dao.bond.bondedReputation"); bondDetails = Utilities.bytesAsHexString(bond.getBondedAsset().getHash()); } - return bondType + ": " + bondDetails; } diff --git a/desktop/src/main/java/bisq/desktop/main/dao/governance/make/MakeProposalView.java b/desktop/src/main/java/bisq/desktop/main/dao/governance/make/MakeProposalView.java index e75d372cc4e..ed52a5f3574 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/governance/make/MakeProposalView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/governance/make/MakeProposalView.java @@ -40,6 +40,7 @@ import bisq.core.dao.governance.proposal.ProposalWithTransaction; import bisq.core.dao.governance.proposal.TxException; import bisq.core.dao.governance.proposal.param.ChangeParamValidator; +import bisq.core.dao.governance.voteresult.VoteResultException; import bisq.core.dao.presentation.DaoUtil; import bisq.core.dao.state.DaoStateListener; import bisq.core.dao.state.model.blockchain.Block; @@ -310,7 +311,6 @@ private void publishMyProposal(ProposalType type) { new Popup<>().warning(Res.get("dao.proposal.create.missingMinerFeeFunds", btcFormatter.formatCoinWithCode(e.missing))).show(); } - } catch (ProposalValidationException e) { String message; if (e.getMinRequestAmount() != null) { @@ -320,7 +320,7 @@ private void publishMyProposal(ProposalType type) { message = e.getMessage(); } new Popup<>().warning(message).show(); - } catch (TxException e) { + } catch (Throwable e) { log.error(e.toString()); e.printStackTrace(); new Popup<>().warning(e.toString()).show(); @@ -365,7 +365,7 @@ private void doPublishMyProposal(Proposal proposal, Transaction transaction) { @Nullable private ProposalWithTransaction getProposalWithTransaction(ProposalType proposalType) - throws InsufficientMoneyException, ProposalValidationException, TxException { + throws InsufficientMoneyException, ProposalValidationException, TxException, VoteResultException.ValidationException { checkNotNull(proposalDisplay, "proposalDisplay must not be null"); @@ -421,6 +421,10 @@ private ProposalWithTransaction getProposalWithTransaction(ProposalType proposal checkNotNull(proposalDisplay.confiscateBondComboBox, "proposalDisplay.confiscateBondComboBox must not be null"); Bond bond = proposalDisplay.confiscateBondComboBox.getSelectionModel().getSelectedItem(); + + if (!bond.isActive()) + throw new VoteResultException.ValidationException("Bond is not locked and can't be confiscated"); + return daoFacade.getConfiscateBondProposalWithTransaction(name, link, bond.getLockupTxId()); case GENERIC: return daoFacade.getGenericProposalWithTransaction(name, link);