yeet containsSingleCurrencySymbol; clean things up

This commit is contained in:
fanghr 2022-04-21 23:15:16 +08:00
parent 9eed91ff61
commit d7b171ff90
No known key found for this signature in database
GPG key ID: 35CD9A71CD5D5870
2 changed files with 19 additions and 21 deletions

View file

@ -42,7 +42,7 @@ import Agora.AuthorityToken (
import Agora.Proposal (
PProposalDatum,
PProposalId,
PProposalStatus (PExecutable, PFinished, PDraft),
PProposalStatus (PDraft, PExecutable, PFinished),
PProposalThresholds,
PProposalVotes (PProposalVotes),
PResultTag (PResultTag),
@ -159,7 +159,7 @@ PlutusTx.makeIsDataIndexed
, ('MutateMutateGovernor, 2)
]
{- | Parameters for creating Governor scripts.
{- | Parameters for creating Governor scripts.
Governance State Token, aka GST, is an NFT which idetifies the governance state utxo.
-}
@ -253,7 +253,7 @@ governorPolicy params =
- Exactly one proposal(the input proposal) is being processed.
- The input proposal must be in executable state and have required amount of votes.
- An appropriate effect group is selected to be executed.
- A valid GAT is minted and sent to every effect,
- A valid GAT is minted and sent to every effect,
- Exactly one utxo should be sent back to the proposal validator. This utxo must contain the proposal state token, and also has a valid datum of type 'ProposalDatum'(the output proposal).
- Said output proposal's status should be `Finished`. Other than that, nothing should be changed compare to the input proposal.
@ -347,9 +347,9 @@ governorValidator params =
let isProposalDraft = pmatch (pfromData proposalDatum.status) $ \case
PDraft _ -> pconstant True
_ -> pconstant False
_ -> pconstant False
passert "Proposal state should be draft" $ isProposalDraft
passert "Proposal state should be draft" isProposalDraft
popaque $ pconstant ()
PMintGATs _ -> P.do
@ -360,7 +360,8 @@ governorValidator params =
inputsWithProposalStateToken <-
plet $
pfilter
# ( plam $ \(((pfield @"value" #) . (pfield @"resolved" #)) -> value) ->
# plam
( \((pfield @"value" #) . (pfield @"resolved" #) -> value) ->
psymbolValueOf # pproposalSym # value #== 1
)
#$ pfromData txInfo.inputs
@ -368,7 +369,8 @@ governorValidator params =
outputsWithProposalStateToken <-
plet $
pfilter
# ( plam $ \((pfield @"value" #) -> value) ->
# plam
( \((pfield @"value" #) -> value) ->
psymbolValueOf # pproposalSym # value #== 1
)
#$ pfromData txInfo.outputs
@ -410,13 +412,13 @@ governorValidator params =
PExecutable _ -> pconstant True
_ -> pconstant False
passert "Proposal must be in executable state in order to execute effects" $ isProposalExecutable
passert "Proposal must be in executable state in order to execute effects" isProposalExecutable
-- TODO: not sure if I did the right thing, can't use haskell level constructor here
let fields =
pdcons @"id" # inputProposalDatum.id
#$ pdcons @"effects" # inputProposalDatum.effects
#$ pdcons @"status" # (pdata $ pcon $ PFinished pdnil)
#$ pdcons @"status" # pdata (pcon $ PFinished pdnil)
#$ pdcons @"cosigners" # inputProposalDatum.cosigners
#$ pdcons @"thresholds" # inputProposalDatum.thresholds
#$ pdcons @"votes" # inputProposalDatum.votes # pdnil
@ -424,7 +426,7 @@ governorValidator params =
expectedOutputDatum = pforgetData $ pdata fields
passert "Unexpected output proposal datum" $
(pforgetData $ pdata outputProposalDatum') #== expectedOutputDatum
pforgetData (pdata outputProposalDatum') #== expectedOutputDatum
-- TODO: anything else to check here?
@ -452,7 +454,8 @@ governorValidator params =
outputsWithGAT <-
plet $
pfilter
# ( plam $ \((pfield @"value" #) -> value) ->
# plam
( \((pfield @"value" #) -> value) ->
0 #< psymbolValueOf # pgatSym # value
)
#$ pfromData txInfo.outputs
@ -462,7 +465,8 @@ governorValidator params =
popaque $
pfoldr
# ( plam $ \(pfromData -> output') _ -> P.do
# plam
( \(pfromData -> output') _ -> P.do
output <- pletFields @'["address", "datumHash"] $ output'
let scriptHash =
@ -478,9 +482,9 @@ governorValidator params =
passert "GAT must be tagged by the effect hash" $ authorityTokensValidIn # pgatSym # output'
passert "Unexpected datum" $ datumHash #== expectedDatumHash
(pconstant ())
pconstant ()
)
# (pconstant ())
# pconstant ()
# outputsWithGAT
PMutateGovernor _ -> P.do
popaque $ singleAuthorityTokenBurned pgatSym ctx.txInfo txInfo.mint

View file

@ -47,7 +47,6 @@ module Agora.Utils (
hasOnlyOneTokenOfAssetClass',
hasOnlyOneTokenOfCurrencySymbol,
mustFindDatum',
containsSingleCurrencySymbol,
mustBePJust,
mustBePDJust,
) where
@ -554,11 +553,6 @@ mustFindDatum' = phoistAcyclic $
PJust dt <- pmatch $ pfindDatum # dh # info
pfromData $ punsafeCoerce dt
containsSingleCurrencySymbol :: Term s (PValue :--> PBool)
containsSingleCurrencySymbol = phoistAcyclic $
plam $ \v -> P.do
(plength #$ pto $ pto $ pto v) #== 1
mustBePJust :: forall a s. Term s (PString :--> PMaybe a :--> a)
mustBePJust = phoistAcyclic $
plam $ \emsg mv' -> pmatch mv' $ \case
@ -569,4 +563,4 @@ mustBePDJust :: forall a s. (PIsData a) => Term s (PString :--> PMaybeData a :--
mustBePDJust = phoistAcyclic $
plam $ \emsg mv' -> pmatch mv' $ \case
PDJust ((pfield @"_0" #) -> v) -> v
_ -> ptraceError emsg
_ -> ptraceError emsg