From 3b94062dbb08e566b45f31dcde29dbe35131bc7f Mon Sep 17 00:00:00 2001 From: fanghr Date: Fri, 15 Apr 2022 12:43:59 +0800 Subject: [PATCH] modify `GovernorRedeemer` and `Governor` * add `MutateDatum` redeemer * add `datumNFT` to `Governor` so that we can identify the datum * Lift `GovernorDatum` and `GovernorRedeemer` --- agora/Agora/Governor.hs | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/agora/Agora/Governor.hs b/agora/Agora/Governor.hs index 24f52ad..6adf126 100644 --- a/agora/Agora/Governor.hs +++ b/agora/Agora/Governor.hs @@ -20,17 +20,35 @@ module Agora.Governor ( governorValidator, ) where +-------------------------------------------------------------------------------- + +import GHC.Generics qualified as GHC + +-------------------------------------------------------------------------------- + import Agora.Proposal (ProposalId, ProposalThresholds) + +-------------------------------------------------------------------------------- + +import Plutarch (popaque) import Plutarch.Api.V1 (PMintingPolicy, PValidator) import PlutusTx qualified +-------------------------------------------------------------------------------- + +import Plutus.V1.Ledger.Value (AssetClass) +import PlutusTx qualified + +-------------------------------------------------------------------------------- + -- | Datum for the Governor script. data GovernorDatum = GovernorDatum { proposalThresholds :: ProposalThresholds -- ^ Gets copied over upon creation of a 'Agora.Proposal.ProposalDatum'. , nextProposalId :: ProposalId -- ^ What tag the next proposal will get upon creating. - } + } + deriving stock (Show, GHC.Generic) PlutusTx.makeIsDataIndexed ''GovernorDatum [('GovernorDatum, 0)] @@ -46,12 +64,23 @@ data GovernorRedeemer | -- | Checks that a SINGLE proposal finished correctly, -- and allows minting GATs for each effect script. MintGATs + -- | Allow effects to mutate the datum + | MutateDatum + deriving stock (Show, GHC.Generic) -PlutusTx.makeIsDataIndexed ''GovernorRedeemer [('CreateProposal, 0), ('MintGATs, 1)] +PlutusTx.makeIsDataIndexed + ''GovernorRedeemer + [('CreateProposal,0) + ,('MintGATs, 1) + ,('MutateDatum, 2) + ] -- | Parameters for creating Governor scripts. data Governor - = Governor + = Governor { + -- | NFT that identifies the governor datum + datumNFT :: AssetClass + } --------------------------------------------------------------------------------