Add ConsensusCritical to proposal validators

Changing validation rules can potentially break consensus (e.g. a past
proposal has been accepted according to old rules, and might become
invalid by new rules. The result of the proposal would become
invalidated  then.
This commit is contained in:
Manfred Karrer 2019-03-19 22:39:32 -05:00
parent 13ca802dd1
commit fb3ca06600
No known key found for this signature in database
GPG key ID: 401250966A6B2C46
8 changed files with 39 additions and 8 deletions

View file

@ -17,6 +17,7 @@
package bisq.core.dao.governance.proposal; package bisq.core.dao.governance.proposal;
import bisq.core.dao.governance.ConsensusCritical;
import bisq.core.dao.governance.period.PeriodService; import bisq.core.dao.governance.period.PeriodService;
import bisq.core.dao.state.DaoStateService; import bisq.core.dao.state.DaoStateService;
import bisq.core.dao.state.model.blockchain.BaseTx; import bisq.core.dao.state.model.blockchain.BaseTx;
@ -33,8 +34,11 @@ import lombok.extern.slf4j.Slf4j;
import static org.apache.commons.lang3.Validate.notEmpty; import static org.apache.commons.lang3.Validate.notEmpty;
/**
* Changes here can potentially break consensus!
*/
@Slf4j @Slf4j
public abstract class ProposalValidator { public abstract class ProposalValidator implements ConsensusCritical {
protected final DaoStateService daoStateService; protected final DaoStateService daoStateService;
protected final PeriodService periodService; protected final PeriodService periodService;

View file

@ -17,6 +17,7 @@
package bisq.core.dao.governance.proposal.compensation; package bisq.core.dao.governance.proposal.compensation;
import bisq.core.dao.governance.ConsensusCritical;
import bisq.core.dao.governance.period.PeriodService; import bisq.core.dao.governance.period.PeriodService;
import bisq.core.dao.governance.proposal.ProposalValidationException; import bisq.core.dao.governance.proposal.ProposalValidationException;
import bisq.core.dao.governance.proposal.ProposalValidator; import bisq.core.dao.governance.proposal.ProposalValidator;
@ -33,8 +34,11 @@ import lombok.extern.slf4j.Slf4j;
import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkArgument;
import static org.apache.commons.lang3.Validate.notEmpty; import static org.apache.commons.lang3.Validate.notEmpty;
/**
* Changes here can potentially break consensus!
*/
@Slf4j @Slf4j
public class CompensationValidator extends ProposalValidator { public class CompensationValidator extends ProposalValidator implements ConsensusCritical {
@Inject @Inject
public CompensationValidator(DaoStateService daoStateService, PeriodService periodService) { public CompensationValidator(DaoStateService daoStateService, PeriodService periodService) {

View file

@ -17,6 +17,7 @@
package bisq.core.dao.governance.proposal.confiscatebond; package bisq.core.dao.governance.proposal.confiscatebond;
import bisq.core.dao.governance.ConsensusCritical;
import bisq.core.dao.governance.period.PeriodService; import bisq.core.dao.governance.period.PeriodService;
import bisq.core.dao.governance.proposal.ProposalValidationException; import bisq.core.dao.governance.proposal.ProposalValidationException;
import bisq.core.dao.governance.proposal.ProposalValidator; import bisq.core.dao.governance.proposal.ProposalValidator;
@ -30,8 +31,11 @@ import lombok.extern.slf4j.Slf4j;
import static org.apache.commons.lang3.Validate.notEmpty; import static org.apache.commons.lang3.Validate.notEmpty;
/**
* Changes here can potentially break consensus!
*/
@Slf4j @Slf4j
public class ConfiscateBondValidator extends ProposalValidator { public class ConfiscateBondValidator extends ProposalValidator implements ConsensusCritical {
@Inject @Inject
public ConfiscateBondValidator(DaoStateService daoStateService, PeriodService periodService) { public ConfiscateBondValidator(DaoStateService daoStateService, PeriodService periodService) {

View file

@ -17,6 +17,7 @@
package bisq.core.dao.governance.proposal.generic; package bisq.core.dao.governance.proposal.generic;
import bisq.core.dao.governance.ConsensusCritical;
import bisq.core.dao.governance.period.PeriodService; import bisq.core.dao.governance.period.PeriodService;
import bisq.core.dao.governance.proposal.ProposalValidationException; import bisq.core.dao.governance.proposal.ProposalValidationException;
import bisq.core.dao.governance.proposal.ProposalValidator; import bisq.core.dao.governance.proposal.ProposalValidator;
@ -27,8 +28,11 @@ import javax.inject.Inject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/**
* Changes here can potentially break consensus!
*/
@Slf4j @Slf4j
public class GenericProposalValidator extends ProposalValidator { public class GenericProposalValidator extends ProposalValidator implements ConsensusCritical {
@Inject @Inject
public GenericProposalValidator(DaoStateService daoStateService, PeriodService periodService) { public GenericProposalValidator(DaoStateService daoStateService, PeriodService periodService) {

View file

@ -19,6 +19,7 @@ package bisq.core.dao.governance.proposal.param;
import bisq.core.app.BisqEnvironment; import bisq.core.app.BisqEnvironment;
import bisq.core.btc.wallet.Restrictions; import bisq.core.btc.wallet.Restrictions;
import bisq.core.dao.governance.ConsensusCritical;
import bisq.core.dao.governance.param.Param; import bisq.core.dao.governance.param.Param;
import bisq.core.dao.governance.period.PeriodService; import bisq.core.dao.governance.period.PeriodService;
import bisq.core.dao.governance.proposal.ProposalValidationException; import bisq.core.dao.governance.proposal.ProposalValidationException;
@ -45,11 +46,13 @@ import static com.google.common.base.Preconditions.checkArgument;
//TODO Use translation properties in error messages a they are shown to user. //TODO Use translation properties in error messages a they are shown to user.
/** /**
* Changes here can potentially break consensus!
*
* We do not store the values as domain types (Coin, int, String) but all as Strings. So we need to parse it to the * We do not store the values as domain types (Coin, int, String) but all as Strings. So we need to parse it to the
* expected data type even if we get the data not from user input. * expected data type even if we get the data not from user input.
*/ */
@Slf4j @Slf4j
public class ChangeParamValidator extends ProposalValidator { public class ChangeParamValidator extends ProposalValidator implements ConsensusCritical {
public enum Result { public enum Result {
OK, OK,
SAME("New parameter value must be different to current value."), SAME("New parameter value must be different to current value."),

View file

@ -17,6 +17,7 @@
package bisq.core.dao.governance.proposal.reimbursement; package bisq.core.dao.governance.proposal.reimbursement;
import bisq.core.dao.governance.ConsensusCritical;
import bisq.core.dao.governance.period.PeriodService; import bisq.core.dao.governance.period.PeriodService;
import bisq.core.dao.governance.proposal.ProposalValidationException; import bisq.core.dao.governance.proposal.ProposalValidationException;
import bisq.core.dao.governance.proposal.ProposalValidator; import bisq.core.dao.governance.proposal.ProposalValidator;
@ -34,8 +35,11 @@ import lombok.extern.slf4j.Slf4j;
import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkArgument;
import static org.apache.commons.lang3.Validate.notEmpty; import static org.apache.commons.lang3.Validate.notEmpty;
/**
* Changes here can potentially break consensus!
*/
@Slf4j @Slf4j
public class ReimbursementValidator extends ProposalValidator { public class ReimbursementValidator extends ProposalValidator implements ConsensusCritical {
@Inject @Inject
public ReimbursementValidator(DaoStateService daoStateService, PeriodService periodService) { public ReimbursementValidator(DaoStateService daoStateService, PeriodService periodService) {

View file

@ -17,6 +17,7 @@
package bisq.core.dao.governance.proposal.removeAsset; package bisq.core.dao.governance.proposal.removeAsset;
import bisq.core.dao.governance.ConsensusCritical;
import bisq.core.dao.governance.period.PeriodService; import bisq.core.dao.governance.period.PeriodService;
import bisq.core.dao.governance.proposal.ProposalValidationException; import bisq.core.dao.governance.proposal.ProposalValidationException;
import bisq.core.dao.governance.proposal.ProposalValidator; import bisq.core.dao.governance.proposal.ProposalValidator;
@ -30,8 +31,11 @@ import lombok.extern.slf4j.Slf4j;
import static org.apache.commons.lang3.Validate.notEmpty; import static org.apache.commons.lang3.Validate.notEmpty;
/**
* Changes here can potentially break consensus!
*/
@Slf4j @Slf4j
public class RemoveAssetValidator extends ProposalValidator { public class RemoveAssetValidator extends ProposalValidator implements ConsensusCritical {
@Inject @Inject
public RemoveAssetValidator(DaoStateService daoStateService, PeriodService periodService) { public RemoveAssetValidator(DaoStateService daoStateService, PeriodService periodService) {

View file

@ -17,6 +17,7 @@
package bisq.core.dao.governance.proposal.role; package bisq.core.dao.governance.proposal.role;
import bisq.core.dao.governance.ConsensusCritical;
import bisq.core.dao.governance.period.PeriodService; import bisq.core.dao.governance.period.PeriodService;
import bisq.core.dao.governance.proposal.ProposalValidationException; import bisq.core.dao.governance.proposal.ProposalValidationException;
import bisq.core.dao.governance.proposal.ProposalValidator; import bisq.core.dao.governance.proposal.ProposalValidator;
@ -30,8 +31,11 @@ import lombok.extern.slf4j.Slf4j;
import static org.apache.commons.lang3.Validate.notNull; import static org.apache.commons.lang3.Validate.notNull;
/**
* Changes here can potentially break consensus!
*/
@Slf4j @Slf4j
public class RoleValidator extends ProposalValidator { public class RoleValidator extends ProposalValidator implements ConsensusCritical {
@Inject @Inject
public RoleValidator(DaoStateService daoStateService, PeriodService periodService) { public RoleValidator(DaoStateService daoStateService, PeriodService periodService) {