modify GovernorRedeemer and Governor

* add `MutateDatum` redeemer
* add `datumNFT` to `Governor` so that we can identify the datum
* Lift `GovernorDatum` and `GovernorRedeemer`
This commit is contained in:
fanghr 2022-04-15 12:43:59 +08:00
parent a8d3ad0abc
commit 3b94062dbb
No known key found for this signature in database
GPG key ID: 35CD9A71CD5D5870

View file

@ -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
}
--------------------------------------------------------------------------------