diff --git a/agora/Agora/Credential.hs b/agora/Agora/Credential.hs index b269662..c772851 100644 --- a/agora/Agora/Credential.hs +++ b/agora/Agora/Credential.hs @@ -14,30 +14,46 @@ import Plutarch.Extra.ScriptContext (ptxSignedBy) import Plutarch.Extra.TermCont (pmatchC) import PlutusLedgerApi.V2 (Credential) +{- | This type represents a general purpose authority which can be used + to check for approval. + + The most basic case is simply a PubKeyCredential. + + @since 1.0.0 +-} type AuthorizationCredential = Credential type PAuthorizationCredential = PCredential +{- | Context required in order to check 'AuthorizationCredential'. + + @since 1.0.0 +-} data PAuthorizationContext (s :: S) = PAuthorizationContext { signatories :: Term s (PBuiltinList (PAsData PPubKeyHash)) , inputs :: Term s (PBuiltinList PTxInInfo) } deriving stock - ( -- | @since 0.2.0 + ( -- | @since 1.0.0 Generic ) deriving anyclass - ( -- | @since 0.2.0 + ( -- | @since 1.0.0 PlutusType - , -- | @since 0.2.0 + , -- | @since 1.0.0 PEq ) +-- | @since 1.0.0 instance DerivePlutusType PAuthorizationContext where type DPTStrat _ = PlutusTypeScott +{- | Build up 'PAuthorizationContext' from fields. + + @since 1.0.0 +-} authorizationContext :: forall {r} {s :: S}. ( HasField "inputs" r (Term s (PBuiltinList PTxInInfo)) @@ -48,6 +64,10 @@ authorizationContext :: authorizationContext f = pcon (PAuthorizationContext f.signatories f.inputs) +{- | Check for authorization by credential. + + @since 1.0.0 +-} pauthorizedBy :: forall (s :: S). Term s (PAuthorizationContext :--> PAuthorizationCredential :--> PBool) pauthorizedBy = phoistAcyclic $ plam $ \ctx credential -> unTermCont $ do