From fbe3edc45abf21f4b9da800a87b6192a60699bf4 Mon Sep 17 00:00:00 2001 From: fanghr Date: Fri, 20 May 2022 19:58:29 +0800 Subject: [PATCH] store proposal timing conf in the governor datum --- agora-sample/Sample/Governor.hs | 10 +++++++--- agora-sample/Sample/Proposal.hs | 14 ++++++++------ agora-sample/Sample/Shared.hs | 6 +++--- agora-test/Spec/Governor.hs | 6 +++--- agora-test/Spec/Proposal.hs | 4 ++-- agora/Agora/Governor.hs | 5 +++++ agora/Agora/Governor/Scripts.hs | 17 ++++------------- 7 files changed, 32 insertions(+), 30 deletions(-) diff --git a/agora-sample/Sample/Governor.hs b/agora-sample/Sample/Governor.hs index 8d0cab5..29fcd2d 100644 --- a/agora-sample/Sample/Governor.hs +++ b/agora-sample/Sample/Governor.hs @@ -67,13 +67,13 @@ import Agora.Stake ( import Sample.Shared ( authorityTokenSymbol, defaultProposalThresholds, + defaultProposalTimingConfig, govAssetClass, govSymbol, govValidatorAddress, gstUTXORef, minAda, proposalPolicySymbol, - proposalTimingConfig, proposalValidatorAddress, signer, signer2, @@ -114,6 +114,7 @@ mintGST = GovernorDatum { proposalThresholds = defaultProposalThresholds , nextProposalId = ProposalId 0 + , proposalTimings = defaultProposalTimingConfig } governorOutputDatum :: Datum governorOutputDatum = Datum $ toBuiltinData governorOutputDatum' @@ -207,6 +208,7 @@ createProposal = GovernorDatum { proposalThresholds = defaultProposalThresholds , nextProposalId = thisProposalId + , proposalTimings = defaultProposalTimingConfig } governorInputDatum :: Datum governorInputDatum = Datum $ toBuiltinData governorInputDatum' @@ -236,7 +238,7 @@ createProposal = , cosigners = [signer] , thresholds = defaultProposalThresholds , votes = emptyVotesFor effects - , timingConfig = proposalTimingConfig + , timingConfig = defaultProposalTimingConfig , startingTime = tmpProposalStartingTime } ) @@ -378,6 +380,7 @@ mintGATs = GovernorDatum { proposalThresholds = defaultProposalThresholds , nextProposalId = ProposalId 5 + , proposalTimings = defaultProposalTimingConfig } governorInputDatum :: Datum governorInputDatum = Datum $ toBuiltinData governorInputDatum' @@ -412,7 +415,7 @@ mintGATs = , cosigners = [signer, signer2] , thresholds = defaultProposalThresholds , votes = proposalVotes - , timingConfig = proposalTimingConfig + , timingConfig = defaultProposalTimingConfig , startingTime = tmpProposalStartingTime } proposalInputDatum :: Datum @@ -565,6 +568,7 @@ mutateState = GovernorDatum { proposalThresholds = defaultProposalThresholds , nextProposalId = ProposalId 5 + , proposalTimings = defaultProposalTimingConfig } governorInputDatum :: Datum governorInputDatum = Datum $ toBuiltinData governorInputDatum' diff --git a/agora-sample/Sample/Proposal.hs b/agora-sample/Sample/Proposal.hs index de52379..2338939 100644 --- a/agora-sample/Sample/Proposal.hs +++ b/agora-sample/Sample/Proposal.hs @@ -39,7 +39,7 @@ import Plutus.V1.Ledger.Value qualified as Value -------------------------------------------------------------------------------- import Agora.Governor ( - GovernorDatum (GovernorDatum, nextProposalId, proposalThresholds), + GovernorDatum (..), ) import Agora.Proposal ( Proposal (..), @@ -79,7 +79,7 @@ proposalCreation = , cosigners = [signer] , thresholds = defaultProposalThresholds , votes = emptyVotesFor effects - , timingConfig = proposalTimingConfig + , timingConfig = defaultProposalTimingConfig , startingTime = tmpProposalStartingTime } ) @@ -91,6 +91,7 @@ proposalCreation = GovernorDatum { proposalThresholds = defaultProposalThresholds , nextProposalId = ProposalId 0 + , proposalTimings = defaultProposalTimingConfig } ) govAfter :: Datum @@ -100,6 +101,7 @@ proposalCreation = GovernorDatum { proposalThresholds = defaultProposalThresholds , nextProposalId = ProposalId 1 + , proposalTimings = defaultProposalTimingConfig } ) in ScriptContext @@ -174,7 +176,7 @@ cosignProposal newSigners = , cosigners = [signer] , thresholds = defaultProposalThresholds , votes = emptyVotesFor effects - , timingConfig = proposalTimingConfig + , timingConfig = defaultProposalTimingConfig , startingTime = tmpProposalStartingTime } stakeDatum :: StakeDatum @@ -185,7 +187,7 @@ cosignProposal newSigners = validTimeRange = closedBoundedInterval 10 - (proposalTimingConfig.draftTime - 10) + (defaultProposalTimingConfig.draftTime - 10) in TxInfo { txInfoInputs = [ TxInInfo @@ -295,7 +297,7 @@ voteOnProposal params = , cosigners = [stakeOwner] , thresholds = defaultProposalThresholds , votes = ProposalVotes initialVotes - , timingConfig = proposalTimingConfig + , timingConfig = defaultProposalTimingConfig , startingTime = tmpProposalStartingTime } proposalInputDatum :: Datum @@ -384,7 +386,7 @@ voteOnProposal params = --- validTimeRange = - closedBoundedInterval (proposalTimingConfig.draftTime + 1) (proposalTimingConfig.votingTime - 1) + closedBoundedInterval (defaultProposalTimingConfig.draftTime + 1) (defaultProposalTimingConfig.votingTime - 1) in TxInfo { txInfoInputs = [ TxInInfo proposalRef proposalInput diff --git a/agora-sample/Sample/Shared.hs b/agora-sample/Sample/Shared.hs index adaed30..c100378 100644 --- a/agora-sample/Sample/Shared.hs +++ b/agora-sample/Sample/Shared.hs @@ -36,7 +36,7 @@ module Sample.Shared ( proposalPolicySymbol, proposalValidatorHash, proposalValidatorAddress, - proposalTimingConfig, + defaultProposalTimingConfig, tmpProposalStartingTime, -- ** Authority @@ -190,8 +190,8 @@ authorityToken = authorityTokenFromGovernor governor authorityTokenSymbol :: CurrencySymbol authorityTokenSymbol = authorityTokenSymbolFromGovernor governor -proposalTimingConfig :: ProposalTimingConfig -proposalTimingConfig = +defaultProposalTimingConfig :: ProposalTimingConfig +defaultProposalTimingConfig = ProposalTimingConfig { draftTime = 50 , votingTime = 1000 diff --git a/agora-test/Spec/Governor.hs b/agora-test/Spec/Governor.hs index 89c43f8..0d7d827 100644 --- a/agora-test/Spec/Governor.hs +++ b/agora-test/Spec/Governor.hs @@ -38,19 +38,19 @@ tests = [ validatorSucceedsWith "proposal creation" (governorValidator Shared.governor) - (GovernorDatum Shared.defaultProposalThresholds (ProposalId 0)) + (GovernorDatum Shared.defaultProposalThresholds (ProposalId 0) Shared.defaultProposalTimingConfig) CreateProposal createProposal , validatorSucceedsWith "GATs minting" (governorValidator Shared.governor) - (GovernorDatum Shared.defaultProposalThresholds (ProposalId 5)) + (GovernorDatum Shared.defaultProposalThresholds (ProposalId 5) Shared.defaultProposalTimingConfig) MintGATs mintGATs , validatorSucceedsWith "mutate governor state" (governorValidator Shared.governor) - (GovernorDatum Shared.defaultProposalThresholds (ProposalId 5)) + (GovernorDatum Shared.defaultProposalThresholds (ProposalId 5) Shared.defaultProposalTimingConfig) MutateGovernor mutateState ] diff --git a/agora-test/Spec/Proposal.hs b/agora-test/Spec/Proposal.hs index a78d693..5eab61d 100644 --- a/agora-test/Spec/Proposal.hs +++ b/agora-test/Spec/Proposal.hs @@ -82,7 +82,7 @@ tests = [ (ResultTag 0, AssocMap.empty) , (ResultTag 1, AssocMap.empty) ] - , timingConfig = Shared.proposalTimingConfig + , timingConfig = Shared.defaultProposalTimingConfig , startingTime = Shared.tmpProposalStartingTime } ) @@ -117,7 +117,7 @@ tests = , (ResultTag 1, 4242) ] ) - , timingConfig = Shared.proposalTimingConfig + , timingConfig = Shared.defaultProposalTimingConfig , startingTime = Shared.tmpProposalStartingTime } ) diff --git a/agora/Agora/Governor.hs b/agora/Agora/Governor.hs index 4f64a76..606fde6 100644 --- a/agora/Agora/Governor.hs +++ b/agora/Agora/Governor.hs @@ -37,6 +37,7 @@ import Agora.Proposal ( ProposalId (ProposalId), ProposalThresholds, ) +import Agora.Proposal.Time (PProposalTimingConfig, ProposalTimingConfig) import Agora.SafeMoney (GTTag) import Agora.Utils (tclet) @@ -66,6 +67,9 @@ data GovernorDatum = GovernorDatum -- ^ Gets copied over upon creation of a 'Agora.Proposal.ProposalDatum'. , nextProposalId :: ProposalId -- ^ What tag the next proposal will get upon creating. + , proposalTimings :: ProposalTimingConfig + -- ^ The timing configuration for proposals. + -- Will get copied over upon the creation of proposals. } deriving stock (Show, GHC.Generic) @@ -118,6 +122,7 @@ newtype PGovernorDatum (s :: S) = PGovernorDatum ( PDataRecord '[ "proposalThresholds" ':= PProposalThresholds , "nextProposalId" ':= PProposalId + , "proposalTimings" ':= PProposalTimingConfig ] ) } diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index 0b41352..a9bfc21 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -126,7 +126,7 @@ import Plutarch.TryFrom (ptryFrom) -------------------------------------------------------------------------------- -import Agora.Proposal.Time (ProposalStartingTime (..), ProposalTimingConfig (..)) +import Agora.Proposal.Time (ProposalStartingTime (..)) import Plutus.V1.Ledger.Api ( CurrencySymbol (..), MintingPolicy, @@ -300,7 +300,7 @@ governorValidator gov = let ownAddress = pfromData $ ownInputF.address (pfromData -> (oldGovernorDatum :: Term _ PGovernorDatum), _) <- tcont $ ptryFrom datum' - oldGovernorDatumF <- tcont $ pletFields @'["proposalThresholds", "nextProposalId"] oldGovernorDatum + oldGovernorDatumF <- tcont $ pletFields @'["proposalThresholds", "nextProposalId", "proposalTimings"] oldGovernorDatum -- Check that GST will be returned to the governor. let ownInputGSTAmount = psymbolValueOf # pgstSymbol # ownInputF.value @@ -337,6 +337,7 @@ governorValidator gov = PGovernorDatum ( #proposalThresholds .= oldGovernorDatumF.proposalThresholds .& #nextProposalId .= pdata expectedNextProposalId + .& #proposalTimings .= oldGovernorDatumF.proposalTimings ) tcassert "Unexpected governor state datum" $ newGovernorDatum #== expectedNewDatum @@ -578,7 +579,7 @@ governorValidator gov = .& #thresholds .= proposalInputDatumF.thresholds .& #votes .= proposalInputDatumF.votes -- FIXME: copy from the governor datum - .& #timingConfig .= pdata (pconstant tmpTimingConfig) + .& #timingConfig .= oldGovernorDatumF.proposalTimings -- FIXME: calculate from 'txInfoValidRange' .& #startingTime .= pdata (pconstant tmpProposalStartingTime) ) @@ -732,16 +733,6 @@ governorValidator gov = let sym = governorSTSymbolFromGovernor gov in phoistAcyclic $ pconstant sym - -- TODO: remove this. This is temperary. - tmpTimingConfig :: ProposalTimingConfig - tmpTimingConfig = - ProposalTimingConfig - { draftTime = 50 - , votingTime = 1000 - , lockingTime = 2000 - , executingTime = 3000 - } - -- TODO: remove this. tmpProposalStartingTime :: ProposalStartingTime tmpProposalStartingTime = ProposalStartingTime 0