PStakeRedeemerHandler doesn't have to be closed

This commit is contained in:
Seungheon Oh 2022-10-18 21:28:11 -05:00
parent e25e55973f
commit 2853f43475
2 changed files with 20 additions and 39 deletions

View file

@ -27,7 +27,6 @@ module Agora.Stake (
PStakeRedeemerHandlerContext (..),
PProposalContext (..),
PStakeRedeemerHandler,
PStakeRedeemerHandlerTerm (..),
StakeRedeemerImpl (..),
-- * Utility functions
@ -39,7 +38,6 @@ module Agora.Stake (
pisCreator,
pisCosigner,
pisIrrelevant,
runStakeRedeemerHandler,
) where
import Agora.Proposal (
@ -574,37 +572,22 @@ instance DerivePlutusType PStakeRedeemerHandlerContext where
-}
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.
@since 1.0.0
-}
data StakeRedeemerImpl = StakeRedeemerImpl
{ onDepositWithdraw :: PStakeRedeemerHandlerTerm
data StakeRedeemerImpl (s :: S) = StakeRedeemerImpl
{ onDepositWithdraw :: Term s PStakeRedeemerHandler
-- ^ Handler for 'DepositWithdraw'.
, onDestroy :: PStakeRedeemerHandlerTerm
, onDestroy :: Term s PStakeRedeemerHandler
-- ^ Handler for 'Destroy'.
, onPermitVote :: PStakeRedeemerHandlerTerm
, onPermitVote :: Term s PStakeRedeemerHandler
-- ^ Handler for 'permitVotes'.
, onRetractVote :: PStakeRedeemerHandlerTerm
, onRetractVote :: Term s PStakeRedeemerHandler
-- ^ Handler for 'RetractVotes'.
, onDelegateTo :: PStakeRedeemerHandlerTerm
, onDelegateTo :: Term s PStakeRedeemerHandler
-- ^ Handler for 'DelegateTo'.
, onClearDelegate :: PStakeRedeemerHandlerTerm
, onClearDelegate :: Term s PStakeRedeemerHandler
-- ^ handler for 'ClearDelegate'.
}

View file

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