Merge pull request #128 from Liqwid-Labs/connor/enum-opt
Optimize scripts using `Plutarch.Extra.IsData`
This commit is contained in:
commit
bbbb6ecc6b
10 changed files with 1761 additions and 566 deletions
|
|
@ -45,6 +45,11 @@ import Plutarch.DataRepr (
|
||||||
PIsDataReprInstances (PIsDataReprInstances),
|
PIsDataReprInstances (PIsDataReprInstances),
|
||||||
)
|
)
|
||||||
import Plutarch.Extra.Comonad (pextract)
|
import Plutarch.Extra.Comonad (pextract)
|
||||||
|
import Plutarch.Extra.IsData (
|
||||||
|
DerivePConstantViaEnum (..),
|
||||||
|
EnumIsData (..),
|
||||||
|
)
|
||||||
|
import Plutarch.Extra.Other (DerivePNewtype' (..))
|
||||||
import Plutarch.Extra.TermCont (pletC, pletFieldsC, pmatchC)
|
import Plutarch.Extra.TermCont (pletC, pletFieldsC, pmatchC)
|
||||||
import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..))
|
import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..))
|
||||||
import Plutarch.SafeMoney (PDiscrete (..))
|
import Plutarch.SafeMoney (PDiscrete (..))
|
||||||
|
|
@ -92,15 +97,27 @@ data GovernorRedeemer
|
||||||
MintGATs
|
MintGATs
|
||||||
| -- | Allows effects to mutate the parameters.
|
| -- | Allows effects to mutate the parameters.
|
||||||
MutateGovernor
|
MutateGovernor
|
||||||
deriving stock (Show, GHC.Generic)
|
deriving stock
|
||||||
|
( -- | @since 0.1.0
|
||||||
-- | @since 0.1.0
|
Show
|
||||||
PlutusTx.makeIsDataIndexed
|
, -- | @since 0.1.0
|
||||||
''GovernorRedeemer
|
GHC.Generic
|
||||||
[ ('CreateProposal, 0)
|
, -- | @since 0.2.0
|
||||||
, ('MintGATs, 1)
|
Enum
|
||||||
, ('MutateGovernor, 2)
|
, -- | @since 0.2.0
|
||||||
]
|
Bounded
|
||||||
|
)
|
||||||
|
deriving anyclass
|
||||||
|
( -- | @since 0.2.0
|
||||||
|
Generic
|
||||||
|
)
|
||||||
|
deriving
|
||||||
|
( -- | @since 0.1.0
|
||||||
|
PlutusTx.ToData
|
||||||
|
, -- | @since 0.1.0
|
||||||
|
PlutusTx.FromData
|
||||||
|
)
|
||||||
|
via (EnumIsData GovernorRedeemer)
|
||||||
|
|
||||||
{- | Parameters for creating Governor scripts.
|
{- | Parameters for creating Governor scripts.
|
||||||
|
|
||||||
|
|
@ -172,10 +189,8 @@ deriving via PAsData (PIsDataReprInstances PGovernorDatum) instance PTryFrom PDa
|
||||||
|
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
-}
|
-}
|
||||||
data PGovernorRedeemer (s :: S)
|
newtype PGovernorRedeemer (s :: S)
|
||||||
= PCreateProposal (Term s (PDataRecord '[]))
|
= PGovernorRedeemer (Term s PInteger)
|
||||||
| PMintGATs (Term s (PDataRecord '[]))
|
|
||||||
| PMutateGovernor (Term s (PDataRecord '[]))
|
|
||||||
deriving stock
|
deriving stock
|
||||||
( -- | @since 0.1.0
|
( -- | @since 0.1.0
|
||||||
GHC.Generic
|
GHC.Generic
|
||||||
|
|
@ -184,26 +199,19 @@ data PGovernorRedeemer (s :: S)
|
||||||
( -- | @since 0.1.0
|
( -- | @since 0.1.0
|
||||||
Generic
|
Generic
|
||||||
)
|
)
|
||||||
deriving anyclass
|
|
||||||
( -- | @since 0.1.0
|
|
||||||
PIsDataRepr
|
|
||||||
)
|
|
||||||
deriving
|
deriving
|
||||||
( -- | @since 0.1.0
|
( -- | @since 0.1.0
|
||||||
PlutusType
|
PlutusType
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
PIsData
|
PIsData
|
||||||
)
|
)
|
||||||
via PIsDataReprInstances PGovernorRedeemer
|
via (DerivePNewtype' PGovernorRedeemer)
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
instance PUnsafeLiftDecl PGovernorRedeemer where type PLifted PGovernorRedeemer = GovernorRedeemer
|
instance PUnsafeLiftDecl PGovernorRedeemer where type PLifted PGovernorRedeemer = GovernorRedeemer
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
deriving via (DerivePConstantViaData GovernorRedeemer PGovernorRedeemer) instance (PConstantDecl GovernorRedeemer)
|
deriving via (DerivePConstantViaEnum GovernorRedeemer PGovernorRedeemer) instance (PConstantDecl GovernorRedeemer)
|
||||||
|
|
||||||
-- | @since 0.1.0
|
|
||||||
deriving via PAsData (PIsDataReprInstances PGovernorRedeemer) instance PTryFrom PData (PAsData PGovernorRedeemer)
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,18 +39,17 @@ import Agora.AuthorityToken (
|
||||||
)
|
)
|
||||||
import Agora.Governor (
|
import Agora.Governor (
|
||||||
Governor (gstOutRef, gtClassRef, maximumCosigners),
|
Governor (gstOutRef, gtClassRef, maximumCosigners),
|
||||||
|
GovernorRedeemer (..),
|
||||||
PGovernorDatum (PGovernorDatum),
|
PGovernorDatum (PGovernorDatum),
|
||||||
PGovernorRedeemer (PCreateProposal, PMintGATs, PMutateGovernor),
|
|
||||||
governorDatumValid,
|
governorDatumValid,
|
||||||
pgetNextProposalId,
|
pgetNextProposalId,
|
||||||
)
|
)
|
||||||
import Agora.Proposal (
|
import Agora.Proposal (
|
||||||
PProposalDatum (..),
|
PProposalDatum (..),
|
||||||
PProposalId (..),
|
PProposalId (..),
|
||||||
PProposalStatus (PFinished),
|
|
||||||
PResultTag,
|
PResultTag,
|
||||||
Proposal (..),
|
Proposal (..),
|
||||||
ProposalStatus (Draft, Locked),
|
ProposalStatus (Draft, Finished, Locked),
|
||||||
pemptyVotesFor,
|
pemptyVotesFor,
|
||||||
pneutralOption,
|
pneutralOption,
|
||||||
proposalDatumValid,
|
proposalDatumValid,
|
||||||
|
|
@ -105,20 +104,20 @@ import Plutarch.Api.V1.AssetClass (
|
||||||
passetClass,
|
passetClass,
|
||||||
passetClassValueOf,
|
passetClassValueOf,
|
||||||
)
|
)
|
||||||
|
import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, pisUTXOSpent, ptryFindDatum, ptxSignedBy, pvalueSpent)
|
||||||
|
import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf)
|
||||||
|
import Plutarch.Extra.IsData (pmatchEnumFromData)
|
||||||
import Plutarch.Extra.Map (
|
import Plutarch.Extra.Map (
|
||||||
pkeys,
|
pkeys,
|
||||||
plookup,
|
plookup,
|
||||||
plookup',
|
plookup',
|
||||||
)
|
)
|
||||||
|
import Plutarch.Extra.Maybe (pisDJust)
|
||||||
|
import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC)
|
||||||
import Plutarch.SafeMoney (PDiscrete (..), pvalueDiscrete')
|
import Plutarch.SafeMoney (PDiscrete (..), pvalueDiscrete')
|
||||||
import Plutarch.TryFrom ()
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, pisUTXOSpent, ptryFindDatum, ptxSignedBy, pvalueSpent)
|
|
||||||
import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf)
|
|
||||||
import Plutarch.Extra.Maybe (pisDJust)
|
|
||||||
import Plutarch.Extra.TermCont
|
|
||||||
import PlutusLedgerApi.V1 (
|
import PlutusLedgerApi.V1 (
|
||||||
CurrencySymbol (..),
|
CurrencySymbol (..),
|
||||||
MintingPolicy,
|
MintingPolicy,
|
||||||
|
|
@ -280,7 +279,6 @@ governorPolicy gov =
|
||||||
governorValidator :: Governor -> ClosedTerm PValidator
|
governorValidator :: Governor -> ClosedTerm PValidator
|
||||||
governorValidator gov =
|
governorValidator gov =
|
||||||
plam $ \datum' redeemer' ctx' -> unTermCont $ do
|
plam $ \datum' redeemer' ctx' -> unTermCont $ do
|
||||||
(pfromData -> redeemer, _) <- ptryFromC redeemer'
|
|
||||||
ctxF <- pletFieldsC @'["txInfo", "purpose"] ctx'
|
ctxF <- pletFieldsC @'["txInfo", "purpose"] ctx'
|
||||||
|
|
||||||
txInfo' <- pletC $ pfromData $ ctxF.txInfo
|
txInfo' <- pletC $ pfromData $ ctxF.txInfo
|
||||||
|
|
@ -330,8 +328,8 @@ governorValidator gov =
|
||||||
pguardC "New datum is not valid" $ governorDatumValid # newGovernorDatum
|
pguardC "New datum is not valid" $ governorDatumValid # newGovernorDatum
|
||||||
|
|
||||||
pure $
|
pure $
|
||||||
pmatch redeemer $ \case
|
pmatchEnumFromData redeemer' $ \case
|
||||||
PCreateProposal _ -> unTermCont $ do
|
Just CreateProposal -> unTermCont $ do
|
||||||
-- Check that the transaction advances proposal id.
|
-- Check that the transaction advances proposal id.
|
||||||
|
|
||||||
let expectedNextProposalId = pgetNextProposalId # oldGovernorDatumF.nextProposalId
|
let expectedNextProposalId = pgetNextProposalId # oldGovernorDatumF.nextProposalId
|
||||||
|
|
@ -516,7 +514,7 @@ governorValidator gov =
|
||||||
|
|
||||||
--------------------------------------------------------------------------
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
PMintGATs _ -> unTermCont $ do
|
Just MintGATs -> unTermCont $ do
|
||||||
pguardC "Governor state should not be changed" $ newGovernorDatum #== oldGovernorDatum
|
pguardC "Governor state should not be changed" $ newGovernorDatum #== oldGovernorDatum
|
||||||
|
|
||||||
-- Filter out proposal inputs and ouputs using PST and the address of proposal validator.
|
-- Filter out proposal inputs and ouputs using PST and the address of proposal validator.
|
||||||
|
|
@ -583,7 +581,7 @@ governorValidator gov =
|
||||||
PProposalDatum
|
PProposalDatum
|
||||||
( #proposalId .= proposalInputDatumF.proposalId
|
( #proposalId .= proposalInputDatumF.proposalId
|
||||||
.& #effects .= proposalInputDatumF.effects
|
.& #effects .= proposalInputDatumF.effects
|
||||||
.& #status .= pdata (pcon $ PFinished pdnil)
|
.& #status .= pconstantData Finished
|
||||||
.& #cosigners .= proposalInputDatumF.cosigners
|
.& #cosigners .= proposalInputDatumF.cosigners
|
||||||
.& #thresholds .= proposalInputDatumF.thresholds
|
.& #thresholds .= proposalInputDatumF.thresholds
|
||||||
.& #votes .= proposalInputDatumF.votes
|
.& #votes .= proposalInputDatumF.votes
|
||||||
|
|
@ -667,9 +665,12 @@ governorValidator gov =
|
||||||
|
|
||||||
--------------------------------------------------------------------------
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
PMutateGovernor _ -> unTermCont $ do
|
Just MutateGovernor -> unTermCont $ do
|
||||||
-- Check that a GAT is burnt.
|
-- Check that a GAT is burnt.
|
||||||
pure $ popaque $ singleAuthorityTokenBurned patSymbol ctxF.txInfo txInfoF.mint
|
pure $ popaque $ singleAuthorityTokenBurned patSymbol ctxF.txInfo txInfoF.mint
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
Nothing -> ptraceError "Unknown redeemer"
|
||||||
where
|
where
|
||||||
-- Get th amount of governance tokens in a value.
|
-- Get th amount of governance tokens in a value.
|
||||||
pgtValueOf :: Term s (PValue _ _ :--> PDiscrete GTTag)
|
pgtValueOf :: Term s (PValue _ _ :--> PDiscrete GTTag)
|
||||||
|
|
|
||||||
|
|
@ -51,9 +51,16 @@ import Plutarch.Api.V1 (
|
||||||
PValidatorHash,
|
PValidatorHash,
|
||||||
)
|
)
|
||||||
import Plutarch.DataRepr (DerivePConstantViaData (..), PDataFields, PIsDataReprInstances (..))
|
import Plutarch.DataRepr (DerivePConstantViaData (..), PDataFields, PIsDataReprInstances (..))
|
||||||
|
import Plutarch.Extra.IsData (
|
||||||
|
DerivePConstantViaDataList (..),
|
||||||
|
DerivePConstantViaEnum (..),
|
||||||
|
EnumIsData (..),
|
||||||
|
ProductIsData (ProductIsData),
|
||||||
|
)
|
||||||
import Plutarch.Extra.List (pnotNull)
|
import Plutarch.Extra.List (pnotNull)
|
||||||
import Plutarch.Extra.Map qualified as PM
|
import Plutarch.Extra.Map qualified as PM
|
||||||
import Plutarch.Extra.Map.Unsorted qualified as PUM
|
import Plutarch.Extra.Map.Unsorted qualified as PUM
|
||||||
|
import Plutarch.Extra.Other (DerivePNewtype' (..))
|
||||||
import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC)
|
import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC)
|
||||||
import Plutarch.Lift (
|
import Plutarch.Lift (
|
||||||
DerivePConstantViaNewtype (..),
|
DerivePConstantViaNewtype (..),
|
||||||
|
|
@ -173,10 +180,24 @@ data ProposalStatus
|
||||||
Show
|
Show
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
GHC.Generic
|
GHC.Generic
|
||||||
|
, -- | @since 0.2.0
|
||||||
|
Enum
|
||||||
|
, -- | @since 0.2.0
|
||||||
|
Bounded
|
||||||
)
|
)
|
||||||
|
deriving anyclass
|
||||||
-- | @since 0.1.0
|
( -- | @since 0.2.0
|
||||||
PlutusTx.makeIsDataIndexed ''ProposalStatus [('Draft, 0), ('VotingReady, 1), ('Locked, 2), ('Finished, 3)]
|
Generic
|
||||||
|
)
|
||||||
|
deriving
|
||||||
|
( -- | @since 0.1.0
|
||||||
|
PlutusTx.FromData
|
||||||
|
, -- | @since 0.1.0
|
||||||
|
PlutusTx.ToData
|
||||||
|
, -- | @since 0.1.0
|
||||||
|
PlutusTx.UnsafeFromData
|
||||||
|
)
|
||||||
|
via (EnumIsData ProposalStatus)
|
||||||
|
|
||||||
{- | The threshold values for various state transitions to happen.
|
{- | The threshold values for various state transitions to happen.
|
||||||
This data is stored centrally (in the 'Agora.Governor.Governor') and copied over
|
This data is stored centrally (in the 'Agora.Governor.Governor') and copied over
|
||||||
|
|
@ -204,9 +225,16 @@ data ProposalThresholds = ProposalThresholds
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
GHC.Generic
|
GHC.Generic
|
||||||
)
|
)
|
||||||
|
deriving anyclass (Generic)
|
||||||
-- | @since 0.1.0
|
deriving
|
||||||
PlutusTx.makeIsDataIndexed ''ProposalThresholds [('ProposalThresholds, 0)]
|
( -- | @since 0.1.0
|
||||||
|
PlutusTx.ToData
|
||||||
|
, -- | @since 0.1.0
|
||||||
|
PlutusTx.FromData
|
||||||
|
, -- | @since 0.1.0
|
||||||
|
PlutusTx.UnsafeFromData
|
||||||
|
)
|
||||||
|
via (ProductIsData ProposalThresholds)
|
||||||
|
|
||||||
{- | Map which encodes the total tally for each result.
|
{- | Map which encodes the total tally for each result.
|
||||||
It's important that the "shape" is consistent with the shape of 'effects'.
|
It's important that the "shape" is consistent with the shape of 'effects'.
|
||||||
|
|
@ -229,8 +257,6 @@ newtype ProposalVotes = ProposalVotes
|
||||||
PlutusTx.ToData
|
PlutusTx.ToData
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
PlutusTx.FromData
|
PlutusTx.FromData
|
||||||
, -- | @since 0.1.0
|
|
||||||
PlutusTx.UnsafeFromData
|
|
||||||
)
|
)
|
||||||
deriving stock
|
deriving stock
|
||||||
( -- | @since 0.1.0
|
( -- | @since 0.1.0
|
||||||
|
|
@ -281,8 +307,14 @@ data ProposalDatum = ProposalDatum
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
GHC.Generic
|
GHC.Generic
|
||||||
)
|
)
|
||||||
|
deriving anyclass (Generic)
|
||||||
PlutusTx.makeIsDataIndexed ''ProposalDatum [('ProposalDatum, 0)]
|
deriving
|
||||||
|
( -- | @since 0.1.0
|
||||||
|
PlutusTx.ToData
|
||||||
|
, -- | @since 0.1.0
|
||||||
|
PlutusTx.FromData
|
||||||
|
)
|
||||||
|
via (ProductIsData ProposalDatum)
|
||||||
|
|
||||||
{- | Haskell-level redeemer for Proposal scripts.
|
{- | Haskell-level redeemer for Proposal scripts.
|
||||||
|
|
||||||
|
|
@ -433,13 +465,7 @@ deriving via
|
||||||
|
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
-}
|
-}
|
||||||
data PProposalStatus (s :: S)
|
newtype PProposalStatus (s :: S) = PProposalStatus (Term s PInteger)
|
||||||
= -- TODO: 'PProposalStatus' ought te be encoded as 'PInteger'.
|
|
||||||
-- e.g. like Tilde used 'pmatchEnum'.
|
|
||||||
PDraft (Term s (PDataRecord '[]))
|
|
||||||
| PVotingReady (Term s (PDataRecord '[]))
|
|
||||||
| PLocked (Term s (PDataRecord '[]))
|
|
||||||
| PFinished (Term s (PDataRecord '[]))
|
|
||||||
deriving stock
|
deriving stock
|
||||||
( -- | @since 0.1.0
|
( -- | @since 0.1.0
|
||||||
GHC.Generic
|
GHC.Generic
|
||||||
|
|
@ -448,10 +474,6 @@ data PProposalStatus (s :: S)
|
||||||
( -- | @since 0.1.0
|
( -- | @since 0.1.0
|
||||||
Generic
|
Generic
|
||||||
)
|
)
|
||||||
deriving anyclass
|
|
||||||
( -- | @since 0.1.0
|
|
||||||
PIsDataRepr
|
|
||||||
)
|
|
||||||
deriving
|
deriving
|
||||||
( -- | @since 0.1.0
|
( -- | @since 0.1.0
|
||||||
PlutusType
|
PlutusType
|
||||||
|
|
@ -460,16 +482,16 @@ data PProposalStatus (s :: S)
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
PEq
|
PEq
|
||||||
)
|
)
|
||||||
via PIsDataReprInstances PProposalStatus
|
via (DerivePNewtype' PProposalStatus)
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
instance PUnsafeLiftDecl PProposalStatus where type PLifted PProposalStatus = ProposalStatus
|
instance PUnsafeLiftDecl PProposalStatus where type PLifted PProposalStatus = ProposalStatus
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
deriving via PAsData (PIsDataReprInstances PProposalStatus) instance PTryFrom PData (PAsData PProposalStatus)
|
deriving via PAsData (DerivePNewtype' PProposalStatus) instance PTryFrom PData (PAsData PProposalStatus)
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
deriving via (DerivePConstantViaData ProposalStatus PProposalStatus) instance (PConstantDecl ProposalStatus)
|
deriving via (DerivePConstantViaEnum ProposalStatus PProposalStatus) instance (PConstantDecl ProposalStatus)
|
||||||
|
|
||||||
{- | Plutarch-level version of 'ProposalThresholds'.
|
{- | Plutarch-level version of 'ProposalThresholds'.
|
||||||
|
|
||||||
|
|
@ -506,11 +528,11 @@ newtype PProposalThresholds (s :: S) = PProposalThresholds
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
PDataFields
|
PDataFields
|
||||||
)
|
)
|
||||||
via (PIsDataReprInstances PProposalThresholds)
|
via (DerivePNewtype' PProposalThresholds)
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
deriving via
|
deriving via
|
||||||
PAsData (PIsDataReprInstances PProposalThresholds)
|
PAsData (DerivePNewtype' PProposalThresholds)
|
||||||
instance
|
instance
|
||||||
PTryFrom PData (PAsData PProposalThresholds)
|
PTryFrom PData (PAsData PProposalThresholds)
|
||||||
|
|
||||||
|
|
@ -519,7 +541,7 @@ instance PUnsafeLiftDecl PProposalThresholds where type PLifted PProposalThresho
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
deriving via
|
deriving via
|
||||||
(DerivePConstantViaData ProposalThresholds PProposalThresholds)
|
(DerivePConstantViaDataList ProposalThresholds PProposalThresholds)
|
||||||
instance
|
instance
|
||||||
(PConstantDecl ProposalThresholds)
|
(PConstantDecl ProposalThresholds)
|
||||||
|
|
||||||
|
|
@ -628,16 +650,16 @@ newtype PProposalDatum (s :: S) = PProposalDatum
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
PEq
|
PEq
|
||||||
)
|
)
|
||||||
via (PIsDataReprInstances PProposalDatum)
|
via (DerivePNewtype' PProposalDatum)
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
deriving via PAsData (PIsDataReprInstances PProposalDatum) instance PTryFrom PData (PAsData PProposalDatum)
|
deriving via PAsData (DerivePNewtype' PProposalDatum) instance PTryFrom PData (PAsData PProposalDatum)
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
instance PUnsafeLiftDecl PProposalDatum where type PLifted PProposalDatum = ProposalDatum
|
instance PUnsafeLiftDecl PProposalDatum where type PLifted PProposalDatum = ProposalDatum
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
deriving via (DerivePConstantViaData ProposalDatum PProposalDatum) instance (PConstantDecl ProposalDatum)
|
deriving via (DerivePConstantViaDataList ProposalDatum PProposalDatum) instance (PConstantDecl ProposalDatum)
|
||||||
|
|
||||||
{- | Plutarch-level version of 'ProposalRedeemer'.
|
{- | Plutarch-level version of 'ProposalRedeemer'.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ module Agora.Proposal.Scripts (
|
||||||
import Agora.Proposal (
|
import Agora.Proposal (
|
||||||
PProposalDatum (PProposalDatum),
|
PProposalDatum (PProposalDatum),
|
||||||
PProposalRedeemer (..),
|
PProposalRedeemer (..),
|
||||||
PProposalStatus (..),
|
|
||||||
PProposalVotes (PProposalVotes),
|
PProposalVotes (PProposalVotes),
|
||||||
Proposal (governorSTAssetClass, stakeSTAssetClass),
|
Proposal (governorSTAssetClass, stakeSTAssetClass),
|
||||||
ProposalStatus (..),
|
ProposalStatus (..),
|
||||||
|
|
@ -55,6 +54,7 @@ import Plutarch.Api.V1.ScriptContext (
|
||||||
)
|
)
|
||||||
import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf)
|
import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf)
|
||||||
import Plutarch.Extra.Comonad (pextract)
|
import Plutarch.Extra.Comonad (pextract)
|
||||||
|
import Plutarch.Extra.IsData (pmatchEnum)
|
||||||
import Plutarch.Extra.List (pisUniqBy)
|
import Plutarch.Extra.List (pisUniqBy)
|
||||||
import Plutarch.Extra.Map (plookup, pupdate)
|
import Plutarch.Extra.Map (plookup, pupdate)
|
||||||
import Plutarch.Extra.Maybe (pisJust)
|
import Plutarch.Extra.Maybe (pisJust)
|
||||||
|
|
@ -510,19 +510,21 @@ proposalValidator proposal =
|
||||||
inLockedPeriod <- pletC $ isLockingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime
|
inLockedPeriod <- pletC $ isLockingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime
|
||||||
inExecutionPeriod <- pletC $ isExecutionPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime
|
inExecutionPeriod <- pletC $ isExecutionPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime
|
||||||
|
|
||||||
|
proposalStatus <- pletC $ pto $ pfromData proposalF.status
|
||||||
|
|
||||||
-- Check the timings.
|
-- Check the timings.
|
||||||
let isFinished = proposalF.status #== pconstantData Finished
|
let isFinished = proposalF.status #== pconstantData Finished
|
||||||
|
|
||||||
notTooLate = pmatch (pfromData proposalF.status) $ \case
|
notTooLate = pmatchEnum proposalStatus $ \case
|
||||||
PDraft _ -> inDraftPeriod
|
Draft -> inDraftPeriod
|
||||||
-- Can only advance after the voting period is over.
|
-- Can only advance after the voting period is over.
|
||||||
PVotingReady _ -> inLockedPeriod
|
VotingReady -> inLockedPeriod
|
||||||
PLocked _ -> inExecutionPeriod
|
Locked -> inExecutionPeriod
|
||||||
_ -> pconstant False
|
_ -> pconstant False
|
||||||
|
|
||||||
notTooEarly = pmatch (pfromData proposalF.status) $ \case
|
notTooEarly = pmatchEnum (pto $ pfromData proposalF.status) $ \case
|
||||||
PVotingReady _ -> pnot # inVotingPeriod
|
VotingReady -> pnot # inVotingPeriod
|
||||||
PLocked _ -> pnot # inLockedPeriod
|
Locked -> pnot # inLockedPeriod
|
||||||
_ -> pconstant True
|
_ -> pconstant True
|
||||||
|
|
||||||
pguardC "Cannot advance ahead of time" notTooEarly
|
pguardC "Cannot advance ahead of time" notTooEarly
|
||||||
|
|
@ -534,8 +536,8 @@ proposalValidator proposal =
|
||||||
pif
|
pif
|
||||||
notTooLate
|
notTooLate
|
||||||
-- On time: advance to next status.
|
-- On time: advance to next status.
|
||||||
( pmatch (pfromData proposalF.status) $ \case
|
( pmatchEnum proposalStatus $ \case
|
||||||
PDraft _ -> unTermCont $ do
|
Draft -> unTermCont $ do
|
||||||
-- TODO: Perform other necessary checks.
|
-- TODO: Perform other necessary checks.
|
||||||
|
|
||||||
-- 'Draft' -> 'VotingReady'
|
-- 'Draft' -> 'VotingReady'
|
||||||
|
|
@ -543,7 +545,7 @@ proposalValidator proposal =
|
||||||
proposalOutStatus #== pconstantData VotingReady
|
proposalOutStatus #== pconstantData VotingReady
|
||||||
|
|
||||||
pure $ popaque (pconstant ())
|
pure $ popaque (pconstant ())
|
||||||
PVotingReady _ -> unTermCont $ do
|
VotingReady -> unTermCont $ do
|
||||||
-- 'VotingReady' -> 'Locked'
|
-- 'VotingReady' -> 'Locked'
|
||||||
pguardC "Proposal status set to Locked" $
|
pguardC "Proposal status set to Locked" $
|
||||||
proposalOutStatus #== pconstantData Locked
|
proposalOutStatus #== pconstantData Locked
|
||||||
|
|
@ -554,7 +556,7 @@ proposalValidator proposal =
|
||||||
$ pfromData thresholdsF.execute
|
$ pfromData thresholdsF.execute
|
||||||
|
|
||||||
pure $ popaque (pconstant ())
|
pure $ popaque (pconstant ())
|
||||||
PLocked _ -> unTermCont $ do
|
Locked -> unTermCont $ do
|
||||||
-- 'Locked' -> 'Finished'
|
-- 'Locked' -> 'Finished'
|
||||||
pguardC "Proposal status set to Finished" $
|
pguardC "Proposal status set to Finished" $
|
||||||
proposalOutStatus #== pconstantData Finished
|
proposalOutStatus #== pconstantData Finished
|
||||||
|
|
|
||||||
|
|
@ -40,10 +40,13 @@ import Plutarch.Api.V1 (
|
||||||
PUpperBound (PUpperBound),
|
PUpperBound (PUpperBound),
|
||||||
)
|
)
|
||||||
import Plutarch.DataRepr (
|
import Plutarch.DataRepr (
|
||||||
DerivePConstantViaData (..),
|
|
||||||
PDataFields,
|
PDataFields,
|
||||||
PIsDataReprInstances (..),
|
|
||||||
)
|
)
|
||||||
|
import Plutarch.Extra.IsData (
|
||||||
|
DerivePConstantViaDataList (..),
|
||||||
|
ProductIsData (ProductIsData),
|
||||||
|
)
|
||||||
|
import Plutarch.Extra.Other (DerivePNewtype' (..))
|
||||||
import Plutarch.Extra.TermCont (pguardC, pletFieldsC, pmatchC)
|
import Plutarch.Extra.TermCont (pguardC, pletFieldsC, pmatchC)
|
||||||
import Plutarch.Lift (
|
import Plutarch.Lift (
|
||||||
DerivePConstantViaNewtype (..),
|
DerivePConstantViaNewtype (..),
|
||||||
|
|
@ -91,9 +94,16 @@ data ProposalTimingConfig = ProposalTimingConfig
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
GHC.Generic
|
GHC.Generic
|
||||||
)
|
)
|
||||||
|
deriving anyclass (Generic)
|
||||||
-- | @since 0.1.0
|
deriving
|
||||||
PlutusTx.makeIsDataIndexed ''ProposalTimingConfig [('ProposalTimingConfig, 0)]
|
( -- | @since 0.1.0
|
||||||
|
PlutusTx.ToData
|
||||||
|
, -- | @since 0.1.0
|
||||||
|
PlutusTx.FromData
|
||||||
|
, -- | @since 0.1.0
|
||||||
|
PlutusTx.UnsafeFromData
|
||||||
|
)
|
||||||
|
via (ProductIsData ProposalTimingConfig)
|
||||||
|
|
||||||
-- | Represents the maximum width of a 'PlutusLedgerApi.V1.Time.POSIXTimeRange'.
|
-- | Represents the maximum width of a 'PlutusLedgerApi.V1.Time.POSIXTimeRange'.
|
||||||
newtype MaxTimeRangeWidth = MaxTimeRangeWidth {getMaxWidth :: POSIXTime}
|
newtype MaxTimeRangeWidth = MaxTimeRangeWidth {getMaxWidth :: POSIXTime}
|
||||||
|
|
@ -229,10 +239,10 @@ newtype PProposalTimingConfig (s :: S) = PProposalTimingConfig
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
PDataFields
|
PDataFields
|
||||||
)
|
)
|
||||||
via (PIsDataReprInstances PProposalTimingConfig)
|
via (DerivePNewtype' PProposalTimingConfig)
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
deriving via PAsData (PIsDataReprInstances PProposalTimingConfig) instance PTryFrom PData (PAsData PProposalTimingConfig)
|
deriving via PAsData (DerivePNewtype' PProposalTimingConfig) instance PTryFrom PData (PAsData PProposalTimingConfig)
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
instance PUnsafeLiftDecl PProposalTimingConfig where
|
instance PUnsafeLiftDecl PProposalTimingConfig where
|
||||||
|
|
@ -240,7 +250,7 @@ instance PUnsafeLiftDecl PProposalTimingConfig where
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
deriving via
|
deriving via
|
||||||
(DerivePConstantViaData ProposalTimingConfig PProposalTimingConfig)
|
(DerivePConstantViaDataList ProposalTimingConfig PProposalTimingConfig)
|
||||||
instance
|
instance
|
||||||
(PConstantDecl ProposalTimingConfig)
|
(PConstantDecl ProposalTimingConfig)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,12 @@ import Plutarch.DataRepr (
|
||||||
PDataFields,
|
PDataFields,
|
||||||
PIsDataReprInstances (PIsDataReprInstances),
|
PIsDataReprInstances (PIsDataReprInstances),
|
||||||
)
|
)
|
||||||
|
import Plutarch.Extra.IsData (
|
||||||
|
DerivePConstantViaDataList (..),
|
||||||
|
ProductIsData (ProductIsData),
|
||||||
|
)
|
||||||
import Plutarch.Extra.List (pmapMaybe, pnotNull)
|
import Plutarch.Extra.List (pmapMaybe, pnotNull)
|
||||||
|
import Plutarch.Extra.Other (DerivePNewtype' (..))
|
||||||
import Plutarch.Extra.TermCont (pletC, pletFieldsC, pmatchC)
|
import Plutarch.Extra.TermCont (pletC, pletFieldsC, pmatchC)
|
||||||
import Plutarch.Internal (punsafeCoerce)
|
import Plutarch.Internal (punsafeCoerce)
|
||||||
import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..))
|
import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..))
|
||||||
|
|
@ -116,8 +121,16 @@ data ProposalLock = ProposalLock
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
GHC.Generic
|
GHC.Generic
|
||||||
)
|
)
|
||||||
|
deriving anyclass (Generic)
|
||||||
PlutusTx.makeIsDataIndexed ''ProposalLock [('ProposalLock, 0)]
|
deriving
|
||||||
|
( -- | @since 0.1.0
|
||||||
|
PlutusTx.ToData
|
||||||
|
, -- | @since 0.1.0
|
||||||
|
PlutusTx.FromData
|
||||||
|
, -- | @since 0.1.0
|
||||||
|
PlutusTx.UnsafeFromData
|
||||||
|
)
|
||||||
|
via (ProductIsData ProposalLock)
|
||||||
|
|
||||||
{- | Haskell-level redeemer for Stake scripts.
|
{- | Haskell-level redeemer for Stake scripts.
|
||||||
|
|
||||||
|
|
@ -173,8 +186,14 @@ data StakeDatum = StakeDatum
|
||||||
-- for the stake to be usable for deposits and withdrawals.
|
-- for the stake to be usable for deposits and withdrawals.
|
||||||
}
|
}
|
||||||
deriving stock (Show, GHC.Generic)
|
deriving stock (Show, GHC.Generic)
|
||||||
|
deriving anyclass (Generic)
|
||||||
PlutusTx.makeIsDataIndexed ''StakeDatum [('StakeDatum, 0)]
|
deriving
|
||||||
|
( -- | @since 0.1.0
|
||||||
|
PlutusTx.ToData
|
||||||
|
, -- | @since 0.1.0
|
||||||
|
PlutusTx.FromData
|
||||||
|
)
|
||||||
|
via (ProductIsData StakeDatum)
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -215,16 +234,16 @@ newtype PStakeDatum (s :: S) = PStakeDatum
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
PEq
|
PEq
|
||||||
)
|
)
|
||||||
via (PIsDataReprInstances PStakeDatum)
|
via (DerivePNewtype' PStakeDatum)
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
instance Plutarch.Lift.PUnsafeLiftDecl PStakeDatum where type PLifted PStakeDatum = StakeDatum
|
instance Plutarch.Lift.PUnsafeLiftDecl PStakeDatum where type PLifted PStakeDatum = StakeDatum
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
deriving via (DerivePConstantViaData StakeDatum PStakeDatum) instance (Plutarch.Lift.PConstantDecl StakeDatum)
|
deriving via (DerivePConstantViaDataList StakeDatum PStakeDatum) instance (Plutarch.Lift.PConstantDecl StakeDatum)
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
deriving via PAsData (PIsDataReprInstances PStakeDatum) instance PTryFrom PData (PAsData PStakeDatum)
|
deriving via PAsData (DerivePNewtype' PStakeDatum) instance PTryFrom PData (PAsData PStakeDatum)
|
||||||
|
|
||||||
{- | Plutarch-level redeemer for Stake scripts.
|
{- | Plutarch-level redeemer for Stake scripts.
|
||||||
|
|
||||||
|
|
@ -285,15 +304,15 @@ newtype PProposalLock (s :: S) = PProposalLock
|
||||||
deriving anyclass (PIsDataRepr)
|
deriving anyclass (PIsDataRepr)
|
||||||
deriving
|
deriving
|
||||||
(PlutusType, PIsData, PDataFields, PEq)
|
(PlutusType, PIsData, PDataFields, PEq)
|
||||||
via (PIsDataReprInstances PProposalLock)
|
via (DerivePNewtype' PProposalLock)
|
||||||
|
|
||||||
deriving via
|
deriving via
|
||||||
PAsData (PIsDataReprInstances PProposalLock)
|
PAsData (DerivePNewtype' PProposalLock)
|
||||||
instance
|
instance
|
||||||
PTryFrom PData (PAsData PProposalLock)
|
PTryFrom PData (PAsData PProposalLock)
|
||||||
|
|
||||||
instance Plutarch.Lift.PUnsafeLiftDecl PProposalLock where type PLifted PProposalLock = ProposalLock
|
instance Plutarch.Lift.PUnsafeLiftDecl PProposalLock where type PLifted PProposalLock = ProposalLock
|
||||||
deriving via (DerivePConstantViaData ProposalLock PProposalLock) instance (Plutarch.Lift.PConstantDecl ProposalLock)
|
deriving via (DerivePConstantViaDataList ProposalLock PProposalLock) instance (Plutarch.Lift.PConstantDecl ProposalLock)
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,15 +12,14 @@ module Agora.Treasury (module Agora.Treasury) where
|
||||||
|
|
||||||
import Agora.AuthorityToken (singleAuthorityTokenBurned)
|
import Agora.AuthorityToken (singleAuthorityTokenBurned)
|
||||||
import GHC.Generics qualified as GHC
|
import GHC.Generics qualified as GHC
|
||||||
import Generics.SOP (Generic, I (I))
|
import Generics.SOP (Generic)
|
||||||
import Plutarch.Api.V1 (PValidator)
|
import Plutarch.Api.V1 (PValidator)
|
||||||
import Plutarch.Api.V1.Contexts (PScriptPurpose (PMinting))
|
import Plutarch.Api.V1.Contexts (PScriptPurpose (PMinting))
|
||||||
import "plutarch" Plutarch.Api.V1.Value (PValue)
|
import "plutarch" Plutarch.Api.V1.Value (PValue)
|
||||||
import Plutarch.DataRepr (
|
import Plutarch.Builtin (pforgetData)
|
||||||
DerivePConstantViaData (..),
|
import Plutarch.Extra.IsData (DerivePConstantViaEnum (..), EnumIsData (..))
|
||||||
PIsDataReprInstances (PIsDataReprInstances),
|
import Plutarch.Extra.Other (DerivePNewtype' (..))
|
||||||
)
|
import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC)
|
||||||
import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC)
|
|
||||||
import Plutarch.Lift (PConstantDecl (..), PLifted (..), PUnsafeLiftDecl)
|
import Plutarch.Lift (PConstantDecl (..), PLifted (..), PUnsafeLiftDecl)
|
||||||
import Plutarch.TryFrom ()
|
import Plutarch.TryFrom ()
|
||||||
import PlutusLedgerApi.V1.Value (CurrencySymbol)
|
import PlutusLedgerApi.V1.Value (CurrencySymbol)
|
||||||
|
|
@ -40,13 +39,22 @@ data TreasuryRedeemer
|
||||||
Show
|
Show
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
GHC.Generic
|
GHC.Generic
|
||||||
|
, -- | @since 0.2.0
|
||||||
|
Enum
|
||||||
|
, -- | @since 0.2.0
|
||||||
|
Bounded
|
||||||
)
|
)
|
||||||
|
deriving anyclass
|
||||||
-- | @since 0.1.0
|
( -- | @since 0.2.0
|
||||||
PlutusTx.makeIsDataIndexed
|
Generic
|
||||||
''TreasuryRedeemer
|
)
|
||||||
[ ('SpendTreasuryGAT, 0)
|
deriving
|
||||||
]
|
( -- | @since 0.1.0
|
||||||
|
PlutusTx.ToData
|
||||||
|
, -- | @since 0.1.0
|
||||||
|
PlutusTx.FromData
|
||||||
|
)
|
||||||
|
via (EnumIsData TreasuryRedeemer)
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -56,9 +64,7 @@ PlutusTx.makeIsDataIndexed
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
-}
|
-}
|
||||||
newtype PTreasuryRedeemer (s :: S)
|
newtype PTreasuryRedeemer (s :: S)
|
||||||
= -- | Alters treasury parameters, subject to the burning of a
|
= PTreasuryRedeemer (Term s PInteger)
|
||||||
-- governance authority token.
|
|
||||||
PSpendTreasuryGAT (Term s (PDataRecord '[]))
|
|
||||||
deriving stock
|
deriving stock
|
||||||
( -- | @since 0.1.0
|
( -- | @since 0.1.0
|
||||||
GHC.Generic
|
GHC.Generic
|
||||||
|
|
@ -66,8 +72,6 @@ newtype PTreasuryRedeemer (s :: S)
|
||||||
deriving anyclass
|
deriving anyclass
|
||||||
( -- | @since 0.1.0
|
( -- | @since 0.1.0
|
||||||
Generic
|
Generic
|
||||||
, -- | @since 0.1.0
|
|
||||||
PIsDataRepr
|
|
||||||
)
|
)
|
||||||
deriving
|
deriving
|
||||||
( -- | @since 0.1.0
|
( -- | @since 0.1.0
|
||||||
|
|
@ -75,13 +79,7 @@ newtype PTreasuryRedeemer (s :: S)
|
||||||
, -- | @since 0.1.0
|
, -- | @since 0.1.0
|
||||||
PIsData
|
PIsData
|
||||||
)
|
)
|
||||||
via PIsDataReprInstances PTreasuryRedeemer
|
via (DerivePNewtype' PTreasuryRedeemer)
|
||||||
|
|
||||||
-- | @since 0.1.0
|
|
||||||
deriving via
|
|
||||||
PAsData (PIsDataReprInstances PTreasuryRedeemer)
|
|
||||||
instance
|
|
||||||
PTryFrom PData (PAsData PTreasuryRedeemer)
|
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
instance PUnsafeLiftDecl PTreasuryRedeemer where
|
instance PUnsafeLiftDecl PTreasuryRedeemer where
|
||||||
|
|
@ -89,7 +87,7 @@ instance PUnsafeLiftDecl PTreasuryRedeemer where
|
||||||
|
|
||||||
-- | @since 0.1.0
|
-- | @since 0.1.0
|
||||||
deriving via
|
deriving via
|
||||||
(DerivePConstantViaData TreasuryRedeemer PTreasuryRedeemer)
|
(DerivePConstantViaEnum TreasuryRedeemer PTreasuryRedeemer)
|
||||||
instance
|
instance
|
||||||
(PConstantDecl TreasuryRedeemer)
|
(PConstantDecl TreasuryRedeemer)
|
||||||
|
|
||||||
|
|
@ -105,8 +103,6 @@ treasuryValidator ::
|
||||||
CurrencySymbol ->
|
CurrencySymbol ->
|
||||||
ClosedTerm PValidator
|
ClosedTerm PValidator
|
||||||
treasuryValidator gatCs' = plam $ \_datum redeemer ctx' -> unTermCont $ do
|
treasuryValidator gatCs' = plam $ \_datum redeemer ctx' -> unTermCont $ do
|
||||||
(treasuryRedeemer, _) <- ptryFromC redeemer
|
|
||||||
|
|
||||||
-- plet required fields from script context.
|
-- plet required fields from script context.
|
||||||
ctx <- pletFieldsC @["txInfo", "purpose"] ctx'
|
ctx <- pletFieldsC @["txInfo", "purpose"] ctx'
|
||||||
|
|
||||||
|
|
@ -114,7 +110,8 @@ treasuryValidator gatCs' = plam $ \_datum redeemer ctx' -> unTermCont $ do
|
||||||
PMinting _ <- pmatchC ctx.purpose
|
PMinting _ <- pmatchC ctx.purpose
|
||||||
|
|
||||||
-- Ensure redeemer type is valid.
|
-- Ensure redeemer type is valid.
|
||||||
PSpendTreasuryGAT _ <- pmatchC $ pfromData treasuryRedeemer
|
pguardC "Redeemer should be SpendTreasuryGAT" $
|
||||||
|
redeemer #== pforgetData (pconstantData SpendTreasuryGAT)
|
||||||
|
|
||||||
-- Get the minted value from txInfo.
|
-- Get the minted value from txInfo.
|
||||||
txInfo' <- pletC ctx.txInfo
|
txInfo' <- pletC ctx.txInfo
|
||||||
|
|
|
||||||
58
bench.csv
58
bench.csv
|
|
@ -2,36 +2,36 @@ name,cpu,mem,size
|
||||||
Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333327612,830203,3674
|
Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333327612,830203,3674
|
||||||
Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492387542,1197315,3986
|
Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492387542,1197315,3986
|
||||||
Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,456007605,1104500,3859
|
Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,456007605,1104500,3859
|
||||||
Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,90397270,249528,8807
|
Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,96559225,271500,9112
|
||||||
Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,106082031,292993,3609
|
Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,114802087,321461,3723
|
||||||
Agora/Stake/policy/stakeCreation,52241265,152127,2514
|
Agora/Stake/policy/stakeCreation,50939580,148729,2387
|
||||||
Agora/Stake/validator/stakeDepositWithdraw deposit,180880812,492023,4431
|
Agora/Stake/validator/stakeDepositWithdraw deposit,181581435,493259,4413
|
||||||
Agora/Stake/validator/stakeDepositWithdraw withdraw,180880812,492023,4419
|
Agora/Stake/validator/stakeDepositWithdraw withdraw,181581435,493259,4401
|
||||||
Agora/Proposal/policy/proposalCreation,23140177,69194,1519
|
Agora/Proposal/policy/proposalCreation,23140177,69194,1503
|
||||||
Agora/Proposal/validator/cosignature/proposal,338483402,961112,8620
|
Agora/Proposal/validator/cosignature/proposal,325643495,929930,8840
|
||||||
Agora/Proposal/validator/cosignature/stake,126327509,315061,4968
|
Agora/Proposal/validator/cosignature/stake,125315872,312659,4934
|
||||||
Agora/Proposal/validator/voting/proposal,296656410,830692,8549
|
Agora/Proposal/validator/voting/proposal,281136993,794418,8758
|
||||||
Agora/Proposal/validator/voting/stake,121170376,320853,4942
|
Agora/Proposal/validator/voting/stake,120122971,320497,4891
|
||||||
Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,294340341,825452,8447
|
Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,275767527,779218,8665
|
||||||
Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,306801371,861382,8456
|
Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,290854622,820626,8674
|
||||||
Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,295193386,827555,8456
|
Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,279448017,787331,8674
|
||||||
Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished,293210540,822722,8449
|
Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished,275271038,778316,8667
|
||||||
Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished,291801629,820017,8450
|
Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished,276689572,781621,8668
|
||||||
Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished,292932607,822421,8450
|
Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished,277820550,784025,8668
|
||||||
"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",302502183,848154,8500
|
"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",289580399,816378,8718
|
||||||
"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",273224492,773388,8504
|
"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",259859750,740610,8720
|
||||||
"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",268700821,763033,8504
|
"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",256153418,732289,8722
|
||||||
"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",268700821,763033,8504
|
"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",256153418,732289,8722
|
||||||
"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",2908014422,8180225,30018
|
"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",2828039393,7977807,29495
|
||||||
"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",2616129517,7383326,30287
|
"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",2501684605,7096512,29680
|
||||||
"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",2464384686,6936321,30187
|
"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",2393040618,6756747,29664
|
||||||
"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",2464384686,6936321,30187
|
"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",2393040618,6756747,29664
|
||||||
Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806
|
Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806
|
||||||
Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900
|
Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900
|
||||||
Agora/Treasury/Validator/Positive/Allows for effect changes,29938856,79744,1391
|
Agora/Treasury/Validator/Positive/Allows for effect changes,31556709,81546,1452
|
||||||
Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806
|
Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806
|
||||||
Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900
|
Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900
|
||||||
Agora/Governor/policy/GST minting,51007235,144191,2034
|
Agora/Governor/policy/GST minting,55335573,158459,2162
|
||||||
Agora/Governor/validator/proposal creation,317651809,854963,9323
|
Agora/Governor/validator/proposal creation,322870773,877643,9616
|
||||||
Agora/Governor/validator/GATs minting,423756405,1151000,9444
|
Agora/Governor/validator/GATs minting,440461675,1209344,9735
|
||||||
Agora/Governor/validator/mutate governor state,91544121,254987,8908
|
Agora/Governor/validator/mutate governor state,97706076,276959,9217
|
||||||
|
|
|
||||||
|
1960
flake.lock
generated
1960
flake.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -17,7 +17,7 @@
|
||||||
"plutarch/haskell-nix/nixpkgs-unstable";
|
"plutarch/haskell-nix/nixpkgs-unstable";
|
||||||
|
|
||||||
inputs.liqwid-plutarch-extra.url =
|
inputs.liqwid-plutarch-extra.url =
|
||||||
"github:Liqwid-Labs/liqwid-plutarch-extra?ref=main";
|
"github:Liqwid-Labs/liqwid-plutarch-extra?rev=6bcd6068593b00adc4a1afd59b127398ea37d770";
|
||||||
inputs.plutarch-numeric.url =
|
inputs.plutarch-numeric.url =
|
||||||
"github:Liqwid-Labs/plutarch-numeric?ref=main";
|
"github:Liqwid-Labs/plutarch-numeric?ref=main";
|
||||||
inputs.plutarch-safe-money.url =
|
inputs.plutarch-safe-money.url =
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue