PStakeRedeemerHandler doesn't have to be closed

This commit is contained in:
Seungheon Oh 2022-10-18 21:28:11 -05:00
parent 16c0c15c58
commit 735fa145e6
2 changed files with 20 additions and 39 deletions

View file

@ -27,7 +27,6 @@ module Agora.Stake (
PStakeRedeemerHandlerContext (..), PStakeRedeemerHandlerContext (..),
PProposalContext (..), PProposalContext (..),
PStakeRedeemerHandler, PStakeRedeemerHandler,
PStakeRedeemerHandlerTerm (..),
StakeRedeemerImpl (..), StakeRedeemerImpl (..),
-- * Utility functions -- * Utility functions
@ -39,7 +38,6 @@ module Agora.Stake (
pisCreator, pisCreator,
pisCosigner, pisCosigner,
pisIrrelevant, pisIrrelevant,
runStakeRedeemerHandler,
) where ) where
import Agora.Proposal ( import Agora.Proposal (
@ -574,37 +572,22 @@ instance DerivePlutusType PStakeRedeemerHandlerContext where
-} -}
type PStakeRedeemerHandler = PStakeRedeemerHandlerContext :--> PUnit type PStakeRedeemerHandler = PStakeRedeemerHandlerContext :--> PUnit
{- | Newtype wrapper around @'ClosedTerm' 'PStakeRedeemerHandler'@ to allow type
inference to work.
@since 1.0.0
-}
newtype PStakeRedeemerHandlerTerm
= PStakeRedeemerHandlerTerm
(ClosedTerm PStakeRedeemerHandler)
-- | @since 1.0.0
runStakeRedeemerHandler ::
PStakeRedeemerHandlerTerm ->
ClosedTerm PStakeRedeemerHandler
runStakeRedeemerHandler (PStakeRedeemerHandlerTerm t) = t
{- | A collection of stake redeemer handlers for each stake redeemers. {- | A collection of stake redeemer handlers for each stake redeemers.
@since 1.0.0 @since 1.0.0
-} -}
data StakeRedeemerImpl = StakeRedeemerImpl data StakeRedeemerImpl (s :: S) = StakeRedeemerImpl
{ onDepositWithdraw :: PStakeRedeemerHandlerTerm { onDepositWithdraw :: Term s PStakeRedeemerHandler
-- ^ Handler for 'DepositWithdraw'. -- ^ Handler for 'DepositWithdraw'.
, onDestroy :: PStakeRedeemerHandlerTerm , onDestroy :: Term s PStakeRedeemerHandler
-- ^ Handler for 'Destroy'. -- ^ Handler for 'Destroy'.
, onPermitVote :: PStakeRedeemerHandlerTerm , onPermitVote :: Term s PStakeRedeemerHandler
-- ^ Handler for 'permitVotes'. -- ^ Handler for 'permitVotes'.
, onRetractVote :: PStakeRedeemerHandlerTerm , onRetractVote :: Term s PStakeRedeemerHandler
-- ^ Handler for 'RetractVotes'. -- ^ Handler for 'RetractVotes'.
, onDelegateTo :: PStakeRedeemerHandlerTerm , onDelegateTo :: Term s PStakeRedeemerHandler
-- ^ Handler for 'DelegateTo'. -- ^ Handler for 'DelegateTo'.
, onClearDelegate :: PStakeRedeemerHandlerTerm , onClearDelegate :: Term s PStakeRedeemerHandler
-- ^ handler for 'ClearDelegate'. -- ^ handler for 'ClearDelegate'.
} }

View file

@ -42,10 +42,8 @@ import Agora.Stake (
PStakeRedeemerHandlerContext ( PStakeRedeemerHandlerContext (
PStakeRedeemerHandlerContext PStakeRedeemerHandlerContext
), ),
PStakeRedeemerHandlerTerm (PStakeRedeemerHandlerTerm),
StakeRedeemerImpl (..), StakeRedeemerImpl (..),
pstakeLocked, pstakeLocked,
runStakeRedeemerHandler,
) )
import Agora.Stake.Redeemers ( import Agora.Stake.Redeemers (
pclearDelegate, pclearDelegate,
@ -246,7 +244,7 @@ stakePolicy =
@since 1.0.0 @since 1.0.0
-} -}
mkStakeValidator :: mkStakeValidator ::
StakeRedeemerImpl -> StakeRedeemerImpl s ->
Term s PCurrencySymbol -> Term s PCurrencySymbol ->
Term s PAssetClass -> Term s PAssetClass ->
Term s PAssetClass -> Term s PAssetClass ->
@ -539,17 +537,17 @@ mkStakeValidator impl sstSymbol pstClass gstClass =
pure $ pure $
popaque $ popaque $
pmatch stakeRedeemer $ \case pmatch stakeRedeemer $ \case
PDestroy _ -> runStakeRedeemerHandler impl.onDestroy # noMetadataContext PDestroy _ -> impl.onDestroy # noMetadataContext
PPermitVote _ -> runStakeRedeemerHandler impl.onPermitVote # noMetadataContext PPermitVote _ -> impl.onPermitVote # noMetadataContext
PRetractVotes _ -> runStakeRedeemerHandler impl.onRetractVote # noMetadataContext PRetractVotes _ -> impl.onRetractVote # noMetadataContext
PClearDelegate _ -> runStakeRedeemerHandler impl.onClearDelegate # noMetadataContext PClearDelegate _ -> impl.onClearDelegate # noMetadataContext
PDelegateTo ((pfield @"pkh" #) -> pkh) -> PDelegateTo ((pfield @"pkh" #) -> pkh) ->
runStakeRedeemerHandler impl.onDelegateTo impl.onDelegateTo
#$ mkRedeemerhandlerContext #$ mkRedeemerhandlerContext
#$ pcon #$ pcon
$ PSetDelegateTo pkh $ PSetDelegateTo pkh
PDepositWithdraw ((pfield @"delta" #) -> delta) -> PDepositWithdraw ((pfield @"delta" #) -> delta) ->
runStakeRedeemerHandler impl.onDepositWithdraw #$ mkRedeemerhandlerContext impl.onDepositWithdraw #$ mkRedeemerhandlerContext
#$ pcon #$ pcon
$ PDepositWithdrawDelta delta $ PDepositWithdrawDelta delta
@ -608,10 +606,10 @@ stakeValidator =
plam $ plam $
mkStakeValidator $ mkStakeValidator $
StakeRedeemerImpl StakeRedeemerImpl
{ onDepositWithdraw = PStakeRedeemerHandlerTerm pdepositWithdraw { onDepositWithdraw = pdepositWithdraw
, onDestroy = PStakeRedeemerHandlerTerm pdestroy , onDestroy = pdestroy
, onPermitVote = PStakeRedeemerHandlerTerm ppermitVote , onPermitVote = ppermitVote
, onRetractVote = PStakeRedeemerHandlerTerm pretractVote , onRetractVote = pretractVote
, onDelegateTo = PStakeRedeemerHandlerTerm pdelegateTo , onDelegateTo = pdelegateTo
, onClearDelegate = PStakeRedeemerHandlerTerm pclearDelegate , onClearDelegate = pclearDelegate
} }