From afe7d8d399eb7b60fed918dfa7d1a9a7a0a5c949 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Wed, 2 Nov 2022 00:35:48 +0800 Subject: [PATCH] test that invalid proposals cannot be created --- agora-specs/Sample/Proposal/Create.hs | 23 ++++++++++++++++++----- agora-specs/Spec/Proposal.hs | 6 ++++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/agora-specs/Sample/Proposal/Create.hs b/agora-specs/Sample/Proposal/Create.hs index d47f00f..f61fd2b 100644 --- a/agora-specs/Sample/Proposal/Create.hs +++ b/agora-specs/Sample/Proposal/Create.hs @@ -18,12 +18,13 @@ module Sample.Proposal.Create ( timeRangeNotClosedParameters, invalidProposalStatusParameters, fakeSSTParameters, + wrongGovernorRedeemer, ) where import Agora.Governor ( Governor (..), GovernorDatum (..), - GovernorRedeemer (CreateProposal), + GovernorRedeemer (CreateProposal, MutateGovernor), ) import Agora.Proposal ( ProposalDatum (..), @@ -122,6 +123,8 @@ data Parameters = Parameters -- ^ The status of the newly created proposal. , fakeSST :: Bool -- ^ Whether to use SST that doesn't belong to the stake validator. + , wrongGovernorRedeemer :: Bool + -- ^ Use 'MutateGovernor' as the governor redeemer } -------------------------------------------------------------------------------- @@ -355,7 +358,7 @@ createProposal ps = builder [ script governorValidatorHash , withValue governorValue , withDatum governorInputDatum - , withRedeemer governorRedeemer + , withRedeemer $ mkGovernorRedeemer ps , withRef governorRef ] , output $ @@ -416,8 +419,11 @@ stakeRedeemer :: StakeRedeemer stakeRedeemer = PermitVote -- | Spend the governor with the 'CreateProposal' redeemer. -governorRedeemer :: GovernorRedeemer -governorRedeemer = CreateProposal +mkGovernorRedeemer :: Parameters -> GovernorRedeemer +mkGovernorRedeemer ps = + if ps.wrongGovernorRedeemer + then MutateGovernor + else CreateProposal -- | Mint the PST with an arbitrary redeemer. Doesn't really matter. proposalPolicyRedeemer :: () @@ -437,6 +443,7 @@ totallyValidParameters = , timeRangeClosed = True , proposalStatus = Draft , fakeSST = False + , wrongGovernorRedeemer = False } invalidOutputGovernorDatumParameters :: Parameters @@ -495,6 +502,12 @@ fakeSSTParameters = { fakeSST = True } +wrongGovernorRedeemer :: Parameters +wrongGovernorRedeemer = + totallyValidParameters + { wrongGovernorRedeemer = True + } + -------------------------------------------------------------------------------- {- | Create a test tree that runs the proposal minting policy, the governor @@ -527,7 +540,7 @@ mkTestTree "governor" governorValidator governorInputDatum - governorRedeemer + (mkGovernorRedeemer ps) (spend governorRef) stakeTest = diff --git a/agora-specs/Spec/Proposal.hs b/agora-specs/Spec/Proposal.hs index 4a8ddb8..4bc3fa8 100644 --- a/agora-specs/Spec/Proposal.hs +++ b/agora-specs/Spec/Proposal.hs @@ -91,6 +91,12 @@ specs = True False False + , Create.mkTestTree + "wrong governor redeemer" + Create.wrongGovernorRedeemer + False + False + True ] ] , group